{"id":57405,"date":"2026-09-11T16:31:17","date_gmt":"2026-09-11T14:31:17","guid":{"rendered":"https:\/\/triptherapie.nl\/?page_id=57405"},"modified":"2026-09-11T17:01:34","modified_gmt":"2026-09-11T15:01:34","slug":"tripsitter-dienst","status":"publish","type":"page","link":"https:\/\/triptherapie.nl\/de\/tripsitter-service\/","title":{"rendered":"Tripsitter-Dienst"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"57405\" class=\"elementor elementor-57405\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-9a8fece e-flex e-con-boxed e-con e-parent\" data-id=\"9a8fece\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-cc71af8 e-con-full e-flex e-con e-child\" data-id=\"cc71af8\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-2d07cf2 elementor-widget elementor-widget-heading\" data-id=\"2d07cf2\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\" id=\"tripsitter-service-in-heel-nederland\">Tripsitter service in heel Nederland<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-cb6f0d1 e-con-full e-flex e-con e-child\" data-id=\"cb6f0d1\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-128fd6c elementor-widget elementor-widget-text-editor\" data-id=\"128fd6c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Bij Triptherapie werken meerdere tripsitters en therapeuten die in heel Nederland op locatie van de klant werken. Wij kunnen daarom in heel Nederland (vaste land) bij jou thuis, in een vakantiewoning, hotel of Airbnb begeleiden tijdens jouw psychedelische trip.\u00a0<\/p><p>Standaard zit in ons pakket:<\/p><ol><li>Een screening voor veiligheid<\/li><li>Tips ter voorbereiding<\/li><li>Een voorbereidend telefonisch gesprek<\/li><li>Zes uur tripbegeleiding door tripsitter naar keuze<\/li><li>Telefonisch nagesprek<\/li><\/ol>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-d3fc36b e-con-full e-flex e-con e-child\" data-id=\"d3fc36b\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-23cbada elementor-widget elementor-widget-html\" data-id=\"23cbada\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<div class=\"tt-lead-to-werkgebied\">\n  <form id=\"tt-location-form\" novalidate>\n    <div class=\"tt-field\">\n      <label for=\"tt-city\">Woonplaats<\/label>\n      <input id=\"tt-city\" name=\"city\" type=\"text\" required\n             placeholder=\"Bijv. Utrecht\"\n             aria-required=\"true\"\n             pattern=\"^[A-Za-z\u00c0-\u00ff' -]{2,}$\"\n             title=\"Gebruik een plaatsnaam (letters, spaties en koppeltekens).\" \/>\n    <\/div>\n\n    <button type=\"submit\" class=\"tt-btn\">Bekijk beschikbaarheid & prijs<\/button>\n  <\/form>\n<\/div>\n\n<style>\n  .tt-lead-to-werkgebied {\n    display:flex;\n    justify-content:center;\n    align-items:center;\n    flex-direction:column;\n    \n    text-align:center;\n  }\n  .tt-field { margin-bottom: 12px; width:100%; max-width:300px; }\n  .tt-field label { display:block; font-weight:600; margin-bottom:6px; }\n  .tt-field input {\n    width:100%; padding:12px; border:1px solid #ccc; border-radius:8px;\n    font-size:16px; outline:none;\n    text-align:center;\n  }\n  .tt-field input:focus { border-color:#b20091; box-shadow:0 0 0 2px rgba(178,0,145,.2); }\n  .tt-btn {\n    display:inline-block; padding:12px 18px; border-radius:5px; border:0; cursor:pointer;\n    font-weight:600; font-size:16px; background:#b20091; color:#fff;\n    margin-top:10px;\n  }\n  .tt-btn:hover { filter:brightness(1.07); }\n<\/style>\n\n<script>\n  (function() {\n    var form = document.getElementById('tt-location-form');\n    var cityEl = document.getElementById('tt-city');\n\n    form.addEventListener('submit', function(e) {\n      e.preventDefault();\n      if (!cityEl.checkValidity()) { cityEl.reportValidity(); return; }\n\n      var city = encodeURIComponent(cityEl.value.trim());\n      var target = \"?zoek=\" \n                   + city + \"#prijsberekening-sessie-op-locatie\";\n\n      window.location.href = target;\n    });\n  })();\n<\/script>\n\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-a60fab6 e-flex e-con-boxed e-con e-parent\" data-id=\"a60fab6\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-1fe8ce0 elementor-widget elementor-widget-heading\" data-id=\"1fe8ce0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\" id=\"ervaring-met-diverse-middelen\">Ervaring met diverse middelen<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c155dc9 elementor-widget elementor-widget-text-editor\" data-id=\"c155dc9\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Ons team heeft vooral zeer veel ervaring met hallucinogene psychedelica, zoals truffels, LSD en ayahuasca. Daarnaast hebben we op de tweede plek ook veel ervaring met het begeleiden van personen die onder invloed waren van MDMA of soortgelijke stoffen. Op de derde plek zijn enkelen van ons team ervaren met het begeleiden van ketamine-sessies (met soortgelijke stoffen). Als laatste hebben we mensen bijgestaan die kortstondige vape-trips deden, bijvoorbeeld DMT en 5-Meo-DMT.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-1659f76 e-flex e-con-boxed e-con e-parent\" data-id=\"1659f76\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-a7a0318 elementor-widget elementor-widget-heading\" data-id=\"a7a0318\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\" id=\"wij-verstrekken-alleen-legale-middelen\">Wij verstrekken alleen legale middelen<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-034af0a elementor-widget elementor-widget-text-editor\" data-id=\"034af0a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Bij het begeleiden van psychedelische sessies, kunnen wij alleen legale middelen verstrekken. Van de legale middelen zijn truffels de meest bekende soort. Er zijn ook legale alternatieven voor eerder genoemde stoffen.<\/p><p>Een optie die ook veel gebruikt wordt is dat onze klanten zelf een middel willen gebruiken en dat wij alleen de begeleiding leveren. In dat geval huur je een tripsitter bij ons dus puur in voor het tripsitten.<\/p><p>Heb je een specifiek middel in gedachten en is deze niet zo gangbaar? Vraag dan eerst even aan ons welke van onze begeleiders er ervaring mee heeft en jou zou willen bijstaan.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6f49e32 elementor-align-center elementor-widget elementor-widget-button\" data-id=\"6f49e32\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/triptherapie.nl\/contact\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Contact<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-ba71292 e-con e-atomic-element e-flexbox-base e-default-div e-2242b47 \" data-id=\"ba71292\" data-element_type=\"e-flexbox\" data-e-type=\"e-flexbox\" data-interaction-id=\"ba71292\" data-e-type=\"e-flexbox\" data-id=\"ba71292\">\n    \t\t<div class=\"elementor-element elementor-element-6f4b8c1 elementor-widget elementor-widget-template\" data-id=\"6f4b8c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"template.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-template\">\n\t\t\t\t\t<div data-elementor-type=\"container\" data-elementor-id=\"51226\" class=\"elementor elementor-51226\" data-elementor-post-type=\"elementor_library\">\n\t\t\t\t<div class=\"elementor-element elementor-element-7257ede e-con-full e-flex e-con e-parent\" data-id=\"7257ede\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;gradient&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-519f602 e-con-full e-flex e-con e-child\" data-id=\"519f602\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-8b78ba2 elementor-widget elementor-widget-menu-anchor\" data-id=\"8b78ba2\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"menu-anchor.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-menu-anchor\" id=\"bereken\"><\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c7c84cc elementor-widget elementor-widget-heading\" data-id=\"c7c84cc\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\" id=\"prijsberekening-sessie-op-locatie\">Prijsberekening sessie op locatie<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-63ccb5a elementor-widget elementor-widget-text-editor\" data-id=\"63ccb5a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p style=\"text-align: center;\">Reken hier eenvoudig uit wat de prijs is voor een priv\u00e9 psychedelische sessie voor \u00e9\u00e9n tot drie deelnemers op jouw eigen of op \u00e9\u00e9n van onze locaties. Bij sessies op de locaties van Triptherapie is altijd \u00e9\u00e9n overnachting plus eten en drinken inbegrepen.<\/p><p style=\"text-align: center;\">Witte tekst: De begeleider werkt op jouw locatie.<br \/><span style=\"color: #ff6600;\">Oranje tekst<\/span>: De begeleider woont net buiten jouw werkgebied, maar in overleg lukt het vaak wel.<br \/><span style=\"color: #ff0000;\">Rode tekst<\/span>: Je woont te ver weg. Overweeg om een accommodatie dichterbij te huren, een andere begeleider of deelname aan een <span style=\"color: #cc99ff;\"><a style=\"color: #cc99ff;\" href=\"https:\/\/triptherapie.nl\/groepssessies\/#agenda-open-groep-ceremonies\">groepsceremonie op \u00e9\u00e9n van onze locaties<\/a><\/span>.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8566c87 elementor-widget elementor-widget-text-editor\" data-id=\"8566c87\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<h3 style=\"text-align: center;\" id=\"voer-je-gewenste-locatie-in\">Voer je gewenste locatie in:<\/h3>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-508468a elementor-widget elementor-widget-html\" data-id=\"508468a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t\t\t\t\t\t<style>\n  #distance-tool {\n    margin: 20px auto;\n    padding: 0 10px;\n    max-width: 1200px;\n  }\n\n  :where(#distance-tool) .input-container {\n    display: flex;\n    align-items: center;\n    margin-bottom: 20px;\n    gap: 16px;\n    flex-wrap: wrap;\n  }\n\n  :where(#distance-tool) .input-container input,\n  :where(#distance-tool) .input-container button {\n    box-sizing: border-box;\n    height: 52px;\n    font-size: 17px;\n  }\n\n  :where(#distance-tool) .input-container input {\n    flex: 1;\n    min-width: 260px;\n    padding: 8px 16px;\n  }\n\n  :where(#distance-tool) .calculate-btn {\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    box-sizing: border-box;\n    padding: 8px 22px;\n    line-height: 1.2;\n    text-align: center;\n    color: white;\n    background-color: #b20091;\n    border: none;\n    cursor: pointer;\n  }\n\n  :where(#distance-tool) .calculate-btn:hover {\n    opacity: 0.92;\n  }\n\n  :where(#distance-tool) .content-container {\n    display: flex;\n    flex-direction: column;\n    gap: 20px;\n  }\n\n  :where(#distance-tool) .left-column,\n  :where(#distance-tool) .right-column {\n    width: 100%;\n  }\n\n  @media (min-width: 768px) {\n    :where(#distance-tool) .content-container {\n      flex-direction: row;\n      align-items: flex-start;\n    }\n\n    :where(#distance-tool) .left-column {\n      flex: 1.15;\n      min-width: 0;\n    }\n\n    :where(#distance-tool) .right-column {\n      flex: 0.85;\n      min-width: 0;\n    }\n  }\n\n  :where(#distance-tool) .person-controls,\n  :where(#distance-tool) .map-controls {\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    gap: 8px;\n    margin: 0 0 18px 0;\n    text-align: center;\n  }\n\n  :where(#distance-tool) .toggle-label {\n    font-weight: 700;\n    color: inherit;\n  }\n\n  :where(#distance-tool) .toggle-group {\n    display: inline-flex;\n    flex-wrap: wrap;\n    justify-content: center;\n    gap: 10px;\n  }\n\n  :where(#distance-tool) .toggle-group input[type=\"radio\"] {\n    position: absolute;\n    opacity: 0;\n    pointer-events: none;\n  }\n\n  :where(#distance-tool) .toggle-option {\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    min-height: 42px;\n    min-width: 125px;\n    padding: 8px 14px;\n    border: none;\n    background-color: black;\n    color: white;\n    cursor: pointer;\n    user-select: none;\n    font-size: 16px;\n    line-height: 1.2;\n    transition: opacity 0.2s ease;\n    box-sizing: border-box;\n    text-align: center;\n  }\n\n  :where(#distance-tool) .toggle-option:hover {\n    opacity: 0.92;\n  }\n\n  :where(#distance-tool) .toggle-group input[type=\"radio\"]:checked + .toggle-option {\n    background-color: #7d0066;\n    color: white;\n  }\n\n  :where(#distance-tool) .toggle-group input[type=\"radio\"]:focus-visible + .toggle-option {\n    outline: 2px solid #fff;\n    outline-offset: 2px;\n  }\n\n  :where(#distance-tool) #results {\n    margin-top: 0;\n  }\n\n  :where(#distance-tool) .person-row {\n    display: flex;\n    flex-wrap: nowrap;\n    align-items: center;\n    justify-content: flex-start;\n    gap: 8px;\n    min-width: 0;\n  }\n\n  :where(#distance-tool) .person-name {\n    display: inline-block;\n    font-weight: 700;\n    min-width: 0;\n    overflow-wrap: anywhere;\n  }\n  :where(#distance-tool) .person-profile-link {\n    color: inherit;\n    text-decoration: none;\n    cursor: pointer;\n  }\n  :where(#distance-tool) .person-profile-link:hover,\n  :where(#distance-tool) .person-profile-link:focus-visible {\n    text-decoration: underline;\n    text-underline-offset: 2px;\n  }\n\n  :where(#distance-tool) .person-actions {\n    display: inline-flex;\n    flex: 0 0 auto;\n    align-items: center;\n    margin: 0;\n  }\n\n  :where(#distance-tool) .action-link {\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    min-height: 32px;\n    box-sizing: border-box;\n    padding: 6px 9px;\n    border: 1px solid #b20091;\n    border-radius: 5px;\n    background: #fff;\n    color: #780062;\n    text-decoration: none;\n    font-size: 13px;\n    font-weight: 600;\n    line-height: 1.2;\n    white-space: nowrap;\n  }\n\n  :where(#distance-tool) .action-link.primary {\n    background: #b20091;\n    color: #fff;\n    border-color: #b20091;\n  }\n\n  :where(#distance-tool) .action-link:hover,\n  :where(#distance-tool) .action-link:focus-visible {\n    filter: brightness(.94);\n    outline: 2px solid #b20091;\n    outline-offset: 2px;\n  }\n\n  :where(#distance-tool) .strike td {\n    color: red;\n    text-decoration: line-through;\n  }\n\n  :where(#distance-tool) .table-container {\n    width: 100%;\n    overflow-x: auto;\n    margin-bottom: 18px;\n  }\n\n  :where(#distance-tool) .table-container table th,\n  :where(#distance-tool) .table-container table td {\n    text-align: center;\n    vertical-align: middle;\n  }\n\n  :where(#distance-tool) .table-container .action-link {\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    text-align: center;\n    vertical-align: middle;\n  }\n\n  :where(#distance-tool) #map {\n    width: 100%;\n    height: 340px;\n    margin-top: 0;\n    position: relative;\n    top: 0;\n  }\n\n  :where(#distance-tool) .explanation-row {\n    margin-top: 24px;\n  }\n\n  :where(#distance-tool) .explanation-toggle {\n    width: 100%;\n    background: linear-gradient(90deg, #00000050 0%, #0000004d 100%) !important;\n    color: white;\n    border: none;\n    padding: 12px 16px;\n    font-size: 17px;\n    text-align: left;\n    cursor: pointer;\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    box-sizing: border-box;\n  }\n\n  :where(#distance-tool) .explanation-toggle:hover {\n    opacity: 0.92;\n  }\n\n  :where(#distance-tool) .explanation-toggle .icon {\n    display: inline-flex;\n    transition: transform 0.2s ease;\n  }\n\n  :where(#distance-tool) .explanation-toggle .icon svg {\n    width: 1em;\n    height: 1em;\n    fill: none;\n    stroke: currentColor;\n    stroke-width: 2.5;\n    stroke-linecap: round;\n    stroke-linejoin: round;\n  }\n\n  :where(#distance-tool) .explanation-toggle.active .icon {\n    transform: rotate(180deg);\n  }\n\n  :where(#distance-tool) .explanation-content {\n    display: none;\n    border: 1px solid #222;\n    border-top: none;\n    padding: 18px;\n    background: black;\n    color: white;\n    line-height: 1.6;\n  }\n\n  :where(#distance-tool) .explanation-content.open {\n    display: block;\n  }\n\n  :where(#distance-tool) .explanation-content h2 {\n    margin: 0 0 12px 0;\n    font-size: 24px;\n    color: #f5f5f5;\n  }\n\n  :where(#distance-tool) .explanation-content h3 {\n    margin: 22px 0 10px 0;\n    font-size: 20px;\n    color: #f5f5f5;\n  }\n\n  :where(#distance-tool) .explanation-content p {\n    margin: 0 0 14px 0;\n  }\n\n  :where(#distance-tool) .explanation-content a {\n    color: #ff66d9;\n  }\n\n  @media (max-width: 1024px) {\n    \/* Verberg onbeschikbare begeleiders als volledige tabelrij, zodat ze\n       nooit als lege kaart in het mobiele CSS-grid achterblijven. *\/\n    #distance-tool #results .table-container table tbody > tr.strike,\n    #distance-tool #results .table-container table > tr.strike,\n    #distance-tool #results .table-container tr.strike {\n      display: none !important;\n      visibility: collapse !important;\n      height: 0 !important;\n      min-height: 0 !important;\n      max-height: 0 !important;\n      margin: 0 !important;\n      padding: 0 !important;\n      border: 0 !important;\n      overflow: hidden !important;\n    }\n    #distance-tool #results .table-container tr.strike > td,\n    #distance-tool #results .table-container tr.strike > th {\n      display: none !important;\n      height: 0 !important;\n      min-height: 0 !important;\n      padding: 0 !important;\n      border: 0 !important;\n    }\n    :where(#distance-tool) .input-container {\n      gap: 10px;\n      margin-bottom: 16px;\n    }\n\n    :where(#distance-tool) .input-container input,\n    :where(#distance-tool) .input-container button {\n      height: 46px;\n      font-size: 16px;\n    }\n\n    :where(#distance-tool) .input-container input {\n      padding: 6px 12px;\n    }\n\n    :where(#distance-tool) .calculate-btn {\n      padding: 6px 18px;\n    }\n\n    :where(#distance-tool) .toggle-group {\n      gap: 8px;\n    }\n\n    :where(#distance-tool) .toggle-option {\n      min-width: 100px;\n      min-height: 36px;\n      padding: 6px 10px;\n      font-size: 14px;\n    }\n\n    :where(#distance-tool) .explanation-toggle {\n      font-size: 16px;\n    }\n  }\n\n  @media (max-width: 600px) {\n    :where(#distance-tool) { padding: 0 4px; }\n    :where(#distance-tool) .input-container { flex-wrap: nowrap; }\n    :where(#distance-tool) .input-container input { min-width: 0; width: 100%; }\n    :where(#distance-tool) .input-container button { flex: 0 0 auto; }\n    :where(#distance-tool) .table-container { overflow: visible; }\n    :where(#distance-tool) .table-container { min-width: 0; }\n    :where(#distance-tool) .table-container table {\n      display: block;\n      width: 100% !important;\n      border: 0 !important;\n    }\n\n    \/* Verberg de volledige tabelkoprij op mobiel, zodat die geen lege kaart vormt.\n       De koprij kan in deze HTML als eerste TR in TBODY staan, niet alleen in THEAD. *\/\n    :where(#distance-tool) #results .table-container table tr:has(th),\n    :where(#distance-tool) #results .table-container table thead tr,\n    :where(#distance-tool) #results .table-container table tbody > tr:first-child:not(.strike):has(td[colspan]) {\n      display: none !important;\n      height: 0 !important;\n      min-height: 0 !important;\n      max-height: 0 !important;\n      padding: 0 !important;\n      margin: 0 !important;\n      border: 0 !important;\n      background: transparent !important;\n      visibility: collapse !important;\n    }\n    \/* Strike-rows must not occupy a grid cell on mobile. *\/\n    #distance-tool #results .table-container tbody > tr.strike,\n    #distance-tool #results .table-container > table > tr.strike,\n    #distance-tool #results .table-container tr[data-mobile-unavailable=\"true\"] {\n      display: none !important;\n      height: 0 !important;\n      min-height: 0 !important;\n      max-height: 0 !important;\n      padding: 0 !important;\n      margin: 0 !important;\n      border: 0 !important;\n      background: transparent !important;\n    }\n    :where(#distance-tool) .table-container tbody {\n      display: grid;\n      grid-template-columns: repeat(2, minmax(0, 1fr));\n      gap: 8px;\n      width: 100%;\n    }\n    :where(#distance-tool) .table-container thead,\n    :where(#distance-tool) .table-container th { display: none; }\n    :where(#distance-tool) .table-container tr {\n      display: grid;\n      grid-template-columns: minmax(0, 1fr) auto;\n      align-content: start;\n      min-width: 0;\n      width: auto !important;\n      margin: 0;\n      border: 1px solid #d8d8d8;\n      border-radius: 8px;\n      overflow: hidden;\n      background: #fff;\n      color: #222;\n      text-decoration: none;\n    }\n    :where(#distance-tool) .table-container td {\n      display: flex;\n      align-items: center;\n      justify-content: space-between;\n      gap: 5px;\n      min-width: 0;\n      text-align: right;\n      padding: 5px 6px !important;\n      border: 0 !important;\n      border-bottom: 1px solid #eee !important;\n      overflow-wrap: anywhere;\n      font-size: 12px;\n    }\n    :where(#distance-tool) .table-container td:first-child {\n      grid-column: 1;\n      grid-row: 1;\n      display: flex;\n      align-items: center;\n      justify-content: flex-start;\n      text-align: left;\n      background: #f8f5f8;\n      padding: 7px 6px !important;\n      border-bottom: 0 !important;\n    }\n    :where(#distance-tool) .table-container td:not(:first-child):not(:last-child) {\n      grid-column: 1 \/ -1;\n    }\n    :where(#distance-tool) .table-container td:last-child {\n      grid-column: 2;\n      grid-row: 1;\n      display: flex;\n      align-items: center;\n      justify-content: flex-end;\n      padding: 5px 5px !important;\n      border-bottom: 0 !important;\n      background: #f8f5f8;\n    }\n    :where(#distance-tool) .table-container td:not(:first-child):not(:last-child)::before {\n      content: attr(data-label);\n      flex: 0 0 36%;\n      max-width: 36%;\n      font-weight: 700;\n      text-align: left;\n      color: #555;\n    }\n    :where(#distance-tool) .table-container td:first-child::before,\n    :where(#distance-tool) .table-container td:last-child::before { display: none; }\n    :where(#distance-tool) .person-name { font-size: 15px; line-height: 1.15; overflow-wrap: normal; }\n    \/* Houd namen op mobiel zwart voor voldoende contrast, ook als ze klikbaar zijn. *\/\n    :where(#distance-tool) .person-profile-link,\n    :where(#distance-tool) .location-page-link { color: #000 !important; }\n    :where(#distance-tool) .person-row { gap: 6px; }\n    :where(#distance-tool) .action-link { min-height: 29px; padding: 5px 6px; font-size: 11px; }\n    :where(#distance-tool) .table-container td .action-link { margin: 0; }\n\n    :where(#distance-tool) .input-container {\n      gap: 8px;\n      margin-bottom: 14px;\n    }\n\n    :where(#distance-tool) .input-container input,\n    :where(#distance-tool) .input-container button {\n      height: 42px;\n      font-size: 15px;\n    }\n\n    :where(#distance-tool) .input-container input {\n      padding: 6px 10px;\n      min-width: 0;\n    }\n\n    :where(#distance-tool) .calculate-btn {\n      display: inline-flex;\n      align-items: center;\n      justify-content: center;\n      padding: 6px 14px;\n      line-height: 1.2;\n      text-align: center;\n    }\n\n    :where(#distance-tool) .toggle-group {\n      gap: 6px;\n    }\n\n    :where(#distance-tool) .toggle-option {\n      min-width: 88px;\n      min-height: 34px;\n      padding: 6px 9px;\n      font-size: 13px;\n    }\n\n    :where(#distance-tool) .toggle-label {\n      font-size: 15px;\n    }\n\n    :where(#distance-tool) .explanation-content {\n      padding: 14px;\n    }\n\n    :where(#distance-tool) .explanation-content h2 {\n      font-size: 21px;\n    }\n\n    :where(#distance-tool) .explanation-content h3 {\n      font-size: 18px;\n    }\n  }\n<\/style>\n\n<div id=\"distance-tool\">\n  <div class=\"input-container\">\n    <label for=\"startLocation\" style=\"display:none;\">Startlocatie<\/label>\n    <input type=\"text\" id=\"startLocation\" placeholder=\"Bijv. Amsterdam\" aria-label=\"Startlocatie\">\n    <button id=\"calculateBtn\" class=\"calculate-btn\" type=\"button\">Bereken<\/button>\n  <\/div>\n\n  <div class=\"content-container\">\n    <div class=\"left-column\">\n      <div class=\"person-controls\">\n        <div class=\"toggle-label\">Aantal personen:<\/div>\n        <div class=\"toggle-group\" id=\"personCountGroup\">\n          <input type=\"radio\" name=\"personCount\" id=\"persons1\" value=\"1\" checked>\n          <label class=\"toggle-option\" for=\"persons1\">E\u00e9n<\/label>\n\n          <input type=\"radio\" name=\"personCount\" id=\"persons2\" value=\"2\">\n          <label class=\"toggle-option\" for=\"persons2\">Twee<\/label>\n\n          <input type=\"radio\" name=\"personCount\" id=\"persons3\" value=\"3\">\n          <label class=\"toggle-option\" for=\"persons3\">Drie<\/label>\n        <\/div>\n      <\/div>\n\n      <div id=\"results\"><\/div>\n    <\/div>\n\n    <div class=\"right-column\">\n      <div class=\"map-controls\">\n        <div class=\"toggle-label\">Kaartweergave:<\/div>\n        <div class=\"toggle-group\" id=\"sessionTypeGroup\">\n          <input type=\"radio\" name=\"sessionType\" id=\"mapOwn\" value=\"own\" checked>\n          <label class=\"toggle-option\" for=\"mapOwn\">Eigen locatie<\/label>\n\n          <input type=\"radio\" name=\"sessionType\" id=\"mapLocation\" value=\"location\">\n          <label class=\"toggle-option\" for=\"mapLocation\">Triptherapie locatie<\/label>\n        <\/div>\n      <\/div>\n\n      <div id=\"map\"><\/div>\n    <\/div>\n  <\/div>\n\n  <div class=\"explanation-row\">\n    <button id=\"explanationToggle\" class=\"explanation-toggle\" type=\"button\" aria-expanded=\"false\" aria-controls=\"explanationContent\">\n      <span>Uitleg gebruik rekentool<\/span>\n      <span class=\"icon\" aria-hidden=\"true\">\n        <svg viewBox=\"0 0 24 24\"><polyline points=\"6 9 12 15 18 9\"><\/polyline><\/svg>\n      <\/span>\n    <\/button>\n\n    <div id=\"explanationContent\" class=\"explanation-content\">\n      <h3 id=\"uitleg-van-de-keuzehulp\">Uitleg van de Triptherapie-keuzehulp<\/h3>\n      <p>Deze keuzehulp vergelijkt sessies met een begeleider op je eigen locatie met sessies op een vaste Triptherapie-locatie. Je ziet indicatieve prijzen en, na invoer van een startlocatie, de bijbehorende afstanden en reistijden. De uitkomsten helpen opties vergelijken, maar vormen geen bevestiging van beschikbaarheid of een reservering.<\/p>\n\n      <h3 id=\"startlocatie-en-berekening\">Startlocatie en berekening<\/h3>\n      <p>Vul bovenaan een plaats of adres in en kies <strong>Bereken<\/strong>. De tool gebruikt de startlocatie om reisafstand en reistijd te berekenen. Zonder startlocatie worden de opties en basisprijzen getoond, maar ontbreken de locatiegebonden reisgegevens.<\/p>\n      <p>Bij een sessie op je eigen locatie worden de reiskosten van de begeleider meegenomen in het totaal. De berekening gebruikt de ingestelde retourafstand en retourreistijd, met de vrije marges en tarieven die in de configuratie staan. Bij een vaste Triptherapie-locatie worden afstand en reistijd vanaf je startlocatie getoond; er worden geen reiskosten voor een begeleider aan de locatieprijs toegevoegd.<\/p>\n\n      <h3 id=\"aantal-personen\">Aantal personen en prijs<\/h3>\n      <p>Kies \u00e9\u00e9n, twee of drie personen. Voor \u00e9\u00e9n persoon geldt de basisprijs. Voor twee personen wordt \u20ac 500 toegevoegd en voor drie personen in totaal \u20ac 1.000. De tabellen en totaalprijzen worden aangepast aan de gekozen groepsgrootte. De actuele basisprijzen staan in de configuratie van de tool.<\/p>\n\n      <h3 id=\"begeleiders-op-eigen-locatie\">Begeleider op je eigen locatie<\/h3>\n      <p>Deze tabel vergelijkt begeleiders die naar een geschikte locatie van de klant reizen, bijvoorbeeld een woning of accommodatie. Na berekening zie je de relevante reisgegevens, reiskosten en totaalprijs. De kleur of opmaak geeft aan hoe de berekende reistijd zich verhoudt tot de ingestelde maximale reistijd van de begeleider. Een oranje markering duidt op de ingestelde extra marge; doorgestreepte rode tekst geeft aan dat de maximale reistijd ruimer wordt overschreden. Dit is een praktische indicatie, geen live bevestiging van beschikbaarheid.<\/p>\n      <p>De namen van begeleiders kunnen naar hun profielpagina linken. Afhankelijk van de beschikbare gegevens zijn er ook links naar recensies en reserveren. Gebruik de reserveringslink om verder te gaan met boeken.<\/p>\n\n      <h3 id=\"vaste-triptherapie-locaties\">Vaste Triptherapie-locaties<\/h3>\n      <p>Deze tabel vergelijkt sessies op vaste locaties van Triptherapie. Na invoer van een startlocatie zie je de afstand en reistijd naar de locatie en de prijs voor het gekozen aantal personen. Klik op een locatienaam voor de informatiepagina. Gebruik de reserveringslink om naar de bijbehorende boekingsmogelijkheid te gaan.<\/p>\n\n      <h3 id=\"kaartweergave\">Kaartweergave<\/h3>\n      <p>Kies <strong>Eigen locatie<\/strong> om de begeleiders op de kaart te bekijken, of <strong>Triptherapie locatie<\/strong> om de vaste locaties te bekijken. Als een startlocatie is ingevoerd en de berekening is uitgevoerd, kan de kaart ook routes tonen. De keuze verandert de kaartweergave; beide tabellen blijven zichtbaar.<\/p>\n\n      <h3 id=\"begeleiders-en-links\">Begeleiders en bijbehorende links<\/h3>\n      <div id=\"explanationGuidesList\"><\/div>\n\n      <h3 id=\"locaties-en-links\">Locaties en bijbehorende links<\/h3>\n      <div id=\"explanationLocationsList\"><\/div>\n    <\/div>\n  <\/div>\n<\/div>\n\n<script src=\"https:\/\/maps.googleapis.com\/maps\/api\/js?key=AIzaSyCi5hCWfsu72vYKb5s0C5_1yxOYxLBVh8E&callback=initMap&loading=async\" async defer><\/script>\n\n<script>\n  \/* =========================================================================\n   * CONFIGURATIE\n   * Alles wat je regelmatig wilt aanpassen staat hieronder. De rest van de\n   * code leest deze gegevens uit en hoeft niet aangepast te worden.\n   * ========================================================================= *\/\n  const CONFIG = {\n    \/\/ Bedrag dat wordt toegevoegd aan de basisprijs per extra persoon\n    \/\/ (bij 2 personen +1x dit bedrag, bij 3 personen +2x dit bedrag).\n    extraPersonFee: 500,\n\n    \/\/ Wachttijd in milliseconden na de laatste toetsaanslag voordat er\n    \/\/ automatisch wordt berekend. Enter en de knop Bereken werken direct.\n    autoCalculateDelay: 5000,\n\n    \/\/ Reiskosten worden berekend over de RETOUR (heen + terug).\n    \/\/ Aantal retour-reisminuten dat gratis is. Retourreistijd boven dit aantal\n    \/\/ minuten kost CONFIG.travelCostPerMinute euro per minuut.\n    travelCostFreeMinutes: 20,\n    \/\/ Prijs per minuut boven de vrije retour-reistijd.\n    travelCostPerMinute: 0.75,\n\n    \/\/ Aantal retour-kilometers dat gratis is. Retourafstand boven dit aantal\n    \/\/ kilometers kost CONFIG.travelCostPerKm euro per kilometer.\n    travelCostFreeKm: 20,\n    \/\/ Prijs per kilometer boven de vrije retour-afstand.\n    travelCostPerKm: 0.4,\n\n    \/\/ Extra marge in minuten: een begeleider die net buiten zijn maxTravelTime\n    \/\/ valt (maar binnen maxTravelTime + deze marge) wordt nog getoond, in het oranje.\n    orangeBufferMinutes: 30,\n\n    \/\/ Begeleiders voor sessies op de eigen locatie van de klant.\n    \/\/ Een begeleider toevoegen: voeg een nieuw object toe aan deze lijst.\n    \/\/ Een begeleider verwijderen: verwijder het bijbehorende object.\n    \/\/\n    \/\/   name          - naam van de begeleider (moet uniek zijn)\n    \/\/   address, city - adres waarvandaan de reisafstand wordt berekend\n    \/\/   basePrice     - startprijs voor 1 persoon (exclusief reiskosten)\n    \/\/   color         - kleur van de marker\/route op de kaart (hex)\n    \/\/   maxTravelTime - maximale reistijd in minuten waarbinnen deze begeleider\n    \/\/                   nog beschikbaar is (daarna wordt hij doorgestreept getoond)\n    \/\/   profileUrl \/ reviewUrl \/ bookingUrl - links in de tabel-dropdown en de uitleg\n    \/\/                   (laat een veld weg of leeg als er geen link is)\n    guides: [\n      {\n        name: \"Marcel\", address: \"2204 CB Noordwijk\", city: \"Noordwijk\",\n        basePrice: 850, color: \"#8B0000\", maxTravelTime: 150,\n        profileUrl: \"https:\/\/triptherapie.nl\/personeel\/marcel\/\",\n        reviewUrl: \"https:\/\/trip-forum.nl\/recensie-truffel-therapie-marcel\/\",\n        bookingUrl: \"https:\/\/triptherapie.nl\/reserveringen\/book-marcel-own-location\/\"\n      },\n      {\n        name: \"Reineke\", address: \"3142 CA Maassluis\", city: \"Maassluis\",\n        basePrice: 850, color: \"#006400\", maxTravelTime: 45,\n        profileUrl: \"https:\/\/triptherapie.nl\/personeel\/reineke\/\",\n        reviewUrl: \"https:\/\/trip-forum.nl\/ervaringen-truffel-reineke\/\",\n        bookingUrl: \"https:\/\/triptherapie.nl\/reserveringen\/agenda-reineke\/\"\n      },\n      {\n        name: \"Sascha\", address: \"1404 HC Bussum\", city: \"Bussum\",\n        basePrice: 850, color: \"#006666\", maxTravelTime: 60,\n        profileUrl: \"https:\/\/triptherapie.nl\/personeel\/sascha\/\",\n        reviewUrl: \"https:\/\/trip-forum.nl\/recensies-sascha\/\",\n        bookingUrl: \"https:\/\/triptherapie.nl\/reserveringen\/book-psychedelic-session-own-location-sascha\/\"\n      },\n      {\n        name: \"Gijs\", address: \"5231 EK Den Bosch\", city: \"Den Bosch\",\n        basePrice: 850, color: \"#8B4513\", maxTravelTime: 45,\n        profileUrl: \"https:\/\/triptherapie.nl\/personeel\/gijs\/\",\n        reviewUrl: \"https:\/\/trip-forum.nl\/recensies-gijs\/\",\n        bookingUrl: \"https:\/\/triptherapie.nl\/reserveringen\/book-psychedelic-session-own-location-gijs\/\"\n      },\n      {\n        name: \"Ronald\", address: \"5554 SH Valkenswaard\", city: \"Valkenswaard\",\n        basePrice: 950, color: \"#4B0082\", maxTravelTime: 45,\n        profileUrl: \"https:\/\/triptherapie.nl\/personeel\/ronald\/\",\n        reviewUrl: \"https:\/\/trip-forum.nl\/recensies-ronald\/\",\n        bookingUrl: \"https:\/\/triptherapie.nl\/reserveringen\/book-psychedelic-session-own-location-ronald\/\"\n      },\n      {\n        name: \"Janneke\", address: \"2204 CB Noordwijk\", city: \"Noordwijk\",\n        basePrice: 750, color: \"#00008B\", maxTravelTime: 30,\n        profileUrl: \"https:\/\/triptherapie.nl\/personeel\/janneke\/\",\n        reviewUrl: \"https:\/\/trip-forum.nl\/review-janneke\/\",\n        bookingUrl: \"https:\/\/triptherapie.nl\/reserveringen\/book-janneke-own-location\/\"\n      },\n      {\n        name: \"Elke\", address: \"4554 AN Westdorpe\", city: \"Westdorpe\",\n        basePrice: 950, color: \"#07708B\", maxTravelTime: 180,\n        profileUrl: \"https:\/\/triptherapie.nl\/personeel\/elke\/\",\n        reviewUrl: \"https:\/\/trip-forum.nl\/review-elke\/\",\n        bookingUrl: \"https:\/\/triptherapie.nl\/reserveringen\/agenda-elke\/\"\n      }\n    ],\n\n    \/\/ Vaste Triptherapie-locaties waar de klant naartoe reist.\n    \/\/ Een locatie toevoegen: voeg een nieuw object toe aan deze lijst.\n    \/\/ Een locatie verwijderen: verwijder het bijbehorende object.\n    \/\/\n    \/\/   name              - naam van de locatie\n    \/\/   address, city     - adres van de locatie\n    \/\/   basePrice         - totaalprijs voor 1 persoon\n    \/\/   color             - kleur van de marker\/route op de kaart (hex)\n    \/\/   infoUrl \/ bookingUrl - links in de tabel-dropdown en de uitleg\n    locations: [\n      {\n        name: \"De Bedding\", address: \"5231 EK Den Bosch\", city: \"Den Bosch\",\n        basePrice: 850, color: \"#b20091\",\n        infoUrl: \"https:\/\/triptherapie.nl\/locatie\/bedding-den-bosch\/\",\n        bookingUrl: \"https:\/\/triptherapie.nl\/reserveringen\/book-psychedelic-session-own-location-gijs\/\"\n      },\n      {\n        name: \"Sancta Psychedelica\", address: \"2204 CB Noordwijk\", city: \"Noordwijk\",\n        basePrice: 1050, color: \"#c2185b\",\n        infoUrl: \"https:\/\/triptherapie.nl\/locatie\/sancta-psychedelica-noordwijk\/\",\n        bookingUrl: \"https:\/\/triptherapie.nl\/reserveringen\/sancta-psychedelica-noordwijk-reserveren\/\"\n      }\n      \/\/ Psychedelic Loft (Schiedam) is verwijderd. Om een locatie terug te\n      \/\/ zetten, voeg gewoon een nieuw object met dezelfde velden toe.\n    ]\n  };\n  \/* ========================= EINDE CONFIGURATIE ========================= *\/\n\n  let destinations = [];\n  let locations = [];\n  let visibleGuideNames = null;\n\n  function getPersonCount() {\n    const checked = document.querySelector('#distance-tool input[name=\"personCount\"]:checked');\n    const value = checked ? parseInt(checked.value, 10) : 1;\n    return [1, 2, 3].includes(value) ? value : 1;\n  }\n\n  function getExtraPersonsPrice() {\n    return (getPersonCount() - 1) * CONFIG.extraPersonFee;\n  }\n\n  function getSessionType() {\n    const checked = document.querySelector('#distance-tool input[name=\"sessionType\"]:checked');\n    return checked ? checked.value : \"own\";\n  }\n\n  function rebuildPricingData() {\n    const extra = getExtraPersonsPrice();\n\n    destinations = CONFIG.guides.map(item => ({\n      ...item,\n      addition: item.basePrice + extra\n    }));\n\n    locations = CONFIG.locations.map(item => ({\n      ...item,\n      price: item.basePrice + extra\n    }));\n\n    const urlParams = new URLSearchParams(window.location.search);\n    const guidesParam = urlParams.getAll(\"guide\");\n\n    if (guidesParam.length > 0) {\n      const guideFilter = [];\n      guidesParam.forEach(p => p.split(\",\").forEach(g => guideFilter.push(g.trim().toLowerCase())));\n\n      destinations = destinations.filter(dest =>\n        guideFilter.includes(dest.name.toLowerCase())\n      );\n    }\n  }\n\n  rebuildPricingData();\n\n  let map;\n  let directionsService;\n  let directionsRenderers = [];\n  let geocoder;\n  let markers = [];\n  let markerBounds;\n  let overlay;\n  let alternateTick = 0;\n  let activeDropdown = null;\n  let hideDropdownTimer = null;\n\n  \/\/ Geocode-cache: elk adres wordt maar een keer opgezocht bij Google.\n  const geocodeCache = {};\n\n  \/\/ generation: verandert bij elke reset van markers of routes, zodat late\n  \/\/ antwoorden van een oudere actie niets meer tekenen.\n  let generation = 0;\n\n  \/\/ searchRun: verandert bij elke nieuwe zoekopdracht, zodat late antwoorden\n  \/\/ van een oudere zoekopdracht de tabel niet meer overschrijven.\n  let searchRun = 0;\n\n  function geocodeCached(address, callback) {\n    if (geocodeCache[address]) {\n      callback(geocodeCache[address], \"OK\");\n      return;\n    }\n    geocoder.geocode({ address: address }, function(results, status) {\n      if (status === \"OK\") geocodeCache[address] = results;\n      callback(results, status);\n    });\n  }\n\n  function clearDirections() {\n    generation++;\n    directionsRenderers.forEach(r => r.setMap(null));\n    directionsRenderers = [];\n  }\n\n  function clearMarkers() {\n    generation++;\n    markers.forEach(m => m.setMap(null));\n    markers = [];\n  }\n\n  function escapeHtml(text) {\n    return String(text)\n      .replaceAll(\"&\", \"&amp;\")\n      .replaceAll(\"<\", \"&lt;\")\n      .replaceAll(\">\", \"&gt;\")\n      .replaceAll('\"', \"&quot;\")\n      .replaceAll(\"'\", \"&#039;\");\n  }\n\n  function getActionLink(url, label, primary) {\n    if (!url) return \"\";\n    return \"<a class='action-link\" + (primary ? \" primary\" : \"\") + \"' href='\" + url + \"' target='_blank' rel='noopener'>\" + label + \"<\/a>\";\n  }\n\n  \/\/ Begeleidernaam is klikbaar en opent het profiel in een nieuw tabblad.\n  \/\/ De profiel-URL wordt uit de configuratie gehaald, zodat links centraal beheerd blijven.\n  function getDropdownHTML(name) {\n    const guide = CONFIG.guides.find(g => g.name === name);\n    const safeName = escapeHtml(name);\n    if (guide && guide.profileUrl) {\n      return \"<a class='person-name person-profile-link' href='\" + escapeHtml(guide.profileUrl) + \"' target='_blank' rel='noopener noreferrer' aria-label='Bekijk profiel van \" + safeName + \"'>\" + safeName + \"<\/a>\";\n    }\n    return \"<span class='person-name'>\" + safeName + \"<\/span>\";\n  }\n\n  \/\/ Locatienaam is klikbaar en opent de bijbehorende locatiepagina.\n  function getLocationDropdownHTML(name) {\n    const location = CONFIG.locations.find(l => l.name === name);\n    const safeName = escapeHtml(name);\n    if (location && location.infoUrl) {\n      return \"<a class='person-name location-page-link' href='\" + escapeHtml(location.infoUrl) + \"' target='_blank' rel='noopener noreferrer' aria-label='Bekijk locatiepagina van \" + safeName + \"'>\" + safeName + \"<\/a>\";\n    }\n    return \"<span class='person-name'>\" + safeName + \"<\/span>\";\n  }\n\n  function getGuideBookingCell(name) {\n    const guide = CONFIG.guides.find(g => g.name === name);\n    return guide && guide.bookingUrl ? getActionLink(guide.bookingUrl, \"Reserveren\", true) : \"\";\n  }\n\n  function getLocationBookingCell(name) {\n    const location = CONFIG.locations.find(l => l.name === name);\n    return location && location.bookingUrl ? getActionLink(location.bookingUrl, \"Reserveren\", true) : \"\";\n  }\n\n  \/\/ Vult de Uitleg-sectie onderaan automatisch met alle begeleiders en\n  \/\/ locaties uit CONFIG, zodat je die tekst niet apart hoeft bij te werken.\n  function renderExplanationLists() {\n    const guidesContainer = document.getElementById(\"explanationGuidesList\");\n    if (guidesContainer) {\n      guidesContainer.innerHTML = CONFIG.guides.map(guide => {\n        let links = \"\";\n        if (guide.profileUrl) links += \"<a href='\" + guide.profileUrl + \"' target='_blank' rel='noopener'>Meer informatie over \" + escapeHtml(guide.name) + \"<\/a><br>\";\n        if (guide.reviewUrl) links += \"<a href='\" + guide.reviewUrl + \"' target='_blank' rel='noopener'>Recensies over \" + escapeHtml(guide.name) + \"<\/a><br>\";\n        if (guide.bookingUrl) links += \"<a href='\" + guide.bookingUrl + \"' target='_blank' rel='noopener'>Reserveren met \" + escapeHtml(guide.name) + \" op eigen locatie<\/a>\";\n        return \"<p><strong>\" + escapeHtml(guide.name) + \"<\/strong><br>\" + links + \"<\/p>\";\n      }).join(\"\");\n    }\n\n    const locationsContainer = document.getElementById(\"explanationLocationsList\");\n    if (locationsContainer) {\n      locationsContainer.innerHTML = CONFIG.locations.map(location => {\n        let links = \"\";\n        if (location.infoUrl) links += \"<a href='\" + location.infoUrl + \"' target='_blank' rel='noopener'>Meer informatie over \" + escapeHtml(location.name) + \"<\/a><br>\";\n        if (location.bookingUrl) links += \"<a href='\" + location.bookingUrl + \"' target='_blank' rel='noopener'>Reserveren bij \" + escapeHtml(location.name) + \"<\/a>\";\n        return \"<p><strong>\" + escapeHtml(location.name) + \"<\/strong><br>\" + links + \"<\/p>\";\n      }).join(\"\");\n    }\n  }\n\n  function showGuidesTable() {\n    const hasInput = document.getElementById(\"startLocation\").value.trim() !== \"\";\n    let html = '<div class=\"table-container\">';\n    html += \"<table style='width:100%; border-collapse:collapse;' border='1' cellpadding='5'>\";\n    html += \"<tr style='background: #000428; color: white;'>\";\n    html += \"<th>Begeleider<\/th>\";\n    html += hasInput ? \"<th>Afstand<\/th>\" : \"<th>Woonplaats<\/th>\";\n    if (hasInput) html += \"<th>Reis<\/th><th>Reistijd<\/th>\";\n    html += \"<th>Totaal<\/th><th>Reserveren<\/th>\";\n    html += \"<\/tr>\";\n\n    destinations.forEach(dest => {\n      html += \"<tr>\";\n      html += \"<td data-label='Begeleider'>\" + getDropdownHTML(dest.name) + \"<\/td>\";\n      html += \"<td data-label='Woonplaats'>\" + escapeHtml(dest.city) + \"<\/td>\";\n      if (hasInput) html += \"<td data-label='Reis'>\u20ac0<\/td><td data-label='Reistijd'>-<\/td>\";\n      html += \"<td data-label='Totaal'>\u20ac\" + dest.addition + \"<\/td>\";\n      html += \"<td data-label='Reserveren'>\" + getGuideBookingCell(dest.name) + \"<\/td>\";\n      html += \"<\/tr>\";\n    });\n\n    html += \"<\/table><\/div>\";\n    return html;\n  }\n\n  function showLocationsTable() {\n    let html = '<div class=\"table-container\">';\n    html += \"<table style='width:100%; border-collapse:collapse;' border='1' cellpadding='5'>\";\n    html += \"<tr style='background: #b20091; color: white;'>\";\n    html += \"<th>Onze locaties<\/th><th>Plaats<\/th><th>Totaal<\/th><th>Reserveren<\/th>\";\n    html += \"<\/tr>\";\n\n    locations.forEach(loc => {\n      html += \"<tr>\";\n      html += \"<td data-label='Locatie'>\" + getLocationDropdownHTML(loc.name) + \"<\/td>\";\n      html += \"<td data-label='Plaats'>\" + escapeHtml(loc.city) + \"<\/td>\";\n      html += \"<td data-label='Totaal'>\u20ac\" + loc.price + \"<\/td>\";\n      html += \"<td data-label='Reserveren'>\" + getLocationBookingCell(loc.name) + \"<\/td>\";\n      html += \"<\/tr>\";\n    });\n\n    html += \"<\/table><\/div>\";\n    return html;\n  }\n\n  function syncMapHeightToGuideTable() {\n    const tool = document.getElementById(\"distance-tool\");\n    const mapElement = document.getElementById(\"map\");\n    const leftColumn = tool ? tool.querySelector(\".left-column\") : null;\n    if (!mapElement || !leftColumn) return;\n\n    if (window.matchMedia(\"(min-width: 768px)\").matches) {\n      \/\/ Laat de kaart precies eindigen op de onderkant van de linkerkolom,\n      \/\/ inclusief zowel de begeleiderstabel als de tabel met locaties.\n      \/\/ De hoogte wordt gemeten vanaf de bovenkant van de kaart zelf.\n      const leftBottom = leftColumn.getBoundingClientRect().bottom;\n      const mapTop = mapElement.getBoundingClientRect().top;\n      const targetHeight = Math.round(leftBottom - mapTop);\n      mapElement.style.height = Math.max(240, targetHeight) + \"px\";\n    } else {\n      \/\/ Op mobiel staan de kolommen onder elkaar, dus behoud een vaste kaarthoogte.\n      mapElement.style.height = \"340px\";\n    }\n\n    if (map && window.google && google.maps && google.maps.event) {\n      google.maps.event.trigger(map, \"resize\");\n    }\n  }\n\n  function hideUnavailableRowsOnSmallScreens() {\n    const smallScreen = window.matchMedia(\"(max-width: 1024px)\").matches;\n    document.querySelectorAll(\"#distance-tool #results tr.strike\").forEach(row => {\n      \/\/ Op mobiel de hele rij uit de tabelstructuur halen. Alleen cellen\n      \/\/ verbergen laat in sommige browsers een lege grid-kaart achter.\n      if (smallScreen) {\n        row.setAttribute(\"data-mobile-unavailable\", \"true\");\n        row.style.setProperty(\"display\", \"none\", \"important\");\n        row.style.setProperty(\"height\", \"0\", \"important\");\n        row.style.setProperty(\"min-height\", \"0\", \"important\");\n        row.style.setProperty(\"border\", \"0\", \"important\");\n        row.style.setProperty(\"background\", \"transparent\", \"important\");\n        row.querySelectorAll(\"td, th\").forEach(cell => {\n          cell.style.setProperty(\"display\", \"none\", \"important\");\n          cell.style.setProperty(\"height\", \"0\", \"important\");\n          cell.style.setProperty(\"padding\", \"0\", \"important\");\n          cell.style.setProperty(\"border\", \"0\", \"important\");\n        });\n      } else {\n        row.removeAttribute(\"data-mobile-unavailable\");\n        [\"display\", \"height\", \"min-height\", \"border\", \"background\"].forEach(prop => row.style.removeProperty(prop));\n        row.querySelectorAll(\"td, th\").forEach(cell => {\n          [\"display\", \"height\", \"padding\", \"border\"].forEach(prop => cell.style.removeProperty(prop));\n        });\n      }\n    });\n  }\n\n  function showBothTables() {\n    rebuildPricingData();\n    visibleGuideNames = null;\n    document.getElementById(\"results\").innerHTML = showGuidesTable() + showLocationsTable();\n    initDropdowns();\n    hideUnavailableRowsOnSmallScreens();\n    requestAnimationFrame(syncMapHeightToGuideTable);\n  }\n\n  function addOriginMarker(originAddress) {\n    const gen = generation;\n\n    geocodeCached(originAddress, function(results, status) {\n      if (gen !== generation) return;\n\n      if (status === google.maps.GeocoderStatus.OK) {\n        const pos = results[0].geometry.location;\n        const marker = new google.maps.Marker({\n          map,\n          position: pos,\n          title: \"Startlocatie\",\n          icon: \"https:\/\/maps.google.com\/mapfiles\/ms\/icons\/blue-dot.png\"\n        });\n        marker.isRotatingMarker = false;\n        markers.push(marker);\n        markerBounds.extend(marker.getPosition());\n      }\n    });\n  }\n\n  function hexToRgb(hex) {\n    hex = (hex || \"\").replace(\/^#\/, \"\");\n    if (hex.length !== 6) return null;\n    const bigint = parseInt(hex, 16);\n    return { r: (bigint >> 16) & 255, g: (bigint >> 8) & 255, b: bigint & 255 };\n  }\n\n  function getAdjustedSVGIcon(markerLike, markerType) {\n    const color = markerLike.customColor || \"#8B0000\";\n    const rgb = hexToRgb(color);\n    if (!rgb) return null;\n\n    let width = 150;\n    let height = 28;\n    let radius = 5;\n\n    if (markerType === \"guide\") {\n      width = 60;\n      height = 20;\n      radius = 3;\n    }\n\n    const rgbaColor = `rgba(${rgb.r}, ${rgb.g}, ${rgb.b}, 1)`;\n    const svg = `<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"${width}\" height=\"${height}\" viewBox=\"0 0 ${width} ${height}\">\n      <rect x=\"0\" y=\"0\" width=\"${width}\" height=\"${height}\" rx=\"${radius}\" ry=\"${radius}\" fill=\"${rgbaColor}\"\/>\n    <\/svg>`;\n\n    return {\n      url: \"data:image\/svg+xml;charset=UTF-8,\" + encodeURIComponent(svg),\n      scaledSize: new google.maps.Size(width, height),\n      anchor: new google.maps.Point(width \/ 2, height \/ 2),\n      labelOrigin: new google.maps.Point(width \/ 2, height \/ 2)\n    };\n  }\n\n  function addNamedMarker(item, origin) {\n    const gen = generation;\n    const address = item.address + \", \" + item.city + \", Nederland\";\n    const markerType = locations.some(loc => loc.name === item.name) ? \"location\" : \"guide\";\n\n    geocodeCached(address, function(results, status) {\n      if (gen !== generation) return;\n\n      if (status === google.maps.GeocoderStatus.OK) {\n        const pos = results[0].geometry.location;\n\n        const marker = new google.maps.Marker({\n          map,\n          position: pos,\n          title: item.name,\n          icon: getAdjustedSVGIcon({ customColor: item.color }, markerType),\n          label: {\n            text: item.name,\n            color: \"white\",\n            fontSize: markerType === \"guide\" ? \"10px\" : \"11px\",\n            fontWeight: \"bold\"\n          }\n        });\n\n        marker.customColor = item.color;\n        marker.isRotatingMarker = true;\n        markers.push(marker);\n        markerBounds.extend(marker.getPosition());\n\n        marker.addListener(\"click\", function() {\n          const startLoc = document.getElementById(\"startLocation\").value.trim();\n          if (!startLoc) {\n            alert(\"Voer een startlocatie in om de route te tonen.\");\n            return;\n          }\n          drawRoute(startLoc, address, item.color);\n        });\n\n        if (origin) drawRoute(origin, address, item.color);\n      }\n    });\n  }\n\n  function showAllMarkers() {\n    rebuildPricingData();\n    clearMarkers();\n    clearDirections();\n    markerBounds = new google.maps.LatLngBounds();\n\n    const sessionType = getSessionType();\n    let items = sessionType === \"location\" ? locations : destinations;\n\n    if (sessionType === \"own\" && Array.isArray(visibleGuideNames)) {\n      items = items.filter(item => visibleGuideNames.includes(item.name));\n    }\n\n    items.forEach(item => addNamedMarker(item, null));\n  }\n\n  function alternateMarkerZIndex() {\n    if (!overlay || !overlay.getProjection()) return;\n\n    const rotatingMarkers = markers.filter(m => m.isRotatingMarker);\n    const n = rotatingMarkers.length;\n    if (n === 0) return;\n\n    const proj = overlay.getProjection();\n    const positions = rotatingMarkers.map(m => proj.fromLatLngToDivPixel(m.getPosition()));\n\n    const overlappingIndices = [];\n    for (let i = 0; i < n; i++) {\n      for (let j = i + 1; j < n; j++) {\n        const dx = positions[i].x - positions[j].x;\n        const dy = positions[i].y - positions[j].y;\n        const d = Math.sqrt(dx * dx + dy * dy);\n        if (d < 40) {\n          if (!overlappingIndices.includes(i)) overlappingIndices.push(i);\n          if (!overlappingIndices.includes(j)) overlappingIndices.push(j);\n        }\n      }\n    }\n\n    for (let i = 0; i < n; i++) {\n      if (!overlappingIndices.includes(i)) rotatingMarkers[i].setZIndex(100);\n    }\n\n    if (overlappingIndices.length > 0) {\n      const topPos = alternateTick % overlappingIndices.length;\n      overlappingIndices.forEach((markerIndex, posIndex) => {\n        rotatingMarkers[markerIndex].setZIndex(posIndex === topPos ? 200 : -1);\n      });\n      alternateTick++;\n    }\n  }\n\n  function getQueryParam(param) {\n    const urlParams = new URLSearchParams(window.location.search);\n    return urlParams.get(param);\n  }\n\n  function updateURLWithSearch(searchTerm) {\n    const url = new URL(window.location);\n    const params = new URLSearchParams(url.search);\n\n    if (searchTerm && searchTerm.trim() !== \"\") params.set(\"zoek\", searchTerm.trim());\n    else params.delete(\"zoek\");\n\n    url.search = params.toString();\n    history.replaceState(null, \"\", url.toString());\n  }\n\n  function isAddressInNetherlands(geocodeResult) {\n    if (!geocodeResult || !geocodeResult.address_components) return false;\n\n    const countryComponent = geocodeResult.address_components.find(component =>\n      component.types && component.types.includes(\"country\")\n    );\n\n    if (!countryComponent) return false;\n\n    const countryLong = (countryComponent.long_name || \"\").toLowerCase();\n    const countryShort = (countryComponent.short_name || \"\").toLowerCase();\n\n    return countryLong === \"netherlands\" || countryLong === \"nederland\" || countryShort === \"nl\";\n  }\n\n  function initMap() {\n    map = new google.maps.Map(document.getElementById(\"map\"), {\n      center: { lat: 52.1326, lng: 5.2913 },\n      zoom: 7,\n      mapTypeControl: false,\n      streetViewControl: false,\n      styles: [{ featureType: \"poi\", elementType: \"all\", stylers: [{ visibility: \"off\" }] }]\n    });\n\n    directionsService = new google.maps.DirectionsService();\n    geocoder = new google.maps.Geocoder();\n    markerBounds = new google.maps.LatLngBounds();\n\n    overlay = new google.maps.OverlayView();\n    overlay.onAdd = function() {};\n    overlay.draw = function() {};\n    overlay.onRemove = function() {};\n    overlay.setMap(map);\n\n    setInterval(alternateMarkerZIndex, 5000);\n\n    const zoekterm = getQueryParam(\"zoek\");\n    if (zoekterm) {\n      document.getElementById(\"startLocation\").value = zoekterm;\n      calculateDistances();\n    } else {\n      showBothTables();\n      showAllMarkers();\n    }\n  }\n\n  function drawRoute(originAddress, destAddress, color) {\n    const gen = generation;\n\n    geocodeCached(originAddress, function(resultsOrigin, statusOrigin) {\n      if (gen !== generation) return;\n      if (statusOrigin !== google.maps.GeocoderStatus.OK) return;\n\n      const originLocation = resultsOrigin[0].geometry.location;\n\n      geocodeCached(destAddress, function(resultsDest, statusDest) {\n        if (gen !== generation) return;\n        if (statusDest !== google.maps.GeocoderStatus.OK) return;\n\n        const destLocation = resultsDest[0].geometry.location;\n\n        directionsService.route({\n          origin: originLocation,\n          destination: destLocation,\n          travelMode: google.maps.TravelMode.DRIVING\n        }, function(response, status) {\n          if (gen !== generation) return;\n\n          if (status === \"OK\") {\n            const renderer = new google.maps.DirectionsRenderer({\n              suppressMarkers: true,\n              preserveViewport: true,\n              polylineOptions: { strokeColor: color, strokeOpacity: 0.5, strokeWeight: 5 }\n            });\n            renderer.setMap(map);\n            renderer.setDirections(response);\n            directionsRenderers.push(renderer);\n          }\n        });\n      });\n    });\n  }\n\n  function renderOutsideNetherlandsTables() {\n    rebuildPricingData();\n    visibleGuideNames = [];\n\n    let html = \"\";\n    html += '<div class=\"table-container\">';\n    html += \"<table style='width:100%; border-collapse:collapse;' border='1' cellpadding='5'>\";\n    html += \"<tr style='background: #000428; color: white;'>\";\n    html += \"<th>Begeleider<\/th><th>Afstand<\/th><th>Reis<\/th><th>Reistijd<\/th><th>Totaal<\/th><th>Reserveren<\/th>\";\n    html += \"<\/tr>\";\n\n    destinations.forEach(dest => {\n      html += \"<tr class='strike'>\";\n      html += \"<td data-label='Begeleider'>\" + escapeHtml(dest.name) + \"<\/td>\";\n      html += \"<td data-label='Afstand'><\/td><td data-label='Reis'><\/td><td data-label='Reistijd'><\/td><td data-label='Totaal'><\/td><td data-label='Reserveren'><\/td>\";\n      html += \"<\/tr>\";\n    });\n\n    html += \"<\/table><\/div>\";\n    html += showLocationsTable();\n\n    document.getElementById(\"results\").innerHTML = html;\n    initDropdowns();\n    requestAnimationFrame(syncMapHeightToGuideTable);\n  }\n\n  function calculateDistances() {\n    const run = ++searchRun;\n\n    rebuildPricingData();\n\n    const origin = document.getElementById(\"startLocation\").value.trim();\n    const sessionType = getSessionType();\n    updateURLWithSearch(origin);\n\n    if (!origin) {\n      visibleGuideNames = null;\n      showBothTables();\n      showAllMarkers();\n      return;\n    }\n\n    geocodeCached(origin, function(originResults, originStatus) {\n      if (run !== searchRun) return;\n\n      if (originStatus !== google.maps.GeocoderStatus.OK || !originResults || !originResults[0]) {\n        alert(\"De ingevoerde locatie kon niet goed worden gevonden.\");\n        visibleGuideNames = null;\n        showBothTables();\n        showAllMarkers();\n        return;\n      }\n\n      const originInNetherlands = isAddressInNetherlands(originResults[0]);\n\n      if (!originInNetherlands) {\n        clearDirections();\n        renderOutsideNetherlandsTables();\n        showAllMarkers();\n        return;\n      }\n\n      clearDirections();\n      clearMarkers();\n      markerBounds = new google.maps.LatLngBounds();\n      addOriginMarker(origin);\n\n      const guideAddresses = destinations.map(d => d.address + \", \" + d.city + \", Nederland\");\n      const locationAddresses = locations.map(l => l.address + \", \" + l.city + \", Nederland\");\n      const service = new google.maps.DistanceMatrixService();\n\n      service.getDistanceMatrix({\n        origins: [origin],\n        destinations: guideAddresses,\n        travelMode: google.maps.TravelMode.DRIVING,\n        unitSystem: google.maps.UnitSystem.METRIC\n      }, function(guidesResponse, guidesStatus) {\n        if (run !== searchRun) return;\n\n        if (guidesStatus !== google.maps.DistanceMatrixStatus.OK) {\n          alert(\"Er is een fout opgetreden: \" + guidesStatus);\n          visibleGuideNames = null;\n          showBothTables();\n          return;\n        }\n\n        service.getDistanceMatrix({\n          origins: [origin],\n          destinations: locationAddresses,\n          travelMode: google.maps.TravelMode.DRIVING,\n          unitSystem: google.maps.UnitSystem.METRIC\n        }, function(locationsResponse, locationsStatus) {\n          if (run !== searchRun) return;\n\n          if (locationsStatus !== google.maps.DistanceMatrixStatus.OK) {\n            alert(\"Er is een fout opgetreden: \" + locationsStatus);\n            visibleGuideNames = null;\n            showBothTables();\n            return;\n          }\n\n          const guideResultsArray = [];\n          const guideElements = guidesResponse.rows[0].elements;\n\n          for (let i = 0; i < guideElements.length; i++) {\n            const element = guideElements[i];\n            const item = destinations[i];\n\n            if (element.status === \"OK\") {\n              const distanceMeters = element.distance.value;\n              const oneWayKm = distanceMeters \/ 1000;\n              const oneWayDisplay = Math.round(oneWayKm);\n              const travelTimeMinutes = element.duration.value \/ 60;\n\n              \/\/ Retour (heen + terug)\n              const roundTripKm = oneWayKm * 2;\n              const roundTripMinutes = travelTimeMinutes * 2;\n\n              \/\/ Afstandscomponent: retourkilometers boven de vrije grens\n              const billableKm = Math.max(0, roundTripKm - CONFIG.travelCostFreeKm);\n              const distanceCost = billableKm * CONFIG.travelCostPerKm;\n\n              \/\/ Tijdscomponent: retourminuten boven de vrije grens\n              const billableMinutes = Math.max(0, roundTripMinutes - CONFIG.travelCostFreeMinutes);\n              const timeCost = billableMinutes * CONFIG.travelCostPerMinute;\n\n              let travelCostCalculated = Math.round(distanceCost + timeCost);\n\n              const maxTime = item.maxTravelTime;\n\n              if (travelTimeMinutes <= maxTime) {\n                guideResultsArray.push({\n                  name: item.name,\n                  distance: oneWayDisplay,\n                  travelCost: travelCostCalculated,\n                  totalPrice: travelCostCalculated + item.addition,\n                  travelTime: travelTimeMinutes,\n                  strike: false,\n                  orange: false,\n                  group: 1,\n                  sortPrice: travelCostCalculated + item.addition\n                });\n              } else if (travelTimeMinutes <= maxTime + CONFIG.orangeBufferMinutes) {\n                guideResultsArray.push({\n                  name: item.name,\n                  distance: oneWayDisplay,\n                  travelCost: travelCostCalculated,\n                  totalPrice: travelCostCalculated + item.addition,\n                  travelTime: travelTimeMinutes,\n                  strike: false,\n                  orange: true,\n                  group: 2,\n                  sortPrice: travelCostCalculated + item.addition\n                });\n              } else {\n                guideResultsArray.push({\n                  name: item.name,\n                  distance: oneWayDisplay,\n                  travelCost: \"-\",\n                  totalPrice: \"-\",\n                  travelTime: travelTimeMinutes,\n                  strike: true,\n                  orange: false,\n                  group: 3,\n                  sortPrice: Infinity\n                });\n              }\n            } else {\n              guideResultsArray.push({\n                name: item.name,\n                distance: \"-\",\n                travelCost: \"-\",\n                totalPrice: \"-\",\n                travelTime: \"-\",\n                strike: true,\n                orange: false,\n                group: 3,\n                sortPrice: Infinity\n              });\n            }\n          }\n\n          guideResultsArray.sort((a, b) => (a.group !== b.group) ? (a.group - b.group) : (a.sortPrice - b.sortPrice));\n\n          visibleGuideNames = guideResultsArray\n            .filter(item => !item.strike)\n            .map(item => item.name);\n\n          const locationResultsArray = [];\n          const locationElements = locationsResponse.rows[0].elements;\n\n          for (let i = 0; i < locationElements.length; i++) {\n            const element = locationElements[i];\n            const item = locations[i];\n\n            if (element.status === \"OK\") {\n              const oneWayKm = element.distance.value \/ 1000;\n              const oneWayDisplay = Math.round(oneWayKm);\n              const travelTimeMinutes = element.duration.value \/ 60;\n\n              locationResultsArray.push({\n                name: item.name,\n                city: item.city,\n                distance: oneWayDisplay,\n                travelTime: travelTimeMinutes,\n                totalPrice: item.price,\n                sortPrice: item.price\n              });\n            }\n          }\n\n          locationResultsArray.sort((a, b) => a.sortPrice - b.sortPrice);\n\n          let html = \"\";\n\n          html += '<div class=\"table-container\">';\n          html += \"<table style='width:100%; border-collapse:collapse;' border='1' cellpadding='5'>\";\n          html += \"<tr style='background: #000428; color: white;'>\";\n          html += \"<th>Begeleider<\/th><th>Afstand<\/th><th>Reis<\/th><th>Reistijd<\/th><th>Totaal<\/th><th>Reserveren<\/th>\";\n          html += \"<\/tr>\";\n\n          guideResultsArray.forEach(item => {\n            if (item.strike) html += \"<tr class='strike'>\";\n            else if (item.orange) html += \"<tr style='color: orange;'>\";\n            else html += \"<tr>\";\n\n            if (item.strike) {\n              html += \"<td data-label='Begeleider'>\" + escapeHtml(item.name) + \"<\/td>\";\n            } else {\n              html += \"<td data-label='Begeleider'>\" + getDropdownHTML(item.name) + \"<\/td>\";\n            }\n\n            html += \"<td data-label='Afstand'>\" + item.distance + (item.distance !== \"-\" ? \" km\" : \"\") + \"<\/td>\";\n            html += \"<td data-label='Reis'>\" + (item.strike ? \"\" : (item.travelCost !== \"-\" ? \"\u20ac\" + item.travelCost : item.travelCost)) + \"<\/td>\";\n            html += \"<td data-label='Reistijd'>\" + (item.travelTime !== \"-\" ? Math.round(item.travelTime) + \" min\" : item.travelTime) + \"<\/td>\";\n            html += \"<td data-label='Totaal'>\" + (item.strike ? \"\" : \"\u20ac\" + item.totalPrice) + \"<\/td>\";\n            html += \"<td data-label='Reserveren'>\" + (item.strike ? \"\" : getGuideBookingCell(item.name)) + \"<\/td>\";\n            html += \"<\/tr>\";\n          });\n\n          html += \"<\/table><\/div>\";\n\n          html += '<div class=\"table-container\">';\n          html += \"<table style='width:100%; border-collapse:collapse;' border='1' cellpadding='5'>\";\n          html += \"<tr style='background: #b20091; color: white;'>\";\n          html += \"<th>Onze locaties<\/th><th>Plaats<\/th><th>Afstand<\/th><th>Reistijd<\/th><th>Totaal<\/th><th>Reserveren<\/th>\";\n          html += \"<\/tr>\";\n\n          locationResultsArray.forEach(item => {\n            html += \"<tr>\";\n            html += \"<td data-label='Locatie'>\" + getLocationDropdownHTML(item.name) + \"<\/td>\";\n            html += \"<td data-label='Plaats'>\" + escapeHtml(item.city) + \"<\/td>\";\n            html += \"<td data-label='Afstand'>\" + item.distance + \" km<\/td>\";\n            html += \"<td data-label='Reistijd'>\" + Math.round(item.travelTime) + \" min<\/td>\";\n            html += \"<td data-label='Totaal'>\u20ac\" + item.totalPrice + \"<\/td>\";\n            html += \"<td data-label='Reserveren'>\" + getLocationBookingCell(item.name) + \"<\/td>\";\n            html += \"<\/tr>\";\n          });\n\n          html += \"<\/table><\/div>\";\n\n          document.getElementById(\"results\").innerHTML = html;\n          initDropdowns();\n          hideUnavailableRowsOnSmallScreens();\n          requestAnimationFrame(syncMapHeightToGuideTable);\n\n          let mapItems = sessionType === \"location\"\n            ? locations\n            : destinations.filter(item => visibleGuideNames.includes(item.name));\n\n          mapItems.forEach(item => addNamedMarker(item, origin));\n\n          setTimeout(function() {\n            if (run !== searchRun) return;\n            if (!markerBounds.isEmpty()) {\n              map.fitBounds(markerBounds);\n            }\n          }, 1500);\n        });\n      });\n    });\n  }\n\n  function positionDropdown(trigger, menu) {\n    menu.style.display = \"flex\";\n\n    const rect = trigger.getBoundingClientRect();\n    const menuRect = menu.getBoundingClientRect();\n    const gap = 6;\n\n    let left = rect.left;\n    let top = rect.top - menuRect.height - gap;\n\n    if (left + menuRect.width > window.innerWidth - 8) {\n      left = window.innerWidth - menuRect.width - 8;\n    }\n    if (left < 8) left = 8;\n\n    if (top < 8) {\n      top = rect.bottom + gap;\n    }\n\n    if (top + menuRect.height > window.innerHeight - 8) {\n      top = Math.max(8, window.innerHeight - menuRect.height - 8);\n    }\n\n    menu.style.left = left + \"px\";\n    menu.style.top = top + \"px\";\n  }\n\n  function hideActiveDropdown() {\n    if (!activeDropdown) return;\n    activeDropdown.style.display = \"none\";\n    activeDropdown = null;\n  }\n\n  function openDropdown(dropdown, menu) {\n    clearTimeout(hideDropdownTimer);\n    if (activeDropdown && activeDropdown !== menu) {\n      activeDropdown.style.display = \"none\";\n    }\n    activeDropdown = menu;\n    positionDropdown(dropdown, menu);\n  }\n\n  function scheduleHide(menu) {\n    clearTimeout(hideDropdownTimer);\n    hideDropdownTimer = setTimeout(() => {\n      if (activeDropdown === menu) {\n        hideActiveDropdown();\n      }\n    }, 120);\n  }\n\n  function initDropdowns() {\n    \/\/ Actieknoppen zijn direct zichtbaar; er is geen dropdown meer nodig.\n  }\n\n  function initExplanationToggle() {\n    const toggle = document.getElementById(\"explanationToggle\");\n    const content = document.getElementById(\"explanationContent\");\n\n    if (!toggle || !content) return;\n\n    toggle.addEventListener(\"click\", function() {\n      const isOpen = content.classList.toggle(\"open\");\n      toggle.classList.toggle(\"active\", isOpen);\n      toggle.setAttribute(\"aria-expanded\", isOpen ? \"true\" : \"false\");\n    });\n  }\n\n  window.addEventListener(\"scroll\", function() {\n    hideActiveDropdown();\n  }, true);\n\n  window.addEventListener(\"resize\", function() {\n    hideActiveDropdown();\n    syncMapHeightToGuideTable();\n  });\n\n  document.addEventListener(\"click\", function(e) {\n    if (!e.target.closest(\"#distance-tool .dropdown\")) {\n      hideActiveDropdown();\n    }\n  });\n\n  let debounceTimer;\n  document.getElementById(\"startLocation\").addEventListener(\"input\", function() {\n    clearTimeout(debounceTimer);\n    debounceTimer = setTimeout(calculateDistances, CONFIG.autoCalculateDelay);\n  });\n\n  document.getElementById(\"calculateBtn\").addEventListener(\"click\", function() {\n    clearTimeout(debounceTimer);\n    calculateDistances();\n  });\n\n  document.getElementById(\"startLocation\").addEventListener(\"keydown\", function(e) {\n    if (e.key === \"Enter\") {\n      clearTimeout(debounceTimer);\n      calculateDistances();\n    }\n  });\n\n  document.querySelectorAll('#distance-tool input[name=\"personCount\"]').forEach(input => {\n    input.addEventListener(\"change\", function() {\n      calculateDistances();\n    });\n  });\n\n  document.querySelectorAll('#distance-tool input[name=\"sessionType\"]').forEach(input => {\n    input.addEventListener(\"change\", function() {\n      calculateDistances();\n    });\n  });\n\n  renderExplanationLists();\n  initExplanationToggle();\n<\/script>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\n<\/div>\n\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Triptherapie verf\u00fcgt \u00fcber ein landesweit abdeckendes Netzwerk von Tripsittern in den Niederlanden. W\u00e4hlen Sie selbst einen m\u00e4nnlichen oder weiblichen Trip-Begleiter, der zu Ihnen passt.<\/p>","protected":false},"author":1,"featured_media":44662,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-57405","page","type-page","status-publish","has-post-thumbnail","hentry"],"_links":{"self":[{"href":"https:\/\/triptherapie.nl\/de\/wp-json\/wp\/v2\/pages\/57405","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/triptherapie.nl\/de\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/triptherapie.nl\/de\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/triptherapie.nl\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/triptherapie.nl\/de\/wp-json\/wp\/v2\/comments?post=57405"}],"version-history":[{"count":0,"href":"https:\/\/triptherapie.nl\/de\/wp-json\/wp\/v2\/pages\/57405\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/triptherapie.nl\/de\/wp-json\/wp\/v2\/media\/44662"}],"wp:attachment":[{"href":"https:\/\/triptherapie.nl\/de\/wp-json\/wp\/v2\/media?parent=57405"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}