{
  "version": 3,
  "sources": ["ssg:https://framerusercontent.com/modules/vsmcC4ehasrGscBL5EyZ/YXr2QQIRbfJwydqp1Mle/siteMetadata.js"],
  "sourcesContent": ["// Generated by Framer (b6cf623)\nexport default function metadata(params,activeLocale){return{customHTMLBodyStart:\"<!-- Plugin: ced618 --> <script>\\n      (function() {\\n        window.__FcCurrencyConfigs = window.__FcCurrencyConfigs || {};\\n        window.__FcCheckoutConfigs = window.__FcCheckoutConfigs || {};\\n        \\n        // Store previous settings for comparison\\n        const previousSettings = { \\n          currency: { ...window.__FcCurrencyConfigs },\\n          checkout: { ...window.__FcCheckoutConfigs }\\n        };\\n        \\n        // Update currency settings\\n        window.__FcCurrencyConfigs.currencySymbol = \\\"Left\\\";\\n        window.__FcCurrencyConfigs.currencyPosition = \\\"Right\\\";\\n        window.__FcCurrencyConfigs.spaceBeforeValue = false;\\n        window.__FcCurrencyConfigs.spaceAfterValue = false;\\n        window.__FcCurrencyConfigs.hideDecimals = false;\\n        \\n        // Update checkout settings\\n        window.__FcCheckoutConfigs.locale = \\\"en\\\";\\n        \\n        localStorage.setItem('currencySymbol', 'Left');\\n        localStorage.setItem('checkoutLocale', 'en');\\n\\n        // Dispatch currency settings update event\\n        const currencyEvent = new CustomEvent('currency__settings-updated', {\\n          detail: {\\n            previous: previousSettings.currency,\\n            current: window.__FcCurrencyConfigs\\n          }\\n        });\\n        document.dispatchEvent(currencyEvent);\\n\\n        // Dispatch checkout settings update event\\n        const checkoutEvent = new CustomEvent('checkout__settings-updated', {\\n          detail: {\\n            previous: previousSettings.checkout,\\n            current: window.__FcCheckoutConfigs\\n          }\\n        });\\n        document.dispatchEvent(checkoutEvent);\\n    \\n        // Clean up Meta Pixel if it exists\\n        try {\\n          // Remove the noscript pixel element if it exists\\n          const noscriptPixel = document.getElementById('fb-pixel-noscript');\\n          if (noscriptPixel) {\\n            noscriptPixel.remove();\\n          }\\n\\n          // Clean up any existing fbq instances\\n          if (window.fbq) {\\n            delete window.fbq;\\n          }\\n          if (window._fbq) {\\n            delete window._fbq;\\n          }\\n          if (window.fcTrackEvent) {\\n            delete window.fcTrackEvent;\\n          }\\n\\n          // Remove any existing fb pixel script tags\\n          const scripts = document.querySelectorAll('script[src*=\\\"connect.facebook.net\\\"]');\\n          scripts.forEach(script => {\\n            script.remove();\\n          });\\n        } catch (e) {}\\n      \\n        // Clean up Google Analytics ID if it exists\\n          delete window.googleAnalyticsId;\\n      \\n      })();\\n    </script>\",customHTMLHeadEnd:'<!-- Plugin: ced618 --> <script>\\n    (function() {\\n      const fcConfigs = {\\n        storefrontDomain: \"qvuuzj-wg.myshopify.com\",\\n        storefrontAccessToken: \"6109388002a726f84f75ba47f36559f0\",\\n      };\\n    \\n      const CURRENCIES = {\"AED\":\"\u062F.\u0625\",\"AFN\":\"Af\",\"ALL\":\"L\",\"AMD\":\"\u058F\",\"ANG\":\"\u0192\",\"AOA\":\"Kz\",\"ARS\":\"$\",\"AUD\":\"$\",\"AWG\":\"\u0192\",\"AZN\":\"\u20BC\",\"BAM\":\"KM\",\"BBD\":\"$\",\"BDT\":\"\u09F3\",\"BGN\":\"\u043B\u0432\",\"BHD\":\"\u062F.\u0628\",\"BIF\":\"FBu\",\"BMD\":\"$\",\"BND\":\"$\",\"BOB\":\"Bs.\",\"BRL\":\"R$\",\"BSD\":\"$\",\"BTN\":\"Nu.\",\"BWP\":\"P\",\"BYN\":\"Br\",\"BZD\":\"BZ$\",\"CAD\":\"$\",\"CDF\":\"FC\",\"CHF\":\"Fr\",\"CLP\":\"$\",\"CNY\":\"\\xa5\",\"COP\":\"$\",\"CRC\":\"\u20A1\",\"CVE\":\"$\",\"CZK\":\"K\u010D\",\"DJF\":\"Fdj\",\"DKK\":\"kr\",\"DOP\":\"RD$\",\"DZD\":\"\u062F.\u062C\",\"EGP\":\"\\xa3\",\"ERN\":\"Nfk\",\"ETB\":\"Br\",\"EUR\":\"\u20AC\",\"FJD\":\"$\",\"FKP\":\"\\xa3\",\"GBP\":\"\\xa3\",\"GEL\":\"\u20BE\",\"GHS\":\"\u20B5\",\"GIP\":\"\\xa3\",\"GMD\":\"D\",\"GNF\":\"FG\",\"GTQ\":\"Q\",\"GYD\":\"$\",\"HKD\":\"$\",\"HNL\":\"L\",\"HRK\":\"kn\",\"HTG\":\"G\",\"HUF\":\"Ft\",\"IDR\":\"Rp\",\"ILS\":\"\u20AA\",\"INR\":\"\u20B9\",\"IQD\":\"\u0639.\u062F\",\"IRR\":\"\uFDFC\",\"ISK\":\"kr\",\"JEP\":\"\\xa3\",\"JMD\":\"J$\",\"JOD\":\"\u062F.\u0627\",\"JPY\":\"\\xa5\",\"KES\":\"KSh\",\"KGS\":\"\u0441\u043E\u043C\",\"KHR\":\"\u17DB\",\"KID\":\"$\",\"KMF\":\"CF\",\"KRW\":\"\u20A9\",\"KWD\":\"\u062F.\u0643\",\"KYD\":\"$\",\"KZT\":\"\u20B8\",\"LAK\":\"\u20AD\",\"LBP\":\"\\xa3\",\"LKR\":\"\u0DBB\u0DD4\",\"LRD\":\"$\",\"LSL\":\"L\",\"LTL\":\"Lt\",\"LVL\":\"Ls\",\"LYD\":\"\u0644.\u062F\",\"MAD\":\"\u062F.\u0645.\",\"MDL\":\"MDL\",\"MGA\":\"Ar\",\"MKD\":\"\u0434\u0435\u043D\",\"MMK\":\"Ks\",\"MNT\":\"\u20AE\",\"MOP\":\"MOP$\",\"MRU\":\"UM\",\"MUR\":\"\u20A8\",\"MVR\":\"\u0783\",\"MWK\":\"MK\",\"MXN\":\"$\",\"MYR\":\"RM\",\"MZN\":\"MT\",\"NAD\":\"$\",\"NGN\":\"\u20A6\",\"NIO\":\"C$\",\"NOK\":\"kr\",\"NPR\":\"\u0930\u0942\",\"NZD\":\"$\",\"OMR\":\"\u0631.\u0639.\",\"PAB\":\"B/.\",\"PEN\":\"S/.\",\"PGK\":\"K\",\"PHP\":\"\u20B1\",\"PKR\":\"\u20A8\",\"PLN\":\"z\u0142\",\"PYG\":\"\u20B2\",\"QAR\":\"\u0631.\u0642\",\"RON\":\"lei\",\"RSD\":\"\u0414\u0438\u043D.\",\"RUB\":\"\u20BD\",\"RWF\":\"FRw\",\"SAR\":\"\u0631.\u0633\",\"SBD\":\"$\",\"SCR\":\"\u20A8\",\"SDG\":\"\u062C.\u0633.\",\"SEK\":\"kr\",\"SGD\":\"$\",\"SHP\":\"\\xa3\",\"SLL\":\"Le\",\"SOS\":\"Sh\",\"SRD\":\"$\",\"SSP\":\"\\xa3\",\"STN\":\"Db\",\"SYP\":\"\\xa3\",\"SZL\":\"E\",\"THB\":\"\u0E3F\",\"TJS\":\"\u0405\u041C\",\"TMT\":\"T\",\"TND\":\"\u062F.\u062A\",\"TOP\":\"T$\",\"TRY\":\"\u20BA\",\"TTD\":\"TT$\",\"TWD\":\"NT$\",\"TZS\":\"TSh\",\"UAH\":\"\u20B4\",\"UGX\":\"USh\",\"USD\":\"$\",\"UYU\":\"$\",\"UZS\":\"so\\'m\",\"VED\":\"Bs.S.\",\"VES\":\"Bs.\",\"VND\":\"\u20AB\",\"VUV\":\"VT\",\"WST\":\"T\",\"XAF\":\"FCFA\",\"XCD\":\"$\",\"XOF\":\"CFA\",\"XPF\":\"\u20A3\",\"XXX\":\"\",\"YER\":\"\uFDFC\",\"ZAR\":\"R\",\"ZMW\":\"ZK\",\"BYR\":\"Br\",\"STD\":\"Db\",\"VEF\":\"Bs.\"}; \\n    \\n      let domain;\\n      let products = [];\\n    \\n      // ALL QUERIES\\n      const getProductsQuery = `\\n        query GetProducts($cursor: String) {\\n          products(first: 250, after: $cursor) {\\n            edges {\\n              node {\\n                id\\n                title\\n                vendor\\n                handle\\n                productType\\n                tags\\n                collections(first: 250) {\\n                  edges {\\n                    node {\\n                      id\\n                      title\\n                      handle\\n                    }\\n                  }\\n                }\\n                images(first: 20) {\\n                  edges {\\n                    node {\\n                      url\\n                      altText\\n                      width\\n                      height\\n                     }\\n                    }\\n                }\\n                sellingPlanGroups(first: 1) {\\n                  edges {\\n                    node {\\n                      name\\n                      options {\\n                        name\\n                        values\\n                      }\\n                      sellingPlans(first: 10) {\\n                        edges {\\n                          node {\\n                            id\\n                            name\\n                            description\\n                            recurringDeliveries\\n                            priceAdjustments {\\n                              orderCount\\n                              adjustmentValue {\\n                                __typename\\n                                ... on SellingPlanPercentagePriceAdjustment {\\n                                  adjustmentPercentage\\n                                }\\n                                ... on SellingPlanFixedAmountPriceAdjustment {\\n                                  adjustmentAmount {\\n                                    amount\\n                                    currencyCode\\n                                  }\\n                                }\\n                                ... on SellingPlanFixedPriceAdjustment {\\n                                  price {\\n                                    amount\\n                                    currencyCode\\n                                  }\\n                                }\\n                              }\\n                            }\\n                          }\\n                        }\\n                      }\\n                    }\\n                  }\\n                }\\n                options {\\n                  id\\n                  name\\n                  values\\n                }\\n                compareAtPriceRange {\\n                  minVariantPrice {\\n                    amount\\n                    currencyCode\\n                  }\\n                }\\n                priceRange {\\n                  minVariantPrice {\\n                    amount\\n                    currencyCode\\n                  }\\n                }\\n                variants(first: 250) {\\n                  pageInfo {\\n                    hasNextPage\\n                    hasPreviousPage\\n                    endCursor\\n                  }\\n                  edges {\\n                    node {\\n                      id\\n                      image {\\n                        url\\n                        altText\\n                        width\\n                        height\\n                      }\\n                      title\\n                      sku\\n                      quantityAvailable\\n                      availableForSale\\n                      requiresShipping\\n                      selectedOptions {\\n                        name\\n                        value\\n                      }\\n                      priceV2 {\\n                        amount\\n                        currencyCode\\n                      }\\n                      compareAtPriceV2 {\\n                        amount\\n                        currencyCode\\n                      }\\n                    }\\n                  }\\n                }\\n              }\\n            }\\n            pageInfo {\\n              hasNextPage\\n              endCursor\\n            }\\n          }\\n        }\\n      `;\\n    \\n      const getProductsQueryBackup = `\\n        query GetProductsBackup($cursor: String) {\\n          products(first: 250, after: $cursor) {\\n            edges {\\n              node {\\n                id\\n                title\\n                vendor\\n                handle\\n                productType\\n                tags\\n                collections(first: 250) {\\n                  edges {\\n                    node {\\n                      id\\n                      title\\n                      handle\\n                    }\\n                  }\\n                }\\n                images(first: 20) {\\n                  edges {\\n                    node {\\n                      url\\n                      altText\\n                      width\\n                      height\\n                     }\\n                    }\\n                }\\n                options {\\n                  id\\n                  name\\n                  values\\n                }\\n                compareAtPriceRange {\\n                  minVariantPrice {\\n                    amount\\n                    currencyCode\\n                  }\\n                }\\n                priceRange {\\n                  minVariantPrice {\\n                    amount\\n                    currencyCode\\n                  }\\n                }\\n                variants(first: 250) {\\n                  pageInfo {\\n                    hasNextPage\\n                    hasPreviousPage\\n                    endCursor\\n                  }\\n                  edges {\\n                    node {\\n                      id\\n                      image {\\n                        url\\n                        altText\\n                        width\\n                        height\\n                      }\\n                      title\\n                      sku\\n                      availableForSale\\n                      quantityAvailable\\n                      requiresShipping\\n                      selectedOptions {\\n                        name\\n                        value\\n                      }\\n                      priceV2 {\\n                        amount\\n                        currencyCode\\n                      }\\n                      compareAtPriceV2 {\\n                        amount\\n                        currencyCode\\n                      }\\n                    }\\n                  }\\n                }\\n              }\\n            }\\n            pageInfo {\\n              hasNextPage\\n              endCursor\\n            }\\n          }\\n        }\\n      `;\\n    \\n      const getCartQuery = `\\n        query GetCart($cartId: ID!) {\\n          cart(id: $cartId) {\\n            id\\n            createdAt\\n            updatedAt\\n            checkoutUrl\\n            lines(first: 250) {\\n              edges {\\n                node {\\n                  id\\n                  quantity\\n                  sellingPlanAllocation { \\n                    checkoutChargeAmount {\\n                      amount\\n                      currencyCode\\n                    }\\n                    sellingPlan {\\n                      id\\n                      name\\n                      description\\n                    }\\n                  }\\n                  merchandise {\\n                    ... on ProductVariant {\\n                      id\\n                      title\\n                      image {\\n                        url\\n                      }\\n                      selectedOptions {\\n                        name\\n                        value\\n                      }\\n                      product {\\n                        title\\n                        handle\\n                      }\\n                      priceV2 {\\n                        amount\\n                        currencyCode\\n                      }\\n                      compareAtPriceV2 {\\n                        amount\\n                        currencyCode\\n                      }\\n                    }\\n                  }\\n                  attributes {\\n                    key\\n                    value\\n                  }\\n                  estimatedCost {\\n                    totalAmount {\\n                      amount\\n                      currencyCode\\n                    }\\n                    subtotalAmount {\\n                      amount\\n                      currencyCode\\n                    }\\n                  }\\n                }\\n              }\\n            }\\n            attributes {\\n              key\\n              value\\n            }\\n            estimatedCost {\\n              totalAmount {\\n                amount\\n                currencyCode\\n              }\\n              subtotalAmount {\\n                amount\\n                currencyCode\\n              }\\n              totalTaxAmount {\\n                amount\\n                currencyCode\\n              }\\n              totalDutyAmount {\\n                amount\\n                currencyCode\\n              }\\n            }\\n          }\\n        }\\n      `;\\n    \\n      const getCartQueryNoPlans = `\\n        query GetCart($cartId: ID!) {\\n          cart(id: $cartId) {\\n            id\\n            createdAt\\n            updatedAt\\n            checkoutUrl\\n            lines(first: 250) {\\n              edges {\\n                node {\\n                  id\\n                  quantity\\n                  merchandise {\\n                    ... on ProductVariant {\\n                      id\\n                      title\\n                      image {\\n                        url\\n                      }\\n                      selectedOptions {\\n                        name\\n                        value\\n                      }\\n                      product {\\n                        title\\n                        handle\\n                      }\\n                      priceV2 {\\n                        amount\\n                        currencyCode\\n                      }\\n                      compareAtPriceV2 {\\n                        amount\\n                        currencyCode\\n                      }\\n                    }\\n                  }\\n                  attributes {\\n                    key\\n                    value\\n                  }\\n                  estimatedCost {\\n                    totalAmount {\\n                      amount\\n                      currencyCode\\n                    }\\n                    subtotalAmount {\\n                      amount\\n                      currencyCode\\n                    }\\n                  }\\n                }\\n              }\\n            }\\n            attributes {\\n              key\\n              value\\n            }\\n            estimatedCost {\\n              totalAmount {\\n                amount\\n                currencyCode\\n              }\\n              subtotalAmount {\\n                amount\\n                currencyCode\\n              }\\n              totalTaxAmount {\\n                amount\\n                currencyCode\\n              }\\n              totalDutyAmount {\\n                amount\\n                currencyCode\\n              }\\n            }\\n          }\\n        }\\n      `;\\n    \\n      window.shopXtools = window.shopXtools || {};\\n      window.shopXtools.products = {};\\n      window.shopXtools.fetchCart = null;\\n      window.shopXtools.dispatchEvent = (eventType, detail) => {\\n            const newEvent = new CustomEvent(eventType, { detail });\\n            document.dispatchEvent(newEvent);\\n          };\\n    \\n      window.shopXtools.handleCartMutation = async (mutation, variables) => {\\n        const endpoint = `https://${domain.host}/api/2023-07/graphql.json`;\\n        const token = fcConfigs.storefrontAccessToken;\\n    \\n        try {\\n          const response = await fetch(endpoint, {\\n            method: \"POST\",\\n            headers: {\\n              \"Content-Type\": \"application/json\",\\n              \"X-Shopify-Storefront-Access-Token\": token,\\n            },\\n            body: JSON.stringify({\\n              query: mutation,\\n              variables,\\n            }),\\n          });\\n          const result = await response.json();\\n          if (response.ok && !result.errors) {\\n            return result.data;\\n          } else {\\n            console.error(\"GraphQL errors:\", result.errors);\\n            return null;\\n          }\\n        } catch (error) {\\n          console.error(\"Network error:\", error);\\n          return null;\\n        }\\n      };\\n    \\n      window.shopXtools.fetchCart = async function(cartId) {\\n        const variables = { cartId: cartId };\\n        const endpoint = `https://${domain.host}/api/2024-07/graphql.json`;\\n    \\n        const tryFetchCart = async (query, queryName) => {\\n          try {\\n            const response = await fetch(endpoint, {\\n              method: \"POST\",\\n              headers: {\\n                \"Content-Type\": \"application/json\",\\n                \"X-Shopify-Storefront-Access-Token\": fcConfigs.storefrontAccessToken,\\n              },\\n              body: JSON.stringify({ query: query, variables }),\\n            });\\n    \\n            const result = await response.json();\\n            if (result.errors) {\\n              console.error(`${queryName} failed with errors:`, result.errors);\\n              return null;\\n            }\\n    \\n            if (result.data && result.data.cart) {\\n              return result.data.cart;\\n            } else {\\n              console.error(`Cart data not found in response from ${queryName}:`, result);\\n              return null;\\n            }\\n          } catch (error) {\\n            console.error(`Network error during ${queryName}:`, error);\\n            return null;\\n          }\\n        };\\n    \\n        let cartData = await tryFetchCart(getCartQuery, \"Primary cart query\");\\n    \\n        if (!cartData) {\\n          console.log(\"Primary cart query failed, attempting backup cart query...\");\\n          cartData = await tryFetchCart(getCartQueryNoPlans, \"Backup cart query\");\\n        }\\n    \\n        return cartData;\\n      };\\n    \\n      const configValidation = () => {\\n        if (!fcConfigs.storefrontDomain) {\\n          throw Error(\"Storefront domain not found\");\\n        }\\n        if (!fcConfigs.storefrontAccessToken) {\\n          throw Error(\"Storefront access token not found\");\\n        }\\n      };\\n    \\n      const setDomainUrl = () => {\\n        let storeDomain = \"https://test.shopify.com\";\\n        if (fcConfigs.storefrontDomain) {\\n          storeDomain = fcConfigs.storefrontDomain.startsWith(\"http\")\\n            ? fcConfigs.storefrontDomain\\n            : `https://${fcConfigs.storefrontDomain}`;\\n        }\\n        domain = new URL(storeDomain);\\n      };\\n    \\n      const shopify = async (type, query, variables) => {\\n        const endpoint = `https://${domain.host}/api/2023-07/graphql.json`;\\n        const response = await fetch(endpoint, {\\n          method: \"POST\",\\n          body: JSON.stringify({ [type]: query, variables }),\\n          headers: {\\n            \"Content-Type\": \"application/json\",\\n            \"X-Shopify-Storefront-Access-Token\": fcConfigs.storefrontAccessToken,\\n          },\\n        });\\n        const json = await response.json();\\n        return json.data;\\n      };\\n    \\n      const setupInitialToolsObject = () => {\\n        if (window.shopXtools) {\\n          return;\\n        }\\n    \\n        window.shopXtools = {\\n          __eventsIdentifier: \"shopX__events__fragment\",\\n          dispatchEvent: (eventType, detail) => {\\n            const newEvent = new CustomEvent(eventType, { detail });\\n            document.dispatchEvent(newEvent);\\n          },\\n          status: \"loading\",\\n          cart: {},\\n          products: [],\\n          getProducts: (_id) => null\\n        };\\n      };\\n\\n      const handleProductData = (newProducts, inventoryData = null) => {\\n        // Transform the data to ensure collections are in the expected format\\n        const transformedProducts = newProducts.map(({ node }) => ({\\n          node: {\\n            ...node,\\n            collections: node.collections?.edges?.map(edge => edge.node) || [],\\n            // If we have fresh inventory data, use it, otherwise keep existing\\n            variants: {\\n              ...node.variants,\\n              edges: node.variants.edges.map(({ node: variant }) => ({\\n                node: {\\n                  ...variant,\\n                  // Update inventory if we have fresh data\\n                  quantityAvailable: inventoryData?.[variant.id]?.quantityAvailable ?? variant.quantityAvailable,\\n                  availableForSale: inventoryData?.[variant.id]?.availableForSale ?? variant.availableForSale\\n                }\\n              }))\\n            }\\n          }\\n        }));\\n        \\n        // Update the products array\\n        products = transformedProducts;\\n        \\n        // Update shopXtools\\n        window.shopXtools.products = products;\\n        window.shopXtools.getProducts = (_id) => {\\n          const fullId = _id.startsWith(\\'gid://\\') ? _id : `gid://shopify/Product/${_id}`;\\n          return products.find(({ node: product }) => product.id === fullId);\\n        };\\n\\n        // Store in sessionStorage for quick access\\n        try {\\n          sessionStorage.setItem(\\'fc_products\\', JSON.stringify(products));\\n          sessionStorage.setItem(\\'fc_products_timestamp\\', Date.now().toString());\\n        } catch (error) {\\n          console.error(\\'Error saving to session storage:\\', error);\\n        }\\n\\n        // Dispatch the event\\n        window.shopXtools.dispatchEvent(\\'data__products-ready\\', { products });\\n      };\\n\\n      const fetchInventoryData = async () => {\\n        const inventoryQuery = `\\n          query GetInventory($cursor: String) {\\n            products(first: 250, after: $cursor) {\\n              edges {\\n                node {\\n                  id\\n                  variants(first: 250) {\\n                    edges {\\n                      node {\\n                        id\\n                        quantityAvailable\\n                        availableForSale\\n                      }\\n                    }\\n                  }\\n                }\\n              }\\n              pageInfo {\\n                hasNextPage\\n                endCursor\\n              }\\n            }\\n          }\\n        `;\\n\\n        const fetchPage = async (cursor = null) => {\\n          const variables = cursor ? { cursor } : {};\\n          const endpoint = `https://${domain.host}/api/2024-07/graphql.json`;\\n          \\n          try {\\n            const response = await fetch(endpoint, {\\n              method: \"POST\",\\n              headers: {\\n                \"Content-Type\": \"application/json\",\\n                \"X-Shopify-Storefront-Access-Token\": fcConfigs.storefrontAccessToken,\\n              },\\n              body: JSON.stringify({ query: inventoryQuery, variables }),\\n            });\\n            \\n            const body = await response.json();\\n            if (!body.errors && body.data) {\\n              return body.data;\\n            }\\n            return null;\\n          } catch (error) {\\n            console.error(\\'Error fetching inventory:\\', error);\\n            return null;\\n          }\\n        };\\n\\n        let allInventory = {};\\n        let hasNextPage = true;\\n        let cursor = null;\\n\\n        while (hasNextPage) {\\n          const data = await fetchPage(cursor);\\n          if (!data) break;\\n\\n          // Extract inventory data\\n          data.products.edges.forEach(({ node: product }) => {\\n            product.variants.edges.forEach(({ node: variant }) => {\\n              allInventory[variant.id] = {\\n                quantityAvailable: variant.quantityAvailable,\\n                availableForSale: variant.availableForSale\\n              };\\n            });\\n          });\\n\\n          hasNextPage = data.products.pageInfo.hasNextPage;\\n          cursor = data.products.pageInfo.endCursor;\\n        }\\n\\n        return allInventory;\\n      };\\n    \\n      const fetchProducts = async (cursor = null) => {\\n        // Try to load from session storage on initial load\\n        if (!cursor) {\\n          try {\\n            const timestamp = parseInt(sessionStorage.getItem(\\'fc_products_timestamp\\') || \\'0\\');\\n            const storedProducts = JSON.parse(sessionStorage.getItem(\\'fc_products\\') || \\'[]\\');\\n            const now = Date.now();\\n            \\n            // Use stored data if less than 5 minutes old\\n            if (storedProducts.length > 0 && (now - timestamp < 300000)) {\\n              // First show stored data\\n              handleProductData(storedProducts);\\n              window.shopXtools.status = \"ready\";\\n              \\n              // Then fetch fresh inventory data\\n              const inventoryData = await fetchInventoryData();\\n              if (inventoryData) {\\n                handleProductData(storedProducts, inventoryData);\\n              }\\n              \\n              return;\\n            }\\n          } catch (error) {\\n            console.error(\\'Error loading from session storage:\\', error);\\n          }\\n        }\\n\\n        const tryFetchProducts = async (query, queryName, variables) => {\\n          const endpoint = `https://${domain.host}/api/2024-07/graphql.json`;\\n          try {\\n            const response = await fetch(endpoint, {\\n              method: \"POST\",\\n              headers: {\\n                \"Content-Type\": \"application/json\",\\n                \"X-Shopify-Storefront-Access-Token\": fcConfigs.storefrontAccessToken,\\n              },\\n              body: JSON.stringify({ query: query, variables }),\\n            });\\n            const body = await response.json();\\n    \\n            if (body.errors) {\\n              console.error(`${queryName} failed with errors:`, body.errors);\\n              return null;\\n            }\\n            if (body.data && body.data.products) {\\n              return body;\\n            } else {\\n              console.error(`Product data not found in response from ${queryName}:`, body);\\n              return null;\\n            }\\n          } catch (error) {\\n            console.error(`Network error during ${queryName}:`, error);\\n            return null;\\n          }\\n        };\\n\\n        const variables = cursor ? { cursor } : {};\\n        let body = await tryFetchProducts(getProductsQuery, \"Primary products query\", variables);\\n    \\n        if (!body) {\\n          console.log(\"Primary products query failed, attempting backup query...\");\\n          body = await tryFetchProducts(getProductsQueryBackup, \"Backup products query\", variables);\\n        }\\n    \\n        if (body) {\\n          const newProducts = body.data.products.edges || [];\\n          const allProducts = cursor ? [...products, ...newProducts] : newProducts;\\n          handleProductData(allProducts);\\n\\n          const pageInfo = body.data.products.pageInfo;\\n          if (pageInfo.hasNextPage && pageInfo.endCursor) {\\n            await fetchProducts(pageInfo.endCursor);\\n          } else {\\n            window.shopXtools.status = \"ready\";\\n          }\\n        } else {\\n          console.error(\"Both product queries failed.\");\\n          window.shopXtools.status = \"ready\";\\n        }\\n      };\\n\\n      // Initialize\\n      setupInitialToolsObject();\\n      configValidation();\\n      setDomainUrl();\\n      \\n  const validateDomainForFreePlan = () => {\\n    if (\"basic\" === \"free\") {\\n      const isFramerSubdomain = domain.host.includes(\\'framer.app\\');\\n      if (isFramerSubdomain) {\\n        console.error(\\'Free plan users can only  use a Framer subdomain\\');\\n        return false;\\n      }\\n    }\\n    return true;\\n  };\\n\\n  if (!validateDomainForFreePlan()) {\\n    console.log(\\'Domain validation failed, products will not be fetched\\');\\n    return;\\n  }\\n\\n      \\n  if (\"basic\" === \"free\") {\\n    // Wait for DOM to be ready\\n    const insertWidget = () => {\\n      const widget = document.createElement(\\'div\\');\\n      widget.innerHTML = `\\n        <div \\n          style=\"\\n            position: fixed;\\n            bottom: 60px;\\n            right: 20px;\\n            border-radius: 10px;\\n            overflow: hidden;\\n            z-index: 999999;\\n            transition: opacity 0.3s ease;\\n            box-shadow:\\n              rgba(0, 0, 0, 0.26) 0px 0.636953px 1.14652px -1.125px, \\n              rgba(0, 0, 0, 0.24) 0px 1.9316px 3.47689px -2.25px, \\n              rgba(0, 0, 0, 0.192) 0px 5.10612px 9.19102px -3.375px, \\n              rgba(0, 0, 0, 0.03) 0px 16px 28.8px -4.5px;\\n            width: 142px;\\n            background: white;\\n          \"\\n          onmouseover=\"this.style.opacity = \\'1\\'\"\\n          onmouseout=\"this.style.opacity = \\'1\\'\"\\n        >\\n          <a \\n            href=\"https://framercommerce.com/?utm_source=framer&utm_medium=badge&utm_campaign=free_tier\" \\n            target=\"_blank\" \\n            style=\"\\n              display: block;\\n              line-height: 0;\\n            \"\\n          >\\n            <img \\n              src=\"https://www.dropbox.com/scl/fi/liuwd84g4nioi6fmu93e1/fc-free-badge.png?rlkey=yearpo3rkxqalq4mtmabujdk4&raw=1\" \\n              alt=\"Framer Commerce\"\\n              width=\"142\"\\n              height=\"36\"\\n              style=\"display: block; width: 100%; height: auto;\"\\n            />\\n          </a>\\n        </div>\\n      `;\\n\\n      // Check if widget already exists\\n      const existingWidget = document.querySelector(\\'[data-framercommerce-widget]\\');\\n      if (!existingWidget) {\\n        widget.setAttribute(\\'data-framercommerce-widget\\', \\'true\\');\\n        document.body.appendChild(widget);\\n      }\\n    };\\n\\n    // If DOM is already loaded\\n    if (document.readyState === \\'complete\\' || document.readyState === \\'interactive\\') {\\n      setTimeout(insertWidget, 1);\\n    } else {\\n      // Wait for DOM to be ready\\n      document.addEventListener(\\'DOMContentLoaded\\', insertWidget);\\n    }\\n\\n    // Backup in case DOMContentLoaded doesn\\'t fire\\n    window.addEventListener(\\'load\\', insertWidget);\\n  }\\n\\n\\n      // Check domain before proceeding with product fetch\\n      if (!validateDomainForFreePlan()) {\\n        window.shopXtools.products = [];\\n        window.shopXtools.status = \"ready\";\\n        window.shopXtools.getProducts = () => null;\\n        console.log(\\'Domain validation failed, products will not be fetched\\');\\n        return;\\n      }\\n\\n      if (!window.shopXtools || !Array.isArray(window.shopXtools.products)) {\\n        fetchProducts().catch(error => {\\n          console.error(\\'Error fetching products:\\', error);\\n          window.shopXtools.status = \"ready\";\\n        });\\n      }\\n    \\n      window.__currencyMap = CURRENCIES;\\n      \\n  document.addEventListener(\\'DOMContentLoaded\\', () => {\\n    // Only initialize Google Analytics if we have a valid ID\\n    if (window.googleAnalyticsId) {\\n      // Insert Google Analytics script\\n      const gaScript = document.createElement(\\'script\\');\\n      gaScript.async = true;\\n      gaScript.src = \\'https://www.googletagmanager.com/gtag/js?id=\\' + window.googleAnalyticsId;\\n      gaScript.onload = () => {\\n        // Initialize gtag\\n        window.dataLayer = window.dataLayer || [];\\n        function gtag() {\\n          window.dataLayer.push(arguments);\\n        }\\n        window.gtag = gtag;\\n        gtag(\\'js\\', new Date());\\n        gtag(\\'config\\', window.googleAnalyticsId);\\n\\n        // Function to send events to Google Analytics\\n        const sendGoogleAnalyticsEvent = (eventCategory, eventAction, eventLabel, eventValue) => {\\n          if (window.gtag) {\\n            window.gtag(\\'event\\', eventAction, {\\n              event_category: eventCategory,\\n              event_label: eventLabel,\\n              value: eventValue,\\n            });\\n          }\\n        };\\n\\n        const trackPageView = () => {\\n          sendGoogleAnalyticsEvent(\\'Page View\\', \\'view\\', window.location.href, null);\\n        };\\n\\n        trackPageView();\\n      };\\n\\n      document.head.appendChild(gaScript);\\n    }\\n  });\\n  \\n\\n    })();\\n  </script>',description:\"Nicole Zisman is an artist and designer based in London. Her eponymous womenswear label introduces the notion that authenticity is the new modernity through a future-glam lens of the designer's Venezuelan Jewish heritage. \",favicon:\"https://framerusercontent.com/assets/4dT49mbUDEvpTTK7BxU7ENL5r4.svg\",robots:\"max-image-preview:large\",socialImage:\"https://framerusercontent.com/assets/dYKO5BqlNjkkDL2d56H34MXxbmA.jpg\",title:\"NICOLE ZISMAN\"};}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,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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAA8kF,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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAA4w7B,YAAY,iOAAiO,QAAQ,sEAAsE,OAAO,0BAA0B,YAAY,uEAAuE,MAAM,eAAe,CAAE",
  "names": ["metadata", "params", "activeLocale"]
}
