{"id":162,"date":"2026-03-27T22:57:18","date_gmt":"2026-03-27T22:57:18","guid":{"rendered":"https:\/\/ctest.al\/?page_id=162"},"modified":"2026-06-23T22:59:22","modified_gmt":"2026-06-23T22:59:22","slug":"map","status":"publish","type":"page","link":"https:\/\/ctest.al\/sq\/map\/","title":{"rendered":"Map"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"162\" class=\"elementor elementor-162\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-15a6f0b e-con-full e-flex e-con e-parent\" data-id=\"15a6f0b\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-51d6923 e-con-full header-commit e-flex e-con e-child\" data-id=\"51d6923\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-c99f22a e-con-full e-flex e-con e-child\" data-id=\"c99f22a\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-8f8752b logo elementor-widget elementor-widget-image\" data-id=\"8f8752b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/ctest.al\/\">\n\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"726\" height=\"143\" src=\"https:\/\/ctest.al\/wp-content\/uploads\/2026\/06\/Commit-Logo-Blu.svg\" class=\"attachment-large size-large wp-image-1338\" alt=\"\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-f80ad25 e-con-full e-flex e-con e-child\" data-id=\"f80ad25\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-123e6ec elementor-nav-menu__align-end elementor-nav-menu--dropdown-none elementor-hidden-tablet elementor-hidden-mobile elementor-widget elementor-widget-nav-menu\" data-id=\"123e6ec\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;layout&quot;:&quot;horizontal&quot;,&quot;submenu_icon&quot;:{&quot;value&quot;:&quot;&lt;svg aria-hidden=\\&quot;true\\&quot; class=\\&quot;e-font-icon-svg e-fas-caret-down\\&quot; viewBox=\\&quot;0 0 320 512\\&quot; xmlns=\\&quot;http:\\\/\\\/www.w3.org\\\/2000\\\/svg\\&quot;&gt;&lt;path d=\\&quot;M31.3 192h257.3c17.8 0 26.7 21.5 14.1 34.1L174.1 354.8c-7.8 7.8-20.5 7.8-28.3 0L17.2 226.1C4.6 213.5 13.5 192 31.3 192z\\&quot;&gt;&lt;\\\/path&gt;&lt;\\\/svg&gt;&quot;,&quot;library&quot;:&quot;fa-solid&quot;}}\" data-widget_type=\"nav-menu.default\">\n\t\t\t\t\t\t\t\t<nav aria-label=\"Menu\" class=\"elementor-nav-menu--main elementor-nav-menu__container elementor-nav-menu--layout-horizontal e--pointer-underline e--animation-fade\">\n\t\t\t\t<ul id=\"menu-1-123e6ec\" class=\"elementor-nav-menu\"><li class=\"menu-item menu-item-type-custom menu-item-object-custom menu-item-1329\"><a href=\"http:\/\/ctest.al\/properties\/?btype=buy\" class=\"elementor-item\">Buy<\/a><\/li>\n<li class=\"menu-item menu-item-type-custom menu-item-object-custom menu-item-1330\"><a href=\"https:\/\/ctest.al\/properties\/?btype=rent\" class=\"elementor-item\">Rent<\/a><\/li>\n<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-897\"><a href=\"https:\/\/ctest.al\/sq\/sell\/\" class=\"elementor-item\">Sell<\/a><\/li>\n<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-1325\"><a href=\"https:\/\/ctest.al\/sq\/development\/\" class=\"elementor-item\">Development<\/a><\/li>\n<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-1061\"><a href=\"https:\/\/ctest.al\/sq\/invest\/\" class=\"elementor-item\">Invest<\/a><\/li>\n<\/ul>\t\t\t<\/nav>\n\t\t\t\t\t\t<nav class=\"elementor-nav-menu--dropdown elementor-nav-menu__container\" aria-hidden=\"true\">\n\t\t\t\t<ul id=\"menu-2-123e6ec\" class=\"elementor-nav-menu\"><li class=\"menu-item menu-item-type-custom menu-item-object-custom menu-item-1329\"><a href=\"http:\/\/ctest.al\/properties\/?btype=buy\" class=\"elementor-item\" tabindex=\"-1\">Buy<\/a><\/li>\n<li class=\"menu-item menu-item-type-custom menu-item-object-custom menu-item-1330\"><a href=\"https:\/\/ctest.al\/properties\/?btype=rent\" class=\"elementor-item\" tabindex=\"-1\">Rent<\/a><\/li>\n<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-897\"><a href=\"https:\/\/ctest.al\/sq\/sell\/\" class=\"elementor-item\" tabindex=\"-1\">Sell<\/a><\/li>\n<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-1325\"><a href=\"https:\/\/ctest.al\/sq\/development\/\" class=\"elementor-item\" tabindex=\"-1\">Development<\/a><\/li>\n<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-1061\"><a href=\"https:\/\/ctest.al\/sq\/invest\/\" class=\"elementor-item\" tabindex=\"-1\">Invest<\/a><\/li>\n<\/ul>\t\t\t<\/nav>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5497898 elementor-hidden-mobile elementor-widget elementor-widget-button\" data-id=\"5497898\" 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:\/\/ctest.al\/map\/\" id=\"btn-commit\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t<span class=\"elementor-button-icon\">\n\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-map-marked-alt\" viewBox=\"0 0 576 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M288 0c-69.59 0-126 56.41-126 126 0 56.26 82.35 158.8 113.9 196.02 6.39 7.54 17.82 7.54 24.2 0C331.65 284.8 414 182.26 414 126 414 56.41 357.59 0 288 0zm0 168c-23.2 0-42-18.8-42-42s18.8-42 42-42 42 18.8 42 42-18.8 42-42 42zM20.12 215.95A32.006 32.006 0 0 0 0 245.66v250.32c0 11.32 11.43 19.06 21.94 14.86L160 448V214.92c-8.84-15.98-16.07-31.54-21.25-46.42L20.12 215.95zM288 359.67c-14.07 0-27.38-6.18-36.51-16.96-19.66-23.2-40.57-49.62-59.49-76.72v182l192 64V266c-18.92 27.09-39.82 53.52-59.49 76.72-9.13 10.77-22.44 16.95-36.51 16.95zm266.06-198.51L416 224v288l139.88-55.95A31.996 31.996 0 0 0 576 426.34V176.02c0-11.32-11.43-19.06-21.94-14.86z\"><\/path><\/svg>\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Properties Map<\/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-8c7b888 open-menu elementor-hidden-mobile elementor-widget elementor-widget-button\" data-id=\"8c7b888\" 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-size-sm\" role=\"button\" id=\"btn-commit\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t<span class=\"elementor-button-icon\">\n\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-bars\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"><\/path><\/svg>\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Menu<\/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-4e37720 open-menu-mobile elementor-hidden-desktop elementor-hidden-tablet elementor-view-default elementor-widget elementor-widget-icon\" data-id=\"4e37720\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-wrapper\">\n\t\t\t<div class=\"elementor-icon\">\n\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-bars\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"><\/path><\/svg>\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8922196 htc elementor-widget elementor-widget-html\" data-id=\"8922196\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<style>\r\n    @media (min-width: 1680px) {\r\n        :root {\r\n            --padding: clamp(11.125rem, 7.8125vw, 25rem);\r\n        }\r\n    }\r\n\r\n    @media (max-width: 1680px) {\r\n        :root {\r\n            --padding: 20px !important;\r\n        }\r\n    }\r\n\r\n    .htc {\r\n        display: none;\r\n    }\r\n\r\n    .header-commit {\r\n        transition: background-color 250ms ease;\r\n        background-color: transparent;\r\n    }\r\n\r\n    .logo,\r\n    #btn-commit {\r\n        transition: transform 250ms ease !important;\r\n    }\r\n\r\n    .logo:hover,\r\n    #btn-commit:hover {\r\n        transform: scale(1.025);\r\n    }\r\n\r\n    .logo:active,\r\n    #btn-commit:active {\r\n        transform: scale(0.975);\r\n    }\r\n\r\n    \/* Parent wrapper *\/\r\n    .menu-container {\r\n        pointer-events: none;\r\n        visibility: hidden;\r\n        transition: visibility 0s linear 250ms;\r\n    }\r\n\r\n    .menu-container.show {\r\n        pointer-events: auto;\r\n        visibility: visible;\r\n        transition: visibility 0s linear 0s;\r\n    }\r\n\r\n    \/* Animated child *\/\r\n    .menu-commit {\r\n        opacity: 0;\r\n        transform: translateY(40px);\r\n        box-shadow: 0 0 0 100vmax rgba(0, 0, 0, 0);\r\n        transition: opacity 250ms ease, transform 150ms ease, box-shadow 250ms ease !important;\r\n    }\r\n\r\n    .menu-container.show .menu-commit {\r\n        opacity: 1;\r\n        transform: translateY(0);\r\n        box-shadow: 0 0 0 100vmax rgba(0, 0, 0, 0.7);\r\n    }\r\n    \r\n    .open-menu{\r\n        cursor: pointer;\r\n    }\r\n    \r\n    .menu-mobile {\r\n        opacity: 0;\r\n        pointer-events: none;\r\n        visibility: hidden;\r\n\r\n        transition:\r\n            opacity 250ms ease,\r\n            visibility 0s linear 250ms;\r\n    }\r\n\r\n    .menu-mobile.show {\r\n        opacity: 1;\r\n        pointer-events: auto;\r\n        visibility: visible;\r\n\r\n        transition:\r\n            opacity 250ms ease,\r\n            visibility 0s linear 0s;\r\n    }\r\n<\/style>\r\n\r\n<script>\r\ndocument.addEventListener(\"DOMContentLoaded\", function () {\r\n    const header = document.querySelector(\".header-commit\");\r\n    const openMenu = document.querySelector(\".open-menu\");\r\n    const closeMenu = document.querySelector(\".close-menu\");\r\n    const menuContainer = document.querySelector(\".menu-container\");\r\n\r\n    if (!header || !openMenu || !menuContainer) return;\r\n\r\n    const SCROLL_THRESHOLD = 50;\r\n    let open = false;\r\n\r\n    window.addEventListener(\"scroll\", function () {\r\n        if (window.scrollY > SCROLL_THRESHOLD) {\r\n            header.classList.add(\"scrolled\");\r\n        } else {\r\n            header.classList.remove(\"scrolled\");\r\n        }\r\n    }, { passive: true });\r\n\r\n    function showMenu() {\r\n        menuContainer.classList.add(\"show\");\r\n        open = true;\r\n    }\r\n\r\n    function hideMenu() {\r\n        menuContainer.classList.remove(\"show\");\r\n        open = false;\r\n    }\r\n\r\n    openMenu.addEventListener(\"click\", function () {\r\n        if (open) {\r\n            hideMenu();\r\n        } else {\r\n            showMenu();\r\n        }\r\n    });\r\n\r\n    if (closeMenu) {\r\n        closeMenu.addEventListener(\"click\", hideMenu);\r\n    }\r\n    \r\n    \r\n    const openMobile = document.querySelector(\".open-menu-mobile\");\r\n    const closeMobile = document.querySelector(\".close-menu-mobile\");\r\n    const menuMobile = document.querySelector(\".menu-mobile\");\r\n\r\n    if (!openMobile || !menuMobile) return;\r\n\r\n    function showMobileMenu() {\r\n        menuMobile.classList.add(\"show\");\r\n    }\r\n\r\n    function hideMobileMenu() {\r\n        menuMobile.classList.remove(\"show\");\r\n    }\r\n\r\n    openMobile.addEventListener(\"click\", function () {\r\n        menuMobile.classList.toggle(\"show\");\r\n    });\r\n\r\n    if (closeMobile) {\r\n        closeMobile.addEventListener(\"click\", hideMobileMenu);\r\n    }\r\n});\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4b58e98 elementor-widget elementor-widget-shortcode\" data-id=\"4b58e98\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><link href=\"https:\/\/fonts.googleapis.com\/css2?family=Montserrat:wght@400;500;600;700;800&family=Montserrat:wght@400;500;600;700;800&display=swap\" rel=\"stylesheet\">\n\n<div id=\"crm-map-wrap\">\n\n    <!-- \u2550\u2550 TOP BAR \u2550\u2550 -->\n    <div id=\"crm-top-bar\">\n\n        <!-- Search -->\n        <div class=\"crm-search-wrap\">\n            <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\">\n                <circle cx=\"11\" cy=\"11\" r=\"8\"\/><path d=\"m21 21-4.35-4.35\"\/>\n            <\/svg>\n            <input type=\"text\" id=\"crm-search-input\" placeholder=\"City, neighborhood, property...\">\n        <\/div>\n\n        <!-- Mobile-only Filters trigger \u2014 opens the accordion drawer with all pills -->\n        <button id=\"crm-mf-trigger\" onclick=\"openMobileFilterDrawer()\">\n            <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"><path d=\"M4 6h16M7 12h10M10 18h4\"\/><\/svg>\n            Filters\n            <span id=\"crm-mf-badge\">0<\/span>\n        <\/button>\n\n        <!-- City pill \u2014 populated dynamically from DB -->\n        <div class=\"crm-pill\" id=\"pill-city\" onclick=\"crmTogglePill('dd-city',this)\">\n            <span class=\"crm-pill-label\" id=\"pill-city-label\">All cities<\/span>\n            <svg width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"><path d=\"m6 9 6 6 6-6\"\/><\/svg>\n            <div class=\"crm-pill-dropdown\" id=\"dd-city\">\n                <label><input type=\"radio\" name=\"city_filter\" value=\"\"> All cities<\/label>\n                                <label><input type=\"radio\" name=\"city_filter\" value=\"Berat\"> Berat<\/label>\n                                <label><input type=\"radio\" name=\"city_filter\" value=\"Dib\u00ebr\"> Dib\u00ebr<\/label>\n                                <label><input type=\"radio\" name=\"city_filter\" value=\"Durr\u00ebs\"> Durr\u00ebs<\/label>\n                                <label><input type=\"radio\" name=\"city_filter\" value=\"Elbasan\"> Elbasan<\/label>\n                                <label><input type=\"radio\" name=\"city_filter\" value=\"Fier\"> Fier<\/label>\n                                <label><input type=\"radio\" name=\"city_filter\" value=\"Gjirokast\u00ebr\"> Gjirokast\u00ebr<\/label>\n                                <label><input type=\"radio\" name=\"city_filter\" value=\"Kor\u00e7\u00eb\"> Kor\u00e7\u00eb<\/label>\n                                <label><input type=\"radio\" name=\"city_filter\" value=\"Kuk\u00ebs\"> Kuk\u00ebs<\/label>\n                                <label><input type=\"radio\" name=\"city_filter\" value=\"Lezh\u00eb\"> Lezh\u00eb<\/label>\n                                <label><input type=\"radio\" name=\"city_filter\" value=\"Shkod\u00ebr\"> Shkod\u00ebr<\/label>\n                                <label><input type=\"radio\" name=\"city_filter\" value=\"Tiran\u00eb\"> Tiran\u00eb<\/label>\n                                <label><input type=\"radio\" name=\"city_filter\" value=\"Vlor\u00eb\"> Vlor\u00eb<\/label>\n                                <button class=\"crm-dd-apply\" onclick=\"crmApplyPill('city_filter')\">Apply<\/button>\n            <\/div>\n        <\/div>\n\n        <!-- For Sale pill -->\n        <div class=\"crm-pill active\" id=\"pill-btype\" onclick=\"crmTogglePill('dd-btype',this)\">\n            <span class=\"crm-pill-label\" id=\"pill-btype-label\">Any type<\/span>\n            <svg width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"><path d=\"m6 9 6 6 6-6\"\/><\/svg>\n            <div class=\"crm-pill-dropdown\" id=\"dd-btype\">\n                <label><input type=\"radio\" name=\"btype\" value=\"buy\"> For Sale<\/label>\n                <label><input type=\"radio\" name=\"btype\" value=\"rent\"> For Rent<\/label>\n                <label><input type=\"radio\" name=\"btype\" value=\"\" checked> Any<\/label>\n                <button class=\"crm-dd-apply\" onclick=\"crmApplyPill('btype')\">Apply<\/button>\n            <\/div>\n        <\/div>\n\n        <!-- Price pill -->\n        <div class=\"crm-pill\" id=\"pill-price\" onclick=\"crmTogglePill('dd-price',this)\">\n            <span class=\"crm-pill-label\" id=\"pill-price-label\">Any price<\/span>\n            <svg width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"><path d=\"m6 9 6 6 6-6\"\/><\/svg>\n            <div class=\"crm-pill-dropdown\" id=\"dd-price\">\n                <div style=\"padding:8px 10px 4px;font-size:12px;font-weight:600;color:var(--muted);\">PRICE RANGE<\/div>\n                <div class=\"crm-dd-row\">\n                    <input type=\"number\" id=\"f-pmin\" placeholder=\"Min \u20ac\">\n                    <input type=\"number\" id=\"f-pmax\" placeholder=\"Max \u20ac\">\n                <\/div>\n                <button class=\"crm-dd-apply\" onclick=\"crmApplyPill('price')\">Apply<\/button>\n            <\/div>\n        <\/div>\n\n        <!-- Neighborhood pill \u2014 populated dynamically by JS after hoodData loads -->\n        <div class=\"crm-pill\" id=\"pill-hood\" onclick=\"crmTogglePill('dd-hood',this)\" style=\"display:none;\">\n            <span class=\"crm-pill-label\" id=\"pill-hood-label\">All neighborhoods<\/span>\n            <svg width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"><path d=\"m6 9 6 6 6-6\"\/><\/svg>\n            <div class=\"crm-pill-dropdown\" id=\"dd-hood\">\n                <div style=\"padding:8px 10px 4px;font-size:12px;font-weight:600;color:var(--muted);\">NEIGHBORHOOD<\/div>\n                <div id=\"dd-hood-options\" style=\"max-height:220px;overflow-y:auto;padding:4px 0;\">\n                    <label><input type=\"radio\" name=\"hood\" value=\"\"> All neighborhoods<\/label>\n                <\/div>\n                <button class=\"crm-dd-apply\" onclick=\"crmApplyPill('hood')\">Apply<\/button>\n                <button class=\"crm-dd-secondary\" onclick=\"crmClearHood()\">Clear neighborhood<\/button>\n            <\/div>\n        <\/div>\n\n        <!-- Property type pill -->\n        <div class=\"crm-pill\" id=\"pill-utype\" onclick=\"crmTogglePill('dd-utype',this)\">\n            <span class=\"crm-pill-label\" id=\"pill-utype-label\">All property types<\/span>\n            <svg width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"><path d=\"m6 9 6 6 6-6\"\/><\/svg>\n            <div class=\"crm-pill-dropdown\" id=\"dd-utype\">\n                <label><input type=\"radio\" name=\"utype\" value=\"\"> All types<\/label>\n                                <label><input type=\"radio\" name=\"utype\" value=\"apartment\"> Apartment<\/label>\n                                <label><input type=\"radio\" name=\"utype\" value=\"other\"> Other<\/label>\n                                <label><input type=\"radio\" name=\"utype\" value=\"penthouse\"> Penthouse<\/label>\n                                <label><input type=\"radio\" name=\"utype\" value=\"villa\"> Villa<\/label>\n                                <button class=\"crm-dd-apply\" onclick=\"crmApplyPill('utype')\">Apply<\/button>\n            <\/div>\n        <\/div>\n\n        <!-- Beds pill -->\n        <div class=\"crm-pill\" id=\"pill-beds\" onclick=\"crmTogglePill('dd-beds',this)\">\n            <span class=\"crm-pill-label\" id=\"pill-beds-label\">All beds<\/span>\n            <svg width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"><path d=\"m6 9 6 6 6-6\"\/><\/svg>\n            <div class=\"crm-pill-dropdown\" id=\"dd-beds\">\n                <div style=\"padding:8px 10px 4px;font-size:12px;font-weight:600;color:var(--muted);\">BEDROOMS (MIN)<\/div>\n                <div style=\"display:flex;gap:6px;padding:4px 10px 8px;flex-wrap:wrap;\">\n                                        <button onclick=\"crmSetBeds(0)\" class=\"crm-bed-btn\" data-beds=\"0\"\n                        style=\"flex:1;min-width:36px;padding:6px 4px;border:1px solid var(--border);border-radius:8px;font-family:var(--ff);font-size:13px;font-weight:600;cursor:pointer;background:#fff;color:var(--text);transition:all .15s;\">\n                        Any                    <\/button>\n                                        <button onclick=\"crmSetBeds(1)\" class=\"crm-bed-btn\" data-beds=\"1\"\n                        style=\"flex:1;min-width:36px;padding:6px 4px;border:1px solid var(--border);border-radius:8px;font-family:var(--ff);font-size:13px;font-weight:600;cursor:pointer;background:#fff;color:var(--text);transition:all .15s;\">\n                        1+                    <\/button>\n                                        <button onclick=\"crmSetBeds(2)\" class=\"crm-bed-btn\" data-beds=\"2\"\n                        style=\"flex:1;min-width:36px;padding:6px 4px;border:1px solid var(--border);border-radius:8px;font-family:var(--ff);font-size:13px;font-weight:600;cursor:pointer;background:#fff;color:var(--text);transition:all .15s;\">\n                        2+                    <\/button>\n                                        <button onclick=\"crmSetBeds(3)\" class=\"crm-bed-btn\" data-beds=\"3\"\n                        style=\"flex:1;min-width:36px;padding:6px 4px;border:1px solid var(--border);border-radius:8px;font-family:var(--ff);font-size:13px;font-weight:600;cursor:pointer;background:#fff;color:var(--text);transition:all .15s;\">\n                        3+                    <\/button>\n                                        <button onclick=\"crmSetBeds(4)\" class=\"crm-bed-btn\" data-beds=\"4\"\n                        style=\"flex:1;min-width:36px;padding:6px 4px;border:1px solid var(--border);border-radius:8px;font-family:var(--ff);font-size:13px;font-weight:600;cursor:pointer;background:#fff;color:var(--text);transition:all .15s;\">\n                        4+                    <\/button>\n                                        <button onclick=\"crmSetBeds(5)\" class=\"crm-bed-btn\" data-beds=\"5\"\n                        style=\"flex:1;min-width:36px;padding:6px 4px;border:1px solid var(--border);border-radius:8px;font-family:var(--ff);font-size:13px;font-weight:600;cursor:pointer;background:#fff;color:var(--text);transition:all .15s;\">\n                        5+                    <\/button>\n                                    <\/div>\n                <button class=\"crm-dd-apply\" onclick=\"crmApplyPill('beds')\">Apply<\/button>\n            <\/div>\n        <\/div>\n\n        <!-- Baths pill -->\n        <div class=\"crm-pill\" id=\"pill-baths\" onclick=\"crmTogglePill('dd-baths',this)\">\n            <span class=\"crm-pill-label\" id=\"pill-baths-label\">All baths<\/span>\n            <svg width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"><path d=\"m6 9 6 6 6-6\"\/><\/svg>\n            <div class=\"crm-pill-dropdown\" id=\"dd-baths\">\n                <div style=\"padding:8px 10px 4px;font-size:12px;font-weight:600;color:var(--muted);\">BATHROOMS (MIN)<\/div>\n                <div style=\"display:flex;gap:6px;padding:4px 10px 8px;flex-wrap:wrap;\">\n                                        <button onclick=\"crmSetBaths(0)\" class=\"crm-bath-btn\" data-baths=\"0\"\n                        style=\"flex:1;min-width:36px;padding:6px 4px;border:1px solid var(--border);border-radius:8px;font-family:var(--ff);font-size:13px;font-weight:600;cursor:pointer;background:#fff;color:var(--text);transition:all .15s;\">\n                        Any                    <\/button>\n                                        <button onclick=\"crmSetBaths(1)\" class=\"crm-bath-btn\" data-baths=\"1\"\n                        style=\"flex:1;min-width:36px;padding:6px 4px;border:1px solid var(--border);border-radius:8px;font-family:var(--ff);font-size:13px;font-weight:600;cursor:pointer;background:#fff;color:var(--text);transition:all .15s;\">\n                        1+                    <\/button>\n                                        <button onclick=\"crmSetBaths(2)\" class=\"crm-bath-btn\" data-baths=\"2\"\n                        style=\"flex:1;min-width:36px;padding:6px 4px;border:1px solid var(--border);border-radius:8px;font-family:var(--ff);font-size:13px;font-weight:600;cursor:pointer;background:#fff;color:var(--text);transition:all .15s;\">\n                        2+                    <\/button>\n                                        <button onclick=\"crmSetBaths(3)\" class=\"crm-bath-btn\" data-baths=\"3\"\n                        style=\"flex:1;min-width:36px;padding:6px 4px;border:1px solid var(--border);border-radius:8px;font-family:var(--ff);font-size:13px;font-weight:600;cursor:pointer;background:#fff;color:var(--text);transition:all .15s;\">\n                        3+                    <\/button>\n                                        <button onclick=\"crmSetBaths(4)\" class=\"crm-bath-btn\" data-baths=\"4\"\n                        style=\"flex:1;min-width:36px;padding:6px 4px;border:1px solid var(--border);border-radius:8px;font-family:var(--ff);font-size:13px;font-weight:600;cursor:pointer;background:#fff;color:var(--text);transition:all .15s;\">\n                        4+                    <\/button>\n                                    <\/div>\n                <button class=\"crm-dd-apply\" onclick=\"crmApplyPill('baths')\">Apply<\/button>\n            <\/div>\n        <\/div>\n\n        <!-- Clear Filters button -->\n        <button id=\"crm-btn-clear\" onclick=\"crmClearAllFilters()\">\u2715 Clear Filters<\/button>\n\n        <div class=\"crm-top-right\">\n            <!-- Draw area filter -->\n            <div style=\"display:flex;align-items:center;gap:0;\">\n                <button id=\"btn-draw\">\u270f Draw area<\/button>\n                <button id=\"btn-draw-clear\" title=\"Clear drawn area\">\u2715<\/button>\n            <\/div>\n\n            <!-- View toggle (mobile only) -->\n            <div id=\"crm-view-toggle\">\n                <button class=\"crm-view-btn active\" id=\"vbtn-list\" onclick=\"crmSetView('list')\">\n                    <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><rect x=\"3\" y=\"3\" width=\"7\" height=\"7\"\/><rect x=\"14\" y=\"3\" width=\"7\" height=\"7\"\/><rect x=\"3\" y=\"14\" width=\"7\" height=\"7\"\/><rect x=\"14\" y=\"14\" width=\"7\" height=\"7\"\/><\/svg>\n                    List\n                <\/button>\n                <button class=\"crm-view-btn\" id=\"vbtn-map\" onclick=\"crmSetView('map')\">\n                    <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M9 20l-5.447-2.724A1 1 0 013 16.382V5.618a1 1 0 011.447-.894L9 7m0 13l6-3m-6-10l6-3m0 16l5.447-2.724A1 1 0 0021 18.382V7.618a1 1 0 00-.553-.894L15 4m0 13V4\"\/><\/svg>\n                    Map\n                <\/button>\n            <\/div>\n        <\/div>\n\n    <\/div>\n\n    <!-- \u2550\u2550 MOBILE FILTER DRAWER \u2550\u2550\n         Pills (with their dropdowns) are moved HERE via JS when opened on\n         mobile, turning them into an accordion. They're moved back to their\n         original spot in the top bar when the drawer closes, so desktop\n         layout is unaffected and all existing pill JS keeps working as-is. -->\n    <div id=\"crm-mf-overlay\" onclick=\"closeMobileFilterDrawer()\"><\/div>\n    <div id=\"crm-mf-drawer\">\n        <div id=\"crm-mf-drawer-handle\"><\/div>\n        <div id=\"crm-mf-drawer-header\">\n            <span>Filters<\/span>\n            <button id=\"crm-mf-close\" onclick=\"closeMobileFilterDrawer()\" aria-label=\"Close\">\n                <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"><path d=\"M18 6 6 18M6 6l12 12\"\/><\/svg>\n            <\/button>\n        <\/div>\n        <div id=\"crm-mf-drawer-body\"><!-- pills reparented here on open --><\/div>\n        <div id=\"crm-mf-drawer-footer\">\n            <button id=\"crm-mf-clear\" onclick=\"crmClearAllFilters()\">Clear all<\/button>\n            <button id=\"crm-mf-apply\" onclick=\"closeMobileFilterDrawer()\">Show results<\/button>\n        <\/div>\n    <\/div>\n\n    <!-- \u2550\u2550 BODY \u2550\u2550 -->\n    <div id=\"crm-body\">\n\n        <!-- LISTINGS LEFT -->\n        <div id=\"crm-listings-panel\">\n            <div id=\"crm-listings-header\">\n                <div id=\"crm-results-count\">Loading...<\/div>\n                <div id=\"crm-results-sub\"><\/div>\n            <\/div>\n            <div id=\"crm-results-grid\"><\/div>\n        <\/div>\n\n        <!-- Mobile-only split resizer handle \u2014 sits between map & listings.\n             Drag vertically to rescale the two panes (Android multi-view style). -->\n        <div id=\"crm-split-handle\" role=\"separator\" aria-label=\"Resize map and listings\">\n            <span class=\"crm-split-grip\"><\/span>\n        <\/div>\n\n        <!-- MAP RIGHT -->\n        <div id=\"crm-map\"><\/div>\n\n    <\/div>\n<\/div>\n\n<script>\n\/\/ \u2500\u2500 Active filter state \u2500\u2500\nvar CRM_FILTERS = {\n    btype: '',   \/\/ '' = show all; 'buy' or 'rent' when the user picks a pill\n    pmin: 0, pmax: Infinity,\n    utype: '',\n    city_filter: '',\n    hood: '',\n    beds: 0, baths: 0,\n    search: '',\n    drawn: null\n};\nvar CRM_BEDS_SEL  = 0;\nvar CRM_BATHS_SEL = 0;\n\n\/\/ \u2500\u2500 Pill toggle \u2500\u2500\nfunction crmTogglePill(ddId, pillEl){\n    \/\/ Bail if the click originated inside the dropdown itself \u2014 its own\n    \/\/ controls (inputs, radios, apply button) shouldn't toggle the pill.\n    \/\/ Only the pill's label\/chevron area should open\/close it.\n    if(event.target.closest('.crm-pill-dropdown')) return;\n    event.stopPropagation();\n    var dd = document.getElementById(ddId);\n    var isOpen = dd.classList.contains('open');\n    \/\/ Close all\n    document.querySelectorAll('.crm-pill-dropdown').forEach(function(d){ d.classList.remove('open'); });\n    if(!isOpen) dd.classList.add('open');\n}\ndocument.addEventListener('click', function(e){\n    if(!e.target.closest('.crm-pill') && !e.target.closest('#crm-mf-drawer')) {\n        document.querySelectorAll('.crm-pill-dropdown').forEach(function(d){ d.classList.remove('open'); });\n    }\n});\n\n\/\/ \u2500\u2500 Mobile filter drawer: reparents the pills into an accordion \u2500\u2500\nvar MF_PILL_IDS = ['pill-city','pill-btype','pill-price','pill-hood','pill-utype','pill-beds','pill-baths'];\nvar MF_ORIGINAL_SLOTS = [];\n\nfunction openMobileFilterDrawer(){\n    var body = document.getElementById('crm-mf-drawer-body');\n    if(!body) return;\n    MF_ORIGINAL_SLOTS = [];\n    MF_PILL_IDS.forEach(function(id){\n        var el = document.getElementById(id);\n        if(!el) return;\n        \/\/ Remember exactly where this pill came from so we can put it back\n        MF_ORIGINAL_SLOTS.push({ el:el, parent:el.parentNode, next:el.nextSibling });\n        body.appendChild(el);\n    });\n    document.getElementById('crm-mf-overlay').classList.add('open');\n    document.getElementById('crm-mf-drawer').classList.add('open');\n    document.body.classList.add('crm-mf-open');\n}\n\nfunction closeMobileFilterDrawer(){\n    \/\/ Move every pill back to its original position in the top bar\n    MF_ORIGINAL_SLOTS.forEach(function(slot){\n        if(slot.next && slot.next.parentNode === slot.parent){\n            slot.parent.insertBefore(slot.el, slot.next);\n        } else {\n            slot.parent.appendChild(slot.el);\n        }\n    });\n    MF_ORIGINAL_SLOTS = [];\n    document.getElementById('crm-mf-overlay').classList.remove('open');\n    document.getElementById('crm-mf-drawer').classList.remove('open');\n    document.body.classList.remove('crm-mf-open');\n    document.querySelectorAll('.crm-pill-dropdown').forEach(function(d){ d.classList.remove('open'); });\n    updateMobileFilterBadge();\n}\n\n\/\/ Swipe-down-to-close on the drawer (mobile bottom-sheet gesture)\n(function(){\n    var drawer = document.getElementById('crm-mf-drawer');\n    if(!drawer) return;\n    var startY = 0, dragging = false;\n    drawer.addEventListener('touchstart', function(e){\n        startY = e.touches[0].clientY; dragging = true;\n    }, {passive:true});\n    drawer.addEventListener('touchend', function(e){\n        if(!dragging) return;\n        dragging = false;\n        var dy = e.changedTouches[0].clientY - startY;\n        if(dy > 80) closeMobileFilterDrawer();\n    }, {passive:true});\n})();\n\n\/\/ Counts how many filters are actively set and updates the badge on the\n\/\/ mobile \"Filters\" trigger button.\nfunction updateMobileFilterBadge(){\n    var count = 0;\n    if(CRM_FILTERS.city_filter) count++;\n    if(CRM_FILTERS.btype) count++;\n    if(CRM_FILTERS.pmin || (CRM_FILTERS.pmax && CRM_FILTERS.pmax !== Infinity)) count++;\n    if(CRM_FILTERS.hood) count++;\n    if(CRM_FILTERS.utype) count++;\n    if(CRM_FILTERS.beds) count++;\n    if(CRM_FILTERS.baths) count++;\n    var badge = document.getElementById('crm-mf-badge');\n    if(!badge) return;\n    if(count > 0){\n        badge.textContent = count;\n        badge.style.display = 'flex';\n    } else {\n        badge.style.display = 'none';\n    }\n}\n\n\/\/ \u2500\u2500 Programmatic-navigation guard (global: used by reset handlers that\n\/\/ live outside initCrmMap as well as by the region\/hood click handlers) \u2500\u2500\nvar suppressZoomLevelSync = false;\nvar _suppressTimer = null;\nfunction crmNavigate(fn){\n    suppressZoomLevelSync = true;\n    clearTimeout(_suppressTimer);\n    fn();\n    _suppressTimer = setTimeout(function(){\n        suppressZoomLevelSync = false;\n        \/\/ Resync the baseline so the next real user zoom is measured\n        \/\/ against where we actually landed.\n        if(window._crmSyncZoomBaseline) window._crmSyncZoomBaseline();\n    }, 1200);\n}\n\n\/\/ \u2500\u2500 Global city-normalization helpers \u2500\u2500\n\/\/ Defined at global scope so both crmApplyPill (outside initCrmMap) and\n\/\/ initCrmMap internals can use them.\nfunction normCity(c){ return (c||'').toLowerCase().replace(\/\u00eb\/g,'e').replace(\/\u00e7\/g,'c').trim(); }\nfunction getHoodCity(n){ var v=normCity(n); if(v==='tirane'||v==='tirana') return 'Tirana'; if(v==='durres') return 'Durres'; return null; }\nfunction getCityForHoodCity(h){ return h==='Tirana'?'Tiran\u00eb':h==='Durres'?'Durr\u00ebs':h; }\nfunction getCityPillValueForRegion(regionName){\n    var hc = getHoodCity(regionName);\n    if(hc) return hc;\n    var rn = normCity(regionName);\n    var best = null;\n    document.querySelectorAll('input[name=\"city_filter\"]').forEach(function(r){\n        if(!r.value) return;\n        var rv = normCity(r.value);\n        if(rv === rn || rn.indexOf(rv) !== -1 || rv.indexOf(rn) !== -1) best = r.value;\n    });\n    return best || '';\n}\n\n\/\/ \u2500\u2500 Sync current filters into the browser URL (shareable \/ bookmarkable) \u2500\u2500\n\/\/ Uses history.replaceState so we don't spam the back button on every pill change.\nfunction crmUpdateUrl(){\n    try{\n        var params = new URLSearchParams(window.location.search);\n        var f = CRM_FILTERS;\n        function setP(k,v){ if(v!==''&&v!=null&&v!==0&&v!==Infinity) params.set(k,v); else params.delete(k); }\n        setP('city',  f.city_filter || '');\n        setP('btype', f.btype || '');\n        setP('utype', f.utype || '');\n        setP('beds',  f.beds  || '');\n        setP('baths', f.baths || '');\n        setP('pmin',  f.pmin  || '');\n        setP('pmax',  (f.pmax && f.pmax!==Infinity) ? f.pmax : '');\n        setP('hood',  f.hood  || '');\n        setP('q',     f.search || '');\n        var qs = params.toString();\n        var newUrl = window.location.pathname + (qs ? '?'+qs : '') + window.location.hash;\n        history.replaceState(null, '', newUrl);\n    }catch(e){ \/* no-op if History API unavailable *\/ }\n}\n\n\/\/ \u2500\u2500 Apply pill \u2500\u2500\nfunction crmApplyPill(type){\n    document.querySelectorAll('.crm-pill-dropdown').forEach(function(d){ d.classList.remove('open'); });\n\n    if(type==='city_filter'){\n        var val = (document.querySelector('input[name=\"city_filter\"]:checked') || {}).value || '';\n        CRM_FILTERS.city_filter = val;\n        var lbl = val ? val : 'All cities';\n        document.getElementById('pill-city-label').textContent = lbl;\n        document.getElementById('pill-city').classList.toggle('active', !!val);\n        crmUpdateUrl(); \/\/ reflect city in the address bar (shareable \/ bookmarkable)\n        if(val){\n            \/\/ Navigate map to this city\n            if(window.albaniaData){\n                var feat = window.albaniaData.features.find(function(f){\n                    return normCity(f.properties.NAME_1) === normCity(val);\n                });\n                if(feat && window.regionLayers && window.regionLayers[feat.properties.NAME_1]){\n                    window.handleRegionClick(feat.properties.NAME_1, window.regionLayers[feat.properties.NAME_1]);\n                    return;\n                }\n            }\n        } else {\n            \/\/ Reset to country view\n            if(window._crmState) { window._crmState.currentLevel=1; window._crmState.currentRegion=null; window._crmState.selectedHood=null; }\n            if(window.showPolygonsForLevel) window.showPolygonsForLevel(1);\n            if(window._crmMap) window._crmMap.flyTo([41.15,19.82], 7, {duration:0.8});\n        }\n        if(window._crmApplyFilters) window._crmApplyFilters();\n        return;\n    }\n    if(type==='btype'){\n        var val = (document.querySelector('input[name=\"btype\"]:checked') || {}).value || '';\n        CRM_FILTERS.btype = val;\n        var lbl = val==='buy'?'For Sale':val==='rent'?'For Rent':'Any type';\n        document.getElementById('pill-btype-label').textContent = lbl;\n        document.getElementById('pill-btype').classList.toggle('active', !!val);\n    }\n    if(type==='price'){\n        var pmin = parseInt(document.getElementById('f-pmin').value)||0;\n        var pmax = parseInt(document.getElementById('f-pmax').value)||Infinity;\n        CRM_FILTERS.pmin = pmin; CRM_FILTERS.pmax = pmax;\n        var lbl = (!pmin&&pmax===Infinity)?'Any price':\n                  (pmin&&pmax<Infinity)?'\u20ac'+fmtK(pmin)+' \u2013 \u20ac'+fmtK(pmax):\n                  (pmin)?'\u20ac'+fmtK(pmin)+'+':'Up to \u20ac'+fmtK(pmax);\n        document.getElementById('pill-price-label').textContent = lbl;\n        document.getElementById('pill-price').classList.toggle('active', pmin>0||pmax<Infinity);\n    }\n    if(type==='utype'){\n        var val = (document.querySelector('input[name=\"utype\"]:checked') || {}).value || '';\n        CRM_FILTERS.utype = val;\n        var lbl = val?ucFirst(val):'All property types';\n        document.getElementById('pill-utype-label').textContent = lbl;\n        document.getElementById('pill-utype').classList.toggle('active', !!val);\n    }\n    if(type==='beds'){\n        CRM_FILTERS.beds = CRM_BEDS_SEL;\n        var lbl = CRM_BEDS_SEL===0?'All beds':CRM_BEDS_SEL+'+ beds';\n        document.getElementById('pill-beds-label').textContent = lbl;\n        document.getElementById('pill-beds').classList.toggle('active', CRM_BEDS_SEL>0);\n    }\n    if(type==='baths'){\n        CRM_FILTERS.baths = CRM_BATHS_SEL;\n        var lbl = CRM_BATHS_SEL===0?'All baths':CRM_BATHS_SEL+'+ baths';\n        document.getElementById('pill-baths-label').textContent = lbl;\n        document.getElementById('pill-baths').classList.toggle('active', CRM_BATHS_SEL>0);\n    }\n    if(type==='hood'){\n        var val = (document.querySelector('input[name=\"hood\"]:checked') || {}).value || '';\n        \/\/ Radio values are exact hood names so direct selection is fine\n        CRM_FILTERS.hood = val;\n        var lbl = val ? val : 'All neighborhoods';\n        document.getElementById('pill-hood-label').textContent = lbl;\n        document.getElementById('pill-hood').classList.toggle('active', !!val);\n        if(val) crmSelectNeighborhoodByName(val);\n        else {\n            \/\/ Cleared \u2014 go back to city view\n            if(window._crmState && window._crmState.currentRegion) window.showPolygonsForLevel(2);\n            else if(window.showPolygonsForLevel) window.showPolygonsForLevel(1);\n            if(window._crmApplyFilters) window._crmApplyFilters();\n        }\n    }\n    crmUpdateUrl(); \/\/ keep the address bar in sync for all filter pills\n    if(window._crmApplyFilters) window._crmApplyFilters();\n    updateMobileFilterBadge();\n}\n\nfunction crmSetBeds(n){\n    CRM_BEDS_SEL = n;\n    document.querySelectorAll('.crm-bed-btn').forEach(function(b){\n        b.style.background = parseInt(b.dataset.beds)===n ? 'var(--brand)' : '#fff';\n        b.style.color      = parseInt(b.dataset.beds)===n ? '#fff' : 'var(--text)';\n        b.style.borderColor= parseInt(b.dataset.beds)===n ? 'var(--brand)' : 'var(--border)';\n    });\n}\nfunction crmSetBaths(n){\n    CRM_BATHS_SEL = n;\n    document.querySelectorAll('.crm-bath-btn').forEach(function(b){\n        b.style.background = parseInt(b.dataset.baths)===n ? 'var(--brand)' : '#fff';\n        b.style.color      = parseInt(b.dataset.baths)===n ? '#fff' : 'var(--text)';\n        b.style.borderColor= parseInt(b.dataset.baths)===n ? 'var(--brand)' : 'var(--border)';\n    });\n}\n\nfunction fmtK(n){ return n>=1000000?(n\/1000000).toFixed(1).replace('.0','')+'M':n>=1000?(n\/1000).toFixed(0)+'K':n; }\nfunction ucFirst(s){ return s?s.charAt(0).toUpperCase()+s.slice(1):s; }\n\n\/\/ \u2500\u2500 Plain text search \u2500\u2500\nvar searchTimer;\ndocument.getElementById('crm-search-input').addEventListener('input', function(){\n    clearTimeout(searchTimer);\n    searchTimer = setTimeout(function(){\n        CRM_FILTERS.search = document.getElementById('crm-search-input').value.toLowerCase().trim();\n        crmUpdateUrl();\n        if(window._crmApplyFilters) window._crmApplyFilters();\n    }, 300);\n});\n\n\/\/ \u2500\u2500 AI Search \u2500\u2500\n\/\/ Apply AI-extracted filters to the map (called from URL params on load)\nwindow.crmApplyAiFilters = function crmApplyAiFilters(filters, query){\n    var LABELS = {\n        business_type:'Type', unit_type:'Property', city:'City',\n        neighborhood:'Neighborhood', min_bedrooms:'Min Beds',\n        min_bathrooms:'Min Baths', min_price:'Min Price',\n        max_price:'Max Price', min_area:'Min Area', max_area:'Max Area'\n    };\n\n    function fmtVal(key, val){\n        if(key==='business_type') return val==='buy'?'For Sale':'For Rent';\n        if(key.includes('price')) return '\u20ac'+Number(val).toLocaleString();\n        if(key.includes('area')) return val+' m\u00b2';\n        if(typeof val==='string') return val.charAt(0).toUpperCase()+val.slice(1);\n        return val;\n    }\n\n    \/\/ Reset all filters first\n    CRM_FILTERS.btype  = '';\n    CRM_FILTERS.utype  = '';\n    CRM_FILTERS.beds   = 0;\n    CRM_FILTERS.baths  = 0;\n    CRM_FILTERS.pmin   = 0;\n    CRM_FILTERS.pmax   = Infinity;\n    CRM_FILTERS.search = '';\n\n    \/\/ Apply extracted filters\n    if(filters.business_type)  CRM_FILTERS.btype = filters.business_type;\n    if(filters.unit_type)      CRM_FILTERS.utype = filters.unit_type;\n    if(filters.min_bedrooms)   CRM_FILTERS.beds  = parseInt(filters.min_bedrooms);\n    if(filters.min_bathrooms)  CRM_FILTERS.baths = parseInt(filters.min_bathrooms);\n    if(filters.min_price)      CRM_FILTERS.pmin  = parseInt(filters.min_price);\n    if(filters.max_price)      CRM_FILTERS.pmax  = parseInt(filters.max_price);\n    if(filters.min_area)       CRM_FILTERS.amin  = parseFloat(filters.min_area);\n    if(filters.max_area)       CRM_FILTERS.amax  = parseFloat(filters.max_area);\n\n    \/\/ Sync pill UI labels\n    if(filters.business_type){\n        var lbl = filters.business_type==='buy'?'For Sale':'For Rent';\n        document.getElementById('pill-btype-label').textContent = lbl;\n        document.getElementById('pill-btype').classList.add('active');\n        document.querySelector('input[name=\"btype\"][value=\"'+filters.business_type+'\"]').checked = true;\n    }\n    if(filters.unit_type){\n        document.getElementById('pill-utype-label').textContent = fmtVal('unit_type', filters.unit_type);\n        document.getElementById('pill-utype').classList.add('active');\n        var ut = document.querySelector('input[name=\"utype\"][value=\"'+filters.unit_type+'\"]');\n        if(ut) ut.checked = true;\n    }\n    if(filters.min_price||filters.max_price){\n        var pmin = filters.min_price||0, pmax = filters.max_price||0;\n        if(pmin) document.getElementById('f-pmin').value = pmin;\n        if(pmax) document.getElementById('f-pmax').value = pmax;\n        var plbl = (pmin&&pmax)?'\u20ac'+fmtK(pmin)+' \u2013 \u20ac'+fmtK(pmax):(pmin?'\u20ac'+fmtK(pmin)+'+':'Up to \u20ac'+fmtK(pmax));\n        document.getElementById('pill-price-label').textContent = plbl;\n        document.getElementById('pill-price').classList.add('active');\n    }\n    if(filters.min_bedrooms){\n        CRM_BEDS_SEL = parseInt(filters.min_bedrooms);\n        crmSetBeds(CRM_BEDS_SEL);\n        document.getElementById('pill-beds-label').textContent = CRM_BEDS_SEL+'+ beds';\n        document.getElementById('pill-beds').classList.add('active');\n    }\n    if(filters.min_bathrooms){\n        CRM_BATHS_SEL = parseInt(filters.min_bathrooms);\n        crmSetBaths(CRM_BATHS_SEL);\n        document.getElementById('pill-baths-label').textContent = CRM_BATHS_SEL+'+ baths';\n        document.getElementById('pill-baths').classList.add('active');\n    }\n\n    \/\/ Navigate map to city\/neighborhood if specified\n    if(filters.city && albaniaData){\n        var regionFeature = albaniaData.features.find(function(f){\n            return normCity(f.properties.NAME_1)===normCity(filters.city);\n        });\n        if(regionFeature){\n            currentRegion = regionFeature.properties.NAME_1;\n            currentLevel  = 2;\n            showPolygonsForLevel(2);\n        }\n    }\n    if(filters.neighborhood){\n        \/\/ Use fuzzy match \u2014 AI may return partial\/approximate names\n        setTimeout(function(){ crmSelectNeighborhoodByName(filters.neighborhood); }, 600);\n    }\n\n    \/\/ Show AI filter pills strip\n    var pillsEl = document.getElementById('crm-ai-pills');\n    pillsEl.innerHTML = '';\n    var keys = Object.keys(filters);\n    keys.forEach(function(key){\n        var c = document.createElement('div');\n        c.className = 'crm-ai-pill';\n        c.innerHTML = '<span class=\"crm-ai-pill-key\">'+(LABELS[key]||key)+'<\/span>'+fmtVal(key, filters[key]);\n        pillsEl.appendChild(c);\n    });\n    var clearBtn = document.createElement('button');\n    clearBtn.id = 'crm-ai-clear';\n    clearBtn.textContent = '\u2715 Clear AI filters';\n    clearBtn.onclick = function(){ crmClearAiFilters(); };\n    pillsEl.appendChild(clearBtn);\n    pillsEl.classList.add('visible');\n\n    if(window._crmApplyFilters) window._crmApplyFilters();\n}\n\n\/\/ Global clear \u2014 called by the Clear Filters button in the top bar\n\/\/ Clear only the neighborhood filter (called from inside the neighborhood dropdown)\nwindow.crmClearHood = function(){\n    CRM_FILTERS.hood = '';\n    var radio = document.querySelector('input[name=\"hood\"][value=\"\"]');\n    if(radio) radio.checked = true;\n    document.getElementById('pill-hood-label').textContent = 'All neighborhoods';\n    document.getElementById('pill-hood').classList.remove('active');\n    \/\/ Close the dropdown so the user sees the reset take effect\n    document.querySelectorAll('.crm-pill-dropdown').forEach(function(d){ d.classList.remove('open'); });\n    crmUpdateUrl();\n    if(window._crmApplyFilters) window._crmApplyFilters();\n    updateMobileFilterBadge();\n    \/\/ If a hood polygon was selected on the map, deselect it too\n    if(window._crmState) window._crmState.selectedHood = null;\n    if(window.showPolygonsForLevel && window._crmState && window._crmState.currentLevel){\n        window.showPolygonsForLevel(window._crmState.currentLevel);\n    }\n};\n\nwindow.crmClearAllFilters = function(){\n    \/\/ Reset filter state\n    CRM_FILTERS.btype  = ''; CRM_FILTERS.utype  = '';\n    CRM_FILTERS.beds   = 0;  CRM_FILTERS.baths  = 0;\n    CRM_FILTERS.pmin   = 0;  CRM_FILTERS.pmax   = Infinity;\n    CRM_FILTERS.amin   = 0;  CRM_FILTERS.amax   = Infinity;\n    CRM_FILTERS.hood   = ''; CRM_FILTERS.search = '';\n    CRM_FILTERS.drawn  = null;\n\n    \/\/ Reset pill labels\n    document.getElementById('pill-btype-label').textContent  = 'Any type';\n    document.getElementById('pill-btype').classList.remove('active');\n    document.getElementById('pill-price-label').textContent  = 'Any price';\n    document.getElementById('pill-price').classList.remove('active');\n    document.getElementById('pill-utype-label').textContent  = 'All property types';\n    document.getElementById('pill-utype').classList.remove('active');\n    document.getElementById('pill-beds-label').textContent   = 'All beds';\n    document.getElementById('pill-beds').classList.remove('active');\n    document.getElementById('pill-baths-label').textContent  = 'All baths';\n    document.getElementById('pill-baths').classList.remove('active');\n    document.getElementById('pill-hood-label').textContent   = 'All neighborhoods';\n    document.getElementById('pill-hood').classList.remove('active');\n\n    \/\/ Reset inputs\n    document.getElementById('f-pmin').value = '';\n    document.getElementById('f-pmax').value = '';\n    document.getElementById('crm-search-input').value = '';\n    CRM_BEDS_SEL = 0; crmSetBeds(0);\n    CRM_BATHS_SEL = 0; crmSetBaths(0);\n\n    \/\/ Reset radio buttons\n    var btypeRadio = document.querySelector('input[name=\"btype\"][value=\"\"]');\n    if(btypeRadio) btypeRadio.checked = true;\n    var utypeRadio = document.querySelector('input[name=\"utype\"][value=\"\"]');\n    if(utypeRadio) utypeRadio.checked = true;\n    var hoodRadio  = document.querySelector('input[name=\"hood\"][value=\"\"]');\n    if(hoodRadio)  hoodRadio.checked  = true;\n\n    \/\/ Clear drawing\n    clearDrawing();\n\n    \/\/ Clear AI pills strip\n    var pillsEl = document.getElementById('crm-ai-pills');\n    if(pillsEl) pillsEl.classList.remove('visible');\n\n    \/\/ Reset map to country view\n    currentLevel = 1; currentRegion = null; selectedHood = null;\n    showPolygonsForLevel(1);\n    crmNavigate(function(){ map.flyTo([41.15,19.82], 7, {duration:0.8}); });\n    updateMobileFilterBadge();\n};\n\nfunction crmClearAiFilters(){\n    \/\/ Reset all filters\n    CRM_FILTERS.btype = '';   CRM_FILTERS.utype = '';\n    CRM_FILTERS.beds  = 0;    CRM_FILTERS.baths  = 0;\n    CRM_FILTERS.pmin  = 0;    CRM_FILTERS.pmax   = Infinity;\n    CRM_FILTERS.amin  = 0;    CRM_FILTERS.amax   = Infinity;\n    CRM_FILTERS.hood  = '';   CRM_FILTERS.search = '';\n    document.getElementById('pill-hood-label').textContent = 'All neighborhoods';\n    document.getElementById('pill-hood').classList.remove('active');\n    var hoodRadio = document.querySelector('input[name=\"hood\"][value=\"\"]');\n    if(hoodRadio) hoodRadio.checked = true;\n    document.getElementById('crm-search-input').value = '';\n    \/\/ Reset pill labels\n    document.getElementById('pill-btype-label').textContent = 'Any type';\n    document.getElementById('pill-btype').classList.remove('active');\n    document.getElementById('pill-price-label').textContent = 'Any price';\n    document.getElementById('pill-price').classList.remove('active');\n    document.getElementById('pill-utype-label').textContent = 'All property types';\n    document.getElementById('pill-utype').classList.remove('active');\n    document.getElementById('pill-beds-label').textContent = 'All beds';\n    document.getElementById('pill-beds').classList.remove('active');\n    document.getElementById('pill-baths-label').textContent = 'All baths';\n    document.getElementById('pill-baths').classList.remove('active');\n    CRM_BEDS_SEL = 0; crmSetBeds(0);\n    CRM_BATHS_SEL = 0; crmSetBaths(0);\n    document.getElementById('crm-ai-pills').classList.remove('visible');\n    currentLevel = 1; currentRegion = null; selectedHood = null;\n    showPolygonsForLevel(1);\n    crmNavigate(function(){ map.flyTo([41.15,19.82],7,{duration:0.8}); });\n}\n\n\/\/ Enter key handled by plain search listener above\n\n\/\/ \u2500\u2500 View toggle (mobile) \u2500\u2500\nfunction crmSetView(v){\n    var listPanel = document.getElementById('crm-listings-panel');\n    var mapEl     = document.getElementById('crm-map');\n    document.getElementById('vbtn-list').classList.toggle('active', v==='list');\n    document.getElementById('vbtn-map').classList.toggle('active',  v==='map');\n    if(window.innerWidth > 768) return; \/\/ desktop always shows both\n    listPanel.style.display = v==='list' ? '' : 'none';\n    mapEl.style.flex        = v==='map'  ? '1' : '';\n    mapEl.style.height      = v==='map'  ? '100%' : '';\n    if(window._crmMap) setTimeout(()=>window._crmMap.invalidateSize(), 100);\n}\n<\/script>\n\n<script>\nwindow.crmmap_6a821bd0b0841 = {\n    listingsUrl: 'https:\/\/ctest.al\/sq\/wp-json\/crm-sync\/v1\/listings',\n    albaniaUrl:  'https:\/\/ctest.al\/wp-content\/plugins\/crm-sync\/albania.json',\n    nbUrl:       'https:\/\/ctest.al\/wp-content\/plugins\/crm-sync\/neighborhoods.json'\n};\n<\/script>\n<script>\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   MOBILE SPLIT RESIZER \u2014 drag the handle between map & listings\n   to rescale them. Persists between sessions via localStorage.\n   \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n(function initSplitResizer(){\n    var handle = document.getElementById('crm-split-handle');\n    var body   = document.getElementById('crm-body');\n    var wrap   = document.getElementById('crm-map-wrap');\n    if(!handle || !body || !wrap) return;\n\n    var MIN_VH = 20; \/* clamp: at least 20dvh for the map *\/\n    var MAX_VH = 80; \/* clamp: at most 80dvh for the map (leaves 20dvh for listings) *\/\n\n    \/* Restore last-used split, if any *\/\n    var saved = parseFloat(localStorage.getItem('crm_map_vh'));\n    if(!isNaN(saved) && saved >= MIN_VH && saved <= MAX_VH){\n        body.style.setProperty('--crm-map-vh', saved);\n    }\n\n    var dragging = false;\n\n    function setSize(mapVh){\n        mapVh = Math.max(MIN_VH, Math.min(MAX_VH, mapVh));\n        body.style.setProperty('--crm-map-vh', mapVh);\n        \/* Nudge Leaflet so it fills the new container *\/\n        if(window._crmMap && typeof window._crmMap.invalidateSize === 'function'){\n            window._crmMap.invalidateSize();\n        }\n        return mapVh;\n    }\n\n    function onDown(clientY, e){\n        dragging = true;\n        handle.classList.add('is-dragging');\n        wrap.classList.add('is-resizing');\n        if(e && e.preventDefault) e.preventDefault();\n    }\n    function onMove(clientY){\n        if(!dragging) return;\n        \/* The map is above the handle (column-reverse), so the map's height\n           in vh is (clientY \/ viewport-height) \u00d7 100 \u2014 i.e. how far down the\n           finger has moved as a percentage of the screen. *\/\n        var vh = (clientY \/ window.innerHeight) * 100;\n        setSize(vh);\n    }\n    function onUp(){\n        if(!dragging) return;\n        dragging = false;\n        handle.classList.remove('is-dragging');\n        wrap.classList.remove('is-resizing');\n        \/* Read the final value back from the CSS variable and persist it *\/\n        var final = parseFloat(getComputedStyle(body).getPropertyValue('--crm-map-vh'));\n        if(!isNaN(final)) localStorage.setItem('crm_map_vh', final);\n        \/* Final Leaflet resize once movement settles *\/\n        if(window._crmMap && typeof window._crmMap.invalidateSize === 'function'){\n            window._crmMap.invalidateSize();\n        }\n    }\n\n    \/* Mouse *\/\n    handle.addEventListener('mousedown', function(e){ onDown(e.clientY, e); });\n    document.addEventListener('mousemove', function(e){ onMove(e.clientY); });\n    document.addEventListener('mouseup',   onUp);\n\n    \/* Touch *\/\n    handle.addEventListener('touchstart', function(e){\n        onDown(e.touches[0].clientY, e);\n    }, {passive:false});\n    document.addEventListener('touchmove', function(e){\n        if(!dragging) return;\n        onMove(e.touches[0].clientY);\n        e.preventDefault(); \/* stop the page from scrolling while dragging *\/\n    }, {passive:false});\n    document.addEventListener('touchend',    onUp);\n    document.addEventListener('touchcancel', onUp);\n\n    \/* Double-tap to reset to default 35\/65 *\/\n    var lastTap = 0;\n    handle.addEventListener('click', function(){\n        var now = Date.now();\n        if(now - lastTap < 350){\n            setSize(35);\n            localStorage.removeItem('crm_map_vh');\n        }\n        lastTap = now;\n    });\n})();\n<\/script>\n<script>\n(function waitForLeaflet(){\n    if(typeof L==='undefined'){ setTimeout(waitForLeaflet,50); return; }\n    initCrmMap(window.crmmap_6a821bd0b0841.listingsUrl, window.crmmap_6a821bd0b0841.albaniaUrl, window.crmmap_6a821bd0b0841.nbUrl);\n})();\n\nfunction initCrmMap(LISTINGS_URL, ALBANIA_URL, NB_URL){\nvar LISTINGS = [];\n\n\/\/ Polygon styles\nvar S_REGION     = {color:'#999',weight:1.5,fillColor:'transparent',fillOpacity:0,interactive:true};\nvar S_REGION_HOV = {color:'#00bcd4',weight:2.5,fillColor:'#00bcd4',fillOpacity:0.18,interactive:true};\nvar S_HOOD       = {color:'#999',weight:1,fillColor:'transparent',fillOpacity:0,interactive:true};\nvar S_HOOD_HOV   = {color:'#00bcd4',weight:2,fillColor:'#00bcd4',fillOpacity:0.22,interactive:true};\nvar S_HOOD_SEL   = {color:'#00bcd4',weight:2.5,fillColor:'#00bcd4',fillOpacity:0.28,interactive:true};\nvar S_HOOD_DIM   = {color:'#ccc',weight:0.8,fillColor:'transparent',fillOpacity:0,interactive:true};\n\nfunction determineLevel(z){ return z<=11?1:z<=15?2:3; }\n\/\/ normCity, getHoodCity, getCityForHoodCity, getCityPillValueForRegion are global (defined before crmApplyPill)\nfunction fmtPrice(p, show){\n    \/\/ Hidden (show_price=false) OR missing price \u2192 same graceful fallback.\n    if(show === false) return 'Price upon request';\n    if(!p) return 'Price upon request';\n    return '\u20ac ' + p.toLocaleString('en-US');\n}\nfunction fmtBiz(b){ return b==='buy'?'For Sale':b==='rent'?'For Rent':b||''; }\nfunction buildStats(l){\n    var p=[];\n    if(l.bedrooms)  p.push(l.bedrooms+' bd');\n    if(l.bathrooms) p.push(l.bathrooms+' ba');\n    if(l.area)      p.push(l.area+' m\u00b2');\n    return p.join(' \u00b7 ');\n}\n\n\/\/ Map\n\/\/ Destroy existing map instance if present (prevents \"already initialized\" error)\nif(window._crmMap){ window._crmMap.remove(); window._crmMap = null; }\nvar WORLD_BOUNDS = L.latLngBounds([-85,-180],[85,180]);\nvar map = L.map('crm-map',{\n    center:[41.15,19.82],\n    zoom:7,\n    minZoom:3,\n    zoomControl:true,\n    tap:false,\n    maxBounds:WORLD_BOUNDS,\n    maxBoundsViscosity:1.0\n});\nwindow._crmMap = map;\nL.tileLayer('https:\/\/{s}.basemaps.cartocdn.com\/light_all\/{z}\/{x}\/{y}{r}.png',{\n    attribution:'\u00a9 OpenStreetMap \u00a9 CARTO',subdomains:'abcd',maxZoom:19,noWrap:true\n}).addTo(map);\nwindow.addEventListener('resize',function(){ setTimeout(function(){ map.invalidateSize(); },150); });\n\nvar albaniaData=null, hoodData={};\nvar regionLayers={}, hoodLayers={}, pinLayers={};\n\/\/ Expose on window so city pill handler (outside initCrmMap) can access\nwindow.albaniaData = null;\nwindow.regionLayers = {};\nvar activeId=null, currentLevel=1, lastZoomLevel=7;\n\/\/ Lets the global crmNavigate() guard resync this closure variable\n\/\/ once a programmatic flight finishes.\nwindow._crmSyncZoomBaseline = function(){ lastZoomLevel = map.getZoom(); };\n\nvar currentRegion=null, selectedHood=null;\nvar isDrawing=false, drawPoints=[], drawPolyline=null, drawPolygon=null, drawnFilter=null;\n\n\/\/ Load all data in parallel\nPromise.all([\n    fetch(ALBANIA_URL).then(r=>r.json()),\n    fetch(NB_URL).then(r=>r.json()),\n    fetch(LISTINGS_URL).then(r=>r.json())\n]).then(function(results){\n    albaniaData = results[0];\n    window.albaniaData = albaniaData; \/\/ expose for pill handlers\n    hoodData    = results[1];\n    LISTINGS    = results[2];\n    buildRegionLayers(); buildHoodLayers();\n    window.regionLayers = regionLayers; \/\/ expose for pill handlers\n    populateNeighborhoodPill();\n    showPolygonsForLevel(1);\n\n    \/\/ Auto-apply filters from URL params \u2014 runs here so albaniaData + hoodData are in scope\n    (function(){\n        var params = new URLSearchParams(window.location.search);\n        var hasAny = ['ai_query','city','btype','utype','beds','baths','pmin','pmax','hood','q']\n                        .some(function(k){ return params.get(k); });\n        if(!hasAny){ applyFilters(); return; }\n\n        var filters = {};\n        var keymap = {\n            btype:'business_type', utype:'unit_type', city:'city', hood:'neighborhood',\n            beds:'min_bedrooms',   baths:'min_bathrooms',\n            pmin:'min_price',      pmax:'max_price',\n            amin:'min_area',       amax:'max_area',\n            q:'search_query'\n        };\n        Object.keys(keymap).forEach(function(p){\n            if(params.get(p)) filters[keymap[p]] = params.get(p);\n        });\n        \/\/ ai_query intentionally NOT written to the search bar \u2014 filters apply silently\n\n        \/\/ Apply non-geographic filters immediately\n        if(filters.business_type) CRM_FILTERS.btype = filters.business_type;\n        if(filters.unit_type)     CRM_FILTERS.utype = filters.unit_type;\n        if(filters.min_bedrooms)  CRM_FILTERS.beds  = parseInt(filters.min_bedrooms);\n        if(filters.min_bathrooms) CRM_FILTERS.baths = parseInt(filters.min_bathrooms);\n        if(filters.min_price)     CRM_FILTERS.pmin  = parseInt(filters.min_price);\n        if(filters.max_price)     CRM_FILTERS.pmax  = parseInt(filters.max_price);\n        if(filters.search_query){\n            CRM_FILTERS.search = filters.search_query.toLowerCase();\n            var si = document.getElementById('crm-search-input');\n            if(si){ si.value = filters.search_query; }\n        }\n\n        \/\/ Sync pill labels\n        if(filters.business_type){\n            var bl = filters.business_type==='buy'?'For Sale':'For Rent';\n            document.getElementById('pill-btype-label').textContent = bl;\n            document.getElementById('pill-btype').classList.add('active');\n            var br=document.querySelector('input[name=\"btype\"][value=\"'+filters.business_type+'\"]'); if(br) br.checked=true;\n        }\n        if(filters.unit_type){\n            document.getElementById('pill-utype-label').textContent = ucFirst(filters.unit_type);\n            document.getElementById('pill-utype').classList.add('active');\n            var ur=document.querySelector('input[name=\"utype\"][value=\"'+filters.unit_type+'\"]'); if(ur) ur.checked=true;\n        }\n        if(filters.min_bedrooms){\n            CRM_BEDS_SEL = parseInt(filters.min_bedrooms);\n            crmSetBeds(CRM_BEDS_SEL);\n            document.getElementById('pill-beds-label').textContent = CRM_BEDS_SEL+'+ beds';\n            document.getElementById('pill-beds').classList.add('active');\n        }\n        if(filters.min_bathrooms){\n            CRM_FILTERS.baths = parseInt(filters.min_bathrooms);\n            crmSetBaths(CRM_FILTERS.baths);\n            document.getElementById('pill-baths-label').textContent = CRM_FILTERS.baths+'+ baths';\n            document.getElementById('pill-baths').classList.add('active');\n        }\n        if(filters.min_price||filters.max_price){\n            var pmin=filters.min_price||0, pmax=filters.max_price||0;\n            if(pmin) document.getElementById('f-pmin').value = pmin;\n            if(pmax) document.getElementById('f-pmax').value = pmax;\n            var plbl=(pmin&&pmax)?'\u20ac'+fmtK(pmin)+' \u2013 \u20ac'+fmtK(pmax):(pmin?'\u20ac'+fmtK(pmin)+'+':'Up to \u20ac'+fmtK(pmax));\n            document.getElementById('pill-price-label').textContent = plbl;\n            document.getElementById('pill-price').classList.add('active');\n        }\n\n        \/\/ Navigate to city\/county and ZOOM IN \u2014 resolve any town to its county region\n        if(filters.city && albaniaData){\n            var wantNorm = normCity(filters.city);\n            \/\/ 1) direct county-name match in GeoJSON\n            var regionFeature = albaniaData.features.find(function(f){\n                var rn = normCity(f.properties.NAME_1);\n                return rn===wantNorm || rn.indexOf(wantNorm)!==-1 || wantNorm.indexOf(rn)!==-1;\n            });\n            \/\/ 2) town param (e.g. \"Orikum\") \u2192 look up its county via the server-provided\n            \/\/    county field on any matching listing, then match that county to GeoJSON\n            if(!regionFeature && LISTINGS && LISTINGS.length){\n                var hit = LISTINGS.find(function(l){ return normCity(l.city)===wantNorm && l.county; });\n                if(hit){\n                    regionFeature = albaniaData.features.find(function(f){\n                        return normCity(f.properties.NAME_1)===normCity(hit.county);\n                    });\n                }\n            }\n            if(regionFeature && window.regionLayers && window.regionLayers[regionFeature.properties.NAME_1]){\n                var cv = regionFeature.properties.NAME_1;\n                CRM_FILTERS.city_filter = cv;\n                document.getElementById('pill-city-label').textContent = cv;\n                document.getElementById('pill-city').classList.add('active');\n                var cr = document.querySelector('input[name=\"city_filter\"][value=\"'+cv+'\"]');\n                if(cr) cr.checked = true;\n                handleRegionClick(cv, window.regionLayers[cv]); \/\/ flies\/zooms the map\n            }\n        }\n\n        if(filters.neighborhood){\n            \/\/ Fuzzy match then zoom \u2014 slight delay so showPolygonsForLevel settles\n            setTimeout(function(){\n                crmSelectNeighborhoodByName(filters.neighborhood);\n            }, 400);\n        } else {\n            applyFilters();\n        }\n    })();\n}).catch(function(e){ console.error('Load error:',e); });\n\n\/\/ Count properties per county \u2014 uses the server-provided `county` field\n\/\/ (mapped from each property's city via crm_city_to_county on the PHP side),\n\/\/ falling back to fuzzy city\u2194region matching for older cached data.\nfunction countPropertiesPerRegion(){\n    var counts = {};\n    if(!LISTINGS || !LISTINGS.length) return counts;\n    function nc(s){\n        return (s||'').toLowerCase()\n            .replace(\/\u00eb\/g,'e').replace(\/\u00e7\/g,'c')\n            .replace(\/tiran\u00eb\/g,'tirane').replace(\/tirana\/g,'tirane')\n            .trim();\n    }\n    LISTINGS.forEach(function(l){\n        \/\/ Preferred path: exact county from the server\n        if(l.county){\n            counts[l.county] = (counts[l.county] || 0) + 1;\n            return;\n        }\n        \/\/ Fallback: fuzzy match city to county name (legacy cached data)\n        var cityNorm = nc(l.city);\n        if(!cityNorm) return;\n        albaniaData.features.forEach(function(f){\n            var regionNorm = nc(f.properties.NAME_1);\n            if(cityNorm === regionNorm ||\n               cityNorm.indexOf(regionNorm) !== -1 ||\n               regionNorm.indexOf(cityNorm) !== -1){\n                counts[f.properties.NAME_1] = (counts[f.properties.NAME_1] || 0) + 1;\n            }\n        });\n    });\n    return counts;\n}\n\n\/\/ Region count markers group \u2014 cleared\/rebuilt when listings load\nvar regionCountMarkers = L.layerGroup();\n\nfunction buildRegionCountMarkers(){\n    regionCountMarkers.clearLayers();\n    var counts = countPropertiesPerRegion();\n    albaniaData.features.forEach(function(feature){\n        var name = feature.properties.NAME_1;\n        var count = counts[name] || 0;\n        if(count === 0) return; \/\/ don't show empty regions\n\n        \/\/ Get region centroid\n        var bounds = L.geoJSON(feature).getBounds();\n        var center = bounds.getCenter();\n\n        var marker = L.marker(center, {\n            icon: L.divIcon({\n                className: '',\n                html: '<div class=\"crm-region-count\">'+count+'<\/div>',\n                iconSize: [36, 36],\n                iconAnchor: [18, 18],\n            }),\n            \/\/ Interactive so clicking the count badge drills into the region.\n            \/\/ Previously this was interactive:false with zIndexOffset:500 \u2014\n            \/\/ the badge sat on top of the polygon and swallowed clicks without\n            \/\/ forwarding them, so tapping a count did nothing but pan\/zoom.\n            interactive: true,\n            zIndexOffset: 500,\n        });\n        marker.on('click', function(e){\n            L.DomEvent.stopPropagation(e);\n            if(!isDrawing && window.regionLayers && window.regionLayers[name]){\n                handleRegionClick(name, window.regionLayers[name]);\n            }\n        });\n        regionCountMarkers.addLayer(marker);\n    });\n    regionCountMarkers.addTo(map);\n}\n\nfunction buildRegionLayers(){\n    albaniaData.features.forEach(function(feature){\n        var name = feature.properties.NAME_1;\n        var layer = L.geoJSON(feature,{style:S_REGION,interactive:true,bubblingMouseEvents:false});\n        layer.on('mouseover',function(){ layer.setStyle(S_REGION_HOV); });\n        layer.on('mouseout', function(){ layer.setStyle(currentRegion===name?S_REGION_HOV:S_REGION); });\n        layer.on('click',function(e){ L.DomEvent.stopPropagation(e); if(!isDrawing) handleRegionClick(name,layer); });\n        layer.eachLayer(function(l){ if(l._path) l._path.setAttribute('tabindex','-1'); });\n        layer.bindTooltip('<strong style=\"font-family:Montserrat,sans-serif\">'+name+'<\/strong>',{sticky:true,opacity:.92});\n        regionLayers[name]=layer;\n    });\n    \/\/ Build count markers after region layers exist\n    buildRegionCountMarkers();\n}\n\nwindow.populateNeighborhoodPill = function populateNeighborhoodPill(){\n    \/\/ Populate the neighborhood dropdown from loaded hoodData\n    var container = document.getElementById('dd-hood-options');\n    var pill      = document.getElementById('pill-hood');\n    if(!container || !hoodData) return;\n\n    container.innerHTML = '<label><input type=\"radio\" name=\"hood\" value=\"\"> All neighborhoods<\/label>';\n\n    Object.entries(hoodData).forEach(function([city, hoods]){\n        \/\/ City header\n        var hdr = document.createElement('div');\n        hdr.style.cssText = 'padding:6px 10px 2px;font-size:10px;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:.5px;';\n        hdr.textContent = city;\n        container.appendChild(hdr);\n\n        Object.keys(hoods).sort().forEach(function(name){\n            var lbl = document.createElement('label');\n            lbl.innerHTML = '<input type=\"radio\" name=\"hood\" value=\"'+name+'\"> '+name;\n            container.appendChild(lbl);\n        });\n    });\n\n    \/\/ Show the pill now that it has content\n    pill.style.display = '';\n}\n\n\/\/ \u2500\u2500 Fuzzy neighborhood match \u2500\u2500\n\/\/ Returns the best matching hood name from hoodData, or null\nfunction crmFuzzyMatchHood(query){\n    if(!hoodData || !query) return null;\n    var q = normCity(query.toLowerCase().trim());\n    var bestName = null, bestCity = null, bestScore = 0;\n\n    Object.entries(hoodData).forEach(function([city, hoods]){\n        Object.keys(hoods).forEach(function(name){\n            var n = normCity(name.toLowerCase());\n            var score = 0;\n\n            \/\/ Exact match\n            if(n === q){ score = 100; }\n            \/\/ Query fully contained in hood name\n            else if(n.includes(q)){ score = 80; }\n            \/\/ Hood name fully contained in query\n            else if(q.includes(n)){ score = 70; }\n            else {\n                \/\/ Word overlap score\n                var qWords = q.split(\/\\s+\/).filter(Boolean);\n                var nWords = n.split(\/\\s+\/).filter(Boolean);\n                var matched = qWords.filter(function(w){\n                    return nWords.some(function(nw){ return nw.startsWith(w) || w.startsWith(nw); });\n                });\n                if(matched.length > 0){\n                    score = Math.round((matched.length \/ Math.max(qWords.length, nWords.length)) * 60);\n                }\n                \/\/ Starts-with boost\n                if(n.startsWith(q.split(' ')[0]) || q.startsWith(n.split(' ')[0])){ score += 10; }\n            }\n\n            if(score > bestScore){ bestScore = score; bestName = name; bestCity = city; }\n        });\n    });\n\n    \/\/ Only return if reasonably confident (score >= 30)\n    return bestScore >= 30 ? { name: bestName, city: bestCity, score: bestScore } : null;\n}\n\nwindow.crmSelectNeighborhoodByName = function crmSelectNeighborhoodByName(query){\n    if(!hoodData || !query) return;\n\n    \/\/ Try exact match first, then fuzzy\n    var match = null;\n    Object.entries(hoodData).forEach(function([city, hoods]){\n        if(hoods[query]) match = { name: query, city: city, score: 100 };\n    });\n    if(!match) match = crmFuzzyMatchHood(query);\n    if(!match){ console.log('No neighborhood match for:', query); return; }\n\n    console.log('Neighborhood matched:', query, '->', match.name, '(score:', match.score + ')');\n\n    \/\/ Update pill UI to show resolved name\n    document.getElementById('pill-hood-label').textContent = match.name;\n    document.getElementById('pill-hood').classList.add('active');\n    var radio = document.querySelector('input[name=\"hood\"][value=\"'+match.name+'\"]');\n    if(radio) radio.checked = true;\n    CRM_FILTERS.hood = match.name;\n\n    \/\/ Navigate map to city then hood\n    var regionName = null;\n    if(albaniaData){\n        albaniaData.features.forEach(function(f){\n            if(normCity(f.properties.NAME_1) === normCity(match.city) ||\n               normCity(getHoodCity(f.properties.NAME_1)||'') === normCity(match.city)){\n                regionName = f.properties.NAME_1;\n            }\n        });\n    }\n    if(regionName){\n        currentRegion = regionName;\n        currentLevel  = 2;\n        showPolygonsForLevel(2);\n        setTimeout(function(){ handleHoodClick(match.name, match.city); }, 500);\n    }\n}\n\nfunction buildHoodLayers(){\n    Object.entries(hoodData).forEach(function([city,hoods]){\n        hoodLayers[city]={};\n        Object.entries(hoods).forEach(function([name,rings]){\n            var latlngs = rings.map(function(ring){ return ring.map(function(c){ return [c[0],c[1]]; }); });\n            var poly = L.polygon(latlngs,Object.assign({},S_HOOD,{bubblingMouseEvents:false}));\n            poly.on('mouseover',function(){ if(!isDrawing) poly.setStyle(S_HOOD_HOV); });\n            poly.on('mouseout', function(){\n                if(isDrawing) return;\n                poly.setStyle(selectedHood===name?S_HOOD_SEL:currentLevel===2?S_HOOD:S_HOOD_DIM);\n            });\n            poly.on('click',function(e){ L.DomEvent.stopPropagation(e); if(!isDrawing) handleHoodClick(name,city); });\n            poly.bindTooltip('<span style=\"font-family:Montserrat,sans-serif\">'+name+'<\/span>',{sticky:true,opacity:.92});\n            hoodLayers[city][name]=poly;\n        });\n    });\n}\n\nfunction showPolygonsForLevel(level){\n    Object.values(regionLayers).forEach(function(l){ try{map.removeLayer(l);}catch(e){} });\n    Object.values(hoodLayers).forEach(function(c){ Object.values(c).forEach(function(l){ try{map.removeLayer(l);}catch(e){} }); });\n    clearPins();\n\n    \/\/ Show region count markers only at level 1 (zoomed out to regions)\n    if(level===1){\n        if(!map.hasLayer(regionCountMarkers)) regionCountMarkers.addTo(map);\n    } else {\n        if(map.hasLayer(regionCountMarkers)) map.removeLayer(regionCountMarkers);\n    }\n\n    if(level===1){\n        currentRegion=null; selectedHood=null;\n        Object.values(regionLayers).forEach(function(l){ l.setStyle(S_REGION); l.addTo(map); });\n    } else if(level===2){\n        selectedHood=null;\n        var hc=getHoodCity(currentRegion||'');\n        if(hc&&hoodLayers[hc]&&Object.keys(hoodLayers[hc]).length){\n            Object.values(hoodLayers[hc]).forEach(function(l){ l.setStyle(S_HOOD); l.addTo(map); });\n        } else if(regionLayers[currentRegion]){\n            regionLayers[currentRegion].setStyle(Object.assign({},S_REGION,{fillOpacity:0})).addTo(map);\n        }\n    }\n    applyFilters();\n}\n\nfunction handleRegionClick(name,layer){\n    currentRegion=name; currentLevel=2; lastZoomLevel=map.getZoom();\n\n    \/\/ Prefer framing the ACTUAL listings in this region \u2014 a county like\n    \/\/ Vlor\u00eb spans a huge area, so fitting the polygon leaves pins as\n    \/\/ invisible specks. Fitting the matching pins guarantees they're\n    \/\/ on screen at a usable zoom. Falls back to polygon\/hood bounds\n    \/\/ when the region has no geocoded listings.\n    var regionListings = LISTINGS.filter(function(l){\n        if(!l.lat || !l.lng) return false;\n        if(l.county) return normCity(l.county) === normCity(name);\n        var hcx = getHoodCity(name);\n        var lcx = normCity(l.city);\n        return hcx ? (lcx === normCity(hcx) || lcx === normCity(name)) : lcx === normCity(name);\n    });\n\n    if(regionListings.length){\n        var pinBounds = L.latLngBounds(regionListings.map(function(l){ return [l.lat, l.lng]; }));\n        crmNavigate(function(){ map.flyToBounds(pinBounds, {padding:[60,60], maxZoom:14, duration:0.8}); });\n    } else {\n        var hc=getHoodCity(name);\n        if(hc&&hoodLayers[hc]&&Object.keys(hoodLayers[hc]).length){\n            var allBounds=Object.values(hoodLayers[hc]).map(function(l){ return l.getBounds(); }).reduce(function(a,b){ return a?a.extend(b):b; },null);\n            if(allBounds) crmNavigate(function(){ map.flyToBounds(allBounds,{padding:[30,30],maxZoom:13,duration:0.8}); });\n        } else {\n            crmNavigate(function(){ map.flyToBounds(layer.getBounds(),{padding:[40,40],maxZoom:12,duration:0.8}); });\n        }\n    }\n    \/\/ Sync city pill \u2014 works for any region, not just Tirana\/Durres\n    var cityVal = getCityPillValueForRegion(name);\n    CRM_FILTERS.city_filter = cityVal;\n    document.getElementById('pill-city-label').textContent = cityVal || 'All cities';\n    document.getElementById('pill-city').classList.toggle('active', !!cityVal);\n    var cityRadio = document.querySelector('input[name=\"city_filter\"][value=\"'+cityVal+'\"]');\n    if(cityRadio) cityRadio.checked = true;\n    \/\/ Sync hood pill \u2014 reset neighborhood when entering a new city\n    document.getElementById('pill-hood-label').textContent='All neighborhoods';\n    document.getElementById('pill-hood').classList.remove('active');\n    var radio=document.querySelector('input[name=\"hood\"][value=\"\"]');\n    if(radio) radio.checked=true;\n    CRM_FILTERS.hood='';\n    showPolygonsForLevel(2);\n    crmUpdateUrl();\n}\n\nfunction handleHoodClick(name,hoodCity){\n    if(selectedHood===name){\n        \/\/ Deselect \u2014 clear hood pill\n        selectedHood=null;\n        CRM_FILTERS.hood='';\n        if(hoodLayers[hoodCity]) Object.values(hoodLayers[hoodCity]).forEach(function(l){ l.setStyle(S_HOOD); });\n        \/\/ Reset pill\n        document.getElementById('pill-hood-label').textContent='All neighborhoods';\n        document.getElementById('pill-hood').classList.remove('active');\n        var radio=document.querySelector('input[name=\"hood\"][value=\"\"]');\n        if(radio) radio.checked=true;\n        applyFilters(); return;\n    }\n    selectedHood=name;\n    CRM_FILTERS.hood=name;\n    currentRegion=currentRegion||getCityForHoodCity(hoodCity);\n    if(hoodLayers[hoodCity]){\n        Object.entries(hoodLayers[hoodCity]).forEach(function([n,poly]){ poly.setStyle(n===name?S_HOOD_SEL:S_HOOD_DIM); });\n    }\n    var poly=hoodLayers[hoodCity]&&hoodLayers[hoodCity][name];\n    if(poly) crmNavigate(function(){ map.flyToBounds(poly.getBounds(),{padding:[40,40],maxZoom:15,duration:0.6}); });\n\n    \/\/ \u2500\u2500 Sync neighborhood pill \u2500\u2500\n    document.getElementById('pill-hood-label').textContent=name;\n    document.getElementById('pill-hood').classList.add('active');\n    var radio=document.querySelector('input[name=\"hood\"][value=\"'+name+'\"]');\n    if(radio) radio.checked=true;\n\n    \/\/ Auto-select the city pill based on which city this hood belongs to\n    var hoodCityKey = getHoodCity(currentRegion||'') || '';\n    if(hoodCityKey){\n        CRM_FILTERS.city_filter = hoodCityKey;\n        document.getElementById('pill-city-label').textContent = hoodCityKey;\n        document.getElementById('pill-city').classList.add('active');\n        var cr = document.querySelector('input[name=\"city_filter\"][value=\"'+hoodCityKey+'\"]');\n        if(cr) cr.checked = true;\n    }\n\n    applyFilters();\n    crmUpdateUrl();\n}\n\n\/\/ Zoom handler\nvar zoomTimeout=null;\nmap.on('zoomend',function(){\n    if(isDrawing) return;\n    \/\/ Ignore zoom events caused by our own flyTo\/flyToBounds calls.\n    \/\/ Without this, a programmatic fit that lands at a zoom below the\n    \/\/ level-1 threshold makes determineLevel() \"correct\" currentLevel\n    \/\/ back to 1, instantly undoing the drill-down the user just did.\n    if(suppressZoomLevelSync){ lastZoomLevel = map.getZoom(); return; }\n    clearTimeout(zoomTimeout);\n    zoomTimeout=setTimeout(function(){\n        var zoom=map.getZoom(), targetLevel=determineLevel(zoom);\n        if(Math.abs(zoom-lastZoomLevel)<0.5&&targetLevel===currentLevel) return;\n        lastZoomLevel=zoom;\n        if(targetLevel===currentLevel) return;\n        if(targetLevel<currentLevel){\n            if(targetLevel===1){ currentLevel=1; currentRegion=null; selectedHood=null; CRM_FILTERS.city_filter=''; CRM_FILTERS.hood=''; document.getElementById('pill-city-label').textContent='All cities'; document.getElementById('pill-city').classList.remove('active'); var ar=document.querySelector('input[name=\"city_filter\"][value=\"\"]'); if(ar) ar.checked=true; showPolygonsForLevel(1); crmUpdateUrl(); }\n            else if(targetLevel===2){ currentLevel=2; selectedHood=null; showPolygonsForLevel(2); }\n        } else {\n            if(targetLevel===2&&currentLevel===1){\n                var center=map.getCenter();\n                var hit=albaniaData&&albaniaData.features.find(function(f){ return pointInFeature([center.lat,center.lng],f); });\n                if(hit){ currentRegion=hit.properties.NAME_1; currentLevel=2; showPolygonsForLevel(2); }\n            } else if(targetLevel===3&&currentLevel===2){\n                currentLevel=3;\n                Object.values(regionLayers).forEach(function(l){ try{map.removeLayer(l);}catch(e){} });\n                Object.values(hoodLayers).forEach(function(c){ Object.values(c).forEach(function(l){ try{map.removeLayer(l);}catch(e){} }); });\n                applyFilters();\n            }\n        }\n    },200);\n});\n\n\/\/ Geo utils\nfunction pointInFeature(point,feature){\n    var geom=feature.geometry;\n    if(geom.type==='Polygon') return pip([point[1],point[0]],geom.coordinates[0]);\n    if(geom.type==='MultiPolygon') return geom.coordinates.some(function(p){ return pip([point[1],point[0]],p[0]); });\n    return false;\n}\nfunction pip(pt,ring){\n    var y=pt[0],x=pt[1],inside=false;\n    for(var i=0,j=ring.length-1;i<ring.length;j=i++){\n        var xi=ring[i][0],yi=ring[i][1],xj=ring[j][0],yj=ring[j][1];\n        if(((yi>x)!==(yj>x))&&(y<(xj-xi)*(x-yi)\/(yj-yi)+xi)) inside=!inside;\n    }return inside;\n}\nfunction pointInLeafletPoly(latlng,poly){\n    var latlngs=poly.getLatLngs(),rings=Array.isArray(latlngs[0])?latlngs:[latlngs],inside=false;\n    rings.forEach(function(ring){\n        var flat=Array.isArray(ring[0])?ring[0]:ring,x=latlng[0],y=latlng[1];\n        for(var i=0,j=flat.length-1;i<flat.length;j=i++){\n            var xi=flat[i].lat,yi=flat[i].lng,xj=flat[j].lat,yj=flat[j].lng;\n            if(((yi>y)!==(yj>y))&&(x<(xj-xi)*(y-yi)\/(yj-yi)+xi)) inside=!inside;\n        }\n    });return inside;\n}\nfunction pointInDrawn(latlng,pts){\n    var x=latlng.lat,y=latlng.lng,inside=false;\n    for(var i=0,j=pts.length-1;i<pts.length;j=i++){\n        var xi=pts[i].lat,yi=pts[i].lng,xj=pts[j].lat,yj=pts[j].lng;\n        if(((yi>y)!==(yj>y))&&(x<(xj-xi)*(y-yi)\/(yj-yi)+xi)) inside=!inside;\n    }return inside;\n}\n\n\/\/ Pins\nfunction clearPins(){ Object.values(pinLayers).forEach(function(m){ try{map.removeLayer(m);}catch(e){} }); pinLayers={}; }\nfunction renderPins(list){\n    clearPins();\n\n    \/\/ \u2500\u2500 Group listings that share (near-)identical coordinates \u2500\u2500\n    \/\/ Multiple units in one building arrive with the same lat\/lng, so\n    \/\/ individual markers stack invisibly. Rounding to ~11m collapses\n    \/\/ them into one group we can render as a single expandable badge.\n    var groups = {};\n    var skippedNoCoords = [];\n    list.forEach(function(l){\n        if(!l.lat||!l.lng){ skippedNoCoords.push(l.id); return; }\n        var key = l.lat.toFixed(4)+','+l.lng.toFixed(4);\n        (groups[key] = groups[key] || []).push(l);\n    });\n\n    Object.keys(groups).forEach(function(key){\n        var items = groups[key];\n        var lat   = items[0].lat, lng = items[0].lng;\n\n        \/\/ \u2500\u2500 Single listing: normal price pin \u2500\u2500\n        if(items.length === 1){\n            var l = items[0];\n            \/\/ Respect show_price \u2014 was showing the raw number even when the\n            \/\/ CRM marked it hidden, inconsistent with the popup\/cards.\n            var priceVisible = l.show_price !== false;\n            var label = (l.price && priceVisible) ? '\u20ac '+fmtK(l.price) : '\ud83d\udccd';\n            var icon  = L.divIcon({className:'',html:'<div class=\"crm-pin\" data-id=\"'+l.id+'\">'+label+'<\/div>',iconSize:[0,0],iconAnchor:[0,12]});\n            var m = L.marker([lat,lng],{icon:icon}).addTo(map).bindPopup(\n                buildPinPopup(l), {maxWidth:240}\n            );\n            m.on('click',function(){ setActive(l.id,false); });\n            pinLayers[l.id] = m;\n            return;\n        }\n\n        \/\/ \u2500\u2500 Multiple listings at one spot: cluster badge \u2500\u2500\n        \/\/ Shows unit count + price range; clicking opens a scrollable\n        \/\/ list of every unit at that address.\n        var prices = items.map(function(i){ return i.price||0; }).filter(Boolean);\n        var lo = prices.length ? Math.min.apply(null,prices) : 0;\n        var hi = prices.length ? Math.max.apply(null,prices) : 0;\n        var priceLabel = !prices.length ? ''\n            : (lo === hi ? '\u20ac '+fmtK(lo) : '\u20ac '+fmtK(lo)+'\u2013'+fmtK(hi));\n\n        var badge = '<div class=\"crm-pin crm-pin-cluster\" data-count=\"'+items.length+'\">'+\n            '<span class=\"crm-pin-count\">'+items.length+'<\/span>'+\n            (priceLabel ? '<span class=\"crm-pin-range\">'+priceLabel+'<\/span>' : '')+\n        '<\/div>';\n\n        var rows = items.map(function(i){\n            return '<a class=\"crm-cluster-row\" data-id=\"'+i.id+'\" href=\"'+i.url+'\" target=\"_blank\">'+\n                (i.thumbnail ? '<img decoding=\"async\" src=\"'+i.thumbnail+'\" alt=\"\" loading=\"lazy\">' : '<span class=\"crm-cluster-nophoto\"><\/span>')+\n                '<span class=\"crm-cluster-info\">'+\n                    '<span class=\"crm-cluster-price\">'+fmtPrice(i.price, i.show_price)+'<\/span>'+\n                    '<span class=\"crm-cluster-title\">'+i.title+'<\/span>'+\n                    '<span class=\"crm-cluster-meta\">'+buildStats(i)+'<\/span>'+\n                '<\/span>'+\n            '<\/a>';\n        }).join('');\n\n        var cIcon = L.divIcon({className:'',html:badge,iconSize:[0,0],iconAnchor:[0,12]});\n        var cm = L.marker([lat,lng],{icon:cIcon}).addTo(map).bindPopup(\n            '<div class=\"crm-cluster-popup\">'+\n                '<div class=\"crm-cluster-head\">'+items.length+' properties here<\/div>'+\n                '<div class=\"crm-cluster-list\">'+rows+'<\/div>'+\n            '<\/div>',\n            {maxWidth:300, minWidth:260}\n        );\n        \/\/ Register the same marker under every contained id so that\n        \/\/ clicking a sidebar card still focuses the right pin.\n        items.forEach(function(i){ pinLayers[i.id] = cm; });\n    });\n\n    \/\/ Diagnostic reconciliation \u2014 if this ever doesn't add up, something is\n    \/\/ being silently dropped rather than merged into a cluster badge.\n    \/\/ \"Multiple units at N spot(s)\" is expected\/by-design clustering, not a\n    \/\/ bug \u2014 those properties DO have a marker, just a shared one.\n    var clusterGroups = Object.values(groups).filter(function(g){ return g.length > 1; });\n    var clusteredCount = clusterGroups.reduce(function(sum,g){ return sum + g.length; }, 0);\n    console.log(\n        '[CRM Map] renderPins: ' + list.length + ' in list, ' +\n        skippedNoCoords.length + ' skipped (no coords), ' +\n        clusteredCount + ' merged into ' + clusterGroups.length + ' shared pin(s) at identical spots, ' +\n        (list.length - skippedNoCoords.length - clusteredCount) + ' individual pins.' +\n        (skippedNoCoords.length ? ' Skipped IDs: ' + skippedNoCoords.join(', ') : '')\n    );\n}\n\n\/\/ Shared popup markup for single-listing pins\nfunction buildPinPopup(l){\n    return '<div class=\"crm-popup\">'+\n        (l.thumbnail?'<img decoding=\"async\" class=\"crm-popup-img\" src=\"'+l.thumbnail+'\" alt=\"'+l.title+'\" loading=\"lazy\">':'')+\n        '<div class=\"crm-popup-price\">'+fmtPrice(l.price, l.show_price)+'<\/div>'+\n        '<div class=\"crm-popup-title\">'+l.title+'<\/div>'+\n        '<div class=\"crm-popup-meta\">'+buildStats(l)+'<\/div>'+\n        '<a class=\"crm-popup-link\" href=\"'+l.url+'\" target=\"_blank\">View Property \u2192<\/a><\/div>';\n}\n\nfunction fmtK(n){ return n>=1000000?(n\/1000000).toFixed(1).replace('.0','')+'M':n>=1000?Math.round(n\/1000)+'K':n; }\n\n\/\/ Active\nfunction setActive(id,fly){\n    if(fly===undefined) fly=true;\n    if(activeId){\n        var pc=document.querySelector('.crm-card[data-id=\"'+activeId+'\"]');\n        var pm=document.querySelector('.crm-pin[data-id=\"'+activeId+'\"]');\n        if(pc) pc.classList.remove('active');\n        if(pm) pm.classList.remove('active');\n    }\n    activeId=id;\n    var card=document.querySelector('.crm-card[data-id=\"'+id+'\"]');\n    var pin=document.querySelector('.crm-pin[data-id=\"'+id+'\"]');\n    if(card){ card.classList.add('active'); card.scrollIntoView({behavior:'smooth',block:'nearest'}); }\n    if(pin) pin.classList.add('active');\n    if(!fly) return;\n    var listing=LISTINGS.find(function(l){ return l.id===id; });\n    if(!listing||!listing.lat||!listing.lng) return;\n\n    \/\/ Determine which region this property actually belongs to, and make\n    \/\/ sure currentRegion\/currentLevel reflect it BEFORE flying anywhere.\n    \/\/\n    \/\/ Previously this only happened via the currentLevel===1 branch below \u2014\n    \/\/ if the property's pin already existed on the map (e.g. it was already\n    \/\/ visible because of an active search\/filter spanning multiple regions),\n    \/\/ the early-return branch would fly the map there but leave\n    \/\/ currentRegion\/currentLevel exactly as they were from whatever was\n    \/\/ browsed before. The region itself never visually \"switched\". The next\n    \/\/ applyFilters() run (triggered by ANYTHING \u2014 another click, a zoom, a\n    \/\/ filter change) would then test this property's real county against\n    \/\/ that stale currentRegion, fail to match, and silently exclude the very\n    \/\/ listing just navigated to. This is what the user found: click a\n    \/\/ region \u2192 works; click a card directly \u2192 map moves but region state\n    \/\/ doesn't follow, so the pin can vanish on the next filter pass.\n    var targetRegion = null;\n    if(listing.county){\n        targetRegion = listing.county;\n    } else if(albaniaData){\n        var feature = albaniaData.features.find(function(f){ return pointInFeature([listing.lat,listing.lng],f); });\n        if(feature) targetRegion = feature.properties.NAME_1;\n    }\n    var regionChanged = targetRegion && ( !currentRegion || normCity(targetRegion) !== normCity(currentRegion) );\n    if(regionChanged){\n        currentRegion = targetRegion;\n        currentLevel  = 2;\n        showPolygonsForLevel(2); \/\/ redraws polygons AND re-filters\/re-renders pins for the correct region\n    }\n\n    if(pinLayers[id]){\n        crmNavigate(function(){ map.flyTo(pinLayers[id].getLatLng(),15,{duration:0.7}); });\n        setTimeout(function(){\n            if(!pinLayers[id]) return;\n            pinLayers[id].openPopup();\n            \/\/ Cluster markers are shared by several listings \u2014 highlight and\n            \/\/ scroll to the specific row the user clicked in the sidebar.\n            setTimeout(function(){\n                var row = document.querySelector('.crm-cluster-row[data-id=\"'+id+'\"]');\n                if(row){\n                    row.classList.add('is-target');\n                    row.scrollIntoView({block:'nearest'});\n                }\n            }, 60);\n        },800);\n        return;\n    }\n\n    \/\/ Fallback \u2014 pin still doesn't exist even after correcting the region\n    \/\/ (e.g. excluded by an unrelated active filter like price\/beds). Fly to\n    \/\/ the raw coordinate anyway so the user can at least see where it is.\n    crmNavigate(function(){ map.flyTo([listing.lat,listing.lng],15,{duration:0.8}); });\n    setTimeout(function(){ if(pinLayers[id]) pinLayers[id].openPopup(); },900);\n}\n\n\/\/ Cards\nfunction renderCards(list){\n    var grid=document.getElementById('crm-results-grid');\n    var count=document.getElementById('crm-results-count');\n    var sub=document.getElementById('crm-results-sub');\n    var total=LISTINGS.length;\n    count.textContent=list.length.toLocaleString()+' result'+(list.length!==1?'s':'');\n    sub.textContent=total>list.length?'Filtered from '+total.toLocaleString()+' total':'';\n    grid.innerHTML='';\n    if(!list.length){ grid.innerHTML='<div id=\"crm-empty\">No listings found matching your filters.<\/div>'; return; }\n    list.forEach(function(l){\n        var card=document.createElement('div');\n        card.className='crm-card'; card.dataset.id=l.id;\n        var stats=buildStats(l);\n        card.innerHTML=\n            '<div class=\"crm-card-img\">'+\n                (l.thumbnail?'<img decoding=\"async\" src=\"'+l.thumbnail+'\" alt=\"'+l.title+'\" loading=\"lazy\">':'<div class=\"no-photo\"><svg width=\"28\" height=\"28\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"#a0aec0\" stroke-width=\"1.5\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4 16l4.586-4.586a2 2 0 012.828 0L16 16m-2-2l1.586-1.586a2 2 0 012.828 0L20 14m-6-6h.01M6 20h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z\"\/><\/svg><span>No photo<\/span><\/div>')+\n                (l.business_type?'<span class=\"crm-card-badge'+(l.business_type==='rent'?' rent':'')+'\">'+fmtBiz(l.business_type)+'<\/span>':'')+\n            '<\/div>'+\n            '<div class=\"crm-card-body\">'+\n                '<div class=\"crm-card-price\">'+fmtPrice(l.price, l.show_price)+'<\/div>'+\n                '<div class=\"crm-card-title\">'+l.title+'<\/div>'+\n                (stats?'<div class=\"crm-card-stats\">'+stats+'<\/div>':'')+\n            '<\/div>';\n        card.addEventListener('click',function(){ setActive(l.id,true); });\n        grid.appendChild(card);\n    });\n}\n\n\/\/ Filters\nfunction applyFilters(){\n    var f=CRM_FILTERS;\n    var list=LISTINGS.filter(function(l){\n        if(f.btype && l.business_type!==f.btype) return false;\n        if(f.utype && l.unit_type!==f.utype) return false;\n        if(f.beds  && (l.bedrooms||0)<f.beds) return false;\n        if(f.baths && (l.bathrooms||0)<f.baths) return false;\n        if(f.pmin  && (l.price||0)<f.pmin) return false;\n        if(f.pmax<Infinity && (l.price||0)>f.pmax) return false;\n        \/\/ f.hood (the neighborhood dropdown pill) was previously tracked in\n        \/\/ state and synced to the URL but never actually applied here \u2014 a\n        \/\/ silent no-op. Prefer the geometrically-matched neighborhood\n        \/\/ (reliable, computed from real coordinates); fall back to the raw\n        \/\/ CRM text field for cities without curated polygon data.\n        if(f.hood){\n            var ln = normCity(l.matched_neighborhood || l.neighborhood || '');\n            if(ln !== normCity(f.hood)) return false;\n        }\n        if(f.search && !(l.title+' '+l.city+' '+l.unit_type+' '+(l.neighborhood||'')+' '+(l.address||'')+' '+(l.county||'')).toLowerCase().includes(f.search)) return false;\n        if(f.drawn&&l.lat&&l.lng){ if(!pointInDrawn({lat:l.lat,lng:l.lng},f.drawn)) return false; }\n        if(currentLevel>=2&&currentRegion){\n            var hc=getHoodCity(currentRegion);\n            var lc=normCity(l.city);\n            \/\/ Match by county when available (handles towns like Orikum\/Sarand\u00eb \u2192 Vlor\u00eb),\n            \/\/ otherwise fall back to direct city\u2194region name comparison.\n            var inCity;\n            if(l.county){\n                inCity = normCity(l.county)===normCity(currentRegion);\n            } else {\n                inCity = hc?(lc===normCity(hc)||lc===normCity(currentRegion)):lc===normCity(currentRegion);\n            }\n            \/\/ Geographic fallback \u2014 if the STRING match fails (a city\/county\n            \/\/ text mismatch, an unmapped town, or any similar data-quality\n            \/\/ gap) but the property's actual coordinates genuinely fall\n            \/\/ inside this region's real boundary, trust the geography\n            \/\/ rather than hiding it. This is what fixes the exact\n            \/\/ \"click a card, map flies there, pin never appears\" bug \u2014\n            \/\/ setActive() determines the region geographically via\n            \/\/ pointInFeature(); this reruns the SAME check here, so a\n            \/\/ property that was just correctly flown to can never then\n            \/\/ be excluded from its own region's view.\n            if(!inCity && l.lat && l.lng && typeof albaniaData !== 'undefined' && albaniaData){\n                var regionFeature = albaniaData.features.find(function(f){\n                    return normCity(f.properties.NAME_1)===normCity(currentRegion);\n                });\n                if(regionFeature && pointInFeature([l.lat,l.lng], regionFeature)) inCity = true;\n            }\n            if(!inCity) return false;\n            if(selectedHood&&hc&&hoodLayers[hc]&&hoodLayers[hc][selectedHood]){\n                if(!l.lat||!l.lng) return false;\n                return pointInLeafletPoly([l.lat,l.lng],hoodLayers[hc][selectedHood]);\n            }\n            return true;\n        }\n        return true;\n    });\n    \/\/ Determine if the user has any active filter (excluding the default\n    \/\/ 'buy' btype which is always on). When filters are active we want\n    \/\/ real pins on the map even at country-level zoom, so the visible\n    \/\/ results match the sidebar cards. Without filters we keep the\n    \/\/ region-count circles that give the \"browse-by-region\" feel.\n    var hasUserFilter = !!(f.search || f.utype || f.beds || f.baths\n                           || f.pmin || (f.pmax && f.pmax !== Infinity)\n                           || f.city_filter || f.hood\n                           || f.btype);\n\n    if(currentLevel===1 && !f.drawn && !hasUserFilter){\n        clearPins();\n        \/\/ Show the browse-by-region circles as usual\n        if(window._crmMap && regionCountMarkers && !window._crmMap.hasLayer(regionCountMarkers)){\n            regionCountMarkers.addTo(window._crmMap);\n        }\n    } else {\n        renderPins(list);\n        \/\/ Hide region-count circles so they don't overlap the filtered pins\n        if(currentLevel===1 && window._crmMap && regionCountMarkers && window._crmMap.hasLayer(regionCountMarkers)){\n            window._crmMap.removeLayer(regionCountMarkers);\n        }\n    }\n    renderCards(list);\n    activeId=null;\n}\nwindow._crmApplyFilters   = applyFilters;\nwindow.handleRegionClick  = handleRegionClick;   \/\/ needed by crmApplyPill (global scope)\nwindow.showPolygonsForLevel = showPolygonsForLevel;\nwindow._crmMap            = map;                 \/\/ Leaflet map instance\n\/\/ currentRegion\/selectedHood\/currentLevel are read by crmApplyPill for the reset branch\nwindow._crmState = {\n    get currentRegion(){ return currentRegion; },\n    set currentRegion(v){ currentRegion = v; },\n    get currentLevel(){  return currentLevel; },\n    set currentLevel(v){ currentLevel = v; },\n    get selectedHood(){  return selectedHood; },\n    set selectedHood(v){ selectedHood = v; },\n};\n\n\/\/ \u2500\u2500 AI SEARCH EVENT LISTENER \u2500\u2500\nwindow.addEventListener('crm-ai-filters', function(e){\n    var f = e.detail;\n\n    if(f.clear){\n        CRM_FILTERS.btype='buy'; CRM_FILTERS.utype='';\n        CRM_FILTERS.pmin=0; CRM_FILTERS.pmax=Infinity;\n        CRM_FILTERS.beds=0; CRM_FILTERS.baths=0;\n        document.querySelectorAll('.crm-pill').forEach(function(p){ p.classList.remove('active'); });\n        var bp=document.getElementById('pill-btype'); if(bp){ bp.classList.add('active'); document.getElementById('pill-btype-label').textContent='For Sale'; }\n        document.getElementById('pill-price-label').textContent='Any price';\n        document.getElementById('pill-utype-label').textContent='All property types';\n        document.getElementById('pill-beds-label').textContent='All beds';\n        document.getElementById('pill-baths-label').textContent='All baths';\n        currentLevel=1; currentRegion=null; selectedHood=null;\n        showPolygonsForLevel(1);\n        crmNavigate(function(){ map.flyTo([41.15,19.82],7,{duration:0.8}); });\n        return;\n    }\n\n    if(f.business_type){\n        CRM_FILTERS.btype=f.business_type;\n        document.getElementById('pill-btype-label').textContent=f.business_type==='buy'?'For Sale':'For Rent';\n        document.getElementById('pill-btype').classList.add('active');\n        var r=document.querySelector('input[name=\"btype\"][value=\"'+f.business_type+'\"]'); if(r) r.checked=true;\n    }\n    if(f.unit_type){\n        CRM_FILTERS.utype=f.unit_type;\n        document.getElementById('pill-utype-label').textContent=f.unit_type.charAt(0).toUpperCase()+f.unit_type.slice(1);\n        document.getElementById('pill-utype').classList.add('active');\n        var r=document.querySelector('input[name=\"utype\"][value=\"'+f.unit_type+'\"]'); if(r) r.checked=true;\n    }\n    if(f.price_min!=null){ CRM_FILTERS.pmin=f.price_min; var el=document.getElementById('f-pmin'); if(el) el.value=f.price_min; }\n    if(f.price_max!=null){ CRM_FILTERS.pmax=f.price_max; var el=document.getElementById('f-pmax'); if(el) el.value=f.price_max; }\n    if(f.price_min||f.price_max){\n        var lo=f.price_min||0,hi=f.price_max||Infinity;\n        var pl=(lo&&hi<Infinity)?'\u20ac'+fmtK(lo)+' \u2013 \u20ac'+fmtK(hi):(lo?'\u20ac'+fmtK(lo)+'+':'Up to \u20ac'+fmtK(hi));\n        document.getElementById('pill-price-label').textContent=pl;\n        document.getElementById('pill-price').classList.add('active');\n    }\n    if(f.bedrooms_min!=null){ CRM_FILTERS.beds=f.bedrooms_min; crmSetBeds(f.bedrooms_min); document.getElementById('pill-beds-label').textContent=f.bedrooms_min+'+ beds'; document.getElementById('pill-beds').classList.add('active'); }\n    if(f.bathrooms_min!=null){ CRM_FILTERS.baths=f.bathrooms_min; crmSetBaths(f.bathrooms_min); document.getElementById('pill-baths-label').textContent=f.bathrooms_min+'+ baths'; document.getElementById('pill-baths').classList.add('active'); }\n    if(f.area_min!=null){ CRM_FILTERS.amin=f.area_min; var el=document.getElementById('f-amin'); if(el) el.value=f.area_min; }\n    if(f.area_max!=null){ CRM_FILTERS.amax=f.area_max; var el=document.getElementById('f-amax'); if(el) el.value=f.area_max; }\n\n    \/\/ Geographic \u2014 neighborhood or city\n    if(f.neighborhood && hoodLayers){\n        var matched=false;\n        Object.entries(hoodLayers).forEach(function([hc,hoods]){\n            if(matched) return;\n            Object.keys(hoods).forEach(function(hn){\n                if(matched) return;\n                var norm=function(s){ return (s||'').toLowerCase().replace(\/\u00eb\/g,'e').replace(\/\u00e7\/g,'c').trim(); };\n                if(norm(hn).includes(norm(f.neighborhood))||norm(f.neighborhood).includes(norm(hn))){\n                    var cityName=getCityForHoodCity(hc);\n                    var feat=albaniaData&&albaniaData.features.find(function(ft){ return normCity(ft.properties.NAME_1)===normCity(cityName); });\n                    if(feat){\n                        currentRegion=feat.properties.NAME_1; currentLevel=2;\n                        showPolygonsForLevel(2);\n                        setTimeout(function(){ handleHoodClick(hn,hc); },400);\n                        matched=true;\n                    }\n                }\n            });\n        });\n    } else if(f.city && albaniaData){\n        var feat=albaniaData.features.find(function(ft){\n            return normCity(ft.properties.NAME_1).includes(normCity(f.city))||normCity(f.city).includes(normCity(ft.properties.NAME_1));\n        });\n        if(feat){ currentRegion=feat.properties.NAME_1; currentLevel=2; handleRegionClick(currentRegion,regionLayers[currentRegion]); }\n    }\n\n    applyFilters();\n});\n\n\/\/ Draw\nvar btnDraw=document.getElementById('btn-draw');\nvar btnDrawClear=document.getElementById('btn-draw-clear');\nbtnDraw.addEventListener('click',function(){ if(isDrawing) stopDrawing(); else startDrawing(); });\nbtnDrawClear.addEventListener('click',function(){ clearDrawing(); applyFilters(); });\nfunction startDrawing(){\n    clearDrawing();\n    isDrawing=true; drawPoints=[];\n    btnDraw.classList.add('active'); btnDraw.innerHTML='\u270b Stop drawing';\n    document.getElementById('crm-map').classList.add('drawing');\n    map.dragging.disable(); map.on('mousedown',onDrawStart);\n}\nfunction onDrawStart(e){\n    if(drawPolygon){ map.removeLayer(drawPolygon); drawPolygon=null; }\n    if(drawPolyline){ map.removeLayer(drawPolyline); drawPolyline=null; }\n    drawnFilter=null; drawPoints=[e.latlng];\n    drawPolyline=L.polyline([e.latlng],{color:'#11325C',weight:2,dashArray:'6,4'}).addTo(map);\n    map.on('mousemove',onDrawMove); map.on('mouseup',onDrawEnd);\n}\nfunction onDrawMove(e){ if(!drawPolyline) return; drawPoints.push(e.latlng); drawPolyline.addLatLng(e.latlng); }\nfunction onDrawEnd(){\n    map.off('mousemove',onDrawMove); map.off('mouseup',onDrawEnd);\n    if(drawPoints.length<3){ clearDrawing(); return; }\n    stopDrawing();\n    if(drawPolyline){ map.removeLayer(drawPolyline); drawPolyline=null; }\n    drawPolygon=L.polygon(drawPoints,{color:'#11325C',weight:2,fillColor:'#11325C',fillOpacity:0.08,dashArray:'6,4'}).addTo(map);\n    CRM_FILTERS.drawn=[].concat(drawPoints);\n    btnDrawClear.style.display='flex';\n    applyFilters();\n}\nfunction stopDrawing(){\n    isDrawing=false; btnDraw.classList.remove('active'); btnDraw.innerHTML='\u270f Draw area';\n    document.getElementById('crm-map').classList.remove('drawing');\n    map.dragging.enable(); map.off('mousedown',onDrawStart);\n}\nfunction clearDrawing(){\n    if(drawPolyline) map.removeLayer(drawPolyline);\n    if(drawPolygon)  map.removeLayer(drawPolygon);\n    drawPolyline=null; drawPolygon=null; drawPoints=[]; CRM_FILTERS.drawn=null;\n    btnDrawClear.style.display='none'; btnDraw.innerHTML='\u270f Draw area'; btnDraw.classList.remove('active');\n    if(isDrawing){ isDrawing=false; map.dragging.enable(); map.off('mousedown',onDrawStart); document.getElementById('crm-map').classList.remove('drawing'); }\n}\n\n} \/\/ end initCrmMap\n<\/script>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-08d59be e-con-full menu-container e-flex e-con e-parent\" data-id=\"08d59be\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;,&quot;position&quot;:&quot;fixed&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-2d500a1 e-con-full menu-commit e-flex e-con e-child\" data-id=\"2d500a1\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-a8971b0 e-con-full e-flex e-con e-child\" data-id=\"a8971b0\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-f0e6e8f elementor-widget elementor-widget-image\" data-id=\"f0e6e8f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/ctest.al\/\">\n\t\t\t\t\t\t\t<img decoding=\"async\" width=\"726\" height=\"143\" src=\"https:\/\/ctest.al\/wp-content\/uploads\/2026\/03\/Commit-Logo-Color.svg\" class=\"attachment-full size-full wp-image-69\" alt=\"\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-162c902 close-menu elementor-view-default elementor-widget elementor-widget-icon\" data-id=\"162c902\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-wrapper\">\n\t\t\t<div class=\"elementor-icon\">\n\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-bars\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"><\/path><\/svg>\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-4968ba9 e-con-full e-flex e-con e-child\" data-id=\"4968ba9\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-cfe5d59 e-con-full e-flex e-con e-child\" data-id=\"cfe5d59\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-27db34b elementor-nav-menu--dropdown-tablet elementor-nav-menu__text-align-aside elementor-nav-menu--toggle elementor-nav-menu--burger elementor-widget elementor-widget-nav-menu\" data-id=\"27db34b\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;layout&quot;:&quot;vertical&quot;,&quot;submenu_icon&quot;:{&quot;value&quot;:&quot;&lt;svg aria-hidden=\\&quot;true\\&quot; class=\\&quot;e-font-icon-svg e-fas-caret-down\\&quot; viewBox=\\&quot;0 0 320 512\\&quot; xmlns=\\&quot;http:\\\/\\\/www.w3.org\\\/2000\\\/svg\\&quot;&gt;&lt;path d=\\&quot;M31.3 192h257.3c17.8 0 26.7 21.5 14.1 34.1L174.1 354.8c-7.8 7.8-20.5 7.8-28.3 0L17.2 226.1C4.6 213.5 13.5 192 31.3 192z\\&quot;&gt;&lt;\\\/path&gt;&lt;\\\/svg&gt;&quot;,&quot;library&quot;:&quot;fa-solid&quot;},&quot;toggle&quot;:&quot;burger&quot;}\" data-widget_type=\"nav-menu.default\">\n\t\t\t\t\t\t\t\t<nav aria-label=\"Menu\" class=\"elementor-nav-menu--main elementor-nav-menu__container elementor-nav-menu--layout-vertical e--pointer-underline e--animation-fade\">\n\t\t\t\t<ul id=\"menu-1-27db34b\" class=\"elementor-nav-menu sm-vertical\"><li class=\"menu-item menu-item-type-custom menu-item-object-custom menu-item-1329\"><a href=\"http:\/\/ctest.al\/properties\/?btype=buy\" class=\"elementor-item\">Buy<\/a><\/li>\n<li class=\"menu-item menu-item-type-custom menu-item-object-custom menu-item-1330\"><a href=\"https:\/\/ctest.al\/properties\/?btype=rent\" class=\"elementor-item\">Rent<\/a><\/li>\n<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-897\"><a href=\"https:\/\/ctest.al\/sq\/sell\/\" class=\"elementor-item\">Sell<\/a><\/li>\n<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-1325\"><a href=\"https:\/\/ctest.al\/sq\/development\/\" class=\"elementor-item\">Development<\/a><\/li>\n<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-1061\"><a href=\"https:\/\/ctest.al\/sq\/invest\/\" class=\"elementor-item\">Invest<\/a><\/li>\n<\/ul>\t\t\t<\/nav>\n\t\t\t\t\t<div class=\"elementor-menu-toggle\" role=\"button\" tabindex=\"0\" aria-label=\"Menu Toggle\" aria-expanded=\"false\">\n\t\t\t<svg aria-hidden=\"true\" role=\"presentation\" class=\"elementor-menu-toggle__icon--open e-font-icon-svg e-eicon-menu-bar\" viewBox=\"0 0 1000 1000\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M104 333H896C929 333 958 304 958 271S929 208 896 208H104C71 208 42 237 42 271S71 333 104 333ZM104 583H896C929 583 958 554 958 521S929 458 896 458H104C71 458 42 487 42 521S71 583 104 583ZM104 833H896C929 833 958 804 958 771S929 708 896 708H104C71 708 42 737 42 771S71 833 104 833Z\"><\/path><\/svg><svg aria-hidden=\"true\" role=\"presentation\" class=\"elementor-menu-toggle__icon--close e-font-icon-svg e-eicon-close\" viewBox=\"0 0 1000 1000\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M742 167L500 408 258 167C246 154 233 150 217 150 196 150 179 158 167 167 154 179 150 196 150 212 150 229 154 242 171 254L408 500 167 742C138 771 138 800 167 829 196 858 225 858 254 829L496 587 738 829C750 842 767 846 783 846 800 846 817 842 829 829 842 817 846 804 846 783 846 767 842 750 829 737L588 500 833 258C863 229 863 200 833 171 804 137 775 137 742 167Z\"><\/path><\/svg>\t\t<\/div>\n\t\t\t\t\t<nav class=\"elementor-nav-menu--dropdown elementor-nav-menu__container\" aria-hidden=\"true\">\n\t\t\t\t<ul id=\"menu-2-27db34b\" class=\"elementor-nav-menu sm-vertical\"><li class=\"menu-item menu-item-type-custom menu-item-object-custom menu-item-1329\"><a href=\"http:\/\/ctest.al\/properties\/?btype=buy\" class=\"elementor-item\" tabindex=\"-1\">Buy<\/a><\/li>\n<li class=\"menu-item menu-item-type-custom menu-item-object-custom menu-item-1330\"><a href=\"https:\/\/ctest.al\/properties\/?btype=rent\" class=\"elementor-item\" tabindex=\"-1\">Rent<\/a><\/li>\n<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-897\"><a href=\"https:\/\/ctest.al\/sq\/sell\/\" class=\"elementor-item\" tabindex=\"-1\">Sell<\/a><\/li>\n<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-1325\"><a href=\"https:\/\/ctest.al\/sq\/development\/\" class=\"elementor-item\" tabindex=\"-1\">Development<\/a><\/li>\n<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-1061\"><a href=\"https:\/\/ctest.al\/sq\/invest\/\" class=\"elementor-item\" tabindex=\"-1\">Invest<\/a><\/li>\n<\/ul>\t\t\t<\/nav>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-fe7bc83 elementor-widget elementor-widget-html\" data-id=\"fe7bc83\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<div style=\"height:100%; width:1px; max-width: 1px; background-color: #E0E0E0\"><\/div>\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-d1f4d3f e-con-full e-flex e-con e-child\" data-id=\"d1f4d3f\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-1cd44fb elementor-widget elementor-widget-heading\" data-id=\"1cd44fb\" 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\">THE COMPANY<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-de7e6d6 elementor-nav-menu--dropdown-tablet elementor-nav-menu__text-align-aside elementor-nav-menu--toggle elementor-nav-menu--burger elementor-widget elementor-widget-nav-menu\" data-id=\"de7e6d6\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;layout&quot;:&quot;vertical&quot;,&quot;submenu_icon&quot;:{&quot;value&quot;:&quot;&lt;svg aria-hidden=\\&quot;true\\&quot; class=\\&quot;e-font-icon-svg e-fas-caret-down\\&quot; viewBox=\\&quot;0 0 320 512\\&quot; xmlns=\\&quot;http:\\\/\\\/www.w3.org\\\/2000\\\/svg\\&quot;&gt;&lt;path d=\\&quot;M31.3 192h257.3c17.8 0 26.7 21.5 14.1 34.1L174.1 354.8c-7.8 7.8-20.5 7.8-28.3 0L17.2 226.1C4.6 213.5 13.5 192 31.3 192z\\&quot;&gt;&lt;\\\/path&gt;&lt;\\\/svg&gt;&quot;,&quot;library&quot;:&quot;fa-solid&quot;},&quot;toggle&quot;:&quot;burger&quot;}\" data-widget_type=\"nav-menu.default\">\n\t\t\t\t\t\t\t\t<nav aria-label=\"Menu\" class=\"elementor-nav-menu--main elementor-nav-menu__container elementor-nav-menu--layout-vertical e--pointer-underline e--animation-fade\">\n\t\t\t\t<ul id=\"menu-1-de7e6d6\" class=\"elementor-nav-menu sm-vertical\"><li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-661\"><a href=\"https:\/\/ctest.al\/sq\/about\/\" class=\"elementor-item\">About<\/a><\/li>\n<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-1877\"><a href=\"https:\/\/ctest.al\/sq\/services\/\" class=\"elementor-item\">Services<\/a><\/li>\n<li class=\"menu-item menu-item-type-post_type menu-item-object-page current_page_parent menu-item-1053\"><a href=\"https:\/\/ctest.al\/sq\/blog\/\" class=\"elementor-item\">Blog<\/a><\/li>\n<li class=\"menu-item menu-item-type-custom menu-item-object-custom menu-item-1057\"><a href=\"https:\/\/ctest.al\/contact-us#office\" class=\"elementor-item elementor-item-anchor\">Office<\/a><\/li>\n<\/ul>\t\t\t<\/nav>\n\t\t\t\t\t<div class=\"elementor-menu-toggle\" role=\"button\" tabindex=\"0\" aria-label=\"Menu Toggle\" aria-expanded=\"false\">\n\t\t\t<svg aria-hidden=\"true\" role=\"presentation\" class=\"elementor-menu-toggle__icon--open e-font-icon-svg e-eicon-menu-bar\" viewBox=\"0 0 1000 1000\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M104 333H896C929 333 958 304 958 271S929 208 896 208H104C71 208 42 237 42 271S71 333 104 333ZM104 583H896C929 583 958 554 958 521S929 458 896 458H104C71 458 42 487 42 521S71 583 104 583ZM104 833H896C929 833 958 804 958 771S929 708 896 708H104C71 708 42 737 42 771S71 833 104 833Z\"><\/path><\/svg><svg aria-hidden=\"true\" role=\"presentation\" class=\"elementor-menu-toggle__icon--close e-font-icon-svg e-eicon-close\" viewBox=\"0 0 1000 1000\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M742 167L500 408 258 167C246 154 233 150 217 150 196 150 179 158 167 167 154 179 150 196 150 212 150 229 154 242 171 254L408 500 167 742C138 771 138 800 167 829 196 858 225 858 254 829L496 587 738 829C750 842 767 846 783 846 800 846 817 842 829 829 842 817 846 804 846 783 846 767 842 750 829 737L588 500 833 258C863 229 863 200 833 171 804 137 775 137 742 167Z\"><\/path><\/svg>\t\t<\/div>\n\t\t\t\t\t<nav class=\"elementor-nav-menu--dropdown elementor-nav-menu__container\" aria-hidden=\"true\">\n\t\t\t\t<ul id=\"menu-2-de7e6d6\" class=\"elementor-nav-menu sm-vertical\"><li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-661\"><a href=\"https:\/\/ctest.al\/sq\/about\/\" class=\"elementor-item\" tabindex=\"-1\">About<\/a><\/li>\n<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-1877\"><a href=\"https:\/\/ctest.al\/sq\/services\/\" class=\"elementor-item\" tabindex=\"-1\">Services<\/a><\/li>\n<li class=\"menu-item menu-item-type-post_type menu-item-object-page current_page_parent menu-item-1053\"><a href=\"https:\/\/ctest.al\/sq\/blog\/\" class=\"elementor-item\" tabindex=\"-1\">Blog<\/a><\/li>\n<li class=\"menu-item menu-item-type-custom menu-item-object-custom menu-item-1057\"><a href=\"https:\/\/ctest.al\/contact-us#office\" class=\"elementor-item elementor-item-anchor\" tabindex=\"-1\">Office<\/a><\/li>\n<\/ul>\t\t\t<\/nav>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ee2689a elementor-widget elementor-widget-spacer\" data-id=\"ee2689a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-efce084 elementor-widget elementor-widget-heading\" data-id=\"efce084\" 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\">OTHER<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-759ab8d elementor-nav-menu--dropdown-tablet elementor-nav-menu__text-align-aside elementor-nav-menu--toggle elementor-nav-menu--burger elementor-widget elementor-widget-nav-menu\" data-id=\"759ab8d\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;layout&quot;:&quot;vertical&quot;,&quot;submenu_icon&quot;:{&quot;value&quot;:&quot;&lt;svg aria-hidden=\\&quot;true\\&quot; class=\\&quot;e-font-icon-svg e-fas-caret-down\\&quot; viewBox=\\&quot;0 0 320 512\\&quot; xmlns=\\&quot;http:\\\/\\\/www.w3.org\\\/2000\\\/svg\\&quot;&gt;&lt;path d=\\&quot;M31.3 192h257.3c17.8 0 26.7 21.5 14.1 34.1L174.1 354.8c-7.8 7.8-20.5 7.8-28.3 0L17.2 226.1C4.6 213.5 13.5 192 31.3 192z\\&quot;&gt;&lt;\\\/path&gt;&lt;\\\/svg&gt;&quot;,&quot;library&quot;:&quot;fa-solid&quot;},&quot;toggle&quot;:&quot;burger&quot;}\" data-widget_type=\"nav-menu.default\">\n\t\t\t\t\t\t\t\t<nav aria-label=\"Menu\" class=\"elementor-nav-menu--main elementor-nav-menu__container elementor-nav-menu--layout-vertical e--pointer-underline e--animation-fade\">\n\t\t\t\t<ul id=\"menu-1-759ab8d\" class=\"elementor-nav-menu sm-vertical\"><li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-privacy-policy menu-item-1377\"><a rel=\"privacy-policy\" href=\"https:\/\/ctest.al\/sq\/privacy-policy\/\" class=\"elementor-item\">Privacy Policy<\/a><\/li>\n<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-1378\"><a href=\"https:\/\/ctest.al\/sq\/cookie-policy\/\" class=\"elementor-item\">Cookie Policy<\/a><\/li>\n<\/ul>\t\t\t<\/nav>\n\t\t\t\t\t<div class=\"elementor-menu-toggle\" role=\"button\" tabindex=\"0\" aria-label=\"Menu Toggle\" aria-expanded=\"false\">\n\t\t\t<svg aria-hidden=\"true\" role=\"presentation\" class=\"elementor-menu-toggle__icon--open e-font-icon-svg e-eicon-menu-bar\" viewBox=\"0 0 1000 1000\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M104 333H896C929 333 958 304 958 271S929 208 896 208H104C71 208 42 237 42 271S71 333 104 333ZM104 583H896C929 583 958 554 958 521S929 458 896 458H104C71 458 42 487 42 521S71 583 104 583ZM104 833H896C929 833 958 804 958 771S929 708 896 708H104C71 708 42 737 42 771S71 833 104 833Z\"><\/path><\/svg><svg aria-hidden=\"true\" role=\"presentation\" class=\"elementor-menu-toggle__icon--close e-font-icon-svg e-eicon-close\" viewBox=\"0 0 1000 1000\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M742 167L500 408 258 167C246 154 233 150 217 150 196 150 179 158 167 167 154 179 150 196 150 212 150 229 154 242 171 254L408 500 167 742C138 771 138 800 167 829 196 858 225 858 254 829L496 587 738 829C750 842 767 846 783 846 800 846 817 842 829 829 842 817 846 804 846 783 846 767 842 750 829 737L588 500 833 258C863 229 863 200 833 171 804 137 775 137 742 167Z\"><\/path><\/svg>\t\t<\/div>\n\t\t\t\t\t<nav class=\"elementor-nav-menu--dropdown elementor-nav-menu__container\" aria-hidden=\"true\">\n\t\t\t\t<ul id=\"menu-2-759ab8d\" class=\"elementor-nav-menu sm-vertical\"><li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-privacy-policy menu-item-1377\"><a rel=\"privacy-policy\" href=\"https:\/\/ctest.al\/sq\/privacy-policy\/\" class=\"elementor-item\" tabindex=\"-1\">Privacy Policy<\/a><\/li>\n<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-1378\"><a href=\"https:\/\/ctest.al\/sq\/cookie-policy\/\" class=\"elementor-item\" tabindex=\"-1\">Cookie Policy<\/a><\/li>\n<\/ul>\t\t\t<\/nav>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-3b71548 e-con-full e-flex e-con e-child\" data-id=\"3b71548\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-a51a863 elementor-align-right elementor-widget elementor-widget-button\" data-id=\"a51a863\" 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:\/\/commit-app.toka.datamax.ai\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t<span class=\"elementor-button-icon\">\n\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-unlock-alt\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M400 256H152V152.9c0-39.6 31.7-72.5 71.3-72.9 40-.4 72.7 32.1 72.7 72v16c0 13.3 10.7 24 24 24h32c13.3 0 24-10.7 24-24v-16C376 68 307.5-.3 223.5 0 139.5.3 72 69.5 72 153.5V256H48c-26.5 0-48 21.5-48 48v160c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V304c0-26.5-21.5-48-48-48zM264 408c0 22.1-17.9 40-40 40s-40-17.9-40-40v-48c0-22.1 17.9-40 40-40s40 17.9 40 40v48z\"><\/path><\/svg>\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Agent Login<\/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-06ba8d3 elementor-align-right elementor-widget elementor-widget-button\" data-id=\"06ba8d3\" 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:\/\/ctest.al\/join-us\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t<span class=\"elementor-button-icon\">\n\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-chevron-right\" viewBox=\"0 0 320 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"><\/path><\/svg>\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Join Us<\/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>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-242994a menu-mobile elementor-hidden-desktop elementor-hidden-tablet e-flex e-con-boxed e-con e-parent\" data-id=\"242994a\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;,&quot;position&quot;:&quot;fixed&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-90dbc34 e-con-full e-flex e-con e-child\" data-id=\"90dbc34\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-dcc2595 e-con-full e-flex e-con e-child\" data-id=\"dcc2595\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-b2654e4 logo elementor-widget elementor-widget-image\" data-id=\"b2654e4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/ctest.al\/\">\n\t\t\t\t\t\t\t<img decoding=\"async\" width=\"726\" height=\"143\" src=\"https:\/\/ctest.al\/wp-content\/uploads\/2026\/03\/Commit-Logo-White.svg\" class=\"attachment-large size-large wp-image-70\" alt=\"\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f117ce0 close-menu-mobile elementor-hidden-desktop elementor-hidden-tablet elementor-view-default elementor-widget elementor-widget-icon\" data-id=\"f117ce0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-wrapper\">\n\t\t\t<div class=\"elementor-icon\">\n\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-bars\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"><\/path><\/svg>\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-2d63f3a e-con-full e-flex e-con e-child\" data-id=\"2d63f3a\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-216e588 elementor-nav-menu__align-start elementor-nav-menu--dropdown-none elementor-widget elementor-widget-nav-menu\" data-id=\"216e588\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;layout&quot;:&quot;vertical&quot;,&quot;submenu_icon&quot;:{&quot;value&quot;:&quot;&lt;svg aria-hidden=\\&quot;true\\&quot; class=\\&quot;e-font-icon-svg e-fas-caret-down\\&quot; viewBox=\\&quot;0 0 320 512\\&quot; xmlns=\\&quot;http:\\\/\\\/www.w3.org\\\/2000\\\/svg\\&quot;&gt;&lt;path d=\\&quot;M31.3 192h257.3c17.8 0 26.7 21.5 14.1 34.1L174.1 354.8c-7.8 7.8-20.5 7.8-28.3 0L17.2 226.1C4.6 213.5 13.5 192 31.3 192z\\&quot;&gt;&lt;\\\/path&gt;&lt;\\\/svg&gt;&quot;,&quot;library&quot;:&quot;fa-solid&quot;}}\" data-widget_type=\"nav-menu.default\">\n\t\t\t\t\t\t\t\t<nav aria-label=\"Menu\" class=\"elementor-nav-menu--main elementor-nav-menu__container elementor-nav-menu--layout-vertical e--pointer-underline e--animation-fade\">\n\t\t\t\t<ul id=\"menu-1-216e588\" class=\"elementor-nav-menu sm-vertical\"><li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-661\"><a href=\"https:\/\/ctest.al\/sq\/about\/\" class=\"elementor-item\">About<\/a><\/li>\n<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-1877\"><a href=\"https:\/\/ctest.al\/sq\/services\/\" class=\"elementor-item\">Services<\/a><\/li>\n<li class=\"menu-item menu-item-type-post_type menu-item-object-page current_page_parent menu-item-1053\"><a href=\"https:\/\/ctest.al\/sq\/blog\/\" class=\"elementor-item\">Blog<\/a><\/li>\n<li class=\"menu-item menu-item-type-custom menu-item-object-custom menu-item-1057\"><a href=\"https:\/\/ctest.al\/contact-us#office\" class=\"elementor-item elementor-item-anchor\">Office<\/a><\/li>\n<\/ul>\t\t\t<\/nav>\n\t\t\t\t\t\t<nav class=\"elementor-nav-menu--dropdown elementor-nav-menu__container\" aria-hidden=\"true\">\n\t\t\t\t<ul id=\"menu-2-216e588\" class=\"elementor-nav-menu sm-vertical\"><li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-661\"><a href=\"https:\/\/ctest.al\/sq\/about\/\" class=\"elementor-item\" tabindex=\"-1\">About<\/a><\/li>\n<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-1877\"><a href=\"https:\/\/ctest.al\/sq\/services\/\" class=\"elementor-item\" tabindex=\"-1\">Services<\/a><\/li>\n<li class=\"menu-item menu-item-type-post_type menu-item-object-page current_page_parent menu-item-1053\"><a href=\"https:\/\/ctest.al\/sq\/blog\/\" class=\"elementor-item\" tabindex=\"-1\">Blog<\/a><\/li>\n<li class=\"menu-item menu-item-type-custom menu-item-object-custom menu-item-1057\"><a href=\"https:\/\/ctest.al\/contact-us#office\" class=\"elementor-item elementor-item-anchor\" tabindex=\"-1\">Office<\/a><\/li>\n<\/ul>\t\t\t<\/nav>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-ab7ef90 e-con-full e-flex e-con e-child\" data-id=\"ab7ef90\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-b707da3 elementor-widget elementor-widget-text-editor\" data-id=\"b707da3\" 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>2026 Commit Real Estate &amp; Holdings.<br \/>All rights reserved.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1076261 elementor-widget elementor-widget-text-editor\" data-id=\"1076261\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<div style=\"display: flex; gap: 40px\">\n\n<span style=\"text-decoration: underline;\">Privacy Policy<\/span> <span style=\"text-decoration: underline;\">Cookie Policy<\/span>\n\n<\/div>\t\t\t\t\t\t\t\t<\/div>\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\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Properties Map Menu THE COMPANY OTHER Agent Login Join Us 2026 Commit Real Estate &amp; Holdings.All rights reserved. Privacy Policy Cookie Policy<\/p>","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_canvas","meta":{"_acf_changed":false,"nf_dc_page":"","footnotes":""},"class_list":["post-162","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/ctest.al\/sq\/wp-json\/wp\/v2\/pages\/162","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ctest.al\/sq\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/ctest.al\/sq\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/ctest.al\/sq\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ctest.al\/sq\/wp-json\/wp\/v2\/comments?post=162"}],"version-history":[{"count":5,"href":"https:\/\/ctest.al\/sq\/wp-json\/wp\/v2\/pages\/162\/revisions"}],"predecessor-version":[{"id":1634,"href":"https:\/\/ctest.al\/sq\/wp-json\/wp\/v2\/pages\/162\/revisions\/1634"}],"wp:attachment":[{"href":"https:\/\/ctest.al\/sq\/wp-json\/wp\/v2\/media?parent=162"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}