{"id":20617,"date":"2025-09-22T09:10:49","date_gmt":"2025-09-22T07:10:49","guid":{"rendered":"https:\/\/visitvendsyssel.dk\/?page_id=20617"},"modified":"2026-05-30T14:46:21","modified_gmt":"2026-05-30T12:46:21","slug":"oplev-vendsyssel","status":"publish","type":"page","link":"https:\/\/visitvendsyssel.dk\/en\/oplev-vendsyssel\/","title":{"rendered":"Discover Vendsyssel"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"20617\" class=\"elementor elementor-20617\" data-elementor-post-type=\"page\">\n\t\t\t\t<div data-particle_enable=\"false\" data-particle-mobile-disabled=\"false\" class=\"elementor-element elementor-element-53b8a28 e-flex e-con-boxed e-con e-parent\" data-id=\"53b8a28\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;sticky&quot;:&quot;top&quot;,&quot;sticky_offset&quot;:200,&quot;sticky_offset_mobile&quot;:120,&quot;sticky_on&quot;:[&quot;desktop&quot;,&quot;tablet&quot;,&quot;mobile&quot;],&quot;sticky_effects_offset&quot;:0,&quot;sticky_anchor_link_offset&quot;:0}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-3c7f92a elementor-widget elementor-widget-html\" data-id=\"3c7f92a\" 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<!DOCTYPE html>\n<html lang=\"da\">\n<head>\n<meta charset=\"utf-8\" \/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" \/>\n<title>3D Button Ribbon<\/title>\n<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Poppins:wght@400;600&display=swap\" rel=\"stylesheet\">\n<style>\n  :root{\n  --txt:#445A5C;\n  --btn-bg:#F4F7F7;\n  --btn-border:#D6DFDF;\n  --btn-hover-hi:#ffffff;\n  --btn-hover-lo:#E3EBEB;\n  --shadow-dark:#C1C9C9;\n  --shadow-light:#FFFFFF;\n  --focus:#9cc;\n\n  \/* knobs *\/\n  --icon: clamp(22px, 3.2vw, 30px);\n}\n\n*{box-sizing:border-box !important;}\nhtml,body{margin:0 !important;}\nbody{font-family:'Poppins',sans-serif !important;background:#fff !important;color:var(--txt) !important;}\n\n\/* ==== WRAPPER + ARROWS ==== *\/\n.scroll-menu-wrapper{\n  position:relative !important;\n  padding:.4rem 2.2rem !important;\n  margin-top: 0rem;\n}\n.scroll-arrow{\n  position:absolute !important; top:50% !important; transform:translateY(-50%) !important;\n  width:1.6rem !important; height:1.6rem !important; border:none !important; border-radius:50% !important;\n  background:#fffffff2 !important; box-shadow:0 2px 6px rgba(0,0,0,.12) !important;\n  color:#6f8185 !important; font-size:1rem !important; line-height:1.6rem !important; text-align:center !important;\n  cursor:pointer !important; z-index:5 !important; opacity:0 !important; pointer-events:none !important; transition:opacity .15s ease !important;\n  display:flex !important; align-items:center !important; justify-content:center !important; padding:0 !important;\n}\n.scroll-left {left:.4rem !important;}\n.scroll-right{right:.4rem !important;}\n.scroll-menu-wrapper.show-left  .scroll-left {opacity:1 !important; pointer-events:auto !important;}\n.scroll-menu-wrapper.show-right .scroll-right{opacity:1 !important; pointer-events:auto !important;}\n\n\/* ==== STRIP ==== *\/\n.scroll-menu{\n  display:flex !important; align-items:center !important; gap:.5rem !important;\n  justify-content:center !important;\n  overflow-x:auto !important; overflow-y:hidden !important; scroll-behavior:smooth !important;\n  -webkit-overflow-scrolling:touch !important; overscroll-behavior-x:contain !important;\n  flex-wrap:nowrap !important; width:100% !important; min-width:0 !important;\n}\n.scroll-menu::-webkit-scrollbar{height:6px !important;}\n.scroll-menu::-webkit-scrollbar-thumb{background:#d3d9da !important; border-radius:8px !important;}\n.scroll-menu::-webkit-scrollbar-track{background:transparent !important;}\n\n.focus-ribbon{\n  display:flex !important; gap:.5rem !important; padding:0 .1rem !important;\n  flex-wrap:nowrap !important; width:max-content !important; flex-shrink:0 !important;\n}\n\n\/* ==== BUTTONS ==== *\/\n.category-button{\n  -webkit-tap-highlight-color:transparent !important;\n  appearance:none !important;\n  border:1px solid var(--btn-border) !important;\n  background:var(--btn-bg) !important;\n  border-radius:.7rem !important;\n  box-shadow:0 1px 0 rgba(0,0,0,.03) !important;\n  cursor:pointer !important;\n\n  display:flex !important; align-items:center !important; gap:0 !important;\n\n  padding:.32rem .6rem !important;\n  line-height:1.2 !important;\n  font-size:clamp(.68rem, 1.05vw, .82rem) !important;\n  font-weight:600 !important; color:var(--txt) !important;\n\n  width:auto !important; flex:0 0 auto !important;\n  min-height:2.1rem !important;\n\n  transition:transform .15s ease, box-shadow .15s ease, background .15s ease, border-color .15s ease, color .15s ease !important;\n  white-space:nowrap !important;\n}\n.category-button img{\n  width:var(--icon) !important; height:var(--icon) !important; object-fit:contain !important; display:block !important; flex:0 0 auto !important;\n  margin-left:-4px !important;\n  margin-right:.22rem !important;\n}\n.category-button span{\n  overflow:hidden !important; text-overflow:ellipsis !important;\n}\n\n\/* Hover \/ Focus *\/\n.category-button:hover,\n.category-button:focus-visible{\n  transform:translateY(-2px) !important;\n  background:linear-gradient(145deg,var(--btn-hover-hi),var(--btn-hover-lo)) !important;\n  border-color:#cdd7d7 !important;\n  box-shadow:3px 3px 6px var(--shadow-dark), -3px -3px 6px var(--shadow-light) !important;\n  outline:none !important;\n}\n\/* Active \/ Selected *\/\n.category-button:active,\n.category-button[aria-pressed=\"true\"],\n.category-button.is-selected{\n  transform:translateY(1px) !important;\n  background:linear-gradient(145deg,#d0dadb,#f5fafa) !important;\n  box-shadow:inset 2px 2px 4px var(--shadow-dark), inset -2px -2px 4px var(--shadow-light) !important;\n  border-color:#c6d0d0 !important; color:#1e2b2c !important;\n}\n.category-button[aria-pressed=\"true\"] img,\n.category-button.is-selected img{filter:none !important;}\n\n\n\n\n\n@media (max-width:767px){\n  .scroll-menu-wrapper{padding:.35rem 2rem !important;}\n  .scroll-arrow{width:1.5rem !important; height:1.5rem !important; font-size:.95rem !important; line-height:1.5rem !important;}\n}\n@media (prefers-reduced-motion:reduce){\n  .category-button{transition:none !important;}\n  .scroll-menu{scroll-behavior:auto !important;}\n}\n<\/style>\n<\/head>\n<body>\n\n<div class=\"scroll-menu-wrapper\" id=\"ribbonWrap\">\n  <button class=\"scroll-arrow scroll-left\" aria-label=\"Scroll left\" type=\"button\">\u2039<\/button>\n\n  <div class=\"scroll-menu\" id=\"categoryMenu\" role=\"tablist\" aria-label=\"Kategorier\">\n    <div class=\"focus-ribbon\">\n\n      <button class=\"category-button\" type=\"button\" aria-pressed=\"false\" data-category=\"oplevelser\">\n        <img decoding=\"async\" src=\"https:\/\/slowguide.dk\/wp-content\/uploads\/2025\/07\/Oplevelser-13.svg\" alt=\"\"><span>Oplevelser<\/span>\n      <\/button>\n\n      <button class=\"category-button\" type=\"button\" aria-pressed=\"false\" data-category=\"museer\">\n        <img decoding=\"async\" src=\"https:\/\/slowguide.dk\/wp-content\/uploads\/2025\/06\/Museer.svg\" alt=\"\"><span>Museer<\/span>\n      <\/button>\n\n      <button class=\"category-button\" type=\"button\" aria-pressed=\"false\" data-category=\"restauranter\">\n        <img decoding=\"async\" src=\"https:\/\/slowguide.dk\/wp-content\/uploads\/2025\/06\/Restauranter.svg\" alt=\"\"><span>Restauranter<\/span>\n      <\/button>\n\n      <button class=\"category-button\" type=\"button\" aria-pressed=\"false\" data-category=\"natteliv\">\n        <img decoding=\"async\" src=\"https:\/\/slowguide.dk\/wp-content\/uploads\/2025\/06\/Natteliv.svg\" alt=\"\"><span>Natteliv<\/span>\n      <\/button>\n\n      <button class=\"category-button\" type=\"button\" aria-pressed=\"false\" data-category=\"butikker\">\n        <img decoding=\"async\" src=\"https:\/\/slowguide.dk\/wp-content\/uploads\/2025\/06\/Butikker.svg\" alt=\"\"><span>Butikker<\/span>\n      <\/button>\n\n      <button class=\"category-button\" type=\"button\" aria-pressed=\"false\" data-category=\"hotel\">\n        <img decoding=\"async\" src=\"https:\/\/slowguide.dk\/wp-content\/uploads\/2025\/06\/Hotel.svg\" alt=\"\"><span>Hotel<\/span>\n      <\/button>\n\n      <button class=\"category-button\" type=\"button\" aria-pressed=\"false\" data-category=\"camping\">\n        <img decoding=\"async\" src=\"https:\/\/slowguide.dk\/wp-content\/uploads\/2025\/06\/Campingpladser.svg\" alt=\"\"><span>Camping<\/span>\n      <\/button>\n\n      <button class=\"category-button\" type=\"button\" aria-pressed=\"false\" data-category=\"gratisoplevelser\">\n        <img decoding=\"async\" src=\"https:\/\/slowguide.dk\/wp-content\/uploads\/2025\/08\/gratisoplevelser.svg\" alt=\"\"><span>Gratis Oplevelser<\/span>\n      <\/button>\n\n    <\/div>\n  <\/div>\n\n  <button class=\"scroll-arrow scroll-right\" aria-label=\"Scroll right\" type=\"button\">\u203a<\/button>\n<\/div>\n\n<div id=\"mapAnchor\" style=\"height:1px;\"><\/div>\n\n<script>\n(function(){\n  const wrap  = document.getElementById('ribbonWrap');\n  const menu  = document.getElementById('categoryMenu');\n  const left  = wrap.querySelector('.scroll-left');\n  const right = wrap.querySelector('.scroll-right');\n\n  function notifySelection(category){\n    if (typeof window.showCategory === 'function'){ try { window.showCategory(category); } catch(e){} }\n    if (typeof window.onCategorySelect === 'function'){ try { window.onCategorySelect(category); } catch(e){} }\n    try { window.dispatchEvent(new CustomEvent('category:select', { detail:{ category } })); } catch(e){}\n    try { window.dataLayer && window.dataLayer.push({ event:'category_select', category }); } catch(e){}\n  }\n\n  function selectCategoryButton(btn){\n    const cat = btn?.dataset?.category || null;\n    if (!cat) return;\n    menu.querySelectorAll('.category-button').forEach(b=>{\n      b.setAttribute('aria-pressed','false'); b.classList.remove('is-selected');\n    });\n    btn.setAttribute('aria-pressed','true'); btn.classList.add('is-selected');\n    notifySelection(cat);\n\n    if (window.innerWidth < 768){\n      const y = (document.getElementById('mapAnchor')?.offsetTop || 0) - wrap.offsetHeight;\n      window.scrollTo({ top:y, behavior:'smooth' });\n    }\n  }\n\n  menu.addEventListener('click', e=>{\n    const btn = e.target.closest('.category-button');\n    if (btn) selectCategoryButton(btn);\n  });\n\n  menu.addEventListener('keydown', (e)=>{\n    const current = document.activeElement.closest('.category-button');\n    if (!current) return;\n    const buttons = Array.from(menu.querySelectorAll('.category-button'));\n    const i = buttons.indexOf(current);\n\n    if (e.key === 'Enter' || e.key === ' '){\n      e.preventDefault(); selectCategoryButton(current);\n    } else if (e.key === 'ArrowRight'){\n      e.preventDefault(); (buttons[i+1]||buttons[i]).focus({preventScroll:false});\n      menu.scrollBy({ left: Math.max(120, current.offsetWidth), behavior:'smooth' });\n    } else if (e.key === 'ArrowLeft'){\n      e.preventDefault(); (buttons[i-1]||buttons[i]).focus({preventScroll:false});\n      menu.scrollBy({ left: -Math.max(120, current.offsetWidth), behavior:'smooth' });\n    }\n  });\n\n  function refreshArrows(){\n    const max = menu.scrollWidth - menu.clientWidth;\n    const atStart = menu.scrollLeft <= 0;\n    const atEnd   = menu.scrollLeft >= Math.max(0, max - 1);\n    wrap.classList.toggle('show-left',  max > 0 && !atStart);\n    wrap.classList.toggle('show-right', max > 0 && !atEnd);\n  }\n  left.addEventListener('click', ()=> menu.scrollBy({ left: -menu.clientWidth*0.6, behavior:'smooth' }));\n  right.addEventListener('click',()=> menu.scrollBy({ left:  menu.clientWidth*0.6, behavior:'smooth' }));\n  menu.addEventListener('scroll', refreshArrows);\n  window.addEventListener('resize', refreshArrows);\n\n  if (document.fonts && document.fonts.ready){ document.fonts.ready.then(refreshArrows); }\n  const imgs = menu.querySelectorAll('img');\n  let pending = imgs.length;\n  if (pending === 0) refreshArrows();\n  imgs.forEach(img=>{\n    if (img.complete) { if(--pending===0) refreshArrows(); }\n    else img.addEventListener('load', ()=>{ if(--pending===0) refreshArrows(); }, {once:true});\n  });\n\n  refreshArrows();\n})();\n<\/script>\n<\/body>\n<\/html>\n\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div data-particle_enable=\"false\" data-particle-mobile-disabled=\"false\" class=\"elementor-element elementor-element-8528186 e-con-full e-flex e-con e-parent\" data-id=\"8528186\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-71d2300 elementor-widget elementor-widget-html\" data-id=\"71d2300\" 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 | Visit Vendsyssel<\/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\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.7.2\/css\/all.min.css\">\n\n<style>\n\/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 GLOBAL \/ ELEMENTOR FULL WIDTH FIX \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\nhtml,\nbody {\n  margin: 0 !important;\n  padding: 0 !important;\n  overflow-x: hidden !important;\n}\n\n.elementor-section,\n.elementor-container,\n.elementor-widget-container,\n.elementor-column,\n.elementor-widget-html {\n  margin: 0 !important;\n  padding: 0 !important;\n  max-width: none !important;\n}\n\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  width: 100vw !important;\n  max-width: 100vw !important;\n  height: calc(100dvh - 58px) !important;\n  margin-left: calc(50% - 50vw) !important;\n  padding-bottom: 0 !important;\n  box-sizing: border-box !important;\n}\n\n\/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 SEARCH BAR \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n#search-container {\n  position: absolute !important;\n  top: 9rem !important;\n  left: 1rem !important;\n  width: min(400px, calc(100vw - 2rem)) !important;\n  max-width: none !important;\n  transform: none !important;\n  z-index: 4000 !important;\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\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\n#search-container #search-btn {\n  padding: 0.75rem !important;\n  border: none !important;\n  background: none !important;\n  cursor: pointer !important;\n}\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\n#search-container #search-results.hidden {\n  display: none !important;\n}\n\n#search-container #search-results li {\n  padding: 0.5rem 1rem !important;\n  cursor: pointer !important;\n}\n\n#search-container #search-results li:hover {\n  background: #f0f0f0 !important;\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#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: 3000;\n  font-family: 'Poppins', system-ui, sans-serif !important;\n}\n\n#info-panel.open {\n  bottom: 200px;\n  padding-bottom: 220px;\n}\n\n#info-panel,\n#info-panel * {\n  font-family: 'Poppins', system-ui, sans-serif !important;\n}\n\n#info-panel h1,\n#info-panel h2,\n#info-panel h3 {\n  color: #111 !important;\n  font-weight: 600 !important;\n  line-height: 1.3 !important;\n  margin: 0 0 .5rem;\n}\n\n#info-panel h1 { font-size: 18px !important; }\n#info-panel h2 { font-size: 16px !important; }\n#info-panel h3 { font-size: 15px !important; }\n\n#info-panel a {\n  color: inherit !important;\n  text-decoration: underline;\n}\n\n#info-panel img {\n  width: 100%;\n  height: 180px;\n  object-fit: cover;\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\/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 DESKTOP INFO PANEL \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\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    border-radius: 0 20px 20px 0;\n    box-shadow: 4px 0 16px rgba(0, 0, 0, 0.25);\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\/* \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: 3000;\n  cursor: pointer;\n  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.25);\n}\n\n\/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 CHAT WIDGET \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\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: 3000;\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: 4000;\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-wrapper {\n  background: #fff;\n}\n\n#chat-input-wrapper input {\n  margin: 0;\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-send-btn {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n\/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 CHAT MESSAGE BUBBLES \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n.msg {\n  margin: 0.5rem 0;\n  max-width: 80%;\n}\n\n.msg.user {\n  margin-left: auto;\n  text-align: right;\n}\n\n.msg.ai {\n  margin-right: auto;\n  text-align: left;\n}\n\n.msg span {\n  display: inline-block;\n  padding: 0.5rem 0.75rem;\n  border-radius: 1rem;\n}\n\n.msg.user span {\n  background: #007bff;\n  color: white;\n  border-bottom-right-radius: 0;\n}\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 MAP MARKER LABEL \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\u2500\u2500\u2500\u2500\u2500\u2500\u2500 CAROUSELS \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n.info-carousel,\n.review-carousel {\n  position: relative;\n  overflow: hidden;\n  border-radius: 12px;\n  margin-bottom: 1rem;\n}\n\n.carousel-slide {\n  display: none;\n  width: 100%;\n}\n\n.carousel-slide.active {\n  display: block;\n}\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\n.carousel-nav.prev { left: 8px; }\n.carousel-nav.next { right: 8px; }\n\n.review-carousel .carousel-nav {\n  display: none;\n}\n\n\/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 BUTTONS \/ RATINGS \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n.btn-route,\n.btn-website {\n  width: 40px;\n  height: 40px;\n  border-radius: 50%;\n  display: inline-flex;\n  justify-content: center;\n  align-items: center;\n  margin-right: 0.5rem;\n  cursor: pointer;\n  border: none;\n}\n\n.btn-route {\n  background: #cceeff;\n  color: #0077cc;\n}\n\n.btn-website {\n  background: #ffddee;\n  color: #cc0066;\n}\n\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.p-4 h2 {\n  margin-bottom: 1rem;\n}\n\n.rating {\n  margin-top: 0.5rem;\n  display: flex;\n  gap: 0.5rem;\n}\n\n.rate-btn {\n  background: transparent;\n  border: none;\n  font-size: 1.2rem;\n  cursor: pointer;\n}\n\n\/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 TABLET \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n@media (min-width: 768px) and (max-width: 1024px) {\n  #map {\n    height: calc(100dvh - 58px) !important;\n  }\n\n  #search-container {\n    \n    left: 50% !important;\n    transform: translateX(-50%) !important;\n    width: min(520px, calc(100vw - 2rem)) !important;\n  }\n}\n\n\/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 MOBILE \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n@media (max-width: 767px) {\n  #map {\n    height: calc(100dvh - 54px) !important;\n  }\n\n  #search-container {\n    top: 7rem !important;\n    left: 0.75rem !important;\n    right: 0.75rem !important;\n    width: auto !important;\n    transform: none !important;\n  }\n\n  #info-panel {\n    height: auto;\n    max-height: 50vh;\n  }\n\n  #info-panel.open {\n    bottom: 0;\n    height: auto;\n    max-height: 50vh;\n    padding-bottom: 1rem;\n  }\n\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  #info-panel .close-btn {\n    width: 32px;\n    height: 32px;\n    padding: 8px;\n    font-size: 1.75rem;\n  }\n\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  .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<\/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  \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  \n{\n  name: \"Glashuset\",\n  categoryId: \"galleri\",\n  lat: 57.3313029,\n  lng: 10.5264821,\n  addr: \"Gasv\u00e6rksvej 40B, 9300 S\u00e6by\",\n  photo: \"https:\/\/slowguide.dk\/wp-content\/uploads\/2025\/06\/Glashuset-Saeby-3.jpg\",\n  desc: \"H\u00e5ndlavet glaskunst i alverdens former og farver \u2013 bes\u00f8g det kreative v\u00e6rksted i S\u00e6by.\"\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  name: \"Galleri 7\",\n  categoryId: \"galleri\",\n  lat: 57.448968173837926,\n  lng: 10.527332706604506,\n  addr: \"Constantiavej 7, 9900 Frederikshavn\",\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 Skulpturgalleri\",\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  name: \"Karina Meedom Atelier\",\n  categoryId: \"galleri\",\n  lat: 57.72679416254216,\n  lng: 10.60098121289852,\n  addr: \"F\u00e6lledvej 15, 9990 Skagen\",\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    \"name\": \"Your Art Caf\u00e9\",\n    \"categoryId\": \"kunsthandvaerk\",\n    \"lat\": 57.33420405365609,\n    \"lng\": 10.522847968703768,\n    \"addr\": \"Algade 14, 9300 S\u00e6by\"\n}\n    ]\n  },\n  \n  \n  \n  \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    \"id\": \"oplevelser\",\n    \"label\": \"Oplevelser\",\n    \"items\": [\n      {\n        \"name\": \"Riverside Voers\u00e5\",\n        \"categoryId\": \"oplevelser\",\n        \"lat\": 57.20733878304331,\n        \"lng\": 10.48562536517127,\n        \"addr\": \"\u00d8stkystvejen 344, 9300 S\u00e6by\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/riverside-voersaa\/\"\n      },\n      {\n        \"name\": \"Aalborg Zoo\",\n        \"categoryId\": \"oplevelser\",\n        \"lat\": 57.03703934941089,\n        \"lng\": 9.898040977193892,\n        \"addr\": \"M\u00f8lleparkvej 63, 9000 Aalborg\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/aalborg-zoo\/\"\n      },\n      {\n        \"name\": \"S\u00e6by Sv\u00f8mmebad\",\n        \"categoryId\": \"oplevelser\",\n        \"lat\": 57.333853162570094,\n        \"lng\": 10.505154932320483,\n        \"addr\": \"R\u00e5dhuspladsen 3, 9300 S\u00e6by\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/saeby-svoemmehal\/\"\n      },\n      {\n        \"name\": \"Jensen Jordb\u00e6r\",\n        \"categoryId\": \"oplevelser\",\n        \"lat\": 57.363322910972386,\n        \"lng\": 10.431105540080814,\n        \"addr\": \"Hestvangvej 6, 9300 S\u00e6by\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/jensen-jordbaer\/\"\n      },\n      {\n      \"name\": \"Strandby Lystb\u00e5dehavn\",\n      \"categoryId\": \"oplevelser\",\n      \"lat\": 57.49195198114826,\n      \"lng\": 10.504194022089804,\n      \"addr\": \"R\u00f8dsp\u00e6ttevej 5, 9970 Strandby, Denmark\",\n      \"link\": \"https:\/\/visitvendsyssel.dk\/strandby-lystbaadehavn\/\"\n    },\n    {\n      \"name\": \"Strandby Erhvervsnetv\u00e6rk\",\n      \"categoryId\": \"oplevelser\",\n      \"lat\": 57.499687191814694,\n      \"lng\": 10.493133740836418,\n      \"addr\": \"web\",\n      \"link\": \"https:\/\/visitvendsyssel.dk\/strandby-erhvervsnetvaerk\/\"\n    },\n     {\n        \"name\": \"Seadog\",\n        \"categoryId\": \"oplevelser\",\n        \"lat\": 57.44015625948644,\n        \"lng\": 10.54953818245318,\n        \"addr\": \"Pier 5 2, 9900 Frederikshavn\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/seadog-frederikhavn\/\"\n      },\n      {\n        \"name\": \"Cloost\u00e5rnet\",\n        \"categoryId\": \"oplevelser\",\n        \"lat\": 57.42123906788744,\n        \"lng\": 10.466656008118221,\n        \"addr\": \"Br\u00f8nderslevvej 61, 9900 Frederikshavn\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/cloostaarnet-frederikshavn\/\"\n      },\n      {\n        \"name\": \"Frederikshavn Sv\u00f8mmehal\",\n        \"categoryId\": \"oplevelser\",\n        \"lat\": 57.4424198333586,\n        \"lng\": 10.534795506982467,\n        \"addr\": \"Parallelvej 8, 9900 Frederikshavn\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/frederikshavn-svoemmehal\/\"\n      },\n      {\n        \"name\": \"Vendsysselfodboldgolf\",\n        \"categoryId\": \"oplevelser\",\n        \"lat\": 57.17290187609308,\n        \"lng\": 10.42904526968968,\n        \"addr\": \"Agerstedvej 5, 9340 Asaa\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/vendsysselfodboldgolf\/\"\n      },\n      {\n        \"name\": \"FUN House\",\n        \"categoryId\": \"oplevelser\",\n        \"lat\": 57.46305106423442,\n        \"lng\": 10.526096978291594,\n        \"addr\": \"Apholmenvej 39, 9900 Frederikshavn, Denmark\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/da_dk\/fun-house\/\"\n      },\n       {\n        \"name\": \"Escape Skagen\",\n        \"categoryId\": \"oplevelser\",\n        \"lat\": 57.724749700794185,\n        \"lng\": 10.576908506675728,\n        \"addr\": \"Trindelvej 19, 9990 Skagen\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/escape-skagen\/\"\n      },\n      {\n        \"name\": \"Langagergaard\",\n        \"categoryId\": \"oplevelser\",\n        \"lat\": 57.65604839323597,\n        \"lng\": 10.446817882483456,\n        \"addr\": \"Kandestedvej 76, Hulsig Skagen\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/langagergaard\/\"\n      },\n       {\n        \"name\": \"Det Gr\u00e5 Fyr\",\n        \"categoryId\": \"oplevelser\",\n        \"lat\": 57.73554042783666,\n        \"lng\": 10.63032054718721,\n        \"addr\": \"Fyrvej 36, 9990 Skagen\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/det-graa-fyr\/\"\n      },\n      {\n        \"name\": \"Dino Golf\",\n        \"categoryId\": \"oplevelser\",\n        \"lat\": 57.720528696914236,\n        \"lng\": 10.543646153081525,\n        \"addr\": \"Gl. Landevej 34, 9990 Skagen\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/dino-golf\/\"\n      },\n      {\n        \"name\": \"Farm Fun\",\n        \"categoryId\": \"oplevelser\",\n        \"lat\": 57.58126659739326,\n        \"lng\": 10.414722987795754,\n        \"addr\": \"Jerupvej 155, 9982 Jerup\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/farm-fun\/\"\n      },\n       {\n        \"name\": \"\u00d8rnereservatet \u2013 Eagle World\",\n        \"categoryId\": \"oplevelser\",\n        \"lat\": 57.60458275006635,\n        \"lng\": 10.315893253300139,\n        \"addr\": \"Skagensvej 107, 9881 Bindslev\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/oernereservatet-eagle-world\/\"\n      },\n       {\n        \"name\": \"Maskinrummet\",\n        \"categoryId\": \"oplevelser\",\n        \"lat\": 57.71522412604612,\n        \"lng\": 10.580634802815474,\n        \"addr\": \"Jollevej 4, 9990 Skagen\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/maskinrummet\/\"\n      },\n       {\n        \"name\": \"Den Svenske S\u00f8mandskirke\",\n        \"categoryId\": \"oplevelser\",\n        \"lat\": 57.71786098577741,\n        \"lng\": 10.582549227300968,\n        \"addr\": \"Vestre Strandvej 24, 9990 Skagen\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/den-svenske-soemandskirke\/\"\n      },\n      {\n        \"name\": \"Sandormen\",\n        \"categoryId\": \"oplevelser\",\n        \"lat\": 57.73924944472511,\n        \"lng\": 10.633678041625368,\n        \"addr\": \"Fyrvej, 9990 Skagen\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/sandormen\/\"\n      },\n      {\n        \"name\": \"Skagen Fodboldgolf\",\n        \"categoryId\": \"oplevelser\",\n        \"lat\": 57.73638470761603,\n        \"lng\": 10.58567026944489,\n        \"addr\": \"Nedre Mosevej 108, 9990 Skagen\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/skagen-fodboldgolf\/\"\n      },\n      {\n        \"name\": \"Skagen Kirke\",\n        \"categoryId\": \"oplevelser\",\n        \"lat\": 57.72147538110343,\n        \"lng\": 10.584986414490997,\n        \"addr\": \"Ved Kirken 2, 9990 Skagen\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/skagen-kirke\/\"\n      },\n      {\n        \"name\": \"Your Art Caf\u00e9\",\n        \"categoryId\": \"oplevelser\",\n        \"lat\": 57.33415438509261,\n        \"lng\": 10.523132956480039,\n        \"addr\": \"Algade 14, 9300 S\u00e6by\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/your-art-cafe\/\"\n      },\n      {\n        \"name\": \"Kulturhus Kappelborg\",\n        \"categoryId\": \"oplevelser\",\n        \"lat\": 57.72267908714008,\n        \"lng\": 10.587714059876317,\n        \"addr\": \"Skolevej 5, 9990 Skagen\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/kulturhus-kappelborg\/\"\n      },\n      {\n        \"name\": \"Nords\u00f8en Oceanarium\",\n        \"categoryId\": \"oplevelser\",\n        \"lat\": 57.58667426146959,\n        \"lng\": 9.980816113195058,\n        \"addr\": \"Willemoesvej 2, 9850 Hirtshals\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/nordsoeen-oceanarium\/\"\n      },\n     \n      {\n        \"name\": \"Skagen Odde Naturcenter\",\n        \"categoryId\": \"oplevelser\",\n        \"lat\": 57.7399746106913,\n        \"lng\": 10.595548866294818,\n        \"addr\": \"B\u00f8jlevejen 66, 9990 Skagen\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/skagen-odde-naturcenter\/\"\n      },\n      {\n        \"name\": \"Skagen Salmon\",\n        \"categoryId\": \"oplevelser\",\n        \"lat\": 57.73912788932755,\n        \"lng\": 10.565535228816294,\n        \"addr\": \"Buttervej 49, 9990 Skagen\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/skagen-salmon\/\"\n      }\n    ]\n },\n  \n  \n \n  \n  {\n    \"id\": \"museer\",\n    \"label\": \"Museer\",\n    \"items\": [\n      {\n        \"name\": \"Voergaard Slot\",\n        \"categoryId\": \"museer\",\n        \"lat\": 57.242682908517175,\n        \"lng\": 10.335417268910359,\n        \"addr\": \"Voerg\u00e5rd 6, 9330 Dronninglund\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/voergaard-slot-saeby\/\"\n      },\n      {\n        \"name\": \"S\u00e6bygg\u00e5rds Slot\",\n        \"categoryId\": \"museer\",\n        \"lat\": 57.33424478894588,\n        \"lng\": 10.47882454852838,\n        \"addr\": \"S\u00e6byg\u00e5rdvej 49, 9300 S\u00e6by, Denmark\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/da_dk\/saebyggaardsslot\/\"\n      },\n       {\n        \"name\": \"Skagen Museum\",\n        \"categoryId\": \"museer\",\n        \"lat\": 57.724841749934235,\n        \"lng\": 10.59690727836862,\n        \"addr\": \"Br\u00f8ndumsvej 4, 9990 Skagen\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/skagen-museum\/\"\n      },\n       {\n        \"name\": \"Skagen Odde Naturcenter\",\n        \"categoryId\": \"museer\",\n        \"lat\": 57.7399746106913,\n        \"lng\": 10.595548866294818,\n        \"addr\": \"B\u00f8jlevejen 66, 9990 Skagen\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/skagen-odde-naturcenter\/\"\n      }\n    ]\n  },\n  \n  \n  \n  \n  {\n    \"id\": \"restauranter\",\n    \"label\": \"Restauranter\",\n    \"items\": [\n      {\n        \"name\": \"Highway 69 S\u00e6by\",\n        \"categoryId\": \"restauranter\",\n        \"lat\": 57.343995633357274,\n        \"lng\": 10.514034919700228,\n        \"addr\": \"Frederikshavnsvej 69, 9300 S\u00e6by\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/highway-69-saeby\/\"\n      },\n      {\n        \"name\": \"Fr\u00f8ken Madsen's Spisehus\",\n        \"categoryId\": \"restauranter\",\n        \"lat\": 57.33476901493331,\n        \"lng\": 10.516642730960609,\n        \"addr\": \"Pindborggade 1B, 9300 S\u00e6by\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/frk-madsen\/\"\n      },\n      {\n        \"name\": \"Bistro V\",\n        \"categoryId\": \"restauranter\",\n        \"lat\": 57.33428226921842,\n        \"lng\": 10.528000152154553,\n        \"addr\": \"Havnen 2, 9300 S\u00e6by\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/da_dk\/bistro-v\/\"\n      },\n      {\n        \"name\": \"S\u00e6by Svogers Spiseri\",\n        \"categoryId\": \"restauranter\",\n        \"lat\": 57.3350010477688,\n        \"lng\": 10.52012384892445,\n        \"addr\": \"Vestergade 51, 9300 S\u00e6by\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/da_dk\/saeby-svogers-spiseri\/\"\n      },\n      {\n        \"name\": \"Caf\u00e9 Mathilde\",\n        \"categoryId\": \"restauranter\",\n        \"lat\": 57.334790414754444,\n        \"lng\": 10.518849911185706,\n        \"addr\": \"Vestergade 29, 9300 S\u00e6by\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/cafe-mathilde\/\"\n      },\n      {\n        \"name\": \"Oste Fruen\",\n        \"categoryId\": \"restauranter\",\n        \"lat\": 57.334341215777286,\n        \"lng\": 10.51801910344969,\n        \"addr\": \"Gr\u00f8nnegade 26, 9300 S\u00e6by\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/da_dk\/oste-fruen\/\"\n      },\n      {\n        \"name\": \"S\u00e6by Bryghus\",\n        \"categoryId\": \"restauranter\",\n        \"lat\": 57.33300587982599,\n        \"lng\": 10.5313932151707,\n        \"addr\": \"Havnen 12b, 9300 S\u00e6by\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/da_dk\/saeby-bryghus\/\"\n      },\n      {\n        \"name\": \"Vinuniverset\",\n        \"categoryId\": \"restauranter\",\n        \"lat\": 57.33478994307606,\n        \"lng\": 10.519579695200207,\n        \"addr\": \"Vestergade 32, 9300 S\u00e6by\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/vinuniverset\/\"\n      },\n        {\n      \"name\": \"Mimis Bistro\",\n      \"categoryId\": \"restauranter\",\n      \"lat\": 57.49448188530688,\n      \"lng\": 10.501308627381588,\n      \"addr\": \"VAuktionskaj 1, 9970 Strandby, Denmark\",\n      \"link\": \"https:\/\/visitvendsyssel.dk\/mimis-bistro\/\"\n    },\n    {\n      \"name\": \"Den Bl\u00e5 Caf\u00e9 i Strandby\",\n      \"categoryId\": \"restauranter\",\n      \"lat\": 57.49246241340273,\n      \"lng\": 10.502795606746155,\n      \"addr\": \"S\u00f8ndre Havnevej 27, 9970 Strandby, Denmark\",\n      \"link\": \"https:\/\/visitvendsyssel.dk\/den-blaa-cafe\/\"\n    },\n    {\n        \"name\": \"Burger King\",\n        \"categoryId\": \"restauranter\",\n        \"lat\": 57.44502925868774,\n        \"lng\": 10.539916804001846,\n        \"addr\": \"Danmarksgade 3, 9900 Frederikshavn\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/da_dk\/burger-king\/\"\n      },\n      {\n        \"name\": \"Burger King\",\n        \"categoryId\": \"restauranter\",\n        \"lat\": 57.455566967121044,\n        \"lng\": 10.015592599106242,\n        \"addr\": \"Frederikshavnsvej 86, 9800 Hj\u00f8rring\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/da_dk\/burger-king\/\"\n      },\n      {\n        \"name\": \"Restaurant Moby Dick\",\n        \"categoryId\": \"restauranter\",\n        \"lat\": 57.43606132854884,\n        \"lng\": 10.535952164372096,\n        \"addr\": \"Boensgade 6 , 9900 Frederikshavn\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/restaurant-moby-dick\/\"\n      },\n       {\n        \"name\": \"Aalb\u00e6k Badehotel\",\n        \"categoryId\": \"restauranter\",\n        \"lat\": 57.594081062064205,\n        \"lng\": 10.413978559183695,\n        \"addr\": \"Skagensvej 42, 9982 Aalb\u00e6k\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/aalbaek-badehotel\/\"\n      },\n      {\n        \"name\": \"Hjorths Badehotel\",\n        \"categoryId\": \"restauranter\",\n        \"lat\": 57.66010902043799,\n        \"lng\": 10.389861672516261,\n        \"addr\": \"Kandebakkevej 17, 9990 Skagen\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/hjorths-badehotel\/\"\n      },\n      {\n        \"name\": \"Plesners Badehotel\",\n        \"categoryId\": \"restauranter\",\n        \"lat\": 57.72238597429572,\n        \"lng\": 10.59300991300038,\n        \"addr\": \"Holstvej 4-8, 9990 Skagen\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/plesners-badehotel\/\"\n      },\n      {\n        \"name\": \"Ruths Hotel\",\n        \"categoryId\": \"restauranter\",\n        \"lat\": 57.7271250722674,\n        \"lng\": 10.521350859509994,\n        \"addr\": \"Hans Ruths Vej 1, 9990 Skagen\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/ruths-hotel\/\"\n      },\n      {\n        \"name\": \"Skagen Hotel\",\n        \"categoryId\": \"restauranter\",\n        \"lat\": 57.723524973427246,\n        \"lng\": 10.592762194146266,\n        \"addr\": \"Sct. Laurentii Vej 35, 9990 Skagen\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/skagen-hotel\/\"\n      },\n        {\n        \"name\": \"Jakobs Caf\u00e9 og Bar\",\n        \"categoryId\": \"restauranter\",\n        \"lat\": 57.721994868465565,\n        \"lng\": 10.5886677171461,\n        \"addr\": \"Havnegade 4A, 9990 Skagen\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/jakobs-cafe-og-bar\/\"\n      },\n      {\n        \"name\": \"Skagen Fiskerestaurant\",\n        \"categoryId\": \"restauranter\",\n        \"lat\": 57.719317933546634,\n        \"lng\": 10.588777206532578,\n        \"addr\": \"Fiskehuskaj 1, 9990 Skagen\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/skagen-fiskerestaurant\/\"\n      },\n      {\n        \"name\": \"Dit Sm\u00f8rrebr\u00f8d\",\n        \"categoryId\": \"restauranter\",\n        \"lat\": 57.720829193819554,\n        \"lng\": 10.590002592107242,\n        \"addr\": \"\u00d8stre Strandvej 1, 9990 Skagen\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/dit-smoerrebroed\/\"\n      },\n      {\n        \"name\": \"Green\u2019s Pub og Caf\u00e9\",\n        \"categoryId\": \"restauranter\",\n        \"lat\": 57.721837102530934,\n        \"lng\": 10.589186755658115,\n        \"addr\": \"Havnevej 3, 9990 Skagen\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/greens-pub-og-cafe\/\"\n      },\n      {\n        \"name\": \"Restaurant Asia\",\n        \"categoryId\": \"restauranter\",\n        \"lat\": 57.7216122281256,\n        \"lng\": 10.587785388189623,\n        \"addr\": \"Sct. Laurentii Vej 63A, 9990 Skagen\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/restaurant-asia\/\"\n      },\n      {\n        \"name\": \"Restaurant De 2 Have\",\n        \"categoryId\": \"restauranter\",\n        \"lat\": 57.73972433756743,\n        \"lng\": 10.634124469128066,\n        \"addr\": \"Fyrvej 42, 9990 Skagen\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/restaurant-de-2-have\/\"\n      },\n      {\n        \"name\": \"Restaurant Pakhuset\",\n        \"categoryId\": \"restauranter\",\n        \"lat\": 57.71861256379849,\n        \"lng\": 10.586967956153446,\n        \"addr\": \"R\u00f8dsp\u00e6ttevej 6, 9990 Skagen\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/restaurant-pakhuset\/\"\n      },\n      {\n        \"name\": \"J\u00f8rgens Spisehus\",\n        \"categoryId\": \"restauranter\",\n        \"lat\": 57.717546236845436,\n        \"lng\": 10.584547831290264,\n        \"addr\": \"Sardinvej 7, 9990 Skagen\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/joergens-spisehus\/\"\n      },\n      {\n        \"name\": \"T\u00d8RST Cocktailbar\",\n        \"categoryId\": \"restauranter\",\n        \"lat\": 57.721093868338215,\n        \"lng\": 10.589674245163637,\n        \"addr\": \"Havnen 11, 9990 Skagen\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/toerst\/\"\n      }\n    ]\n  },\n  \n  \n  \n  {\n    \"id\": \"butikker\",\n    \"label\": \"Butikker\",\n    \"items\": [\n      {\n        \"name\": \"Ravv\u00e6rkstedet\",\n        \"categoryId\": \"butikker\",\n        \"lat\": 57.54115835033085,\n        \"lng\": 10.08832068448713,\n        \"addr\": \"H\u00f8jtvedvej 7 Mygdal, 9800 Hj\u00f8rring\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/ravvaerkstedet\/\"\n      },\n      {\n        \"name\": \"Kjoleg\u00e5rden S\u00e6by\",\n        \"categoryId\": \"butikker\",\n        \"lat\": 57.357721760268994,\n        \"lng\": 10.42569673558205,\n        \"addr\": \"Karupvej 51, 9300 S\u00e6by\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/kjolegaarden-i-saeby\/\"\n      },\n      {\n        \"name\": \"Glashus S\u00e6by\",\n        \"categoryId\": \"butikker\",\n        \"lat\": 57.33131656031861,\n        \"lng\": 10.529063741020181,\n        \"addr\": \"Gasv\u00e6rksvej 40A, 9300 S\u00e6by\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/glashuset\/\"\n      },\n      {\n        \"name\": \"S\u00e6by Cykler\",\n        \"categoryId\": \"butikker\",\n        \"lat\": 57.346076257773014,\n        \"lng\": 10.510766539209339,\n        \"addr\": \"Boelsmindevej 5, 9300 S\u00e6by\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/saeby_cykler\/\"\n      },\n      {\n        \"name\": \"Torvets Kaffe og Chokolade\",\n        \"categoryId\": \"butikker\",\n        \"lat\": 57.33432878544417,\n        \"lng\": 10.517954761881262,\n        \"addr\": \"Gr\u00f8nnegade 26, 9300 S\u00e6by\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/da_dk\/torvets-kaffe-og-chokolade\/\"\n      },\n      {\n        \"name\": \"Fru B\",\n        \"categoryId\": \"butikker\",\n        \"lat\": 57.334143,\n        \"lng\": 10.518808,\n        \"addr\": \"Laurits Christensens Vej 53, 9300 S\u00e6by\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/da_dk\/fru-b\/\"\n      },\n      {\n        \"name\": \"Thiele S\u00e6by\",\n        \"categoryId\": \"butikker\",\n        \"lat\": 57.334004,\n        \"lng\": 10.516663,\n        \"addr\": \"Gr\u00f8nnegade 14, 9300 S\u00e6by, Denmark\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/da_dk\/thiele-saeby\/\"\n      },\n      {\n        \"name\": \"Annette\",\n        \"categoryId\": \"butikker\",\n        \"lat\": 57.33487011009921,\n        \"lng\": 10.518270195813598,\n        \"addr\": \"Vestergade 23, 9300 S\u00e6by, Denmark\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/da_dk\/annette-butik\/\"\n      },\n      {\n        \"name\": \"Super Brugsen S\u00e6by\",\n        \"categoryId\": \"butikker\",\n        \"lat\": 57.333260277513254,\n        \"lng\": 10.51500091838788,\n        \"addr\": \"Chr Pedersensvej 4, 9300 S\u00e6by, Denmark\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/da_dk\/super-brugsen-saeby\/\"\n      },\n      {\n        \"name\": \"Slagter Tranholm\",\n        \"categoryId\": \"butikker\",\n        \"lat\": 57.33480952673388,\n        \"lng\": 10.519687116948793,\n        \"addr\": \"Vestergade 32 A, 9300 S\u00e6by, Denmark\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/da_dk\/slagter-tranholm\/\"\n      },\n      {\n        \"name\": \"Vinuniverset\",\n        \"categoryId\": \"butikker\",\n        \"lat\": 57.33478994307606,\n        \"lng\": 10.519579695200207,\n        \"addr\": \"Vestergade 32, 9300 S\u00e6by\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/vinuniverset\/\"\n      },\n      {\n        \"name\": \"Kon-tur\",\n        \"categoryId\": \"butikker\",\n        \"lat\": 57.33456656482843,\n        \"lng\": 10.517081203837778,\n        \"addr\": \"Vestergade 15, 9300 S\u00e6by\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/kontur\/\"\n      },\n       {\n      \"name\": \"Brugsen Strandby\",\n      \"categoryId\": \"butikker\",\n      \"lat\": 57.494435385136,\n      \"lng\": 10.500952344183982,\n      \"addr\": \"Havnevej 29, 9970 Strandby, Denmark\",\n      \"link\": \"https:\/\/visitvendsyssel.dk\/brugsen-strandby\/\"\n    },\n    {\n      \"name\": \"Knud Thomsen Fiskeeksport\",\n      \"categoryId\": \"butikker\",\n      \"lat\": 57.494839348286014,\n      \"lng\": 10.501731735697092,\n      \"addr\": \"Hyttefadsvej 6, 9970 Strandby , Denmark\",\n      \"link\": \"https:\/\/visitvendsyssel.dk\/knud-thomsen-fiskeeksport\/\"\n    },\n\n      {\n        \"name\": \"K\u00e6re B\u00f8rn\",\n        \"categoryId\": \"butikker\",\n        \"lat\": 57.446312,\n        \"lng\": 10.507822,\n        \"addr\": \"Hj\u00f8rringvej 143F, 9900 Frederikshavn\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/kaere-boern-coolshop\/\"\n      },\n      {\n        \"name\": \"Bl\u00e5 Kors Genbrug\",\n        \"categoryId\": \"butikker\",\n        \"lat\": 57.436372853343194,\n        \"lng\": 10.534557493682987,\n        \"addr\": \"L\u00e6s\u00f8gade 16, 9900 Frederikshavn\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/blaa-kors\/\"\n      },\n      {\n        \"name\": \"THIELE Frederikshavn\",\n        \"categoryId\": \"butikker\",\n        \"lat\": 57.43932724403455,\n        \"lng\": 10.535507752946074,\n        \"addr\": \"Danmarksgade 70 A, 9900 Frederikshavn\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/thiele-frederikshavn\/\"\n      },\n      {\n        \"name\": \"HUSET HOLST A\/S\",\n        \"categoryId\": \"butikker\",\n        \"lat\": 57.72315384663844,\n        \"lng\": 10.588167532934769,\n        \"addr\": \"Chr. Xs Vej 16, 9990 Skagen\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/huset-holst-a-s\/\"\n      },\n      {\n        \"name\": \"Stenbroen Guld & Ure\",\n        \"categoryId\": \"butikker\",\n        \"lat\": 57.722182214474266,\n        \"lng\": 10.58822094617874,\n        \"addr\": \"Sct. Laurentii Vej 48, 9990 Skagen\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/stenbroen-guld-og-ure\/\"\n      },\n       {\n        \"name\": \"BySKAGEN\",\n        \"categoryId\": \"butikker\",\n        \"lat\": 57.72240421044665,\n        \"lng\": 10.58521492601584,\n        \"addr\": \"Sct. Laurentii Vej 62A, 9990 Skagen\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/byskagen\/\"\n      },\n        {\n        \"name\": \"Skagen Bageri og Caf\u00e9\",\n        \"categoryId\": \"butikker\",\n        \"lat\": 57.72000368741943,\n        \"lng\": 10.583961407175575,\n        \"addr\": \"Sct. Laurentiivej 82, 9990 Skagen\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/skagen-bageri-og-cafe\/\"\n      },\n      {\n        \"name\": \"Bolcheriet \u2013 Skagen\",\n        \"categoryId\": \"butikker\",\n        \"lat\": 57.721671439213246,\n        \"lng\": 10.588961175508446,\n        \"addr\": \"Havnevej 6, 9990 Skagen\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/bolcheriet\/\"\n      },\n     \n      {\n        \"name\": \"Pier 1\",\n        \"categoryId\": \"butikker\",\n        \"lat\": 57.718380208869526,\n        \"lng\": 10.586615639923037,\n        \"addr\": \"Nordkajen 2, 9900 Skagen\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/pier-1\/\"\n      },\n       {\n        \"name\": \"Showroom ved Galleri Bo\",\n        \"categoryId\": \"butikker\",\n        \"lat\": 57.72141158515958,\n        \"lng\": 10.589198068392417,\n        \"addr\": \"Havnevej 10, 9990 Skagen\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/galleri-skagen\/\"\n      },\n      {\n        \"name\": \"Meny\",\n        \"categoryId\": \"butikker\",\n        \"lat\": 57.729720146401675,\n        \"lng\": 10.54956073750628,\n        \"addr\": \"Doggerbanke 2, 9990 Skagen\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/meny\/\"\n      },\n      {\n        \"name\": \"North Coast\",\n        \"categoryId\": \"butikker\",\n        \"lat\": 57.72241899849636,\n        \"lng\": 10.589214227551352,\n        \"addr\": \"Sct. Laurentii Vej 42, 9990 Skagen\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/north-coast\/\"\n      },\n      {\n        \"name\": \"Sko\u00e6sken\",\n        \"categoryId\": \"butikker\",\n        \"lat\": 57.72219647223281,\n        \"lng\": 10.588445933342777,\n        \"addr\": \"Sct. Laurentii Vej 46c, 9990 Skagen\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/skoaesken\/\"\n      },\n      {\n        \"name\": \"THIELE Skagen\",\n        \"categoryId\": \"butikker\",\n        \"lat\": 57.721502571816565,\n        \"lng\": 10.58674062023989,\n        \"addr\": \"Sct. Laurentii Vej 69, 9990 Skagen\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/thiele-skagen\/\"\n      },\n      {\n        \"name\": \"Your Art Caf\u00e9\",\n        \"categoryId\": \"butikker\",\n        \"lat\": 57.33415438509261,\n        \"lng\": 10.523132956480039,\n        \"addr\": \"Algade 14, 9300 S\u00e6by\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/your-art-cafe\/\"\n      },\n      {\n        \"name\": \"Butik Skagen\",\n        \"categoryId\": \"butikker\",\n        \"lat\": 57.722067336899386,\n        \"lng\": 10.587255895891877,\n        \"addr\": \"Sct. Laurentii Vej 56, 9990 Skagen\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/butik-skagen\/\"\n      },\n      {\n        \"name\": \"FF Handel Skagen\",\n        \"categoryId\": \"butikker\",\n        \"lat\": 57.71960880389519,\n        \"lng\": 10.595667034097191,\n        \"addr\": \"Havnevagtvej 12, 9990 Skagen\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/ff-handel-skagen\/\"\n      },\n      {\n        \"name\": \"Skagen FRISK \u2013 Fisk & Skaldyr\",\n        \"categoryId\": \"butikker\",\n        \"lat\": 57.721534632484804,\n        \"lng\": 10.594187348470465,\n        \"addr\": \"Isvej 1, 9990 Skagen\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/skagen-frisk-fisk-skaldyr\/\"\n      },\n      {\n        \"name\": \"Skagen Ostehus\",\n        \"categoryId\": \"butikker\",\n        \"lat\": 57.7208676008143,\n        \"lng\": 10.589616927639804,\n        \"addr\": \"Havnevej 14, 9990 Skagen\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/skagen-ostehus\/\"\n      },\n      {\n        \"name\": \"Vinoble Skagen\",\n        \"categoryId\": \"butikker\",\n        \"lat\": 57.72013210751105,\n        \"lng\": 10.588930444207914,\n        \"addr\": \"Vestre Strandvej 4, 9990 Skagen\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/vinoble-skagen\/\"\n      }\n\n\n\n    ]\n  },\n  \n  \n  \n  \n  \n  {\n    id: \"camping\",\n    label: \"Camping\",\n    items: [\n     {\n      \"name\": \"Nordstrand Camping\",\n      \"categoryId\": \"camping\",\n      \"lat\": 57.464425558925065,\n      \"lng\": 10.527762712336868,\n      \"addr\": \"Apholmenvej 40, 9900 Frederikshavn\",\n      \"link\": \"https:\/\/visitvendsyssel.dk\/nordstrand-camping-frederikhavn\/\"\n     },\n      {\n      \"name\": \"First Camp Grenen Strand\",\n      \"categoryId\": \"camping\",\n      \"lat\": 57.731251,\n      \"lng\": 10.613962,\n      \"addr\": \"Fyrvej 16, 9990 Skagen\",\n      \"link\": \"https:\/\/visitvendsyssel.dk\/first-camp-grenen-strand\/\"\n    },\n    {\n      \"name\": \"First Camp R\u00e5bjerg Mile\",\n      \"categoryId\": \"camping\",\n      \"lat\": 57.653700,\n      \"lng\": 10.452270,\n      \"addr\": \"Kandestedvej 55, 9990 Skagen\",\n      \"link\": \"https:\/\/visitvendsyssel.dk\/first-camp-raabjerg-mile\/\"\n    },\n    {\n      \"name\": \"Skagen Sydstrand Camping\",\n      \"categoryId\": \"camping\",\n      \"lat\": 57.644351,\n      \"lng\": 10.462200,\n      \"addr\": \"\u00c5lb\u00e6kvej 288, 9982 \u00c5lb\u00e6k\",\n      \"link\": \"https:\/\/visitvendsyssel.dk\/skagen-sydstrand-camping\/\"\n    },\n    {\n      \"name\": \"Skiveren Camping\",\n      \"categoryId\": \"camping\",\n      \"lat\": 57.616404,\n      \"lng\": 10.279277,\n      \"addr\": \"Niels Skiverens Vej 5-7, 9982 \u00c5lb\u00e6k\",\n      \"link\": \"https:\/\/visitvendsyssel.dk\/skiveren-camping\/\"\n    },\n    {\n      \"name\": \"Poul Eeg Camping\",\n      \"categoryId\": \"camping\",\n      \"lat\": 57.734494,\n      \"lng\": 10.604090,\n      \"addr\": \"B\u00f8jlevejen 21, 9990 Skagen\",\n      \"link\": \"https:\/\/visitvendsyssel.dk\/poul-eeg-camping\/\"\n    }\n   \n    ]\n  },\n  \n \n  \n {\n  \"id\": \"hotel\",\n  \"label\": \"Hoteller\",\n  \"items\": [\n    {\n      \"name\": \"Strandby Badehotel\",\n      \"categoryId\": \"hotel\",\n      \"lat\": 57.49414340870556,\n      \"lng\": 10.498784285833919,\n      \"addr\": \"Havnevej 11, 9970 Strandby, Denmark\",\n      \"link\": \"https:\/\/visitvendsyssel.dk\/strandby-badehotel\/\"\n    },\n    {\n      \"name\": \"Danhostel Frederikshavn\",\n      \"categoryId\": \"hotel\",\n      \"lat\": 57.43669255371079,\n      \"lng\": 10.535033688037927,\n      \"addr\": \"L\u00e6s\u00f8gade 18, 9900 Frederikshavn\",\n      \"link\": \"https:\/\/visitvendsyssel.dk\/danhostel-frederikshavn-city\/\"\n    },\n    {\n      \"name\": \"Quality Hotel The Reef\",\n      \"categoryId\": \"hotel\",\n      \"lat\": 57.439003155510285,\n      \"lng\": 10.53693045513972,\n      \"addr\": \"Tordenskjoldsgade 14, 9900 Frederikshavn\",\n      \"link\": \"https:\/\/visitvendsyssel.dk\/quality-hotel-the-reef\/\"\n    },\n    {\n      \"name\": \"Color Hotel Skagen\",\n      \"categoryId\": \"hotel\",\n      \"lat\": 57.72329789856428,\n      \"lng\": 10.556616964793267,\n      \"addr\": \"Gl. Landevej 39, 9990 Skagen\",\n      \"link\": \"https:\/\/visitvendsyssel.dk\/color-hotel-skagen\/\"\n    },\n    {\n      \"name\": \"Langagergaard\",\n      \"categoryId\": \"hotel\",\n      \"lat\": 57.65604839323597,\n      \"lng\": 10.446817882483456,\n      \"addr\": \"Kandestedvej 76, Hulsig Skagen\",\n      \"link\": \"https:\/\/visitvendsyssel.dk\/langagergaard\/\"\n    },\n    {\n      \"name\": \"Br\u00f8ndums Hotel\",\n      \"categoryId\": \"hotel\",\n      \"lat\": 57.72477832189682,\n      \"lng\": 10.598362838523878,\n      \"addr\": \"Anchersvej 3, 9990 Skagen\",\n      \"link\": \"https:\/\/visitvendsyssel.dk\/broendums-hotel\/\"\n    },\n    {\n      \"name\": \"Danhostel Skagen\",\n      \"categoryId\": \"hotel\",\n      \"lat\": 57.72179842360213,\n      \"lng\": 10.568323786423312,\n      \"addr\": \"Rolighedsvej 2, 9990 Skagen\",\n      \"link\": \"https:\/\/visitvendsyssel.dk\/danhostel-skagen\/\"\n    },\n    {\n      \"name\": \"Foldens Hotel\",\n      \"categoryId\": \"hotel\",\n      \"lat\": 57.7231028983197,\n      \"lng\": 10.59174909002715,\n      \"addr\": \"Sct. Laurentii Vej 41, 9990 Skagen\",\n      \"link\": \"https:\/\/visitvendsyssel.dk\/foldens-hotel\/\"\n    },\n    {\n      \"name\": \"Aalb\u00e6k Badehotel\",\n      \"categoryId\": \"hotel\",\n      \"lat\": 57.594081062064205,\n      \"lng\": 10.413978559183695,\n      \"addr\": \"Skagensvej 42, 9982 Aalb\u00e6k\",\n      \"link\": \"https:\/\/visitvendsyssel.dk\/aalbaek-badehotel\/\"\n    },\n    {\n      \"name\": \"Hjorths Badehotel\",\n      \"categoryId\": \"hotel\",\n      \"lat\": 57.66010902043799,\n      \"lng\": 10.389861672516261,\n      \"addr\": \"Kandebakkevej 17, 9990 Skagen\",\n      \"link\": \"https:\/\/visitvendsyssel.dk\/hjorths-badehotel\/\"\n    },\n    {\n      \"name\": \"H\u00f8jengran Time Share\",\n      \"categoryId\": \"hotel\",\n      \"lat\": 57.72154061327354,\n      \"lng\": 10.528941853481173,\n      \"addr\": \"Flagbakkevej 28, 9990 Skagen\",\n      \"link\": \"https:\/\/visitvendsyssel.dk\/hoejengran-time-share\/\"\n    },\n    {\n      \"name\": \"Plesners Badehotel\",\n      \"categoryId\": \"hotel\",\n      \"lat\": 57.72238597429572,\n      \"lng\": 10.59300991300038,\n      \"addr\": \"Holstvej 4-8, 9990 Skagen\",\n      \"link\": \"https:\/\/visitvendsyssel.dk\/plesners-badehotel\/\"\n    },\n    {\n      \"name\": \"Ruths Hotel\",\n      \"categoryId\": \"hotel\",\n      \"lat\": 57.7271250722674,\n      \"lng\": 10.521350859509994,\n      \"addr\": \"Hans Ruths Vej 1, 9990 Skagen\",\n      \"link\": \"https:\/\/visitvendsyssel.dk\/ruths-hotel\/\"\n    },\n    {\n      \"name\": \"Skagen Hotel\",\n      \"categoryId\": \"hotel\",\n      \"lat\": 57.723524973427246,\n      \"lng\": 10.592762194146266,\n      \"addr\": \"Sct. Laurentii Vej 35, 9990 Skagen\",\n      \"link\": \"https:\/\/visitvendsyssel.dk\/skagen-hotel\/\"\n    },\n    {\n      \"name\": \"Hotel Inger\",\n      \"categoryId\": \"hotel\",\n      \"lat\": 57.6583774642392,\n      \"lng\": 10.461128538000253,\n      \"addr\": \"Hulsigvej 17, 9990 Skagen\",\n      \"link\": \"https:\/\/visitvendsyssel.dk\/hotel-inger\/\"\n    },\n    {\n      \"name\": \"Hotel Marie\",\n      \"categoryId\": \"hotel\",\n      \"lat\": 57.72046795090024,\n      \"lng\": 10.589085073890962,\n      \"addr\": \"Havneplads 6, 9990 Skagen\",\n      \"link\": \"https:\/\/visitvendsyssel.dk\/hotel-marie\/\"\n    },\n    {\n      \"name\": \"Hotel Tannishus\",\n      \"categoryId\": \"hotel\",\n      \"lat\": 57.59323968383357,\n      \"lng\": 10.184604021861302,\n      \"addr\": \"Tannisbugtvej 123, Tversted Strand, 9881 Bindslev\",\n      \"link\": \"https:\/\/visitvendsyssel.dk\/hotel-tannishus\/\"\n    },\n    {\n      \"name\": \"Skagen Strand Feriecenter\",\n      \"categoryId\": \"hotel\",\n      \"lat\": 57.66052217344832,\n      \"lng\": 10.465401440105477,\n      \"addr\": \"Tranevej 108, Hulsig, 9990 Skagen\",\n      \"link\": \"https:\/\/visitvendsyssel.dk\/skagen-strand-feriecenter\/\"\n    },\n    {\n      \"name\": \"Skagen Harbour Hotel\",\n      \"categoryId\": \"hotel\",\n      \"lat\": 57.71759557882314,\n      \"lng\": 10.582007185929974,\n      \"addr\": \"Vestre Strandvej 28, 9990 Skagen\",\n      \"link\": \"https:\/\/visitvendsyssel.dk\/skagen-harbour-hotel\/\"\n    },\n    {\n      \"name\": \"Skagen Motel\",\n      \"categoryId\": \"hotel\",\n      \"lat\": 57.722254790773704,\n      \"lng\": 10.573531315863042,\n      \"addr\": \"Frederikshavnsvej 8, 9990 Skagen\",\n      \"link\": \"https:\/\/visitvendsyssel.dk\/skagen-motel\/\"\n    }\n  ]\n},\n\n\n  \n  {\n    \"id\": \"natteliv\",\n    \"label\": \"Natteliv\",\n    \"items\": [\n      {\n        \"name\": \"Buddy Holly\",\n        \"categoryId\": \"natteliv\",\n        \"lat\": 57.72079446586812,\n        \"lng\": 10.58964816097287,\n        \"addr\": \"Havnevej 16, 9990 Skagen\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/buddy-holly\/\"\n      },\n      {\n        \"name\": \"Green\u2019s Pub og Caf\u00e9\",\n        \"categoryId\": \"natteliv\",\n        \"lat\": 57.721837102530934,\n        \"lng\": 10.589186755658115,\n        \"addr\": \"Havnevej 3, 9990 Skagen\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/greens-pub-og-cafe\/\"\n      },\n       {\n        \"name\": \"T\u00d8RST Cocktailbar\",\n        \"categoryId\": \"natteliv\",\n        \"lat\": 57.721093868338215,\n        \"lng\": 10.589674245163637,\n        \"addr\": \"Havnen 11, 9990 Skagen\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/toerst\/\"\n      },\n      {\n        \"name\": \"Jakobs Caf\u00e9 og Bar\",\n        \"categoryId\": \"natteliv\",\n        \"lat\": 57.721994868465565,\n        \"lng\": 10.5886677171461,\n        \"addr\": \"Havnegade 4A, 9990 Skagen\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/jakobs-cafe-og-bar\/\"\n      }\n    ]\n  },\n  \n  {\n    \"id\": \"gratisoplevelser\",\n    \"label\": \"Gratis Oplevelser\",\n    \"items\": [\n      {\n        \"name\": \"Den Svenske S\u00f8mandskirke\",\n        \"categoryId\": \"gratisoplevelser\",\n        \"lat\": 57.71786098577741,\n        \"lng\": 10.582549227300968,\n        \"addr\": \"Vestre Strandvej 24, 9990 Skagen\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/den-svenske-soemandskirke\/\"\n      },\n      {\n        \"name\": \"Skagen Kirke\",\n        \"categoryId\": \"gratisoplevelser\",\n        \"lat\": 57.72147538110343,\n        \"lng\": 10.584986414490997,\n        \"addr\": \"Ved Kirken 2, 9990 Skagen\",\n        \"link\": \"https:\/\/visitvendsyssel.dk\/skagen-kirke\/\"\n      },\n       {\n      \"name\": \"Grenen\",\n      \"categoryId\": \"gratisoplevelser\",\n      \"lat\": 57.738892737333835,\n      \"lng\": 10.633860055705311,\n      \"addr\": \"Fyrvej 38, 9990 Skagen\",\n      \"link\": \"https:\/\/visitvendsyssel.dk\/gratis-oplevelser\/\"\n    },\n    {\n      \"name\": \"Vippefyret\",\n      \"categoryId\": \"gratisoplevelser\",\n      \"lat\": 57.726807,\n      \"lng\": 10.608249,\n      \"addr\": \"Fyrvej 1, 9990 Skagen\",\n      \"link\": \"https:\/\/visitvendsyssel.dk\/gratis-oplevelser\/\"\n    },\n    {\n      \"name\": \"Lokalsamlingen Skagen\",\n      \"categoryId\": \"gratisoplevelser\",\n      \"lat\": 57.7236,\n      \"lng\": 10.5831,\n      \"addr\": \"Sct. Laurentii Vej 113, 9990 Skagen\",\n      \"link\": \"https:\/\/visitvendsyssel.dk\/gratis-oplevelser\/\"\n    },\n    {\n      \"name\": \"Kompasrosen af Cronhammar (Solnedgangspladsen)\",\n      \"categoryId\": \"gratisoplevelser\",\n      \"lat\": 57.72940208397021,\n      \"lng\": 10.521759353703056,\n      \"addr\": \"Solnedgangen 2, 9990 Skagen\",\n      \"link\": \"https:\/\/visitvendsyssel.dk\/gratis-oplevelser\/\"\n    },\n    {\n      \"name\": \"Den Tilsandede Kirke\",\n      \"categoryId\": \"gratisoplevelser\",\n      \"lat\": 57.713631,\n      \"lng\": 10.550506,\n      \"addr\": \"Gammel Landevej 63, 9990 Skagen\",\n      \"link\": \"https:\/\/visitvendsyssel.dk\/gratis-oplevelser\/\"\n    },\n    {\n      \"name\": \"R\u00e5bjerg Mile\",\n      \"categoryId\": \"gratisoplevelser\",\n      \"lat\": 57.6542065979989,\n      \"lng\": 10.408176588261528,\n      \"addr\": \"R\u00e5bjerg Mile Vej 2, 9990 Skagen (p-pladsen ved milen)\",\n      \"link\": \"https:\/\/visitvendsyssel.dk\/gratis-oplevelser\/\"\n    },\n    {\n      \"name\": \"Palmestranden (sommeroplevelse)\",\n      \"categoryId\": \"gratisoplevelser\",\n      \"lat\": 57.462833,\n      \"lng\": 10.537488,\n      \"addr\": \"Nordre Strandvej, 9900 Frederikshavn\",\n      \"link\": \"https:\/\/visitvendsyssel.dk\/gratis-oplevelser\/\"\n    },\n    {\n      \"name\": \"Blaksh\u00f8j J\u00e6ttestue\",\n      \"categoryId\": \"gratisoplevelser\",\n      \"lat\": 57.395041,\n      \"lng\": 10.414991,\n      \"addr\": \"Blaksh\u00f8jg\u00e5rdsvej 6, 9900 Frederikshavn\",\n      \"link\": \"https:\/\/visitvendsyssel.dk\/gratis-oplevelser\/\"\n    },\n    {\n      \"name\": \"Bangsbo Botaniske Have\",\n      \"categoryId\": \"gratisoplevelser\",\n      \"lat\": 57.420027,\n      \"lng\": 10.5017654,\n      \"addr\": \"Dronning Margrethesv Vej 3, 9900 Frederikshavn\",\n      \"link\": \"https:\/\/visitvendsyssel.dk\/gratis-oplevelser\/\"\n    },\n    {\n      \"name\": \"Pikkerbakken (udsigtspunkt)\",\n      \"categoryId\": \"gratisoplevelser\",\n      \"lat\": 57.41603,\n      \"lng\": 10.513372,\n      \"addr\": \"Dronningestien, 9900 Frederikshavn\",\n      \"link\": \"https:\/\/visitvendsyssel.dk\/gratis-oplevelser\/\"\n    },\n    {\n      \"name\": \"Bindslev Gl. Elv\u00e6rk\",\n      \"categoryId\": \"gratisoplevelser\",\n      \"lat\": 57.53898,\n      \"lng\": 10.18692,\n      \"addr\": \"Sdr. Bindslevvej 2, 9881 Bindslev\",\n      \"link\": \"https:\/\/visitvendsyssel.dk\/gratis-oplevelser\/\"\n    },\n    {\n      \"name\": \"Tornby Gamle K\u00f8bmandsg\u00e5rd\",\n      \"categoryId\": \"gratisoplevelser\",\n      \"lat\": 57.5747,\n      \"lng\": 9.9396,\n      \"addr\": \"Hovedvejen 61, 9850 Hirtshals\",\n      \"link\": \"https:\/\/visitvendsyssel.dk\/gratis-oplevelser\/\"\n    },\n    {\n      \"name\": \"Bellevue Udsigtst\u00e5rn\",\n      \"categoryId\": \"gratisoplevelser\",\n      \"lat\": 57.4440,\n      \"lng\": 10.0245,\n      \"addr\": \"Toelh\u00f8jvej, 9800 Hj\u00f8rring\",\n      \"link\": \"https:\/\/visitvendsyssel.dk\/gratis-oplevelser\/\"\n    },\n    {\n      \"name\": \"Naturomr\u00e5det ved herreg\u00e5rden Odden\",\n      \"categoryId\": \"gratisoplevelser\",\n      \"lat\": 57.4485,\n      \"lng\": 9.9151,\n      \"addr\": \"Oddenvej 31, Mygdal, 9800 Hj\u00f8rring\",\n      \"link\": \"https:\/\/visitvendsyssel.dk\/gratis-oplevelser\/\"\n    },\n    {\n      \"name\": \"Eventyrstien\",\n      \"categoryId\": \"gratisoplevelser\",\n      \"lat\": 57.15691,\n      \"lng\": 10.27708,\n      \"addr\": \"Slotsgade 13, 9330 Dronninglund\",\n      \"link\": \"https:\/\/visitvendsyssel.dk\/gratis-oplevelser\/\"\n    },\n     {\n      \"name\": \"Dorf M\u00f8lleg\u00e5rd\",\n      \"categoryId\": \"gratisoplevelser\",\n      \"lat\": 57.22139,\n      \"lng\": 10.28418,\n      \"addr\": \"Storskovvej 39, 9330 Dronninglund\",\n      \"link\": \"https:\/\/visitvendsyssel.dk\/gratis-oplevelser\/\"\n    },\n    {\n      \"name\": \"Porten til Jyske \u00c5s\",\n      \"categoryId\": \"gratisoplevelser\",\n      \"lat\": 57.21216,\n      \"lng\": 10.20741,\n      \"addr\": \"Landvadh\u00f8j 16, 9320 Hjallerup\",\n      \"link\": \"https:\/\/visitvendsyssel.dk\/gratis-oplevelser\/\"\n    },\n    {\n      \"name\": \"Hammer Bakker\",\n      \"categoryId\": \"gratisoplevelser\",\n      \"lat\": 57.13418951297661,\n      \"lng\": 10.023748502890124,\n      \"addr\": \"Gennem Bakkerne 44, 9310 Vodskov (G\u00e5tur hammerbakker)\",\n      \"link\": \"https:\/\/visitvendsyssel.dk\/gratis-oplevelser\/\"\n    },\n    {\n      \"name\": \"Gybels Plantage, S\u00e6by (Vandrerute, hundeskov, fysisk aktivitet)\",\n      \"categoryId\": \"gratisoplevelser\",\n      \"lat\": 57.320707830714774,\n      \"lng\": 10.504573049718577,\n      \"addr\": \"Kjeldgaardsparken 13, 9300 S\u00e6by\",\n      \"link\": \"https:\/\/visitvendsyssel.dk\/gratis-oplevelser\/\"\n    },\n    {\n      \"name\": \"S\u00e6by Vandm\u00f8lle\",\n      \"categoryId\": \"gratisoplevelser\",\n      \"lat\": 57.336169,\n      \"lng\": 10.520482,\n      \"addr\": \"Frederikshavnsvej 1A, 9300 S\u00e6by\",\n      \"link\": \"https:\/\/visitvendsyssel.dk\/gratis-oplevelser\/\"\n    },\n    {\n      \"name\": \"Nellemanns Have\",\n      \"categoryId\": \"gratisoplevelser\",\n      \"lat\": 57.343973,\n      \"lng\": 10.504942,\n      \"addr\": \"Langtvedvej 23, 9300 S\u00e6by\",\n      \"link\": \"https:\/\/visitvendsyssel.dk\/gratis-oplevelser\/\"\n    },\n    {\n      \"name\": \"Svinkl\u00f8v Klitplantage\",\n      \"categoryId\": \"gratisoplevelser\",\n      \"lat\": 57.1726,\n      \"lng\": 9.2967,\n      \"addr\": \"Svinkl\u00f8vvej, 9690 Fjerritslev\",\n      \"link\": \"https:\/\/visitvendsyssel.dk\/gratis-oplevelser\/\"\n    },\n    {\n      \"name\": \"Vadbjerg Sande (smuk udsigt)\",\n      \"categoryId\": \"gratisoplevelser\",\n      \"lat\": 57.15825972258423,\n      \"lng\": 9.124868051237096,\n      \"addr\": \"Valbjergvej, 9690 Fjerritslev\",\n      \"link\": \"https:\/\/visitvendsyssel.dk\/gratis-oplevelser\/\"\n    },\n    {\n      \"name\": \"Thorup Strand\",\n      \"categoryId\": \"gratisoplevelser\",\n      \"lat\": 57.1397,\n      \"lng\": 9.1708,\n      \"addr\": \"Thorup Strandvej 223, 9690 Fjerritslev\",\n      \"link\": \"https:\/\/visitvendsyssel.dk\/gratis-oplevelser\/\"\n    },\n    {\n      \"name\": \"Tankested Vejlerne\",\n      \"categoryId\": \"gratisoplevelser\",\n      \"lat\": 57.047107014289516,\n      \"lng\": 9.10363036747677,\n      \"addr\": \"Bygholmvejlevej 640, 9690 Fjerritslev\",\n      \"link\": \"https:\/\/visitvendsyssel.dk\/gratis-oplevelser\/\"\n    },\n    {\n      \"name\": \"R\u00f8verknolden\",\n      \"categoryId\": \"gratisoplevelser\",\n      \"lat\": 56.8269,\n      \"lng\": 9.8388,\n      \"addr\": \"Rebildvej 4, 9520 Sk\u00f8rping\",\n      \"link\": \"https:\/\/visitvendsyssel.dk\/gratis-oplevelser\/\"\n    },\n    {\n      \"name\": \"Gateway Blokhus\",\n      \"categoryId\": \"gratisoplevelser\",\n      \"lat\": 57.2505,\n      \"lng\": 9.5765,\n      \"addr\": \"Plesnersvej, 9492 Blokhus\",\n      \"link\": \"https:\/\/visitvendsyssel.dk\/gratis-oplevelser\/\"\n    },\n    {\n      \"name\": \"Gratis rundvisning hos Skotlander Rom & Gin\",\n      \"categoryId\": \"gratisoplevelser\",\n      \"lat\": 57.2084,\n      \"lng\": 9.5926,\n      \"addr\": \"Hjulmagervej 19, 9490 Pandrup\",\n      \"link\": \"https:\/\/visitvendsyssel.dk\/gratis-oplevelser\/\"\n    },\n    {\n      \"name\": \"Glarborgen\",\n      \"categoryId\": \"gratisoplevelser\",\n      \"lat\": 57.1193,\n      \"lng\": 9.5998,\n      \"addr\": \"Urbakken 14 C, 9460 Brovst\",\n      \"link\": \"https:\/\/visitvendsyssel.dk\/gratis-oplevelser\/\"\n    },\n    {\n      \"name\": \"Tranum-Fosdalen vandreruter\",\n      \"categoryId\": \"gratisoplevelser\",\n      \"lat\": 57.1748,\n      \"lng\": 9.4787,\n      \"addr\": \"Strandvejen 37, 9460 Brovst\",\n      \"link\": \"https:\/\/visitvendsyssel.dk\/gratis-oplevelser\/\"\n    },\n    {\n      \"name\": \"Troldemuseet\",\n      \"categoryId\": \"gratisoplevelser\",\n      \"lat\": 57.0884,\n      \"lng\": 9.7103,\n      \"addr\": \"Limfjordsgade 50, 9440 Gj\u00f8l\",\n      \"link\": \"https:\/\/visitvendsyssel.dk\/gratis-oplevelser\/\"\n    },\n    {\n      \"name\": \"De syngende tr\u00e6er\",\n      \"categoryId\": \"gratisoplevelser\",\n      \"lat\": 57.041067,\n      \"lng\": 9.916003,\n      \"addr\": \"Kildeparken 9000 Aalborg\",\n      \"link\": \"https:\/\/visitvendsyssel.dk\/gratis-oplevelser\/\"\n    },\n    {\n      \"name\": \"Vestre Fjordpark\",\n      \"categoryId\": \"gratisoplevelser\",\n      \"lat\": 57.05789,\n      \"lng\": 9.88516,\n      \"addr\": \"Skydebanevej 14, 9000 Aalborg\",\n      \"link\": \"https:\/\/visitvendsyssel.dk\/gratis-oplevelser\/\"\n    },\n    {\n      \"name\": \"Aalborghus Slot\",\n      \"categoryId\": \"gratisoplevelser\",\n      \"lat\": 57.04939,\n      \"lng\": 9.92417,\n      \"addr\": \"Slotspladsen 1, 9000 Aalborg\",\n      \"link\": \"https:\/\/visitvendsyssel.dk\/gratis-oplevelser\/\"\n    },\n    {\n      \"name\": \"Trolden Ask fra Ash\u00f8j\",\n      \"categoryId\": \"gratisoplevelser\",\n      \"lat\": 56.8485,\n      \"lng\": 8.4168,\n      \"addr\": \"Ash\u00f8jgade 47, 7760 Hurup Thy\",\n      \"link\": \"https:\/\/visitvendsyssel.dk\/gratis-oplevelser\/\"\n    },\n    {\n      \"name\": \"Jernkysten\",\n      \"categoryId\": \"gratisoplevelser\",\n      \"lat\": 56.6278,\n      \"lng\": 8.2042,\n      \"addr\": \"Vejlby Klit 42, 7673 Harbo\u00f8re\",\n      \"link\": \"https:\/\/visitvendsyssel.dk\/gratis-oplevelser\/\"\n    }\n    ]\n  },\n\n\n  \n  \n  \n  ];\n\n<\/script>\n\n\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 (safe order, no TDZ) ===\n(() => {\n  \/\/ --- canonical place database ---\n  const PLACES = {\n    vendsyssel:    { lat: 57.550000, lng: 10.000000, z: { mobile: 6,  desktop: 8  } },\n    skagen:        { lat: 57.720930, lng: 10.583940, z: { mobile: 12, desktop: 13 } },\n    saeby:         { lat: 57.330870, lng: 10.516628, z: { mobile: 12, desktop: 13 } },\n    strandby:      { lat: 57.493753, lng: 10.494117, z: { mobile: 12, desktop: 13 } },\n    frederikshavn: { lat: 57.440730, lng: 10.536610, z: { mobile: 12, desktop: 13 } },\n    bindslev:      { lat: 57.541566, lng: 10.199232, z: { mobile: 12, desktop: 13 } },\n    sindal:        { lat: 57.475752, lng: 10.197153, z: { mobile: 12, desktop: 13 } },\n    hulsig:        { lat: 57.660928, lng: 10.464544, z: { mobile: 12, desktop: 13 } },\n  };\n\n  \/\/ map URL slug \u2192 place key\n  const SLUG_TO_PLACE = {\n    \"\": \"vendsyssel\",\n    \"vendsyssel\": \"vendsyssel\",\n    \"skagen\": \"skagen\",\n    \"s\u00e6by\": \"saeby\",\n    \"saeby\": \"saeby\",\n    \"strandby\": \"strandby\",\n    \"frederikshavn\": \"frederikshavn\",\n    \"bindslev\": \"bindslev\",\n    \"sindal\": \"sindal\",\n    \"hulsig\": \"hulsig\",\n  };\n\n  function firstSegFromURL(urlString) {\n    try {\n      const u = new URL(urlString);\n      const seg = u.pathname.split(\"\/\").filter(Boolean)[0] || \"\";\n      return seg.normalize(\"NFKD\").toLowerCase()\n        .replaceAll(\"\u00e6\",\"ae\").replaceAll(\"\u00f8\",\"oe\").replaceAll(\"\u00e5\",\"aa\");\n    } catch { return \"\"; }\n  }\n\n  function resolvePlaceKey() {\n    const q = new URLSearchParams(location.search);\n    const qp = (q.get(\"place\") || \"\").toLowerCase();\n    if (qp && PLACES[qp]) return qp;\n\n    if (document.referrer) {\n      const refSeg = firstSegFromURL(document.referrer);\n      if (SLUG_TO_PLACE[refSeg]) return SLUG_TO_PLACE[refSeg];\n    }\n    const selfSeg = firstSegFromURL(location.href);\n    return SLUG_TO_PLACE[selfSeg] || \"vendsyssel\";\n  }\n\n  function pickCenter() {\n    const q = new URLSearchParams(location.search);\n    const center = q.get(\"center\"), z = Number(q.get(\"z\"));\n    if (center) {\n      const [lat, lng] = center.split(\",\").map(Number);\n      const ok = Number.isFinite(lat) && -90 <= lat && lat <= 90 &&\n                 Number.isFinite(lng) && -180 <= lng && lng <= 180 &&\n                 Number.isFinite(z)   && z >= 0;\n      if (ok) return { key: \"custom\", lat, lng, z: { mobile: z, desktop: z } };\n    }\n    const key = resolvePlaceKey();\n    return { key, ...PLACES[key] };\n  }\n\n  \/\/ Expose: Google will call this\n  window.initMap = function initMap() {\n    const p = pickCenter();\n    createMap({ lat: p.lat, lng: p.lng }, IS_MOBILE ? p.z.mobile : p.z.desktop);\n\n    navigator.geolocation.getCurrentPosition(\n      pos => setTimeout(() => {\n        map.panTo({ lat: pos.coords.latitude, lng: pos.coords.longitude });\n        map.setZoom(12);\n      }, 1000),\n      err => console.warn(\"Geolocation failed:\", err.message),\n      { enableHighAccuracy: true, timeout: 5000, maximumAge: 0 }\n    );\n\n    \/\/ Attach postnummer search now that `map` exists\n    attachPostnrSearch();\n  };\n\n  \/\/ Runs after map exists\n  function attachPostnrSearch() {\n    const input   = document.getElementById('search-input');\n    const btn     = document.getElementById('search-btn');\n    const results = document.getElementById('search-results');\n\n    if (!input || !btn || !results) { console.warn('Postnr UI missing'); return; }\n    if (!(window.google && google.maps && (map instanceof google.maps.Map))) {\n      console.warn('Map not ready'); return;\n    }\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    const isPostnr = q => \/^\\s*\\d{4}\\s*$\/.test(q);\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 { return []; }\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);\n\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        \/\/ existingSearch(q); \/\/ if you have a POI search\n      }\n    }\n\n    btn.addEventListener('click', handleSubmit);\n    input.addEventListener('keydown', e => { if (e.key === 'Enter') handleSubmit(); });\n\n    document.addEventListener('click', e => {\n      if (!results.contains(e.target) && e.target !== input) results.classList.add('hidden');\n    });\n    input.addEventListener('blur', () => { if (!input.value.trim()) clearPostnr(); });\n\n    if (!input.placeholder.includes('postnr')) {\n      input.placeholder = 'S\u00f8g\u2026 (steder, postnr)';\n    }\n  }\n})();\n\n\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    gratisoplevelser:  'Gratis Oplevelser'\n    \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-solid fa-location-dot\" style=\"font-family:'Font Awesome 6 Free' !important; font-weight:900 !important; font-style:normal;\"><\/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-solid fa-route\" style=\"font-family:'Font Awesome 6 Free' !important; font-weight:900 !important; font-style:normal;\"><\/i>\n      <\/button>\n      ${i.link\n        ? `<button class=\"btn-website\" onclick=\"window.open('${i.link}','_blank')\">\n             <i class=\"fa-solid fa-globe\" style=\"font-family:'Font Awesome 6 Free' !important; font-weight:900 !important; font-style:normal;\"><\/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 (fixed) \u2500\u2500\u2500\nasync function makeCategoryIcon(categoryId) {\n  if (iconCache[categoryId]) return iconCache[categoryId];\n\n  console.log('[Debug] makeCategoryIcon called for categoryId:', categoryId);\n\n  \/\/ \u2705 Use correct WordPress upload path\n  const baseUrl = window.location.origin + '\/wp-content\/uploads\/2025\/09\/';\n  const fallback = baseUrl + 'fallback.svg';\n\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    butikker: 'Butikkerl.svg',\n    camping: 'Campingl.svg',\n    hotel: 'Hotell.svg',\n    natteliv: 'Nattelivl.svg',\n    \/\/ absolute URL left as-is\n    gratisoplevelser: 'https:\/\/toppenafdanmark.dk\/wp-content\/uploads\/2025\/09\/gratisoplevelserl.svg'\n  };\n\n  \/\/ normalize key: lower-case + remove spaces\/diacritics -> safe lookup\n  function normalizeKey(k) {\n    return String(k || '')\n      .toLowerCase()\n      .normalize('NFKD')            \/\/ decompose accents\n      .replace(\/[\\u0300-\\u036f]\/g, '') \/\/ remove diacritic marks\n      .replace(\/[^a-z0-9]\/g, '');  \/\/ keep only alphanumerics\n  }\n\n  function getIconUrl(rawKey) {\n    const key = normalizeKey(rawKey);\n    const icon = fileMap[key] || null;\n    if (!icon) {\n      console.warn('[Debug] no mapping for key -> using fallback:', rawKey, 'normalized:', key);\n      return fallback;\n    }\n    return icon.startsWith('http') ? icon : baseUrl + icon;\n  }\n\n  const url = getIconUrl(categoryId);\n  console.log('[Debug] resolved icon url:', url);\n\n  \/\/ preload image to observe network \/ errors\n  const cssSize = window.innerWidth >= 768 ? 40 : 30;\n  const realPx = Math.round(cssSize * (window.devicePixelRatio || 1));\n\n  const dbgImg = new Image();\n  dbgImg.onload = () => console.log('[Debug] icon image loaded for', categoryId, url, 'size:', realPx);\n  dbgImg.onerror = (e) => console.error('[Debug] icon image failed to load for', categoryId, url, e);\n  dbgImg.src = url; \/\/ triggers network request\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\n  iconCache[categoryId] = iconObj;\n  return iconObj;\n}\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>\n\n\n\n\n\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>3D Button Ribbon \u2039 Experiences Museums Restaurants Nightlife Shops Hotels Camping Free Experiences \u203a Experiences in North Jutland | Visit Vendsyssel \u00d7 Hello! How can I help you?<\/p>","protected":false},"author":249072019,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_wpcom_ai_launchpad_about_page":false,"_wpcom_ai_launchpad_gallery_page":false,"_wpcom_ai_launchpad_contact_page":false,"_wpcom_ai_launchpad_events_page":false,"_wpcom_ai_launchpad_video_page":false,"_wpcom_ai_launchpad_portfolio_piece":false,"_jetpack_hide_featured_image":false,"_jetpack_featured_image_duplicate_dismissed":0,"footnotes":""},"class_list":["post-20617","page","type-page","status-publish","hentry"],"jetpack_likes_enabled":true,"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/PfGbFv-5mx","_links":{"self":[{"href":"https:\/\/visitvendsyssel.dk\/en\/wp-json\/wp\/v2\/pages\/20617","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/visitvendsyssel.dk\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/visitvendsyssel.dk\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/visitvendsyssel.dk\/en\/wp-json\/wp\/v2\/users\/249072019"}],"replies":[{"embeddable":true,"href":"https:\/\/visitvendsyssel.dk\/en\/wp-json\/wp\/v2\/comments?post=20617"}],"version-history":[{"count":100,"href":"https:\/\/visitvendsyssel.dk\/en\/wp-json\/wp\/v2\/pages\/20617\/revisions"}],"predecessor-version":[{"id":22705,"href":"https:\/\/visitvendsyssel.dk\/en\/wp-json\/wp\/v2\/pages\/20617\/revisions\/22705"}],"wp:attachment":[{"href":"https:\/\/visitvendsyssel.dk\/en\/wp-json\/wp\/v2\/media?parent=20617"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}