{
  "version": 3,
  "sources": ["ssg:https://framerusercontent.com/modules/zd2KTEKTM8WkfVPuesqs/XhM7IaaDGHPHlKFzvEzr/siteMetadata.js"],
  "sourcesContent": ["// Generated by Framer (bf2ee14)\nexport default function metadata(params,activeLocale){return{customHTMLBodyEnd:\"\\n\\n<script defer=\\\"\\\" src=\\\"https://cloud.umami.is/script.js\\\" data-website-id=\\\"69a19bb7-27bc-44db-93fd-443b8dc56634\\\"></script>\\n\\n<script>\\n  // Function to track page views\\n  function trackPage() {\\n    rudderanalytics.page();\\n  }\\n\\n  // Initial page load\\n  trackPage();\\n\\n  // Listen for SPA navigation using History API\\n  (function () {\\n    const pushState = history.pushState;\\n    const replaceState = history.replaceState;\\n\\n    history.pushState = function () {\\n      pushState.apply(this, arguments);\\n      window.dispatchEvent(new Event(\\\"navigation\\\"));\\n    };\\n\\n    history.replaceState = function () {\\n      replaceState.apply(this, arguments);\\n      window.dispatchEvent(new Event(\\\"navigation\\\"));\\n    };\\n\\n    // Event listener for navigation changes\\n    window.addEventListener(\\\"navigation\\\", trackPage);\\n    window.addEventListener(\\\"popstate\\\", trackPage); // Handles back/forward navigation\\n  })();\\n</script>\\n\\n<script>\\n  (function () {\\n  // Define UTM parameters you care about\\n  const utmParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content'];\\n\\n  // Parse query string\\n  const urlParams = new URLSearchParams(window.location.search);\\n\\n  // Get current domain root (e.g., example.com from sub.example.com)\\n  const getRootDomain = () => {\\n    const hostname = window.location.hostname;\\n    const parts = hostname.split('.');\\n    if (parts.length > 2) {\\n      return parts.slice(-2).join('.');\\n    }\\n    return hostname;\\n  };\\n\\n  const rootDomain = getRootDomain();\\n\\n  // Store each UTM parameter as a cookie\\n  utmParams.forEach(param => {\\n    const value = urlParams.get(param);\\n    if (value) {\\n      document.cookie = `${param}=${encodeURIComponent(value)}; path=/; domain=.${rootDomain}; max-age=${60 * 60 * 24 * 30}`;\\n    }\\n  });\\n})();\\n</script>\\n\\n<!-- store referrer start-->\\n<script>\\n(function () {\\n  const referrer = document.referrer;\\n\\n  // Check if the referrer exists and is NOT from a teamcamp.app domain and cookie is not already set\\n  if (\\n    referrer &&\\n    !referrer.includes('.teamcamp.app') &&\\n    !referrer.includes('teamcamp.app') && // covers root too\\n    !getCookie('referrer_url')\\n  ) {\\n    setCookie('referrer_url', referrer, 90);\\n  }\\n if (!getCookie('lp_path')) {\\n  const landingPage = window.location.pathname + window.location.search;\\n  setCookie('lp_path', landingPage, 90);\\n}\\n  \\n  // Set cookie for all *.teamcamp.app for 30 days\\n  function setCookie(name, value, days) {\\n    const oneDayMs = 60 * 60 * 24 * 1000; // 1 day in milliseconds\\n    const expires = new Date(Date.now() + days * oneDayMs).toUTCString();\\n    document.cookie = `${name}=${encodeURIComponent(value)}; expires=${expires}; path=/; domain=.teamcamp.app; samesite=lax`;\\n  }\\n\\n  // Helper to get cookie value by name\\n  function getCookie(name) {\\n    const match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'));\\n    return match ? decodeURIComponent(match[2]) : null;\\n  }\\n})();\\n</script>\\n<!-- store referrer end-->\\n<!-- <script>\\n(function() {\\n  console.log(\\\"[path-watcher] Initializing path change watcher\\\");\\n\\n  const originalPushState = history.pushState;\\n  const originalReplaceState = history.replaceState;\\n\\n  history.pushState = function(...args) {\\n    console.log(\\\"[path-watcher] pushState called with args:\\\", args);\\n    const result = originalPushState.apply(this, args);\\n    console.log(\\\"[path-watcher] pushState changed URL to:\\\", window.location.pathname);\\n    window.dispatchEvent(new Event('locationchange'));\\n    return result;\\n  };\\n\\n  history.replaceState = function(...args) {\\n    console.log(\\\"[path-watcher] replaceState called with args:\\\", args);\\n    const result = originalReplaceState.apply(this, args);\\n    console.log(\\\"[path-watcher] replaceState changed URL to:\\\", window.location.pathname);\\n    window.dispatchEvent(new Event('locationchange'));\\n    return result;\\n  };\\n\\n  window.addEventListener('popstate', () => {\\n    console.log(\\\"[path-watcher] popstate event detected (back/forward)\\\");\\n    window.dispatchEvent(new Event('locationchange'));\\n  });\\n})();\\n\\nwindow.addEventListener('locationchange', () => {\\n  console.log(\\\"[path-watcher] Location changed! Current path:\\\", window.location.pathname);\\n});\\n</script> -->\",customHTMLBodyStart:'<!-- Google Tag Manager (noscript) -->\\n<noscript><iframe src=\"https://www.googletagmanager.com/ns.html?id=GTM-N8SMZXPX\" height=\"0\" width=\"0\" style=\"display:none;visibility:hidden\"></iframe></noscript>\\n<!-- End Google Tag Manager (noscript) -->',customHTMLHeadEnd:'<script type=\"text/javascript\">\\n  !function(){\"use strict\";window.RudderSnippetVersion=\"3.0.32\";var e=\"rudderanalytics\";window[e]||(window[e]=[])\\n  ;var rudderanalytics=window[e];if(Array.isArray(rudderanalytics)){\\n  if(true===rudderanalytics.snippetExecuted&&window.console&&console.error){\\n  console.error(\"RudderStack JavaScript SDK snippet included more than once.\")}else{rudderanalytics.snippetExecuted=true,\\n  window.rudderAnalyticsBuildType=\"legacy\";var sdkBaseUrl=\"https://cdn.rudderlabs.com/v3\";var sdkName=\"rsa.min.js\"\\n  ;var scriptLoadingMode=\"async\"\\n  ;var r=[\"setDefaultInstanceKey\",\"load\",\"ready\",\"page\",\"track\",\"identify\",\"alias\",\"group\",\"reset\",\"setAnonymousId\",\"startSession\",\"endSession\",\"consent\"]\\n  ;for(var n=0;n<r.length;n++){var t=r[n];rudderanalytics[t]=function(r){return function(){var n\\n  ;Array.isArray(window[e])?rudderanalytics.push([r].concat(Array.prototype.slice.call(arguments))):null===(n=window[e][r])||void 0===n||n.apply(window[e],arguments)\\n  }}(t)}try{\\n  new Function(\\'class Test{field=()=>{};test({prop=[]}={}){return prop?(prop?.property??[...prop]):import(\"\");}}\\'),\\n  window.rudderAnalyticsBuildType=\"modern\"}catch(o){}var d=document.head||document.getElementsByTagName(\"head\")[0]\\n  ;var i=document.body||document.getElementsByTagName(\"body\")[0];window.rudderAnalyticsAddScript=function(e,r,n){\\n  var t=document.createElement(\"script\");t.src=e,t.setAttribute(\"data-loader\",\"RS_JS_SDK\"),r&&n&&t.setAttribute(r,n),\\n  \"async\"===scriptLoadingMode?t.async=true:\"defer\"===scriptLoadingMode&&(t.defer=true),\\n  d?d.insertBefore(t,d.firstChild):i.insertBefore(t,i.firstChild)},window.rudderAnalyticsMount=function(){!function(){\\n  if(\"undefined\"==typeof globalThis){var e;var r=function getGlobal(){\\n  return\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:null}();r&&Object.defineProperty(r,\"globalThis\",{\\n  value:r,configurable:true})}\\n  }(),window.rudderAnalyticsAddScript(\"\".concat(sdkBaseUrl,\"/\").concat(window.rudderAnalyticsBuildType,\"/\").concat(sdkName),\"data-rsa-write-key\",\"2pcDOg9QtG21slSRjvYA0PzL7x9\")\\n  },\\n  \"undefined\"==typeof Promise||\"undefined\"==typeof globalThis?window.rudderAnalyticsAddScript(\"https://polyfill-fastly.io/v3/polyfill.min.js?version=3.111.0&features=Symbol%2CPromise&callback=rudderAnalyticsMount\"):window.rudderAnalyticsMount()\\n  ;var loadOptions={};rudderanalytics.load(\"2pcDOg9QtG21slSRjvYA0PzL7x9\",\"https://pixersanjgywax.dataplane.rudderstack.com\",loadOptions)}}}();\\n</script>',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;\\nj.addEventListener(\\'load\\', function() {\\n  var _ge = new CustomEvent(\\'gtm_loaded\\', { bubbles: true });\\n  d.dispatchEvent(_ge);\\n});\\nf.parentNode.insertBefore(j,f);\\n})(window,document,\\'script\\',\\'dataLayer\\',\\'GTM-N8SMZXPX\\');</script>\\n<!-- End Google Tag Manager -->\\n\\n<script type=\"text/javascript\" src=\"//app.pageproofer.com/embed/cf85707c-f298-548d-abbf-65b663f39cdf\" async=\"true\"></script>\\n\\n<script type=\"application/ld+json\">\\n{\\n  \"@context\": \"https://schema.org\",\\n  \"@type\": \"Organization\",\\n  \"name\": \"Teamcamp\",\\n  \"url\": \"https://www.teamcamp.app\",\\n  \"logo\": \"https://media2.dev.to/dynamic/image/width=320,height=320,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F10233%2Fa214d929-4a86-43e3-8a25-ba25c166bdae.png\",\\n  \"sameAs\": [\\n    \"https://www.linkedin.com/company/teamcamp-app/\",\\n    \"https://x.com/teamcampapp\"\\n  ]\\n}\\n</script>\\n<script type=\"application/ld+json\">\\n{\\n  \"@type\": \"SoftwareApplication\",\\n  \"name\": \"Teamcamp - All-in-one Project Management Applicatoin\",\\n  \"operatingSystem\": \"All\",\\n  \"applicationCategory\": \"Project Management\",\\n  \"offers\": {\\n    \"@type\": \"Offer\",\\n    \"price\": \"49\",\\n    \"priceCurrency\": \"USD\"\\n  }\\n}\\n</script>\\n',description:\"Discover Teamcamp: the project management tool for IT, marketing, freelancers, and agencies. Manage tasks, collaborate, track time, and simplify billing easily.\",favicon:\"https://framerusercontent.com/assets/B7FVn96BbMrxlynl96uOTWs8jiU.png\",robots:\"max-image-preview:large\",socialImage:\"https://framerusercontent.com/assets/GyM58HUbE2FAXakf0OVOZ5KI.png\",title:\"Teamcamp: Streamline Project Management for IT, Marketing, and Agencies\"};}export const metadataVersion=1;\nexport const __FramerMetadata__ = {\"exports\":{\"metadataVersion\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"default\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}"],
  "mappings": "AACe,SAARA,EAA0BC,EAAOC,EAAa,CAAC,MAAM,CAAC,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAA2uI,oBAAoB;AAAA;AAAA,4CAAwP,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAA87E,oBAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAsiD,YAAY,mKAAmK,QAAQ,uEAAuE,OAAO,0BAA0B,YAAY,oEAAoE,MAAM,yEAAyE,CAAE",
  "names": ["metadata", "params", "activeLocale"]
}
