{"id":7269,"date":"2025-06-01T06:36:41","date_gmt":"2025-06-01T06:36:41","guid":{"rendered":"https:\/\/gocuris.com\/?page_id=7269"},"modified":"2025-11-18T15:19:12","modified_gmt":"2025-11-18T21:19:12","slug":"locations","status":"publish","type":"page","link":"https:\/\/gocuris.com\/locations\/","title":{"rendered":"Locations"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"7269\" class=\"elementor elementor-7269\" data-elementor-post-type=\"page\">\n\t\t\t\t<div data-particle_enable=\"false\" data-particle-mobile-disabled=\"false\" class=\"elementor-element elementor-element-ba6a613 e-con-full e-flex e-con e-parent\" data-id=\"ba6a613\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-e354769 show-if-book elementor-invisible elementor-widget elementor-widget-heading\" data-id=\"e354769\" data-element_type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeInDown&quot;}\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-heading-title elementor-size-default\">Find a Curis clinic near you to book now.<\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-34cb66e elementor-widget elementor-widget-html\" data-id=\"34cb66e\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<script>\n  function toggleBookWidget() {\n    const showTarget = document.querySelector('.show-if-book');\n    const hasBookHash = window.location.hash === '#book';\n\n    if (showTarget) {\n      showTarget.style.display = hasBookHash ? 'block' : 'none';\n    }\n  }\n\n  \/\/ Run after page load\n  document.addEventListener(\"DOMContentLoaded\", function () {\n    toggleBookWidget();\n\n    \/\/ Re-run if the hash changes (e.g. user navigates to #book dynamically)\n    window.addEventListener('hashchange', toggleBookWidget, false);\n  });\n<\/script>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1059200 elementor-widget elementor-widget-heading\" data-id=\"1059200\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h1 class=\"elementor-heading-title elementor-size-default\">Locations<\/h1>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8bd32c6 elementor-widget elementor-widget-html\" data-id=\"8bd32c6\" data-element_type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;none&quot;,&quot;_animation_delay&quot;:300}\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!-- \u2705 GOOGLE MAPS -->\n<script src=\"https:\/\/maps.googleapis.com\/maps\/api\/js?key=AIzaSyA6TqRfj8IBv8W3zEtWHKTZERCzePtja60&amp;libraries=places,geometry\" async defer><\/script>\n<script>\nfunction initMapLoader() {\n  console.log('[Google Maps] API loaded, waiting for data\u2026');\n\n  let tries = 0;\n  const interval = setInterval(() => {\n    tries++;\n\n    const dataReady = window.myStoreData && Array.isArray(window.myStoreData);\n    const ipReady = window.ipLocation && window.ipLocation.lat && window.ipLocation.lng;\n\n    if (dataReady && ipReady) {\n      clearInterval(interval);\n      console.log('[Map] All resources ready: Google Maps, Store Data, and IP Location');\n      initCustomMap();\n      document.getElementById('custom-map')?.classList.add('map-loaded');\n      document.getElementById('results-and-info')?.classList.add('map-loaded');\n    } else if (tries > 30) {\n      clearInterval(interval);\n      console.warn('[Map] Timeout waiting for all resources. Proceeding anyway.');\n      initCustomMap(); \/\/ fallback without guaranteed IP\n    }\n  }, 200);\n}\n<\/script>\n\n\n<!-- \u2705 CLUSTER LIBRARY --> \n<script src=\"https:\/\/unpkg.com\/@googlemaps\/markerclusterer\/dist\/index.min.js\"><\/script> \n\n\n<!-- \u2705 FILTER BAR -->\n<div id=\"location-filters\">\n    <input id=\"location-search\" type=\"text\" placeholder=\"Search nearby...\">\n    <select id=\"radius-filter\">\n        <option value=\"25\" selected>25 miles<\/option>\n        <option value=\"50\">50 miles<\/option>\n        <option value=\"150\">150 miles<\/option>\n        <option value=\"550\">Any Distance<\/option>\n    <\/select>\n    <select id=\"service-filter\">\n        <option value=\"\">Services<\/option>\n    <\/select>\n    <button id=\"location-search-btn\">Search<\/button>\n<\/div>\n\n<!-- \u2705 MAP -->\n<div id=\"custom-map\" ><\/div>\n\n<!-- \u2705 LISTINGS + INFOBOX -->\n<div id=\"results-and-info\">\n    <div id=\"location-list\"><\/div>\n    <div id=\"custom-infowindow\"><\/div>\n<\/div>\n\n\n<!-- \u2705 MAP LOGIC --> \n<script>\n\n\/\/ Check once at load\nconst appendBook = window.location.hash === '#book';\n\nfunction getPermalink(loc) {\n  if (!loc.permalink) return '#';\n  return appendBook ? `${loc.permalink.replace(\/\\\/$\/, '')}#book` : loc.permalink;\n}\n\n\nlet allMarkers = [];\nlet markerById = {};\nlet map;\nlet markerCluster;\nlet locations = [];\nlet currentPage = 1;\nconst resultsPerPage = 6;\nlet selectedPlace = null;\nlet activeMarker = null;\nlet defaultIcon = null;\nlet isSearchMode = false;\nlet nameOnlyInfoWindow;\nlet clusterMarkers = [];\n\n\n\nfunction renderCustomInfoBox(loc) {\n  const infobox = document.getElementById('custom-infowindow');\n  if (!loc) return;\n\nconst servicesList = (loc.services || [])\n  .filter(s => !s.parent || s.parent === 0) \/\/ Only top-level\n  .map(s => `<li><a href=\"\/${s.slug}\">${s.title}<\/a><\/li>`)\n  .join('');\n\n\n  const addressLine1 = loc.address || '';\n  const addressLine2 = `${loc.city || ''}, ${loc.state_abbr || ''} ${loc.zip || ''}`;\n   const fallbackImage = '\/wp-content\/themes\/hello-theme-child-master\/images\/Location-Default.png';\n\n  \/\/ Extract image URL from <img> tag if needed\n  let imageUrl = fallbackImage;\n  if (loc.thumb) {\n    if (loc.thumb.includes('<img')) {\n      const match = loc.thumb.match(\/src=[\"']([^\"']+)[\"']\/);\n      if (match && match[1]) {\n        imageUrl = match[1];\n      }\n    } else {\n      imageUrl = loc.thumb;\n    }\n  }\n\n  const html = `\n  <div class=\"infowindow-wrapper\" style=\"font-family: 'Inter', sans-serif;border-radius: 15px;margin: 0 1.5rem 1.5rem 1.5rem;background: white;box-shadow: 0 0px 14px #80808054;\">\n    <a href=\"${getPermalink(loc) || '#'}\">\n      <div style=\"background-image: url('${imageUrl}'); background-size: cover; background-position: center; min-height: 10rem; border-radius: 15px 15px 0 0; position: relative;\">\n        <div style=\"\n          position: absolute;\n          bottom: 0;\n          right: 0;\n          background: var(--e-global-color-primary);\n          color: #fff;\n          padding: 0.5rem 1rem;\n          border-radius: 20px 0 0 0;\n          font-weight: 600;\n          width: 130px;\n          text-align: center;\n          ${!(loc.announcements && loc.announcements.length > 0) ? 'opacity: 0; pointer-events: none;' : ''}\n        \">\n          ${loc.announcements && loc.announcements.length > 0 ? loc.announcements[0].title : '&nbsp;'}\n        <\/div>\n      <\/div>\n    <\/a>\n\n    <div style=\"padding:2.5rem\">\n      <h2 style=\"color: #204B80; margin-bottom: 0.75rem; font-size: 2.25rem; font-weight: 600;\">${loc.name}<\/h2>\n\n      <ul class=\"services-offered\" style=\"display: flex; flex-wrap: wrap; gap: 1.25rem; margin: 0 0 3rem 0;\">\n        ${servicesList}\n      <\/ul>\n\n      <div style=\"display: flex; flex-wrap: wrap; gap: 1rem; flex: 1;\">\n        <div class=\"infoWindowRightCol\">\n          <ul style=\"list-style: none; padding-left: 0; margin: 0;\">\n            ${(addressLine1 || addressLine2) ? `\n              <li>\n                <span class=\"bullet\"><\/span>\n                <span>\n                  <a href=\"https:\/\/www.google.com\/maps\/search\/?api=1&query=${encodeURIComponent(addressLine1 + ' ' + (addressLine2 || ''))}\" target=\"_blank\" rel=\"noopener noreferrer\" aria-label=\"Open address in Google Maps\">\n                                  ${loc.address || ''}\n              ${loc.address2 ? `#${loc.address2}` : ''}<br>\n                  <\/a>\n                <\/span>\n              <\/li>` : ''\n            }\n\n            ${loc.phone ? `\n              <li>\n                <span class=\"bullet\"><\/span>\n                <span><a href=\"tel:${loc.phone}\" aria-label=\"Call ${loc.name}\">${loc.phone}<\/a><\/span>\n              <\/li>` : ''}\n\n\n            ${loc.email ? `\n              <li>\n                <span class=\"bullet\"><\/span>\n                <span><a href=\"mailto:${loc.email}\" aria-label=\"Email ${loc.name}\">${loc.email}<\/a><\/span>\n              <\/li>` : ''}\n          <\/ul>\n        <\/div>\n\n        <div class=\"infoWindowRightCol\">\n          <ul style=\"list-style: none; padding-left: 0; margin: 0;\">\n\n${loc.gmb_link ? `\n  <li>\n    <span class=\"bullet\"><\/span>\n    <span>${loc.gmb_link}<\/span>\n  <\/li>` : ''}\n\n          <\/ul>\n        <\/div>\n      <\/div>\n    <\/div>\n\n    <div class=\"btnWrapper\">\n      <a href=\"tel:${loc.phone || ''}\" class=\"solidPrimaryBtn\" aria-label=\"Call Curis Functional Health in ${loc.name}\">Call<\/a>\n\n      <a href=\"${loc.permalink || '#'}#book\" class=\"solidWhiteBtn\" aria-label=\"Request booking at Curis Functional Health - ${loc.name}\">Book<\/a>\n\n      <a href=\"${loc.permalink || '#'}\" class=\"outlinedPrimaryBtn\" aria-label=\"Learn more about ${loc.name}\">Learn<\/a>\n    <\/div>\n  <\/div>\n`;\n\n  infobox.innerHTML = html;\n}\n\nfunction showInfoBoxFromLocal(loc) {\n  renderCustomInfoBox(loc);\n\n   nameOnlyInfoWindow.setContent(`\n   \n      ${loc.name}\n\n  `);\n\n  nameOnlyInfoWindow.setOptions({\n    pixelOffset: new google.maps.Size(0, 40) \/\/ pushes it 40px *below* the marker\n  });\n\n  nameOnlyInfoWindow.setPosition({\n    lat: parseFloat(loc.lat),\n    lng: parseFloat(loc.lng)\n  });\n\n  nameOnlyInfoWindow.open(map);\n}\n\nfunction showInfoBoxFromTemplate(locationId) {\n  const loc = locations.find(l => l.id == locationId);\n  if (loc) {\n    renderCustomInfoBox(loc);\n  }\n}{\n  const loc = locations.find(l => l.id == locationId);\n  if (loc) {\n    renderCustomInfoBox(loc);\n  }\n}\nfunction initCustomMap() {\n  const input = document.getElementById('location-search');\n  const autocomplete = new google.maps.places.Autocomplete(input);\n  \n    nameOnlyInfoWindow = new google.maps.InfoWindow();\n\n    autocomplete.addListener('place_changed', () => {\n      selectedPlace = autocomplete.getPlace();\n      if (selectedPlace) {\n        performSearch(); \/\/ \ud83d\udd25 immediately trigger search\n      }\n    });\n\n  map = new google.maps.Map(document.getElementById('custom-map'), {\n  zoom: 5,\n  center: { lat: 37.679376, lng: -96.361736 },\n  zoomControl: true,\n  styles: [\n    {\n        \"featureType\": \"administrative.neighborhood\",\n        \"elementType\": \"labels.text.fill\",\n        \"stylers\": [\n            {\n                \"weight\": \"4\"\n            },\n            {\n                \"visibility\": \"on\"\n            },\n            {\n                \"color\": \"#405e3b\"\n            }\n        ]\n    },\n    {\n        \"featureType\": \"landscape.man_made\",\n        \"elementType\": \"all\",\n        \"stylers\": [\n            {\n                \"lightness\": \"80\"\n            },\n            {\n                \"saturation\": \"52\"\n            }\n        ]\n    },\n    {\n        \"featureType\": \"landscape.natural\",\n        \"elementType\": \"all\",\n        \"stylers\": [\n            {\n                \"hue\": \"#70ff00\"\n            },\n            {\n                \"lightness\": \"8\"\n            },\n            {\n                \"saturation\": \"-28\"\n            }\n        ]\n    },\n    {\n        \"featureType\": \"landscape.natural.terrain\",\n        \"elementType\": \"all\",\n        \"stylers\": [\n            {\n                \"color\": \"#405e3b\"\n            }\n        ]\n    },\n    {\n        \"featureType\": \"poi.attraction\",\n        \"elementType\": \"all\",\n        \"stylers\": [\n            {\n                \"visibility\": \"off\"\n            }\n        ]\n    },\n    {\n        \"featureType\": \"poi.business\",\n        \"elementType\": \"all\",\n        \"stylers\": [\n            {\n                \"visibility\": \"on\"\n            }\n        ]\n    },\n    {\n        \"featureType\": \"poi.business\",\n        \"elementType\": \"geometry.stroke\",\n        \"stylers\": [\n            {\n                \"visibility\": \"on\"\n            },\n            {\n                \"color\": \"#d30b0b\"\n            }\n        ]\n    },\n    {\n        \"featureType\": \"poi.business\",\n        \"elementType\": \"labels.text\",\n        \"stylers\": [\n            {\n                \"visibility\": \"on\"\n            },\n            {\n                \"saturation\": \"-30\"\n            },\n            {\n                \"lightness\": \"0\"\n            },\n            {\n                \"gamma\": \"1.5\"\n            },\n            {\n                \"weight\": \"4.20\"\n            }\n        ]\n    },\n    {\n        \"featureType\": \"poi.business\",\n        \"elementType\": \"labels.text.stroke\",\n        \"stylers\": [\n            {\n                \"color\": \"#ffffff\"\n            }\n        ]\n    },\n    {\n        \"featureType\": \"poi.business\",\n        \"elementType\": \"labels.icon\",\n        \"stylers\": [\n            {\n                \"visibility\": \"on\"\n            },\n            {\n                \"lightness\": \"10\"\n            },\n            {\n                \"saturation\": \"-30\"\n            },\n            {\n                \"weight\": \"0.01\"\n            },\n            {\n                \"gamma\": \"1.5\"\n            }\n        ]\n    },\n    {\n        \"featureType\": \"poi.government\",\n        \"elementType\": \"all\",\n        \"stylers\": [\n            {\n                \"visibility\": \"off\"\n            }\n        ]\n    },\n    {\n        \"featureType\": \"poi.park\",\n        \"elementType\": \"geometry.fill\",\n        \"stylers\": [\n            {\n                \"color\": \"#bbe9b3\"\n            }\n        ]\n    },\n    {\n        \"featureType\": \"poi.place_of_worship\",\n        \"elementType\": \"all\",\n        \"stylers\": [\n            {\n                \"visibility\": \"off\"\n            }\n        ]\n    },\n    {\n        \"featureType\": \"poi.place_of_worship\",\n        \"elementType\": \"labels\",\n        \"stylers\": [\n            {\n                \"visibility\": \"off\"\n            }\n        ]\n    },\n    {\n        \"featureType\": \"road\",\n        \"elementType\": \"geometry.stroke\",\n        \"stylers\": [\n            {\n                \"weight\": \"2.67\"\n            }\n        ]\n    },\n    {\n        \"featureType\": \"road.highway\",\n        \"elementType\": \"geometry.fill\",\n        \"stylers\": [\n            {\n                \"color\": \"#e7b75f\"\n            }\n        ]\n    },\n    {\n        \"featureType\": \"road.highway\",\n        \"elementType\": \"geometry.stroke\",\n        \"stylers\": [\n            {\n                \"color\": \"#f6ecce\"\n            }\n        ]\n    },\n    {\n        \"featureType\": \"road.arterial\",\n        \"elementType\": \"geometry.stroke\",\n        \"stylers\": [\n            {\n                \"weight\": \"3.00\"\n            },\n            {\n                \"visibility\": \"on\"\n            },\n            {\n                \"color\": \"#ffffff\"\n            }\n        ]\n    },\n    {\n        \"featureType\": \"road.local\",\n        \"elementType\": \"geometry.stroke\",\n        \"stylers\": [\n            {\n                \"color\": \"#ffffff\"\n            },\n            {\n                \"weight\": \"3.00\"\n            }\n        ]\n    },\n    {\n        \"featureType\": \"water\",\n        \"elementType\": \"geometry.fill\",\n        \"stylers\": [\n            {\n                \"color\": \"#a3cdfe\"\n            },\n            {\n                \"lightness\": \"15\"\n            }\n        ]\n    }\n  ]\n\n});\n\n locations = window.myStoreData || [];\n\npopulateServiceFilter();\nrenderMarkers(locations);\n\nif (window.ipLocation && locations.length) {\n  const ipLatLng = new google.maps.LatLng(window.ipLocation.lat, window.ipLocation.lng);\n\n  const sortedByDistance = locations\n    .map(loc => {\n      const locLatLng = new google.maps.LatLng(parseFloat(loc.lat), parseFloat(loc.lng));\n      loc.distance = google.maps.geometry.spherical.computeDistanceBetween(ipLatLng, locLatLng) * 0.000621371;\n      return loc;\n    })\n    .sort((a, b) => a.distance - b.distance);\n\n  locations = sortedByDistance; \/\/ \u2705 update global list\n  currentPage = 1;\n  renderLocationList(locations);\n\n  \/\/ \u2705 Also update the info box with the closest\n  showInfoBoxFromLocal(locations[0]);\n\n} else {\n  \/\/ fallback if IP not available\n  renderLocationList(getLocationsInBounds());\n}\n\n\n  let triggeredByZoom = false;\n\n  google.maps.event.addListener(map, 'zoom_changed', () => {\n    triggeredByZoom = true;\n  });\n\n  map.addListener('idle', () => {\n    if (triggeredByZoom) {\n      const center = map.getCenter();\n      const closest = getClosestLocation(center);\n      if (closest) {\n        showInfoBoxFromLocal(closest);\n      }\n      triggeredByZoom = false;\n    }\n\n    if (!isSearchMode) {\n      renderLocationList(getLocationsInBounds());\n    }\n  });\n\n  document.getElementById('location-search-btn').addEventListener('click', () => {\n    triggeredByZoom = true;\n    performSearch();\n  });\n\n  document.getElementById('service-filter').addEventListener('change', () => {\n    performSearch();\n  });\n}\n\nfunction populateServiceFilter() {\n  const serviceFilter = document.getElementById('service-filter');\n  serviceFilter.innerHTML = '<option value=\"\">Service<\/option>';\n\n  if (window.myServices) {\n    Object.entries(window.myServices).forEach(([slug, title]) => {\n      const option = document.createElement('option');\n      option.value = slug;\n      option.textContent = title;\n      serviceFilter.appendChild(option);\n    });\n  }\n}\n\nfunction getLocationsInBounds() {\n  const bounds = map.getBounds();\n  if (!bounds) return locations;\n  return locations.filter(loc => {\n    const latLng = new google.maps.LatLng(parseFloat(loc.lat), parseFloat(loc.lng));\n    return bounds.contains(latLng);\n  });\n}\n\nfunction animateBounce(marker, height = 20, duration = 1000) {\n  const originalPosition = marker.getPosition();\n  const startTime = performance.now();\n\n  function step(currentTime) {\n    const elapsed = currentTime - startTime;\n    const progress = (elapsed % duration) \/ duration;\n    const bounce = Math.sin(progress * Math.PI); \/\/ bounce up and down\n\n    const latOffset = (height * bounce) \/ 111320; \/\/ convert px to lat\n    const newPosition = {\n      lat: originalPosition.lat() + latOffset,\n      lng: originalPosition.lng()\n    };\n\n    marker.setPosition(newPosition);\n\n    if (elapsed < duration * 1.5) {\n      requestAnimationFrame(step);\n    } else {\n      marker.setPosition(originalPosition);\n    }\n  }\n\n  requestAnimationFrame(step);\n}\n\n\nfunction renderMarkers(list) {\n  clearMarkers();\n\nconst customSvg = {\n  url: 'data:image\/svg+xml;charset=UTF-8,' + encodeURIComponent(`\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 26.28 38.53\">\n      <path d=\"M24.75,6.46C22.41,2.48,17.86,0,12.87,0c-.62,0-1.26.04-1.88.12C4.53.93-.58,7.27.05,13.68c.28,2.87,3.08,6.87,5.54,10.39,1.3,1.86,2.53,3.62,3.27,5.03,1.4,2.65,2.54,5.66,3.3,8.7.06.3.34.72.91.72.5,0,.8-.35.89-.68.31-.84.59-1.69.87-2.52.63-1.89,1.29-3.85,2.2-5.67,1.13-2.27,2.64-4.35,4.09-6.37,1.21-1.68,2.46-3.41,3.48-5.23,2.19-3.9,2.24-8.02.14-11.6Z\" fill=\"#fff\"\/>\n      <path d=\"M24.17,17.81c-2.22,3.96-5.49,7.41-7.58,11.62-1.32,2.65-2.09,5.5-3.1,8.27,0,0-.07.33-.41.33-.37,0-.42-.33-.42-.33-.75-3.03-1.9-6.08-3.35-8.83C7.13,24.72.97,17.83.55,13.63-.06,7.49,4.96,1.38,11.05.61c.61-.08,1.22-.11,1.82-.11,9.07,0,16.22,8.54,11.3,17.31Z\" fill=\"#1F4C7A\"\/>\n      <path d=\"M14.31,10.71c.08-.11.08.06.06.11l-.06.19c0,.06,0,0-.03.14-.14.47-.36.88-.63,1.27-.28.36-.58.69-.85,1.05-.19.22-.39.44-.55.69-.25.36-.28.74-.08,1.16.17.39.47.55.88.5.85-.14,1.6-.52,2.15-1.24.69-.91.91-1.96.77-3.06-.11-.83-.39-1.6-.8-2.34-.14-.25-.28-.52-.47-.74-.06,0-.06.03-.08.06-.66.72-1.38,1.35-2.2,1.87-.33.22-.69.41-.99.69-.72.66-1.05,1.49-.99,2.45.06.72.39,1.32.83,1.87.14.19.3.39.52.52,0-.06-.06-.14-.08-.19-.11-.19-.17-.39-.22-.58-.14-.47-.03-.88.28-1.24.17-.22.36-.41.58-.58.3-.28.58-.55.85-.85.41-.47.74-.99,1.07-1.49l.14-.25h-.08Z\" fill=\"#fff\"\/>\n      <path d=\"M19.17,17.13c-1.13,1.54-2.56,2.56-4.47,2.87-1.96.3-3.8-.06-5.48-1.13-1.85-1.16-2.89-2.81-3.28-4.91-.28-1.52-.17-3,.39-4.44.94-2.4,2.7-3.89,5.18-4.52,1.32-.33,2.67-.33,4,.03,1.52.44,2.67,1.32,3.58,2.59v.06c0,.06-.08.08-.14.11-.41.22-.8.44-1.21.69-.19.11-.17.11-.28-.06-.83-1.1-1.96-1.76-3.31-1.96-2.07-.28-4.44.58-5.68,2.87-.61,1.1-.8,2.32-.74,3.56.06,1.16.39,2.2,1.05,3.17.99,1.41,2.34,2.18,4.05,2.37,1.35.14,2.56-.19,3.64-.96.39-.28.72-.61.99-.99q.11-.17.28-.06c.47.25.91.5,1.41.77h0l.03-.06Z\" fill=\"#fff\"\/>\n    <\/svg>\n  `),\n  scaledSize: new google.maps.Size(38, 38),\n  anchor: new google.maps.Point(19, 38)\n};\n\n\nmarkerById = {}; \nlist.forEach((loc, index) => {\n  if (!loc.lat || !loc.lng) return;\n\n  const marker = new google.maps.Marker({\n    position: { lat: parseFloat(loc.lat), lng: parseFloat(loc.lng) },\n    map,\n    title: '',\n    icon: customSvg\n  });\n\n  marker._locationId = loc.id;\n  markerById[loc.id] = marker; \/\/ \u2705 Accurate lookup for hover behavior\n\n  \/\/ Hover to activate marker and info window\n  marker.addListener('mouseover', () => {\n    if (window.innerWidth > 768) {\n      setActiveMarker(marker, loc); \/\/ Bounces and shows info\n    }\n  });\n\n  marker.addListener('click', () => {\n    showInfoBoxFromLocal(loc);\n\n    if (window.innerWidth >= 1024 && getPermalink(loc)) {\n      setTimeout(() => {\n        window.open(getPermalink(loc), '_blank');\n      }, 500);\n    }\n  });\n\n  allMarkers.push(marker);\n});\n\n\nmarkerCluster = new markerClusterer.MarkerClusterer({\n  map,\n  markers: allMarkers,\n renderer: {\n  render({ count, position, markers }) {\n    const color = count > 10 ? '#405E3B' : '#387bbf';\n\n    const base = 10;\n    const radius = base + Math.min(count, 10);\n    const r1 = radius;\n    const r2 = radius + 6;\n    const r3 = radius + 12;\n\n    const svg = window.btoa(`\n      <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"${r3 * 2}\" height=\"${r3 * 2}\">\n        <circle cx=\"${r3}\" cy=\"${r3}\" r=\"${r3}\" fill=\"${color}\" fill-opacity=\"0.2\"\/>\n        <circle cx=\"${r3}\" cy=\"${r3}\" r=\"${r2}\" fill=\"${color}\" fill-opacity=\"0.4\"\/>\n        <circle cx=\"${r3}\" cy=\"${r3}\" r=\"${r1}\" fill=\"${color}\" fill-opacity=\"0.8\" \/>\n        <text x=\"${r3}\" y=\"${r3}\" text-anchor=\"middle\" fill=\"#fff\" font-size=\"14\" font-family=\"Inter, sans-serif\" dy=\".3em\">${count}<\/text>\n      <\/svg>\n    `);\n\n    const marker = new google.maps.Marker({\n      position,\n      icon: {\n        url: 'data:image\/svg+xml;base64,' + svg,\n        scaledSize: new google.maps.Size(r3 * 2, r3 * 2)\n      },\n      zIndex: google.maps.Marker.MAX_ZINDEX + count\n    });\n\n    \/\/ \ud83d\udca1 Attach the cluster DOM node to the markers it represents\n    marker._clusterMarkers = markers;\n\n    return marker;\n  }\n}\n});\n}\n\nfunction pulseClusterIfMarkerIsClustered(targetMarker) {\n  const clusters = markerCluster.getMarkers(); \/\/ Actually all cluster markers with `_clusterMarkers` attached\n\n  clusters.forEach(clusterMarker => {\n    const memberMarkers = clusterMarker._clusterMarkers || [];\n    if (memberMarkers.includes(targetMarker)) {\n      const icon = clusterMarker.getIcon();\n      const originalUrl = icon.url;\n\n      \/\/ Temporarily enlarge the icon to simulate a \"pulse\"\n      clusterMarker.setIcon({\n        ...icon,\n        scaledSize: new google.maps.Size(icon.scaledSize.width * 1.25, icon.scaledSize.height * 1.25)\n      });\n\n      setTimeout(() => {\n        clusterMarker.setIcon({\n          ...icon,\n          scaledSize: new google.maps.Size(icon.scaledSize.width, icon.scaledSize.height)\n        });\n      }, 300);\n    }\n  });\n}\n\n\n\n\nfunction setActiveMarker(marker, loc) {\n  if (activeMarker && activeMarker !== marker) {\n    activeMarker.setAnimation(null);\n  }\n\n  activeMarker = marker;\n  activeMarker.setAnimation(google.maps.Animation.BOUNCE);\n\n  if (loc) {\n    showInfoBoxFromLocal(loc);\n  \n    if (window.innerWidth <= 1024) {\n      updateTopListingCard(loc);\n    }\n  }\n\n  \/\/ \ud83d\udca5 Pulse if clustered\n  pulseClusterIfMarkerIsClustered(marker);\n}\n\nfunction updateTopListingCard(loc) {\n  const container = document.querySelector('#location-list ul.location-result-list');\n  if (!container) return;\n\n  const html = renderLocationCard(loc, 0); \/\/ reuse your existing renderer\n\n  const firstChild = container.children[0];\n  if (firstChild) {\n    firstChild.outerHTML = html;\n\n    \/\/ Optional: highlight and scroll into view\n    const updated = container.children[0];\n\n  }\n}\n\n\n\/\/ \ud83d\udd39 Geocode fallback when user types but doesn't pick from autocomplete\nfunction geocodeInput(query, onDone) {\n  if (!query) return;\n\n  const geocoder = new google.maps.Geocoder();\n  geocoder.geocode({ address: query }, (results, status) => {\n    if (status === \"OK\" && results && results[0]) {\n      onDone(results[0].geometry.location);\n    } else {\n      console.warn(\"[Geocode] Failed:\", query, status);\n      \/\/ Fallback: use map center or IP location if available\n      const fallback =\n        (window.ipLocation && new google.maps.LatLng(window.ipLocation.lat, window.ipLocation.lng)) ||\n        map.getCenter();\n      alert(\"Could not find that location. Showing closest results to your area.\");\n      onDone(fallback);\n    }\n  });\n}\n\n\/\/ \ud83d\udd39 Core search logic extracted from your original performSearch()\nfunction runSearchCore(center, radius, selectedService, allLocations) {\n  const inRadius = [];\n  const nearby = [];\n\n  allLocations.forEach(loc => {\n    const lat = parseFloat(loc.lat);\n    const lng = parseFloat(loc.lng);\n    if (!lat || !lng) return;\n\n    const latLng = new google.maps.LatLng(lat, lng);\n    const distance = google.maps.geometry.spherical.computeDistanceBetween(center, latLng) * 0.000621371;\n    loc.distance = distance;\n\n    const matchesService = !selectedService || (loc.services || []).some(s => s.slug === selectedService);\n    const isInRadius = distance <= radius;\n\n    if (matchesService && isInRadius) {\n      inRadius.push({ ...loc, isOutsideRadius: false, isVisible: true });\n    } else {\n      nearby.push({ ...loc, isOutsideRadius: true, isVisible: false });\n    }\n  });\n\n  const allResults = [...inRadius, ...nearby];\n  const sortedInRadius = inRadius.sort((a, b) => a.distance - b.distance);\n  const sortedNearby = nearby.sort((a, b) => a.distance - b.distance).slice(0, 5);\n\n  locations = allResults;\n  currentPage = 1;\n\n  clearMarkers();\n  renderMarkers(allResults);\n  renderLocationList(sortedInRadius, sortedNearby);\n\n  if (inRadius.length > 0) {\n    const bounds = new google.maps.LatLngBounds();\n    bounds.extend(center);\n    inRadius.forEach(loc => {\n      bounds.extend(new google.maps.LatLng(parseFloat(loc.lat), parseFloat(loc.lng)));\n    });\n    map.fitBounds(bounds);\n  } else if (nearby.length > 0) {\n    map.setCenter(center);\n    map.setZoom(6);\n  } else {\n    map.setCenter(center);\n    map.setZoom(7);\n  }\n}\n\nfunction performSearch() {\n  const radius = parseInt(document.getElementById('radius-filter').value);\n  const selectedService = document.getElementById('service-filter').value;\n  const allLocations = window.myStoreData || [];\n  const inputVal = document.getElementById('location-search').value.trim();\n\n  let center = map.getCenter();\n  const isPlaceSearch = (typeof selectedPlace !== 'undefined') && selectedPlace?.geometry?.location;\n\n  \/\/ Keep your existing flag behavior\n  isSearchMode = !!isPlaceSearch;\n\n  \/\/ Case 1: user selected a Google Autocomplete place\n  if (isPlaceSearch) {\n    center = selectedPlace.geometry.location;\n    map.setCenter(center);\n    map.setZoom(10);\n    runSearchCore(center, radius, selectedService, allLocations);\n    return;\n  }\n\n  \/\/ Case 2: user typed something (ZIP\/city\/address) and hit Enter or clicked Search\n  if (inputVal) {\n    geocodeInput(inputVal, (geoCenter) => {\n      map.setCenter(geoCenter);\n      map.setZoom(10);\n      runSearchCore(geoCenter, radius, selectedService, allLocations);\n    });\n    return;\n  }\n\n  \/\/ Case 3: nothing typed; use current map center\n  runSearchCore(center, radius, selectedService, allLocations);\n}\n\n\n\nfunction getClosestLocation(center) {\n  let minDist = Infinity;\n  let closest = null;\n\n  locations.forEach(loc => {\n    if (!loc.lat || !loc.lng) return;\n    const distance = google.maps.geometry.spherical.computeDistanceBetween(\n      center,\n      new google.maps.LatLng(parseFloat(loc.lat), parseFloat(loc.lng))\n    );\n    if (distance < minDist) {\n      minDist = distance;\n      closest = loc;\n    }\n  });\n\n  return closest;\n}\n\nfunction clearMarkers() {\n  allMarkers.forEach(marker => marker.setMap(null));\n  allMarkers = [];\n  if (markerCluster) markerCluster.clearMarkers();\n}\n\nfunction renderLocationList(inRadius = [], nearby = []) {\n  const container = document.getElementById('location-list');\n  let html = '';\n\n  if (inRadius.length) {\n    const totalPages = Math.ceil(inRadius.length \/ resultsPerPage);\n    const start = (currentPage - 1) * resultsPerPage;\n    const paginated = inRadius.slice(start, start + resultsPerPage);\n\n    html += `\n      <ul class=\"location-result-list\">\n        ${paginated.map((loc) => renderLocationCard(loc)).join('')}\n      <\/ul>\n      <div class=\"pagination\">\n        ${Array.from({ length: totalPages }, (_, i) => `\n          <button ${i + 1 === currentPage ? 'class=\"active\"' : ''} onclick=\"changePage(${i + 1})\">${i + 1}<\/button>\n        `).join('')}\n      <\/div>\n    `;\n  } else {\n    html += `<p id=\"noLocationsMsg\" class=\"noLocationsMsg\">No locations in this area. Please adjust your search filters.<\/p>`;\n  }\n\n  if (!inRadius.length && nearby.length) {\n    html += `\n      <h4 style=\"margin-top:2rem;\">Locations nearby:<\/h4>\n      <ul class=\"location-result-list\">\n        ${nearby.map((loc) => renderLocationCard(loc)).join('')}\n      <\/ul>\n    `;\n  }\n\n  container.innerHTML = html;\n\n  \/\/ \ud83d\udd01 NEW: Hover binding using data-location-id\ndocument.querySelectorAll('[data-location-id]').forEach((item) => {\n  item.addEventListener('mouseenter', () => {\n    const locationId = item.getAttribute('data-location-id');\n    const loc = locations.find(l => String(l.id) === locationId);\n    const marker = markerById[locationId]; \/\/ \u2705 direct lookup\n\n    if (marker && loc) {\n      setActiveMarker(marker, loc);\n    }\n  });\n});\n\n}\n\n\n\n\nfunction renderLocationCard(loc) {\n  const fallbackImage = '\/wp-content\/themes\/hello-theme-child-master\/images\/Location-Default.png';\n\n  const imageHtml = loc.thumb && loc.thumb.includes('<img')\n    ? loc.thumb\n    : `<img decoding=\"async\" src=\"${loc.thumb || fallbackImage}\" alt=\"${loc.name}\" style=\"width: 100%; height: auto; object-fit: cover; border-radius: 8px;\">`;\n\n  return `\n    <li data-location-id=\"${loc.id}\">\n\n  <div class=\"location-img\"><a href=\"${getPermalink(loc) || '#'}\" aria-label=\"Visit the Curis Functional Health page for ${loc.name}\">\n    ${imageHtml}<\/a>\n\n  <\/div>\n\n\n      <div class=\"location-card\" style=\"${loc.isOutsideRadius ? 'opacity: 0.5;' : ''}\">\n        <div class=\"location-header location-2-col\">\n          <h3 class=\"listing\"><a href=\"${getPermalink(loc) || '#'}\">${loc.name}<span style=\"color: var(--e-global-color-primary); opacity: 0.25;\">, ${loc.state_abbr}<\/span><\/a><\/h3>\n          ${loc.distance ? `<div class=\"location-distance\">${loc.distance.toFixed(1)} Miles<\/div>` : ''}\n        <\/div>\n        <ul class=\"services-offered\">\n          ${(loc.services || [])\n            .filter(s => !s.parent || s.parent === 0)\n            .map(s => `<li><a href=\"\/${s.slug}\">${s.title}<\/a><\/li>`).join('')}\n        <\/ul>\n        <div class=\"location-2-col\">\n          <div class=\"location-address\">\n            <p>\n              ${loc.address || ''}\n              ${loc.address2 ? `#${loc.address2}` : ''}<br>\n              ${loc.city || ''}, ${loc.state_abbr || ''} ${loc.zip || ''}\n            <\/p>\n          <\/div>\n          <div class=\"location-contact\">\n            <ul class=\"contact-list\">\n              ${loc.phone ? `<li class=\"contact-item\"><a href=\"tel:${loc.phone}\" class=\"contact-link\">${loc.phone}<\/a><\/li>` : ''}\n              ${loc.email ? `<li class=\"contact-item\"><a href=\"mailto:${loc.email}\" class=\"contact-link\">${loc.email}<\/a><\/li>` : ''}\n            <\/ul>\n          <\/div>\n      <\/div> \n      <\/div>  <div class=\"btnWrapper2\">\n      <a href=\"tel:${loc.phone || ''}\" class=\"solidPrimaryBtn\" aria-label=\"Call Curis Functional Health in ${loc.name}\">Call<\/a>\n\n      <a href=\"${getPermalink(loc) || '#'}#book\" class=\"solidWhiteBtn\" aria-label=\"Request booking at Curis Functional Health - ${loc.name}\">Book<\/a>\n\n      <a href=\"${getPermalink(loc) || '#'}\" class=\"outlinedPrimaryBtn\" aria-label=\"Learn more about ${loc.name}\">Learn<\/a>\n    <\/div>\n  <\/div>\n    <\/li>\n  `;\n}\n\n\n\n\n\nfunction changePage(page) {\n  currentPage = page;\n  renderLocationList(getLocationsInBounds());\n}\n\nfetch('https:\/\/ipapi.co\/json\/')\n  .then(response => response.json())\n  .then(data => {\n    if (data && data.latitude && data.longitude) {\n      window.ipLocation = {\n        lat: parseFloat(data.latitude),\n        lng: parseFloat(data.longitude)\n      };\n    }\n  })\n  .catch(err => console.warn('[GeoIP] Failed to load IP location:', err));\n\n\nfunction waitForEverythingReady() {\n  let tries = 0;\n  const interval = setInterval(() => {\n    tries++;\n\n    const mapsReady = typeof google !== 'undefined' && google.maps;\n    const dataReady = window.myStoreData && Array.isArray(window.myStoreData);\n    const ipReady = window.ipLocation && window.ipLocation.lat && window.ipLocation.lng;\n\n    if (mapsReady && dataReady && ipReady) {\n      clearInterval(interval);\n      console.log('[Map] All resources ready: Google Maps, Store Data, and IP Location');\n      initCustomMap();\ndocument.getElementById('custom-map')?.classList.add('map-loaded');\ndocument.getElementById('results-and-info')?.classList.add('map-loaded');\n    } else if (tries > 30) {\n      clearInterval(interval);\n      console.warn('[Map] Timeout waiting for all resources. Proceeding anyway.');\n      initCustomMap(); \/\/ fallback without guaranteed IP\n    }\n  }, 200);\n}\nwaitForEverythingReady();\n\n\n\/\/ Avoid double-binding if this script can load more than once\n(function bindSearchHandlersOnce() {\n  const input = document.getElementById('location-search');\n  const btn = document.getElementById('location-search-btn');\n  if (!input || !btn) return;\n\n  if (!input.dataset.boundEnter) {\n    input.addEventListener('keypress', function(e) {\n      if (e.key === 'Enter') {\n        e.preventDefault();\n        performSearch();\n      }\n    });\n    input.dataset.boundEnter = \"1\";\n  }\n\n  if (!btn.dataset.boundClick) {\n    btn.addEventListener('click', performSearch);\n    btn.dataset.boundClick = \"1\";\n  }\n})();\n\n<\/script> \n\n<style>\n.infoWindowRightCol{flex: 1; max-width: 50%; font-size: .875rem; line-height: 1.25; padding-left: .5rem;}\n\n.infoWindowRightCol li{display: flex; align-items: start; margin-bottom: 0.5rem;}\n.bullet{display:inline-block; flex: 0 0 auto; width: 12px; height: 12px; background-color: var(--e-global-color-accent); border-radius: 50%; margin-right: 20px; margin-top: 3px}\n\n.btnWrapper,.btnWrapper2{display: flex; justify-content: space-between; gap: 2rem; background-color: #A6B8C933; padding: 2rem; border-radius: 0 0 15px 15px;}\n\n.btnWrapper a, .btnWrapper2 a{text-align: center; padding: .5rem; border-radius: 40px; font-weight: 600; text-decoration: none; flex: 1;font-size:1.25rem;box-shadow:0 7px 8px #2134522b; }\n\n .btnWrapper2 a{ padding:0.25rem  .5rem; line-height:1; }\n\n\n.btnWrapper2 a:hover, .btnWrapper a:hover{text-decoration:none;}\n\na.solidPrimaryBtn{background: #204B80; color: white; }\n\n.btnWrapper2{display:none;}\n\na.solidWhiteBtn{background: white; color: var(--e-global-color-primary); }\na.solidPrimaryBtn:hover,\na.solidWhiteBtn:hover, a.outlinedPrimaryBtn:hover{background:  var(--e-global-color-accent); color: white;}\n\na.outlinedPrimaryBtn{background: transparent; color: var(--e-global-color-primary);border:var(--e-global-color-primary) solid 1.5px; }\n\n.noLocationsMsg {\n    font-size: 1rem;\n    padding: 1rem;\n    text-align: center;\n    color: #555;\n    background: #f5f5f5;\n    border-radius: 10px;\n    margin: 2rem auto;\n    max-width: 500px;\n    opacity: 1;\n}\n.contact-list {\n    list-style: none;\n    padding: 0;\n    margin: 0rem 0 0 0;\n}\n.contact-item {\n    position: relative;\n    padding-left: 1rem;\n    margin-bottom: 0.5rem;\n    line-height: 1\n}\n.contact-list a.contact-link, .infoWindowRightCol a {\n    color: inherit;\n    text-decoration: none;\n    font-size: .875rem;\n    font-weight: 400;\n    margin-bottom: 0;\n}\n.cluster-pulse {\n    animation: pulse 1s ease-out;\n}\n@keyframes pulse {\n    0% {\n        transform: scale(1);\n        opacity: 1;\n    }\n    50% {\n        transform: scale(1.3);\n        opacity: 0.6;\n    }\n    100% {\n        transform: scale(1);\n        opacity: 1;\n    }\n}\n\n\n#custom-map, #results-and-info {\n    opacity: 0;\n\/*    transform: translateY(2rem);\n    transition: opacity .75s ease, transform .75s ease; *\/\n}\n#custom-map.map-loaded, #results-and-info.map-loaded {\n    opacity: 1;\n\/*    transform: translateY(0); *\/\n}\n\n\n\/* Wrapper of the InfoWindow *\/\n.gm-style-iw-c {\n    background: white !important;\n    color: #333;\n    font-family: 'Inter', sans-serif;\n    font-size: 1rem;\n    font-weight: 500 !important;\n    padding: 0.75rem 1rem !important;\n    border-radius: 8px;\n    max-width: none !important;\n    max-height: none !important;\n    overflow: visible !important;\n    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n}\n\/* Inner content *\/\n.gm-style-iw-d {\n    overflow: visible !important;\n    max-height: none !important;\n}\n\/* Remove the default close button *\/\n.gm-style-iw-chr, .gm-style-iw-tc {\n    display: none !important;\n}\n\/* Optional: remove extra wrapper spacing *\/\n.gm-style-iw-a {\n    padding: 0.5rem !important;\n}\n#custom-map {\n    border-radius: 20px;\nwidth: 100%; height: 500px;}\n\n#custom-map .gm-style .gmnoprint > div {\n    display: flex;\n    border-radius: 12px !important;\n    overflow: hidden;\n}\n#custom-map .gm-style .gmnoprint > div > div {\n    border-radius: 0 !important;\n    margin: 0 !important;\n}\n\/* \u2705 FILTER BAR *\/\n#location-filters {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 1rem;\n    justify-content: flex-end;\n    margin-bottom: 2rem;\n}\n#location-search, #location-search-btn, #radius-filter, #service-filter {\n    width: 160px;\n    height: 50px;\n    border-radius: 25px;\n    padding: 0 1rem;\n    font-size: 16px;\n    line-height: 2rem;\n    background-color: #A6B8C933;\n    border: none;\n}\n#radius-filter {\n    width: 130px;\n}\n#location-search {\n    width: 250px;\n\n}\n#location-search-btn {\n    color: white;\n    background-color: #112C47;\n    border: solid 1px #112C47;\n    cursor: pointer;\n}\n#location-search-btn:hover {\n    background: #387BBF;\n    border-color: #387BBF;\n}\n#location-search::placeholder {\n    color: #444;\n    opacity: 0.8;\n}\n\/* \u2705 LAYOUT FOR LISTINGS + INFOBOX *\/\n.elementor-section,\n.elementor-container {\n    overflow: visible !important;\n    transform: none !important;\n}\n\n#results-and-info {\n    display: flex;\n    gap: 2rem;\n    margin-top: 2rem;\n    align-items: flex-start;  \/* make children respect natural height *\/\n    overflow: visible;        \/* ensure sticky can calculate *\/\n    overflow-x: visible !important;\n}\n#location-list {\n    flex: 1;\n    max-width: 50%;\n}\n#custom-infowindow {\n    flex: 1;\n    padding: 1rem;\n    margin-top: -100px;\n\n    position: sticky;\n    top: 2rem;              \/* sticks once you scroll past 2rem *\/\n    align-self: flex-start; \/* prevent flex from stretching it *\/\n    height: fit-content;    \/* don\u2019t stretch to full height *\/\n}\n\/* \u2705 LOCATION LISTING STYLES *\/\n.location-result-list {\n    list-style: none;\n    padding: 0;\n    width: 100%;\n    max-width: 50rem;\n    margin: 0 auto;\n}\n.location-result-list li[data-location-id] {\n    display: flex;\n    align-items: stretch;\n    gap: 1rem;\n    padding: 1rem;\n    border-bottom: 1px solid #1F4C7A;\n}\n.location-img {\n    flex: 0 0 140px;\n    display: flex;\n    align-items: start;\n    justify-content: left;\n    padding: .5rem;\n}\n.location-img img, .location-img .wpsl-store-thumb {\n    max-width: 100%;\n    height: auto;\n    object-fit: cover;\n    border-radius: 10px;\n    display: block;\n}\n.location-card {\n    flex: 1;\n    display: flex;\n    flex-direction: column;\n    justify-content: space-between;\n}\n.location-header {\n    display: flex;\n    justify-content: space-between;\n    align-items: flex-start;\n    flex-wrap: wrap;\n}\n.location-header h3.listing {\n    margin: 0 0 0rem 0;\n}\nh3.listing a {\n    font-family: \"Montserrat\", sans-serif;\n    text-decoration: none;\n    font-size: 2rem;\n    font-weight: 600 !important;\n    color: #1f4c7a;\n}\n.location-distance {\n    font-size: 1rem;\n    opacity: .5;\n    align-self: center;\n}\n.location-2-col {\n    display: flex;\n    justify-content: space-between;\n    flex-wrap: wrap;\n}\n.location-address p, .location-contact span {\n    font-size: 0.875rem;\n}\nul.services-offered {\n    display: flex;\n    flex-wrap: wrap;\n   \n    margin: 0 0 1rem 0;\n    padding: 0;\n    list-style: none;\n}\nul.services-offered li {\n    display: inline;\n    margin-left: 0 !important;\n    margin-right: 1rem\n}\nul.services-offered li a, .location-contact a {\n    font-size: 1rem;\n    text-decoration: none;\n    font-weight: 600;\n    color: #444;\n    line-height: 1;\n}\nul.services-offered li a:hover, .location-contact a:hover, .infoWindowRightCol a:hover {\n    text-decoration: underline;\n    text-decoration-color: var(--e-global-color-accent);\n    text-underline-offset: 4px;\n}\nh3.listing a:hover {\n    text-decoration: none;\n    color: var(--e-global-color-accent);\n    ;\n}\n\/* \u2705 PAGINATION *\/\n.pagination {\n    margin-top: 1rem;\n    display: flex;\n    gap: 0.5rem;\n    flex-wrap: wrap;\n}\n.pagination button {\n    padding: 0.5rem 1rem;\n    border: 1px solid #ccc;\n    background: white;\n    cursor: pointer;\n    border-radius: 5px;\n}\n.pagination button.active {\n    background: #112C47;\n    color: white;\n    border-color: #112C47;\n}\n.pagination button:disabled {\n    opacity: 0.5;\n    cursor: not-allowed;\n}\n\/* Nearby Locations *\/\n.nearby-dimmed .location-card {\n    opacity: 0.5;\n}\ninput[type=\"text\"], input[type=\"search\"], select, textarea {\n    font-size: 16px !important; \/* Ensures no zoom on focus *\/\n    line-height: 1.4;\n    -webkit-text-size-adjust: 100%;\n}\n\n\n@media (max-width:1440px) {\n    #location-search {\n       flex: 1;\n  min-width: 0; \n}\n    #custom-map {\n    border-radius: 20px;\nwidth: 100%; \nheight: 400px;}\nul.services-offered li a {\n    font-size: 0.875rem;\n}\n\n    .contact-list li{padding-left:0px !Important;}\n    \n    .location-result-list li[data-location-id]{padding:1rem 0;}\n    \n    .location-img {padding:0;}\n    \n    h3.listing a {\n    text-decoration: none;\n    font-size: 1em;\n\n}\n.location-distance {font-size:.75rem;\nopacity:1;}}\n\n@media (max-width:1024px){\n   .btnWrapper2{display:flex;}\n   \n     .location-result-list li {\n    display: flex;\n    flex-direction: column;\n  }\n\n  .location-img,\n  .location-card {\n    width: 100% !important;  display: block;\n  }\n.location-img {\n  width: 100%;\n  height: 120px;\n  overflow: hidden;\n  border-radius: 20px 20px 0 0 ;  object-fit: cover; \n}\n\n.location-img img {\n  width: 100%;\n  height: 100% !Important;\n  object-fit: cover !important;\n  object-position: center !Important;\n  display: block;\n  border-radius: 20px 20px 0 0 !important;\n}\n\n\n  .location-card {\n    padding: 2rem 2rem 0 2rem ;        background: white;  }\n    \n    ul.location-result-list > li{border-radius:20px; box-shadow:0 -5px 15px #80808028;\n\n\n  }.location-result-list li[data-location-id]{padding:0;border-bottom:none;gap:0px;margin-bottom:20px;}\n  \n  \n  .location-distance{font-size:.875rem !important; opacity: 0.6 !important;\n      margin-bottom:10px;\n  }\n  \n  ul.services-offered li a{font-weight: 700; font-size:1rem;}  ul.services-offered {gap:0.25rem 1rem}\n  \n  .location-address{margin-bottom:1rem;}\n  \n  h3.listing a{font-size:1.5rem}\n  \n   #custom-infowindow\n{display:none !Important;}\n\n    #location-filters{justify-content:flex-start;margin:0 2rem 1rem 2rem;}\n    #location-list{        \n        max-width: 80%;\n\n        margin: -100px auto 2rem auto;\n        z-index: 100;\n        border-radius:30px;\n     }\n        #custom-map{border-radius:0px;}\n}\n\n\n@media (max-width: 880px){   .btnWrapper2{gap:15px; padding: 1rem}.btnWrapper2 a{font-size:1rem;}  .location-card {padding:1.5rem;}\n  ul.services-offered{gap:0rem;}  ul.services-offered li a{font-size:.8rem;}}\n<\/style>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div data-particle_enable=\"false\" data-particle-mobile-disabled=\"false\" class=\"elementor-element elementor-element-4a4ec77 animated-slow e-flex e-con-boxed elementor-invisible e-con e-parent\" data-id=\"4a4ec77\" data-element_type=\"container\" data-settings=\"{&quot;animation&quot;:&quot;fadeInUp&quot;,&quot;animation_delay&quot;:300}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div data-particle_enable=\"false\" data-particle-mobile-disabled=\"false\" class=\"elementor-element elementor-element-fe2db3c e-con-full e-grid e-con e-child\" data-id=\"fe2db3c\" data-element_type=\"container\">\n\t\t<div data-particle_enable=\"false\" data-particle-mobile-disabled=\"false\" class=\"elementor-element elementor-element-aa395c3 e-con-full e-flex e-con e-child\" data-id=\"aa395c3\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-7210024 elementor-widget elementor-widget-heading\" data-id=\"7210024\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Find a Provider<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5bb8990 large-btn elementor-mobile-align-justify elementor-widget elementor-widget-button\" data-id=\"5bb8990\" data-element_type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"\/providers\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Search<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\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<div data-particle_enable=\"false\" data-particle-mobile-disabled=\"false\" class=\"elementor-element elementor-element-d13097d e-con-full e-flex e-con e-child\" data-id=\"d13097d\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t<div data-particle_enable=\"false\" data-particle-mobile-disabled=\"false\" class=\"elementor-element elementor-element-b42692a e-con-full e-flex e-con e-child\" data-id=\"b42692a\" data-element_type=\"container\">\n\t\t<div data-particle_enable=\"false\" data-particle-mobile-disabled=\"false\" class=\"elementor-element elementor-element-dd33a17 e-con-full e-flex e-con e-child\" data-id=\"dd33a17\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-2767de9 elementor-widget__width-initial elementor-widget elementor-widget-heading\" data-id=\"2767de9\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Find out about services<\/h2>\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 data-particle_enable=\"false\" data-particle-mobile-disabled=\"false\" class=\"elementor-element elementor-element-3349459 e-con-full e-flex e-con e-child\" data-id=\"3349459\" data-element_type=\"container\">\n\t\t<div data-particle_enable=\"false\" data-particle-mobile-disabled=\"false\" class=\"elementor-element elementor-element-3ce2a25 e-con-full e-flex e-con e-child\" data-id=\"3ce2a25\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-0786461 large-btn elementor-mobile-align-justify elementor-widget elementor-widget-button\" data-id=\"0786461\" data-element_type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"\/functional-health-services\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Learn More<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\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\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>Find a Curis clinic near you to book now. 25 miles50 miles150 milesAny Distance Services Search Find a Provider Search Find out about services Learn More<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"_searchwp_excluded":"","footnotes":""},"class_list":["post-7269","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/gocuris.com\/wp-json\/wp\/v2\/pages\/7269","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gocuris.com\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/gocuris.com\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/gocuris.com\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/gocuris.com\/wp-json\/wp\/v2\/comments?post=7269"}],"version-history":[{"count":376,"href":"https:\/\/gocuris.com\/wp-json\/wp\/v2\/pages\/7269\/revisions"}],"predecessor-version":[{"id":10416,"href":"https:\/\/gocuris.com\/wp-json\/wp\/v2\/pages\/7269\/revisions\/10416"}],"wp:attachment":[{"href":"https:\/\/gocuris.com\/wp-json\/wp\/v2\/media?parent=7269"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}