{"version":3,"file":"shared-lib.CP_UcIHL.mjs","names":[],"sources":["https:/framerusercontent.com/modules/fI0vamXlkbb9WpbHSsyL/Ijf6MPqP63ASghZ7WsRS/siteMetadata.js"],"sourcesContent":["// Generated by Framer (c2a8602)\nexport default function metadata(params,activeLocale){return{customHTMLBodyEnd:'<script>\\n  // Mark the page \"gated\" unless we arrived after unlock\\n  (function(){\\n    if (sessionStorage.getItem(\\'gateOK\\') !== \\'1\\') {\\n      document.documentElement.classList.add(\\'gated\\');\\n    } else {\\n      // Clear the flag for subsequent pages and reveal immediately\\n      sessionStorage.removeItem(\\'gateOK\\');\\n    }\\n    window.addEventListener(\\'load\\', function(){\\n      document.documentElement.classList.remove(\\'gated\\'); // reveal when fully ready\\n    });\\n  })();\\n</script>\\n\\n<script>\\n(function () {\\n  // Only run in the top window (prevents “tiny screen” iframe issues)\\n  if (window.top !== window) return;\\n\\n  const STORAGE_KEY = \"portfolio_gate_v1\";\\n  const ALLOW = [\\n    \"/access\",\\n    \"/sitemap.xml\",\\n    \"/robots.txt\",\\n    \"/favicon\",\\n    \"/_framer\",\\n    \"/api\",\\n    // Add paths you want visible before unlock (like your resume PDF):\\n    \"/files\", \"/resume\", \"/cv\"\\n  ];\\n\\n  function isAllowedPath(path) {\\n    return ALLOW.some(p => path.startsWith(p));\\n  }\\n\\n  function gateOK() {\\n    try {\\n      const raw = localStorage.getItem(STORAGE_KEY);\\n      if (!raw) return false;\\n      const data = JSON.parse(raw);\\n      if (!data.ok) return false;\\n      const maxAge = 7 * 24 * 60 * 60 * 1000; // 7 days; matches component default\\n      return Date.now() - (data.ts || 0) < maxAge;\\n    } catch (e) { return false; }\\n  }\\n\\n  const path = location.pathname;\\n  if (!gateOK() && !isAllowedPath(path)) {\\n    const next = encodeURIComponent(location.pathname + location.search + location.hash);\\n    location.replace(`/access?next=${next}`);\\n  }\\n})();\\n</script>\\n',customHTMLHeadEnd:\"<style>\\n  html.gated body #root, html.gated body [data-framer-root] { visibility: hidden; }\\n</style>\\n\",description:\"Product & Strategy Portfolio\",favicon:\"https://framerusercontent.com/assets/vljx3Y3QIUxmMmROjR9urB8StA.png\",robots:\"max-image-preview:large\",title:\"Jennifer Xu\"};}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,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAA0lD,kBAAkB;;;EAA2G,YAAY,+BAA+B,QAAQ,sEAAsE,OAAO,0BAA0B,MAAM,cAAc"}