{
  "version": 3,
  "sources": ["ssg:https://framerusercontent.com/modules/8OwubPlg2hXnW6dudftX/lVKCp7VlbBYQl0qyYcw7/siteMetadata.js"],
  "sourcesContent": ["// Generated by Framer (6aa4fc0)\nexport default function metadata(params,activeLocale){return{customHTMLBodyEnd:'<script src=\"https://contra.com/static/scripts/guide.js\" defer=\"\"></script>\\n\\n<script type=\"text/javascript\" id=\"hs-script-loader\" async=\"\" defer=\"\" src=\"//js.hs-scripts.com/39624632.js\"></script>\\n\\n<script id=\"warmly-script-loader\" src=\"https://opps-widget.getwarmly.com/warmly.js?clientId=ad0949ff80c82ea1357b688032166524\" defer=\"\"></script>',customHTMLHeadEnd:\"<!-- Request a Demo form Submit START -->\\n<script>\\nconst uuidv4 = () => {\\n    return \\\"10000000-1000-4000-8000-100000000000\\\".replace(/[018]/g, c =>\\n        (+c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> +c / 4).toString(16)\\n    );\\n}\\n\\nconst getNameParts = (fullName) => {\\n    const nameParts = (fullName ?? '').trim().replaceAll(new RegExp(/\\\\s\\\\s+/g), ' ').split(' ');\\n    const givenName = nameParts.at(0) ?? '';\\n    const familyName = nameParts.at(-1) ?? '';\\n    return { givenName, familyName };\\n}\\n\\nconst findVisitorSessionInputs = () => {\\n  // If guide.js script is not loaded (such as locally),\\n  // then CONTRA_LOCAL_FIRST_VISITED_URL is not set.\\n  if (!localStorage.getItem('CONTRA_LOCAL_FIRST_VISITED_URL')) {\\n    return null;\\n  }\\n\\n  let input = null;\\n\\n  try {\\n    const maybeFirstReferrerUrl = localStorage.getItem(\\n      'CONTRA_LOCAL_FIRST_REFERRER_URL',\\n    );\\n\\n    const maybeFirstVisitedUrl = localStorage.getItem(\\n      'CONTRA_LOCAL_FIRST_VISITED_URL',\\n    );\\n    \\n    const firstUtmTag = localStorage.getItem('CONTRA_LOCAL_FIRST_UTM_TAG')\\n        ? JSON.parse(\\n            localStorage.getItem('CONTRA_LOCAL_FIRST_UTM_TAG') ?? '\\\"null\\\"',\\n          )\\n          : null;\\n\\n    input = {\\n      firstReferrerUrl: maybeFirstReferrerUrl\\n        ? maybeFirstReferrerUrl === 'null'\\n          ? null\\n          : JSON.parse(maybeFirstReferrerUrl)\\n        : null,\\n      firstUtmTag: firstUtmTag ? {\\n        utmCampaign: firstUtmTag.campaign ?? 'null',\\n        utmSource: firstUtmTag.source ?? 'null',\\n        utmMedium: firstUtmTag.medium ?? 'null',\\n      } : null,\\n      firstVisitedUrl: maybeFirstVisitedUrl\\n        ? maybeFirstVisitedUrl === 'null'\\n          ? null\\n          : JSON.parse(maybeFirstVisitedUrl)\\n        : null,\\n      visitedUrls: localStorage.getItem('CONTRA_LOCAL_RECENT_VISITED_URLS')\\n        ? JSON.parse(\\n            localStorage.getItem('CONTRA_LOCAL_RECENT_VISITED_URLS') ?? '[]',\\n          )\\n        : [],\\n    };\\n  } catch (error) {\\n    console.error(error);\\n\\n    return null;\\n  }\\n\\n  return input;\\n};\\n\\nconst submitDemoRequest = ({ displayEmail, fullName, personalLinkedInUrl, phoneNumber, referralIntentId, linkedInTracker }) => {\\n    const { givenName, familyName } = getNameParts(fullName);\\n    const uuid = uuidv4();\\n    const internalSource = new URLSearchParams(window.location.search).get('source') ?? '';\\n\\n    const overlayContainer = document.querySelector('[data-form-overlay]');\\n    const overlayForm = overlayContainer ? overlayContainer.querySelector('form') : null;\\n    const pageForm = document.querySelector('[data-form]');\\n\\n    const fallbackUrl = 'https://contra.com';\\n    const protocolRegex = /^https?:\\\\/\\\\//;\\n    const validUrlRegex = /^(https?:\\\\/\\\\/)?([\\\\da-z.-]+)\\\\.([a-z.]{2,6})([/\\\\w .-]*)*\\\\/?$/;\\n\\n    let finalUrl = fallbackUrl;\\n\\n    if (validUrlRegex.test(personalLinkedInUrl)) {\\n        if (protocolRegex.test(personalLinkedInUrl)) {\\n            finalUrl = personalLinkedInUrl;\\n        } else {\\n            finalUrl = 'https://' + personalLinkedInUrl;\\n        }\\n    }\\n\\n    const form = overlayForm || pageForm\\n\\n    if (form) {\\n      try {\\n        const isValid = form.checkValidity();\\n        \\n        if (isValid) {\\n\\n            if (linkedInTracker && linkedInTracker.length > 0)\\n            {\\n                window.lintrk('track', { conversion_id: linkedInTracker });\\n                console.log(\\\"submitted with\\\", linkedInTracker)\\n            }\\n\\n            const currentPath = window.location.pathname;\\n            let redirectPath = \\\"https://contra.com/partners-requested\\\"\\n            let source = 'REQUEST_DEMO'\\n\\n            if (currentPath === \\\"/5-step-guide-agencies-lp\\\") {\\n                redirectPath = \\\"/partners-requested\\\"\\n                source = 'HIRING_GUIDE_AGENCIES'\\n            } else if (currentPath === \\\"/5-step-guide-startups-lp\\\") {\\n                redirectPath = \\\"/partners-requested\\\"\\n                source = 'HIRING_GUIDE_STARTUPS'\\n            }\\n\\n    fetch(\\\"https://contra.com/api/\\\", {\\n        method: \\\"POST\\\",\\n        headers: {\\n            \\\"Content-Type\\\": \\\"application/json\\\",\\n        },\\n        body: JSON.stringify({\\n            query: `\\n              mutation Framer_DemoRequestMutation($input: CreateMarketingConversionFormSubmissionInput!) {\\n                  createMarketingConversionFormSubmission(input: $input) {\\n                      errors {\\n                          __typename\\n                          message\\n                      }\\n                  }\\n              }\\n          `,\\n            variables: {\\n                input: {\\n                    source,\\n                    referralIntentId: referralIntentId ?? window.contraReferralIntentData?.data?.createReferralIntent?.referralIntentId ?? null,\\n                    fields: [\\n                        { name: 'phoneNumber', value: phoneNumber },\\n                        { name: 'displayEmail', value: displayEmail },\\n                        { name: 'personalLinkedInUrl', value: finalUrl },\\n                        { name: 'websiteUrl', value: finalUrl },\\n                        { name: 'givenName', value: givenName },\\n                        { name: 'familyName', value: familyName },\\n                        { name: 'uuid', value: uuid },\\n                        { name: 'numberOfFreelancersHiresPerMonthMin', value: '0' },\\n                        { name: 'numberOfFreelancersHiresPerMonthMax', value: '0' },\\n                        { name: 'referringUrl', value: document.referrer },\\n                        { name: 'requestFromUrl', value: window.location.toString() },\\n                    ],\\n                    visitorSession: findVisitorSessionInputs()\\n                }\\n            },\\n        }),\\n    })\\n        .then((response) => response.json())\\n        .then((data) => {\\n            // redirect to the book a meeting page\\n            window.location.href = `${redirectPath}?uuid=${uuid}&firstName=${givenName}&lastName=${familyName}&email=${encodeURIComponent(displayEmail)}&referralIntentId=${referralIntentId ?? window.contraReferralIntentData?.data?.createReferralIntent?.referralIntentId ?? ''}`\\n        })\\n        .catch((error) => {\\n            console.error(error)\\n        })\\n             }\\n      } catch (error) {\\n        console.error(\\\"Form validation error:\\\", error);\\n      }\\n    }\\n}\\n\\n\\nwindow.contraFunctions = {\\n    submitDemoRequest,\\n}\\n</script>\\n<!-- Request a demo form submit END -->\\n\",customHTMLHeadStart:'<script>\\n  !function(){var analytics=window.analytics=window.analytics||[];if(!analytics.initialize)if(analytics.invoked)window.console&&console.error&&console.error(\"Segment snippet included twice.\");else{analytics.invoked=!0;analytics.methods=[\"trackSubmit\",\"trackClick\",\"trackLink\",\"trackForm\",\"pageview\",\"identify\",\"reset\",\"group\",\"track\",\"ready\",\"alias\",\"debug\",\"page\",\"once\",\"off\",\"on\",\"addSourceMiddleware\",\"addIntegrationMiddleware\",\"setAnonymousId\",\"addDestinationMiddleware\"];analytics.factory=function(e){return function(){if(window.analytics.initialized)return window.analytics[e].apply(window.analytics,arguments);var i=Array.prototype.slice.call(arguments);i.unshift(e);analytics.push(i);return analytics}};for(var i=0;i<analytics.methods.length;i++){var key=analytics.methods[i];analytics[key]=analytics.factory(key)}analytics.load=function(key,i){var t=document.createElement(\"script\");t.type=\"text/javascript\";t.async=!0;t.src=\"https://cdn.segment.com/analytics.js/v1/\" + key + \"/analytics.min.js\";var n=document.getElementsByTagName(\"script\")[0];n.parentNode.insertBefore(t,n);analytics._loadOptions=i};analytics._writeKey=\"AjJkeBxO7zhyGsEKips6DJr7WM9egXtY\";;analytics.SNIPPET_VERSION=\"4.16.1\";\\n  analytics.load(\"AjJkeBxO7zhyGsEKips6DJr7WM9egXtY\");\\n  analytics.page({\\n    referrer: document.referrer,\\n    title: document.title,\\n    url: window.location.href ?? \\'\\',\\n    search: JSON.stringify(window.location.search)\\n  });\\n  }}();\\n</script>\\n\\n<script>\\ndocument.addEventListener(\\'DOMContentLoaded\\', () => { // Ensure DOM content is loaded\\n  // Use event delegation to handle clicks on current and future elements\\n  document.body.addEventListener(\\'click\\', (event) => {\\n    const target = event.target.closest(\\'[data-segment-tracking-link-identifier]\\'); // Find the closest matching ancestor or self\\n    if (!target) return; // If no matching element was clicked, do nothing\\n\\n    const eventName = target.getAttribute(\\'data-segment-tracking-link-identifier\\');\\n\\n    const sectionName = target.getAttribute(\\'data-segment-tracking-section-identifier\\') ?? \\'\\';\\n\\n    const destinationUrl = target.getAttribute(\\'href\\');\\n    window.analytics.track(\\'link\\', {\\n      action: \\'tapped\\',\\n      link_name: eventName,\\n      referrer: document.referrer,\\n      section: sectionName,\\n      destination_url: destinationUrl,\\n      url: window.location.href,\\n      route_name: window.location.href,\\n      onboarding_entry_point_location: eventName === \\'nav_bar_sign_up\\' ? \\'nav_bar\\' : null,\\nonboarding_entry_point_route: window.location.href,\\n    });\\n  });\\n});\\n</script>\\n\\n<link href=\"/manifest.json\" rel=\"manifest\">\\n<meta content=\"black-translucent\" name=\"apple-mobile-web-app-status-bar-style white\">',description:\"Join 1M+ freelancers and 50K+ companies from creative agencies to high-growth tech startups working together worldwide on Contra.\",favicon:\"https://framerusercontent.com/assets/TXzRUL62IsUP5NI3Zuh0SpWOqGo.png\",robots:\"max-image-preview:large\",socialImage:\"https://framerusercontent.com/assets/IWRHhhSnL4xCpVpFeUP4qW3V9aU.png\",title:\"Contra - The commission-free freelance network\"};}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,mJAA4V,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;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,EAA07M,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,uFAAssF,YAAY,oIAAoI,QAAQ,uEAAuE,OAAO,0BAA0B,YAAY,uEAAuE,MAAM,gDAAgD,CAAE",
  "names": ["metadata", "params", "activeLocale"]
}
