{
  "version": 3,
  "sources": ["ssg:https://framerusercontent.com/modules/6wT4bFgEYABdgF1IGaRy/NrZnp3lltHdK7qZKNISW/ey16ZC2S6.js"],
  "sourcesContent": ["// Generated by Framer (a44d8cf)\nexport default function metadata(params,activeLocale){return{breakpoints:[{hash:\"9rntnz\",mediaQuery:\"(min-width: 1200px)\"},{hash:\"1xdj6bn\",mediaQuery:\"(min-width: 810px) and (max-width: 1199px)\"},{hash:\"1dgqe5n\",mediaQuery:\"(max-width: 809px)\"}],customHTMLBodyEnd:'<!-- Keep the page hidden until we confirm access -->\\n<style>html.protected-hide { opacity: 0 }</style>\\n<script>document.documentElement.classList.add(\"protected-hide\");</script>\\n\\n<script>\\n(function () {\\n  const ALLOWED_EMAIL = \"marevalo.consulting@gmail.com\";\\n  const NO_ACCESS_URL = \"https://www.alexgrabher.com/404\";\\n  const MAX_WAIT_MS = 15000;        // total time to wait for Outseta / user\\n  const POLL_INTERVAL_MS = 200;     // how often to retry while waiting\\n\\n  const log = (...args) => console.log(\"[Gate]\", ...args);\\n\\n  function normalizeEmail(v) {\\n    return (v || \"\").toString().trim().toLowerCase();\\n  }\\n\\n  function extractEmailFromUser(u) {\\n    // Try a few common shapes Outseta may return\\n    return normalizeEmail(\\n      u?.email ||\\n      u?.Email ||\\n      u?.primaryEmail?.address ||\\n      (Array.isArray(u?.emails) && u.emails[0]?.address)\\n    );\\n  }\\n\\n  async function getEmailFromOutseta() {\\n    const O = window.Outseta;\\n    if (!O || !O.auth) return null;\\n\\n    // Prefer promise-based APIs if present\\n    try {\\n      if (typeof O.auth.getSession === \"function\") {\\n        const session = await O.auth.getSession();\\n        const email = extractEmailFromUser(session?.user);\\n        if (email) return email;\\n      }\\n    } catch (e) { /* ignore */ }\\n\\n    try {\\n      if (typeof O.auth.getUser === \"function\") {\\n        const user = await O.auth.getUser();\\n        const email = extractEmailFromUser(user);\\n        if (email) return email;\\n      }\\n    } catch (e) { /* ignore */ }\\n\\n    // Fallback to sync getter some builds expose\\n    try {\\n      if (typeof O.auth.user === \"function\") {\\n        const user = O.auth.user();\\n        const email = extractEmailFromUser(user);\\n        if (email) return email;\\n      }\\n    } catch (e) { /* ignore */ }\\n\\n    return null;\\n  }\\n\\n  function waitForOutsetaReady(maxMs) {\\n    return new Promise((resolve) => {\\n      const start = Date.now();\\n\\n      const tryResolve = async () => {\\n        if (window.Outseta && window.Outseta.auth) {\\n          resolve(true);\\n          return;\\n        }\\n        if (Date.now() - start > maxMs) {\\n          resolve(false);\\n          return;\\n        }\\n        setTimeout(tryResolve, POLL_INTERVAL_MS);\\n      };\\n\\n      tryResolve();\\n    });\\n  }\\n\\n  (async function run() {\\n    log(\"Waiting for Outseta\u2026\");\\n    const ok = await waitForOutsetaReady(MAX_WAIT_MS);\\n\\n    if (!ok) {\\n      log(\"Outseta not available in time \u2192 redirect\");\\n      window.location.replace(NO_ACCESS_URL);\\n      return;\\n    }\\n\\n    const start = Date.now();\\n    let email = null;\\n\\n    // Keep trying to read the user until timeout\\n    while (!email && Date.now() - start < MAX_WAIT_MS) {\\n      email = await getEmailFromOutseta();\\n      if (!email) {\\n        await new Promise((r) => setTimeout(r, POLL_INTERVAL_MS));\\n      }\\n    }\\n\\n    if (!email) {\\n      log(\"No user detected \u2192 redirect\");\\n      window.location.replace(NO_ACCESS_URL);\\n      return;\\n    }\\n\\n    log(\"Detected user:\", email);\\n\\n    if (normalizeEmail(email) !== normalizeEmail(ALLOWED_EMAIL)) {\\n      log(\"Email not allowed \u2192 redirect\");\\n      window.location.replace(NO_ACCESS_URL);\\n      return;\\n    }\\n\\n    // Allowed \u2192 show the page\\n    log(\"Access granted\");\\n    document.documentElement.classList.remove(\"protected-hide\");\\n  })();\\n})();\\n</script>\\n',description:\"Landing Page For Signing Up To A Members Area. Left Side Features An Embedded Plugin, Right Side Displays Dynamically Moving Images Or Visuals For Engagement.\",elements:{SLHk5mQux:\"performance-training\",wvcK97cDS:\"habit-tracker\"},robots:\"max-image-preview:large\",serializationId:\"framer-SnRtN\",title:\"Sign Up For Members Area Landing Page\",viewport:\"width=device-width\"};}export const metadataVersion=1;\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"metadataVersion\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}"],
  "mappings": "AACe,SAARA,EAA0BC,EAAOC,EAAa,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,KAAK,SAAS,WAAW,qBAAqB,EAAE,CAAC,KAAK,UAAU,WAAW,4CAA4C,EAAE,CAAC,KAAK,UAAU,WAAW,oBAAoB,CAAC,EAAE,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,EAA60G,YAAY,iKAAiK,SAAS,CAAC,UAAU,uBAAuB,UAAU,eAAe,EAAE,OAAO,0BAA0B,gBAAgB,eAAe,MAAM,wCAAwC,SAAS,oBAAoB,CAAE,CAAQ,IAAMC,EAAgB,EACt+HC,EAAqB,CAAC,QAAU,CAAC,QAAU,CAAC,KAAO,WAAW,YAAc,CAAC,sBAAwB,GAAG,CAAC,EAAE,gBAAkB,CAAC,KAAO,WAAW,YAAc,CAAC,sBAAwB,GAAG,CAAC,EAAE,mBAAqB,CAAC,KAAO,UAAU,CAAC,CAAC",
  "names": ["metadata", "params", "activeLocale", "metadataVersion", "__FramerMetadata__"]
}
