{"id":17109,"date":"2026-05-19T10:29:59","date_gmt":"2026-05-19T07:29:59","guid":{"rendered":"https:\/\/pelican.fi\/locations\/"},"modified":"2026-11-03T17:54:26","modified_gmt":"2026-11-03T15:54:26","slug":"locations","status":"publish","type":"page","link":"https:\/\/pelican.fi\/en\/locations\/","title":{"rendered":"Locations"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"17109\" class=\"elementor elementor-17109 elementor-12212\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-42bca31 e-flex e-con-boxed e-con e-parent\" data-id=\"42bca31\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-905a0e9 e-con-full e-flex e-con e-child\" data-id=\"905a0e9\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-c47b34e e-con-full post-heading e-flex e-con e-child\" data-id=\"c47b34e\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-0096feb h2 elementor-widget elementor-widget-heading\" data-id=\"0096feb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h1 class=\"elementor-heading-title elementor-size-default\">Pelican locations in the Helsinki metropolitan area and Turku<\/h1>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c797ab6 elementor-widget elementor-widget-text-editor\" data-id=\"c797ab6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>You can find Pelican locations throughout the Helsinki metropolitan area, as well as in Turku. We offer secure storage facilities for both private individuals and businesses. Visit your nearest location or call <strong>0207 007 700<\/strong> \u2013 we are happy to help you find the right solution.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-db6da2e e-con-full e-flex e-con e-child\" data-id=\"db6da2e\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-60e12e4 elementor-widget elementor-widget-shortcode\" data-id=\"60e12e4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><div class=\"plm-shortcode-wrap\" style=\"display:block!important;width:100%!important;max-width:100%!important;min-width:1px!important;box-sizing:border-box!important;align-self:stretch!important;flex:1 1 100%!important;\"><div id=\"pelican-location-map-5c55c9c3-1d39-45d0-a3e3-b9df68105d0e\" class=\"pelican-location-map\" data-plm-map=\"1\" data-plm-version=\"2.3.6\" data-plm-config-id=\"pelican-location-map-5c55c9c3-1d39-45d0-a3e3-b9df68105d0e-config\" style=\"position:relative!important;width:100%!important;height:500px!important;min-height:320px!important;display:block!important;overflow:hidden!important;border-radius:24px!important;background:#e9e9e7!important;\"><div class=\"plm-map-canvas\" style=\"position:absolute!important;inset:0!important;width:100%!important;height:100%!important;min-height:320px!important;display:block!important;visibility:visible!important;opacity:1!important;\"><\/div><div class=\"plm-loading\" style=\"position:absolute;inset:0;z-index:5;display:flex;align-items:center;justify-content:center;background:#e9e9e7;color:#555;font:600 14px\/1.4 Arial,sans-serif;\">Loading locations...<\/div><\/div><script type=\"application\/json\" id=\"pelican-location-map-5c55c9c3-1d39-45d0-a3e3-b9df68105d0e-config\" class=\"plm-map-config\">{\"apiKey\":\"AIzaSyAzcDWgBbtQUL9QlTaN1DdrNC_ZJayQahY\",\"activeSiteId\":\"\",\"locations\":[{\"postId\":17232,\"siteId\":\"RI0Z0HRI230120120001\",\"title\":\"Pelican Ala-Tikkurila\",\"lat\":60.28324,\"lng\":25.03141,\"geocodeAddress\":\"H\u00e4rk\u00e4valjakontie 28, 00750 Helsinki, Denmark\",\"address\":\"H\u00e4rk\u00e4valjakontie 28\",\"zip\":\"00750\",\"city\":\"Helsinki\",\"type\":\"private\",\"url\":\"https:\/\/pelican.fi\/en\/toimipisteet\/ala-tikkurila\/\"},{\"postId\":17193,\"siteId\":\"RI10BTLJ061020220001\",\"title\":\"Pelican Espoonlahti\",\"lat\":60.15461,\"lng\":24.67072,\"geocodeAddress\":\"Sillankorva 17, 02300 Espoo, Denmark\",\"address\":\"Sillankorva 17\",\"zip\":\"02300\",\"city\":\"Espoo\",\"type\":\"private\",\"url\":\"https:\/\/pelican.fi\/en\/toimipisteet\/espoonlahti\/\"},{\"postId\":17225,\"siteId\":\"HE1C8MXX010520120000\",\"title\":\"Pelican Herttoniemi\",\"lat\":60.19261,\"lng\":25.02742,\"geocodeAddress\":\"Hitsaajankatu 8, 00810 Helsinki, Denmark\",\"address\":\"Hitsaajankatu 8\",\"zip\":\"00810\",\"city\":\"Helsinki\",\"type\":\"private\",\"url\":\"https:\/\/pelican.fi\/en\/toimipisteet\/herttoniemi\/\"},{\"postId\":17212,\"siteId\":\"OA0P77RI29112013001F\",\"title\":\"Pelican Hesperianpuisto\",\"lat\":60.17714,\"lng\":24.92954,\"geocodeAddress\":\"Mannerheimintie 40, 00100 Helsinki, Denmark\",\"address\":\"Mannerheimintie 40\",\"zip\":\"00100\",\"city\":\"Helsinki\",\"type\":\"private\",\"url\":\"https:\/\/pelican.fi\/en\/toimipisteet\/hesperianpuisto\/\"},{\"postId\":17196,\"siteId\":\"IT0Z0HRI230120120001\",\"title\":\"Pelican It\u00e4harju\",\"lat\":60.45013,\"lng\":22.30494,\"geocodeAddress\":\"Kalevantie 11, 20520 Turku, Denmark\",\"address\":\"Kalevantie 11\",\"zip\":\"20520\",\"city\":\"Turku\",\"type\":\"private\",\"url\":\"https:\/\/pelican.fi\/en\/toimipisteet\/itaharju\/\"},{\"postId\":17217,\"siteId\":\"RI15RPLJ160120230001\",\"title\":\"Pelican Kaari\",\"lat\":60.23516,\"lng\":24.89139,\"geocodeAddress\":\"Kantelettarentie 1 A, 00420 Helsinki, Denmark\",\"address\":\"Kantelettarentie 1 A\",\"zip\":\"00420\",\"city\":\"Helsinki\",\"type\":\"private\",\"url\":\"https:\/\/pelican.fi\/en\/toimipisteet\/kaari\/\"},{\"postId\":17229,\"siteId\":\"RI1GRWXX250320060000\",\"title\":\"Pelican Kilo\",\"lat\":60.22315,\"lng\":24.78549,\"geocodeAddress\":\"Kilonkartanontie 1, 02610 Espoo, Denmark\",\"address\":\"Kilonkartanontie 1\",\"zip\":\"02610\",\"city\":\"Espoo\",\"type\":\"private\",\"url\":\"https:\/\/pelican.fi\/en\/toimipisteet\/kilo\/\"},{\"postId\":17221,\"siteId\":\"RI19CORI251120130001\",\"title\":\"Pelican Konala\",\"lat\":60.24992,\"lng\":24.83631,\"geocodeAddress\":\"Paperitie 5, 00390 Helsinki, Denmark\",\"address\":\"Paperitie 5\",\"zip\":\"00390\",\"city\":\"Helsinki\",\"type\":\"private\",\"url\":\"https:\/\/pelican.fi\/en\/toimipisteet\/konala\/\"},{\"postId\":17163,\"siteId\":\"RI0SHGRI140620130001\",\"title\":\"Pelican Olari\",\"lat\":60.16268,\"lng\":24.72782,\"geocodeAddress\":\"Piispanm\u00e4entie 8, 02240 Espoo, Denmark\",\"address\":\"Piispanm\u00e4entie 8\",\"zip\":\"02240\",\"city\":\"Espoo\",\"type\":\"private\",\"url\":\"https:\/\/pelican.fi\/en\/toimipisteet\/olari\/\"},{\"postId\":17245,\"siteId\":\"OA0P6KRI291120130001\",\"title\":\"Pelican Ruoholahti\",\"lat\":60.16402,\"lng\":24.92412,\"geocodeAddress\":\"K\u00f6ydenpunojankatu 15, 00180 Helsinki, Denmark\",\"address\":\"K\u00f6ydenpunojankatu 15\",\"zip\":\"00180\",\"city\":\"Helsinki\",\"type\":\"private\",\"url\":\"https:\/\/pelican.fi\/en\/toimipisteet\/ruoholahti\/\"},{\"postId\":17211,\"siteId\":\"RI0TJ5XX050520150002\",\"title\":\"Pelican Tammisto\",\"lat\":60.27894,\"lng\":24.97613,\"geocodeAddress\":\"S\u00e4hk\u00f6tie 12, 01510 Vantaa, Denmark\",\"address\":\"S\u00e4hk\u00f6tie 12\",\"zip\":\"01510\",\"city\":\"Vantaa\",\"type\":\"private\",\"url\":\"https:\/\/pelican.fi\/en\/toimipisteet\/tammisto\/\"},{\"postId\":17190,\"siteId\":\"RI0XDCLJ210520210001\",\"title\":\"Pelican Tapiola\",\"lat\":60.17953,\"lng\":24.82067,\"geocodeAddress\":\"Kimmeltie 1 - 3, 02110 Espoo, Denmark\",\"address\":\"Kimmeltie 1 - 3\",\"zip\":\"02110\",\"city\":\"Espoo\",\"type\":\"private\",\"url\":\"https:\/\/pelican.fi\/en\/toimipisteet\/tapiola\/\"},{\"postId\":17208,\"siteId\":\"RI152RJB280420160001\",\"title\":\"Pelican T\u00f6\u00f6l\u00f6\",\"lat\":60.18898,\"lng\":24.91686,\"geocodeAddress\":\"Mannerheimintie 102, 00250 Helsinki, Denmark\",\"address\":\"Mannerheimintie 102\",\"zip\":\"00250\",\"city\":\"Helsinki\",\"type\":\"private\",\"url\":\"https:\/\/pelican.fi\/en\/toimipisteet\/toolo\/\"},{\"postId\":17199,\"siteId\":\"VA0WCBXX010220120000\",\"title\":\"Pelican Vallila\",\"lat\":60.19817,\"lng\":24.94795,\"geocodeAddress\":\"M\u00e4kel\u00e4nkatu 62, 00520 Helsinki, Denmark\",\"address\":\"M\u00e4kel\u00e4nkatu 62\",\"zip\":\"00520\",\"city\":\"Helsinki\",\"type\":\"private\",\"url\":\"https:\/\/pelican.fi\/en\/toimipisteet\/vallila\/\"},{\"postId\":17202,\"siteId\":\"RI12W2LJ151220210001\",\"title\":\"Pelican Varisto\",\"lat\":60.27624,\"lng\":24.81266,\"geocodeAddress\":\"Martinkyl\u00e4ntie 57, 01720 Vantaa, Denmark\",\"address\":\"Martinkyl\u00e4ntie 57\",\"zip\":\"01720\",\"city\":\"Vantaa\",\"type\":\"private\",\"url\":\"https:\/\/pelican.fi\/en\/toimipisteet\/varisto\/\"},{\"postId\":17236,\"siteId\":\"RI0U7GNM110120180001\",\"title\":\"Pelican Viikki\",\"lat\":60.22949,\"lng\":25.00925,\"geocodeAddress\":\"Pihlajistonkuja 4, 00710 Helsinki, Denmark\",\"address\":\"Pihlajistonkuja 4\",\"zip\":\"00710\",\"city\":\"Helsinki\",\"type\":\"private\",\"url\":\"https:\/\/pelican.fi\/en\/toimipisteet\/viikki\/\"}],\"debug\":false,\"mapId\":\"pelican-location-map-5c55c9c3-1d39-45d0-a3e3-b9df68105d0e\",\"markerIconDefault\":\"data:image\/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2260%22%20height%3D%2272%22%20viewBox%3D%220%200%2060%2072%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Ccircle%20cx%3D%2230%22%20cy%3D%2228%22%20r%3D%2227%22%20fill%3D%22%231C1C1C%22%2F%3E%3Cpath%20d%3D%22M22%2C50%20Q26%2C60%2030%2C64%20Q34%2C60%2038%2C50%22%20fill%3D%22%231C1C1C%22%2F%3E%3Ccircle%20cx%3D%2230%22%20cy%3D%2228%22%20r%3D%2222%22%20fill%3D%22%23ffffff%22%2F%3E%3Ccircle%20cx%3D%2230%22%20cy%3D%2228%22%20r%3D%2218%22%20fill%3D%22%23B9B9B9%22%2F%3E%3Cimage%20href%3D%22data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAEoAAABKBAMAAADu%2Ft9CAAAABGdBTUEAALGPC%2FxhBQAAAAFzUkdCAK7OHOkAAAAbUExURf%2F%2F%2F729veXl5czMzN3d3cTExPDw8Pf399TU1Ko3AocAAAJNSURBVEjHjVZLb5tAEN4QDD5mA34csYtEj6VW0ittEinHrKWoV9NY7RWcOurRD0XOzy6O2WV2ZxbynYz1aZ7fzgxjGl7urwQfzHYLZod3wyV2hY30lwMEEU164hoGCUV65gYGWYe7moacegKz%2BNhM4Tun8FMn%2FeM0tND81MIKIWvNebcxX1hZ4UdMQWPbFtZQklxZHjIHWbOy%2Fr4uqKp9qVmiqfWdNX63UUtcfLK5LNX3t2RaLAXfpYRLlWHoRiyuVL18wln66vNwm7H%2BnHlfpxorOLL6Sk7LVfWZzv1DrAe2gGGNfk8rfH6bxs%2B4Fluzyn6U66wRrNaoZq2YQBXzuMmKXKNgAQheenTYBNe1Z7ISn1DPmfp9eTJV9BBrw3KjrS%2FEc3oA%2F43fWRl2WOUFdHpy6FB6TfVOuCBpELGAQR7rcE4J0ZDIn07W0WXEXGKqaKywYBljooPFg%2F2GEcYMVp3Baxfr9OCdOyP6FNt6n43bj7C06Tg0J8mDYjmQNcEaR5PoguXWqVYCB2eWQQS1nqG2NcO7ERpuW9AYE419JM05qkXAiOZeS1YOnk2OmnswkrzQElaoN2MP9INQnRNppVhoCSu4cQRYY8vS6%2F8Kkmb7Do1OyMx71eKd3e41yXnoka61htQZaxJ7fBxku5JQyRotp3NKvTCm2RFX4BBQDZu0bL4RoST74mtdo0Ow3e3GtBNr2xmV8ay0S8c4YUqStTHPIcrnJb72UmIgYSA1huRp6KTtx5d0CvU4tx6ZbCnNjRPWhlW8n739MI%2Fa%2FxADujXlBisRAAAAAElFTkSuQmCC%22%20x%3D%2217%22%20y%3D%2215%22%20width%3D%2226%22%20height%3D%2226%22%20preserveAspectRatio%3D%22xMidYMid%20meet%22%20%2F%3E%3C%2Fsvg%3E\",\"markerIconActive\":\"data:image\/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2260%22%20height%3D%2272%22%20viewBox%3D%220%200%2060%2072%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Ccircle%20cx%3D%2230%22%20cy%3D%2228%22%20r%3D%2227%22%20fill%3D%22%231C1C1C%22%2F%3E%3Cpath%20d%3D%22M22%2C50%20Q26%2C60%2030%2C64%20Q34%2C60%2038%2C50%22%20fill%3D%22%231C1C1C%22%2F%3E%3Ccircle%20cx%3D%2230%22%20cy%3D%2228%22%20r%3D%2222%22%20fill%3D%22%23ffffff%22%2F%3E%3Ccircle%20cx%3D%2230%22%20cy%3D%2228%22%20r%3D%2218%22%20fill%3D%22%23F07E02%22%2F%3E%3Cimage%20href%3D%22data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAFwAAABcCAMAAADUMSJqAAAABGdBTUEAALGPC%2FxhBQAAAAFzUkdCAK7OHOkAAAA8UExURfF%2BAvevYPGGEfrPofvfwPi%2Fgf%2F38P%2F%2F%2F%2F3w4fOOIfe3cPvYsv3lzPWfQPnHkf%2F8%2BvOXMPWnUP3s2PWhRlf768gAAAOFSURBVGjetZpZYqMwDEDlTd4xpPe%2F6wApDQleZOLRZ0NfHEnWCuj%2FKEB7DNEE6aVfRcrwMIiD4MbgDFdZ%2F%2F41HC0Uhev0BdxLDnWxD7wHNxYowm7APZCFpT448dSHqNQB70NvuhdUeIAb4hIJbuGWWEOAc7gp3Dfh8IWoBhxgHB2Gsj%2FoMJb9TofBbABfgI9gAzdZ%2BMW%2FGRrW7%2FQWM%2FArhk1GG9GNd1d4PgpGqXU3Xl7ghQcXt%2BpQsluKgUZAUXpyasUb9fuAtXR%2FPOCPIlvqJDa8li7O3HlDCfXmDZ6PVmJlb4HazOpwsDAJ2YbHM3zKeqxEJfcskNDaJ95ZnDTVplA%2BuA3ITAx%2FaW%2FHCwgkeHzBsz%2BUTYtTkxBrjbWK2L7OmbXwmkiJCv%2FgtvSxxsfGOyQIxaRm1AC2wxUl8j9TpFjvLC3EHHBJgT8Nv5qAka8plP1Q5dmCWik94Q6IcL%2FGakPN3xx3OBLhZuqqxOQOtzS4EYms8GfkhZI5r9WrK93k4j2qwOOHMbfY2BV5sQLnb2yxhZa%2BsB6g6CxH3DwpXHaxQUDlP6bT9fRGV45RsCiUHPFD6bvrxD44A51a%2BWRPEf5G%2FTtX4cvLVfBG0WSrcBBvWuntCngd%2FmfTJ1z1lkcVg%2B5GMSd4tk2vwlPrFk9iir%2BlK7LB8LcCTfdVpkT4qQ80ns1DDHo5%2BTHLkCryL12xCH8WJA0VRSLcF0YE1ep6Adq9m4pjk7kauEjw8kylkrA9Ec7L86By5pNEeFkvlUCsiQY9tWhXp6kl6J%2B%2BFo085thLC7w1kThnqUpRRISX6bJUPKzwRM1erDQCtZVClBxHucrjWeFSQ19uzA7hslW11dX6nI4PhTu9wxP00DOqL5QlGzx1wTkKZ5oWZa9WsauUMtoqhY0IYF7wrqNjmNc4%2Fqb6JR9FQfce3Woft0tpmf%2FVTmD1wQLS4UwzdhyGx8gW2xyJqB6Vi4bzfg5zErUccdpbbHQB4nMM1Xie%2BSClEHKbSclGo5sZoFXbhuXc%2Fzcezo3%2B0s2xOW1oafgQeGHc6kewi4NiNZb9MYVWQ9mf83M1kn2Z%2FKuB7OvOwo9btmS2LWbYmii3J0J3h%2B2QuD7rn8dbSV%2F8YaddFfatLDs6zmi6l61UfJT31sTthpYrvL3gTpJV3J4z%2Be3eX7psaRCdbL5YQHtjIXi3RLv%2FCG5n5kQgvbHwD%2BniWQJjQYE7AAAAAElFTkSuQmCC%22%20x%3D%2217%22%20y%3D%2215%22%20width%3D%2226%22%20height%3D%2226%22%20preserveAspectRatio%3D%22xMidYMid%20meet%22%20%2F%3E%3C%2Fsvg%3E\",\"locationType\":\"private\",\"locationTypeName\":\"Private\",\"highlightMode\":\"all\",\"overviewMode\":true,\"zoom\":7}<\/script><script data-plm-inline-runtime=\"2.3.6\">(() => {\n  'use strict';\n\n  if (window.__pelicanLocationMapV236Loaded) {\n    if (typeof window.PelicanLocationMapBoot === 'function') {\n      window.PelicanLocationMapBoot();\n      window.setTimeout(window.PelicanLocationMapBoot, 60);\n      window.setTimeout(window.PelicanLocationMapBoot, 500);\n      window.setTimeout(window.PelicanLocationMapBoot, 1500);\n    }\n    return;\n  }\n  window.__pelicanLocationMapV236Loaded = true;\n\n  const googleMapsState = window.__pelicanGoogleMapsLoaderState || {\n    promise: null,\n    key: ''\n  };\n  window.__pelicanGoogleMapsLoaderState = googleMapsState;\n\n  const escapeHtml = (value) => String(value ?? '')\n    .replace(\/&\/g, '&amp;')\n    .replace(\/<\/g, '&lt;')\n    .replace(\/>\/g, '&gt;')\n    .replace(\/\"\/g, '&quot;')\n    .replace(\/'\/g, '&#039;');\n\n  const updateDebug = (mapId, line, replaceWaiting = false) => {\n    const panel = document.querySelector('[data-plm-debug-for=\"' + CSS.escape(mapId) + '\"]');\n    if (!panel) return;\n    if (replaceWaiting) {\n      panel.textContent = panel.textContent.replace('JS status: venter p\u00e5 frontend-script...', 'JS status: ' + line);\n      return;\n    }\n    panel.textContent += '\\n' + line;\n  };\n\n  const showError = (shell, message) => {\n    shell.classList.remove('is-ready');\n    shell.classList.add('is-error');\n    const loading = shell.querySelector('.plm-loading');\n    if (loading) {\n      loading.style.display = 'flex';\n      loading.textContent = message;\n    }\n    updateDebug(shell.id, 'FEJL: ' + message);\n    console.error('[Pelican Location Map]', message, shell);\n  };\n\n  const loadGoogleMaps = (apiKey) => {\n    if (window.google && window.google.maps && typeof window.google.maps.Map === 'function') {\n      return Promise.resolve(window.google.maps);\n    }\n\n    if (googleMapsState.promise) return googleMapsState.promise;\n\n    googleMapsState.key = apiKey;\n    googleMapsState.promise = new Promise((resolve, reject) => {\n      const callbackName = '__pelicanGoogleMapsReadyV236';\n      let timeoutId = null;\n\n      window.gm_authFailure = () => {\n        window.clearTimeout(timeoutId);\n        reject(new Error('Google Maps rejected the API key on the frontend.'));\n      };\n\n      window[callbackName] = () => {\n        window.clearTimeout(timeoutId);\n        if (window.google && window.google.maps) {\n          resolve(window.google.maps);\n        } else {\n          reject(new Error('Google callback was executed, but google.maps is missing.'));\n        }\n      };\n\n      const existing = Array.from(document.scripts).find((script) => script.src && script.src.includes('maps.googleapis.com\/maps\/api\/js'));\n      if (existing) {\n        const pollStarted = Date.now();\n        const poll = window.setInterval(() => {\n          if (window.google && window.google.maps && typeof window.google.maps.Map === 'function') {\n            window.clearInterval(poll);\n            window.clearTimeout(timeoutId);\n            resolve(window.google.maps);\n          } else if (Date.now() - pollStarted > 15000) {\n            window.clearInterval(poll);\n            reject(new Error('An existing Google Maps script was found, but the API did not become ready.'));\n          }\n        }, 100);\n        return;\n      }\n\n      const script = document.createElement('script');\n      script.src = 'https:\/\/maps.googleapis.com\/maps\/api\/js?key=' + encodeURIComponent(apiKey) + '&callback=' + encodeURIComponent(callbackName) + '&v=weekly&loading=async';\n      script.async = true;\n      script.defer = true;\n      script.onerror = () => {\n        window.clearTimeout(timeoutId);\n        reject(new Error('The Google Maps JavaScript file could not be loaded.'));\n      };\n      document.head.appendChild(script);\n\n      timeoutId = window.setTimeout(() => {\n        reject(new Error('Google Maps did not become ready within 15 seconds.'));\n      }, 15000);\n    });\n\n    return googleMapsState.promise;\n  };\n\n  const ensureMapsLibrary = async (maps) => {\n    if (typeof maps.importLibrary !== 'function') return maps;\n    try {\n      await maps.importLibrary('maps');\n    } catch (error) {\n      console.warn('[Pelican Location Map] importLibrary(\"maps\") kunne ikke k\u00f8res. Bruger allerede indl\u00e6st Maps API.', error);\n    }\n    return maps;\n  };\n\n  const mapStyles = [\n    { elementType: 'geometry', stylers: [{ color: '#e9e9e7' }] },\n    { elementType: 'labels.icon', stylers: [{ visibility: 'off' }] },\n    { elementType: 'labels.text.fill', stylers: [{ color: '#686868' }] },\n    { elementType: 'labels.text.stroke', stylers: [{ color: '#f4f4f2' }] },\n    { featureType: 'administrative', elementType: 'geometry.stroke', stylers: [{ color: '#d2d2cf' }] },\n    { featureType: 'landscape.man_made', elementType: 'geometry', stylers: [{ color: '#ececea' }] },\n    { featureType: 'poi', stylers: [{ visibility: 'off' }] },\n    { featureType: 'road', elementType: 'geometry', stylers: [{ color: '#ffffff' }] },\n    { featureType: 'road', elementType: 'geometry.stroke', stylers: [{ color: '#d9d9d6' }] },\n    { featureType: 'road', elementType: 'labels.text.fill', stylers: [{ color: '#7a7a7a' }] },\n    { featureType: 'road.highway', elementType: 'geometry', stylers: [{ color: '#f7f7f5' }] },\n    { featureType: 'transit', stylers: [{ visibility: 'off' }] },\n    { featureType: 'water', elementType: 'geometry', stylers: [{ color: '#d6d9d8' }] },\n    { featureType: 'water', elementType: 'labels.text.fill', stylers: [{ color: '#858585' }] }\n  ];\n\n  const markerSvg = (active, config) => {\n    if (active && config && typeof config.markerIconActive === 'string' && config.markerIconActive) return config.markerIconActive;\n    if (!active && config && typeof config.markerIconDefault === 'string' && config.markerIconDefault) return config.markerIconDefault;\n    const fill = active ? '#F07E02' : '#B9B9B9';\n    const svg = '<svg width=\"60\" height=\"72\" viewBox=\"0 0 60 72\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">'\n      + '<circle cx=\"30\" cy=\"28\" r=\"27\" fill=\"#1C1C1C\"\/>'\n      + '<path d=\"M22,50 Q26,60 30,64 Q34,60 38,50\" fill=\"#1C1C1C\"\/>'\n      + '<circle cx=\"30\" cy=\"28\" r=\"22\" fill=\"#ffffff\"\/>'\n      + '<circle cx=\"30\" cy=\"28\" r=\"18\" fill=\"' + fill + '\"\/>'\n      + '<text x=\"30\" y=\"34\" text-anchor=\"middle\" font-size=\"18\" font-family=\"Arial,sans-serif\" font-weight=\"700\" fill=\"#fff\">P<\/text>'\n      + '<\/svg>';\n    return 'data:image\/svg+xml;charset=UTF-8,' + encodeURIComponent(svg);\n  };\n\n  const geocode = (geocoder, address) => new Promise((resolve) => {\n    geocoder.geocode({ address }, (results, status) => {\n      if (status === 'OK' && results && results[0]) {\n        resolve(results[0].geometry.location);\n      } else {\n        resolve(null);\n      }\n    });\n  });\n\n  const repairElementorWidth = (shell) => {\n    if (!shell) return;\n\n    const wrapper = shell.closest('.plm-shortcode-wrap');\n    const widgetContainer = shell.closest('.elementor-widget-container');\n    const widget = shell.closest('.elementor-widget');\n\n    if (wrapper) {\n      wrapper.style.setProperty('display', 'block', 'important');\n      wrapper.style.setProperty('width', '100%', 'important');\n      wrapper.style.setProperty('max-width', '100%', 'important');\n      wrapper.style.setProperty('min-width', '1px', 'important');\n      wrapper.style.setProperty('box-sizing', 'border-box', 'important');\n      wrapper.style.setProperty('align-self', 'stretch', 'important');\n      wrapper.style.setProperty('flex', '1 1 100%', 'important');\n    }\n\n    if (widgetContainer) {\n      widgetContainer.style.setProperty('display', 'block', 'important');\n      widgetContainer.style.setProperty('width', '100%', 'important');\n      widgetContainer.style.setProperty('max-width', '100%', 'important');\n      widgetContainer.style.setProperty('min-width', '1px', 'important');\n      widgetContainer.style.setProperty('box-sizing', 'border-box', 'important');\n    }\n\n    if (widget) {\n      widget.style.setProperty('width', '100%', 'important');\n      widget.style.setProperty('max-width', '100%', 'important');\n      widget.style.setProperty('min-width', '1px', 'important');\n      widget.style.setProperty('flex-basis', '100%', 'important');\n      widget.style.setProperty('align-self', 'stretch', 'important');\n    }\n\n    shell.style.setProperty('display', 'block', 'important');\n    shell.style.setProperty('width', '100%', 'important');\n    shell.style.setProperty('max-width', '100%', 'important');\n    shell.style.setProperty('min-width', '1px', 'important');\n    shell.style.setProperty('box-sizing', 'border-box', 'important');\n  };\n\n  const findUsableAncestorWidth = (element) => {\n    let current = element ? element.parentElement : null;\n    while (current && current !== document.body) {\n      const rect = current.getBoundingClientRect();\n      if (rect.width >= 50) return rect.width;\n      current = current.parentElement;\n    }\n    return 0;\n  };\n\n  const waitForSize = (element, timeout = 20000) => new Promise((resolve) => {\n    const started = Date.now();\n    let lastRect = element.getBoundingClientRect();\n\n    const check = () => {\n      repairElementorWidth(element);\n      lastRect = element.getBoundingClientRect();\n\n      if (lastRect.width < 50) {\n        const ancestorWidth = findUsableAncestorWidth(element);\n        const wrapper = element.closest('.plm-shortcode-wrap');\n        const widget = element.closest('.elementor-widget');\n\n        \/\/ Elementor can give an auto-width Shortcode widget an intrinsic width\n        \/\/ of 0 when the map is the only content. Debug text previously masked\n        \/\/ this by supplying intrinsic width. If a parent has a real width, use\n        \/\/ that width as a one-frame recovery and then keep the normal 100% CSS.\n        if (ancestorWidth >= 50) {\n          if (widget && widget.getBoundingClientRect().width < 50) {\n            widget.style.setProperty('width', Math.floor(ancestorWidth) + 'px', 'important');\n            widget.style.setProperty('max-width', '100%', 'important');\n          }\n          if (wrapper && wrapper.getBoundingClientRect().width < 50) {\n            wrapper.style.setProperty('width', Math.floor(ancestorWidth) + 'px', 'important');\n            wrapper.style.setProperty('max-width', '100%', 'important');\n          }\n          lastRect = element.getBoundingClientRect();\n        }\n      }\n\n      if (lastRect.width >= 50 && lastRect.height >= 200) {\n        resolve(lastRect);\n        return;\n      }\n\n      if (!element.isConnected || Date.now() - started >= timeout) {\n        resolve(lastRect);\n        return;\n      }\n\n      window.setTimeout(check, 100);\n    };\n\n    check();\n  });\n\n  const waitForVisibleRetry = (shell) => {\n    if (!shell || shell.dataset.plmSizeWatcher === '1') return;\n    shell.dataset.plmSizeWatcher = '1';\n\n    const tryAgain = () => {\n      if (!shell.isConnected) return;\n      repairElementorWidth(shell);\n      const rect = shell.getBoundingClientRect();\n      if (rect.width < 50 || rect.height < 200) return;\n\n      shell.dataset.plmSizeWatcher = '0';\n      shell.dataset.plmInitialized = '0';\n      shell.classList.remove('is-error');\n      const loading = shell.querySelector('.plm-loading');\n      if (loading) {\n        loading.style.display = 'flex';\n        loading.textContent = 'Loading locations...';\n      }\n      initializeOne(shell);\n    };\n\n    if ('ResizeObserver' in window) {\n      const ro = new ResizeObserver(tryAgain);\n      let current = shell;\n      for (let i = 0; current && i < 5; i++, current = current.parentElement) ro.observe(current);\n    }\n\n    if ('IntersectionObserver' in window) {\n      const io = new IntersectionObserver(tryAgain, { threshold: [0, 0.01] });\n      io.observe(shell);\n    }\n\n    window.addEventListener('resize', tryAgain, { passive: true });\n    document.addEventListener('elementor\/popup\/show', tryAgain);\n    window.setTimeout(tryAgain, 250);\n    window.setTimeout(tryAgain, 1000);\n    window.setTimeout(tryAgain, 3000);\n    window.setTimeout(tryAgain, 8000);\n  };\n\n  const getLatLng = (position) => {\n    if (!position) return { lat: 0, lng: 0 };\n    if (typeof position.lat === 'function' && typeof position.lng === 'function') {\n      return { lat: Number(position.lat()), lng: Number(position.lng()) };\n    }\n    return { lat: Number(position.lat), lng: Number(position.lng) };\n  };\n\n  const distanceKm = (a, b) => {\n    const p1 = getLatLng(a);\n    const p2 = getLatLng(b);\n    const toRad = (n) => (n * Math.PI) \/ 180;\n    const dLat = toRad(p2.lat - p1.lat);\n    const dLng = toRad(p2.lng - p1.lng);\n    const lat1 = toRad(p1.lat);\n    const lat2 = toRad(p2.lat);\n    const hav = Math.sin(dLat \/ 2) ** 2 + Math.cos(lat1) * Math.cos(lat2) * Math.sin(dLng \/ 2) ** 2;\n    return 6371 * 2 * Math.atan2(Math.sqrt(hav), Math.sqrt(1 - hav));\n  };\n\n  const initializeOne = async (shell) => {\n    if (!shell || shell.dataset.plmInitialized === '1' || shell.dataset.plmInitialized === 'initializing') return;\n    shell.dataset.plmInitialized = 'initializing';\n    repairElementorWidth(shell);\n\n    updateDebug(shell.id, 'frontend-script 2.3.6: indl\u00e6st', true);\n\n    const canvas = shell.querySelector('.plm-map-canvas');\n    const configId = shell.dataset.plmConfigId;\n    const configNode = configId ? document.getElementById(configId) : null;\n    if (!canvas || !configNode) {\n      showError(shell, 'Frontend-konfigurationen til kortet mangler.');\n      return;\n    }\n\n    let config;\n    try {\n      config = JSON.parse(configNode.textContent || '{}');\n    } catch (error) {\n      showError(shell, 'Kortets JSON-konfiguration kunne ikke l\u00e6ses.');\n      return;\n    }\n\n    const locations = Array.isArray(config.locations) ? config.locations : [];\n    updateDebug(shell.id, 'locations i JS: ' + locations.length);\n\n    const rect = await waitForSize(shell);\n    updateDebug(shell.id, 'shell st\u00f8rrelse: ' + Math.round(rect.width) + ' x ' + Math.round(rect.height));\n    const canvasRect = canvas.getBoundingClientRect();\n    updateDebug(shell.id, 'canvas st\u00f8rrelse: ' + Math.round(canvasRect.width) + ' x ' + Math.round(canvasRect.height));\n    updateDebug(shell.id, 'shell connected: ' + (shell.isConnected ? 'JA' : 'NEJ'));\n    updateDebug(shell.id, 'canvas connected: ' + (canvas.isConnected ? 'JA' : 'NEJ'));\n\n    if (rect.width < 50 || rect.height < 200) {\n      shell.dataset.plmInitialized = 'waiting-size';\n      const loading = shell.querySelector('.plm-loading');\n      if (loading) {\n        loading.style.display = 'flex';\n        loading.textContent = 'Waiting for the map width...';\n      }\n      updateDebug(shell.id, 'waiting for usable width - now: ' + Math.round(rect.width) + ' x ' + Math.round(rect.height));\n      waitForVisibleRetry(shell);\n      return;\n    }\n\n    let maps;\n    try {\n      maps = await loadGoogleMaps(String(config.apiKey || '').trim());\n      maps = await ensureMapsLibrary(maps);\n    } catch (error) {\n      showError(shell, error.message || 'Google Maps kunne ikke indl\u00e6ses.');\n      return;\n    }\n\n    updateDebug(shell.id, 'google.maps: OK');\n    updateDebug(shell.id, 'importLibrary maps: OK');\n\n    \/\/ Google Maps f\u00e5r et helt rent render-target. Det g\u00f8r os uafh\u00e6ngige af\n    \/\/ Elementors DOM-manipulation og af vores egne loading\/debug-elementer.\n    canvas.replaceChildren();\n    const target = document.createElement('div');\n    target.className = 'plm-google-map-target';\n    target.style.cssText = 'position:absolute!important;inset:0!important;width:100%!important;height:100%!important;min-height:320px!important;display:block!important;visibility:visible!important;opacity:1!important;';\n    canvas.appendChild(target);\n\n    let map;\n    let idleFired = false;\n    let tilesFired = false;\n    try {\n      const options = {\n        center: { lat: 55.6761, lng: 12.5683 },\n        zoom: 9,\n        styles: mapStyles,\n        disableDefaultUI: true,\n        zoomControl: true,\n        clickableIcons: false,\n        gestureHandling: 'cooperative',\n        backgroundColor: '#e9e9e7'\n      };\n      if (maps.RenderingType && maps.RenderingType.RASTER) {\n        options.renderingType = maps.RenderingType.RASTER;\n      }\n      map = new maps.Map(target, options);\n      shell.dataset.plmInitialized = '1';\n    } catch (error) {\n      shell.dataset.plmInitialized = '0';\n      showError(shell, 'Google Maps kunne ikke oprette kortet: ' + (error.message || String(error)));\n      return;\n    }\n\n    \/\/ Vigtigt: .gm-style er en intern Google-klasse og m\u00e5 ikke bruges som\n    \/\/ success\/failure-test. I nyere Maps-versioner kan DOM'en blive oprettet\n    \/\/ asynkront. Loading-overlayet fjernes derfor straks efter en succesfuld\n    \/\/ constructor, og vi bruger de officielle map-events til diagnostik.\n    shell.classList.remove('is-error');\n    shell.classList.add('is-ready');\n    const loading = shell.querySelector('.plm-loading');\n    if (loading) loading.style.display = 'none';\n    updateDebug(shell.id, 'Map constructor: OK');\n    updateDebug(shell.id, 'render target: ' + Math.round(target.getBoundingClientRect().width) + ' x ' + Math.round(target.getBoundingClientRect().height));\n\n    maps.event.addListenerOnce(map, 'idle', () => {\n      idleFired = true;\n      updateDebug(shell.id, 'Google event idle: JA');\n    });\n    maps.event.addListenerOnce(map, 'tilesloaded', () => {\n      tilesFired = true;\n      updateDebug(shell.id, 'Google event tilesloaded: JA');\n    });\n\n    const bounds = new maps.LatLngBounds();\n    const geocoder = new maps.Geocoder();\n    const infoWindow = new maps.InfoWindow();\n    const placedLocations = [];\n    let markerCount = 0;\n    let geocodeFailed = 0;\n\n    for (const location of locations) {\n      let position = null;\n      const lat = Number(location.lat);\n      const lng = Number(location.lng);\n      if (Number.isFinite(lat) && Number.isFinite(lng)) {\n        position = { lat, lng };\n      } else if (location.geocodeAddress) {\n        position = await geocode(geocoder, location.geocodeAddress);\n        if (!position) geocodeFailed++;\n      }\n\n      if (!position) continue;\n\n      const highlightMode = String(config.highlightMode || 'auto');\n      const active = highlightMode === 'all'\n        ? true\n        : (highlightMode === 'none'\n          ? false\n          : (String(location.siteId || '') !== '' && String(location.siteId || '') === String(config.activeSiteId || '')));\n      const marker = new maps.Marker({\n        map,\n        position,\n        title: String(location.title || ''),\n        icon: {\n          url: markerSvg(active, config),\n          scaledSize: active ? new maps.Size(50, 60) : new maps.Size(46, 55),\n          anchor: active ? new maps.Point(25, 53) : new maps.Point(23, 49)\n        },\n        zIndex: active ? 1000 : 10\n      });\n\n      marker.addListener('click', () => {\n        const address = [location.address, [location.zip, location.city].filter(Boolean).join(' ')].filter(Boolean).join('<br>');\n        const html = '<div class=\"plm-info-window\"><strong>' + escapeHtml(location.title || '') + '<\/strong>'\n          + (address ? '<div>' + address + '<\/div>' : '')\n          + (location.url ? '<a href=\"' + escapeHtml(location.url) + '\">Katso toimipiste<\/a>' : '')\n          + '<\/div>';\n        infoWindow.setContent(html);\n        infoWindow.open({ map, anchor: marker });\n      });\n\n      bounds.extend(position);\n      placedLocations.push({ position, active, location });\n      markerCount++;\n    }\n\n    updateDebug(shell.id, 'markers: ' + markerCount);\n    updateDebug(shell.id, 'geocode fejl: ' + geocodeFailed);\n\n    if (markerCount === 0) {\n      showError(shell, 'Google Maps blev indl\u00e6st, men ingen Privat-lokationer kunne placeres p\u00e5 kortet.');\n      return;\n    }\n\n    let focusBounds = bounds;\n    let focusPadding = 55;\n    const contextualHighlight = String(config.highlightMode || 'auto') === 'auto' && !config.overviewMode;\n    const activePlaced = contextualHighlight ? placedLocations.find((item) => item.active) : null;\n\n    if (activePlaced && placedLocations.length > 1) {\n      const nearest = placedLocations\n        .filter((item) => !item.active)\n        .sort((a, b) => distanceKm(activePlaced.position, a.position) - distanceKm(activePlaced.position, b.position))\n        .slice(0, 4);\n\n      const focusItems = [activePlaced, ...nearest];\n      focusBounds = new maps.LatLngBounds();\n      focusItems.forEach((item) => focusBounds.extend(item.position));\n      focusPadding = 70;\n      updateDebug(shell.id, 'viewport: aktiivinen sijainti + ' + nearest.length + ' l\u00e4hin');\n    }\n\n    const requestedZoomRaw = Number(config.zoom);\n    const hasRequestedZoom = Number.isFinite(requestedZoomRaw) && requestedZoomRaw >= 1 && requestedZoomRaw <= 22;\n    const requestedZoom = hasRequestedZoom ? requestedZoomRaw : null;\n\n    const applyViewport = () => {\n      if (markerCount === 1) {\n        map.setCenter(bounds.getCenter());\n        map.setZoom(requestedZoom !== null ? requestedZoom : 13);\n        return;\n      }\n\n      map.fitBounds(focusBounds, focusPadding);\n      if (requestedZoom !== null) {\n        window.setTimeout(() => map.setZoom(requestedZoom), 0);\n      }\n    };\n\n    applyViewport();\n    updateDebug(shell.id, 'zoom: ' + (requestedZoom !== null ? requestedZoom : 'auto'));\n\n    const forceResize = () => {\n      try {\n        maps.event.trigger(map, 'resize');\n        applyViewport();\n      } catch (error) {\n        \/\/ No-op.\n      }\n    };\n\n    window.setTimeout(forceResize, 250);\n    window.setTimeout(forceResize, 1000);\n    window.setTimeout(forceResize, 2500);\n    window.setTimeout(forceResize, 5000);\n\n    \/\/ Elementor can finish layout\/animations after the shortcode has already\n    \/\/ initialized. Repaint whenever the map becomes visible or the viewport\n    \/\/ changes, so non-debug mode behaves exactly like debug mode.\n    if ('IntersectionObserver' in window) {\n      const intersectionObserver = new IntersectionObserver((entries) => {\n        entries.forEach((entry) => {\n          if (entry.isIntersecting && entry.intersectionRatio > 0) {\n            forceResize();\n          }\n        });\n      }, { threshold: [0, 0.01, 0.25] });\n      intersectionObserver.observe(shell);\n    }\n\n    window.addEventListener('load', forceResize, { once: true });\n    window.addEventListener('resize', forceResize, { passive: true });\n\n    \/\/ Kun diagnostik - ingen fatal fejl baseret p\u00e5 Googles private DOM-klasser.\n    window.setTimeout(() => {\n      updateDebug(shell.id, 'target childElements efter 2s: ' + target.childElementCount);\n      updateDebug(shell.id, 'idle efter 2s: ' + (idleFired ? 'JA' : 'NEJ'));\n      updateDebug(shell.id, 'tilesloaded efter 2s: ' + (tilesFired ? 'JA' : 'NEJ'));\n      updateDebug(shell.id, 'target connected efter 2s: ' + (target.isConnected ? 'JA' : 'NEJ'));\n    }, 2000);\n\n    window.setTimeout(() => {\n      if (!idleFired && target.childElementCount === 0) {\n        updateDebug(shell.id, 'ADVARSEL: Google har endnu ikke indsat DOM efter 8s. Kortet skjules ikke af pluginet.');\n        console.warn('[Pelican Location Map] Google Map constructor lykkedes, men render-target er stadig tomt efter 8 sekunder.', { shell, target, map });\n      }\n    }, 8000);\n\n    if ('ResizeObserver' in window) {\n      const observer = new ResizeObserver(() => forceResize());\n      observer.observe(shell);\n    }\n  };\n\n  const boot = () => {\n    const shells = document.querySelectorAll('.pelican-location-map[data-plm-map=\"1\"]');\n    shells.forEach((shell) => initializeOne(shell));\n  };\n\n  window.PelicanLocationMapBoot = boot;\n  boot();\n  window.setTimeout(boot, 250);\n  window.setTimeout(boot, 1000);\n  window.setTimeout(boot, 2500);\n\n  document.addEventListener('elementor\/frontend\/init', () => {\n    boot();\n    window.setTimeout(boot, 300);\n    window.setTimeout(boot, 1500);\n  });\n})();\n<\/script><script>(function(){var run=function(){if(window.PelicanLocationMapBoot){window.PelicanLocationMapBoot();window.setTimeout(window.PelicanLocationMapBoot,80);window.setTimeout(window.PelicanLocationMapBoot,600);window.setTimeout(window.PelicanLocationMapBoot,1800);}};if(document.readyState===\"loading\"){document.addEventListener(\"DOMContentLoaded\",run);}run();window.addEventListener(\"load\",run,{once:true});})();<\/script><\/div><\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-7ce2995 e-flex e-con-boxed e-con e-child\" data-id=\"7ce2995\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-96c4189 elementor-widget elementor-widget-shortcode\" data-id=\"96c4189\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">\n<div class=\"results-page\">\n    <div class=\"results-page__main\" aria-label=\"Results page content\">\n\n        \n        <!-- Size selector -->\n        \n        <section class=\"results-page__sizes\">\n            <div class=\"container\">\n                <div class=\"results-sizes js-results-sizes\">\n                                                            <form class=\"results-sizes__form\" action=\"#\" method=\"get\" aria-label=\"Choose storage unit size\">\n                        <div class=\"results-sizes__slider swiper js-results-sizes-swiper\">\n                            <div class=\"results-sizes__list swiper-wrapper\" role=\"radiogroup\" aria-label=\"Available unit sizes\">\n\n                                <div class=\"results-sizes__item swiper-slide\">\n                                    <label class=\"results-sizes__card\" for=\"unit-size-small\">\n                                        <input class=\"results-sizes__input\" id=\"unit-size-small\" type=\"radio\" name=\"unit-size\" value=\"small\">\n                                        <span class=\"results-sizes__body\">\n                                            <span class=\"results-sizes__title\">Small<\/span>\n                                            <span class=\"results-sizes__metric\">Up to 3 m<sup>2<\/sup><\/span>\n                                            <span class=\"results-sizes__description\">\n                                                Perfect for boxes, suitcases, sports equipment and smaller pieces of furniture.                                            <\/span>\n                                            <span class=\"results-sizes__visual\">\n                                                <span class=\"results-sizes__media\" aria-hidden=\"true\">\n                                                    <img decoding=\"async\" src=\"https:\/\/pelican.fi\/wp-content\/themes\/pelican\/resources\/images\/results\/unit-sizes\/small-private.png\" alt=\"Small storage unit\" loading=\"lazy\">\n                                                <\/span>\n                                            <\/span>\n                                        <\/span>\n                                    <\/label>\n                                <\/div>\n\n                                <div class=\"results-sizes__item swiper-slide\">\n                                    <label class=\"results-sizes__card\" for=\"unit-size-medium\">\n                                        <input class=\"results-sizes__input\" id=\"unit-size-medium\" type=\"radio\" name=\"unit-size\" value=\"medium\">\n                                        <span class=\"results-sizes__body\">\n                                            <span class=\"results-sizes__title\">Medium<\/span>\n                                            <span class=\"results-sizes__metric\">From 4 up to 8 m<sup>2<\/sup><\/span>\n                                            <span class=\"results-sizes__description\">\n                                                Plenty of space for furniture, boxes and belongings from a smaller home.                                            <\/span>\n                                            <span class=\"results-sizes__visual\">\n                                                <span class=\"results-sizes__media\" aria-hidden=\"true\">\n                                                    <img decoding=\"async\" src=\"https:\/\/pelican.fi\/wp-content\/themes\/pelican\/resources\/images\/results\/unit-sizes\/medium-private.png\" alt=\"Medium storage unit\" loading=\"lazy\">\n                                                <\/span>\n                                            <\/span>\n                                        <\/span>\n                                    <\/label>\n                                <\/div>\n\n                                <div class=\"results-sizes__item swiper-slide\">\n                                    <label class=\"results-sizes__card\" for=\"unit-size-large\">\n                                        <input class=\"results-sizes__input\" id=\"unit-size-large\" type=\"radio\" name=\"unit-size\" value=\"large\">\n                                        <span class=\"results-sizes__body\">\n                                            <span class=\"results-sizes__title\">Large<\/span>\n                                            <span class=\"results-sizes__metric\">From 9 up to 14 m<sup>2<\/sup><\/span>\n                                            <span class=\"results-sizes__description\">\n                                                Ideal for larger amounts of household belongings, furniture, bicycles and items from several rooms.                                            <\/span>\n                                            <span class=\"results-sizes__visual\">\n                                                <span class=\"results-sizes__media\" aria-hidden=\"true\">\n                                                    <img decoding=\"async\" src=\"https:\/\/pelican.fi\/wp-content\/themes\/pelican\/resources\/images\/results\/unit-sizes\/large-private.png\" alt=\"Large storage unit\" loading=\"lazy\">\n                                                <\/span>\n                                            <\/span>\n                                        <\/span>\n                                    <\/label>\n                                <\/div>\n\n                                <div class=\"results-sizes__item swiper-slide\">\n                                    <label class=\"results-sizes__card\" for=\"unit-size-xl\">\n                                        <input class=\"results-sizes__input\" id=\"unit-size-xl\" type=\"radio\" name=\"unit-size\" value=\"extra-large\">\n                                        <span class=\"results-sizes__body\">\n                                            <span class=\"results-sizes__title\">Extra Large<\/span>\n                                            <span class=\"results-sizes__metric\">From 15 m<sup>2<\/sup> and larger<\/span>\n                                            <span class=\"results-sizes__description\">\n                                                Lots of space for the contents of an entire home, large furniture and plenty of moving boxes.                                            <\/span>\n                                            <span class=\"results-sizes__visual\">\n                                                <span class=\"results-sizes__media\" aria-hidden=\"true\">\n                                                    <img decoding=\"async\" src=\"https:\/\/pelican.fi\/wp-content\/themes\/pelican\/resources\/images\/results\/unit-sizes\/extra-large-private.png\" alt=\"Extra Large storage unit\" loading=\"lazy\">\n                                                <\/span>\n                                            <\/span>\n                                        <\/span>\n                                    <\/label>\n                                <\/div>\n\n                            <\/div>\n                            <div class=\"results-sizes__controls\">\n                                <button class=\"results-sizes__control js-results-sizes-prev\" type=\"button\" aria-label=\"Previous unit size\">\n                                    <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n                                        <path d=\"M13 4L6.75 10.25L13 16.5\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n                                    <\/svg>\n                                <\/button>\n                                <button class=\"results-sizes__control js-results-sizes-next\" type=\"button\" aria-label=\"Next unit size\">\n                                    <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n                                        <path d=\"M7 4L13.25 10.25L7 16.5\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n                                    <\/svg>\n                                <\/button>\n                            <\/div>\n                        <\/div>\n                    <\/form>\n                                    <\/div>\n            <\/div>\n        <\/section>\n        \n\n        <!-- Locations container (populated by JS) -->\n        <section class=\"results-page__locations\">\n            <div class=\"container\">\n                <div class=\"results-locations js-results-locations\" aria-label=\"Storage locations\">\n                    <div class=\"results-locations__loader\" role=\"status\" aria-live=\"polite\" aria-label=\"Loading locations\"><span><\/span><\/div>\n                <\/div>\n            <\/div>\n        <\/section>\n\n    <\/div>\n<\/div>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-bdea7dd e-flex e-con-boxed e-con e-parent\" data-id=\"bdea7dd\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-063374b e-con-full reviews-slider e-flex e-con e-child\" data-id=\"063374b\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-36a1624 e-con-full e-flex e-con e-child\" data-id=\"36a1624\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-4568815 elementor-widget elementor-widget-html\" data-id=\"4568815\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<script defer async src='https:\/\/cdn.trustindex.io\/loader.js?a5c0bc98234902389446f7406d9'><\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Pelican locations in the Helsinki metropolitan area and Turku You can find Pelican locations throughout the Helsinki metropolitan area, as well as in Turku. We offer secure storage facilities for both private individuals and businesses. Visit your nearest location or call 0207 007 700 \u2013 we are happy to help you find the right solution.<\/p>\n","protected":false},"author":5,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"inline_featured_image":false,"footnotes":""},"class_list":["post-17109","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v28.5 (Yoast SEO v28.8) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Locations | Pelican Self Storage<\/title>\n<meta name=\"description\" content=\"Find your nearest location and book a suitable storage unit. Read more.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/pelican.fi\/en\/locations\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Locations\" \/>\n<meta property=\"og:description\" content=\"Find your nearest location and book a suitable storage unit. Read more.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/pelican.fi\/en\/locations\/\" \/>\n<meta property=\"og:site_name\" content=\"Vuokraa k\u00e4tev\u00e4 varasto | Pelican Self Storage\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/PelicanSelfStorageDenmark\" \/>\n<meta property=\"article:modified_time\" content=\"2026-11-03T15:54:26+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/pelican.fi\/wp-content\/uploads\/2026\/06\/Pelican-Social-Image.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"18 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/pelican.fi\\\/en\\\/locations\\\/\",\"url\":\"https:\\\/\\\/pelican.fi\\\/en\\\/locations\\\/\",\"name\":\"Locations | Pelican Self Storage\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/pelican.fi\\\/en\\\/#website\"},\"datePublished\":\"2026-05-19T07:29:59+00:00\",\"dateModified\":\"2026-11-03T15:54:26+00:00\",\"description\":\"Find your nearest location and book a suitable storage unit. Read more.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/pelican.fi\\\/en\\\/locations\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/pelican.fi\\\/en\\\/locations\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/pelican.fi\\\/en\\\/locations\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/pelican.fi\\\/en\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Locations\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/pelican.fi\\\/en\\\/#website\",\"url\":\"https:\\\/\\\/pelican.fi\\\/en\\\/\",\"name\":\"Pelican Self Storage\",\"description\":\"Vuokraa varastotila Pelican Self Storagelta. Edulliset hinnat \u2714 Toimipisteet ymp\u00e4ri Helsinki\u00e4 \u2714 Erikokoisia varastotiloja \u2714 Ilmainen per\u00e4k\u00e4rryn lainaus \u2714\",\"publisher\":{\"@id\":\"https:\\\/\\\/pelican.fi\\\/en\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/pelican.fi\\\/en\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/pelican.fi\\\/en\\\/#organization\",\"name\":\"Pelican Self Storage\",\"url\":\"https:\\\/\\\/pelican.fi\\\/en\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/pelican.fi\\\/en\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/pelican.fi\\\/wp-content\\\/uploads\\\/2026\\\/05\\\/Logo.svg\",\"contentUrl\":\"https:\\\/\\\/pelican.fi\\\/wp-content\\\/uploads\\\/2026\\\/05\\\/Logo.svg\",\"width\":184,\"height\":20,\"caption\":\"Pelican Self Storage\"},\"image\":{\"@id\":\"https:\\\/\\\/pelican.fi\\\/en\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/PelicanSelfStorageDenmark\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/2030773\\\/\",\"https:\\\/\\\/www.instagram.com\\\/pelicanselfstorage\\\/\"]}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Locations | Pelican Self Storage","description":"Find your nearest location and book a suitable storage unit. Read more.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/pelican.fi\/en\/locations\/","og_locale":"en_US","og_type":"article","og_title":"Locations","og_description":"Find your nearest location and book a suitable storage unit. Read more.","og_url":"https:\/\/pelican.fi\/en\/locations\/","og_site_name":"Vuokraa k\u00e4tev\u00e4 varasto | Pelican Self Storage","article_publisher":"https:\/\/www.facebook.com\/PelicanSelfStorageDenmark","article_modified_time":"2026-11-03T15:54:26+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/pelican.fi\/wp-content\/uploads\/2026\/06\/Pelican-Social-Image.jpg","type":"image\/jpeg"}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"18 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/pelican.fi\/en\/locations\/","url":"https:\/\/pelican.fi\/en\/locations\/","name":"Locations | Pelican Self Storage","isPartOf":{"@id":"https:\/\/pelican.fi\/en\/#website"},"datePublished":"2026-05-19T07:29:59+00:00","dateModified":"2026-11-03T15:54:26+00:00","description":"Find your nearest location and book a suitable storage unit. Read more.","breadcrumb":{"@id":"https:\/\/pelican.fi\/en\/locations\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/pelican.fi\/en\/locations\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/pelican.fi\/en\/locations\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/pelican.fi\/en\/"},{"@type":"ListItem","position":2,"name":"Locations"}]},{"@type":"WebSite","@id":"https:\/\/pelican.fi\/en\/#website","url":"https:\/\/pelican.fi\/en\/","name":"Pelican Self Storage","description":"Vuokraa varastotila Pelican Self Storagelta. Edulliset hinnat \u2714 Toimipisteet ymp\u00e4ri Helsinki\u00e4 \u2714 Erikokoisia varastotiloja \u2714 Ilmainen per\u00e4k\u00e4rryn lainaus \u2714","publisher":{"@id":"https:\/\/pelican.fi\/en\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/pelican.fi\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/pelican.fi\/en\/#organization","name":"Pelican Self Storage","url":"https:\/\/pelican.fi\/en\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/pelican.fi\/en\/#\/schema\/logo\/image\/","url":"https:\/\/pelican.fi\/wp-content\/uploads\/2026\/05\/Logo.svg","contentUrl":"https:\/\/pelican.fi\/wp-content\/uploads\/2026\/05\/Logo.svg","width":184,"height":20,"caption":"Pelican Self Storage"},"image":{"@id":"https:\/\/pelican.fi\/en\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/PelicanSelfStorageDenmark","https:\/\/www.linkedin.com\/company\/2030773\/","https:\/\/www.instagram.com\/pelicanselfstorage\/"]}]}},"_links":{"self":[{"href":"https:\/\/pelican.fi\/en\/wp-json\/wp\/v2\/pages\/17109","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pelican.fi\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/pelican.fi\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/pelican.fi\/en\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/pelican.fi\/en\/wp-json\/wp\/v2\/comments?post=17109"}],"version-history":[{"count":1,"href":"https:\/\/pelican.fi\/en\/wp-json\/wp\/v2\/pages\/17109\/revisions"}],"predecessor-version":[{"id":17110,"href":"https:\/\/pelican.fi\/en\/wp-json\/wp\/v2\/pages\/17109\/revisions\/17110"}],"wp:attachment":[{"href":"https:\/\/pelican.fi\/en\/wp-json\/wp\/v2\/media?parent=17109"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}