{"id":50326,"date":"2025-02-06T20:38:40","date_gmt":"2025-02-06T19:38:40","guid":{"rendered":"https:\/\/triptherapie.nl\/?page_id=50326"},"modified":"2026-02-28T10:03:23","modified_gmt":"2026-02-28T09:03:23","slug":"rate-of-a-psychedelic-session","status":"publish","type":"page","link":"https:\/\/triptherapie.nl\/en\/qa\/tarief-van-een-psychedelische-sessie\/","title":{"rendered":"Price of a psychedelic session"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"50326\" class=\"elementor elementor-50326\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-e29075f e-flex e-con-boxed e-con e-parent\" data-id=\"e29075f\" 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-a84b090 elementor-widget elementor-widget-heading\" data-id=\"a84b090\" 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=\"wat-kost-een-psychedelische-sessie\">Wat kost een psychedelische sessie?<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f172bf4 elementor-widget elementor-widget-text-editor\" data-id=\"f172bf4\" 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>De prijzen voor een psychedelische sessie vari\u00ebren. Groepsceremonies zoals truffelceremonies op onze locatie in Schiedam kost \u20ac650 en de MDMA groepsceremonies in Den Bosch zijn \u20ac600 per persoon. Dit is inclusief voorbereiding, begeleiding en integratie.<\/p><p>We hebben daarnaast ook psychedelische retraites met meerdere dagen. De prijzen van de retraites varieert per opzet en het beste bekijk je de verschillende prijzen via de <span style=\"color: #cc99ff;\"><a style=\"color: #cc99ff;\" href=\"https:\/\/triptherapie.nl\/groepssessies\/#agenda-open-groep-ceremonies\">boekingsmodule van de groepssessies<\/a><\/span>.<\/p><p>Individuele sessies kosten tussen de \u20ac750 en \u20ac950, afhankelijk van de ervaring van de begeleider en de gekozen locatie. Bij priv\u00e9 sessies wordt ook extra gerekend als de sessie langer dan zes uur duurt, meestal \u20ac75 per extra uur. Daarnaast worden bij sessies aan huis reiskosten in rekening gebracht, namelijk 50 cent per kilometer. Kijk dus voordat je een priv\u00e9sessie boekt waar jouw begeleider woont.<\/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-40597c6 e-flex e-con-boxed e-con e-parent\" data-id=\"40597c6\" 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-e6a2464 elementor-widget elementor-widget-button\" data-id=\"e6a2464\" 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\/groepssessies\/#agenda-open-groep-ceremonies\">\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\">Psychedelische ceremonies<\/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<div class=\"elementor-element elementor-element-3bcc5c4 elementor-widget elementor-widget-button\" data-id=\"3bcc5c4\" 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\/prijzen\/\">\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\">Huidige tarieven<\/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<div class=\"elementor-element elementor-element-9d4c0c7 elementor-widget elementor-widget-button\" data-id=\"9d4c0c7\" 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\/reserveringen\/werkgebied\/\">\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\">Werkgebied begeleiders<\/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-d43b34f e-flex e-con-boxed e-con e-parent\" data-id=\"d43b34f\" 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-acdcb93 elementor-widget elementor-widget-heading\" data-id=\"acdcb93\" 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=\"rekentool-prijs-psychedelische-therapie\">Rekentool prijs psychedelische therapie<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d29e6ff elementor-widget elementor-widget-text-editor\" data-id=\"d29e6ff\" 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>De onderstaande tool kan je gebruiken om snel te berekenen wat een psychedelische sessie komt op jouw locatie en welke therapeuten er op jouw locatie werken.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c7701d2 elementor-widget elementor-widget-template\" data-id=\"c7701d2\" 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\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>What are the rates for individual psychedelic ceremonies?<\/p>","protected":false},"author":3119,"featured_media":0,"parent":49776,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-50326","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/triptherapie.nl\/en\/wp-json\/wp\/v2\/pages\/50326","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/triptherapie.nl\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/triptherapie.nl\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/triptherapie.nl\/en\/wp-json\/wp\/v2\/users\/3119"}],"replies":[{"embeddable":true,"href":"https:\/\/triptherapie.nl\/en\/wp-json\/wp\/v2\/comments?post=50326"}],"version-history":[{"count":0,"href":"https:\/\/triptherapie.nl\/en\/wp-json\/wp\/v2\/pages\/50326\/revisions"}],"up":[{"embeddable":true,"href":"https:\/\/triptherapie.nl\/en\/wp-json\/wp\/v2\/pages\/49776"}],"wp:attachment":[{"href":"https:\/\/triptherapie.nl\/en\/wp-json\/wp\/v2\/media?parent=50326"}],"curies":[{"name":"Well played","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}