{"id":21,"date":"2025-05-26T20:05:49","date_gmt":"2025-05-26T18:05:49","guid":{"rendered":"https:\/\/slowguide.dk\/homepage\/"},"modified":"2025-12-10T13:53:17","modified_gmt":"2025-12-10T12:53:17","slug":"homepage","status":"publish","type":"page","link":"https:\/\/slowguide.dk\/de","title":{"rendered":"Slow Guide"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"21\" class=\"elementor elementor-21\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-0899b04 e-flex e-con-boxed e-con e-parent\" data-id=\"0899b04\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-17a086a e-con-full e-flex e-con e-child\" data-id=\"17a086a\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-646764d elementor-align-center elementor-widget elementor-widget-button\" data-id=\"646764d\" data-element_type=\"widget\" data-e-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=\"https:\/\/slowguide.dk\/slow-guide-kategorier\/\">\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-list-ul\" viewBox=\"0 0 512 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M48 48a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm0 160a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm0 160a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm448 16H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z\"><\/path><\/svg>\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Liste<\/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 class=\"elementor-element elementor-element-c5f67e9 elementor-widget elementor-widget-html\" data-id=\"c5f67e9\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<head>\n  <title>Oplevelser i Nordjylland | Slow Guide<\/title>\n  <meta name=\"description\" content=\"Kort over oplevelser i Nordjylland: gallerier, antik, genbrug og kunsth\u00e5ndv\u00e6rk i Vendsyssel\">\n  <script type=\"application\/ld+json\">\n  {\n    \"@context\": \"https:\/\/schema.org\",\n    \"@type\": \"WebPage\",\n    \"name\": \"Oplevelser i Nordjylland\",\n    \"description\": \"Kort over oplevelser i Nordjylland: gallerier, genbrugsbutikker, antik & kunsth\u00e5ndv\u00e6rk i Vendsyssel\",\n    \"hasMap\": \"https:\/\/slowguide.dk\/\u2026\"\n  }\n  <\/script>\n<\/head>\n\n\n\n<div id=\"search-container\" style=\"position:absolute; top:4rem; left:1rem; transform:none; z-index:2000; width:calc(100% - 2rem); max-width:400px;\">\n  <div class=\"flex items-center bg-white rounded shadow\">\n    <input id=\"search-input\" type=\"text\" class=\"flex-1 p-3 outline-none\" placeholder=\"S\u00f8g\u2026\" \/>\n    <button id=\"search-btn\" class=\"p-3\"><i class=\"fa fa-search\"><\/i><\/button>\n  <\/div>\n  <ul id=\"search-results\" class=\"bg-white rounded-b overflow-auto max-h-60 hidden\"><\/ul>\n<\/div>\n<!-- Map -->\n<div id=\"map\"><\/div>\n\n<!-- Info panel -->\n<div id=\"info-panel\"><\/div>\n\n<!-- Chat toggle bubble -->\n<div id=\"chat-toggle-btn\"><i class=\"fa fa-comments\"><\/i><\/div>\n\n<!-- Chat widget -->\n<div id=\"chat-widget\" class=\"notranslate\" translate=\"no\">\n  <div class=\"close-btn\" onclick=\"document.getElementById('chat-widget').classList.remove('open')\">\n    &times;\n  <\/div>\n\n  <div id=\"chat-log\">\n    <div class=\"msg ai\"><span>Hej! Hvad kan jeg hj\u00e6lpe dig med?<\/span><\/div>\n  <\/div>\n\n  <div id=\"chat-input-wrapper\" class=\"flex items-center border-t border-gray-200\">\n    <input\n      id=\"chat-input\"\n      class=\"flex-1 p-3 outline-none\"\n      placeholder=\"Skriv din besked\u2026\"\n      enterkeyhint=\"send\"\n      onkeydown=\"if(event.key==='Enter') sendChat()\"\n    \/>\n    <button\n      id=\"chat-send-btn\"\n      class=\"w-12 h-12 flex-shrink-0 flex items-center justify-center text-xl text-white bg-blue-600 hover:bg-blue-700\"\n      title=\"Send besked\"\n    >\n      <i class=\"fa fa-paper-plane\"><\/i>\n    <\/button>\n  <\/div>\n\n<!-- Tailwind for styling (optional) -->\n<script src=\"https:\/\/cdn.tailwindcss.com\"><\/script>\n\n<!-- FontAwesome -->\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Poppins&display=swap\" rel=\"stylesheet\">\n\n<link rel=\"stylesheet\" href=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/font-awesome\/6.5.0\/css\/all.min.css\" integrity=\"sha512-...\" crossorigin=\"anonymous\" referrerpolicy=\"no-referrer\" \/>\n\n<!-- Style-->\n<style>\n\/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 MAP \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n#map {\n  height: 90svh;\n  padding-bottom: 80px;\n  box-sizing: border-box;\n  width: 100%;\n}\n\n\n\n\n\/* Mobile override for map height *\/\n@media (max-width: 1024px) {\n  #map {\n    height: 100svh;\n  }\n}\n\n\n\/* Mobile override for map height *\/\n@media (max-width: 768px) {\n  #map {\n    height: 100svh;\n  }\n}\n\n\/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 INFO PANEL \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n\n\/* MOBILE (bottom pop-up) *\/\n#info-panel {\n  position: fixed;\n  bottom: 250%;\n  left: 50%;\n  transform: translateX(-50%);\n  width: 90%;\n  max-width: 400px;\n  height: 200px;\n  background: white;\n  padding: 1rem;\n  border-radius: 20px 20px 0 0;\n  box-shadow: 0 -4px 16px rgba(0, 0, 0, 0.25);\n  overflow-y: auto;\n  transition: bottom 0.3s ease;\n  z-index: 2000;\n}\n\n#info-panel.open {\n  bottom: 200px;\n  padding-bottom: 220px;\n}\n\n\/* DESKTOP (side panel) *\/\n@media (min-width: 780px) {\n  #info-panel {\n    top: 40%;\n    bottom: 80px;\n    left: -400px;\n    transform: none;\n    width: 360px;\n    height: 600px;\n    max-height: calc(100vh - 160px);\n    \n    border-radius: 0px 20px 20px 0px;  \/* \u2190 fixes your screenshot issue *\/\n    box-shadow: 4px 0 16px rgba(0, 0, 0, 0.25);\n    overflow-y: auto;\n    transition: left 0.3s ease;\n    scrollbar-gutter: stable;\n  }\n\n  #info-panel.open {\n    left: 0;\n  }\n\n  #info-panel::-webkit-scrollbar {\n    width: 8px;\n  }\n\n  #info-panel::-webkit-scrollbar-thumb {\n    background: rgba(0, 0, 0, 0.3);\n    border-radius: 4px;\n  }\n}\n\n\n\/* add at the bottom of your <style> block *\/\n\n#info-panel img {\n  width: 100%;\n  height: 180px;        \/* fixed height *\/\n  object-fit: cover;    \/* crop to fill *\/\n  border-top-left-radius: 20px;\n  border-top-right-radius: 20px;\n}\n\n#info-panel .category-badge {\n  position: absolute;\n  top: 1rem;\n  right: 1rem;\n  display: flex;\n  align-items: center;\n  background: rgba(255,255,255,0.9);\n  padding: 0.25rem 0.5rem;\n  border-radius: 1rem;\n  font-size: 0.875rem;\n}\n\n#info-panel .category-badge img {\n  width: 1rem;\n  height: 1rem;\n  margin-left: 0.3rem;\n}\n\n\n\n\n\/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 CHAT TOGGLE BUBBLE \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n#chat-toggle-btn {\n  position: fixed;\n  bottom: 12rem;\n  right: 1rem;\n  width: 56px;\n  height: 56px;\n  background: #007bff;\n  color: white;\n  border-radius: 50%;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  font-size: 24px;\n  z-index: 2000;\n  cursor: pointer;\n  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.25);\n}\n\n\/* CHAT WIDGET *\/\n#chat-widget {\n  position: fixed;\n  bottom: 16rem;\n  right: 1rem;\n  width: 320px;\n  max-width: 90%;\n  background: #fff;\n  border-radius: 12px;\n  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);\n  display: none;\n  flex-direction: column;\n  z-index: 2000;\n  font-family: sans-serif;\n}\n\n#chat-widget.open {\n  display: flex;\n}\n\n#chat-widget .close-btn {\n  position: absolute;\n  top: 0.5rem;\n  right: 0.75rem;\n  font-size: 1.5rem;\n  color: #333;\n  cursor: pointer;\n  z-index: 2000;\n}\n\n#chat-log {\n  flex: 1;\n  max-height: 200px;\n  overflow-y: auto;\n  padding: 0.75rem;\n  background: #f0f4f8;\n  border-bottom: 1px solid #e2e8f0;\n}\n\n#chat-input {\n  border: none;\n  border-top: 1px solid #e2e8f0;\n  padding: 0.75rem 1rem;\n  font-size: 1rem;\n  outline: none;\n  width: 100%;\n}\n\n\/* CHAT MESSAGE BUBBLES *\/\n.msg {\n  margin: 0.5rem 0;\n  max-width: 80%;\n}\n.msg.user {\n  margin-left: auto;\n  text-align: right;\n}\n.msg.ai {\n  margin-right: auto;\n  text-align: left;\n}\n.msg span {\n  display: inline-block;\n  padding: 0.5rem 0.75rem;\n  border-radius: 1rem;\n}\n.msg.user span {\n  background: #007bff;\n  color: white;\n  border-bottom-right-radius: 0;\n}\n.msg.ai span {\n  background: #e2e8f0;\n  color: #111;\n  border-bottom-left-radius: 0;\n}\n\n\/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 MOBILE CHAT POSITION \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n@media (max-width: 767px) {\n  #chat-toggle-btn {\n    position: absolute;\n    top: 10rem;\n    right: 0.5rem;\n    bottom: auto;\n    left: auto;\n    transform: none;\n    z-index: 3000;\n  }\n\n  #chat-widget {\n    top: 200px;\n    bottom: auto;\n    right: 0.5rem;\n    left: auto;\n    width: 90vw;\n    max-width: 340px;\n     z-index: 4000;\n  }\n}\n\n\/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 MAP MARKER LABEL (OPTIONAL) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n.marker-label {\n  background: rgba(0, 0, 0, 0.7);\n  padding: 2px 6px;\n  border-radius: 4px;\n  transform: translateY(-10px);\n  white-space: nowrap;\n}\n\n\/* \u2500\u2500\u2500 MOBIL: st\u00f8rre \u00e5bent POI-panel + swipe-hint \u2500\u2500\u2500\u2500\u2500 *\/\n@media (max-width: 767px) {\n  \/* Tillad auto-h\u00f8jde op til 50vh, s\u00e5 titel og tekst ogs\u00e5 vises *\/\n  #info-panel {\n    height: auto;\n    max-height: 50vh;\n  }\n  #info-panel.open {\n    bottom: 0;\n    height: auto;\n    max-height: 50vh;\n  }\n\n\n \/* only show when panel has overflow *\/\n#info-panel.has-overflow::after {\n  content: '\u2b06\ufe0f Swipe for mere';\n  position: absolute;\n  bottom: 8px;\n  left: 50%;\n  transform: translateX(-50%);\n  background: rgba(255,255,255,0.9);\n  padding: 4px 8px;\n  border-radius: 12px;\n  font-size: 0.75rem;\n  pointer-events: none;\n}\n\n  \/* G\u00f8r X-knappen lettere at ramme *\/\n  #info-panel .close-btn {\n    width: 32px;\n    height: 32px;\n    padding: 8px;\n    font-size: 1.75rem;\n  }\n    \/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 POI LABEL STYLING \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n  .poi-label {\n    transform: translateY(-25px);\n    white-space: nowrap;\n    text-shadow: 0 0 2px rgba(0,0,0,0.6);\n  }\n}\n\n#chat-input-wrapper {\n  background: #fff;\n}\n\n#chat-input-wrapper input {\n  \/* fjern browser-specifik margin\/padding p\u00e5 mobil *\/\n  margin: 0;\n}\n\n#chat-send-btn {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n<\/style>\n\n\n<style>\n\/* Scoped search bar styling *\/\n#search-container {\n  position: absolute !important;\n  top: 12rem !important;\n  left: 1rem !important;\n  width: calc(100% - 2rem) !important;\n  max-width: 400px !important;\n  transform: none !important;\n  z-index: 2000 !important;\n}\n\n\n\/* Mobile override for map height *\/\n@media (max-width: 768px) {\n #search-container {\n  top: 2rem !important;\n\n}\n}\n\n#search-container .flex.items-center {\n  background: white !important;\n  border: none !important;\n  box-shadow: 0 2px 8px rgba(0,0,0,0.1) !important;\n}\n#search-container #search-input {\n  flex: 1 !important;\n  padding: 0.75rem !important;\n  outline: none !important;\n  border: none !important;\n  box-sizing: border-box !important;\n}\n#search-container #search-btn {\n  padding: 0.75rem !important;\n  border: none !important;\n  background: none !important;\n  cursor: pointer !important;\n}\n#search-container #search-results {\n  background: white !important;\n  border: 1px solid #ddd !important;\n  border-top: none !important;\n  max-height: 60vh !important;\n  overflow: auto !important;\n  margin: 0 !important;\n  padding: 0 !important;\n  list-style: none !important;\n}\n#search-container #search-results.hidden {\n  display: none !important;\n}\n#search-container #search-results li {\n  padding: 0.5rem 1rem !important;\n  cursor: pointer !important;\n}\n#search-container #search-results li:hover {\n  background: #f0f0f0 !important;\n}\n<\/style>\n\n<style>\n@media (max-width: 768px) {\n  #search-container {\n    top: 2rem;\n    left: 1rem;\n    right: auto;\n    width: calc(100% - 2rem);\n    max-width: none;\n    transform: none;\n  }\n}\n<\/style>\n\n\n\n<style>\n\/* Carousel slides *\/\n.info-carousel, .review-carousel {\n  position: relative;\n  overflow: hidden;\n  border-radius: 12px;\n  margin-bottom: 1rem;\n}\n.carousel-slide {\n  display: none;\n  width: 100%;\n}\n.carousel-slide.active {\n  display: block;\n}\n.carousel-nav {\n  position: absolute;\n  top: 50%;\n  transform: translateY(-50%);\n  font-size: 1.5rem;\n  background: rgba(255,255,255,0.8);\n  border-radius: 50%;\n  width: 32px;\n  height: 32px;\n  text-align: center;\n  line-height: 32px;\n  cursor: pointer;\n}\n.carousel-nav.prev { left: 8px; }\n.carousel-nav.next { right: 8px; }\n\n\/* Hide arrows on the review carousel *\/\n.review-carousel .carousel-nav {\n  display: none;\n}\n\n\/* Icon buttons *\/\n.btn-route, .btn-website {\n  width: 40px; height: 40px; border-radius: 50%;\n  display: inline-flex; justify-content: center; align-items: center;\n  margin-right: 0.5rem; cursor: pointer; border: none;\n}\n.btn-route { background: #cceeff; color: #0077cc; }\n.btn-website { background: #ffddee; color: #cc0066; }\n\n\/* Opening hours list spacing *\/\n.opening-hours li {\n  font-size: 0.875rem;\n  line-height: 1.4;\n  color: #333;\n  margin-bottom: 0.25rem;\n}\n\n\/* More breathing room under section headings *\/\n.p-4 h2 {\n  margin-bottom: 1rem;\n}\n\/* Rating buttons *\/\n.rating { margin-top: 0.5rem; display: flex; gap: 0.5rem; }\n.rate-btn { background: transparent; border: none; font-size: 1.2rem; cursor: pointer; }\n<\/style>\n\n\n\n<script>\n    const categories = [\n  \n  \n  \/* Gallerier *\/\n  \n  {\n    id: \"galleri\",\n    label: \"Gallerier\",\n    items: [\n          {\n  name: \"Dot Keramik\",\n  categoryId: \"galleri\",\n  lat: 57.4941089,\n  lng: 10.4594661,\n  addr: \"Skagensvej 270, 9970 Strandby\",\n  photo: \"https:\/\/slowguide.dk\/wp-content\/uploads\/2025\/06\/Dot-Keramik-Frederikshavn-3.jpg\",\n  desc: \"Unikke keramiske v\u00e6rker og kunsth\u00e5ndv\u00e6rk \u2013 skabt med omhu i natursk\u00f8nne Strandby.\"\n},\n\n  \/* Insert new galleri here *\/\n{\n  name: \"ARTdeMAR\",\n  categoryId: \"galleri\",\n  lat: 57.59367251697265, \n  lng: 10.411636946240455,\n  addr: \"Centralvej 4, 9982 Aalb\u00e6k\"\n},\n\n  \n {\n  name: \"Galleri Lars Falk\",\n  categoryId: \"galleri\",\n  lat: 57.44211987991964, \n  lng: 10.537210855214028,\n  addr: \"Danmarksgade 38, 9900 Frederikshavn\"\n},\n \n{\n  name: \"Galleri Bo\",\n  categoryId: \"galleri\",\n  lat: 57.72139655307935,\n  lng: 10.589188200895048,\n  addr: \"Havnevej 10, 9990 Skagen\",\n  photo: \"https:\/\/slowguide.dk\/wp-content\/uploads\/2025\/06\/Galleri-BO-Skagen-1.jpg\",\n  desc: \"Galleri med moderne kunst og malerier inspireret af Skagens lys og landskab.\"\n},\n{\n  name: \"Rav-v\u00e6rkstedet\",\n  categoryId: \"galleri\",\n  lat: 57.5411431,\n  lng: 10.0857488,\n  addr: \"H\u00f8jtvedvej 7, Mygdal, 9800 Hj\u00f8rring\",\n  photo: \"https:\/\/slowguide.dk\/wp-content\/uploads\/2025\/06\/Rav-vaerkstedet-3.jpg\",\n  desc: \"Autentisk ravv\u00e6rksted i Mygdal \u2013 smykker og skulpturer skabt af \u00e6gte dansk rav.\"\n},\n{\n  name: \"&Os\",\n  categoryId: \"galleri\",\n  lat: 57.46043784519593,\n  lng: 9.986736540264282,\n  addr: \"Str\u00f8mgade 2A, 9800 Hj\u00f8rring\",\n},\n{\n  name: \"Art by Line Elliott\",\n  categoryId: \"galleri\",\n  lat: 57.46492290814697,\n  lng: 9.979398897935045,\n  addr: \"Aldersh\u00f8jvej 5, 9800 Hj\u00f8rring\",\n},\n{\n  name: \"Art Caf\u00e9 - Tolne Gj\u00e6stgivergaard\",\n  categoryId: \"galleri\",\n  lat: 57.485764044637364,\n  lng: 10.31440445560667,\n  addr: \"Kirkevej 300, 9870 Sindal\",\n},\n{\n  name: \"Art VisTen's Galleri-have og kunsth\u00e5ndv\u00e6rk\",\n  categoryId: \"galleri\",\n  lat: 57.4575512852623,\n  lng: 9.92901609608775,\n  addr: \"L\u00f8kkensvej 335, 9800 Hj\u00f8rring\",\n},\n{\n  name: \"Artbreak Hotel\",\n  categoryId: \"galleri\",\n  lat: 57.04516964379072,\n  lng: 9.922493524901908,\n  addr: \"Danmarksgade 62, 9000 Aalborg\",\n},\n{\n  name: \"Art-Lui\",\n  categoryId: \"galleri\",\n  lat: 57.16724646609905,\n  lng: 9.41971624024925,\n  addr: \"Strandvejen 143A, 1., Tranum, 9460 Brovst\",\n},\n{\n  name: \"Atelier Annipe\",\n  categoryId: \"galleri\",\n  lat: 57.08604308963863,\n  lng: 9.259784926750894,\n  addr: \"Godth\u00e5bsvej 37, 9690 Fjerritslev\",\n},\n{\n  name: \"Atelier Jane Aagot\",\n  categoryId: \"galleri\",\n  lat: 57.25916033594808,\n  lng: 9.6470016690892,\n  addr: \"F\u00e5rupvej 190, 9493 Saltum\",\n},\n{\n  name: \"Atelier Olsson\",\n  categoryId: \"galleri\",\n  lat: 57.047535178469154,\n  lng: 9.916371282572614,\n  addr: \"Jernbanegade 10, 1 sal, 9000 Aalborg\",\n},\n{\n  name: \"Betina Jung Art Studio\",\n  categoryId: \"galleri\",\n  lat: 57.04792857673872,\n  lng: 9.937363540243167,\n  addr: \"\u00d8stre Havnegade 26, 9000 Aalborg\",\n},\n{\n  name: \"Boutique Cornelius\",\n  categoryId: \"galleri\",\n  lat: 57.30768560292903,\n  lng: 11.146539640256481,\n  addr: \"Gammel \u00d8sterbyvej 33, 9940 L\u00e6s\u00f8\",\n},\n{\n  name: \"Bruunsatelier\",\n  categoryId: \"galleri\",\n  lat: 56.99421300305456,\n  lng: 10.307076042087258,\n  addr: \"Torvet 9, 9370 Hals\",\n},\n{\n  name: \"by Ravbjerg v\/Annemette Madsen\",\n  categoryId: \"galleri\",\n  lat: 57.33463584126791,\n  lng: 10.516140355598948,\n  addr: \"Vestergade 9, 9300 S\u00e6by\",\n},\n{\n  name: \"Colours of Kattegat\",\n  categoryId: \"galleri\",\n  lat: 57.02029127687936,\n  lng: 10.23092321140646,\n  addr: \"M\u00f8lholtvej 4, 9370 Hals\",\n},\n{\n  name: \"Det grafiske v\u00e6rksted - Hj\u00f8rring\",\n  categoryId: \"galleri\",\n  lat: 57.46332997460933,\n  lng: 9.982420496088109,\n  addr: \"N\u00f8rregade 35A, 9800 Hj\u00f8rring\",\n},\n{\n  name: \"Det Gr\u00e5 Fyr\",\n  categoryId: \"galleri\",\n  lat: 57.735739821259365,\n  lng: 10.630478855619545,\n  addr: \"Fyrvej 36, 9990 Skagen\",\n},\n{\n  name: \"Det lille galleri v\/ Anna Maria Kornum\",\n  categoryId: \"galleri\",\n  lat: 57.137462471382094,\n  lng: 9.3475403954646,\n  addr: \"Hjortdalvej 121, Hjortdal, 9690 Fjerritslev\",\n},\n{\n  name: \"Dethsg\u00e5rd \/ L\u00e6s\u00f8 Artes\",\n  categoryId: \"galleri\",\n  lat: 57.26906409017795,\n  lng: 11.069183384430792,\n  addr: \"Stoklundvejen 28, Byrum, 9940 L\u00e6s\u00f8\",\n},\n{\n  name: \"DETTE FORM Studio\",\n  categoryId: \"galleri\",\n  lat: 57.31995067125134,\n  lng: 11.126146053751262,\n  addr: \"\u00d8sterby Havnegade 2B, 9940 L\u00e6s\u00f8\",\n},\n{\n  name: \"Dronninglund Kunstcenter\",\n  categoryId: \"galleri\",\n  lat: 57.16765090369774,\n  lng: 10.257900664976082,\n  addr: \"Thorup Hedevej 1, 9330 Dronninglund\",\n},\n{\n  name: \"Ena Strand\",\n  categoryId: \"galleri\",\n  lat: 57.72523922122524,\n  lng: 10.596702455212393,\n  addr: \"Sankt Laurentii Vej 4b, 9990 Skagen\",\n},\n{\n  name: \"Galerie Provence\",\n  categoryId: \"galleri\",\n  lat: 57.112933136951405,\n  lng: 9.853715742093364,\n  addr: \"Charles Lindberghs Vej 5, 9430 Vadum\",\n},\n\n{\n  name: \"Galleri A\",\n  categoryId: \"galleri\",\n  lat: 57.47270566546677,\n  lng: 9.79784024296614,\n  addr: \"Strandvejen 94, L\u00f8nstrup, 9800 Hj\u00f8rring\",\n},\n{\n  name: \"Galleri Anne Julie\",\n  categoryId: \"galleri\",\n  lat: 57.259906921951064,\n  lng: 10.895726549977233,\n  addr: \"Sdr. Kirkevej 8, 9940 L\u00e6s\u00f8\",\n},\n{\n  name: \"Galleri B \/ Lenettes Galleri\",\n  categoryId: \"galleri\",\n  lat: 57.01112197025057,\n  lng: 8.585626674823338,\n  addr: \"Lien 12, Vester Vandet, 7700 Thisted\",\n},\n{\n  name: \"Galleri Bl\u00e6st - For the Joy of Art\",\n  categoryId: \"galleri\",\n  lat: 57.02917531798466,\n  lng: 9.67591952531084,\n  addr: \"Klithusevej 25, 9240 Nibe\",\n},\n\n{\n  name: \"Galleri Baand\",\n  categoryId: \"galleri\",\n  lat: 57.15958748507958,\n  lng: 10.292622847325399,\n  addr: \"Slotsgade 53, 9330 Dronninglund\",\n},\n{\n  name: \"Galleri Dorte Friis\",\n  categoryId: \"galleri\",\n  lat: 57.47097425279127,\n  lng: 9.796654935340781,\n  addr: \"Strandvejen 71, L\u00f8nstrup, 9800 Hj\u00f8rring\",\n},\n{\n  name: \"Galleri Engen 5\",\n  categoryId: \"galleri\",\n  lat: 56.7609504272137,\n  lng: 8.324320417212,\n  addr: \"Engen 5, 7770 Vestervig\",\n},\n{\n  name: \"Galleri Flyvsand\",\n  categoryId: \"galleri\",\n  lat: 57.463099619143335,\n  lng: 9.79715908170154,\n  addr: \"Rubjergvej 51, L\u00f8nstrup, 9800 Hj\u00f8rring\",\n},\n{\n  name: \"Galleri Friis V\/Nina Charlotte F Christiansen\",\n  categoryId: \"galleri\",\n  lat: 57.370826824869,\n  lng: 9.709786419299997,\n  addr: \"Sdr. Strandvej 3, 9480 L\u00f8kken\",\n},\n{\n  name: \"Galleri Glocal Art\",\n  categoryId: \"galleri\",\n  lat: 57.17961481024797,\n  lng: 10.335239637600237,\n  addr: \"Dorfvej 28, 9330 Dronninglund\",\n},\n{\n  name: \"Galleri Gloria\",\n  categoryId: \"galleri\",\n  lat: 57.443062366413066,\n  lng: 9.99926270653056,\n  addr: \"Poppelvej 4, 9800 Hj\u00f8rring\",\n},\n{\n  name: \"Galleri Grenen\",\n  categoryId: \"galleri\",\n  lat: 57.73975142373286,\n  lng: 10.633979602554176,\n  addr: \"Fyrvej 40 - 9990 Skagen\",\n},\n{\n  name: \"Galleri Hou\",\n  categoryId: \"galleri\",\n  lat: 57.05950333070075,\n  lng: 10.37242025892765,\n  addr: \"N\u00f8rregade 19, Hou, 9370 Hals\",\n},\n{\n  name: \"Galleri Jensby\",\n  categoryId: \"galleri\",\n  lat: 57.730923710791025,\n  lng: 10.546719430062094,\n  addr: \"Skagbanke 30, 9990 Skagen\",\n},\n{\n  name: \"Galleri K Larsen\",\n  categoryId: \"galleri\",\n  lat: 57.46660966012946,\n  lng: 9.797555115851956,\n  addr: \"Rubjergvej 21, 9800 L\u00f8nstrup\",\n},\n{\n  name: \"Galleri Karin \u00d8\",\n  categoryId: \"galleri\",\n  lat: 56.90046664506975,\n  lng: 8.6282880315244,\n  addr: \"\u00c5svej 43, 7700 Thisted\",\n},\n{\n  name: \"Galleri Kronens Hede\",\n  categoryId: \"galleri\",\n  lat: 56.99545022519175,\n  lng: 8.534235334028075,\n  addr: \"Kronens Hede Vej 12, 7700 Thisted\",\n},\n{\n  name: \"Galleri Kunstlade Gj\u00f8l\",\n  categoryId: \"galleri\",\n  lat: 57.067666331118254,\n  lng: 9.71417324032674,\n  addr: \"Limfjordsgade 69, Gj\u00f8l, 9440 Aabybro\",\n},\n{\n  name: \"Galleri Lien\",\n  categoryId: \"galleri\",\n  lat: 57.14279710458231,\n  lng: 9.362724119066705,\n  addr: \"Slettestrandvej 82, Slettestrand, 9690 Fjerritslev\",\n},\n{\n  name: \"Galleri L\u00f8kken\",\n  categoryId: \"galleri\",\n  lat: 57.37059489579692,\n  lng: 9.711940586654704,\n  addr: \"Vrenstedvej 4, 9480 L\u00f8kken\",\n},\n{\n  name: \"Galleri L\u00f8nstrup\",\n  categoryId: \"galleri\",\n  lat: 57.470472073810164,\n  lng: 9.796885420284918,\n  addr: \"Strandvejen 64, L\u00f8nstrup, 9800 Hj\u00f8rring\",\n},\n{\n  name: \"Galleri Marlene\",\n  categoryId: \"galleri\",\n  lat: 57.28728292572022,\n  lng: 10.09486802078184,\n  addr: \"Ly\u00f8gade 8, 9740 Jerslev J\",\n},\n{\n  name: \"Galleri Matique\",\n  categoryId: \"galleri\",\n  lat: 57.45985288300288,\n  lng: 9.983932581581962,\n  addr: \"Dronningensgade 2, 9800 Hj\u00f8rring\",\n},\n{\n  name: \"Galleri Mlh\",\n  categoryId: \"galleri\",\n  lat: 57.364649458851346,\n  lng: 9.838325077860176,\n  addr: \"Vr\u00e5vej 510, B\u00f8rglum, 9760 Vr\u00e5\",\n},\n{\n  name: \"Galleri Molevit\",\n  categoryId: \"galleri\",\n  lat: 57.72236326197504,\n  lng: 10.592103338502218,\n  addr: \"Jens Klarupsvej 1, 9990 Skagen\",\n},\n{\n  name: \"Galleri Munk\",\n  categoryId: \"galleri\",\n  lat: 57.71527281896815,\n  lng: 10.58146697567879,\n  addr: \"Vestkajen 6, 9990 Skagen\",\n},\n{\n  name: \"Galleri Munkholm\",\n  categoryId: \"galleri\",\n  lat: 57.22222529119868,\n  lng: 9.675400302663014,\n  addr: \"Korsgade 4, 9490 Pandrup\",\n},\n{\n  name: \"Galleri Pallisgaard\",\n  categoryId: \"galleri\",\n  lat: 57.051520153456266,\n  lng: 10.178126704009417,\n  addr: \"Gl. Kongevej 32, 9362 Gandrup\",\n},\n{\n  name: \"Galleri PondCottage Art\",\n  categoryId: \"galleri\",\n  lat: 57.34991532583588,\n  lng: 9.780947166385527,\n  addr: \"Munkebrovej 48, Vrensted, 9480 L\u00f8kken\",\n},\n{\n  name: \"Galleri Quistgaard\",\n  categoryId: \"galleri\",\n  lat: 57.46660549911582,\n  lng: 9.79755402716655,\n  addr: \"Rubjergvej 21, L\u00f8nstrup, 9800 Hj\u00f8rring\",\n},\n{\n  name: \"Galleri R\u00f8dhusgaarden\",\n  categoryId: \"galleri\",\n  lat: 57.21821163728851,\n  lng: 9.572244125721252,\n  addr: \"Kystvejen 91, R\u00f8dhus, 9490 Pandrup\",\n},\n{\n  name: \"Galleri Salshus\",\n  categoryId: \"galleri\",\n  lat: 57.03890522778157,\n  lng: 8.65688201919942,\n  addr: \"D\u00f8jholtvej 15, 7700 Thisted\",\n},\n{\n  name: \"Galleri Sandl\u00f8beren\",\n  categoryId: \"galleri\",\n  lat: 57.252083697328445,\n  lng: 9.584689285058385,\n  addr: \"Torvet 3, 9492 Blokhus + Kalstrup Livsstilshus 1. sal\",\n},\n\n{\n  name: \"Galleri Skovklovnen i R\u00f8dhus\",\n  categoryId: \"galleri\",\n  lat: 57.21824276968425,\n  lng: 9.572285830939846,\n  addr: \"R\u00f8dhusvej 245, R\u00f8dhus, 9490 Pandrup\",\n},\n{\n  name: \"Galleri Stender\",\n  categoryId: \"galleri\",\n  lat: 57.05425273673624,\n  lng: 10.366819612227378,\n  addr: \"Havblink 1, 9370 Hals\",\n},\n{\n  name: \"Galleri Stentoft\",\n  categoryId: \"galleri\",\n  lat: 57.124041727671354,\n  lng: 9.449896057823755,\n  addr: \"Hjortdalvej 385, Tranum, 9460 Brovst\",\n},\n{\n  name: \"Galleri Strid\",\n  categoryId: \"galleri\",\n  lat: 57.191406262836935,\n  lng: 10.104722819317413,\n  addr: \"Bj\u00f8rnb\u00e6kvej 50, 9320 Hjallerup\",\n},\n{\n  name: \"Galleri Tobar\",\n  categoryId: \"galleri\",\n  lat: 57.334676277930775,\n  lng: 10.51866358271398,\n  addr: \"Vestergade 28, 9300 S\u00e6by\",\n},\n{\n  name: \"Galleri Tornby\",\n  categoryId: \"galleri\",\n  lat: 57.57793699968789,\n  lng: 10.16340797278351,\n  addr: \"Skagensvej 53B, 9881 Bindslev\",\n},\n{\n  name: \"Galleri Tronsmark\",\n  categoryId: \"galleri\",\n  lat: 57.549192547176766,\n  lng: 10.174417425981519,\n  addr: \"Hirtshalsvej 11, Bindslev, 9881 Bindslev\",\n},\n{\n  name: \"Galleri T\u00f8rvejr\",\n  categoryId: \"galleri\",\n  lat: 57.29188989383234,\n  lng: 10.923791673154163,\n  addr: \"Vester\u00f8 Havnegade 25, 9940 L\u00e6s\u00f8\",\n},\n{\n  name: \"Galleri Uggerby v\/Erik Jacobsen\",\n  categoryId: \"galleri\",\n  lat: 57.57065305599974,\n  lng: 10.107273286538321,\n  addr: \"Tolstrupvej 1, Uggerby, 9800 Hj\u00f8rring\",\n},\n{\n  name: \"Galleri Unika Kunst\",\n  categoryId: \"galleri\",\n  lat: 57.327933031336116,\n  lng: 9.701629524680374,\n  addr: \"Trudslevvej 45, 9480 L\u00f8kken\",\n},\n{\n  name: \"Galleri Valdemar\",\n  categoryId: \"galleri\",\n  lat: 57.33373062121091,\n  lng: 10.515310260528805,\n  addr: \"Gr\u00f8nnegade 6A, 9300 S\u00e6by\",\n},\n{\n  name: \"Galleri Vand\",\n  categoryId: \"galleri\",\n  lat: 57.46839432473193,\n  lng: 9.796259617799551,\n  addr: \"Rubjergvej 8, L\u00f8nstrup, 9800 Hj\u00f8rring\",\n},\n{\n  name: \"Galleri Virak\",\n  categoryId: \"galleri\",\n  lat: 57.44158756502751,\n  lng: 10.536935548067738,\n  addr: \"Danmarksgade 44, 9900 Frederikshavn\",\n},\n{\n  name: \"Galleri Visby\",\n  categoryId: \"galleri\",\n  lat: 57.463466370151835,\n  lng: 9.787404511040734,\n  addr: \"M\u00e5rup Kirkevej 62, L\u00f8nstrup, 9800 Hj\u00f8rring\",\n},\n{\n  name: \"Galleributikken Kystens Kunst og H\u00e5ndv\u00e6rk\",\n  categoryId: \"galleri\",\n  lat: 57.15329822023769,\n  lng: 9.364339726364237,\n  addr: \"Slettestrandvej 162, Slettestrand, 9690 Fjerritslev\",\n},\n{\n  name: \"Gallerie Rasmus\",\n  categoryId: \"galleri\",\n  lat: 57.724651993773186,\n  lng: 10.595887039889117,\n  addr: \"Sct. Laurentii Vej 13, 9990 Skagen\",\n},\n{\n  name: \"Gallerie Wolfsen\",\n  categoryId: \"galleri\",\n  lat: 57.047996639112185,\n  lng: 9.91625956868909,\n  addr: \"Tiendeladen 6, 9000 Aalborg + Sct. Laurentii Vej 80, 9990 Skagen\",\n},\n{\n  name: \"Gr\u00f8nfelt V\u00e6rksted og Galleri\",\n  categoryId: \"galleri\",\n  lat: 57.59031777988085,\n  lng: 9.95523596871704,\n  addr: \"Hj\u00f8rringgade 7, 9850 Hirtshals\",\n},\n{\n  name: \"G\u00f8gsigs Pakhus Sindal\",\n  categoryId: \"galleri\",\n  lat: 57.47239667030185,\n  lng: 10.201440326380697,\n  addr: \"Torvegade 22, 9870 Sindal\",\n},\n{\n  name: \"HAGD Contemporary ApS\",\n  categoryId: \"galleri\",\n  lat: 57.04411488346504,\n  lng: 9.918181139853996,\n  addr: \"Boulevarden 42, st., 9000 Aalborg\",\n},\n{\n  name: \"Hanstholm Kunstforening - Kunstbygningen\",\n  categoryId: \"galleri\",\n  lat: 57.11783662191747,\n  lng: 8.601928068692642,\n  addr: \"Roshagevej 20, 7730 Hanstholm\",\n},\n{\n  name: \"Havneatelier v\/Sonja Hansen\",\n  categoryId: \"galleri\",\n  lat: 56.96893255581589,\n  lng: 9.25051775334548,\n  addr: \"Fjordgade 25, 9670 L\u00f8gst\u00f8r\",\n},\n{\n  name: \"Holms Skulptur Galleri\",\n  categoryId: \"galleri\",\n  lat: 57.490893898391114,\n  lng: 9.941514782207268,\n  addr: \"Dalsmarkvej 27, 9800 Hj\u00f8rring\",\n},\n{\n  name: \"Joan Slotved\",\n  categoryId: \"galleri\",\n  lat: 57.15941970290533,\n  lng: 9.7489739398599,\n  addr: \"Bl\u00e5b\u00e6rvej 24, 9440 Aabybro\",\n},\n\n{\n  name: \"KIRK Gallery ApS\",\n  categoryId: \"galleri\",\n  lat: 57.045859751932944,\n  lng: 9.916660882184317,\n  addr: \"Danmarksgade 8, st. tv, 9000 Aalborg\",\n},\n{\n  name: \"Kunst for dig\",\n  categoryId: \"galleri\",\n  lat: 57.721683276295536,\n  lng: 10.586342368723846,\n  addr: \"Sct. Laurentii Vej 64, 9990 Skagen\",\n},\n{\n  name: \"Kunst uden rammer\",\n  categoryId: \"galleri\",\n  lat: 56.98257977266175,\n  lng: 9.638219439850829,\n  addr: \"Mellemgade 7b, 9240 Nibe\",\n},\n{\n  name: \"KUNSTART20\",\n  categoryId: \"galleri\",\n  lat: 57.28278055786018,\n  lng: 9.689773924526767,\n  addr: \"Saltum Strandvej 20, 9493 Saltum\",\n},\n{\n  name: \"Kunsthal Thy\",\n  categoryId: \"galleri\",\n  lat: 56.724247885674465,\n  lng: 8.445141712846858,\n  addr: \"Doveroddevej 3, 7760 Hurup Thy\",\n},\n{\n  name: \"Kunstmaler Mogens Andersen\",\n  categoryId: \"galleri\",\n  lat: 57.4836362800419,\n  lng: 9.86908381104175,\n  addr: \"N\u00f8rrem\u00f8llevej 269, Skallerup, 9800 Hj'rring\",\n},\n{\n  name: \"L\u00f8kken Kunstpavillion\",\n  categoryId: \"galleri\",\n  lat: 57.37101184816365,\n  lng: 9.70857702637541,\n  addr: \"Sdr. Strandvej 16A, 9480 L\u00f8kken\",\n},\n{\n  name: \"Mylund Keramik og Galleri\",\n  categoryId: \"galleri\",\n  lat: 57.24509835056401,\n  lng: 9.968214226368938,\n  addr: \"\u00c5lborgvej 187, 9700 Br\u00f8nderslev\",\n},\n{\n  name: \"Rakugalleriet i Slettestrand\",\n  categoryId: \"galleri\",\n  lat: 57.14478425895061,\n  lng: 9.369201039859167,\n  addr: \"Under Lien 51, Slettestrand, 9690 Fjerritslev\",\n},\n{\n  name: \"R\u00f8nne's Atelier og Udstilling\",\n  categoryId: \"galleri\",\n  lat: 57.57788829679412,\n  lng: 10.265819697551263,\n  addr: \"Europavej 11, 9881 Bindslev\",\n},\n{\n  name: \"Skagen Kunsthal\",\n  categoryId: \"galleri\",\n  lat: 57.71628066917265,\n  lng: 10.579924128237415,\n  addr: \"V\u00e6rftsvej 2, 9990 Skagen\",\n},\n{\n  name: \"Skulpturparken Blokhus \/ Park Galleriet\",\n  categoryId: \"galleri\",\n  lat: 57.24860205878876,\n  lng: 9.612274839864517,\n  addr: \"Vesterhavsvej 6, Hune, 9492 Blokhus\",\n},\n{\n  name: \"Slothsgalleriet\",\n  categoryId: \"galleri\",\n  lat: 57.012942828045226,\n  lng: 10.066257768687262,\n  addr: \"St\u00e6revej 1, 9270 Klarup\",\n},\n{\n  name: \"TILGANG\",\n  categoryId: \"galleri\",\n  lat: 57.047077528694714,\n  lng: 9.910188453349516,\n  addr: \"Hasserisgade 10, 9000 Aalborg\",\n},\n{\n  name: \"Tranum Strand Kunst- og Kulturcenter\",\n  categoryId: \"galleri\",\n  lat: 57.16721738082552,\n  lng: 9.419769884034746,\n  addr: \"Strandvejen 143, Tranum Strand, 9460 Brovst\",\n},\n{\n  name: \"Vavasgaard \/ Galleri Valeur\",\n  categoryId: \"galleri\",\n  lat: 57.58723968201612,\n  lng: 10.240450768716867,\n  addr: \"Skagensvej 88, Tversted, 9881 Bindslev\",\n},\n{\n  name: \"V\u00c6G Gallery\",\n  categoryId: \"galleri\",\n  lat: 57.04632528684373,\n  lng: 9.915571124514567,\n  addr: \"Jernbanegade 20A, 9000 Aalborg\",\n},\n{\n  name: \"WORK ON ART \/ Galleri Nordenvind\",\n  categoryId: \"galleri\",\n  lat: 57.33422721668462,\n  lng: 10.523169833750146,\n  addr: \"Algade 14, 9300 S\u00e6by\",\n},\n{\n  name: \"Galleri Vetro\",\n  categoryId: \"galleri\",\n  lat: 57.592396773849856,\n  lng: 9.953994139882296,\n  addr: \"Nordvestkajen 3, 9850 Hirtshals\",\n}\n\n    ]\n  },\n  \n  \n  \n  \n  \n  \n   \/*  Kunsthandvaerk*\/\n  \n  \n  {\n    id: \"kunsthandvaerk\",\n    label: \"Kunsth\u00e5ndv\u00e6rk\",\n    items: [\n       {\n    \"name\": \"Keramikkunst\",\n    \"categoryId\": \"kunsthandvaerk\",\n    \"lat\": 57.333452836975724,\n    \"lng\": 10.526849997538669,\n    \"addr\": \"Algade 46D, 9300 S\u00e6by\"\n},\n\n  \/*  Insert new kunsthandvaerk here*\/\n  \n  \n{\n    \"name\": \"Billedkunstner John Laursen\",\n    \"categoryId\": \"kunsthandvaerk\",\n    \"lat\": 57.27862786561118,\n    \"lng\": 9.956250955205572,\n    \"addr\": \"Abelsgade 18, 9700 Br\u00f8nderslev\"\n},\n{\n    \"name\": \"Brammer Design\",\n    \"categoryId\": \"kunsthandvaerk\",\n    \"lat\": 57.27406037809403,\n    \"lng\": 9.94062191287513,\n    \"addr\": \"Sveavej 15-17, 9700 Br\u00f8nderslev\"\n},\n{\n    \"name\": \"byVogn\",\n    \"categoryId\": \"kunsthandvaerk\",\n    \"lat\": 57.57873999978549,\n    \"lng\": 10.162839751532772,\n    \"addr\": \"Bettevej 9, Vogn, 9881 Bindslev\"\n},\n{\n    \"name\": \"Dorthe Hansen Keramik\",\n    \"categoryId\": \"kunsthandvaerk\",\n    \"lat\": 57.590755578085854,\n    \"lng\": 10.185888255221702,\n    \"addr\": \"Gl Skovvej 1B, 9881 Bindslev\"\n},\n{\n    \"name\": \"DOT Keramik\",\n    \"categoryId\": \"kunsthandvaerk\",\n    \"lat\": 57.49422175314078,\n    \"lng\": 10.462329539877217,\n    \"addr\": \"Skagensvej 270, 9970 Strandby\"\n},\n{\n    \"name\": \"Etly Klarborg - Butik Gammelbo\",\n    \"categoryId\": \"kunsthandvaerk\",\n    \"lat\": 57.182419664375665,\n    \"lng\": 9.62156111102622,\n    \"addr\": \"R\u00f8dhusvej 201, Moseby, 9490 Pandrup\"\n},\n{\n    \"name\": \"Giebelhausen Keramik\",\n    \"categoryId\": \"kunsthandvaerk\",\n    \"lat\": 57.46869366059015,\n    \"lng\": 9.796696697545606,\n    \"addr\": \"Rubjergvej 5, 9800 Hj\u00f8rring\"\n},\n{\n    \"name\": \"Glasg\u00e5rden i Thise\",\n    \"categoryId\": \"kunsthandvaerk\",\n    \"lat\": 57.3087422797473,\n    \"lng\": 9.805174539867604,\n    \"addr\": \"Vrenstedej 16, 9700 Br\u00f8nderslev\"\n},\n{\n    \"name\": \"Glashuset L\u00f8nstrup\",\n    \"categoryId\": \"kunsthandvaerk\",\n    \"lat\": 57.47102485744377,\n    \"lng\": 9.796955297545738,\n    \"addr\": \"Strandvejen 68, 9800 Hj\u00f8rring\"\n},\n{\n    \"name\": \"Glashuset S\u00e6by\",\n    \"categoryId\": \"kunsthandvaerk\",\n    \"lat\": 57.33115168615822,\n    \"lng\": 10.528916126373424,\n    \"addr\": \"Gasv\u00e6rksvej 40B, 9300 S\u00e6by\"\n},\n{\n    \"name\": \"Glaspusteriet Rikke Precht\",\n    \"categoryId\":\"kunsthandvaerk\",\n    \"lat\": 57.46900505528964,\n    \"lng\": 9.796930811041,\n    \"addr\": \"Strandvejen 49, 9800 Hj\u00f8rring\"\n},\n{\n    \"name\": \"Gr\u00f8nfeldt V\u00e6rkstedsgalleri v\/Joan Gr\u00f8nfeldt Kristensen\",\n    \"categoryId\": \"kunsthandvaerk\",\n    \"lat\": 57.59030052889143,\n    \"lng\": 9.955289612891438,\n    \"addr\": \"Hj\u00f8rringgade 7, 9850 Hirtshals\"\n},\n{\n    \"name\": \"HANDMADE by Christine Thuesen\",\n    \"categoryId\": \"kunsthandvaerk\",\n    \"lat\": 57.088224956936344,\n    \"lng\": 9.265220124516741,\n    \"addr\": \"Vestergade 3, 9690 Fjerritslev\"\n},\n{\n    \"name\": \"Hapeli Keramik og Smykker\",\n    \"categoryId\": \"kunsthandvaerk\",\n    \"lat\": 57.087389317893376,\n    \"lng\": 9.483191955195688,\n    \"addr\": \"Sandgade 6, Skovsg\u00e5rd, 9460 Brovst\"\n},\n{\n    \"name\": \"Havekunst\",\n    \"categoryId\": \"kunsthandvaerk\",\n    \"lat\": 57.18684695320582,\n    \"lng\": 10.052737112870599,\n    \"addr\": \"Tylstrupvej 63, 9320 Hjallerup\"\n},\n{\n    \"name\": \"Janice Hunter, Tornby Gl Skole Keramik V\u00e6rksted\",\n    \"categoryId\": \"kunsthandvaerk\",\n    \"lat\": 57.53137646684264,\n    \"lng\": 9.950254168713979,\n    \"addr\": \"Gl. Skolevej 4A, Tornby, 9850 Hirtshals\"\n},\n{\n    \"name\": \"Jobi Glas i Bedsted Thy\",\n    \"categoryId\": \"kunsthandvaerk\",\n    \"lat\": 56.80683340999293,\n    \"lng\": 8.405838295667415,\n    \"addr\": \"Thylandsgade 18, 7755 Bedsted Thy\"\n},\n{\n    \"name\": \"Kali glas og brugskunst\",\n    \"categoryId\": \"kunsthandvaerk\",\n    \"lat\": 57.371946376311584,\n    \"lng\": 9.81208456870575,\n    \"addr\": \"Christiandalsvej 8, 9760 Vr\u00e5\"\n},\n{\n    \"name\": \"Kaosfabrikken\",\n    \"categoryId\": \"kunsthandvaerk\",\n    \"lat\": 57.37263515135426,\n    \"lng\": 9.713074839870906,\n    \"addr\": \"N\u00f8rregade 20, L\u00f8kken\"\n},\n{\n    \"name\": \"Keramik v\/ Cathrine Collart\",\n    \"categoryId\": \"kunsthandvaerk\",\n    \"lat\": 57.23801899211582,\n    \"lng\": 9.73240023986394,\n    \"addr\": \"Rendb\u00e6kvej 112, 9493 Saltum\"\n},\n{\n    \"name\": \"Keramiker Finn Bukhave\",\n    \"categoryId\": \"kunsthandvaerk\",\n    \"lat\": 56.9274823040288,\n    \"lng\": 8.519345595673617,\n    \"addr\": \"Dybdalsgave 10, Hundborg, 7700 Thisted\"\n},\n{\n    \"name\": \"Keramiker Jette Abildg\u00e5rd\",\n    \"categoryId\": \"kunsthandvaerk\",\n    \"lat\": 57.20062393894999,\n    \"lng\": 10.154738411027136,\n    \"addr\": \"Hornsh\u00f8jvej 36, 9320 Hjallerup\"\n},\n{\n    \"name\": \"Keramoda\",\n    \"categoryId\": \"kunsthandvaerk\",\n    \"lat\": 57.469521667934245,\n    \"lng\": 9.79658353987591,\n    \"addr\": \"Strandvejen 56, L\u00f8nstrup, 9800 Hj\u00f8rring\"\n},\n{\n    \"name\": \"Kunst Biksen\",\n    \"categoryId\": \"kunsthandvaerk\",\n    \"lat\": 57.25361401869875,\n    \"lng\": 11.004562026369404,\n    \"addr\": \"Byrum Hovedhade 66, 9940 L\u00e6s\u00f8\"\n},\n{\n    \"name\": \"Lange Kunsth\u00e5ndv\u00e6rk\",\n    \"categoryId\": \"kunsthandvaerk\",\n    \"lat\": 57.046449506213946,\n    \"lng\": 9.922833726358705,\n    \"addr\": \"Hjelmerstald 15, 9000 Aalborg\"\n},\n{\n    \"name\": \"L\u00e6se Kunsthal\",\n    \"categoryId\": \"kunsthandvaerk\",\n    \"lat\": 57.32021696124213,\n    \"lng\": 11.125526012877494,\n    \"addr\": \"Smedievejen 2, 9940 L\u00e6s\u00f8\"\n},\n{\n    \"name\": \"L\u00e6s\u00f8 H\u00e5ndarbejde\",\n    \"categoryId\": \"kunsthandvaerk\",\n    \"lat\": 57.277915567874196,\n    \"lng\": 10.935270597535792,\n    \"addr\": \"Kongevejen 2, 9940 L\u00e6s\u00f8\"\n},\n{\n    \"name\": \"L\u00e6s\u00f8 Mohair\",\n    \"categoryId\": \"kunsthandvaerk\",\n    \"lat\": 57.27494817502244,\n    \"lng\": 11.029380955205363,\n    \"addr\": \"Skovvej 8, 9940 L\u00e6s\u00f8\"\n},\n{\n    \"name\": \"L\u00e6s\u00f8 Smykker\",\n    \"categoryId\": \"kunsthandvaerk\",\n    \"lat\": 57.29635951812577,\n    \"lng\": 10.92282006870181,\n    \"addr\": \"Havnepladsen 1E, 9940 L\u00e6s\u00f8\"\n},\n{\n    \"name\": \"L\u00e6s\u00f8 Uldstue\",\n    \"categoryId\": \"kunsthandvaerk\",\n    \"lat\": 57.25374641498,\n    \"lng\": 11.005526753360108,\n    \"addr\": \"Byrum Hovedgade 87, 9940 L\u00e6s\u00f8\"\n},\n{\n    \"name\": \"Molevejens Kunsth\u00e5ndv\u00e6rk\",\n    \"categoryId\": \"kunsthandvaerk\",\n    \"lat\": 56.954446179560165,\n    \"lng\": 8.686649082179624,\n    \"addr\": \"Frederiksgade 4a, 7700 Thisted\"\n},\n{\n    \"name\": \"Museum for Papirkunst\",\n    \"categoryId\": \"kunsthandvaerk\",\n    \"lat\": 57.247872761085425,\n    \"lng\": 9.622014884038855,\n    \"addr\": \"Ilsigvej 2, Hune, 9492 Blokhus\"\n},\n{\n    \"name\": \"Mygdalhus\",\n    \"categoryId\": \"kunsthandvaerk\",\n    \"lat\": 57.54149200263789,\n    \"lng\": 10.091357511044764,\n    \"addr\": \"Skagen Landevej 658, 9800 Hj\u00f8rring\"\n},\n{\n    \"name\": \"Rakugalleriet v\/Jens Hostrup\",\n    \"categoryId\": \"kunsthandvaerk\",\n    \"lat\": 57.14485992649996,\n    \"lng\": 9.369211768694047,\n    \"addr\": \"Under Lien 51, Slettestrand, 9690 Fjerritslev\"\n},\n{\n    \"name\": \"Rigmor Horsevad Pottemager\",\n    \"categoryId\": \"kunsthandvaerk\",\n    \"lat\": 57.589898530663085,\n    \"lng\": 9.953562653377512,\n    \"addr\": \"Hj\u00f8rringgade 16B, 9850 Hirtshals\"\n},\n{\n    \"name\": \"R\u00f8nnes Atelier og Udstilling\",\n    \"categoryId\":\"kunsthandvaerk\",\n    \"lat\": 57.57792281053717,\n    \"lng\": 10.265841155221022,\n    \"addr\": \"Europavej 11, Tuen, 9881 Bindslev\"\n},\n{\n    \"name\": \"Skagen Glaspusterbl\u00e6ser\",\n    \"categoryId\": \"kunsthandvaerk\",\n    \"lat\": 57.72487596071017,\n    \"lng\": 10.540087176807509,\n    \"addr\": \"Engklitvej 40, 9990 Skagen\"\n},\n{\n    \"name\": \"Skagen Glaspusteri\",\n    \"categoryId\": \"kunsthandvaerk\",\n    \"lat\": 57.718667034227494,\n    \"lng\": 10.584575139888795,\n    \"addr\": \"Fiskergangen 12c, 9990 Skagen\"\n},\n{\n    \"name\": \"Skagen Potteri\",\n    \"categoryId\": \"kunsthandvaerk\",\n    \"lat\": 57.72397635772489,\n    \"lng\": 10.593871711054184,\n    \"addr\": \"Sct. Laurentiivej 27, 9990 Skagen\"\n},\n{\n    \"name\": \"Skulpturhaven Thy\",\n    \"categoryId\": \"kunsthandvaerk\",\n    \"lat\": 56.847055851083695,\n    \"lng\": 8.361542926348509,\n    \"addr\": \"Hvidbjergg\u00e5rdsvej 5, Svank\u00e6r, 7755 Bedsted Thy\"\n},\n{\n    \"name\": \"Smykker v\/ Susanne Lang\",\n    \"categoryId\": \"kunsthandvaerk\",\n    \"lat\": 57.72897827144836,\n    \"lng\": 10.524474697559091,\n    \"addr\": \"Niels Ottesensvej 5, 9990 Skagen\"\n},\n{\n    \"name\": \"Stenskulpt\u00f8r Palle M\u00f8rk\",\n    \"categoryId\": \"kunsthandvaerk\",\n    \"lat\": 57.25586722031643,\n    \"lng\": 9.968820724525372,\n    \"addr\": \"Aalborgvej 121, 9700 Br\u00f8nderslev\"\n},\n{\n    \"name\": \"S\u00e6by Glaspusteri\",\n    \"categoryId\": \"kunsthandvaerk\",\n    \"lat\": 57.33330897366812,\n    \"lng\": 10.527155726373476,\n    \"addr\": \"Algade 46E, 9300 S\u00e6by\"\n},\n{\n    \"name\": \"S\u00e6by Porcel\u00e6n\",\n    \"categoryId\": \"kunsth\u00e5ndv\u00e6rk\",\n    \"lat\": 57.33524079519277,\n    \"lng\": 10.521461368703843,\n    \"addr\": \"Algade 4, 9300 S\u00e6by\"\n},\n{\n    \"name\": \"S\u00f8mod & Leg\u00e5rd ApS\",\n    \"categoryId\": \"kunsthandvaerk\",\n    \"lat\": 57.054192156777475,\n    \"lng\": 9.90482799752429,\n    \"addr\": \"Dannebrogsgade 61, 2. th, 9000 Aalborg\"\n},\n{\n    \"name\": \"Tranum Lys og Glas\",\n    \"categoryId\": \"kunsthandvaerk\",\n    \"lat\": 57.12934629592509,\n    \"lng\": 9.44952096869327,\n    \"addr\": \"Ejstrupvej 11, Tranum, 9460 Brovst\"\n},\n{\n    \"name\": \"Vandkantshuset\",\n    \"categoryId\": \"kunsthandvaerk\",\n    \"lat\": 57.11521990277257,\n    \"lng\": 8.613121239857655,\n    \"addr\": \"Chr. Hansens Vej 1, 7730 Hanstholm\"\n}\n\n    ]\n  },\n  \n  \n  {\n    id: \"feriehuse\",\n    label: \"Feriehuse\",\n    items: [\n       {\n        \"name\": \"S\u00e6by Turistbureau \",\n        \"categoryId\": \"feriehuse\",\n        \"lat\": 57.33514558224197,\n        \"lng\": 10.520680337855302,\n        \"addr\": \"S\u00f8ndergade 5B, 9300 S\u00e6by\",\n        \"photo\": \"https:\/\/slowguide.dk\/wp-content\/uploads\/2025\/07\/IMG_2961.jpg\",\n        \"desc\": \"Her finder du kontaktoplysninger, telefontider og alt du beh\u00f8ver at vide om n\u00f8gleudlevering til dit feriehus i S\u00e6by.\"\n    }\n    ]\n  },\n  \n  \n  \n  \n  \n  \n    \/*  Antik *\/\n  \n  \n  {\n    id: \"antik\",\n    label: \"Antik\",\n    items: [\n         {\n    \"name\": \"Almuen Antik\",\n    \"categoryId\": \"antik\",\n    \"lat\": 57.04535238944198,\n    \"lng\": 9.918132768688949,\n    \"addr\": \"Boulevarden 26, 9000 Aalborg\"\n  },\n  \n    \/*  Insert new antik here*\/\n  \n  \n  {\n    \"name\": \"Antik Gaarden\",\n    \"categoryId\": \"antik\",\n    \"lat\": 57.35218974443101,\n    \"lng\": 9.706564868704666,\n    \"addr\": \"Redningsvejen Nord 2, 9480 L\u00f8kken\"\n  },\n  {\n    \"name\": \"Antik og gammelt  v\/Von Otto\",\n    \"categoryId\": \"antik\",\n    \"lat\": 57.60106495744397,\n    \"lng\": 10.417954555222222,\n    \"addr\": \"Industrivej Nord 3A, 9982 Aalb\u00e6k\"\n  },\n  {\n    \"name\": \"Antiquis\",\n    \"categoryId\": \"antik\",\n    \"lat\": 57.05194543104754,\n    \"lng\": 9.906394774221754,\n    \"addr\": \"Helgolandsgade 7A, 9000 Aalborg\"\n  },\n  {\n    \"name\": \"Art F v\/Martin Frederiksen\",\n    \"categoryId\": \"antik\",\n    \"lat\": 57.46370107712076,\n    \"lng\": 9.813638297545369,\n    \"addr\": \"L\u00f8nstrupvej 54C, Vennebjerg, 9800 Hj\u00f8rring\"\n  },\n  {\n    \"name\": \"Bellevue Vintage\",\n    \"categoryId\": \"antik\",\n    \"lat\": 57.72369643696374,\n    \"lng\": 10.59211515522857,\n    \"addr\": \"Sct. Laurentii Vej 22, 9990 Skagen\"\n  },\n  {\n    \"name\": \"Boutique De Limage\",\n    \"categoryId\": \"antik\",\n    \"lat\": 57.42119141305133,\n    \"lng\": 10.046426168708269,\n    \"addr\": \"Illbro Byvej 106-108, 9800 Hj\u00f8rring\"\n  },\n  {\n    \"name\": \"Brocante og Gammelt i Blokhus\",\n    \"categoryId\": \"antik\",\n    \"lat\": 57.24871012873678,\n    \"lng\": 9.614844997534277,\n    \"addr\": \"Vestergha\u00b4vsvej 16, 9492 Blokhus\"\n  },\n  {\n    \"name\": \"Butik Genfund\",\n    \"categoryId\": \"antik\",\n    \"lat\": 57.44272850482465,\n    \"lng\": 10.537822953369906,\n    \"addr\": \"Danmarksgade 31, 9900 Frederikshavn\"\n  },\n  {\n    \"name\": \"Det gamle bageri - \u00c5lb\u00e6k\",\n    \"categoryId\": \"antik\",\n    \"lat\": 57.59404122101599,\n    \"lng\": 10.412440726386968,\n    \"addr\": \"Skagensvej 35, 99821 \u00c5lb\u00e6k\"\n  },\n  {\n    \"name\": \"Gammelt Guld\",\n    \"categoryId\": \"antik\",\n    \"lat\": 57.36571637552972,\n    \"lng\": 10.190318584045,\n    \"addr\": \"S\u00e6by Landevej 413, 9830 T\u00e5rs\"\n  },\n  {\n    \"name\": \"Glashuset Antik & Design\",\n    \"categoryId\": \"antik\",\n    \"lat\": 57.249591926931764,\n    \"lng\": 9.988418855204102,\n    \"addr\": \"Cypresvej 6, 9700 Br\u00f8nderslev\"\n  },\n  {\n    \"name\": \"Gule L\u00e6nge Antik\",\n    \"categoryId\": \"antik\",\n    \"lat\": 57.462567925199636,\n    \"lng\": 9.814570082205767,\n    \"addr\": \"L\u00f8nstrupvej 58, L\u00f8nstrup, 9800 Hj\u00f8rring\"\n  },\n  {\n    \"name\": \"G\u00e5rdbutik, Skagen Antik og Design\",\n    \"categoryId\": \"antik\",\n    \"lat\": 57.59561771529492,\n    \"lng\": 10.306541041726595,\n    \"addr\": \"Skagensvej 122, Tuen\"\n  },\n  {\n    \"name\": \"Habengutt\",\n    \"categoryId\": \"antik\",\n    \"lat\": 57.457905428778645,\n    \"lng\": 9.993527912884568,\n    \"addr\": \"\u00d8stergade 49, 9800 Hj\u00f8rring\"\n  },\n  {\n    \"name\": \"Ingstrup Antik og Moderne\",\n    \"categoryId\": \"antik\",\n    \"lat\": 57.34304340368098,\n    \"lng\": 9.776120011034518,\n    \"addr\": \"Vrenstedvej 465, 9480 L\u00f8kken\"\n  },\n  {\n    \"name\": \"Jensen Antik & Secondhand\",\n    \"categoryId\": \"antik\",\n    \"lat\": 57.40422972640787,\n    \"lng\": 9.803037824533012,\n    \"addr\": \"L\u00f8kkenvej 779, 9480 L\u00f8kken\"\n  },\n  {\n    \"name\": \"Kilo Vintage Sale\",\n    \"categoryId\": \"antik\",\n    \"lat\": 57.04686672939015,\n    \"lng\": 9.924826955193687,\n    \"addr\": \"Bredegade 7, 9000 Aalborg\"\n  },\n  {\n    \"name\": \"Kinnerup Antik og Porcel\u00e6n\",\n    \"categoryId\": \"antik\",\n    \"lat\": 57.06495913816956,\n    \"lng\": 9.90508362635973,\n    \"addr\": \"Strand Alle 2, 9400 N\u00f8rresundby\"\n  },\n  {\n    \"name\": \"Lange's Loppefund\",\n    \"categoryId\": \"antik\",\n    \"lat\": 57.117507421985614,\n    \"lng\": 9.858134884032184,\n    \"addr\": \"Rugmarken 3, 9430 Vadum\"\n  },\n  {\n    \"name\": \"L\u00e6sehesten\",\n    \"categoryId\": \"antik\",\n    \"lat\": 57.04931892959383,\n    \"lng\": 9.914030811019392,\n    \"addr\": \"Reberbansgade 7, 9000 Aalborg\"\n  },\n  {\n    \"name\": \"L\u00e6sehesten Frederikshavn\",\n    \"categoryId\": \"antik\",\n    \"lat\": 57.44308373044247,\n    \"lng\": 10.538112911039649,\n    \"addr\": \"Danmarksgade 25, 9900 Frederikshavn\"\n  },\n  {\n    \"name\": \"N\u00f8rh\u00e5 Antik og Retro\",\n    \"categoryId\": \"antik\",\n    \"lat\": 56.89886204342847,\n    \"lng\": 8.444958639846552,\n    \"addr\": \"Stenbjergvej 38, 7752 Snedsted\"\n  },\n  {\n    \"name\": \"Pilegaards Antikvariat og M\u00f8nthandel\",\n    \"categoryId\": \"antik\",\n    \"lat\": 57.04830559542233,\n    \"lng\": 9.916369897523957,\n    \"addr\": \"Algade 65, 9000 Aalborg\"\n  },\n  {\n    \"name\": \"Pops of the Galaxy\",\n    \"categoryId\": \"antik\",\n    \"lat\": 57.03841609459784,\n    \"lng\": 9.930887295679295,\n    \"addr\": \"\u00d8stre Alle 102, 9000 Aalborg\"\n  },\n  {\n    \"name\": \"Skagen Antik og Design\",\n    \"categoryId\": \"antik\",\n    \"lat\": 57.724184652909024,\n    \"lng\": 10.594578755228582,\n    \"addr\": \"Sct. Laurentii Vej 21D, 9990 Skagen\"\n  },\n  {\n    \"name\": \"Skagen Antik og Genbrug\",\n    \"categoryId\": \"antik\",\n    \"lat\": 57.72608877785187,\n    \"lng\": 10.564652455228684,\n    \"addr\": \"Kattegatvej 6, 9990 Skagen\"\n  },\n  {\n    \"name\": \"S\u00f8r\u00f8verkisten\",\n    \"categoryId\": \"antik\",\n    \"lat\": 57.08768202846819,\n    \"lng\": 9.966335670535273,\n    \"addr\": \"Hj\u00f8rringvej 186, 9400 N\u00f8rresundby\"\n  },\n  {\n    \"name\": \"Thisted Antik og Retro\",\n    \"categoryId\": \"antik\",\n    \"lat\": 56.95511643031306,\n    \"lng\": 8.694348384023813,\n    \"addr\": \"H\u00e5ndv\u00e6rker Torv 1, 7700 Thisted\"\n  },\n  {\n    \"name\": \"Tinsoldaten Military-Antique\",\n    \"categoryId\": \"antik\",\n    \"lat\": 57.045462144288166,\n    \"lng\": 9.923677684028407,\n    \"addr\": \"Niels Ebbesens Gade 6, 9000 Aalborg\"\n  }\n    ]\n  },\n  \n  \n  \n \n  \n    \/*  Genbrug *\/\n  \n  \n  {\n    id: \"genbrug\",\n    label: \"Genbrug\",\n    items: [\n    \n  {\n    \"name\": \"Abb\u00e9 Pierres Klunsere\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.18953476337999,\n    \"lng\": 10.002394253356806,\n    \"addr\": \"Hjallerupvej 70, 9382 Tylstrup\"\n  },\n  \n    \/*  Insert Genbrug here*\/\n    \n    \n  {\n    \"name\": \"Alice in Secondhand\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.04737544038077,\n    \"lng\": 9.924057468689014,\n    \"addr\": \"Slotsgade 9, 9000 Aalborg\"\n  },\n  {\n    \"name\": \"Bl\u00e5 Kors Bindslev\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.536401238917136,\n    \"lng\": 10.196307126384022,\n    \"addr\": \"S\u00f8nderbro 26, 9881 Bindslev\"\n  },\n  {\n    \"name\": \"Bl\u00e5 Kors Frederikshavn\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.436492917159136,\n    \"lng\": 10.53461719754396,\n    \"addr\": \"L\u00e6s\u00f8gade 16, 9900 Frederikshavn\"\n  },\n  {\n    \"name\": \"Bl\u00e5 Kors Genbrug N\u00f8rresundby\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.05920021839783,\n    \"lng\": 9.922311926359402,\n    \"addr\": \"Vestergade 1, 9400 N\u00f8rresundby\"\n  },\n  {\n    \"name\": \"Bl\u00e5 Kors Hj\u00f8rring\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.45753320079928,\n    \"lng\": 9.994901782205561,\n    \"addr\": \"\u00d8stergade 61, 9800 Hj\u00f8rring\"\n  },\n  {\n    \"name\": \"Bl\u00e5 Kors M\u00f8bler S\u00e6by\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.33329011919561,\n    \"lng\": 10.512701311034,\n    \"addr\": \"S\u00e6byg\u00e5rdvej 2, 9300 S\u00e6by\"\n  },\n  {\n    \"name\": \"Bl\u00e5 Kors N\u00f8rre Uttrup\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.07488934736108,\n    \"lng\": 9.950828912864814,\n    \"addr\": \"Amalienborgvej 19, 9400 N\u00f8rresundby\"\n  },\n  {\n    \"name\": \"Bl\u00e5 Kors Skagen\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.722214433823254,\n    \"lng\": 10.578555582219229,\n    \"addr\": \"Chr. Xs Vej 71, 9990 Skagen\"\n  },\n  {\n    \"name\": \"Bl\u00e5 Kors Thisted\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 56.96052296633187,\n    \"lng\": 8.715255626354335,\n    \"addr\": \"Ringvej 1G, 7700 Thisted\"\n  },\n  {\n    \"name\": \"Bl\u00e5 Kors Aabybro\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.15335594681857,\n    \"lng\": 9.741256939859664,\n    \"addr\": \"Fristrupvej 1, 9440 Aabybro\"\n  },\n  {\n    \"name\": \"Bl\u00e5 KorsT\u00f8j S\u00e6by\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.332731456673464,\n    \"lng\": 10.511385339868836,\n    \"addr\": \"Gl. Aalborgvej 2, 9300 S\u00e6by\"\n  },\n  {\n    \"name\": \"Butik Next\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.43833336323099,\n    \"lng\": 10.533198997544044,\n    \"addr\": \"Rimmensgade 11, 9900 Frederikshavn\"\n  },\n  {\n    \"name\": \"B\u00e6redygtige B\u00f8rn\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.44493796648105,\n    \"lng\": 10.509197739874635,\n    \"addr\": \"Suensonsvej 71B, 9900 Frederikshavn\"\n  },\n  {\n    \"name\": \"B\u00f8rneloppen\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 56.99868658334997,\n    \"lng\": 9.870323839851642,\n    \"addr\": \"Stenbukken 8, 9200 Aalborg\"\n  },\n  {\n    \"name\": \"Danmission Dronninglund\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.16037471835235,\n    \"lng\": 10.288909297529758,\n    \"addr\": \"N\u00f8rregade 7, 9330 Dronninglund\"\n  },\n  {\n    \"name\": \"Danmission Dybvad\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.275417874284834,\n    \"lng\": 10.358069370544916,\n    \"addr\": \"\u00c5lborgvej 450, 9352 Dybvad\"\n  },\n  {\n    \"name\": \"Danmission Frederikshavn\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.431903579463686,\n    \"lng\": 10.52645329754371,\n    \"addr\": \"S\u00f8ndergade 87, 9900 Frederikshavn\"\n  },\n  {\n    \"name\": \"Danmission Hjallerup\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.168200659628916,\n    \"lng\": 10.147172326365023,\n    \"addr\": \"Hjallerup Centret 20C, 9320 Hjallerup\"\n  },\n  {\n    \"name\": \"Danmission Hj\u00f8rring\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.453226821657495,\n    \"lng\": 10.017478926379667,\n    \"addr\": \"Far\u00f8vej 3A, 9800 Hj\u00f8rring\"\n  },\n  {\n    \"name\": \"Danmission N\u00f8rresundby\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.058395912803626,\n    \"lng\": 9.924640968689573,\n    \"addr\": \"Skr\u00e5gade 31, 9400 N\u00f8rresundby\"\n  },\n  {\n    \"name\": \"Danmission Aalborg\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.04458280973298,\n    \"lng\": 9.92327929752378,\n    \"addr\": \"Niels Ebbesens Gade 10, 9000 Aalborg\"\n  },\n  {\n    \"name\": \"Dansk Folkehj\u00e6lp Hj\u00f8rring\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.44857566463851,\n    \"lng\": 9.996094055214325,\n    \"addr\": \"Bispensgade 91, 9800 Hj\u00f8rring\"\n  },\n  {\n    \"name\": \"FDF Genbrugsbutik Skagen\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.731875604764674,\n    \"lng\": 10.575613711054585,\n    \"addr\": \"Fritidsvej 2, 9990 Skagen\"\n  },\n  {\n    \"name\": \"Folkekirkens N\u00f8dhj\u00e6lp Br\u00f8nderslev\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.49167225818309,\n    \"lng\": 10.4959122245375,\n    \"addr\": \"P. M\u00f8llers Plads 12, 9700 Br\u00f8nderslev\"\n  },\n  {\n    \"name\": \"Folkekirkens N\u00f8dhj\u00e6lp Hals\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 56.9982821406141,\n    \"lng\": 10.306779966842376,\n    \"addr\": \"Midtergade 45, 9370 Hals\"\n  },\n  {\n    \"name\": \"Folkekirkens N\u00f8dhj\u00e6lp Hals\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 56.996266956847215,\n    \"lng\": 10.307558653346886,\n    \"addr\": \"Midtergade 16, 9370 Hals\"\n  },\n  {\n    \"name\": \"Folkekirkens N\u00f8dhj\u00e6lp Hj\u00f8rring\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.456793288056815,\n    \"lng\": 10.012384153370602,\n    \"addr\": \"Hestk\u00e6rvej 4, 9800 Hj\u00f8rring\"\n  },\n  {\n    \"name\": \"Folkekirkens N\u00f8dhj\u00e6lp Hj\u00f8rring\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.458051370971006,\n    \"lng\": 9.992303211040374,\n    \"addr\": \"\u00d8stergade 38, 9800 Hj\u00f8rring\"\n  },\n  {\n    \"name\": \"Folkekirkens N\u00f8dhj\u00e6lp L\u00e6s\u00f8\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.25398941793033,\n    \"lng\": 11.004632624525273,\n    \"addr\": \"Byrum Hovedgade 83C, 9940 L\u00e6s\u00f8\"\n  },\n  {\n    \"name\": \"Folkekirkens N\u00f8dhj\u00e6lp L\u00f8kken\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.37241315163426,\n    \"lng\": 9.712512655210409,\n    \"addr\": \"N\u00f8rregade 18C, 9480 L\u00f8kken\"\n  },\n  {\n    \"name\": \"Folkekirkens N\u00f8dhj\u00e6lp L\u00f8kken M\u00f8bler\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.370481979313055,\n    \"lng\": 9.711361555210301,\n    \"addr\": \"M\u00f8stingvej 4C, 9480 L\u00f8kken\"\n  },\n  {\n    \"name\": \"Folkekirkens N\u00f8dhj\u00e6lp S\u00e6by\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.33278842954269,\n    \"lng\": 10.518835282199046,\n    \"addr\": \"S\u00f8ndergade 38, 9300 S\u00e6by\"\n  },\n  {\n    \"name\": \"Folkekirkens N\u00f8dhj\u00e6lp Aalborg\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.05089726854794,\n    \"lng\": 9.915207211019471,\n    \"addr\": \"Holberggade 1, 9000 Aalborg\"\n  },\n  {\n    \"name\": \"Frelsens H\u00e6r Br\u00f8nderslev\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.26380999224113,\n    \"lng\": 9.95232908219553,\n    \"addr\": \"\u00d8stergade 73, 9700 Br\u00f8nderslev\"\n  },\n  {\n    \"name\": \"Genbrugsbanken\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.110231342142505,\n    \"lng\": 9.586899841701525,\n    \"addr\": \"Aalborgvej 15, 9460 Brovst\"\n  },\n  {\n    \"name\": \"Genbrugsbutikken Sindal\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.4759771629544,\n    \"lng\": 10.190859868711108,\n    \"addr\": \"Danmarksgade 30, 9870 Sindal\"\n  },\n  {\n    \"name\": \"Genbrugsbutikken Tusindfryd\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.28526455086703,\n    \"lng\": 10.093096868701291,\n    \"addr\": \"Pal\u00e6gade 6,8,9, 9740 Br\u00f8nderslev\"\n  },\n  {\n    \"name\": \"Genbrugsen Frederikshavn\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.44054266567622,\n    \"lng\": 10.535928226379038,\n    \"addr\": \"Danmarksgade 56, 9900 Frederikshavn\"\n  },\n  {\n    \"name\": \"Gita og Gundhild\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.047045090319976,\n    \"lng\": 9.909239840644402,\n    \"addr\": \"Hasserisgade 14, 9000 Aalborg\"\n  },\n  {\n    \"name\": \"Guld og rod Br\u00f8nderslev\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.2688172940377,\n    \"lng\": 9.946865468700436,\n    \"addr\": \"Mejlstedgade 9, 9700 Br\u00f8nderslev\"\n  },\n  {\n    \"name\": \"Guldloppen Genbrug\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.27031758786282,\n    \"lng\": 9.940562353361006,\n    \"addr\": \"Vestergade 69, 9700 Br\u00f8nderslev\"\n  },\n  {\n    \"name\": \"Guld og rod Thisted\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 56.9606247183889,\n    \"lng\": 8.715687753345058,\n    \"addr\": \"Ringvej 1E, 7700 Thisted\"\n  },\n  {\n    \"name\": \"HappyHand\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.04278785965428,\n    \"lng\": 9.918899041698058,\n    \"addr\": \"John F. Kennedys Pl. 45, 9000 Aalborg\"\n  },\n  {\n    \"name\": \"IM-genbrug\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.09716506675663,\n    \"lng\": 9.526802784031098,\n    \"addr\": \"\u00d8stergade 30, 9460 Brovst\"\n  },\n  {\n    \"name\": \"IM-genbrug Tornby\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.53649521526726,\n    \"lng\": 9.948736055218905,\n    \"addr\": \"Gl.Landevej 51, 9850 Hirtshals\"\n  },\n  {\n    \"name\": \"Kirkens Korsh\u00e6r Biersted\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.15119408700704,\n    \"lng\": 9.803721755199016,\n    \"addr\": \"Haldagervej 39, 9440 Aabybro\"\n  },\n  {\n    \"name\": \"Kirkens Korsh\u00e6r Br\u00f8nderslev\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.26219960959757,\n    \"lng\": 9.958072997534963,\n    \"addr\": \"\u00d8stergade 111, 9700 Br\u00f8nderslev\"\n  },\n  {\n    \"name\": \"Kirkens Korsh\u00e6r Fjerritslev\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.08724057000971,\n    \"lng\": 9.268198855195735,\n    \"addr\": \"S\u00f8gade 11, 9690 Fjerritslev\"\n  },\n  {\n    \"name\": \"Kirkens Korsh\u00e6r Frederikshavn\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.445874044192266,\n    \"lng\": 10.509206341718812,\n    \"addr\": \"Hj\u00f8rringvej 143K, 9900 Frederikshavn\"\n  },\n  {\n    \"name\": \"Kirkens Korsh\u00e6r Gandrup\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.05398983149616,\n    \"lng\": 10.17942444169864,\n    \"addr\": \"Aalborgvej 326, 9362 Gandrup\"\n  },\n  {\n    \"name\": \"Kirkens Korsh\u00e6r Hirtshals\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.590621379017,\n    \"lng\": 9.95869585522164,\n    \"addr\": \"J\u00f8rgen Fibigersgade 14-16, 9850 Hirtshals\"\n  },\n  {\n    \"name\": \"Kirkens Korsh\u00e6r Sindal\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.47022775996044,\n    \"lng\": 10.195696112885233,\n    \"addr\": \"Ved Banen 4, 9870 Sindal\"\n  },\n  {\n    \"name\": \"Kirkens Korsh\u00e6r S\u00e6by\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.3328058024849,\n    \"lng\": 10.518964028217598,\n    \"addr\": \"S\u00f8ndergade 38, 9300 S\u00e6by\"\n  },\n  {\n    \"name\": \"Kirkens Korsh\u00e6r Vodskov\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.102161419592726,\n    \"lng\": 10.023102639857004,\n    \"addr\": \"F\u00f8lfodvej 29, 9310 Vodskov\"\n  },\n  {\n    \"name\": \"Kirkens Korsh\u00e6r Vr\u00e5\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.35414420042486,\n    \"lng\": 9.940406168704813,\n    \"addr\": \"Vestergade 10, 9760 Vr\u00e5\"\n  },\n  {\n    \"name\": \"Kirkens Korsh\u00e6r Aabybro\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.16011788273806,\n    \"lng\": 9.731211912869203,\n    \"addr\": \"\u00d8stergade 30A, 9440 Aabybro\"\n  },\n  {\n    \"name\": \"Kirkens Korsh\u00e6r Aalborg\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.049756764442265,\n    \"lng\": 9.91101811286357,\n    \"addr\": \"Reberbansgade 29, 9000 Aalborg\"\n  },\n  {\n    \"name\": \"Kirkens Korsh\u00e6r Aalb\u00e6k\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.59999055948195,\n    \"lng\": 10.417438739882641,\n    \"addr\": \"Industrivej 24-26, 9982 Aalb\u00e6k\"\n  },\n  {\n    \"name\": \"Kirppu Frederikshavn\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.44587145895024,\n    \"lng\": 10.499180197544451,\n    \"addr\": \"Hj\u00f8rringvej 171B, 9900 Frederikshavn\"\n  },\n  {\n    \"name\": \"Kirppu Hj\u00f8rring\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.456655631588944,\n    \"lng\": 10.018301153370606,\n    \"addr\": \"Hvidevold 2F, 9800 Hj\u00f8rring\"\n  },\n  {\n    \"name\": \"Kirppu Aalborg\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 56.998724413938874,\n    \"lng\": 9.870616697521408,\n    \"addr\": \"Stenbukken 10, 9200 Aalborg\"\n  },\n  {\n    \"name\": \"Knudepunktet\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.4453454652592,\n    \"lng\": 10.492850282204856,\n    \"addr\": \"Suderbovej 2, 9900 Frederikshavn\"\n  },\n  {\n    \"name\": \"Kr\u00e6ftens Bek\u00e6mpelse Aalborg\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.033451530714856,\n    \"lng\": 9.922448755192903,\n    \"addr\": \"Hattemagervej 26, 9000 Aalborg\"\n  },\n  {\n    \"name\": \"Loppehuset\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.12165333709773,\n    \"lng\": 9.620675912867274,\n    \"addr\": \"Thyvej 20, 9460 Brovst\"\n  },\n  {\n    \"name\": \"Lopper mod EU\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.196319610897234,\n    \"lng\": 9.671515168696684,\n    \"addr\": \"Langgade 9, 9490 Pandrup\"\n  },\n  {\n    \"name\": \"Mission Afrika Genbrug\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.0410094010405,\n    \"lng\": 9.95141558218404,\n    \"addr\": \"Hadsundvej 42, 9000 Aalborg\"\n  },\n  {\n    \"name\": \"Mission Afrika Genbrug Hune\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.24846925398126,\n    \"lng\":  9.6167961029309,\n    \"addr\": \"Vesterhavsvej 26B, 9492 Blokhus\"\n  },\n  {\n    \"name\": \"Mission Afrika Genbrug Aalborg\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.0464603143645,\n    \"lng\": 9.928785784028515,\n    \"addr\": \"N\u00f8rregade 30, 9000 Aalborg\"\n  },\n  {\n    \"name\": \"Nordv\u00e6rks Genbrugsbutik\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.45157811301686,\n    \"lng\": 10.029687411040136,\n    \"addr\": \"Mand\u00f8vej 4, 9800 Hj\u00f8rring\"\n  },\n  {\n    \"name\": \"Promissio Genbrug Skagen\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.72367888319236,\n    \"lng\": 10.589672911054155,\n    \"addr\": \"Chr. X's Vej 8, 9990 Skagen\"\n  },\n  {\n    \"name\": \"Promissio Genbrug Hj\u00f8rring\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.46181234523481,\n    \"lng\": 9.986566857059147,\n    \"addr\": \"Sct Olia Pl. 1, 9800 Hj\u00f8rring\"\n  },\n  {\n    \"name\": \"Reden Genbrug\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.04532688079946,\n    \"lng\": 9.920884912863315,\n    \"addr\": \"Danmarksgade 21, 9000 Aalborg\"\n  },\n  {\n    \"name\": \"Reusers Aalborg\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 56.99895362628345,\n    \"lng\": 9.872565712860968,\n    \"addr\": \"Stenbutikken 3B, 9200 Aalborg\"\n  },\n  {\n    \"name\": \"R\u00f8de Kors Br\u00f8nderslev\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.263756209182404,\n    \"lng\": 9.952142455204772,\n    \"addr\": \"\u00d8stergade 71B, 9700 Br\u00f8nderslev\"\n  },\n  {\n    \"name\": \"R\u00f8de Kors Dronninglund\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.15960724756461,\n    \"lng\": 10.28916496869479,\n    \"addr\": \"Slotsgade 37, 9330 Dronninglund\"\n  },\n  {\n    \"name\": \"R\u00f8de Kors Frederikshavn\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.44539499893382,\n    \"lng\": 10.492396668709562,\n    \"addr\": \"Suderbovej 2C, 9900 Frederikshavn\"\n  },\n  {\n    \"name\": \"R\u00f8de Kors Handsundvej\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.0405058544097,\n    \"lng\": 9.951746311018947,\n    \"addr\": \"Hadsundvej 48, 2th, 9000 Aalborg\"\n  },\n  {\n    \"name\": \"R\u00f8de Kors Hanstholm\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.11548475081916,\n    \"lng\": 8.608264326362333,\n    \"addr\": \"Centervej 2, 7730 Hanstholm\"\n  },\n  {\n    \"name\": \"R\u00f8de Kors Hirtshals\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.588901281643224,\n    \"lng\": 9.959685511047166,\n    \"addr\": \"Svinget 8, 9850 Hirtshals\"\n  },\n  {\n    \"name\": \"R\u00f8de Kors Hjallerup\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.17626314567741,\n    \"lng\": 10.155359912870043,\n    \"addr\": \"Navervej 1, 9320 Hjallerup\"\n  },\n  {\n    \"name\": \"R\u00f8de Kors Hj\u00f8rring\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.45780355662392,\n    \"lng\": 9.993833397545052,\n    \"addr\": \"\u00d8stergade 55, 9800 Hj\u00f8rring\"\n  },\n  {\n    \"name\": \"R\u00f8de Kors N\u00f8rresundby\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.05880925349984,\n    \"lng\": 9.923231970533779,\n    \"addr\": \"Torvet 3, 9400 N\u00f8rresaundby\"\n  },\n  {\n    \"name\": \"R\u00f8de Kors Pandrup\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.22341452986984,\n    \"lng\": 9.676622884037597,\n    \"addr\": \"Bredgade 14 st., 9490 Pandrup\"\n  },\n  {\n    \"name\": \"R\u00f8de Kors Sindal\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.470878481049716,\n    \"lng\": 10.202402126380628,\n    \"addr\": \"N\u00f8rregade 2A, 9870 Sindal\"\n  },\n  {\n    \"name\": \"R\u00f8de Kors Skagen\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.72734162353499,\n    \"lng\": 10.569259957669757,\n    \"addr\": \"Buttervej 33, 9990 Skagen\"\n  },\n  {\n    \"name\": \"R\u00f8de Kors S\u00e6by\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.33452095300701,\n    \"lng\": 10.51915013986895,\n    \"addr\": \"Krystalgade 3, 9300 S\u00e6by\"\n  },\n  {\n    \"name\": \"R\u00f8de Kors Thisted\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 56.966432302864256,\n    \"lng\": 8.731129711015141,\n    \"addr\": \"Tigervej 1, 7700 Thisted\"\n  },\n  {\n    \"name\": \"R\u00f8de Kors Tversted\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.58534994288492,\n    \"lng\": 10.18817421289115,\n    \"addr\": \"Tannisbugtvej 44, Tversted, 9881 Bindslev\"\n  },\n  {\n    \"name\": \"R\u00f8de Kors Vejgaard\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.042024477803466,\n    \"lng\": 9.94887086868877,\n    \"addr\": \"Vejg\u00e5rd Bymidte 8, 9000 Aalborg\"\n  },\n  {\n    \"name\": \"R\u00f8de Kors Vestbyen Aalborg\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.05322112844204,\n    \"lng\": 9.905381511019549,\n    \"addr\": \"Kastetvej 35, 9000 Aalborg\"\n  },\n  {\n    \"name\": \"R\u00f8de Kors Vr\u00e5\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.35295045180151,\n    \"lng\": 9.940998684044288,\n    \"addr\": \"Mejerigade 15 st, 9760 Vr\u00e5\"\n  },\n  {\n    \"name\": \"R\u00f8de Kors Aabybro\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.16263982261824,\n    \"lng\": 9.730779526364747,\n    \"addr\": \"Kattedamsvej 6, 9440 Aabybro\"\n  },\n  {\n    \"name\": \"R\u00e5d og D\u00e5d Genbrug\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.09732389804512,\n    \"lng\": 9.516805297526485,\n    \"addr\": \"Vestergade 62-64, 9460 Brovst\"\n  },\n  {\n    \"name\": \"Tylstrup Genbrug\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.1957987118671,\n    \"lng\": 9.947153412871042,\n    \"addr\": \"Luneborgvej 62, 9382 Tylstrup\"\n  },\n  {\n    \"name\": \"Vodskov Genbrugsbutik\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.10167586635248,\n    \"lng\": 10.023521826361595,\n    \"addr\": \"F\u00f8lfodvej 27, 9310 Vodskov\"\n  },\n  {\n    \"name\": \"Your 2Hand Closet\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.049037536986326,\n    \"lng\": 9.91753049567985,\n    \"addr\": \"Gravensgade 3, 9000 Aalborg\"\n  },\n  {\n    \"name\": \"Vild med genbrug\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.15619101801501,\n    \"lng\": 10.277558768694668,\n    \"addr\": \"Slotsgade 12A, 9330 Dronninglund\"\n  },\n  {\n    \"name\": \"Loppeamok\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.0642750391217,\n    \"lng\": 9.903988484029425,\n    \"addr\": \"Strand Alle 12, 9400 N\u00f8rresundby\"\n  },\n  {\n    \"name\": \"R\u00e5t og godt\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.035923314622934,\n    \"lng\": 9.91647371286285,\n    \"addr\": \"Hjulmagervej 58, 9000 Aalborg\"\n  },\n  {\n    \"name\": \"Little Recycle\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.037974171753206,\n    \"lng\": 9.92933254169786,\n    \"addr\": \"\u00d8stre Alle 102, 9000 Aalborg\"\n  },\n  {\n    \"name\": \"M\u00f8drehj\u00e6lpen Thisted\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 56.95470888093154,\n    \"lng\": 8.686300368684272,\n    \"addr\": \"Vestergade 32, 7700 Thisted\"\n  },\n  {\n    \"name\": \"M\u00f8drehj\u00e6lpen Br\u00f8nderslev\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.269357789440186,\n    \"lng\": 9.949159639865563,\n    \"addr\": \"Bredgade 65, 9700 Br\u00f8nderslev\"\n  },\n  {\n    \"name\": \"M\u00f8drehj\u00e6lpen Aalborg\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.04567797149045,\n    \"lng\": 9.917449753349448,\n    \"addr\": \"Danmarksgade 14, 9000 Aalborg\"\n  },\n  {\n    \"name\": \"TopLop Br\u00f8nderslev\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.26445240180107,\n    \"lng\": 9.950818711030418,\n    \"addr\": \"\u00d8stergade 63, 9700 Br\u00f8nderslev\"\n  },\n  {\n    \"name\": \"Lille Hjerte\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.26887738532391,\n    \"lng\": 9.94671075520507,\n    \"addr\": \"Nygade 16, 9700 Br\u00f8nderslev\"\n  },\n  {\n    \"name\": \"Hoppeloppen\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.45339715322502,\n    \"lng\": 10.017083782205324,\n    \"addr\": \"Far\u00f8gade 1A, 9800 Hj\u00f8rring\"\n  },\n  {\n    \"name\": \"Second Hand\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.04182768849522,\n    \"lng\": 9.935492726358545,\n    \"addr\": \"F\u00e6r\u00f8gade, 9000 Aalborg\"\n  },\n  {\n    \"name\": \"Butik Gejst\",\n    \"categoryId\": \"genbrug\",\n    \"lat\": 57.042409260605915,\n    \"lng\": 9.934935011019032,\n    \"addr\": \"Fyensgade 18, 9000 Aalborg\"\n  }\n    ]\n  }\n  \n  \n  \n  \n  \n  \n  ];\n\n<\/script>\n\n<script>\n\/\/ \u2190 Add at the very top of your main script block\nlet userPosition = null;\n\n\/\/ Haversine distance (kilometres) \u2013 needed for proximity sorting\nfunction haversine(lat1, lon1, lat2, lon2) {\n  const toRad = v => v * Math.PI \/ 180;\n  const R = 6371;           \/\/ Earth radius in km\n  const dLat = toRad(lat2 - lat1);\n  const dLon = toRad(lon2 - lon1);\n  const a =\n    Math.sin(dLat \/ 2) ** 2 +\n    Math.cos(toRad(lat1)) *\n      Math.cos(toRad(lat2)) *\n      Math.sin(dLon \/ 2) ** 2;\n  const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\n  return R * c;\n}\n\n\/\/ Geolocation is now handled in initMap.\n<\/script>\n\n\n<script>\n  \/\/ \u2500\u2500 Chat widget element \u2500\u2500\n  const chatEl = document.getElementById('chat-widget');\n\n  \/* ---------- default map position (top of Denmark) -------------- *\/\n  const MAP_CENTER   = { lat: 57.73, lng: 10.59 };   \/\/ Skagen \/ Grenen\n  const IS_MOBILE    = window.innerWidth < 768;\n  const DEFAULT_ZOOM = IS_MOBILE ? 11 : 10;\n  \/* --------------------------------------------------------------- *\/\n\n  \/\/ Build a POI list for system instructions (if you use OpenAI functions)\n  const poiListText = categories\n    .flatMap(c => c.items.map(i => `${i.name} (${c.id}): ${i.lat},${i.lng}`))\n    .join(\"\\n\");\n\n  const systemInstructions = `POI LIST:\n  ${poiListText}\n\n  ===============  CORE RULES  ===============\n  1. Language\n     \u2013 Detect the user\u2019s language from their first message  \n     \u2013 Reply ONLY in that language  \n  2. POI focus \u2026\n  ===========================================`;\n\n  let chatHistory = [{ role: \"system\", content: systemInstructions }];\n\n\/\/ === Globals ===\nlet map, placesService, markers = [], dirService, dirRenderer;\n\/\/ Cache for category icons\nconst iconCache = {};\n\n\n\n\/\/ === initMap ===\nfunction initMap() {\n  const fallbackCenter = { lat: 57.55, lng: 10.00 }; \/\/ Vendsyssel\n  const zoomFallback = IS_MOBILE ? 6 : 8;\n  createMap(fallbackCenter, zoomFallback); \/\/ Show full region first\n\n  navigator.geolocation.getCurrentPosition(\n    pos => {\n      const userPos = { lat: pos.coords.latitude, lng: pos.coords.longitude };\n      \/\/ Animate to user location after a short delay\n      setTimeout(() => {\n        map.panTo(userPos);\n        map.setZoom(12);\n      }, 1000);\n    },\n    err => {\n      console.warn(\"Geolocation failed:\", err.message);\n      \/\/ Do nothing, stays in fallback\n    },\n    {\n      enableHighAccuracy: true,\n      timeout: 5000,\n      maximumAge: 0\n    }\n  );\n\n  \/\/ --- Postnummer search (Google Maps) ---\n  const input   = document.getElementById('search-input');\n  const btn     = document.getElementById('search-btn');\n  const results = document.getElementById('search-results');\n\n  \/\/ Only Danish 4-digit postnumre\n  const isPostnr = q => \/^\\s*\\d{4}\\s*$\/.test(q);\n\n  \/\/ Layer to draw postnummer polygons\n  const postnrData = new google.maps.Data({ map });\n  postnrData.setStyle({\n    strokeColor: '#0b68ff',\n    strokeWeight: 2,\n    fillColor: '#0b68ff',\n    fillOpacity: 0.08\n  });\n\n  function clearPostnr() {\n    const feats = [];\n    postnrData.forEach(f => feats.push(f));\n    feats.forEach(f => postnrData.remove(f));\n  }\n\n  let abortCtrl;\n  async function suggestPostnr(q) {\n    try {\n      if (abortCtrl) abortCtrl.abort();\n      abortCtrl = new AbortController();\n      const url = `https:\/\/api.dataforsyningen.dk\/postnumre?nr=${encodeURIComponent(q)}`;\n      const res = await fetch(url, { signal: abortCtrl.signal });\n      if (!res.ok) return [];\n      const arr = await res.json(); \/\/ [{nr:\"9300\", navn:\"S\u00e6by\"}, ...]\n      return arr.map(p => ({ nr: p.nr, navn: p.navn }));\n    } catch {\n      return [];\n    }\n  }\n\n  function renderResults(items) {\n    if (!items.length) {\n      results.classList.add('hidden');\n      results.innerHTML = '';\n      return;\n    }\n    results.innerHTML = items\n      .map(it => `<li data-nr=\"${it.nr}\">Postnummer ${it.nr} \u2013 ${it.navn}<\/li>`)\n      .join('');\n    results.classList.remove('hidden');\n  }\n\n  async function zoomToPostnr(nr) {\n    const url = `https:\/\/api.dataforsyningen.dk\/postnumre\/${encodeURIComponent(nr)}?format=geojson`;\n    const res = await fetch(url);\n    if (!res.ok) { alert('Kunne ikke hente omr\u00e5det for postnummeret.'); return; }\n    const feature = await res.json(); \/\/ GeoJSON Feature\n\n    clearPostnr();\n    const added = postnrData.addGeoJson(feature); \/\/ array of features\n\n    \/\/ Fit bounds to geometry\n    const bounds = new google.maps.LatLngBounds();\n    added.forEach(f => f.getGeometry().forEachLatLng(latlng => bounds.extend(latlng)));\n    if (!bounds.isEmpty()) map.fitBounds(bounds, { padding: 30 });\n  }\n\n  \/\/ ---- Wire up UI ----\n  let lastQ = '';\n  input.addEventListener('input', async () => {\n    const q = input.value.trim();\n    if (q === lastQ) return;\n    lastQ = q;\n    if (isPostnr(q) || \/^\\d{1,4}$\/.test(q)) {\n      renderResults(await suggestPostnr(q));\n    } else {\n      results.classList.add('hidden');\n      results.innerHTML = '';\n    }\n  });\n\n  results.addEventListener('click', async (e) => {\n    const li = e.target.closest('li[data-nr]');\n    if (!li) return;\n    const nr = li.dataset.nr;\n    results.classList.add('hidden');\n    input.value = `Postnummer ${nr}`;\n    await zoomToPostnr(nr);\n  });\n\n  async function handleSubmit() {\n    const q = input.value.trim();\n    if (isPostnr(q)) {\n      const nr = q.match(\/\\d{4}\/)[0];\n      await zoomToPostnr(nr);\n    } else {\n      \/\/ TODO: call your existing non-postnr search here if you have one\n      \/\/ existingSearch(q);\n    }\n  }\n\n  btn.addEventListener('click', handleSubmit);\n  input.addEventListener('keydown', (e) => { if (e.key === 'Enter') handleSubmit(); });\n\n  \/\/ Optional niceties\n  document.addEventListener('click', (e) => {\n    if (!results.contains(e.target) && e.target !== input) {\n      results.classList.add('hidden');\n    }\n  });\n  input.addEventListener('blur', () => { if (!input.value.trim()) clearPostnr(); });\n\n  if (input && !input.placeholder.includes('postnr')) {\n    input.placeholder = 'S\u00f8g\u2026 (steder, postnr)';\n  }\n  \/\/ --- end Postnummer search ---\n}\nfunction createMap(center, zoom) {\n  map = new google.maps.Map(document.getElementById(\"map\"), {\n    center,\n    zoom,\n    mapTypeId: \"hybrid\",\n    gestureHandling: IS_MOBILE ? \"greedy\" : \"cooperative\",\n    streetViewControl: false,\n    fullscreenControl: false,\n    mapTypeControl: false,\n    styles: [\n      {\n        featureType: \"poi\",\n        stylers: [{ visibility: \"off\" }]\n      }\n    ]\n  });\n\n  dirService   = new google.maps.DirectionsService();\n  dirRenderer  = new google.maps.DirectionsRenderer({ map });\n  placesService = new google.maps.places.PlacesService(map);\n\n  \/\/ Wait until the map is fully loaded before adding markers\n  google.maps.event.addListenerOnce(map, 'idle', showAll);\n}\n\n\/\/ Fetch Google Place details by name and location\nfunction fetchPlaceDetails(name, lat, lng, callback) {\n  \/\/ First find the place via a nearby text search\n  const searchRequest = {\n    location: new google.maps.LatLng(lat, lng),\n    radius: 100,           \/\/ search within 100m of the marker\n    query: name\n  };\n  placesService.textSearch(searchRequest, (results, status) => {\n    if (status === google.maps.places.PlacesServiceStatus.OK && results[0]) {\n      const placeId = results[0].place_id;\n      \/\/ Now request detailed fields\n      const detailRequest = {\n        placeId: placeId,\n        fields: [\n          'photos',\n          'opening_hours',\n          'reviews',\n          'rating',\n          'user_ratings_total',\n          'formatted_address',\n          'formatted_phone_number',\n          'website'\n        ]\n      };\n      placesService.getDetails(detailRequest, (place, status2) => {\n        if (status2 === google.maps.places.PlacesServiceStatus.OK) {\n          callback(place);\n        } else {\n          console.warn('getDetails failed:', status2);\n        }\n      });\n    } else {\n      console.warn('textSearch failed:', status);\n    }\n  });\n}\n  \/\/ Build category buttons (if you have <div id=\"cat-bar\">)\n  function buildButtons() {\n    const bar = document.getElementById(\"cat-bar\");\n    categories.forEach(c => {\n      const btn = document.createElement(\"button\");\n      btn.className = \"px-3 py-1 rounded bg-red-600 text-white text-sm\";\n      btn.innerText = c.label;\n      btn.onclick = () => showCategory(c.id);\n      bar.appendChild(btn);\n    });\n    const all = document.createElement(\"button\");\n    all.className = \"px-3 py-1 rounded border text-sm\";\n    all.innerText = \"Vis alle\";\n    all.onclick = showAll;\n    bar.appendChild(all);\n  }\n\n\n\n  \/\/ Clear all markers and directions\n  function clearMarkers() {\n    markers.forEach(m => m.setMap(null));\n    markers = [];\n    dirRenderer.set(\"directions\", null);\n  }\n\n  \/\/ Show only one category\n  async function showCategory(id) {\n    clearMarkers();\n    \/\/ Preload icon for this category\n    await makeCategoryIcon(id);\n    const cat = categories.find(c => c.id === id);\n    await Promise.all(cat.items.map(i => addMarker(i)));\n    if (cat.items.length) {\n      const bounds = new google.maps.LatLngBounds();\n      cat.items.forEach(i => bounds.extend({ lat: i.lat, lng: i.lng }));\n      map.fitBounds(bounds);\n    } else {\n      map.setCenter({ lat: 57.55, lng: 10.00 });\n      map.setZoom(10);\n    }\n    panel.classList.remove(\"open\");\n  }\n\n  \/\/ Show all POIs\n  async function showAll() {\n    clearMarkers();\n    \/\/ Preload icons for all categories before adding markers\n    const categoryIds = [...new Set(categories.map(c => c.id))];\n    await Promise.all(categoryIds.map(id => makeCategoryIcon(id)));\n    await Promise.all(categories.flatMap(c => c.items).map(i => addMarker(i)));\n    panel.classList.remove(\"open\");\n  }\n\n\/\/ after opening, check if the content overflows\nsetTimeout(() => {\n  if (panel.scrollHeight > panel.clientHeight) {\n    panel.classList.add('has-overflow');\n  } else {\n    panel.classList.remove('has-overflow');\n  }\n}, 50);\n\n\n\n  \/\/ TranslatePress helper\n  function trpWrap(txt) {\n    const safe = txt.replace(\/\"\/g,'&quot;');\n    return `<span data-trpgettextoriginal=\"${safe}\">${txt}<\/span>`;\n  }\n\/\/ Info-panel container\nconst panel = document.getElementById(\"info-panel\");\n\n\/\/ TranslatePress dynamic scan\nfunction trpTranslateDynamic(node) {\n  if (window.trp?.translateNode)          \n    trp.translateNode(node);\n  else if (window.TRPMOFunction?.translateDomStrings) \n    TRPMOFunction.translateDomStrings(node);\n  else \n    window.dispatchEvent(new CustomEvent('trp_translate_dynamic_content',{detail:node}));\n}\n\n\/\/ \u2500\u2500\u2500 Open POI info panel \u2500\u2500\u2500\nasync function openPanel(i) {\n  \/\/ 1) Load icon definition\n  const iconDef = await makeCategoryIcon(i.categoryId);\n  \/\/ Always use .url, fallback.svg if none\n  const iconUrl = iconDef.url;\n\n  \/\/ 2) category labels\n  const labels = {\n    kunstgalleri:     'Kunstgalleri',\n    galleri:          'Kunstgalleri',\n    antik:             'Antik',\n    genbrug:           'Genbrug',\n    oplevelser:        'Oplevelser',\n    museer:            'Museer',\n    restauranter:      'Restauranter',\n    natteliv:          'Natteliv',\n    butikker:          'Butikker',\n    hotel:             'Hotel',\n    camping:           'Camping',\n    feriehuse:         'Feriehuse',\n    kunsthandvaerk:    'Kunsth\u00e5ndv\u00e6rk'\n  };\n  const label = labels[i.categoryId] || i.categoryId;\n\n  \/\/ 3) Build HTML with carousel and icon buttons\n  panel.innerHTML = `\n    <div id=\"close-panel\" style=\"position:absolute; top:1rem; right:1rem; font-size:1.75rem; cursor:pointer; z-index:10; padding:0.5rem;\">&times;<\/div>\n    <div style=\"position:relative;\">\n      <div class=\"info-carousel\">\n        ${i.photo ? `<div class=\"carousel-slide active\"><img decoding=\"async\" src=\"${i.photo}\" alt=\"${i.name}\" style=\"width:100%;\"\/><\/div>` : ''}\n        <div id=\"google-photos\"><\/div>\n        <div class=\"carousel-nav prev\">&#10094;<\/div>\n        <div class=\"carousel-nav next\">&#10095;<\/div>\n      <\/div>\n      <div class=\"category-badge\">\n        ${label}\n        <img decoding=\"async\" src=\"${iconUrl}\" alt=\"${label}\">\n      <\/div>\n    <\/div>\n    <div class=\"p-4\">\n      <h2 class=\"text-xl font-semibold mb-1\">${i.name}<\/h2>\n      <p class=\"text-sm text-gray-600 mb-4\">\n        <i class=\"fa fa-map-marker-alt\"><\/i> ${i.addr}\n      <\/p>\n      ${i.desc ? `<p class=\"text-sm mb-4\">${i.desc}<\/p>` : ''}\n      <div class=\"mb-4 flex items-center\">\n        <button class=\"btn-route\" onclick=\"routeTo(${i.lat}, ${i.lng}, '${i.addr.replace(\/'\/g,\"\\\\'\")}')\">\n          <i class=\"fa fa-directions\"><\/i>\n        <\/button>\n        ${i.link\n          ? `<button class=\"btn-website\" onclick=\"window.open('${i.link}','_blank')\">\n               <i class=\"fa fa-external-link-alt\"><\/i>\n             <\/button>`\n          : ``\n        }\n      <\/div>\n      <div id=\"google-info\" class=\"mb-6\"><\/div>\n      <div id=\"review-carousel\" class=\"review-carousel mt-4\"><\/div>\n    <\/div>\n  `;\n  \/\/ attach close handler\n  panel.querySelector('#close-panel').onclick = () => {\n    panel.classList.remove('open');\n    const VENDS_CENTER = { lat: 57.55, lng: 10.00 };\n    const FALLBACK_ZOOM = IS_MOBILE ? 8 : 10;\n    map.panTo(VENDS_CENTER);\n    map.setZoom(FALLBACK_ZOOM);\n  };\n\n  \/\/ 5) Show it\n  panel.classList.add('open');\n  map.panTo({ lat: i.lat, lng: i.lng });\n  map.setZoom(13);\n  trpTranslateDynamic(panel);\n\n  \/\/ fetch and inject Google data (robust: show panel even if fetch fails)\n  try {\n    fetchPlaceDetails(i.name, i.lat, i.lng, (place) => {\n      let html = '';\n\n      \/\/ Rating & total reviews\n      if (place.rating != null) {\n        html += `<div class=\"text-sm mb-2\"><strong>Bed\u00f8mmelse:<\/strong> ${place.rating} \u2b50 (${place.user_ratings_total || 0} anmeldelser)<\/div>`;\n      }\n\n      \/\/ Phone number\n      if (place.formatted_phone_number) {\n        html += `<div class=\"text-sm mb-1\"><strong>Telefon:<\/strong> ${place.formatted_phone_number}<\/div>`;\n      }\n\n      \/\/ Opening hours\n      if (place.opening_hours) {\n        html += `<div class=\"text-sm mb-2\"><strong>\u00c5bningstider:<\/strong><br>${place.opening_hours.weekday_text.join('<br>')}<\/div>`;\n      }\n\n      \/\/ inject Google photos into #google-photos carousel\n      if (place.photos) {\n        place.photos.forEach((p, idx) => {\n          const url = p.getUrl({ maxWidth:400 });\n          document.getElementById('google-photos').insertAdjacentHTML('beforeend',\n            `<div class=\"carousel-slide${idx? '' : ' active'}\"><img decoding=\"async\" src=\"${url}\" style=\"width:100%;\"\/><\/div>`);\n        });\n      }\n\n      document.getElementById('google-info').innerHTML = html;\n\n      \/\/ Reviews in carousel\n      if (place.reviews) {\n        place.reviews.slice(0,5).forEach((r, idx) => {\n          const snippet = r.text.length > 100 ? r.text.slice(0,100) + '...' : r.text;\n          document.getElementById('review-carousel').insertAdjacentHTML('beforeend',\n            `<div class=\"carousel-slide${idx? '' : ' active'}\">\n               <p><strong>${r.author_name}<\/strong> \u2b50${r.rating}<\/p>\n               <p>${snippet} ${r.text.length > 100 ? '<a href=\"#\" class=\"read-more\">Read more<\/a><span class=\"full-text\" style=\"display:none;\">' + r.text + '<\/span>' : ''}<\/p>\n             <\/div>`);\n        });\n        \/\/ add nav\n        const rc = document.getElementById('review-carousel');\n        rc.insertAdjacentHTML('beforeend','<div class=\"carousel-nav prev\">&#10094;<\/div><div class=\"carousel-nav next\">&#10095;<\/div>');\n        \/\/ initialize carousels dynamically now that content is injected\n        initCarousel(panel.querySelector('.info-carousel'));\n        initCarousel(rc);\n      }\n    });\n  } catch (e) {\n    console.error('Places fetch failed:', e);\n  }\n}\n\n\/\/ \u2500\u2500\u2500 Category icon loader \u2500\u2500\u2500\nasync function makeCategoryIcon(categoryId) {\n  \/\/ Return cached icon if already loaded\n  if (iconCache[categoryId]) {\n    return iconCache[categoryId];\n  }\n  console.log('[Debug] makeCategoryIcon called for categoryId:', categoryId);\n  \/\/ --- Static mapping (no network HEAD requests => no CORS failures \/ silent fallbacks)\n  const baseUrl = window.location.origin + '\/wp-content\/uploads\/2025\/07\/';\n  const fallback = 'fallback.svg';\n  const fileMap = {\n    galleri:        'Kunstgalleril-1.svg',\n    kunstgalleri:   'Kunstgalleril-1.svg',\n    antik:          'Antikl.svg',\n    genbrug:        'Genbrugsbutikkerl.svg',\n    oplevelser:     'Oplevelserl.svg',\n    museer:         'Museerl.svg',\n    restauranter:   'Restauranterl.svg',\n    feriehuse:      'Feriehusel.svg',\n    kunsthandvaerk:  'kunsthandvaerk.svg'\n  };\n\n  const fileName = fileMap[categoryId] || fallback;\n  const url = baseUrl + fileName;\n  console.log('[Debug] makeCategoryIcon computed URL:', url);\n\n  \/\/ Debug: preload icon to check loading\n  const cssSize = window.innerWidth >= 768 ? 40 : 30; \/\/ displayed px\n  const realPx  = cssSize * (window.devicePixelRatio || 1); \/\/ actual bitmap px\n  \/\/ Debug: preload icon to check loading\n  const dbgImg = new Image();\n  dbgImg.onload = () => console.log('[Debug] icon image loaded for', categoryId, url, 'size:', realPx, 'px');\n  dbgImg.onerror = (e) => console.error('[Debug] icon image failed to load for', categoryId, url, e);\n  dbgImg.src = url;\n\n  const iconObj = {\n    url,\n    size:       new google.maps.Size(realPx, realPx),\n    scaledSize: new google.maps.Size(cssSize, cssSize),\n    anchor:     new google.maps.Point(cssSize \/ 2, cssSize \/ 2),\n    optimized:  false\n  };\n  iconCache[categoryId] = iconObj;\n  return iconObj;\n}\n\/\/ \u2500\u2500 Add a POI marker with hover\u2010bounce \u2500\u2500\nasync function addMarker(item) {\n  console.log('[Debug] addMarker called for item:', item.name, item.lat, item.lng);\n  const icon = await makeCategoryIcon(item.categoryId);\n  const m = new google.maps.Marker({\n    position: { lat: item.lat, lng: item.lng },\n    map: map,\n    title: item.name,\n    icon: icon,\n    optimized: false\n  });\n  \/\/ Ensure the loaded icon is applied\n  m.setIcon(icon);\n  console.log('[Debug] Marker created:', m, 'with icon:', icon);\n\n  \/\/ Hover\u2010effect: bounce on mouseover, stop on mouseout\n  m.addListener('mouseover', () => {\n    m.setAnimation(google.maps.Animation.BOUNCE);\n  });\n  m.addListener('mouseout', () => {\n    m.setAnimation(null);\n  });\n\n  \/\/ Click to open the info panel\n  m.addListener('click', () => openPanel(item));\n\n  markers.push(m);\n}\n\n\/\/ Optional: redraw on window resize\nwindow.addEventListener('resize', () => { clearMarkers(); showAll(); });\n\n\/\/ Open route in external Google Maps\nfunction routeTo(lat, lng, addr = null) {\n  const dest = addr ? encodeURIComponent(addr) : `${lat},${lng}`;\n  window.open(`https:\/\/www.google.com\/maps\/dir\/?api=1&destination=${dest}`, \"_blank\");\n}\n\n\/\/ \u2014\u2014 Search functionality \u2014\u2014 \nconst allPlaces = categories.flatMap(c => c.items);\nconst searchInput = document.getElementById('search-input');\nconst searchBtn = document.getElementById('search-btn');\nconst resultsList = document.getElementById('search-results');\nfunction renderResults(results) {\n  resultsList.innerHTML = results.map(r => `<li>${r.name}<\/li>`).join('');\n  resultsList.classList.toggle('hidden', results.length === 0);\n}\nsearchInput.addEventListener('input', () => {\n  const q = searchInput.value.trim().toLowerCase();\n  if (!q) { return renderResults([]); }\n  const matched = allPlaces.filter(p => p.name.toLowerCase().includes(q));\n  renderResults(matched.slice(0, 10));\n});\nresultsList.addEventListener('click', (e) => {\n  if (e.target.tagName === 'LI') {\n    const name = e.target.textContent;\n    const place = allPlaces.find(p => p.name === name);\n    if (place) {\n      openPanel(place);\n      map.panTo({ lat: place.lat, lng: place.lng });\n    }\n    renderResults([]);\n  }\n});\nsearchBtn.addEventListener('click', () => {\n  const q = searchInput.value.trim().toLowerCase();\n  const matched = allPlaces.filter(p => p.name.toLowerCase().includes(q));\n  if (matched[0]) {\n    openPanel(matched[0]);\n    map.panTo({ lat: matched[0].lat, lng: matched[0].lng });\n  }\n  renderResults([]);\n});\n\n<\/script>\n\n<script>\ndocument.addEventListener('DOMContentLoaded', () => {\n  \/\/ Global pendingPlaces for chat selection logic\n  let pendingPlaces = [];\n  \/\/ \u2500\u2500\u2500 Element refs \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  const chatToggleBtn = document.getElementById('chat-toggle-btn');\n  const chatWidget    = document.getElementById('chat-widget');\n  const chatSendBtn   = document.getElementById('chat-send-btn');\n  const chatInput     = document.getElementById('chat-input');\n\n  \/\/ \u2500\u2500\u2500 UI helper \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  function appendMsg(side, txt) {\n    const log = document.getElementById('chat-log');\n    const d = document.createElement('div');\n    d.className = `msg ${side}`;\n    d.innerHTML = `<span>${txt}<\/span>`;\n    log.appendChild(d);\n    log.scrollTop = log.scrollHeight;\n  }\n\n  \/\/ \u2500\u2500\u2500 Helper to append AI message with rating UI \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  function appendAIMessage(text) {\n    const log = document.getElementById('chat-log');\n    const container = document.createElement('div');\n    container.className = 'msg ai';\n    container.innerHTML = `<span>${text}<\/span>\n      <div class=\"rating\">\n        <button class=\"rate-btn\" data-rating=\"1\">\ud83d\udc4d<\/button>\n        <button class=\"rate-btn\" data-rating=\"0\">\ud83d\udc4e<\/button>\n      <\/div>`;\n    log.appendChild(container);\n    log.scrollTop = log.scrollHeight;\n  }\n\n  \/\/ \u2500\u2500\u2500 AI Proxy helper \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  async function callChatAPI(messages) {\n    const res = await fetch('\/api\/chat', {\n      method: 'POST',\n      headers: {'Content-Type':'application\/json'},\n      body: JSON.stringify({ messages })\n    });\n    if (!res.ok) throw new Error(await res.text());\n    const { choices } = await res.json();\n    return choices[0].message.content;\n  }\n\n  \/\/ Custom system prompt for ChatGPT\n  const systemInstructions = `Du er en venlig, hj\u00e6lpsom AI-assistent. Hvis brugeren skriver med grammatiske fejl, fort\u00e6l venligt, at du ikke forstod, og bed om pr\u00e6cisering. Hvis du ikke har information lige nu, sig: \"Jeg har desv\u00e6rre ikke den information lige nu, men arbejder p\u00e5 at finde den.\" Stil opklarende sp\u00f8rgsm\u00e5l, n\u00e5r det er n\u00f8dvendigt. Svar altid p\u00e5 dansk i et klart og im\u00f8dekommende sprog.`;\n\n  \/\/ \u2500\u2500\u2500 Main chat function with local category\/search logic \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  async function sendChat() {\n    const raw = chatInput.value.trim();\n    if (!raw) return;\n    appendMsg('user', raw);\n    chatInput.value = '';\n    const q = raw.toLowerCase();\n\n    \/\/ --- Check if the user picked a pending place ---------------------\n    const numericChoice = parseInt(q, 10);\n    if (pendingPlaces.length && (!isNaN(numericChoice) || q.length > 2)) {\n      let chosen = null;\n      if (!isNaN(numericChoice) && numericChoice >= 1 && numericChoice <= pendingPlaces.length) {\n        chosen = pendingPlaces[numericChoice - 1];\n      } else {\n        chosen = pendingPlaces.find(p => p.name.toLowerCase().startsWith(q));\n      }\n      if (chosen) {\n        openPanel(chosen);\n        appendAIMessage(`Viser ${chosen.name} p\u00e5 kortet.`);\n        pendingPlaces = [];\n        return;\n      }\n    }\n\n    \/\/ 1) Exact category match or keyword-mapped category --------------\n    const allCats = Object.fromEntries(categories.map(c => [c.id, c]));\n    const keywordCategoryMap = {\n      fisk: 'restauranter', seafood: 'restauranter', restaurant: 'restauranter', caf\u00e9: 'restauranter',\n      kunst: 'galleri', gallery: 'galleri', oplevelse: 'oplevelser', museum: 'museer'\n    };\n    \/\/ try to resolve the user's query to a category id\n    let resolvedCatId = null;\n    if (allCats[q]) {\n      resolvedCatId = q;\n    } else if (Object.values(allCats).find(c => c.label.toLowerCase() === q)) {\n      resolvedCatId = Object.values(allCats).find(c => c.label.toLowerCase() === q).id;\n    } else {\n      resolvedCatId = keywordCategoryMap[Object.keys(keywordCategoryMap).find(k => q.includes(k))];\n    }\n\n    if (resolvedCatId) {\n      const cat = allCats[resolvedCatId];\n      \/\/ sort by distance if we know where the user is\n      let sorted = cat.items.slice();\n      if (userPosition) {\n        sorted = sorted\n          .map(it => ({ it, d: haversine(userPosition.lat, userPosition.lng, it.lat, it.lng) }))\n          .sort((a, b) => a.d - b.d)\n          .map(o => o.it);\n      }\n      pendingPlaces = sorted; \/\/ remember full list for follow-up\n      const top3 = sorted.slice(0, 3);\n      const bullets = top3.map((p, i) => {\n        let distTxt = '';\n        if (userPosition) {\n          const meters = haversine(userPosition.lat, userPosition.lng, p.lat, p.lng) * 1000;\n          distTxt = meters < 1000\n            ? ` \u2013 ${Math.round(meters)}\u202fm`\n            : ` \u2013 ${(meters \/ 1000).toLocaleString('da-DK', { minimumFractionDigits: 1, maximumFractionDigits: 1 })}\u202fkm`;\n        }\n        return `\u2022 ${p.name}${distTxt}`;\n      }).join('<br>');\n      appendAIMessage(\n        `Jeg fandt ${cat.items.length} ${cat.label.toLowerCase()} i n\u00e6rheden. Her er de 3 t\u00e6tteste:<br>${bullets}<br>` +\n        `Skriv navnet eller tallet p\u00e5 det sted du vil se, eller skriv \u201calle\u201d for hele listen.`\n      );\n      showCategory(cat.id);  \/\/ keep map in sync\n      return;\n    }\n\n    \/* 1\u2011bis) \u2014\u2014 City \/ location search \u2014\u2014 *\/\n    const queryTokens = q.split(\/\\s+\/).filter(t => t.length >= 3);   \/\/ ignore very short words\n    let locMatches = categories.flatMap(c => c.items)\n      .filter(item =>\n        item.addr && queryTokens.some(tok => item.addr.toLowerCase().includes(tok)));\n    if (locMatches.length) {\n      if (userPosition) {\n        locMatches = locMatches\n          .map(it => ({ it, d: haversine(userPosition.lat, userPosition.lng, it.lat, it.lng) }))\n          .sort((a, b) => a.d - b.d)\n          .map(o => o.it);\n      }\n      pendingPlaces = locMatches;                 \/\/ remember for follow\u2011ups\n      const top3 = locMatches.slice(0, 3);\n      const bullets = top3.map(p => `\u2022 ${p.name}`).join('<br>');\n      appendAIMessage(\n        `Jeg fandt ${locMatches.length} steder i omr\u00e5det. Her er de 3 t\u00e6tteste:<br>${bullets}<br>` +\n        `Skriv navnet eller tallet p\u00e5 det sted du vil se, eller skriv \u201calle\u201d for hele listen.`\n      );\n\n      \/\/ Show only these matches on the map\n      clearMarkers();\n      await Promise.all(locMatches.map(addMarker));\n      \/\/ --- Fit map to the matched POIs so the user instantly sees them ----\n      if (locMatches.length) {\n        const bounds = new google.maps.LatLngBounds();\n        locMatches.forEach(p => bounds.extend({ lat: p.lat, lng: p.lng }));\n        map.fitBounds(bounds);\n        \/\/ If all matches share the same coordinate, fallback to a sensible zoom\n        if (bounds.getNorthEast().equals(bounds.getSouthWest())) {\n          map.setZoom(13);\n        }\n      }\n      return;\n    }\n\n    \/\/ 2) Fuzzy search in names\/descriptions ---------------------------\n    let matches = categories.flatMap(c => c.items)\n      .filter(item =>\n        item.name.toLowerCase().includes(q) ||\n        (item.desc && item.desc.toLowerCase().includes(q))\n      );\n    if (userPosition) {\n      matches = matches\n        .map(item => ({ item, d: haversine(userPosition.lat, userPosition.lng, item.lat, item.lng) }))\n        .sort((a, b) => a.d - b.d)\n        .map(o => o.item);\n    }\n    if (matches.length) {\n      const pick = matches[0];\n      openPanel(pick);\n      appendAIMessage(`Jeg fandt \"${pick.name}\". Viser detaljer nu.`);\n      return;\n    }\n\n    \/\/ 3) Fallback to AI\n    try {\n      const reply = await callChatAPI([\n        { role: 'system', content: systemInstructions },\n        { role: 'user', content: raw }\n      ]);\n      appendAIMessage(reply);\n    } catch (err) {\n      appendAIMessage('Jeg forstod desv\u00e6rre ikke helt. Kan du pr\u00f8ve at sp\u00f8rge p\u00e5 en anden m\u00e5de?');\n      console.error(err);\n    }\n  }\n\n  \/\/ expose to inline onkeydown handler\n  window.sendChat = sendChat;\n\n  \/\/ \u2500\u2500\u2500 Wire events \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  chatToggleBtn.addEventListener('click', ()=>chatWidget.classList.toggle('open'));\n  chatSendBtn.addEventListener('click', sendChat);\n  chatInput.addEventListener('keydown', e => { if (e.key==='Enter') sendChat(); });\n});\n\n\/\/ \u2500\u2500\u2500 Feedback rating listener \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\ndocument.addEventListener('click', e => {\n  if (e.target.matches('.rate-btn')) {\n    const rating = e.target.dataset.rating;\n    const msgEl = e.target.closest('.msg.ai');\n    const message = msgEl.querySelector('span').innerText;\n    fetch('\/api\/feedback', {\n      method: 'POST',\n      headers: { 'Content-Type':'application\/json' },\n      body: JSON.stringify({ message, rating })\n    });\n    msgEl.querySelector('.rating').innerHTML = '<em>Tak for din feedback!<\/em>';\n  }\n});\n<\/script>\n\n\n\n<script async defer\n        src=\"https:\/\/maps.googleapis.com\/maps\/api\/js?key=AIzaSyDCQ71JkJwYHfEm3us6JUxpOEDMnZbokzU&libraries=places&callback=initMap\">\n<\/script>\n\n<script>\nfunction initCarousel(container) {\n  let idx = 0;\n  const slides = container.querySelectorAll('.carousel-slide');\n  function show(i) {\n    slides.forEach((s, j)=> s.classList.toggle('active', j===i));\n  }\n  show(idx);\n  container.querySelector('.prev').onclick = ()=> { idx = (idx-1+slides.length)%slides.length; show(idx); };\n  container.querySelector('.next').onclick = ()=> { idx = (idx+1)%slides.length; show(idx); };\n  const navNext = container.querySelector('.next');\n  \/\/ auto-advance every 5 seconds\n  setInterval(() => navNext.click(), 5000);\n  \/\/ attach read-more handlers\n  container.querySelectorAll('.read-more').forEach(link => {\n    link.onclick = e => {\n      e.preventDefault();\n      const full = link.nextElementSibling;\n      link.style.display = 'none';\n      full.style.display = 'inline';\n    };\n  });\n}\ndocument.addEventListener('DOMContentLoaded',()=>{\n  document.querySelectorAll('.info-carousel').forEach(initCarousel);\n  document.querySelectorAll('.review-carousel').forEach(initCarousel);\n});\n<\/script>\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>Liste Oplevelser i Nordjylland | Slow Guide &times; Hej! Hvad kan jeg hj\u00e6lpe dig med?<\/p>","protected":false},"author":266692989,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","_uag_custom_page_level_css":"","footnotes":""},"folder":[26340],"class_list":["post-21","page","type-page","status-publish","hentry"],"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false,"trp-custom-language-flag":false,"newspack-article-block-landscape-large":false,"newspack-article-block-portrait-large":false,"newspack-article-block-square-large":false,"newspack-article-block-landscape-medium":false,"newspack-article-block-portrait-medium":false,"newspack-article-block-square-medium":false,"newspack-article-block-landscape-intermediate":false,"newspack-article-block-portrait-intermediate":false,"newspack-article-block-square-intermediate":false,"newspack-article-block-landscape-small":false,"newspack-article-block-portrait-small":false,"newspack-article-block-square-small":false,"newspack-article-block-landscape-tiny":false,"newspack-article-block-portrait-tiny":false,"newspack-article-block-square-tiny":false,"newspack-article-block-uncropped":false},"uagb_author_info":{"display_name":"paola39806c4773","author_link":"https:\/\/slowguide.dk\/de\/author\/paola39806c4773\/"},"uagb_comment_info":0,"uagb_excerpt":"Liste Oplevelser i Nordjylland | Slow Guide &times; Hej! Hvad kan jeg hj\u00e6lpe dig med?","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/PgyKUJ-l","_links":{"self":[{"href":"https:\/\/slowguide.dk\/de\/wp-json\/wp\/v2\/pages\/21","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/slowguide.dk\/de\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/slowguide.dk\/de\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/slowguide.dk\/de\/wp-json\/wp\/v2\/users\/266692989"}],"replies":[{"embeddable":true,"href":"https:\/\/slowguide.dk\/de\/wp-json\/wp\/v2\/comments?post=21"}],"version-history":[{"count":100,"href":"https:\/\/slowguide.dk\/de\/wp-json\/wp\/v2\/pages\/21\/revisions"}],"predecessor-version":[{"id":3963,"href":"https:\/\/slowguide.dk\/de\/wp-json\/wp\/v2\/pages\/21\/revisions\/3963"}],"wp:attachment":[{"href":"https:\/\/slowguide.dk\/de\/wp-json\/wp\/v2\/media?parent=21"}],"wp:term":[{"taxonomy":"folder","embeddable":true,"href":"https:\/\/slowguide.dk\/de\/wp-json\/wp\/v2\/folder?post=21"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}