{"version":3,"file":"shared-lib.C3BY4mIA.mjs","names":[],"sources":["https:/framerusercontent.com/modules/v0DmN77gbWw9rQFhniXX/2x7JZiSeVT6jfmR571wt/siteMetadata.js"],"sourcesContent":["// Generated by Framer (98b71dc)\nexport default function metadata(params,activeLocale){return{customHTMLBodyStart:'<!-- Google Tag Manager (noscript) -->\\n<noscript><iframe src=\"https://www.googletagmanager.com/ns.html?id=GTM-NVDL866T\" height=\"0\" width=\"0\" style=\"display:none;visibility:hidden\"></iframe></noscript>\\n<!-- End Google Tag Manager (noscript) -->',customHTMLHeadEnd:'<script>\\n(function(){\\n  const d=document,h=d.documentElement;\\n\\n  // ---- Lang & URL helpers ----\\n  const AR_PREFIX=\"/ar\";\\n  const isAr=()=>{\\n    const lang=(h.getAttribute(\"lang\")||\"\").toLowerCase();\\n    if(lang.startsWith(\"ar\")) return true;\\n    return /^\\\\/ar(\\\\/|$)/.test(location.pathname);\\n  };\\n  const origin = location.origin || \"https://executivecentre.sa\"; // KSA default\\n  const root  = ()=> origin + (isAr()? AR_PREFIX : \"\") + \"/\";     // EN: https://.../  AR: https://.../ar/\\n  const idBase= ()=> origin + (isAr()? AR_PREFIX : \"\");           // EN: https://...   AR: https://.../ar\\n  const wrongIdBase = ()=> origin + (isAr()? \"\" : AR_PREFIX);     // opposite-language base\\n  const makeAbs=(p)=> new URL(p.replace(/^\\\\/+/, \"/\"), origin + \"/\").href;\\n\\n  // ---- Home detection ----\\n  function isHome(){ const p=location.pathname.replace(/\\\\/+$/,\"/\"); return p===\"/\" || p===AR_PREFIX+\"/\"; }\\n\\n  // ---- Brand / org names ----\\n  const NAME_EN=\"The Executive Centre\", NAME_AR=\"المركز التنفيذي\";\\n  const ORG_NAME_EN=NAME_EN, ORG_NAME_AR=NAME_AR, ORG_ALT_EN=\"TEC KSA\", ORG_ALT_AR=\"TEC السعودية\";\\n  const LOGO_URL=\"https://framerusercontent.com/images/MP9qlkDp6oUqv3yDd5dgwS1aU5U.png\";\\n  const CONTACT_PAGE=makeAbs(\"/contact-us\");\\n\\n  // Try to read a visible phone/email from the page (footer/header) to avoid hardcoding\\n  function getPhone(){\\n    const tel = d.querySelector(\\'a[href^=\"tel:\"]\\');\\n    return tel ? tel.getAttribute(\"href\").replace(/^tel:/,\"\") : undefined;\\n  }\\n  function getEmail(){\\n    const mail = d.querySelector(\\'a[href^=\"mailto:\"]\\');\\n    return mail ? mail.getAttribute(\"href\").replace(/^mailto:/,\"\") : undefined;\\n  }\\n\\n  const SAME_AS=[\\n    \"https://www.facebook.com/theexecutivecentre/\",\\n    \"https://www.instagram.com/theexecutivecentre/\",\\n    \"https://www.youtube.com/channel/UCD2AROaznylh5WhlJEa5UOA\",\\n    \"https://www.linkedin.com/company/the-executive-centre/\"\\n  ];\\n\\n  // ---- Pretty names for crumbs (KSA sitemap slugs) ----\\n  const NAME_MAP={\\n    \"about-us\":{en:\"About Us\",ar:\"من نحن\"},\\n    \"community\":{en:\"Our Community\",ar:\"مجتمعنا\"},\\n    \"careers\":{en:\"Careers\",ar:\"الوظائف\"},\\n    \"contact-us\":{en:\"Contact Us\",ar:\"اتصل بنا\"},\\n    \"privacy-policy\":{en:\"Privacy Policy\",ar:\"سياسة الخصوصية\"},\\n    \"terms-conditions\":{en:\"Terms & Conditions\",ar:\"الشروط والأحكام\"},\\n    \"sitemap\":{en:\"Sitemap\",ar:\"خريطة الموقع\"},\\n    \"private-offices\":{en:\"Private Offices\",ar:\"مكاتب خاصة\"},\\n    \"national-address\":{en:\"National Address\",ar:\"العنوان الوطني\"},\\n    \"enterprise-solutions\":{en:\"Enterprise Solutions\",ar:\"حلول المؤسسات\"},\\n    \"coworking-space-kafd-riyadh\":{en:\"Coworking Space — KAFD, Riyadh\",ar:\"مساحات العمل المشتركة — كافد، الرياض\"},\\n    \"blog\":{en:\"Blog\",ar:\"المدونة\"},\\n    \"tag\":{en:\"Tag\",ar:\"وسم\"}\\n  };\\n\\n  // ---------- JSON-LD builders ----------\\n  function websiteJSON(){\\n    const u=root();\\n    return JSON.stringify({\\n      \"@context\":\"https://schema.org\",\\n      \"@type\":\"WebSite\",\\n      \"@id\":u.replace(/\\\\/$/,\"\")+\"#website\",\\n      \"url\":u,\\n      \"name\":isAr()?NAME_AR:NAME_EN\\n    });\\n  }\\n\\n  // Organization — Home page only (EN & AR)\\n  const ORG_ANCHOR=\"ksa\";\\n  function organizationJSON(){\\n    if(!isHome()) return \"\";\\n    const orgId=idBase()+\"#\"+ORG_ANCHOR;\\n    const phone=getPhone();\\n    const email=getEmail();\\n    const obj={\\n      \"@context\":\"https://schema.org\",\\n      \"@type\":\"Organization\",\\n      \"@id\":orgId,\\n      \"url\":root(),\\n      \"name\":isAr()?ORG_NAME_AR:ORG_NAME_EN,\\n      \"alternateName\":isAr()?ORG_ALT_AR:ORG_ALT_EN,\\n      \"logo\":LOGO_URL,\\n      \"sameAs\":SAME_AS,\\n      \"contactPoint\":[{\\n        \"@type\":\"ContactPoint\",\\n        \"contactType\":\"customer service\",\\n        \"areaServed\":[\"SA\"],\\n        \"url\":CONTACT_PAGE\\n      }]\\n    };\\n    if(phone) obj.contactPoint[0].telephone = phone;\\n    if(email) obj.contactPoint[0].email = email;\\n    return JSON.stringify(obj);\\n  }\\n\\n  // LocalBusiness — KSA (disabled until confirmed NAP to avoid inaccuracies)\\n  function locationsJSON(){\\n    // Return empty for now. Once you confirm KAFD/Riyadh address & phone, replace with a @graph similar to UAE setup.\\n    return \"\";\\n  }\\n\\n  // --------- Breadcrumbs (all pages deeper than home) ---------\\n  function pathNoLang(){\\n    const raw=location.pathname.replace(/^\\\\/+|\\\\/+$/g,\"\");\\n    return isAr()? raw.replace(/^ar\\\\/?/,\"\") : raw;\\n  }\\n  function depth(){ return pathNoLang().split(\"/\").filter(Boolean).length; }\\n\\n  function titleCase(s){ return s.replace(/[-_]+/g,\" \").replace(/\\\\b\\\\w/g,c=>c.toUpperCase()); }\\n\\n  function breadcrumbsJSON(){\\n    if(depth()===0) return \"\";\\n    const isArabic=isAr();\\n    const homeName=isArabic?\"الرئيسية\":\"Home\";\\n    const base=root().replace(/\\\\/$/,\"/\");\\n    const path=location.pathname.replace(/^\\\\/+|\\\\/+$/g,\"\");\\n    const parts=(isArabic?path.replace(/^ar\\\\/?/,\"\"):path).split(\"/\").filter(Boolean);\\n    const items=[{\"@type\":\"ListItem\",\"position\":1,\"name\":homeName,\"item\":base}];\\n\\n    let acc=isArabic? AR_PREFIX+\"/\" : \"\";\\n    for(let i=0;i<parts.length;i++){\\n      const seg=parts[i];\\n      const isLast=i===parts.length-1;\\n\\n      // handle /blog/tag/<slug>\\n      if(parts[0]===\"blog\" && seg===\"tag\" && parts[i+1]){\\n        const tagBase=makeAbs(acc+\"blog/tag/\");\\n        items.push({\"@type\":\"ListItem\",\"position\":items.length+1,\"name\": isArabic? \"المدونة\" : \"Blog\",\"item\":makeAbs(acc+\"blog/\")});\\n        items.push({\"@type\":\"ListItem\",\"position\":items.length+1,\"name\": isArabic? \"وسوم\" : \"Tags\",\"item\":tagBase});\\n        const tagName=decodeURIComponent(parts[i+1]).replace(/[-_]+/g,\" \").trim();\\n        items.push({\"@type\":\"ListItem\",\"position\":items.length+1,\"name\":tagName,\"item\":makeAbs(acc+\"blog/tag/\"+parts[i+1])});\\n        i++; continue;\\n      }\\n\\n      acc+=seg+(isLast? \"\": \"/\");\\n      const nameObj=NAME_MAP[seg];\\n      let name=nameObj?(isArabic?nameObj.ar:nameObj.en):titleCase(seg);\\n      if(isLast && d.title && d.title.length<120) name=d.title.trim();\\n\\n      // Ensure URLs end with \"/\" for section indexes; keep leaf without trailing slash\\n      const url = makeAbs(isLast ? acc : acc+\"/\").replace(/\\\\/+$/,(isLast && /\\\\.\\\\w+$/.test(acc)) ? \"\" : \"/\");\\n      items.push({\"@type\":\"ListItem\",\"position\":items.length+1,\"name\":name,\"item\":url});\\n    }\\n\\n    return JSON.stringify({\"@context\":\"https://schema.org\",\"@type\":\"BreadcrumbList\",\"itemListElement\":items});\\n  }\\n\\n  // --------- FAQ (only when present, or on ...#faqs) ---------\\n  function faqsJSON(){\\n    const faqSection=d.querySelector(\\'#faqs,[data-framer-name=\"FAQs\"]\\');\\n    const anchorHit = /#faqs$/.test(location.href);\\n    if(!faqSection && !anchorHit) return \"\";\\n\\n    const clean=s=>(s||\"\").replace(/^\\\\s*[\\\\d٠-٩]+[\\\\s\\\\.\\\\-\\\\)\\\\]]*\\\\s*/,\\'\\')\\n                          .replace(/^[\"“]\\\\s*|\\\\s*[\"”]$/g,\"\")\\n                          .replace(/\\\\s+/g,\" \").trim();\\n\\n    const qNodes=faqSection? Array.from(faqSection.querySelectorAll(\\'[data-framer-name=\"Question\"]\\')) : [];\\n    const qaList=[];\\n    function findFollowingAnswer(el){\\n      let cur=el;\\n      for(let i=0;i<8 && cur;i++){\\n        cur=cur.nextElementSibling || (cur.parentElement && cur.parentElement.nextElementSibling);\\n        if(!cur) break;\\n        if(faqSection && faqSection.contains(cur) && cur.matches && cur.matches(\\'[data-framer-name=\"Answer\"]\\')) return cur;\\n        const inner=cur.querySelector? cur.querySelector(\\'[data-framer-name=\"Answer\"]\\') : null;\\n        if(inner) return inner;\\n      }\\n      return null;\\n    }\\n\\n    if(qNodes.length){\\n      qNodes.forEach(qEl=>{\\n        let qText=\"\";\\n        const heading=qEl.querySelector(\\'h3,h2,h4,h5,h6\\');\\n        if(heading) qText=heading.textContent||\"\";\\n        if(!qText){\\n          const rts=qEl.querySelectorAll(\\'[data-framer-component-type=\"RichTextContainer\"]\\');\\n          if(rts.length) qText=rts[rts.length-1].innerText||rts[rts.length-1].textContent||\"\";\\n        }\\n        qText=clean(qText);\\n        const aEl=findFollowingAnswer(qEl);\\n        if(!qText || !aEl) return;\\n\\n        const parts=[];\\n        aEl.querySelectorAll(\\'p,li\\').forEach(n=>{\\n          const t=(n.innerText||n.textContent||\"\").trim();\\n          if(t) parts.push(t);\\n        });\\n        const aText=clean(parts.join(\"\\\\n\\\\n\")) || clean(aEl.innerText||aEl.textContent||\"\");\\n        if(!aText) return;\\n\\n        qaList.push({ \"@type\":\"Question\", \"name\":qText, \"acceptedAnswer\":{ \"@type\":\"Answer\",\"text\":aText }});\\n      });\\n    }\\n\\n    if(!qaList.length) return \"\";\\n    const pageUrl = origin + location.pathname.replace(/\\\\/+$/,\"\");\\n    return JSON.stringify({ \"@context\":\"https://schema.org\", \"@type\":\"FAQPage\", \"@id\": pageUrl + \"#faqs\", \"mainEntity\": qaList });\\n  }\\n\\n  // ---- Utilities ----\\n  function put(id,json){\\n    if(!json){ const ex=d.getElementById(id); if(ex) ex.remove(); return; }\\n    let s=d.getElementById(id);\\n    if(!s||s.type!==\"application/ld+json\"){ if(s) s.remove(); s=d.createElement(\"script\"); s.id=id; s.type=\"application/ld+json\"; (d.head||d.documentElement).appendChild(s); }\\n    if(s.textContent!==json) s.textContent=json;\\n  }\\n\\n  // Remove dupes + wrong-language bases; also strip Org on non-home\\n  function scrubSchemas(){\\n    const rightBase=idBase()+\"#\";\\n    const wrongBase=wrongIdBase()+\"#\";\\n    const onHome=isHome();\\n\\n    Array.from(d.querySelectorAll(\\'script[type=\"application/ld+json\"]\\')).forEach(n=>{\\n      let remove=false;\\n      try{\\n        const data=JSON.parse(n.textContent.trim());\\n        const arr=Array.isArray(data)?data:(data&&data[\"@graph\"]?data[\"@graph\"]:[data]);\\n\\n        const hasWrongLang = arr && arr.some(x=>{\\n          if(!x || !x[\"@id\"]) return false;\\n          const t=String(x[\"@type\"]||\"\");\\n          if(!/Organization|LocalBusiness/.test(t)) return false;\\n          return String(x[\"@id\"]).startsWith(wrongBase);\\n        });\\n\\n        const shouldCullNonHome = !onHome && arr && arr.some(x=>{\\n          if(!x || !x[\"@id\"]) return false;\\n          const t=String(x[\"@type\"]||\"\");\\n          if(!/Organization/.test(t)) return false;\\n          return String(x[\"@id\"]).startsWith(rightBase);\\n        });\\n\\n        if(hasWrongLang || shouldCullNonHome) remove=true;\\n      }catch(e){}\\n      if(remove) n.remove();\\n    });\\n  }\\n\\n  // ---- Output control ----\\n  function updateAll(){\\n    put(\"sd-website\",websiteJSON());          // always\\n    put(\"sd-breadcrumbs\",breadcrumbsJSON());  // depth>0\\n    put(\"sd-faq\",faqsJSON());                 // only when FAQs exist / anchor\\n    put(\"sd-organization\",organizationJSON());// home only\\n    put(\"sd-locations\",locationsJSON());      // KSA: currently disabled (returns \"\")\\n    scrubSchemas();\\n  }\\n\\n  updateAll();\\n  const kick=()=>setTimeout(updateAll,0);\\n  const ps=history.pushState, rs=history.replaceState;\\n  history.pushState=function(){ps.apply(this,arguments);kick();};\\n  history.replaceState=function(){rs.apply(this,arguments);kick();};\\n  addEventListener(\"popstate\",kick);\\n  new MutationObserver(()=>{ updateAll(); }).observe(d.body||d.documentElement,{childList:true,subtree:true});\\n  let i=0,t=setInterval(()=>{updateAll(); if(++i>60) clearInterval(t);},1000);\\n})();\\n</script>\\n',customHTMLHeadStart:\"<!-- Google Tag Manager -->\\n<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':\\nnew Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],\\nj=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=\\n'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);\\n})(window,document,'script','dataLayer','GTM-NVDL866T');</script>\\n<!-- End Google Tag Manager -->\\n\\n\\n\\n<!--  -->\\n<script>\\nlet urlString = window.location.href;\\n\\n// Extract query parameters by removing any hash (#) and then isolating the part after '?'\\nconst basePart = urlString.split(\\\"#\\\")[0]; // Remove everything after the hash\\nlet queryPart = basePart.includes(\\\"?\\\") ? basePart.split(\\\"?\\\")[1] : \\\"\\\";\\n\\n\\nconsole.log(basePart);\\nconsole.log(queryPart);\\n\\n// If the query parameters follow the hash, extract from after the hash as well\\nif (!queryPart && urlString.includes(\\\"#\\\") && urlString.split(\\\"#\\\")[1].includes(\\\"?\\\")) {\\n    queryPart = urlString.split(\\\"#\\\")[1].split(\\\"?\\\")[1];\\n}\\n\\nconst urlParams = new URLSearchParams(queryPart);\\n\\nconsole.log(urlParams);\\nconsole.log('urlParams');\\n\\nif (urlParams.has('utm_lead_source')) {\\n    // Store the parameters in sessionStorage\\n    sessionStorage.setItem('utm_lead_source', urlParams.get('utm_lead_source'));\\n    sessionStorage.setItem('utm_source_lvl_1', urlParams.get('utm_source_lvl_1'));\\n    sessionStorage.setItem('utm_source_lvl_2', urlParams.get('utm_source_lvl_2'));\\n    sessionStorage.setItem('utm_source_lvl_3', urlParams.get('utm_source_lvl_3'));\\n    sessionStorage.setItem('gad_source', urlParams.get('gad_source'));\\n    sessionStorage.setItem('gclid', urlParams.get('gclid'));\\n}\\n</script>\",description:\"Premium workspace solutions from private offices to meeting rooms in Riyadh, King Abdullah Financial District. Flexible plans, Grade-A amenities, 24/7 support & more.\",favicon:\"https://framerusercontent.com/assets/clMel1eZYmJ8UnxVSuspPdU6r8Q.svg\",robots:\"max-image-preview:large\",socialImage:\"https://framerusercontent.com/assets/7DX1giEMr19vlLFBxaGfiRrfg.jpg\",title:\"The Executive Centre in Riyadh - KAFD | Premium Workspaces Solutions & Offices in Riyadh\"};}export const metadataVersion=1;\nexport const __FramerMetadata__ = {\"exports\":{\"metadataVersion\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"default\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}"],"mappings":"2DACA,SAAwB,EAAS,EAAO,EAAa,CAAC,MAAM,CAAC,oBAAoB;;4CAAwP,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAu+V,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;YAAqrD,YAAY,yKAAyK,QAAQ,uEAAuE,OAAO,0BAA0B,YAAY,qEAAqE,MAAM,2FAA2F"}