{"id":624,"date":"2026-04-27T16:29:52","date_gmt":"2026-04-27T14:29:52","guid":{"rendered":"https:\/\/leyton.majjane.agency\/se\/contact\/"},"modified":"2026-07-26T00:47:58","modified_gmt":"2026-07-25T22:47:58","slug":"kontakta-oss","status":"publish","type":"page","link":"https:\/\/leyton.com\/se\/kontakta-oss\/","title":{"rendered":"Kontakta oss"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"624\" class=\"elementor elementor-624\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-66775c40 e-con-full e-flex e-con e-parent\" data-id=\"66775c40\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-48361e07 elementor-widget__width-initial elementor-widget elementor-widget-heading\" data-id=\"48361e07\" 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\">Prata med v\u00e5ra <span>experter<\/span><\/h1>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-65adfe53 elementor-widget__width-initial elementor-widget elementor-widget-text-editor\" data-id=\"65adfe53\" 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>Oavsett om du \u00e4r redo att g\u00f6ra en ans\u00f6kan eller bara utforskar dina m\u00f6jligheter, vill vi g\u00e4rna h\u00f6ra fr\u00e5n dig! Kontakta oss och uppt\u00e4ck hur vi kan hj\u00e4lpa ditt f\u00f6retag att frig\u00f6ra v\u00e4rdefulla ekonomiska m\u00f6jligheter.<\/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-64ec5cd elementor-hidden-widescreen elementor-hidden-desktop elementor-hidden-laptop elementor-hidden-tablet_extra elementor-hidden-tablet elementor-hidden-mobile_extra elementor-hidden-mobile e-flex e-con-boxed e-con e-parent\" data-id=\"64ec5cd\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-a756447 e-con-full e-flex e-con e-child\" data-id=\"a756447\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-638b4c6 elementor-widget elementor-widget-html\" data-id=\"638b4c6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<div id=\"my-custom-calendly\" style=\"min-width:320px; width:100% !important; height:700px; padding:0 !important;\"><\/div>\n\n<script type=\"text\/javascript\" src=\"https:\/\/assets.calendly.com\/assets\/external\/widget.js\" async><\/script>\n\n<script>\n  window.addEventListener('load', function() {\n    if (window.Calendly) {\n      const targetNode = document.getElementById('my-custom-calendly');\n      \n      if (targetNode) {\n        Calendly.initInlineWidget({\n          parentElement: targetNode,\n          url: 'https:\/\/calendly.com\/leyton_uk\/book-a-meeting?background_color=transparent&text_color=1A202C&primary_color=EC6839&hide_landing_page_details=1',\n          resize: true\n        });\n\n        setTimeout(function() {\n          var iframe = targetNode.querySelector('iframe');\n          if (iframe) {\n            iframe.style.setProperty('width', '100%', 'important');\n            iframe.style.setProperty('min-width', '100%', 'important');\n            iframe.removeAttribute('width');\n          }\n        }, 2000);\n      }\n    }\n  });\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-25b4d8d elementor-widget__width-initial elementor-hidden-mobile elementor-widget elementor-widget-button\" data-id=\"25b4d8d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"#\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Privacy policy<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-49b74376 e-flex e-con-boxed e-con e-parent\" data-id=\"49b74376\" 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-bbcba4c elementor-widget elementor-widget-heading\" data-id=\"bbcba4c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Skicka en f\u00f6rfr\u00e5gan<\/h2>\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-3a7e8eb0 e-grid e-con-full e-con e-child\" data-id=\"3a7e8eb0\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-74dce1a0 e-con-full is-dark e-flex e-con e-child\" data-id=\"74dce1a0\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-37460d74 elementor-widget elementor-widget-text-editor\" data-id=\"37460d74\" 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>KONTAKTA OSS<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-525a6689 elementor-widget elementor-widget-heading\" data-id=\"525a6689\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<div class=\"elementor-heading-title elementor-size-default\">Vi hj\u00e4lper dig g\u00e4rna<\/div>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2767292a elementor-widget elementor-widget-text-editor\" data-id=\"2767292a\" 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>Fyll i formul\u00e4ret s\u00e5 h\u00f6r en av v\u00e5ra medarbetare av sig och hj\u00e4lper dig vidare.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e45cd4a elementor-widget elementor-widget-html\" data-id=\"e45cd4a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!--<iframe -->\n<!--    src=\"https:\/\/go-uk.leyton.com\/l\/1089512\/2026-05-21\/qx4dck\" -->\n<!--    width=\"100%\" -->\n<!--    height=\"850px\" -->\n<!--    frameborder=\"0\"-->\n<!--    style=\"border: none; width: 100%;\">-->\n<!--<\/iframe>-->\n\n<iframe \n    id=\"pardot-iframe\"\n    src=\"https:\/\/go-sw.leyton.com\/l\/1089572\/2026-07-17\/c4jclg\" \n    width=\"100%\" \n    frameborder=\"0\"\n    style=\"border: none; width: 100%; height: 850px;\">\n<\/iframe>\n<script>\nwindow.addEventListener(\"message\", function(event) {\n\n    if (!event.data) return;\n\n    if (event.data.event === \"pardotsubmission\") {\n\n        window.dataLayer = window.dataLayer || [];\n\n        window.dataLayer.push({\n            event: \"pardotsubmission\",\n            formId: event.data.formId\n        });\n\n    }\n\n});\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-683caa3 e-flex e-con-boxed e-con e-parent\" data-id=\"683caa3\" 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-7a542f7 e-grid e-con-boxed e-con e-child\" data-id=\"7a542f7\" 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-4859b5e e-con-full e-flex e-con e-child\" data-id=\"4859b5e\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-43faed1 liquid-glass elementor-widget elementor-widget-text-editor\" data-id=\"43faed1\" 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>GLOBAL FINANSIERINGSR\u00c5DGIVNING<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e395fb2 elementor-widget__width-initial elementor-widget elementor-widget-heading\" data-id=\"e395fb2\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span data-metadata=\"&lt;!--(figmeta)eyJmaWxlS2V5IjoiM1VxbTZZZkd6YmVkT1V5eGhVa3oyZiIsInBhc3RlSUQiOjg5MDY0MzQ3NywiZGF0YVR5cGUiOiJzY2VuZSJ9Cg==(\/figmeta)--&gt;\"><\/span>En partner f\u00f6r alla era marknader.<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5b6e4f0 elementor-widget__width-initial elementor-widget elementor-widget-html\" data-id=\"5b6e4f0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<style>\n  .gfi-select {\n    position: relative;\n    width: 100%;\n    max-width: 460px;\n    font-family: inherit;\n    user-select: none;\n  }\n\n  \/* Keep native select active for data layers but hide visually *\/\n  .gfi-select select {\n    position: absolute;\n    width: 1px; height: 1px;\n    padding: 0; margin: -1px;\n    overflow: hidden;\n    clip: rect(0, 0, 0, 0);\n    white-space: nowrap;\n    border: 0;\n    opacity: 0;\n    pointer-events: none;\n  }\n\n  .gfi-select__trigger {\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    width: 100%;\n    padding: 18px 28px;\n    border: 1.5px solid #CCC;\n    border-radius: 999px;\n    background: #fff;\n    cursor: pointer;\n    box-sizing: border-box;\n    \/* Updated Typography Style *\/\n    color: #757575;\n    font-family: Montserrat, sans-serif;\n    font-size: 19.8px;\n    font-style: normal;\n    font-weight: 400;\n    line-height: normal;\n    transition: border-color .2s ease;\n  }\n  .gfi-select__trigger:hover,\n  .gfi-select__trigger:focus { \n    border-color: #CCC;\n    outline: none; \n  }\n  .gfi-select.is-open .gfi-select__trigger {\n    border-color: #CCC;\n  }\n  .gfi-select__trigger.is-placeholder { \n    \/* Maintained requested style on placeholder status *\/\n    color: #757575; \n  } \n\n  .gfi-select__chevron {\n    width: 12px; height: 12px;\n    border-right: 2px solid #757575;\n    border-bottom: 2px solid #757575;\n    transform: rotate(45deg);\n    margin-top: -5px;\n    transition: transform .25s ease;\n  }\n  .gfi-select.is-open .gfi-select__chevron {\n    transform: rotate(-135deg); margin-top: 3px;\n  }\n\n  .gfi-select__list {\n    position: absolute;\n    top: calc(100% + 8px);\n    left: 0; right: 0;\n    background: #fff;\n    border: 1px solid #e5e9ef;\n    border-radius: 14px;\n    box-shadow: 0 12px 32px rgba(10, 37, 64, .12);\n    max-height: 320px;\n    overflow-y: auto;\n    padding: 12px 0;\n    margin: 0;\n    list-style: none;\n    z-index: 999;\n    opacity: 0;\n    transform: translateY(-6px);\n    pointer-events: none;\n    transition: opacity .18s ease, transform .18s ease;\n  }\n  .gfi-select.is-open .gfi-select__list {\n    opacity: 1; transform: translateY(0); pointer-events: auto;\n  }\n\n  .gfi-select__list li {\n    padding: 12px 28px;\n    cursor: pointer;\n    transition: background .15s ease;\n    \/* Updated Typography Style for options list *\/\n    color: #757575;\n    font-family: Montserrat, sans-serif;\n    font-size: 19.8px;\n    font-style: normal;\n    font-weight: 400;\n    line-height: normal;\n  }\n  .gfi-select__list li:hover,\n  .gfi-select__list li.is-active { background: #eef2f7; }\n  .gfi-select__list li[data-placeholder] { display: none; }\n\n  @media (max-width: 600px) {\n    .gfi-select__trigger { padding: 16px 22px; font-size: 17px; }\n    .gfi-select__list li { padding: 12px 22px; font-size: 17px; }\n  }\n<\/style>\n\n<div class=\"gfi-select\">\n  <select name=\"country\" data-gfi=\"select\" aria-label=\"Select a country\">\n    <option value=\"\">Select a country<\/option>\n  <\/select>\n<\/div>\n\n<script>\n(function () {\n  var wrap = document.querySelector('.gfi-select');\n  if (!wrap) return;\n\n  var select = wrap.querySelector('select');\n\n  function initCustomUi() {\n    if (select.options.length <= 1) {\n      setTimeout(initCustomUi, 50);\n      return;\n    }\n\n    if (wrap.dataset.enhanced) return;\n    wrap.dataset.enhanced = '1';\n\n    var current = select.options[select.selectedIndex];\n\n    var trigger = document.createElement('div');\n    trigger.className = 'gfi-select__trigger' + (!select.value ? ' is-placeholder' : '');\n    trigger.setAttribute('role', 'combobox');\n    trigger.setAttribute('aria-haspopup', 'listbox');\n    trigger.setAttribute('aria-expanded', 'false');\n    trigger.setAttribute('tabindex', '0');\n    trigger.innerHTML =\n      '<span class=\"gfi-select__label\">' + (current ? current.text : 'Select a country') + '<\/span>' +\n      '<span class=\"gfi-select__chevron\" aria-hidden=\"true\"><\/span>';\n\n    var list = document.createElement('ul');\n    list.className = 'gfi-select__list';\n    list.setAttribute('role', 'listbox');\n\n    function buildListItems() {\n      list.innerHTML = '';\n      Array.from(select.options).forEach(function (opt, i) {\n        var li = document.createElement('li');\n        li.textContent = opt.text;\n        li.dataset.value = opt.value;\n        if (opt.value === '') li.dataset.placeholder = '1';\n        if (i === select.selectedIndex && opt.value !== '') li.classList.add('is-active');\n        list.appendChild(li);\n      });\n    }\n    buildListItems();\n\n    wrap.appendChild(trigger);\n    wrap.appendChild(list);\n\n    var label = trigger.querySelector('.gfi-select__label');\n\n    function setOpen(open) {\n      var willOpen = (typeof open === 'boolean') ? open : !wrap.classList.contains('is-open');\n      wrap.classList.toggle('is-open', willOpen);\n      trigger.setAttribute('aria-expanded', willOpen);\n    }\n\n    function syncUIFromSelect() {\n      var opt = select.options[select.selectedIndex];\n      label.textContent = opt ? opt.text : '';\n      trigger.classList.toggle('is-placeholder', !select.value);\n      list.querySelectorAll('li').forEach(function (li) {\n        li.classList.toggle('is-active', li.dataset.value === select.value && select.value !== '');\n      });\n    }\n\n    function pick(value) {\n      select.value = value;\n      select.dispatchEvent(new Event('input',  { bubbles: true }));\n      select.dispatchEvent(new Event('change', { bubbles: true }));\n      syncUIFromSelect();\n    }\n\n    trigger.addEventListener('click', function (e) { e.stopPropagation(); setOpen(); });\n    trigger.addEventListener('keydown', function (e) {\n      if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); setOpen(); }\n      if (e.key === 'Escape') setOpen(false);\n    });\n\n    list.addEventListener('click', function (e) {\n      var li = e.target.closest('li');\n      if (!li || li.dataset.placeholder) return;\n      pick(li.dataset.value);\n      setOpen(false);\n    });\n\n    select.addEventListener('change', syncUIFromSelect);\n    \n    var observer = new MutationObserver(function() {\n      buildListItems();\n      syncUIFromSelect();\n    });\n    observer.observe(select, { childList: true, characterData: true, subtree: true });\n\n    document.addEventListener('click', function (e) {\n      if (!wrap.contains(e.target)) setOpen(false);\n    });\n  }\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', initCustomUi);\n  } else {\n    initCustomUi();\n  }\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b8d3248 elementor-widget elementor-widget-text-editor\" data-id=\"b8d3248\" data-element_type=\"widget\" data-e-type=\"widget\" data-gfi=\"description\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Med global n\u00e4rvaro och multidisciplin\u00e4r expertis i internationell skala kombinerar vi lokal f\u00f6rankring med ett globalt perspektiv som g\u00f6r det m\u00f6jligt att m\u00f6ta varje utmaning.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-d28f7d8 e-con-full e-flex e-con e-child\" data-id=\"d28f7d8\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-692d71c e-con-full e-flex e-con e-child\" data-id=\"692d71c\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-25b2649 elementor-widget elementor-widget-text-editor\" data-id=\"25b2649\" 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>20<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3c99b90 elementor-widget elementor-widget-text-editor\" data-id=\"3c99b90\" 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>l\u00e4nder<\/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-e4dc646 e-con-full e-flex e-con e-child\" data-id=\"e4dc646\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-d41c4d9 elementor-widget elementor-widget-text-editor\" data-id=\"d41c4d9\" 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>+40<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4e6c8eb elementor-widget elementor-widget-text-editor\" data-id=\"4e6c8eb\" 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>kontor<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-33fb8a7 fx-flood-icon elementor-widget elementor-widget-button\" data-id=\"33fb8a7\" data-element_type=\"widget\" data-e-type=\"widget\" id=\"unique-location-cta\" data-gfi=\"button\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"\/se\/platser\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t<span class=\"elementor-button-icon\">\n\t\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"><path d=\"M3.23438 7.75781L12.2849 7.75781\" stroke=\"#012D48\" stroke-width=\"1.29293\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><\/path><path d=\"M7.75781 3.2323L12.2831 7.75755L7.75781 12.2828\" stroke=\"#012D48\" stroke-width=\"1.29293\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><\/path><\/svg>\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">H\u00e4r finns vi<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3db8a22 elementor-widget elementor-widget-html\" data-id=\"3db8a22\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!-- ============================================================\r\n  GFI GLOBE \u2014 Elementor HTML Widget \u2014 Three.js r128\r\n  ============================================================ -->\r\n\r\n<link rel=\"preload\" href=\"https:\/\/cdn.jsdelivr.net\/npm\/world-atlas@2\/land-110m.json\"\r\n      as=\"fetch\" crossorigin=\"anonymous\">\r\n\r\n<style>\r\n  [data-gfi=\"globe-wrap\"] {\r\n    position: relative;\r\n    width: 100%;\r\n    height: 100%;\r\n    min-height: 550px;\r\n    overflow: hidden;\r\n  }\r\n  @media (max-width: 767px) {\r\n    [data-gfi=\"globe-wrap\"] {\r\n      min-height: 0;\r\n      height: auto;\r\n      aspect-ratio: 1 \/ 1;\r\n    }\r\n  }\r\n  @media (max-width: 768px) and (min-width: 500px) {\r\n  .gfi-select {\r\n    margin-inline: auto !important;\r\n  }\r\n}\r\n<\/style>\r\n\r\n<div data-gfi=\"globe-wrap\">\r\n  <div data-gfi=\"canvas-mount\"\r\n       style=\"position:absolute;inset:0;width:100%;height:100%;cursor:grab;\"><\/div>\r\n  <canvas data-gfi=\"label-canvas\"\r\n          style=\"position:absolute;inset:0;width:100%;height:100%;pointer-events:none;z-index:2;\"><\/canvas>\r\n  <div data-gfi=\"tooltip\"\r\n       style=\"position:absolute;pointer-events:none;opacity:0;transition:opacity .15s;\r\n              z-index:10;white-space:nowrap;background:rgba(13,43,78,.9);color:#fff;\r\n              font:500 11px\/1 'DM Sans',sans-serif;padding:1rem;border-radius:2px;\"><\/div>\r\n<\/div>\r\n\r\n<script async src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/three.js\/r128\/three.min.js\"><\/script>\r\n<script>\r\n(function (win, doc) {\r\n  'use strict';\r\n\r\n  var R          = 1.9;\r\n  var CAM_Z      = 6.5;\r\n  var FOV        = 39;\r\n  var SPIN_SPEED = 0.10;\r\n  var DRAG_SPD   = 0.005;\r\n  var FLY_MS     = 950;\r\n  var PIN_DEF    = 0x0d2b4e;\r\n  var PIN_ACT    = 0x0078d4;\r\n  var TILT_X     = 0.15;\r\n  var LAND_URL   = 'https:\/\/cdn.jsdelivr.net\/npm\/world-atlas@2\/land-110m.json';\r\n\r\n  function computeCamZ(w, h) {\r\n    var aspect    = w \/ h;\r\n    var vFovRad   = FOV * Math.PI \/ 180;\r\n    var hFovRad   = 2 * Math.atan(Math.tan(vFovRad \/ 2) * aspect);\r\n    var zForVert  = R \/ Math.sin(vFovRad \/ 2);\r\n    var zForHoriz = R \/ Math.sin(hFovRad \/ 2);\r\n    var margin    = w < 768 ? 1.02 : 1.08;\r\n    return Math.max(CAM_Z, Math.max(zForVert, zForHoriz) * margin);\r\n  }\r\n\r\n  function sanitiseUrl(raw) {\r\n    if (typeof raw !== 'string' || !raw.trim()) return '';\r\n    try { var u = new URL(raw.trim()); return u.protocol === 'https:' ? u.href : ''; }\r\n    catch (_) { return ''; }\r\n  }\r\n\r\n  function sanitiseOffice(raw) {\r\n    if (!raw || typeof raw !== 'object' || Array.isArray(raw)) return null;\r\n    var city = typeof raw.city === 'string' ? raw.city.trim().slice(0, 120) : '';\r\n    var text = typeof raw.text === 'string' ? raw.text.trim().slice(0, 600) : '';\r\n    var lat  = typeof raw.lat === 'number' && isFinite(raw.lat) && raw.lat >= -90  && raw.lat <= 90  ? raw.lat  : null;\r\n    var lng  = typeof raw.lng === 'number' && isFinite(raw.lng) && raw.lng >= -180 && raw.lng <= 180 ? raw.lng  : null;\r\n    if (!city || lat === null || lng === null) return null;\r\n    return { city: city, text: text, lat: lat, lng: lng, link: sanitiseUrl(raw.link) };\r\n  }\r\n\r\n  function loadOffices() {\r\n    if (!Array.isArray(win.GFI_OFFICES)) return [];\r\n    var out = [];\r\n    for (var i = 0; i < win.GFI_OFFICES.length; i++) {\r\n      var o = sanitiseOffice(win.GFI_OFFICES[i]);\r\n      if (o) out.push(o);\r\n    }\r\n    return out;\r\n  }\r\n\r\n  function resolveEl(attr, selector) {\r\n    var wrap = doc.querySelector('[data-gfi=\"' + attr + '\"]');\r\n    if (!wrap) return null;\r\n    if (!selector) return wrap;\r\n    if (wrap.matches(selector)) return wrap;\r\n    return wrap.querySelector(selector) || wrap;\r\n  }\r\n\r\n  function writeText(el, str) {\r\n    if (!el) return;\r\n    var p = el.querySelector('p');\r\n    (p || el).textContent = typeof str === 'string' ? str : '';\r\n  }\r\n\r\n  function wireButton(el, url) {\r\n    if (!el) return;\r\n    el.onclick = null;\r\n    el.style.pointerEvents = url ? 'auto' : 'none';\r\n    el.style.opacity       = url ? '1'    : '0.4';\r\n    if (!url) return;\r\n    var safe = url;\r\n    el.onclick = function (e) { e.preventDefault(); win.open(safe, '_blank', 'noopener,noreferrer'); };\r\n  }\r\n\r\n  function ll2v3(lat, lng, r) {\r\n    var phi   = lat * Math.PI \/ 180;\r\n    var theta = -lng * Math.PI \/ 180;\r\n    return new THREE.Vector3(\r\n      r * Math.cos(phi) * Math.cos(theta),\r\n      r * Math.sin(phi),\r\n      r * Math.cos(phi) * Math.sin(theta)\r\n    );\r\n  }\r\n\r\n  function pointInRing(lat, lng, ring) {\r\n    var x = lng, y = lat, inside = false;\r\n    for (var i = 0, j = ring.length - 1; i < ring.length; j = i++) {\r\n      var xi = ring[i][0], yi = ring[i][1];\r\n      var xj = ring[j][0], yj = ring[j][1];\r\n      if ((yi > y) !== (yj > y) &&\r\n          x < (xj - xi) * (y - yi) \/ (yj - yi) + xi) {\r\n        inside = !inside;\r\n      }\r\n    }\r\n    return inside;\r\n  }\r\n\r\n  function pointInGeometry(lat, lng, geom) {\r\n    var coords = geom.coordinates;\r\n    if (geom.type === 'Polygon') {\r\n      if (!pointInRing(lat, lng, coords[0])) return false;\r\n      for (var h = 1; h < coords.length; h++) {\r\n        if (pointInRing(lat, lng, coords[h])) return false;\r\n      }\r\n      return true;\r\n    }\r\n    if (geom.type === 'MultiPolygon') {\r\n      for (var p = 0; p < coords.length; p++) {\r\n        if (!pointInRing(lat, lng, coords[p][0])) continue;\r\n        var hole = false;\r\n        for (var h2 = 1; h2 < coords[p].length; h2++) {\r\n          if (pointInRing(lat, lng, coords[p][h2])) { hole = true; break; }\r\n        }\r\n        if (!hole) return true;\r\n      }\r\n    }\r\n    return false;\r\n  }\r\n\r\n  function decodeTopo(topology) {\r\n    var key  = Object.keys(topology.objects)[0];\r\n    var obj  = topology.objects[key];\r\n    var arcs = topology.arcs;\r\n    var tf   = topology.transform;\r\n\r\n    function decodeArc(idx) {\r\n      var rev = idx < 0; if (rev) idx = ~idx;\r\n      var arc = arcs[idx], coords = [], x = 0, y = 0;\r\n      for (var i = 0; i < arc.length; i++) {\r\n        x += arc[i][0]; y += arc[i][1];\r\n        coords.push([\r\n          tf ? x * tf.scale[0] + tf.translate[0] : arc[i][0],\r\n          tf ? y * tf.scale[1] + tf.translate[1] : arc[i][1]\r\n        ]);\r\n      }\r\n      if (rev) coords.reverse();\r\n      return coords;\r\n    }\r\n\r\n    function decodeRing(indices) {\r\n      var coords = [];\r\n      for (var i = 0; i < indices.length; i++) {\r\n        var a = decodeArc(indices[i]);\r\n        for (var j = (i > 0 ? 1 : 0); j < a.length; j++) coords.push(a[j]);\r\n      }\r\n      return coords;\r\n    }\r\n\r\n    function decodeGeom(g) {\r\n      if (g.type === 'Polygon') return { type: 'Polygon', coordinates: g.arcs.map(decodeRing) };\r\n      if (g.type === 'MultiPolygon') return { type: 'MultiPolygon', coordinates: g.arcs.map(function (p) { return p.map(decodeRing); }) };\r\n      if (g.type === 'GeometryCollection') return g.geometries.map(decodeGeom);\r\n      return g;\r\n    }\r\n\r\n    return decodeGeom(obj);\r\n  }\r\n\r\n  function computeBBox(geom) {\r\n    var minLat = 90, maxLat = -90, minLng = 180, maxLng = -180;\r\n    function scanRing(ring) {\r\n      for (var i = 0; i < ring.length; i++) {\r\n        var lng = ring[i][0], lat = ring[i][1];\r\n        if (lat < minLat) minLat = lat;\r\n        if (lat > maxLat) maxLat = lat;\r\n        if (lng < minLng) minLng = lng;\r\n        if (lng > maxLng) maxLng = lng;\r\n      }\r\n    }\r\n    var coords = geom.coordinates;\r\n    if (geom.type === 'Polygon') {\r\n      for (var r = 0; r < coords.length; r++) scanRing(coords[r]);\r\n    } else if (geom.type === 'MultiPolygon') {\r\n      for (var p = 0; p < coords.length; p++)\r\n        for (var r2 = 0; r2 < coords[p].length; r2++) scanRing(coords[p][r2]);\r\n    }\r\n    return { minLat: minLat, maxLat: maxLat, minLng: minLng, maxLng: maxLng };\r\n  }\r\n\r\n  var booted = false;\r\n\r\n  function boot() {\r\n    if (booted) return;\r\n    if (typeof THREE === 'undefined') { setTimeout(boot, 50); return; }\r\n    var mount = doc.querySelector('[data-gfi=\"canvas-mount\"]');\r\n    if (!mount || !mount.clientWidth || !mount.clientHeight) { setTimeout(boot, 80); return; }\r\n    booted = true;\r\n\r\n    fetch(LAND_URL)\r\n      .then(function (r) { return r.json(); })\r\n      .then(function (topo) {\r\n        var land = decodeTopo(topo);\r\n        var geometries = Array.isArray(land) ? land : [land];\r\n        var bboxes = [];\r\n        for (var g = 0; g < geometries.length; g++) {\r\n          bboxes.push(computeBBox(geometries[g]));\r\n        }\r\n        function isLand(lat, lng) {\r\n          for (var g = 0; g < geometries.length; g++) {\r\n            var bb = bboxes[g];\r\n            if (lat < bb.minLat || lat > bb.maxLat || lng < bb.minLng || lng > bb.maxLng) continue;\r\n            if (pointInGeometry(lat, lng, geometries[g])) return true;\r\n          }\r\n          return false;\r\n        }\r\n        run(loadOffices(), mount, isLand);\r\n      });\r\n  }\r\n\r\n  win.addEventListener('load', function () {\r\n    var mount = doc.querySelector('[data-gfi=\"globe-wrap\"]');\r\n    if (!mount) return;\r\n    if ('IntersectionObserver' in win) {\r\n      var io = new IntersectionObserver(function (entries) {\r\n        if (entries[0].isIntersecting) {\r\n          io.disconnect();\r\n          requestAnimationFrame(boot);\r\n        }\r\n      }, { rootMargin: '300px' });\r\n      io.observe(mount);\r\n    } else {\r\n      requestAnimationFrame(boot);\r\n    }\r\n  });\r\n\r\n  function run(offices, mount, isLand) {\r\n\r\n    var elSelect = resolveEl('select', 'select');\r\n    var elDesc   = resolveEl('description', '.elementor-text-editor, p, span, div');\r\n    var elBtn    = resolveEl('button', 'a.elementor-button, a, button');\r\n    var elTip    = doc.querySelector('[data-gfi=\"tooltip\"]');\r\n\r\n    if (elSelect) {\r\n      elSelect.querySelectorAll('[data-gfi-opt]').forEach(function (o) { o.remove(); });\r\n      offices.forEach(function (o, i) {\r\n        var opt = doc.createElement('option');\r\n        opt.value = String(i); opt.textContent = o.city;\r\n        opt.setAttribute('data-gfi-opt', '1');\r\n        elSelect.appendChild(opt);\r\n      });\r\n    }\r\n\r\n    var W = mount.clientWidth, H = mount.clientHeight;\r\n    var currentCamZ = computeCamZ(W, H);\r\n    var scene  = new THREE.Scene();\r\n    var camera = new THREE.PerspectiveCamera(FOV, W \/ H, 0.1, 100);\r\n    camera.position.set(0, 0, currentCamZ);\r\n\r\n    var renderer = new THREE.WebGLRenderer({ antialias: true, alpha: true });\r\n    var maxDPR = win.innerWidth < 768 ? 1.5 : 2;\r\n    renderer.setPixelRatio(Math.min(devicePixelRatio, maxDPR));\r\n    renderer.setSize(W, H);\r\n    renderer.setClearColor(0, 0);\r\n    mount.appendChild(renderer.domElement);\r\n    renderer.domElement.style.position = 'relative';\r\n    renderer.domElement.style.zIndex   = '1';\r\n\r\n    var shadowCanvas = doc.createElement('canvas');\r\n    shadowCanvas.style.cssText = 'position:absolute;inset:0;width:100%;height:100%;pointer-events:none;z-index:0;';\r\n    mount.insertBefore(shadowCanvas, renderer.domElement);\r\n\r\n    function drawShadowRing() {\r\n      var w = mount.clientWidth, h = mount.clientHeight;\r\n      var dpr = Math.min(devicePixelRatio, maxDPR);\r\n      shadowCanvas.width  = w * dpr;\r\n      shadowCanvas.height = h * dpr;\r\n      var ctx = shadowCanvas.getContext('2d');\r\n      ctx.scale(dpr, dpr);\r\n      var globePixelR = (h \/ 2) * (R \/ currentCamZ) \/ Math.tan(FOV * Math.PI \/ 360);\r\n      var cx = w \/ 2, cy = h \/ 2;\r\n      var innerR = globePixelR * 0.88;\r\n      var outerR = globePixelR * 1.22;\r\n      var grad = ctx.createRadialGradient(cx, cy, innerR, cx, cy, outerR);\r\n      grad.addColorStop(0.0,  'rgba(170,185,200, 0)');\r\n      grad.addColorStop(0.3,  'rgba(170,185,200, 0.18)');\r\n      grad.addColorStop(0.5,  'rgba(175,190,205, 0.30)');\r\n      grad.addColorStop(0.7,  'rgba(185,195,210, 0.20)');\r\n      grad.addColorStop(0.85, 'rgba(195,205,215, 0.08)');\r\n      grad.addColorStop(1.0,  'rgba(200,210,220, 0)');\r\n      ctx.beginPath();\r\n      ctx.arc(cx, cy, outerR, 0, Math.PI * 2);\r\n      ctx.fillStyle = grad;\r\n      ctx.fill();\r\n    }\r\n    drawShadowRing();\r\n\r\n    new ResizeObserver(function () {\r\n      var w = mount.clientWidth, h = mount.clientHeight;\r\n      if (!w || !h) return;\r\n      renderer.setSize(w, h);\r\n      camera.aspect = w \/ h;\r\n      currentCamZ = computeCamZ(w, h);\r\n      camera.position.z = currentCamZ;\r\n      camera.updateProjectionMatrix();\r\n      drawShadowRing();\r\n    }).observe(mount);\r\n\r\n    scene.add(new THREE.AmbientLight(0xffffff, 1.5));\r\n    var sun = new THREE.DirectionalLight(0xffffff, 0.15);\r\n    sun.position.set(-2, 3, 5); scene.add(sun);\r\n\r\n    var G = new THREE.Group();\r\n    scene.add(G);\r\n\r\n    var globeVert = [\r\n      'varying vec3 vNormal;',\r\n      'varying vec3 vViewDir;',\r\n      'void main() {',\r\n      '  vNormal = normalize(normalMatrix * normal);',\r\n      '  vec4 mvPos = modelViewMatrix * vec4(position, 1.0);',\r\n      '  vViewDir = normalize(-mvPos.xyz);',\r\n      '  gl_Position = projectionMatrix * mvPos;',\r\n      '}'\r\n    ].join('\\n');\r\n\r\n    var globeFrag = [\r\n      'varying vec3 vNormal;',\r\n      'varying vec3 vViewDir;',\r\n      'void main() {',\r\n      '  float facing = clamp(dot(vNormal, vViewDir), 0.0, 1.0);',\r\n      '  float rim = 1.0 - facing;',\r\n      '  rim = rim * rim;',\r\n      '  vec3 centerCol = vec3(0.97, 0.975, 0.98);',\r\n      '  vec3 edgeCol   = vec3(0.82, 0.84, 0.87);',\r\n      '  gl_FragColor = vec4(mix(centerCol, edgeCol, rim), 1.0);',\r\n      '}'\r\n    ].join('\\n');\r\n\r\n    G.add(new THREE.Mesh(\r\n      new THREE.SphereGeometry(R, 64, 64),\r\n      new THREE.ShaderMaterial({ vertexShader: globeVert, fragmentShader: globeFrag })\r\n    ));\r\n\r\n    var DOT_R = 0.010;\r\n    var ROWS = 80, BASE_COLS = 160;\r\n\r\n    var gridCells = [];\r\n    for (var ri = 0; ri <= ROWS; ri++) {\r\n      var dlat = 90 - ri * (180 \/ ROWS);\r\n      var nc = Math.round(BASE_COLS * Math.cos(dlat * Math.PI \/ 180)) || 1;\r\n      for (var ci = 0; ci < nc; ci++) {\r\n        gridCells.push({ lat: dlat, lng: -180 + ci * (360 \/ nc) });\r\n      }\r\n    }\r\n\r\n    var dotPositions = [];\r\n    var CHUNK = 600;\r\n    var cursor = 0;\r\n\r\n    function processChunk() {\r\n      var end = Math.min(cursor + CHUNK, gridCells.length);\r\n      for (var i = cursor; i < end; i++) {\r\n        var c = gridCells[i];\r\n        if (!isLand(c.lat, c.lng)) continue;\r\n        var dv = ll2v3(c.lat, c.lng, R + 0.004);\r\n        dotPositions.push(dv.x, dv.y, dv.z);\r\n      }\r\n      cursor = end;\r\n      if (cursor < gridCells.length) {\r\n        requestAnimationFrame(processChunk);\r\n      } else {\r\n        buildDotMesh();\r\n      }\r\n    }\r\n\r\n    function buildDotMesh() {\r\n      var dotCount = dotPositions.length \/ 3;\r\n      var dotDummy = new THREE.Object3D();\r\n      var dotGeo   = new THREE.CircleGeometry(DOT_R, 8);\r\n      var dotMat   = new THREE.MeshBasicMaterial({ color: 0x152d45, side: THREE.DoubleSide });\r\n      var dotMesh  = new THREE.InstancedMesh(dotGeo, dotMat, dotCount);\r\n      for (var di = 0; di < dotCount; di++) {\r\n        var dx = dotPositions[di*3], dy = dotPositions[di*3+1], dz = dotPositions[di*3+2];\r\n        dotDummy.position.set(dx, dy, dz);\r\n        dotDummy.lookAt(dx * 2, dy * 2, dz * 2);\r\n        dotDummy.updateMatrix();\r\n        dotMesh.setMatrixAt(di, dotDummy.matrix);\r\n      }\r\n      dotMesh.instanceMatrix.needsUpdate = true;\r\n      G.add(dotMesh);\r\n    }\r\n\r\n    processChunk();\r\n\r\n    var pins = [];\r\n    var hitDots = []; \/\/ larger invisible hit-area spheres for easier clicking\r\n\r\n    offices.forEach(function (o) {\r\n      var pg   = new THREE.Group();\r\n      var dMat = new THREE.MeshBasicMaterial({ color: PIN_DEF });\r\n      var rMat = new THREE.MeshBasicMaterial({ color: PIN_DEF, transparent: true, opacity: 0.45 });\r\n      var dot  = new THREE.Mesh(new THREE.SphereGeometry(0.046, 12, 12), dMat);\r\n      var ring = new THREE.Mesh(new THREE.TorusGeometry(0.075, 0.008, 8, 32), rMat);\r\n\r\n      \/\/ invisible larger hit-area sphere \u2014 easier to click\/tap\r\n      var hitMat = new THREE.MeshBasicMaterial({ color: 0xffffff, transparent: true, opacity: 0 });\r\n      var hitDot = new THREE.Mesh(new THREE.SphereGeometry(0.13, 12, 12), hitMat);\r\n\r\n      pg.add(dot); pg.add(ring); pg.add(hitDot);\r\n      var pos = ll2v3(o.lat, o.lng, R + 0.012);\r\n      pg.position.copy(pos);\r\n      pg.quaternion.setFromUnitVectors(new THREE.Vector3(0,1,0), pos.clone().normalize());\r\n      G.add(pg);\r\n      pins.push({ dot: dot, dMat: dMat, ring: ring, rMat: rMat });\r\n      hitDots.push(hitDot);\r\n    });\r\n\r\n    function drawLabel() {}\r\n\r\n    var hlIdx = null, flyAnim = null;\r\n\r\n    function setHighlight(idx) {\r\n      hlIdx = idx;\r\n      pins.forEach(function (p, i) {\r\n        var on = (i === idx);\r\n        p.dMat.color.setHex(on ? PIN_ACT : PIN_DEF);\r\n        p.rMat.color.setHex(on ? PIN_ACT : PIN_DEF);\r\n        p.rMat.opacity = on ? 0.85 : 0.45;\r\n        if (!on) p.ring.scale.setScalar(1);\r\n      });\r\n    }\r\n\r\n    function targetRotY(lng) { return (-lng * Math.PI \/ 180) - Math.PI \/ 2; }\r\n\r\n    function flyTo(idx) {\r\n      if (flyAnim) flyAnim.dead = true;\r\n      setHighlight(idx);\r\n      var tY = targetRotY(offices[idx].lng);\r\n      var tX = TILT_X;\r\n      var sY = G.rotation.y, sX = G.rotation.x;\r\n      var dY = tY - sY;\r\n      dY = dY - Math.round(dY \/ (2 * Math.PI)) * 2 * Math.PI;\r\n      tY = sY + dY;\r\n      var t0 = performance.now(), tok = { dead: false };\r\n      flyAnim = tok;\r\n      (function step(now) {\r\n        if (tok.dead) return;\r\n        var e = 1 - Math.pow(1 - Math.min((now - t0) \/ FLY_MS, 1), 3);\r\n        G.rotation.y = sY + (tY - sY) * e;\r\n        G.rotation.x = sX + (tX - sX) * e;\r\n        if (e < 1) {\r\n          requestAnimationFrame(step);\r\n        } else {\r\n          if (flyAnim === tok) flyAnim = null;\r\n        }\r\n      })(t0);\r\n    }\r\n\r\n    function selectOffice(idx) {\r\n      if (idx < 0 || idx >= offices.length) return;\r\n      wireButton(elBtn, offices[idx].link);\r\n      flyTo(idx);\r\n    }\r\n\r\n    function clearSelection() {\r\n      writeText(elDesc, ''); wireButton(elBtn, '');\r\n      setHighlight(null); hlIdx = null;\r\n      if (flyAnim) { flyAnim.dead = true; flyAnim = null; }\r\n    }\r\n\r\n    if (elSelect) {\r\n      elSelect.addEventListener('change', function () {\r\n        var v = parseInt(this.value, 10);\r\n        (Number.isInteger(v) && v >= 0 && v < offices.length) ? selectOffice(v) : clearSelection();\r\n      });\r\n    }\r\n\r\n    var drag = false, px = 0, py = 0, vx = 0, vy = 0;\r\n    mount.addEventListener('mousedown', function (e) { drag = true; px = e.clientX; py = e.clientY; vx = vy = 0; });\r\n    doc.addEventListener('mouseup', function () { drag = false; });\r\n    doc.addEventListener('mousemove', function (e) {\r\n      if (!drag) return;\r\n      vx = (e.clientY - py) * DRAG_SPD; vy = (e.clientX - px) * DRAG_SPD;\r\n      G.rotation.x += vx; G.rotation.y += vy;\r\n      px = e.clientX; py = e.clientY;\r\n    });\r\n    var pt = null;\r\n    mount.addEventListener('touchstart', function (e) { pt = e.touches[0]; vx = vy = 0; }, { passive: true });\r\n    mount.addEventListener('touchmove', function (e) {\r\n      if (!pt) return; var t = e.touches[0];\r\n      vx = (t.clientY - pt.clientY) * DRAG_SPD; vy = (t.clientX - pt.clientX) * DRAG_SPD;\r\n      G.rotation.x += vx; G.rotation.y += vy; pt = t;\r\n    }, { passive: true });\r\n    mount.addEventListener('touchend', function () { pt = null; }, { passive: true });\r\n    mount.addEventListener('wheel', function (e) { e.preventDefault(); }, { passive: false });\r\n\r\n    var rc = new THREE.Raycaster(), m2 = new THREE.Vector2();\r\n    function hitPin(evt) {\r\n      var rect = renderer.domElement.getBoundingClientRect();\r\n      m2.x =  ((evt.clientX - rect.left) \/ rect.width)  * 2 - 1;\r\n      m2.y = -((evt.clientY - rect.top)  \/ rect.height) * 2 + 1;\r\n      rc.setFromCamera(m2, camera);\r\n      var hits = rc.intersectObjects(hitDots);\r\n      return hits.length ? hitDots.indexOf(hits[0].object) : -1;\r\n    }\r\n\r\n    \/* \u2500\u2500 Tooltip text removed \u2014 cursor change kept \u2500\u2500 *\/\r\n    mount.addEventListener('mousemove', function (e) {\r\n      if (drag) { return; }\r\n      var i = hitPin(e);\r\n      if (i >= 0) {\r\n        mount.style.cursor = 'pointer';\r\n      } else {\r\n        mount.style.cursor = 'grab';\r\n      }\r\n    });\r\n\r\n    \/* \u2500\u2500 UPDATED CLICK HANDLER \u2014 prevents page scroll jump \u2500\u2500 *\/\r\n    mount.addEventListener('click', function (e) {\r\n      if (vx*vx + vy*vy > 0.0002) return;\r\n      var i = hitPin(e);\r\n      if (i >= 0) {\r\n        e.preventDefault();\r\n        e.stopPropagation();\r\n\r\n        if (elSelect) elSelect.value = String(i);\r\n        selectOffice(i);\r\n\r\n        var customWrap   = document.querySelector('.gfi-select');\r\n        var customSelect = document.querySelector('.gfi-select select');\r\n        if (customWrap && customSelect) {\r\n          var cityName = offices[i].city;\r\n          Array.from(customSelect.options).forEach(function(opt) {\r\n            if (opt.text === cityName) {\r\n              customSelect.value = opt.value;\r\n              customSelect.dispatchEvent(new Event('change', { bubbles: true }));\r\n            }\r\n          });\r\n          var label = customWrap.querySelector('.gfi-select__label');\r\n          if (label) label.textContent = cityName;\r\n          var trigger = customWrap.querySelector('.gfi-select__trigger');\r\n          if (trigger) trigger.classList.remove('is-placeholder');\r\n          customWrap.querySelectorAll('.gfi-select__list li').forEach(function(li) {\r\n            li.classList.toggle('is-active', li.textContent === cityName);\r\n          });\r\n        }\r\n      }\r\n    });\r\n\r\n    \/* \u2500\u2500 Render loop \u2500\u2500 *\/\r\n    var clock = new THREE.Clock();\r\n    (function loop() {\r\n      requestAnimationFrame(loop);\r\n      var dt = clock.getDelta();\r\n      if (!drag && !flyAnim) G.rotation.y -= dt * SPIN_SPEED;\r\n      if (hlIdx !== null && pins[hlIdx]) {\r\n        pins[hlIdx].ring.scale.setScalar(1 + 0.2 * Math.sin(clock.elapsedTime * 3.8));\r\n      }\r\n      renderer.render(scene, camera);\r\n      drawLabel();\r\n    })();\r\n\r\n    \/* \u2500\u2500 Auto-detect current site and position globe \u2500\u2500 *\/\r\n    (function() {\r\n      var slugMap = {\r\n        'ma': 'Morocco',\r\n        'ca': 'Canada',\r\n        'fr': 'France',\r\n        'us': 'USA',\r\n        'de': 'Deutschland',\r\n        'nl': 'Netherlands',\r\n        'uk': 'UK',\r\n        'it': 'Italy',\r\n        'es': 'Spain',\r\n        'pl': 'Poland',\r\n        'se': 'Sweden',\r\n        'pt': 'Portugal',\r\n        'ie': 'Ireland',\r\n        'gr': 'Greece',\r\n        'be': 'Belgium'\r\n      };\r\n\r\n      var parts = win.location.pathname.split('\/').filter(Boolean);\r\n      var slug = parts[0] ? parts[0].toLowerCase() : '';\r\n      var countryName = slugMap[slug] || null;\r\n\r\n      var idx = 0; \/\/ default Morocco\r\n      if (countryName && offices.length > 0) {\r\n        for (var i = 0; i < offices.length; i++) {\r\n          if (offices[i].city === countryName) {\r\n            idx = i;\r\n            break;\r\n          }\r\n        }\r\n      }\r\n\r\n      if (offices.length > 0) {\r\n        G.rotation.y = targetRotY(offices[idx].lng);\r\n        G.rotation.x = TILT_X;\r\n        setHighlight(idx);\r\n        wireButton(elBtn, offices[idx].link);\r\n        if (elSelect) elSelect.value = String(idx);\r\n      }\r\n    })();\r\n  }\r\n\r\n}(window, document));\r\n<\/script>\t\t\t\t<\/div>\n\t\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>Prata med v\u00e5ra experter Oavsett om du \u00e4r redo att g\u00f6ra en ans\u00f6kan eller bara utforskar dina m\u00f6jligheter, vill vi g\u00e4rna h\u00f6ra fr\u00e5n dig! Kontakta oss och uppt\u00e4ck hur vi kan hj\u00e4lpa ditt f\u00f6retag att frig\u00f6ra v\u00e4rdefulla ekonomiska m\u00f6jligheter. Privacy policy Skicka en f\u00f6rfr\u00e5gan KONTAKTA OSS Vi hj\u00e4lper dig g\u00e4rna Fyll i formul\u00e4ret s\u00e5 h\u00f6r [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"_acf_changed":false,"_yoast_wpseo_focuskw":"kontakta Leyton Sverige","_yoast_wpseo_title":"Kontakta oss | Leyton Sverige","_yoast_wpseo_metadesc":"Ta reda p\u00e5 hur Leyton kan hj\u00e4lpa ert f\u00f6retag att v\u00e4xa \u2014 kontakta v\u00e5rt svenska kontor. Vi ger r\u00e5d till tusentals kunder varje \u00e5r om innovationsfinansiering.","footnotes":"","_yoast_wpseo_focuskeywords":"[{\"keyword\":\"n\u00e5 Leyton Sverige\",\"score\":\"61\"},{\"keyword\":\"svenska kontoret\",\"score\":\"61\"},{\"keyword\":\"prata med en expert\",\"score\":\"61\"},{\"keyword\":\"f\u00f6rfr\u00e5gan innovationsfinansiering\",\"score\":\"61\"},{\"keyword\":\"boka r\u00e5dgivning\",\"score\":\"61\"}]","_yoast_wpseo_keywordsynonyms":"[\"kontakta Leytons svenska team\",\"h\u00f6r av dig\",\"Stockholmskontoret\",\"tala med en specialist\",\"beg\u00e4r information\",\"kostnadsfri bed\u00f6mning\"]"},"class_list":["post-624","page","type-page","status-publish","hentry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v28.1 (Yoast SEO v28.1) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Kontakta oss | Leyton Sverige<\/title>\n<meta name=\"description\" content=\"Ta reda p\u00e5 hur Leyton kan hj\u00e4lpa ert f\u00f6retag att v\u00e4xa \u2014 kontakta v\u00e5rt svenska kontor. Vi ger r\u00e5d till tusentals kunder varje \u00e5r om innovationsfinansiering.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/leyton.com\/se\/kontakta-oss\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Kontakta oss\" \/>\n<meta property=\"og:description\" content=\"Ta reda p\u00e5 hur Leyton kan hj\u00e4lpa ert f\u00f6retag att v\u00e4xa \u2014 kontakta v\u00e5rt svenska kontor. Vi ger r\u00e5d till tusentals kunder varje \u00e5r om innovationsfinansiering.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/leyton.com\/se\/kontakta-oss\/\" \/>\n<meta property=\"og:site_name\" content=\"Leyton Sweden\" \/>\n<meta property=\"article:modified_time\" content=\"2026-07-25T22:47:58+00:00\" \/>\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=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/leyton.com\\\/se\\\/kontakta-oss\\\/\",\"url\":\"https:\\\/\\\/leyton.com\\\/se\\\/kontakta-oss\\\/\",\"name\":\"Kontakta oss | Leyton Sverige\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/leyton.com\\\/se\\\/#website\"},\"datePublished\":\"2026-04-27T14:29:52+00:00\",\"dateModified\":\"2026-07-25T22:47:58+00:00\",\"description\":\"Ta reda p\u00e5 hur Leyton kan hj\u00e4lpa ert f\u00f6retag att v\u00e4xa \u2014 kontakta v\u00e5rt svenska kontor. Vi ger r\u00e5d till tusentals kunder varje \u00e5r om innovationsfinansiering.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/leyton.com\\\/se\\\/kontakta-oss\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/leyton.com\\\/se\\\/kontakta-oss\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/leyton.com\\\/se\\\/kontakta-oss\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/leyton.com\\\/se\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Kontakta oss\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/leyton.com\\\/se\\\/#website\",\"url\":\"https:\\\/\\\/leyton.com\\\/se\\\/\",\"name\":\"Leyton\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/leyton.com\\\/se\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/leyton.com\\\/se\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/leyton.com\\\/se\\\/#organization\",\"name\":\"Leyton\",\"url\":\"https:\\\/\\\/leyton.com\\\/se\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/leyton.com\\\/se\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/leyton.com\\\/wp-content\\\/blogs.dir\\\/13\\\/files\\\/2026\\\/01\\\/logo.svg\",\"contentUrl\":\"https:\\\/\\\/leyton.com\\\/wp-content\\\/blogs.dir\\\/13\\\/files\\\/2026\\\/01\\\/logo.svg\",\"width\":108,\"height\":44,\"caption\":\"Leyton\"},\"image\":{\"@id\":\"https:\\\/\\\/leyton.com\\\/se\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Kontakta oss | Leyton Sverige","description":"Ta reda p\u00e5 hur Leyton kan hj\u00e4lpa ert f\u00f6retag att v\u00e4xa \u2014 kontakta v\u00e5rt svenska kontor. Vi ger r\u00e5d till tusentals kunder varje \u00e5r om innovationsfinansiering.","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:\/\/leyton.com\/se\/kontakta-oss\/","og_locale":"en_US","og_type":"article","og_title":"Kontakta oss","og_description":"Ta reda p\u00e5 hur Leyton kan hj\u00e4lpa ert f\u00f6retag att v\u00e4xa \u2014 kontakta v\u00e5rt svenska kontor. Vi ger r\u00e5d till tusentals kunder varje \u00e5r om innovationsfinansiering.","og_url":"https:\/\/leyton.com\/se\/kontakta-oss\/","og_site_name":"Leyton Sweden","article_modified_time":"2026-07-25T22:47:58+00:00","twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/leyton.com\/se\/kontakta-oss\/","url":"https:\/\/leyton.com\/se\/kontakta-oss\/","name":"Kontakta oss | Leyton Sverige","isPartOf":{"@id":"https:\/\/leyton.com\/se\/#website"},"datePublished":"2026-04-27T14:29:52+00:00","dateModified":"2026-07-25T22:47:58+00:00","description":"Ta reda p\u00e5 hur Leyton kan hj\u00e4lpa ert f\u00f6retag att v\u00e4xa \u2014 kontakta v\u00e5rt svenska kontor. Vi ger r\u00e5d till tusentals kunder varje \u00e5r om innovationsfinansiering.","breadcrumb":{"@id":"https:\/\/leyton.com\/se\/kontakta-oss\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/leyton.com\/se\/kontakta-oss\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/leyton.com\/se\/kontakta-oss\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/leyton.com\/se\/"},{"@type":"ListItem","position":2,"name":"Kontakta oss"}]},{"@type":"WebSite","@id":"https:\/\/leyton.com\/se\/#website","url":"https:\/\/leyton.com\/se\/","name":"Leyton","description":"","publisher":{"@id":"https:\/\/leyton.com\/se\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/leyton.com\/se\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/leyton.com\/se\/#organization","name":"Leyton","url":"https:\/\/leyton.com\/se\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/leyton.com\/se\/#\/schema\/logo\/image\/","url":"https:\/\/leyton.com\/wp-content\/blogs.dir\/13\/files\/2026\/01\/logo.svg","contentUrl":"https:\/\/leyton.com\/wp-content\/blogs.dir\/13\/files\/2026\/01\/logo.svg","width":108,"height":44,"caption":"Leyton"},"image":{"@id":"https:\/\/leyton.com\/se\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/leyton.com\/se\/wp-json\/wp\/v2\/pages\/624","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/leyton.com\/se\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/leyton.com\/se\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/leyton.com\/se\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/leyton.com\/se\/wp-json\/wp\/v2\/comments?post=624"}],"version-history":[{"count":28,"href":"https:\/\/leyton.com\/se\/wp-json\/wp\/v2\/pages\/624\/revisions"}],"predecessor-version":[{"id":2289,"href":"https:\/\/leyton.com\/se\/wp-json\/wp\/v2\/pages\/624\/revisions\/2289"}],"wp:attachment":[{"href":"https:\/\/leyton.com\/se\/wp-json\/wp\/v2\/media?parent=624"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}