{"version":3,"file":"AvoidLayoutJumping_Prod.BbRpVCqy.mjs","names":["getCookie","FC_CART_KEY","w","useState","useRef","w","React.forwardRef","useRef"],"sources":["https:/framerusercontent.com/modules/w24ELWa2giT3SFaWpV77/398w6fPyag8B92ojouQr/utmParams.js","https:/framerusercontent.com/modules/6Zs9CjkPbKzHjoy8LK08/iqoIwmJw4hztafi4V4IV/Fb_pixel.js","https:/framerusercontent.com/modules/4f5GVqnDB7Af3jeiHsBc/U6rkRa9Zwo45f2CwZcdL/SN_FreeShippingGate_CODEXFIX.js","https:/framerusercontent.com/modules/uAYBfcAjjN6dtMD3JBEu/b3HaHBovnf0jfVEYL9qW/acelink_analytics.js","https:/framerusercontent.com/modules/khrJ44CQjRFZjJEHvt4w/oap84OcpA1DhJ1aNHqyK/buYx0d6c1.js","https:/framerusercontent.com/modules/8ZjVRpNI0xJoj7MTqS4r/SWXCopltlNDqILl7e5mz/iLruwR7O8.js","https:/framerusercontent.com/modules/h8ioHyt4BUxuvVCE1Q10/aTM6mEMGlM19JjX8exDe/AvoidLayoutJumping_Prod.js"],"sourcesContent":["// Declare the utmParams property on the global window object\n// Cookie utility functions\nfunction setCookie(name,value,days=30){const date=new Date;date.setTime(date.getTime()+days*24*60*60*1e3);const expires=`expires=${date.toUTCString()}`;// Remove SameSite=Lax and add secure flag if on HTTPS\nconst secure=window.location.protocol===\"https:\"?\";secure\":\"\";document.cookie=`${name}=${value};${expires};path=/${secure}`;}function getCookie(name){const nameEQ=`${name}=`;const ca=document.cookie.split(\";\");for(let i=0;i<ca.length;i++){let c=ca[i];while(c.charAt(0)===\" \")c=c.substring(1);if(c.indexOf(nameEQ)===0)return c.substring(nameEQ.length,c.length);}return null;}function deleteCookie(name){setCookie(name,\"\",-1);}export function getUTMParameters(){const urlParams=new URLSearchParams(window.location.search);const utmParams={};const utmKeys=[\"utm_source\",\"utm_medium\",\"utm_campaign\",\"utm_term\",\"utm_content\"];utmKeys.forEach(key=>{const value=urlParams.get(key);if(value){utmParams[key]=value;}});// Store UTM params in cookies if we have any\nif(Object.keys(utmParams).length>0){try{// Store each UTM parameter as a separate cookie\nObject.entries(utmParams).forEach(([key,value])=>{setCookie(key,value);});// Also store as a single JSON object for Shopify\nsetCookie(\"_shopify_utm\",JSON.stringify(utmParams));window.utmParams=utmParams;}catch(error){console.error(\"Error storing UTM parameters:\",error);}}return utmParams;}export function getSCARefParameters(){const urlParams=new URLSearchParams(window.location.search);const scaRefParams={};const scaRefKeys=[\"sca_ref\",\"sca_source\",\"sca_medium\",\"sca_campaign\",\"sca_term\",\"sca_content\"];scaRefKeys.forEach(key=>{const value=urlParams.get(key);if(value){scaRefParams[key]=value;}});// Store SCA ref params in cookies if we have any\nif(Object.keys(scaRefParams).length>0){try{// Store each SCA ref parameter as a separate cookie\nObject.entries(scaRefParams).forEach(([key,value])=>{setCookie(key,value);});// Also store as a single JSON object for Shopify\nsetCookie(\"_shopify_sca_ref\",JSON.stringify(scaRefParams));window.scaRefParams=scaRefParams;}catch(error){console.error(\"Error storing SCA ref parameters:\",error);}}return scaRefParams;}export function getStoredUTMParameters(){// First try to get from window object (for current session)\nif(window.utmParams&&Object.keys(window.utmParams).length>0){return window.utmParams;}// Then try to get from cookies\ntry{// First try to get from Shopify's format\nconst shopifyUtm=getCookie(\"_shopify_utm\");if(shopifyUtm){try{const parsedParams=JSON.parse(shopifyUtm);window.utmParams=parsedParams;return parsedParams;}catch(e){console.error(\"Error parsing Shopify UTM params:\",e);}}// Fallback to individual cookies\nconst utmParams={};const utmKeys=[\"utm_source\",\"utm_medium\",\"utm_campaign\",\"utm_term\",\"utm_content\"];utmKeys.forEach(key=>{const value=getCookie(key);if(value){utmParams[key]=value;}});if(Object.keys(utmParams).length>0){// Also set on window for easy access\nwindow.utmParams=utmParams;return utmParams;}}catch(error){console.error(\"Error retrieving stored UTM parameters:\",error);}return{};}export function getStoredSCARefParameters(){// First try to get from window object (for current session)\nif(window.scaRefParams&&Object.keys(window.scaRefParams).length>0){return window.scaRefParams;}// Then try to get from cookies\ntry{// First try to get from Shopify's format\nconst shopifyScaRef=getCookie(\"_shopify_sca_ref\");if(shopifyScaRef){try{const parsedParams=JSON.parse(shopifyScaRef);window.scaRefParams=parsedParams;return parsedParams;}catch(e){console.error(\"Error parsing Shopify SCA ref params:\",e);}}// Fallback to individual cookies\nconst scaRefParams={};const scaRefKeys=[\"sca_ref\",\"sca_source\",\"sca_medium\",\"sca_campaign\",\"sca_term\",\"sca_content\"];scaRefKeys.forEach(key=>{const value=getCookie(key);if(value){scaRefParams[key]=value;}});if(Object.keys(scaRefParams).length>0){// Also set on window for easy access\nwindow.scaRefParams=scaRefParams;return scaRefParams;}}catch(error){console.error(\"Error retrieving stored SCA ref parameters:\",error);}return{};}export function appendUTMParamsToUrl(checkoutUrl){if(!checkoutUrl)return checkoutUrl;// Get UTM params from cookies instead of current URL\nconst utmParams=getStoredUTMParameters();// If no stored UTM params, check current URL as fallback\nif(Object.keys(utmParams).length===0){getUTMParameters()// This will store them if present\n;}// Get the (potentially) updated UTM params\nconst finalUtmParams=getStoredUTMParameters();if(Object.keys(finalUtmParams).length>0){try{const url=new URL(checkoutUrl);// Add UTM parameters to the URL\nObject.keys(finalUtmParams).forEach(key=>{// Only append if the parameter doesn't already exist in the URL\nif(!url.searchParams.has(key)){url.searchParams.append(key,finalUtmParams[key]);}});const finalUrl=url.toString();return finalUrl;}catch(error){console.error(\"Error appending UTM params to URL:\",error);return checkoutUrl;}}return checkoutUrl;}export function appendSCARefParamsToUrl(checkoutUrl){if(!checkoutUrl)return checkoutUrl;// Get SCA ref params from cookies instead of current URL\nconst scaRefParams=getStoredSCARefParameters();// If no stored SCA ref params, check current URL as fallback\nif(Object.keys(scaRefParams).length===0){getSCARefParameters()// This will store them if present\n;}// Get the (potentially) updated SCA ref params\nconst finalScaRefParams=getStoredSCARefParameters();if(Object.keys(finalScaRefParams).length>0){try{const url=new URL(checkoutUrl);// Add SCA ref parameters to the URL\nObject.keys(finalScaRefParams).forEach(key=>{// Only append if the parameter doesn't already exist in the URL\nif(!url.searchParams.has(key)){url.searchParams.append(key,finalScaRefParams[key]);}});const finalUrl=url.toString();return finalUrl;}catch(error){console.error(\"Error appending SCA ref params to URL:\",error);return checkoutUrl;}}return checkoutUrl;}/**\n * Validate discount code format\n * Allows alphanumeric characters, hyphens, and underscores\n * Maximum length: 50 characters\n */function validateDiscountCode(code){if(!code||typeof code!==\"string\")return false;// Check length (max 50 characters)\nif(code.length>50)return false;// Check character set: alphanumeric, hyphens, underscores\nconst validPattern=/^[a-zA-Z0-9_-]+$/;return validPattern.test(code);}/**\n * Get discount code from URL and store in session storage\n */export function getDiscountCode(){if(typeof window===\"undefined\"||typeof sessionStorage===\"undefined\"){return null;}try{const urlParams=new URLSearchParams(window.location.search);const discountCode=urlParams.get(\"discount\");if(discountCode){// Validate the discount code\nif(validateDiscountCode(discountCode)){// Store in session storage\nsessionStorage.setItem(\"fc_discount_code\",discountCode);return discountCode;}else{console.warn(\"Invalid discount code format. Only alphanumeric characters, hyphens, and underscores are allowed. Max length: 50 characters.\");return null;}}return null;}catch(error){console.error(\"Error parsing discount code from URL:\",error);return null;}}/**\n * Get stored discount code from session storage\n */export function getStoredDiscountCode(){if(typeof window===\"undefined\"||typeof sessionStorage===\"undefined\"){return null;}try{const storedCode=sessionStorage.getItem(\"fc_discount_code\");// Validate stored code before returning\nif(storedCode&&validateDiscountCode(storedCode)){return storedCode;}// If invalid, remove it\nif(storedCode){sessionStorage.removeItem(\"fc_discount_code\");}return null;}catch(error){console.error(\"Error retrieving stored discount code:\",error);return null;}}/**\n * Append discount code to checkout URL\n */export function appendDiscountCodeToUrl(checkoutUrl){if(!checkoutUrl)return checkoutUrl;const discountCode=getStoredDiscountCode();if(discountCode){try{const url=new URL(checkoutUrl);// Only append if the discount parameter doesn't already exist in the URL\nif(!url.searchParams.has(\"discount\")){url.searchParams.append(\"discount\",discountCode);}const finalUrl=url.toString();return finalUrl;}catch(error){console.error(\"Error appending discount code to URL:\",error);return checkoutUrl;}}return checkoutUrl;}export function appendAllTrackingParamsToUrl(checkoutUrl){if(!checkoutUrl)return checkoutUrl;let finalUrl=checkoutUrl;// Append UTM parameters\nfinalUrl=appendUTMParamsToUrl(finalUrl);// Append SCA ref parameters\nfinalUrl=appendSCARefParamsToUrl(finalUrl);// Append discount code\nfinalUrl=appendDiscountCodeToUrl(finalUrl);return finalUrl;}// Initialize UTM and SCA ref parameters tracking when this module loads\nif(typeof window!==\"undefined\"){// Add a listener for when the DOM is fully loaded\nif(document.readyState===\"complete\"){getUTMParameters()// Document already loaded, capture UTMs now\n;getSCARefParameters()// Document already loaded, capture SCA refs now\n;getDiscountCode()// Document already loaded, capture discount code now\n;}else{window.addEventListener(\"load\",()=>{getUTMParameters();getSCARefParameters();getDiscountCode();});}}\nexport const __FramerMetadata__ = {\"exports\":{\"getSCARefParameters\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"getDiscountCode\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"appendDiscountCodeToUrl\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"getStoredUTMParameters\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"appendSCARefParamsToUrl\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"getUTMParameters\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"getStoredSCARefParameters\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"appendUTMParamsToUrl\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"appendAllTrackingParamsToUrl\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"getStoredDiscountCode\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./utmParams.map","/*\n * Framer Commerce\n * Confidential and Proprietary - All Rights Reserved\n */// Utility function to clean Shopify GID to just the numeric ID\nconst cleanShopifyId=gid=>gid?.split(\"/\").pop()||\"\";/**\n * Check if marketing consent is granted\n * Uses the global FCConsentManager if available\n */const checkMarketingConsent=()=>{if(typeof window!==\"undefined\"&&window.FCConsentManager){const consent=window.FCConsentManager.getConsent();// Check marketing consent from the consent manager\nreturn consent.marketing===true;}// No FCConsentManager = allow tracking (Framer's approach)\n// Pass the GDPR compliance decision to the project owner\nreturn true;};// Standardized Facebook Pixel AddToCart tracking function\nexport const trackFacebookPixelAddToCart=data=>{// Check consent before tracking\nif(!checkMarketingConsent()){// Silently skip tracking - no consent\nreturn;}if(typeof fbq!==\"function\"){console.warn(\"Facebook Pixel not available\");return;}const{variant,product,quantity=1,currency=\"USD\"}=data;if(!variant||!product){console.warn(\"Missing variant or product data for Facebook Pixel tracking\");return;}const item_id=cleanShopifyId(variant.id);const item_name=product.title||\"\";const item_variant=variant.title||\"\";const price=parseFloat(variant.price?.amount||\"0\");const value=price*quantity;const finalCurrency=variant.price?.currencyCode||currency;// Validate required data\nif(!item_id||!item_name||price<=0){console.warn(\"❌ Skipping Facebook Pixel AddToCart: missing required data\",{item_id,item_name,price,value});return;}const fbqData={content_type:\"product\",content_ids:[item_id],content_name:item_name,content_category:product.productType||\"\",content_brand:product.vendor||\"\",value:parseFloat(value.toFixed(2)),currency:finalCurrency,contents:[{id:item_id,price:parseFloat(price.toFixed(2)),quantity:parseInt(quantity.toString())}]};// console.log('[Facebook Pixel] Firing AddToCart', item_id, item_name);\n// console.log('[Facebook Pixel] AddToCart with data:', fbqData);\n// console.log('[Facebook Pixel] AddToCart timestamp:', new Date().toISOString());\nfbq(\"track\",\"AddToCart\",fbqData,{eventID:\"addtocart_\"+Date.now()});};// Standardized Facebook Pixel InitiateCheckout tracking function\nexport const trackFacebookPixelInitiateCheckout=data=>{// Check consent before tracking\nif(!checkMarketingConsent()){// Silently skip tracking - no consent\nreturn;}if(typeof fbq!==\"function\"){console.warn(\"Facebook Pixel not available\");return;}const{variant,product,quantity=1,currency=\"USD\",value:providedValue,content_ids:providedContentIds,content_name:providedContentName,num_items:providedNumItems}=data;let fbqData={content_type:\"product\",currency:currency};// If we have variant and product data, calculate from them\nif(variant&&product){const item_id=cleanShopifyId(variant.id);const item_name=product.title||\"\";const price=parseFloat(variant.price?.amount||\"0\");const calculatedValue=price*quantity;const finalCurrency=variant.price?.currencyCode||currency;// Validate required data\nif(!item_id||!item_name||price<=0){console.warn(\"❌ Skipping Facebook Pixel InitiateCheckout: missing required data\",{item_id,item_name,price,calculatedValue});return;}fbqData={content_type:\"product\",content_ids:[item_id],content_name:item_name,content_category:product.productType||\"\",content_brand:product.vendor||\"\",value:parseFloat(calculatedValue.toFixed(2)),currency:finalCurrency,num_items:parseInt(quantity.toString())};}else if(providedContentIds&&providedValue!==undefined){// Ensure providedValue is a valid number\nconst numericValue=typeof providedValue===\"number\"?providedValue:parseFloat(providedValue)||0;fbqData={content_type:\"product\",content_ids:providedContentIds,content_name:providedContentName||\"Checkout\",value:parseFloat(numericValue.toFixed(2)),currency:currency,num_items:parseInt((providedNumItems||1).toString())};}else{console.warn(\"❌ Skipping Facebook Pixel InitiateCheckout: insufficient data\",data);return;}// console.log('[Facebook Pixel] Firing InitiateCheckout', fbqData.content_ids?.[0], fbqData.content_name);\n// console.log('[Facebook Pixel] InitiateCheckout with data:', fbqData);\n// console.log('[Facebook Pixel] InitiateCheckout timestamp:', new Date().toISOString());\n// Use sendBeacon if requested, otherwise use regular tracking\nconst eventOptions={eventID:\"initiatecheckout_\"+Date.now()};if(data.useBeacon){fbq(\"track\",\"InitiateCheckout\",fbqData,{...eventOptions,transport:\"beacon\"});}else{fbq(\"track\",\"InitiateCheckout\",fbqData,eventOptions);}};// Standardized Facebook Pixel RemoveFromCart tracking function\nexport const trackFacebookPixelRemoveFromCart=data=>{// Check consent before tracking\nif(!checkMarketingConsent()){// Silently skip tracking - no consent\nreturn;}if(typeof fbq!==\"function\"){console.warn(\"Facebook Pixel not available\");return;}const{lineItem,currency=\"USD\"}=data;if(!lineItem){console.warn(\"Missing lineItem data for Facebook Pixel RemoveFromCart tracking\");return;}const item_id=cleanShopifyId(lineItem.merchandise.id);const item_name=lineItem.merchandise.product?.title||\"\";const item_variant=lineItem.merchandise.title||\"\";const price=parseFloat(lineItem.cost.subtotalAmount.amount||\"0\");const quantity=lineItem.quantity||1;const value=price*quantity;const finalCurrency=lineItem.cost.subtotalAmount.currencyCode||currency;// Validate required data\nif(!item_id||!item_name||price<=0){console.warn(\"❌ Skipping Facebook Pixel RemoveFromCart: missing required data\",{item_id,item_name,price,value,quantity});return;}const fbqData={content_type:\"product\",content_ids:[item_id],content_name:item_name,content_category:lineItem.merchandise.product?.productType||\"\",content_brand:lineItem.merchandise.product?.vendor||\"\",value:parseFloat(value.toFixed(2)),currency:finalCurrency,contents:[{id:item_id,price:parseFloat(price.toFixed(2)),quantity:parseInt(quantity.toString())}]};// console.log('[Facebook Pixel] Firing RemoveFromCart with data:', fbqData);\nfbq(\"track\",\"RemoveFromCart\",fbqData,{eventID:\"removefromcart_\"+Date.now()});};// Standardized Facebook Pixel ViewContent tracking function\nexport const trackFacebookPixelViewContent=data=>{// Check consent before tracking\nif(!checkMarketingConsent()){// Silently skip tracking - no consent\nreturn;}if(typeof fbq!==\"function\"){console.warn(\"Facebook Pixel not available\");return;}const{variant,product,currency=\"USD\"}=data;if(!product){console.warn(\"Missing product data for Facebook Pixel ViewContent tracking\");return;}const item_id=variant?cleanShopifyId(variant.id):cleanShopifyId(product.id);const item_name=product.title||\"\";const item_variant=variant?.title||\"\";const price=variant?parseFloat(variant.price?.amount||\"0\"):parseFloat(product.priceRange?.minVariantPrice?.amount||\"0\");const finalCurrency=variant?.price?.currencyCode||product.priceRange?.minVariantPrice?.currencyCode||currency;// Validate required data\nif(!item_id||!item_name||price<=0){console.warn(\"❌ Skipping Facebook Pixel ViewContent: missing required data\",{item_id,item_name,price});return;}const fbqData={content_type:\"product\",content_ids:[item_id],content_name:item_name,content_category:product.productType||\"\",content_brand:product.vendor||\"\",value:parseFloat(price.toFixed(2)),currency:finalCurrency};// console.log('[Facebook Pixel] Firing ViewContent with data:', fbqData);\nfbq(\"track\",\"ViewContent\",fbqData,{eventID:\"viewcontent_\"+Date.now()});};export default function initializeFacebookPixel(facebookPixelId){!function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?n.callMethod.apply(n,arguments):n.queue.push(arguments);};if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version=\"2.0\";n.queue=[];t=b.createElement(e);t.async=!0;t.src=v;// Add onload and onerror event handlers\nt.onload=()=>{if(typeof fbq!==\"undefined\"){fbq(\"init\",facebookPixelId);fbq(\"track\",\"PageView\");}else{// Handle case where fbq is not defined\n}};t.onerror=()=>{// Handle Facebook Pixel script load failure\n};s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s);}(window,document,\"script\",\"https://connect.facebook.net/en_US/fbevents.js\");}\nexport const __FramerMetadata__ = {\"exports\":{\"trackFacebookPixelRemoveFromCart\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"trackFacebookPixelAddToCart\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"trackFacebookPixelViewContent\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"default\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"trackFacebookPixelInitiateCheckout\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Fb_pixel.map","import{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{addPropertyControls,ControlType,RenderTarget}from\"framer\";import{useEffect,useRef,useState,cloneElement,isValidElement}from\"react\";/**\n * SN_FreeShippingGate_CODEXFIX v2.1.0\n *\n * v2.1.0: FIX flicker — the banner repainted twice per tick (cached cart\n *   first, live Storefront second). The cached fallback summed FULL variant\n *   prices (Σ price × qty), ignoring Shopify-Function bundle discounts, so\n *   cache and live could land on opposite sides of the threshold and the\n *   banner flipped locked↔unlocked forever. Now:\n *   - a cached paint is only allowed when the cache carries a real\n *     cost.subtotalAmount (never the Σ price×qty guess), and only BEFORE the\n *     first successful live fetch — after that the live cart is the single\n *     source of truth;\n *   - update bursts are debounced (the same cart event fires on both window\n *     and document) and the polling interval is a slow safety net;\n *   - a live fetch requested mid-flight re-runs once the current one ends,\n *     so the freshest cart state is never skipped.\n *   Default threshold is now 500 (business rule: free shipping from $500).\n * v2.0.0: restored live Storefront re-fetch; logical item counting.\n * v1.x (CODEXFIX): PDP fallback chain — cart > bundle configurator price >\n *   bound product price — plus progress bar and NEW badge.\n */const FC_CART_KEY=\"shopXtools.cart\";const SHOP=\"ace-link-armor.myshopify.com\";const TOKEN=\"0a593db1c8af3044faa3d79170fe3985\";const API=\"2025-01\";const DEFAULT_THRESHOLD=500;const CART_QUERY=`\nquery getCart($cartId: ID!) {\n  cart(id: $cartId) {\n    id\n    cost { subtotalAmount { amount } }\n    lines(first: 100) {\n      edges {\n        node {\n          quantity\n          attributes { key value }\n          merchandise { ... on ProductVariant { price { amount } } }\n        }\n      }\n    }\n  }\n}`;const EMPTY_STATE={subtotal:0,items:0,empty:true};function asNumber(value){if(typeof value===\"number\")return Number.isFinite(value)?value:null;const text=String(value??\"\").trim();if(!text)return null;const n=parseFloat(text.replace(/[^0-9.-]+/g,\"\"));return Number.isFinite(n)?n:null;}function productIdKey(value){const text=String(value??\"\").trim();if(!text)return null;const gid=text.match(/gid:\\/\\/shopify\\/Product\\/([^/?#]+)/);if(gid)return gid[1];const product=text.match(/Product\\/([^/?#]+)/);if(product)return product[1];return text;}function productIdsMatch(boundProductID,eventProductID){const bound=productIdKey(boundProductID);const event=productIdKey(eventProductID);return!!bound&&!!event&&bound===event;}function findCartId(){if(typeof window===\"undefined\")return null;try{const w=window;if(w.shopXtools?.cart?.id)return w.shopXtools.cart.id;}catch{}try{const raw=window.localStorage.getItem(FC_CART_KEY);if(raw){const p=JSON.parse(raw);if(p?.id)return p.id;}}catch{}try{for(const k of Object.keys(window.localStorage)){const v=window.localStorage.getItem(k)||\"\";const m=v.match(/gid:\\/\\/shopify\\/Cart\\/[\\w-]+/);if(m)return m[0];}}catch{}return null;}function countLogicalItems(edges){// Count LOGICAL items: each composite (bundle / vest-with-panels) counts\n// as ONE no matter how many component lines it expands into; standalone\n// lines count their quantity. Matches SN_CartCounter \"logical\" mode.\nlet items=0;const seenComposites=new Set;for(const e of edges){const node=e?.node;if(!node)continue;const attrs=node.attributes||[];const iid=attrs.find(a=>a.key===\"_composite_instance_id\")?.value;const parent=attrs.find(a=>a.key===\"_composite_parent\")?.value;if(iid&&parent){if(!seenComposites.has(iid)){seenComposites.add(iid);items+=1;}}else{items+=node.quantity||0;}}return items;}/**\n * requireSubtotal: cached carts must carry a real cost.subtotalAmount —\n * summing full variant prices would ignore Shopify-Function bundle discounts\n * and disagree with the live subtotal, flipping the banner. Returns null\n * when the state cannot be trusted.\n */function stateFromCart(cart,requireSubtotal){const edges=cart?.lines?.edges||[];if(!edges.length)return EMPTY_STATE;const direct=parseFloat(cart?.cost?.subtotalAmount?.amount??\"\");let subtotal=direct;if(isNaN(subtotal)){if(requireSubtotal)return null;subtotal=0;for(const e of edges){const n=e?.node;subtotal+=parseFloat(n?.merchandise?.price?.amount||\"0\")*(n?.quantity||0);}}return{subtotal,items:countLogicalItems(edges),empty:false};}/** Returns null when the cache holds no trustworthy state (skip the paint). */function readCachedState(){try{if(typeof window===\"undefined\")return EMPTY_STATE;const w=window;const live=w.shopXtools?.cart;if(live?.id&&live?.lines?.edges?.length)return stateFromCart(live,true);const raw=window.localStorage.getItem(FC_CART_KEY);if(raw){const p=JSON.parse(raw);if(p?.lines?.edges?.length)return stateFromCart(p,true);}}catch{}return EMPTY_STATE;}function getBundlePriceFromDetail(detail){return asNumber(detail?.current);}function readBundleAmount(){try{if(typeof window===\"undefined\")return null;const w=window;return asNumber(w.__acelinkBundlePrice?.current)??asNumber(w.__acelinkBundleState?.totalPrice);}catch{}return null;}function getVariantPriceFromDetail(detail){return asNumber(detail?.price?.amount)??asNumber(detail?.priceV2?.amount)??asNumber(detail?.variant?.price?.amount)??asNumber(detail?.variant?.price);}function getProductIdFromDetail(detail){return detail?.productId??detail?.productID??detail?.product?.id??detail?.product?.node?.id??detail?.variant?.product?.id??null;}function formatMoney(amount,currency=\"USD\"){try{return new Intl.NumberFormat(\"en-US\",{style:\"currency\",currency,minimumFractionDigits:2}).format(amount);}catch{return`$${amount.toFixed(2)}`;}}function interpolate(template,vars){let out=template;for(const key of Object.keys(vars)){out=out.replace(new RegExp(`\\\\{${key}\\\\}`,\"g\"),vars[key]);}// Tidy up whitespace left behind by removed tokens (e.g. empty {items}).\nreturn out.replace(/\\s{2,}/g,\" \").trim();}function GiftIcon({size,color}){return /*#__PURE__*/_jsxs(\"svg\",{width:size,height:size,viewBox:\"0 0 24 24\",fill:\"none\",stroke:color,strokeWidth:2,strokeLinecap:\"round\",strokeLinejoin:\"round\",style:{flexShrink:0},children:[/*#__PURE__*/_jsx(\"polyline\",{points:\"20 12 20 22 4 22 4 12\"}),/*#__PURE__*/_jsx(\"rect\",{x:\"2\",y:\"7\",width:\"20\",height:\"5\"}),/*#__PURE__*/_jsx(\"line\",{x1:\"12\",y1:\"22\",x2:\"12\",y2:\"7\"}),/*#__PURE__*/_jsx(\"path\",{d:\"M12 7H7.5a2.5 2.5 0 0 1 0-5C11 2 12 7 12 7z\"}),/*#__PURE__*/_jsx(\"path\",{d:\"M12 7h4.5a2.5 2.5 0 0 0 0-5C13 2 12 7 12 7z\"})]});}/**\n * @framerSupportedLayoutWidth any\n * @framerSupportedLayoutHeight any\n */export default function SN_FreeShippingGate_CODEXFIX(props){const{style,productID,productPrice,threshold,currency,hideWhenEmpty,topBackground,topTextColor,belowTopText,aboveTopText,showNewBadge,newBadgeText,newBadgeBackground,newBadgeTextColor,topFontSize,topFontWeight,topLetterSpacing,topPadding,bottomBackground,bottomTextColor,belowBottomText,aboveBottomText,showGiftIcon,giftIconColor,giftIconSize,bottomFontSize,bottomFontWeight,bottomPadding,showAction,belowActionText,aboveActionText,actionColor,actionFontWeight,showProgressBar,progressHeight,progressTrackColor,progressFillColor,progressFillUnlockedColor,borderRadius,fontFamily,showDebug,bannerDesign}=props;const isCanvas=RenderTarget.current()===RenderTarget.canvas;const boundProductAmount=asNumber(productPrice);const previewAmount=boundProductAmount??asNumber(threshold)??DEFAULT_THRESHOLD;const[amount,setAmount]=useState(isCanvas?previewAmount:boundProductAmount??0);const[items,setItems]=useState(isCanvas?1:0);const[source,setSource]=useState(isCanvas?\"canvas\":boundProductAmount!==null?\"product\":\"none\");const[hasUsableAmount,setHasUsableAmount]=useState(isCanvas||boundProductAmount!==null);const lastProductAmountRef=useRef(boundProductAmount);const lastBundleAmountRef=useRef(null);const seqRef=useRef(0);const fetchingRef=useRef(false);const refetchQueuedRef=useRef(false);const liveSettledRef=useRef(false);useEffect(()=>{lastProductAmountRef.current=boundProductAmount;lastBundleAmountRef.current=null;},[productID,boundProductAmount]);useEffect(()=>{if(typeof window===\"undefined\"||isCanvas)return;liveSettledRef.current=false;const applyFallback=()=>{// No items in the cart — fall back to the latest bundle\n// configurator total, then the bound product price.\nconst bundleAmount=lastBundleAmountRef.current??readBundleAmount();if(bundleAmount!==null){setAmount(bundleAmount);setItems(0);setSource(\"bundle\");setHasUsableAmount(true);return;}if(lastProductAmountRef.current!==null){setAmount(lastProductAmountRef.current);setItems(0);setSource(\"product\");setHasUsableAmount(true);return;}setItems(0);setSource(\"none\");setHasUsableAmount(false);};const applyCartState=s=>{if(!s.empty){setAmount(s.subtotal);setItems(s.items);setSource(\"cart\");setHasUsableAmount(true);}else{applyFallback();}};const refreshLive=async()=>{if(fetchingRef.current){// An event arrived mid-fetch — run once more with the freshest\n// cart as soon as the current request settles.\nrefetchQueuedRef.current=true;return;}const cartId=findCartId();if(!cartId){liveSettledRef.current=true;applyCartState(EMPTY_STATE);return;}fetchingRef.current=true;const seq=++seqRef.current;try{const res=await fetch(`https://${SHOP}/api/${API}/graphql.json`,{method:\"POST\",headers:{\"Content-Type\":\"application/json\",\"X-Shopify-Storefront-Access-Token\":TOKEN},body:JSON.stringify({query:CART_QUERY,variables:{cartId}})});const json=await res.json();if(seq===seqRef.current){const live=json?.data?.cart?stateFromCart(json.data.cart,false):EMPTY_STATE;liveSettledRef.current=true;applyCartState(live??EMPTY_STATE);}}catch{}finally{fetchingRef.current=false;if(refetchQueuedRef.current){refetchQueuedRef.current=false;refreshLive();}}};const update=event=>{const detail=event?.detail;if(event?.type===\"sn-bundle:price\"){const eventBundleAmount=getBundlePriceFromDetail(detail);if(eventBundleAmount!==null)lastBundleAmountRef.current=eventBundleAmount;}else{const eventVariantAmount=getVariantPriceFromDetail(detail);const eventProductID=getProductIdFromDetail(detail);if(eventVariantAmount!==null&&productIdsMatch(productID,eventProductID)){lastProductAmountRef.current=eventVariantAmount;}}// Cache is only good for the very first paint, and only when it\n// carries a real (discount-aware) subtotal. Once the live cart\n// answered, it is the single source of truth — no more cache\n// repaints, so the banner cannot flip between the two sources.\nif(!liveSettledRef.current){const cached=readCachedState();if(cached)applyCartState(cached);}refreshLive();};// The same cart event often fires on both window and document, and\n// user actions fire several events back-to-back — coalesce them.\nlet debounceTimer=null;const scheduleUpdate=event=>{const detail=event?.detail;// Capture price payloads immediately; the debounced update only\n// re-reads state, so nothing is lost by coalescing.\nif(event?.type===\"sn-bundle:price\"){const eventBundleAmount=getBundlePriceFromDetail(detail);if(eventBundleAmount!==null)lastBundleAmountRef.current=eventBundleAmount;}if(debounceTimer!==null)window.clearTimeout(debounceTimer);debounceTimer=window.setTimeout(()=>{debounceTimer=null;update(event);},120);};update();const events=[\"shopXtools:cart:updated\",\"shopXtools:cart:refresh\",\"framer-commerce:cart:refresh\",\"fc:cart:refresh\",\"cartChange\",\"cart:update\",\"sn-bundle:price\",\"sn-bundle:added\",\"product__active-variant__changed\",\"variant_option_selected\",\"__variant_option_selected\",\"data__products-ready\"];for(const name of events){try{document.addEventListener(name,scheduleUpdate);}catch{}try{window.addEventListener(name,scheduleUpdate);}catch{}}try{window.addEventListener(\"storage\",scheduleUpdate);}catch{}// Slow safety net — real updates arrive via cart events above.\nconst interval=window.setInterval(update,4e3);return()=>{seqRef.current++;if(debounceTimer!==null)window.clearTimeout(debounceTimer);for(const name of events){try{document.removeEventListener(name,scheduleUpdate);}catch{}try{window.removeEventListener(name,scheduleUpdate);}catch{}}try{window.removeEventListener(\"storage\",scheduleUpdate);}catch{}window.clearInterval(interval);};},[isCanvas,productID,boundProductAmount]);const cur=currency||\"USD\";const t=parseFloat(String(threshold??DEFAULT_THRESHOLD))||DEFAULT_THRESHOLD;const isUnlocked=hasUsableAmount&&amount>=t;const remaining=Math.max(0,t-amount);const bonus=Math.max(0,amount-t);const progress=t>0?Math.min(1,amount/t):0;// Only show the items count when the amount actually comes from the cart;\n// on product/bundle previews the token disappears cleanly.\nconst itemsLabel=source===\"cart\"||isCanvas?`(${items} ${items===1?\"item\":\"items\"})`:\"\";if(!isCanvas&&hideWhenEmpty&&!hasUsableAmount)return null;const tokens={remaining:formatMoney(remaining,cur),subtotal:formatMoney(amount,cur),threshold:formatMoney(t,cur),bonus:formatMoney(bonus,cur),progressPct:`${Math.round(progress*100)}%`,items:itemsLabel};const topText=interpolate((isUnlocked?aboveTopText:belowTopText)||\"\",tokens);const bottomText=interpolate((isUnlocked?aboveBottomText:belowBottomText)||\"\",tokens);const actionText=interpolate((isUnlocked?aboveActionText:belowActionText)||\"\",tokens);const wrapperStyle={...style,display:\"flex\",flexDirection:\"column\",overflow:\"hidden\",borderRadius:typeof borderRadius===\"number\"?borderRadius:0,fontFamily:fontFamily||\"'TASA Orbiter', sans-serif\",width:\"100%\",boxSizing:\"border-box\"};if(/*#__PURE__*/isValidElement(bannerDesign)){return /*#__PURE__*/cloneElement(bannerDesign,{...bannerDesign.props||{},remaining:tokens.remaining,subtotal:tokens.subtotal,threshold:tokens.threshold,progressPct:tokens.progressPct,progress,isUnlocked,empty:!hasUsableAmount,items});}return /*#__PURE__*/_jsxs(\"div\",{style:wrapperStyle,children:[showDebug&&/*#__PURE__*/_jsxs(\"div\",{style:{padding:\"4px 8px\",background:\"#1a1a2e\",color:\"#0f0\",fontSize:10,fontFamily:\"monospace\"},children:[\"source=\",source,\" amount=\",amount.toFixed(2),\" threshold=\",t,\" unlocked=\",String(isUnlocked),\" remaining=\",remaining.toFixed(2),\" items=\",items,\" progress=\",Math.round(progress*100),\"%\"]}),/*#__PURE__*/_jsxs(\"div\",{style:{background:topBackground||\"#000000\",color:topTextColor||\"#FFFFFF\",padding:topPadding||\"10px 14px\",display:\"flex\",alignItems:\"center\",gap:10,fontSize:typeof topFontSize===\"number\"?topFontSize:12,fontWeight:typeof topFontWeight===\"number\"?topFontWeight:700,letterSpacing:topLetterSpacing||\"0.05em\",textTransform:\"uppercase\"},children:[showNewBadge&&/*#__PURE__*/_jsx(\"span\",{style:{background:newBadgeBackground||\"#E11D48\",color:newBadgeTextColor||\"#FFFFFF\",padding:\"2px 8px\",borderRadius:999,fontSize:9,fontWeight:800,letterSpacing:\"0.05em\",flexShrink:0},children:newBadgeText||\"NEW\"}),/*#__PURE__*/_jsx(\"span\",{style:{flex:1,minWidth:0},children:topText})]}),/*#__PURE__*/_jsxs(\"div\",{style:{background:bottomBackground||\"#F5F5F5\",color:bottomTextColor||\"#262626\",padding:bottomPadding||\"10px 14px\",display:\"flex\",alignItems:\"center\",gap:10,fontSize:typeof bottomFontSize===\"number\"?bottomFontSize:12,fontWeight:typeof bottomFontWeight===\"number\"?bottomFontWeight:500},children:[showGiftIcon&&/*#__PURE__*/_jsx(GiftIcon,{size:typeof giftIconSize===\"number\"?giftIconSize:18,color:giftIconColor||bottomTextColor||\"#262626\"}),/*#__PURE__*/_jsx(\"span\",{style:{flex:1,minWidth:0},children:bottomText}),showAction&&actionText&&/*#__PURE__*/_jsx(\"span\",{style:{color:actionColor||bottomTextColor||\"#262626\",fontWeight:typeof actionFontWeight===\"number\"?actionFontWeight:800,fontSize:typeof bottomFontSize===\"number\"?bottomFontSize:12,letterSpacing:\"0.05em\",textTransform:\"uppercase\",flexShrink:0},children:actionText})]}),showProgressBar&&/*#__PURE__*/_jsx(\"div\",{style:{width:\"100%\",height:typeof progressHeight===\"number\"?progressHeight:6,background:progressTrackColor||\"#E5E5E5\",overflow:\"hidden\"},children:/*#__PURE__*/_jsx(\"div\",{style:{width:`${Math.round(progress*100)}%`,height:\"100%\",background:isUnlocked?progressFillUnlockedColor||progressFillColor||\"#16a34a\":progressFillColor||\"#000000\",transition:\"width 0.3s ease\"}})})]});}SN_FreeShippingGate_CODEXFIX.defaultProps={productID:\"\",productPrice:\"\",threshold:500,currency:\"USD\",hideWhenEmpty:true,topBackground:\"#000000\",topTextColor:\"#FFFFFF\",belowTopText:\"ALMOST THERE - {remaining} TO GO\",aboveTopText:\"FREE SHIPPING UNLOCKED\",showNewBadge:true,newBadgeText:\"NEW\",newBadgeBackground:\"#E11D48\",newBadgeTextColor:\"#FFFFFF\",topFontSize:12,topFontWeight:700,topLetterSpacing:\"0.05em\",topPadding:\"10px 14px\",bottomBackground:\"#F5F5F5\",bottomTextColor:\"#262626\",belowBottomText:\"Add {remaining} more for free shipping\",aboveBottomText:\"This order is eligible for Free Shipping  {items}\",showGiftIcon:true,giftIconColor:\"\",giftIconSize:18,bottomFontSize:12,bottomFontWeight:500,bottomPadding:\"10px 14px\",showAction:false,belowActionText:\"{progressPct}\",aboveActionText:\"FREE\",actionColor:\"\",actionFontWeight:800,showProgressBar:true,progressHeight:6,progressTrackColor:\"#E5E5E5\",progressFillColor:\"#000000\",progressFillUnlockedColor:\"\",borderRadius:0,fontFamily:\"'TASA Orbiter', sans-serif\",showDebug:false,bannerDesign:null};addPropertyControls(SN_FreeShippingGate_CODEXFIX,{bannerDesign:{type:ControlType.ComponentInstance,title:\"Banner Design\",description:\"Opcjonalnie. Wlasny komponent Framer. Variables: remaining, subtotal, threshold, progressPct, progress, isUnlocked, empty, items. Puste = wbudowany banner.\"},productID:{type:ControlType.String,title:\"Product ID\",defaultValue:\"\",description:\"Bind to the Framer Commerce CMS Product ID field.\"},productPrice:{type:ControlType.String,title:\"Product Price\",defaultValue:\"\",description:\"Bind to the Framer Commerce CMS Price field. Used as PDP fallback and canvas preview.\"},threshold:{type:ControlType.Number,title:\"Threshold\",defaultValue:500,min:0,step:10,description:\"Free shipping threshold in cart currency.\"},currency:{type:ControlType.String,title:\"Currency\",defaultValue:\"USD\"},hideWhenEmpty:{type:ControlType.Boolean,title:\"Hide When Empty\",defaultValue:true},topBackground:{type:ControlType.Color,title:\"Top - Background\",defaultValue:\"#000000\"},topTextColor:{type:ControlType.Color,title:\"Top - Text Color\",defaultValue:\"#FFFFFF\"},belowTopText:{type:ControlType.String,title:\"Top - Below Text\",defaultValue:\"ALMOST THERE - {remaining} TO GO\",description:\"Tokens: {remaining}, {subtotal}, {threshold}, {progressPct}\"},aboveTopText:{type:ControlType.String,title:\"Top - Above Text\",defaultValue:\"FREE SHIPPING UNLOCKED\"},topFontSize:{type:ControlType.Number,title:\"Top - Font Size\",defaultValue:12,min:8,max:24,step:1},topFontWeight:{type:ControlType.Number,title:\"Top - Font Weight\",defaultValue:700,min:100,max:900,step:100},topLetterSpacing:{type:ControlType.String,title:\"Top - Letter Spacing\",defaultValue:\"0.05em\"},topPadding:{type:ControlType.String,title:\"Top - Padding\",defaultValue:\"10px 14px\"},showNewBadge:{type:ControlType.Boolean,title:\"Show NEW Badge\",defaultValue:true},newBadgeText:{type:ControlType.String,title:\"Badge - Text\",defaultValue:\"NEW\",hidden:p=>!p.showNewBadge},newBadgeBackground:{type:ControlType.Color,title:\"Badge - Background\",defaultValue:\"#E11D48\",hidden:p=>!p.showNewBadge},newBadgeTextColor:{type:ControlType.Color,title:\"Badge - Text Color\",defaultValue:\"#FFFFFF\",hidden:p=>!p.showNewBadge},bottomBackground:{type:ControlType.Color,title:\"Bottom - Background\",defaultValue:\"#F5F5F5\"},bottomTextColor:{type:ControlType.Color,title:\"Bottom - Text Color\",defaultValue:\"#262626\"},belowBottomText:{type:ControlType.String,title:\"Bottom - Below Text\",defaultValue:\"Add {remaining} more for free shipping\",description:\"Tokens: {remaining}, {subtotal}, {threshold}, {items}\"},aboveBottomText:{type:ControlType.String,title:\"Bottom - Above Text\",defaultValue:\"This order is eligible for Free Shipping  {items}\"},bottomFontSize:{type:ControlType.Number,title:\"Bottom - Font Size\",defaultValue:12,min:8,max:24,step:1},bottomFontWeight:{type:ControlType.Number,title:\"Bottom - Font Weight\",defaultValue:500,min:100,max:900,step:100},bottomPadding:{type:ControlType.String,title:\"Bottom - Padding\",defaultValue:\"10px 14px\"},showGiftIcon:{type:ControlType.Boolean,title:\"Show Gift Icon\",defaultValue:true},giftIconColor:{type:ControlType.Color,title:\"Icon - Color\",defaultValue:\"\",description:\"Empty = same as Bottom Text Color.\",hidden:p=>!p.showGiftIcon},giftIconSize:{type:ControlType.Number,title:\"Icon - Size\",defaultValue:18,min:10,max:48,step:1,hidden:p=>!p.showGiftIcon},showAction:{type:ControlType.Boolean,title:\"Show % Label\",defaultValue:false,description:\"Right-side % text. Off by default now that there's a progress bar.\"},belowActionText:{type:ControlType.String,title:\"Action - Below Text\",defaultValue:\"{progressPct}\",description:\"Right-side label below threshold. Tokens supported.\",hidden:p=>!p.showAction},aboveActionText:{type:ControlType.String,title:\"Action - Above Text\",defaultValue:\"FREE\",hidden:p=>!p.showAction},actionColor:{type:ControlType.Color,title:\"Action - Color\",defaultValue:\"\",description:\"Empty = same as Bottom Text Color.\",hidden:p=>!p.showAction},actionFontWeight:{type:ControlType.Number,title:\"Action - Font Weight\",defaultValue:800,min:100,max:900,step:100,hidden:p=>!p.showAction},showProgressBar:{type:ControlType.Boolean,title:\"Show Progress Bar\",defaultValue:true,description:\"Visual fill bar (clearer than the % number).\"},progressHeight:{type:ControlType.Number,title:\"Bar - Height\",defaultValue:6,min:2,max:24,step:1,hidden:p=>!p.showProgressBar},progressTrackColor:{type:ControlType.Color,title:\"Bar - Track\",defaultValue:\"#E5E5E5\",hidden:p=>!p.showProgressBar},progressFillColor:{type:ControlType.Color,title:\"Bar - Fill\",defaultValue:\"#000000\",hidden:p=>!p.showProgressBar},progressFillUnlockedColor:{type:ControlType.Color,title:\"Bar - Fill (Unlocked)\",defaultValue:\"\",description:\"Empty = same as Fill.\",hidden:p=>!p.showProgressBar},borderRadius:{type:ControlType.Number,title:\"Border Radius\",defaultValue:0,min:0,max:64,step:1},fontFamily:{type:ControlType.String,title:\"Font Family\",defaultValue:\"'TASA Orbiter', sans-serif\"},showDebug:{type:ControlType.Boolean,title:\"Show Debug\",defaultValue:false}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"SN_FreeShippingGate_CODEXFIX\",\"slots\":[],\"annotations\":{\"framerSupportedLayoutWidth\":\"any\",\"framerContractVersion\":\"1\",\"framerSupportedLayoutHeight\":\"any\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./SN_FreeShippingGate_CODEXFIX.map","// acelink-analytics.ts — Framer code file (shared module)\n//\n// Warstwa zdarzeń dla storefrontu Framer: reprodukuje dataLayer GTM4WP,\n// który konsumuje istniejący kontener web GTM-NMTFJWRT (bez edycji tagów).\n// Kontrakt kluczy: .scratch/gtm-migration/web-container-audit.md w repo\n// acelink-bundle-app. Kontrakt tożsamości (cart attributes _fbp/_fbc/_gclid/\n// _vid/_ga_cid) musi być spójny z Web Pixelem (extensions/analytics-pixel).\n//\n// Użycie w komponentach SN2 (import z code file):\n//   import {\n//     trackViewItem, trackViewItemList, trackSelectItem, trackViewCart,\n//     trackAddToCart, trackRemoveFromCart, beginCheckout, toItem,\n//   } from \"./acelink-analytics\"\n//\n//   // PDP (raz na produkt/wariant — useEffect z kluczem po id):\n//   trackViewItem([toItem(product, variant)])\n//   // Add to cart:\n//   trackAddToCart([toItem(product, variant, qty)])\n//   // Przycisk checkout (stash tożsamości + push + redirect):\n//   beginCheckout(cart.id, cart.checkoutUrl, items, total, \"USD\")\nimport{RenderTarget}from\"framer\";// ── Konfiguracja ─────────────────────────────────────────────────────────────\nconst SHOPIFY_DOMAIN=\"1ryn0a-5t.myshopify.com\";const STOREFRONT_TOKEN=\"0a593db1c8af3044faa3d79170fe3985\"// public, client-safe\n;const STOREFRONT_API_VERSION=\"2026-01\";const GA4_MEASUREMENT_ID=\"G-QT4DFKM8WY\";const VISITOR_ID_KEY=\"acelink_vid\";const GCLID_KEY=\"acelink_gclid\";const WBRAID_KEY=\"acelink_wbraid\";const GBRAID_KEY=\"acelink_gbraid\";const SRC_KEY=\"acelink_src\";// ── Guard: nie trackujemy w edytorze Framera ────────────────────────────────\nfunction isLive(){if(typeof window===\"undefined\")return false;try{if(RenderTarget.current()===RenderTarget.canvas)return false;}catch{/* poza Framerem — traktuj jako live */}return true;}function dl(){window.dataLayer=window.dataLayer||[];return window.dataLayer;}// ── Tożsamość: visitorId + gclid + cookies ──────────────────────────────────\nfunction mintUuid(){try{return crypto.randomUUID();}catch{return`${Date.now()}-${Math.random().toString(36).slice(2,12)}`;}}export function getVisitorId(){if(typeof window===\"undefined\")return\"\";try{let vid=localStorage.getItem(VISITOR_ID_KEY);if(!vid){vid=mintUuid();localStorage.setItem(VISITOR_ID_KEY,vid);}return vid;}catch{return\"\";}}function getCookie(name){if(typeof document===\"undefined\")return\"\";const match=document.cookie.match(new RegExp(\"(?:^|;\\\\s*)\"+name+\"=([^;]*)\"));return match?decodeURIComponent(match[1]):\"\";}/** GA client_id z cookie _ga (GA1.1.111.222 → 111.222). */function getGaClientId(){const match=getCookie(\"_ga\").match(/GA\\d+\\.\\d+\\.(.+)/);return match?match[1]:\"\";}/**\n * GA session_id/session_number z cookie `_ga_<ID>`; toleruje GS1 i GS2.\n * Parsowanie MUSI być zgodne z resolveSession() w extensions/analytics-pixel.\n *\n * Po co: hit purchase bez `sid` zakłada w GA4 NOWĄ sesję bez źródła, więc\n * sprzedaż ląduje w kanale „Unassigned\" (od cutoveru 15.07 — 100% zakupów).\n * Checkout stoi na innym originie niż storefront, więc konsumenci nie zawsze\n * doczytają cookie sami — stashujemy id sesji na koszyku, tak jak _ga_cid.\n */function getGaSession(){const raw=getCookie(`_ga_${GA4_MEASUREMENT_ID.replace(/^G-/,\"\")}`);if(!raw)return{sid:\"\",sct:\"\"};const gs2=raw.match(/\\bs(\\d{8,})/);if(gs2){const count=raw.match(/\\$o(\\d+)/);return{sid:gs2[1],sct:count?count[1]:\"\"};}const parts=raw.split(\".\");if(parts.length>=4&&/^\\d{8,}$/.test(parts[2])){return{sid:parts[2],sct:parts[3]||\"\"};}return{sid:\"\",sct:\"\"};}/** Złap gclid/wbraid/gbraid z URL wejściowego i utrwal (do stashu na checkout). */function captureGclid(){try{const params=new URLSearchParams(window.location.search);// Osobne klucze per typ identyfikatora — tag konwersji Google Ads w sGTM\n// czyta gclid/wbraid/gbraid jako RÓŻNE pola. (Do 2026-07-20 wbraid/gbraid\n// lądowały pod _gclid — Ads odrzucał je jako malformed gclid.)\nconst gclid=params.get(\"gclid\");const wbraid=params.get(\"wbraid\");const gbraid=params.get(\"gbraid\");if(gclid)localStorage.setItem(GCLID_KEY,gclid);if(wbraid)localStorage.setItem(WBRAID_KEY,wbraid);if(gbraid)localStorage.setItem(GBRAID_KEY,gbraid);}catch{/* ignore */}}/**\n * Złap ŹRÓDŁO RUCHU wejścia i utrwal (do stashu na checkout).\n *\n * Po co: samo `_ga_sid` nie wystarcza. Hity z checkoutu potrafią utworzyć w GA4\n * osobną sesję (stary stash, nieczytelne cookie, brak zgody) — a taka sesja nie\n * ma ŻADNEGO źródła, więc zakup ląduje w `(not set)` = kanał „Unassigned\".\n * Zmierzone 10-13.08: 14/25 zakupów ($4 149) w `(not set)`. Dlatego przenosimy\n * źródło jawnie, zamiast liczyć na sklejenie sesji po `sid`.\n *\n * Reguły odwzorowują domyślne GA4 (utm → gclid → referrer), żeby kanał wyszedł\n * ten sam co dla ruchu, który dojechał normalną ścieżką.\n */function captureTrafficSource(){try{const params=new URLSearchParams(window.location.search);const utmSource=params.get(\"utm_source\");let source=\"\";let medium=\"\";let campaign=params.get(\"utm_campaign\")||\"\";if(utmSource){source=utmSource;medium=params.get(\"utm_medium\")||\"\";}else if(params.get(\"gclid\")||params.get(\"gbraid\")||params.get(\"wbraid\")){source=\"google\";medium=\"cpc\";}else{const ref=document.referrer;if(ref){const host=new URL(ref).hostname;// Wewnętrzne przejścia (w tym storefront → checkout) NIE są\n// źródłem — inaczej zrobilibyśmy sobie self-referral.\nif(host&&!/(^|\\.)acelinkarmor\\.com$/.test(host)){source=host;medium=\"referral\";}}}// Brak źródła = wejście bezpośrednie. NIE nadpisujemy poprzedniego —\n// to jest dokładnie reguła „last non-direct\" z GA4.\nif(!source)return;localStorage.setItem(SRC_KEY,JSON.stringify({s:source,m:medium,c:campaign,ts:Math.floor(Date.now()/1e3)}));}catch{/* ignore */}}/**\n * Bootstrap: gclid / źródło ruchu + visitorId do dataLayer. Idempotentny.\n * visitorId (GA4 user_id, Meta external_id) trafia do dataLayer TYLKO przy zgodzie\n * na statystyki — bez niej GA4 wysyłało go w pingach cookieless jako `uid`\n * (uwaga klienta 9.10, Asana 1219358327442287 pkt 6). Normalnie robi to warstwa\n * zgód w head-start; tu jest pas bezpieczeństwa dla hostów bez niej.\n */export function bootAnalytics(){if(!isLive())return;captureGclid();captureTrafficSource();const vid=getVisitorId();if(vid&&hasAnalyticsConsent()&&!dl().some(row=>\"visitorId\"in row)){dl().push({visitorId:vid});}}/** Zgoda na statystyki wg kontraktu `acelink_consent` (GPC = brak zgody). */function hasAnalyticsConsent(){try{if(navigator.globalPrivacyControl===true)return false;const raw=localStorage.getItem(\"acelink_consent\");if(!raw)return false;return JSON.parse(raw).analytics===true;}catch{return false;}}const gidDigits=gid=>String(gid??\"\").replace(/\\D+/g,\"\");/**\n * Mapper z obiektów Storefront API (product + wybrany wariant) na item.\n * Dla bundli: podawaj SKU bundla jako pojedynczy item (tak raportuje zakup Shopify).\n */export function toItem(product,variant,quantity=1,index){const sku=variant?.sku||\"\";const id=sku||gidDigits(variant?.id)||gidDigits(product?.id);const rawPrice=typeof variant?.price===\"object\"?variant?.price?.amount:variant?.price;const price=Number(rawPrice);return{id,item_id:id,item_name:product?.title||\"\",item_brand:product?.vendor||undefined,item_category:product?.productType||undefined,item_variant:variant?.title&&variant.title!==\"Default Title\"?variant.title:undefined,sku:sku||undefined,price:Number.isFinite(price)?price:0,quantity,index};}function sumValue(items){return Math.round(items.reduce((acc,it)=>acc+it.price*(it.quantity||1),0)*100)/100;}export function track(event,items,opts={}){if(!isLive()||!items.length)return;bootAnalytics();dl().push({ecommerce:null})// reset (standard GA4)\n;dl().push({event,ecommerce:{currency:opts.currency||\"USD\",value:opts.value??sumValue(items),...opts.item_list_name?{item_list_name:opts.item_list_name}:{},items}});}export const trackViewItem=(items,currency)=>track(\"view_item\",items,{currency});export const trackViewItemList=(items,listName,currency)=>track(\"view_item_list\",items,{item_list_name:listName,currency});export const trackSelectItem=(items,currency)=>track(\"select_item\",items,{currency});export const trackViewCart=(items,value,currency)=>track(\"view_cart\",items,{value,currency});export const trackAddToCart=(items,currency)=>{registerExplicitDelta(1,items);track(\"add_to_cart\",items,{currency});};export const trackRemoveFromCart=(items,currency)=>{registerExplicitDelta(-1,items);track(\"remove_from_cart\",items,{currency});};// ── Most tożsamości: stash do cart attributes przed checkoutem ──────────────\nasync function storefrontFetch(query,variables){const res=await fetch(`https://${SHOPIFY_DOMAIN}/api/${STOREFRONT_API_VERSION}/graphql.json`,{method:\"POST\",headers:{\"Content-Type\":\"application/json\",\"X-Shopify-Storefront-Access-Token\":STOREFRONT_TOKEN},body:JSON.stringify({query,variables})});return res.json();}/** Pary tożsamości do przekazania na checkout (czyta Web Pixel + webhook backstop). *//**\n * Źródło ruchu do stashu — TYLKO jeśli pochodzi z BIEŻĄCEJ sesji GA4.\n *\n * `_ga_sid` to epoch startu sesji, więc porównanie ze znacznikiem zapisu mówi\n * wprost, czy złapane źródło należy do tej samej sesji, którą sklejamy.\n * Bez tej bramki zamienialibyśmy dzisiejszą wizytę bezpośrednią na kampanię\n * sprzed tygodnia — a raport, który czyta klient, jest session-scoped.\n * Gdy sesji nie znamy (brak `sid`), i tak jesteśmy osieroceni → wysyłamy.\n */function campaignAttributes(sid){try{const raw=safeGet(SRC_KEY);if(!raw)return[];const src=JSON.parse(raw);if(!src?.s)return[];if(sid){const started=Number(sid);// 120 s luzu na wyścig między zapisem cookie GA4 a naszym localStorage.\nif(Number.isFinite(started)&&Number(src.ts||0)<started-120){return[];}}return[[\"_ga_src\",src.s],[\"_ga_med\",src.m||\"\"],[\"_ga_cmp\",src.c||\"\"]];}catch{return[];}}// ── Zgoda (CIPA, Asana 1219237809727168) ─────────────────────────────────────\n// Baner = Cookiebot. Warstwa zgód w head-start (framer/custom-code/head-start.html)\n// publikuje odpowiedź odwiedzającego pod neutralnym kluczem `acelink_consent`\n// ({analytics, marketing, preferences, src, ts}) — tagger NIE zna Cookiebota,\n// czyta tylko ten kontrakt. Stan jedzie na koszyk jako atrybuty, bo webhook\n// orders/paid (backstop sGTM → GA4/Ads/Meta/TikTok) nie widzi przeglądarki —\n// czyta je app/lib/consent.server.ts. Brak klucza = brak decyzji (nie „zgoda”).\n// Global Privacy Control bez odpowiedzi = odmowa (Cookiebot honoruje GPC sam\n// tam, gdzie prawo tego wymaga; to jest pas bezpieczeństwa dla reszty).\nconst CONSENT_KEY=\"acelink_consent\";export function consentAttributes(){let gpc=false;try{gpc=navigator.globalPrivacyControl===true;}catch{/* brak navigatora = brak sygnału */}const yn=v=>v?\"yes\":\"no\";const raw=safeGet(CONSENT_KEY);if(raw){try{const c=JSON.parse(raw);const analytics=c.analytics===true&&!gpc;const marketing=c.marketing===true&&!gpc;return[[\"_consent_analytics\",yn(analytics)],[\"_consent_marketing\",yn(marketing)],[\"_consent_src\",gpc?\"gpc\":typeof c.src===\"string\"&&c.src?c.src:\"banner\"]];}catch{/* zepsuty zapis = traktuj jak brak */}}if(gpc){return[[\"_consent_analytics\",\"no\"],[\"_consent_marketing\",\"no\"],[\"_consent_src\",\"gpc\"]];}return[];}export function identityAttributes(){const session=getGaSession();const pairs=[...consentAttributes(),...campaignAttributes(session.sid),[\"_fbp\",getCookie(\"_fbp\")],[\"_fbc\",getCookie(\"_fbc\")],[\"_gclid\",safeGet(GCLID_KEY)],[\"_wbraid\",safeGet(WBRAID_KEY)],[\"_gbraid\",safeGet(GBRAID_KEY)],[\"_vid\",getVisitorId()],[\"_ga_cid\",getGaClientId()],// Sesja GA4 — bez niej purchase = nowa sesja = kanał „Unassigned\".\n// Stash leci przy view_cart/add_to_cart, więc id jest z tej samej\n// sesji, w której użytkownik klika checkout.\n[\"_ga_sid\",session.sid],[\"_ga_sct\",session.sct]];return pairs.filter(([,value])=>Boolean(value)).map(([key,value])=>({key,value}));}function safeGet(key){try{return localStorage.getItem(key)||\"\";}catch{return\"\";}}/**\n * Stash tożsamości na koszyku — MERGE z istniejącymi atrybutami\n * (koszyk może nieść atrybuty bundli; cartAttributesUpdate nadpisuje CAŁĄ listę).\n */export async function stashIdentityOnCart(cartId){if(!isLive()||!cartId)return;const identity=identityAttributes();if(!identity.length)return;try{const current=await storefrontFetch(`query CartAttrs($cartId: ID!) { cart(id: $cartId) { id attributes { key value } } }`,{cartId});const existing=current?.data?.cart?.attributes||[];const merged=new Map;for(const attr of existing)merged.set(attr.key,attr.value);for(const attr of identity)merged.set(attr.key,attr.value);await storefrontFetch(`mutation StashIdentity($cartId: ID!, $attributes: [AttributeInput!]!) {\n                cartAttributesUpdate(cartId: $cartId, attributes: $attributes) {\n                    cart { id }\n                    userErrors { field message }\n                }\n            }`,{cartId,attributes:Array.from(merged,([key,value])=>({key,value}))});}catch{/* stash jest best-effort — nie blokuje checkoutu */}}/**\n * Przycisk „Checkout\": push begin_checkout + stash tożsamości + redirect.\n * Stash MUSI zdążyć przed nawigacją, stąd await przed redirectem.\n */export async function beginCheckout(cartId,checkoutUrl,items,value,currency){if(!isLive())return;track(\"begin_checkout\",items,{value,currency});// Domknij notki backorderowe zanim koszyk pojedzie na checkout (race:\n// add backorderu → natychmiastowy klik Checkout, zanim tagger zdążył).\nawait Promise.all([stashIdentityOnCart(cartId),ensureBackorderLineProperties(true)]);window.location.href=checkoutUrl;}// ── Cart-diff watcher: add/remove dla NATYWNYCH przycisków Framer Commerce ──\n//\n// Konfiguratory bundli/vestów trackują jawnie (i ich linie zawsze niosą\n// _composite_instance_id — watcher je IGNORUJE). Natywne przyciski FC\n// (zwykłe produkty, PDP) to nieedytowalne ExternalModuleNode — zamiast\n// instrumentować klik, obserwujemy koszyk (shopXtools.cart + eventy FC,\n// ten sam mechanizm co monitor w SN2_CartView) i emitujemy add_to_cart /\n// remove_from_cart z delty ilości linii NIE-composite.\n//\n// Dedup: jawne trackAddToCart/trackRemoveFromCart rejestrują wpis\n// (registerExplicitDelta); watcher przed emisją (opóźnioną o EMIT_DELAY_MS)\n// konsumuje pasujący wpis i milczy — drawer (SN2_CartView) może dalej\n// trackować jawnie bez podwójnego liczenia.\n//\n// Guardy: zmiana cart.id / brak koszyka / zmiana >BULK_CHANGE_LIMIT wariantów\n// naraz (powrót z checkoutu, flush) = ciche przebazowanie; ukryta karta\n// (visibilityState=hidden) nie emituje (drugi tab widzi deltę przez storage).\nconst FC_CART_KEY=\"shopXtools.cart\";const WATCHER_FLAG=\"__acelinkCartWatcher\";const EXPLICIT_TTL_MS=2e4;const EMIT_DELAY_MS=900;const BULK_CHANGE_LIMIT=2;const WATCHER_POLL_MS=1500;const explicitDeltas=[];function itemKeys(item){return[item.id,item.sku,item.item_id].map(k=>String(k??\"\").trim()).filter(Boolean);}function registerExplicitDelta(sign,items){const now=Date.now();for(const item of items){const keys=itemKeys(item);if(keys.length)explicitDeltas.push({keys,sign,ts:now});}// przytnij przeterminowane\nfor(let i=explicitDeltas.length-1;i>=0;i--){if(now-explicitDeltas[i].ts>EXPLICIT_TTL_MS)explicitDeltas.splice(i,1);}}function consumeExplicitDelta(keys,sign){const now=Date.now();for(let i=0;i<explicitDeltas.length;i++){const entry=explicitDeltas[i];if(now-entry.ts>EXPLICIT_TTL_MS)continue;if(entry.sign!==sign)continue;if(!entry.keys.some(k=>keys.includes(k)))continue;explicitDeltas.splice(i,1);return true;}return false;}function readFcCart(){try{const live=window.shopXtools?.cart;if(live&&Array.isArray(live?.lines?.edges))return live;}catch{/* ignore */}try{const raw=localStorage.getItem(FC_CART_KEY);if(!raw)return null;const parsed=JSON.parse(raw);return Array.isArray(parsed?.lines?.edges)?parsed:null;}catch{return null;}}function isCompositeLine(line){return(line?.attributes||[]).some(attr=>attr?.key===\"_composite_instance_id\");}function snapshotStandaloneLines(cart){const map=new Map;for(const edge of cart?.lines?.edges||[]){const line=edge?.node;if(!line||isCompositeLine(line))continue;const key=gidDigits(line.merchandise?.id);if(!key)continue;const prev=map.get(key);map.set(key,{qty:(prev?.qty||0)+Math.max(0,line.quantity||0),line});}return map;}function watcherLineKeys(line,gidKey){const keys=[gidKey];const sku=String(line?.merchandise?.sku??\"\").trim();if(sku)keys.push(sku);return keys;}let watcherBaseline=null;let watcherCartId=\"\";function emitCartDelta(gidKey,delta,line){const sign=delta>0?1:-1;const qty=Math.abs(delta);window.setTimeout(()=>{if(consumeExplicitDelta(watcherLineKeys(line,gidKey),sign))return;const item=toItem({title:line?.merchandise?.product?.title||\"\"},{id:line?.merchandise?.id,sku:line?.merchandise?.sku,title:line?.merchandise?.title,price:line?.merchandise?.price},qty);track(sign>0?\"add_to_cart\":\"remove_from_cart\",[item],{currency:line?.merchandise?.price?.currencyCode});},EMIT_DELAY_MS);}function processCartDiff(){const cart=readFcCart();if(!cart){// Brak koszyka (nowa sesja / wyczyszczony po zakupie) — baza = pusta.\n// Gdy FC zaraz utworzy koszyk (pierwszy add nowego visitora), gałąź\n// „zmiana id\" policzy linie net-new względem pustej bazy i wyemituje add.\nwatcherBaseline=new Map;watcherCartId=\"\";return;}const cartId=String(cart.id||\"\");const next=snapshotStandaloneLines(cart);if(!watcherBaseline){// pierwszy odczyt na stronie — baza bez emisji\nwatcherBaseline=next;watcherCartId=cartId;return;}const idChanged=cartId!==watcherCartId;const changes=[];for(const[key,snap]of next){const prevQty=watcherBaseline.get(key)?.qty||0;if(snap.qty!==prevQty)changes.push({key,delta:snap.qty-prevQty,line:snap.line});}if(!idChanged){// usunięcia liczymy tylko w obrębie TEGO SAMEGO koszyka — zniknięcie\n// zawartości przy wymianie koszyka (post-checkout, „cart does not\n// exist\" → cartCreate) to nie jest remove_from_cart użytkownika\nfor(const[key,snap]of watcherBaseline){if(!next.has(key))changes.push({key,delta:-snap.qty,line:snap.line});}}watcherBaseline=next;watcherCartId=cartId;const emits=idChanged?changes.filter(c=>c.delta>0)// nowy koszyk: tylko linie net-new\n:changes;if(!emits.length)return;if(emits.length>BULK_CHANGE_LIMIT)return;// flush/merge/login — nie user-akcja\nif(typeof document!==\"undefined\"&&document.visibilityState===\"hidden\")return;// akcja z innej karty — emituje tamta\nfor(const change of emits)emitCartDelta(change.key,change.delta,change.line);}/** Start obserwatora koszyka — idempotentny (flaga na window). */export function startCartWatcher(){if(!isLive())return;const w=window;if(w[WATCHER_FLAG])return;w[WATCHER_FLAG]=true;const update=()=>{try{processCartDiff();}catch{/* watcher nigdy nie może wywalić strony */}};const events=[\"shopXtools:cart:updated\",\"shopXtools:cart:refresh\",\"framer-commerce:cart:refresh\",\"fc:cart:refresh\",\"cartChange\",\"cart:update\"];for(const name of events){try{document.addEventListener(name,update);}catch{/* ignore */}try{window.addEventListener(name,update);}catch{/* ignore */}}try{window.addEventListener(\"storage\",update);}catch{/* ignore */}window.setInterval(update,WATCHER_POLL_MS);update();}// ── Stale-cart guard: fix „THE SPECIFIED CART DOES NOT EXIST\" ────────────────\n//\n// Framer Commerce trzyma cart id w LS (shopX_cart_id + shopXtools.cart) i NIE\n// sprząta go, gdy koszyk umrze po stronie Shopify (skonsumowany przez checkout\n// albo wygasły): fetchCart() zwraca null i zostawia martwy id, więc każda\n// mutacja koszyka kończy się błędem „The specified cart does not exist\",\n// a pierwszy add tworzy nowy koszyk gubiąc wyświetlaną zawartość (Asana\n// 1216632361896421 + 1216460425960432; zweryfikowane empirycznie na produkcji).\n//\n// Guard: przy wejściu na stronę i przy powrocie (bfcache/fokus — typowo\n// powrót z checkoutu) pyta Storefront API o zapisany koszyk. Gdy API\n// JEDNOZNACZNIE odpowie „cart == null\" (bez errors — sieć/API-error nigdy nie\n// kasuje działającego koszyka), czyści stan FC zanim użytkownik kliknie:\n// LS + live obiekt + eventy refresh (drawer/badge przechodzą na pusto).\nconst FC_CART_ID_KEY=\"shopX_cart_id\";const CART_GUARD_FLAG=\"__acelinkCartGuard\";const CART_CHECK_THROTTLE_MS=3e4;const CART_GUARD_BOOT_DELAY_MS=2500;let lastCartCheck=0;function storedCartId(){try{const direct=localStorage.getItem(FC_CART_ID_KEY);if(direct)return direct;}catch{/* ignore */}try{const raw=localStorage.getItem(FC_CART_KEY);return raw?String(JSON.parse(raw)?.id||\"\"):\"\";}catch{return\"\";}}function clearDeadCart(deadId){try{// nie ruszaj, jeśli FC w międzyczasie wymienił koszyk na inny (świeży)\nconst current=storedCartId();if(current&&current!==deadId)return;}catch{/* ignore */}try{localStorage.removeItem(FC_CART_ID_KEY);localStorage.removeItem(FC_CART_KEY);}catch{/* ignore */}try{const sx=window.shopXtools;if(sx)sx.cart=null;}catch{/* ignore */}for(const name of[\"shopXtools:cart:updated\",\"shopXtools:cart:refresh\"]){try{window.dispatchEvent(new CustomEvent(name));}catch{/* ignore */}try{document.dispatchEvent(new CustomEvent(name));}catch{/* ignore */}}// FC inicjalizuje się asynchronicznie i może wpisać martwy id z powrotem\n// (trzyma go w pamięci) — jedno powtórzenie sprzątania domyka wyścig.\nwindow.setTimeout(()=>{try{if(storedCartId()===deadId)clearDeadCart(deadId);}catch{/* ignore */}},3e3);}async function validateStoredCart(force=false){const now=Date.now();if(!force&&now-lastCartCheck<CART_CHECK_THROTTLE_MS)return;lastCartCheck=now;const cartId=storedCartId();if(!cartId)return;try{const res=await storefrontFetch(`query CartAlive($id: ID!) { cart(id: $id) { id } }`,{id:cartId});if(!res||res.errors?.length)return;if(res.data&&res.data.cart===null)clearDeadCart(cartId);}catch{/* offline / API error — nie ruszamy koszyka */}}/** Start guarda martwego koszyka — idempotentny (flaga na window). */export function startCartGuard(){if(!isLive())return;const w=window;if(w[CART_GUARD_FLAG])return;w[CART_GUARD_FLAG]=true;// opóźniony start — nie ścigamy się z inicjalizacją FC; drugi przebieg\n// łapie id wpisany przez FC już po pierwszym sprawdzeniu\nwindow.setTimeout(()=>{void validateStoredCart(true);},CART_GUARD_BOOT_DELAY_MS);window.setTimeout(()=>{void validateStoredCart(true);},CART_GUARD_BOOT_DELAY_MS*4);// powrót z bfcache (strzałka wstecz z checkoutu — flow z Asana 1216460425960432)\ntry{window.addEventListener(\"pageshow\",e=>{if(e?.persisted)void validateStoredCart(true);});}catch{/* ignore */}// powrót fokusa na kartę (np. checkout otwarty obok / w tej samej karcie)\ntry{document.addEventListener(\"visibilitychange\",()=>{if(document.visibilityState===\"visible\")void validateStoredCart();});}catch{/* ignore */}}// ── Backorder line item property: notka widoczna w CHECKOUCIE Shopify ────────\n//\n// Koszyk Framera pokazuje baner + notki (SN2_CartView), ale checkout to już\n// strona Shopify — na planie standard nie wstrzykniemy tam UI (checkout UI\n// extensions w purchase.checkout.* = tylko Plus). Jedyna powierzchnia, którą\n// kontrolujemy, to LINE ITEM PROPERTY: atrybut linii BEZ podkreślnika\n// wyświetla się w checkoucie pod pozycją i płynie do maila potwierdzającego\n// oraz zamówienia w adminie (Asana 1216668712887635).\n//\n// Mechanika: na zdarzenia koszyka (te same co cart-diff watcher) + poll\n// pytamy Storefront o linie z merchandise.currentlyNotInStock (dokładny\n// sygnał backorderu — jak baner w SN2_CartView) i per linia domergowujemy /\n// zdejmujemy atrybut \"Backorder\" przez cartLinesUpdate. Merge zachowuje\n// istniejące atrybuty (_composite_instance_id bundli!). Storefront jest\n// źródłem prawdy — kopia koszyka FC w LS atrybutu nie zna, więc nie ma pętli:\n// kolejny przebieg widzi atrybut po stronie API i nic nie robi. Gdyby FC przy\n// zmianie ilości nadpisał atrybuty linii z lokalnej kopii, tagger doklei\n// notkę ponownie przy następnym przebiegu.\nconst BACKORDER_ATTR_KEY=\"Backorder\";const BACKORDER_ATTR_VALUE=\"Will ship as soon as it's restocked\";// Per-variant stock.message (recomputed hourly from COMPONENT stock — the text\n// the PDP badges show) outranks the raw currentlyNotInStock flag: virtual vest\n// masters always sit at qty 0 + CONTINUE, so the flag alone would tag every\n// vest \"Backorder\" even when it ships next day (client report 14.09). A\n// delay-style message becomes a \"Lead time\" property; an availability message\n// (\"SHIPS …\") becomes a \"Ships\" property (see below).\nconst LEADTIME_ATTR_KEY=\"Lead time\";// 14.10.2026 (Michał, Asana 1219185925017656): Shopify's own estimated delivery\n// dates are OFF — the bundle app's message is the ONLY shipping information a\n// customer sees. So an availability message is written too (\"Ships: NEXT DAY\",\n// \"Ships: IN 2-3 DAYS\"), on every line that has a message (variant-level first,\n// the product-level one for simple products). Exactly one of the three keys\n// per line; the other two are removed.\nconst SHIPS_ATTR_KEY=\"Ships\";const OUR_LINE_ATTR_KEYS=new Set([BACKORDER_ATTR_KEY,LEADTIME_ATTR_KEY,SHIPS_ATTR_KEY]);const isOurLineAttr=key=>OUR_LINE_ATTR_KEYS.has(key);const STOCK_DELAY_MESSAGE_RE=/LEAD\\s*TIME|WEEK|DISCONTINUED|BACKORDER|OUT OF STOCK/i;const BACKORDER_TAGGER_FLAG=\"__acelinkBackorderTagger\";const BACKORDER_TAGGER_THROTTLE_MS=4e3;const BACKORDER_TAGGER_POLL_MS=6e3;const BACKORDER_TAGGER_BOOT_DELAY_MS=3e3;let backorderTaggerBusy=false;let lastBackorderTagCheck=0;// Ostatni zapis taggera odrzucony przez Shopify (userErrors) — podpis\n// koszyk + linie + docelowe atrybuty. Dopóki koszyk się nie zmieni, tego samego\n// zapisu NIE ponawiamy. Bez tego memo odrzucony zapis wracał co 6 s w\n// nieskończoność (Asana 1218681953612092, 20.09.2026: koszyk z adresem NY\n// i vestem — funkcja walidacyjna odrzucała każdy cartLinesUpdate, atrybut\n// nigdy nie siadał, `alreadyRight` nigdy nie było prawdą, a każde odrzucenie\n// otwierało na nowo baner NY/CT, którego nie dało się zamknąć).\nlet lastRejectedTagWrite=\"\";/**\n * Wspólny zamek na zapisy do koszyka.\n *\n * `cartLinesUpdate` PODMIENIA całą listę atrybutów linii, a piszą do niej dwa\n * nasze moduły: tagger backorderu (acelink_analytics) i builder add-onów\n * (SN_VestAddonsBuilder). Każdy robi read-modify-write, więc przeplot kończy\n * się utratą atrybutów tego drugiego — zmierzone 20.08: jedno „Add to Cart\"\n * to SZEŚĆ mutacji koszyka, a vest gubił `_composite_instance_id` i wracał do\n * grupy dopiero przez adopcję po fakcie. Klient widział w tym oknie cenę\n * BAZOWĄ przy pozycji (934,00) obok prawdziwego subtotalu (1185,00).\n *\n * Storefront nie ma compare-and-set, ale oba pisarze siedzą w tym samym\n * kontekście strony — wystarczy je ustawić w kolejce. Zamek jest na `window`,\n * bo moduły są osobnymi plikami kodu Framera i nie dzielą modułu JS.\n */function withCartWriteLock(run){const w=window;const previous=w.__acelinkCartWriteLock||Promise.resolve();let release=()=>{};const mine=new Promise(resolve=>{release=resolve;});w.__acelinkCartWriteLock=previous.then(()=>mine,()=>mine);return previous.then(run,run).finally(()=>release());}const LINE_ATTRS_QUERY=`query CartLineAttrs($id: ID!) {\n    cart(id: $id) {\n        id\n        lines(first: 100) {\n            edges { node { id attributes { key value } } }\n        }\n    }\n}`;/** Świeże atrybuty każdej linii koszyka, po id linii. Pusta mapa = nie udało się. */async function readLineAttributes(cartId){const out=new Map;const res=await storefrontFetch(LINE_ATTRS_QUERY,{id:cartId});if(!res||res.errors?.length)return out;for(const edge of res?.data?.cart?.lines?.edges||[]){const line=edge?.node;if(!line?.id)continue;out.set(line.id,(line.attributes||[]).filter(a=>a?.key).map(a=>({key:String(a.key),value:String(a.value??\"\")})));}return out;}/** Te same pary klucz→wartość, niezależnie od kolejności. */function sameAttributes(a,b){if(a.length!==b.length)return false;const map=new Map(a.map(x=>[x.key,x.value]));return b.every(x=>map.get(x.key)===x.value);}/**\n * Sieć bezpieczeństwa pod zapisem powyżej: jeżeli mimo świeżego scalenia jakaś\n * linia zgubiła atrybut, którego my nie ustawiamy (bo ktoś dopisał go w oknie\n * jednego round-tripu), dopisujemy go z powrotem. Utrata\n * `_composite_instance_id` kosztuje klienta pokazaną cenę zestawu, więc lepiej\n * zapłacić jeszcze jednym żądaniem niż zostawić rozjazd.\n *//** Podpis zapisu taggera: koszyk + linie + docelowe atrybuty (do memo odrzuceń). */function tagWriteSignature(cartId,lines){return cartId+\"|\"+lines.map(l=>l.id+\":\"+l.attributes.map(a=>a.key+\"=\"+a.value).join(\",\")).join(\";\");}async function restoreClobberedAttributes(cartId,written){const after=await readLineAttributes(cartId);if(!after.size)return;const repairs=[];for(const line of written){const now=after.get(line.id);if(!now)continue;const have=new Set(now.map(a=>a.key));// czego brakuje względem tego, co sami zapisaliśmy — pomijając nasze\n// własne tagi, których zdjęcie bywa zamierzone\nconst missing=line.attributes.filter(a=>!isOurLineAttr(a.key)&&!have.has(a.key));if(missing.length)repairs.push({id:line.id,attributes:[...now,...missing]});}if(!repairs.length)return;await storefrontFetch(`mutation RestoreLineAttrs($cartId: ID!, $lines: [CartLineUpdateInput!]!) {\n            cartLinesUpdate(cartId: $cartId, lines: $lines) {\n                cart { id }\n                userErrors { field message }\n            }\n        }`,{cartId,lines:repairs});}async function ensureBackorderLineProperties(force=false){if(!isLive())return;const now=Date.now();if(!force&&now-lastBackorderTagCheck<BACKORDER_TAGGER_THROTTLE_MS)return;if(backorderTaggerBusy)return;const cartId=storedCartId();if(!cartId)return;backorderTaggerBusy=true;lastBackorderTagCheck=now;try{const res=await storefrontFetch(`query CartBackorderLines($id: ID!) {\n                cart(id: $id) {\n                    id\n                    lines(first: 100) {\n                        edges { node {\n                            id\n                            quantity\n                            attributes { key value }\n                            merchandise {\n                                ... on ProductVariant {\n                                    id currentlyNotInStock\n                                    stockMessage: metafield(namespace: \"stock\", key: \"message\") { value }\n                                    product { stockMessage: metafield(namespace: \"stock\", key: \"message\") { value } }\n                                }\n                            }\n                        } }\n                    }\n                }\n            }`,{id:cartId});if(!res||res.errors?.length)return;const edges=res?.data?.cart?.lines?.edges;if(!Array.isArray(edges))return;const updates=[];for(const edge of edges){const line=edge?.node;if(!line?.id||!(line?.quantity>0))continue;const attrs=(line.attributes||[]).filter(a=>a?.key);// Desired property for this line: the variant's stock.message, else\n// the product's (simple products carry it at product level), else the\n// raw currentlyNotInStock flag for variants without any message.\nconst variantMsg=line?.merchandise?.stockMessage?.value;const productMsg=line?.merchandise?.product?.stockMessage?.value;const message=typeof variantMsg===\"string\"&&variantMsg.trim()?variantMsg.trim():typeof productMsg===\"string\"?productMsg.trim():\"\";let want=null;if(message){want=STOCK_DELAY_MESSAGE_RE.test(message)?{key:LEADTIME_ATTR_KEY,value:message.replace(/^LEAD\\s*TIME\\s*/i,\"\")||message}:{key:SHIPS_ATTR_KEY,value:message.replace(/^SHIPS\\s*/i,\"\")||message};}else if(line?.merchandise?.currentlyNotInStock===true){want={key:BACKORDER_ATTR_KEY,value:BACKORDER_ATTR_VALUE};}const ours=attrs.filter(a=>isOurLineAttr(a.key));const alreadyRight=want?ours.length===1&&ours[0].key===want.key&&ours[0].value===want.value:ours.length===0;if(alreadyRight)continue;const rest=attrs.filter(a=>!isOurLineAttr(a.key));updates.push({id:line.id,attributes:want?[...rest,want]:rest,want});}if(!updates.length)return;// ⚠ LOST UPDATE — czytamy atrybuty w jednym żądaniu, a zapisujemy w\n// drugim. `cartLinesUpdate` PODMIENIA całą listę atrybutów linii, więc\n// wszystko, co dopisał ktoś inny między naszym odczytem a zapisem,\n// znika. Realnie tracił na tym SN_VestAddonsBuilder: otagował vest\n// `_composite_instance_id` w tym oknie, my nadpisywaliśmy linię starą\n// listą, tag grupy przepadał — i drawer pokazywał vest jako osobną\n// pozycję w cenie BAZOWEJ, choć add-ony dalej liczyły się do subtotalu\n// (zgłoszenie 20.08: karta 934,00 przy subtotalu 1185,00).\n// Dotyczyło TYLKO linii na backorderze, bo tylko je tu przepisujemy —\n// stąd pozorna losowość.\n//\n// Nie da się tego zrobić warunkowo (Storefront nie ma compare-and-set),\n// więc: (1) tuż przed zapisem czytamy atrybuty NA ŚWIEŻO i scalamy na\n// nich, co zwęża okno do jednego round-tripu, (2) po zapisie\n// sprawdzamy, czy jakaś linia nie zgubiła atrybutu, którego my nie\n// ustawiamy, i przywracamy go.\nawait withCartWriteLock(async()=>{const freshAttrs=await readLineAttributes(cartId);const merged=updates.map(u=>{const current=freshAttrs.get(u.id);if(!current)return{id:u.id,attributes:u.attributes}// linia zniknęła — zapis i tak przepadnie\n;const keep=current.filter(a=>!isOurLineAttr(a.key));return{id:u.id,attributes:u.want?[...keep,u.want]:keep};}).filter(u=>{// nic się nie zmieniło względem świeżego odczytu → nie pisz\nconst current=freshAttrs.get(u.id);if(!current)return true;return!sameAttributes(current,u.attributes);});if(!merged.length)return;// Ten sam zapis, który Shopify już raz odrzuciło → nie ponawiaj.\n// Podpis obejmuje linie i pełną listę atrybutów, więc każda realna\n// zmiana koszyka (nowa linia, usunięta, inne atrybuty) daje nowy podpis\n// i JEDNĄ nową próbę — nie pętlę.\nconst signature=tagWriteSignature(cartId,merged);if(signature===lastRejectedTagWrite)return;const written=await storefrontFetch(`mutation TagBackorderLines($cartId: ID!, $lines: [CartLineUpdateInput!]!) {\n                cartLinesUpdate(cartId: $cartId, lines: $lines) {\n                    cart { id }\n                    userErrors { field message }\n                }\n            }`,{cartId,lines:merged.map(u=>({id:u.id,attributes:u.attributes}))});const userErrors=written?.data?.cartLinesUpdate?.userErrors;if(Array.isArray(userErrors)&&userErrors.length){lastRejectedTagWrite=signature;return;}lastRejectedTagWrite=\"\";await restoreClobberedAttributes(cartId,merged);});}catch{/* best-effort — tagger nigdy nie może wywalić strony ani koszyka */}finally{backorderTaggerBusy=false;}}/** Start taggera backorderów — idempotentny (flaga na window). */export function startBackorderLineTagger(){if(!isLive())return;const w=window;if(w[BACKORDER_TAGGER_FLAG])return;w[BACKORDER_TAGGER_FLAG]=true;const update=()=>{void ensureBackorderLineProperties();};const events=[\"shopXtools:cart:updated\",\"shopXtools:cart:refresh\",\"framer-commerce:cart:refresh\",\"fc:cart:refresh\",\"cartChange\",\"cart:update\"];for(const name of events){try{document.addEventListener(name,update);}catch{/* ignore */}try{window.addEventListener(name,update);}catch{/* ignore */}}try{window.addEventListener(\"storage\",update);}catch{/* ignore */}window.setInterval(update,BACKORDER_TAGGER_POLL_MS);// opóźniony pierwszy przebieg — nie ścigamy się z inicjalizacją FC\nwindow.setTimeout(()=>{void ensureBackorderLineProperties(true);},BACKORDER_TAGGER_BOOT_DELAY_MS);}/* ------------------------------------------------------------------ *//* Strażnik \"data__products-ready\" — martwy picker FC (screeny 19.07)  *//* ------------------------------------------------------------------ */// Na PDP tactical-gear FC_ProductVariants potrafi zamontować się już PO tym,\n// jak runtime FC wyemitował \"data__products-ready\": produkt siedzi w\n// shopXtools.products, ale picker nie dostał danych (wewnętrzne k=null) →\n// zero preselekcji Size/Color, Add to Cart szary do pierwszego kliknięcia\n// (E2E: patrol/skeletac/spectre carriery + tactical-belt, 2026-07-19).\n// Ponowny broadcast TEGO SAMEGO eventu z aktualną listą produktów jest dla\n// słuchaczy FC idempotentny (find-by-id → setState) i uzupełnia dane\n// spóźnionym instancjom. SN3_ArmorSelector traktuje \"ready\" wyłącznie jako\n// learn/loadOptions — kontrakt timingowy ogłaszania armora (#123, Asana\n// 1216603844152712) pozostaje nienaruszony: armor dalej czeka na broadcast\n// pickera.\nconst FC_READY_REBROADCAST_FLAG=\"__acelinkFcReadyRebroadcast\";const FC_READY_REBROADCAST_POLL_MS=900;const FC_READY_REBROADCAST_MAX_FIRES=3;const FC_READY_REBROADCAST_DEADLINE_MS=12e3;export function startFcDataReadyRebroadcast(){if(!isLive())return;const w=window;if(w[FC_READY_REBROADCAST_FLAG])return;w[FC_READY_REBROADCAST_FLAG]=true;let fires=0;const fire=()=>{const products=w.shopXtools?.products;if(!Array.isArray(products)||products.length===0)return false;try{document.dispatchEvent(new CustomEvent(\"data__products-ready\",{detail:{products}}));}catch{return false;}return true;};const iv=window.setInterval(()=>{if(fire())fires+=1;if(fires>=FC_READY_REBROADCAST_MAX_FIRES)window.clearInterval(iv);},FC_READY_REBROADCAST_POLL_MS);window.setTimeout(()=>window.clearInterval(iv),FC_READY_REBROADCAST_DEADLINE_MS);}/* ─────────────────────────────────────────────────────────────────────────── *//* Obcy `?variant=` na produktach powiązanych (audyt klienta 20.09.2026, pkt 4, *//* Asana 1218686872475420)                                                    *//*                                                                            *//* Router Framera przenosi bieżący query string na nawigację wewnętrzną i     *//* dekoruje nim linki. Klik w kartę Spectre z PDP Patrol (?variant=<id        *//* Patrola>) ląduje na /spectre?variant=<id Patrola>; FC loguje „URL variant  *//* … not found\", wybiera coś innego, obcy id przeżywa reload i rozłazi się na *//* kolejne karty powiązanych. Dwie strony obrony:                             *//*  1. źródło — klik w link tej samej domeny na INNĄ ścieżkę zdejmuje         *//*     `variant` z bieżącego URL (replaceState) ZANIM router przejmie klik;   *//*     ten sam pathname zachowuje `variant` (wybór i linki do udostępniania). *//*     Klik z modyfikatorem / środkowy / target=_blank omijamy — otwiera nową *//*     kartę, a tam działa strona 2.                                          *//*  2. cel — po data__products-ready / pageshow (+ krótki poll po nawigacji), *//*     gdy URL ma `variant`, produkt strony JEST w shopXtools.products, a     *//*     żaden jego wariant nie ma tego id → replaceState bez `variant`.        *//*     Nigdy w trakcie ładowania (produkt nieznany = nie ruszamy).            *//* Tylko parametr `variant`; UTM/gclid/fbclid nietknięte.                     *//* Kompromis: po (1) Wstecz wraca na poprzedni produkt bez `?variant=`;       *//* wybór odtwarza się ze snapshotu FC `fc_active_variant_*`.                  *//* ─────────────────────────────────────────────────────────────────────────── */const FOREIGN_VARIANT_FLAG=\"__acelinkForeignVariantCleanup\";const FOREIGN_VARIANT_POLL_MS=1e3;const FOREIGN_VARIANT_POLL_MAX=20;function gidDigitsOf(value){const m=String(value??\"\").match(/(\\d+)\\s*$/);return m?m[1]:\"\";}function stripVariantParam(){try{const url=new URL(window.location.href);if(!url.searchParams.has(\"variant\"))return false;url.searchParams.delete(\"variant\");window.history.replaceState(window.history.state,\"\",url.pathname+url.search+url.hash);return true;}catch{return false;}}/**\n * true  → produkt tej strony jest załadowany i MA wariant o tym id\n * false → produkt załadowany, wariantu NIE MA (obcy id)\n * null  → produktu strony nie ma jeszcze w cache FC (nie decydujemy)\n */function pageProductHasVariant(variantDigits){const w=window;const products=w.shopXtools?.products;if(!Array.isArray(products)||!products.length)return null;const handle=(window.location.pathname.split(\"/\").filter(Boolean).pop()||\"\").toLowerCase();if(!handle)return null;const product=products.find(p=>String(p?.node?.handle??p?.handle??\"\").toLowerCase()===handle);if(!product)return null;const node=product.node??product;const raw=node?.variants;const list=Array.isArray(raw?.edges)?raw.edges.map(e=>e?.node):Array.isArray(raw?.nodes)?raw.nodes:Array.isArray(raw)?raw:[];if(!list.length)return null;return list.some(v=>gidDigitsOf(v?.id)===variantDigits);}function cleanupForeignVariantOnce(){let digits=\"\";try{digits=gidDigitsOf(new URLSearchParams(window.location.search).get(\"variant\"));}catch{return true;}if(!digits)return true// nic do sprzątania\n;const has=pageProductHasVariant(digits);if(has===null)return false// jeszcze nie wiemy — spróbuj później\n;if(has===false)stripVariantParam();return true;}export function startForeignVariantCleanup(){if(!isLive())return;const w=window;if(w[FOREIGN_VARIANT_FLAG])return;w[FOREIGN_VARIANT_FLAG]=true;// (1) źródło: capture-phase, przed routerem Framera\ndocument.addEventListener(\"click\",e=>{try{if(e.defaultPrevented||e.button!==0)return;if(e.metaKey||e.ctrlKey||e.shiftKey||e.altKey)return;const target=e.target;const a=target?.closest?target.closest(\"a[href]\"):null;if(!a)return;if((a.getAttribute(\"target\")||\"\").toLowerCase()===\"_blank\")return;const href=a.getAttribute(\"href\")||\"\";if(!href||href.startsWith(\"#\")||/^(mailto|tel|javascript):/i.test(href))return;const dest=new URL(a.href,window.location.href);if(dest.origin!==window.location.origin)return;if(dest.pathname===window.location.pathname)return;stripVariantParam();}catch{/* ignore */}},true);// (2) cel: po danych FC i na każdej zmianie URL — z krótkim pollem,\n// bo cache FC potrafi dojechać po evencie, a SPA-nav nie strzela pageshow.\nlet pollId=null;let polls=0;const stopPoll=()=>{if(pollId!==null)window.clearInterval(pollId);pollId=null;};const run=()=>{stopPoll();polls=0;if(cleanupForeignVariantOnce())return;pollId=window.setInterval(()=>{polls+=1;if(cleanupForeignVariantOnce()||polls>=FOREIGN_VARIANT_POLL_MAX)stopPoll();},FOREIGN_VARIANT_POLL_MS);};try{document.addEventListener(\"data__products-ready\",run);}catch{/* ignore */}try{window.addEventListener(\"pageshow\",run);window.addEventListener(\"popstate\",run);}catch{/* ignore */}let lastHref=window.location.href;window.setInterval(()=>{if(window.location.href!==lastHref){lastHref=window.location.href;run();}},500);run();}// Auto-start: moduł jest importowany przez komponenty SN (SchemaProduct na PDP,\n// CartView w drawerze, konfiguratory) — pierwszy import na stronie uruchamia\n// watcher. Na canvasie Framera isLive()=false → nic się nie dzieje.\ntry{startCartWatcher();}catch{/* ignore */}try{startCartGuard();}catch{/* ignore */}try{startFcDataReadyRebroadcast();}catch{/* ignore */}try{startBackorderLineTagger();}catch{/* ignore */}try{startForeignVariantCleanup();}catch{/* ignore */}// Capture click idów na KAŻDYM wejściu z modułem (snippet head robi to\n// najwcześniej, ale moduł domyka strony/utmy, gdzie snippet by nie zdążył\n// przed replaceState routera).\ntry{if(isLive())captureGclid();}catch{/* ignore */}\nexport const __FramerMetadata__ = {\"exports\":{\"identityAttributes\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"startForeignVariantCleanup\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"trackAddToCart\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"EcomItem\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"trackViewItemList\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"startBackorderLineTagger\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"startFcDataReadyRebroadcast\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"bootAnalytics\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"stashIdentityOnCart\":{\"type\":\"function\",\"isAsync\":true,\"annotations\":{\"framerContractVersion\":\"1\"}},\"beginCheckout\":{\"type\":\"function\",\"isAsync\":true,\"annotations\":{\"framerContractVersion\":\"1\"}},\"track\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"trackViewCart\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"startCartGuard\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"toItem\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"trackRemoveFromCart\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"trackSelectItem\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"startCartWatcher\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"trackViewItem\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"consentAttributes\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"getVisitorId\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./acelink_analytics.map","// Generated by Framer (c85c929)\nimport{jsx as _jsx}from\"react/jsx-runtime\";import{addPropertyControls,ControlType,cx,motion,withCSS}from\"framer\";import*as React from\"react\";import{forwardRef}from\"react\";const mask='url(\\'data:image/svg+xml,<svg display=\"block\" role=\"presentation\" viewBox=\"0 0 16 16\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M 11.826 11.826 L 0 0\" fill=\"transparent\" height=\"11.82556px\" id=\"lkHJGS2Jh\" stroke-dasharray=\"\" stroke-linecap=\"butt\" stroke-linejoin=\"miter\" stroke-miterlimit=\"10\" stroke-width=\"1.5\" stroke=\"var(--1hq5eo6, rgb(0,0,0))\" transform=\"translate(2 2)\" width=\"11.825559999999996px\"/><path d=\"M 11.826 0 L 0 11.826\" fill=\"transparent\" height=\"11.82558px\" id=\"OcaYFKyDV\" stroke-dasharray=\"\" stroke-linecap=\"butt\" stroke-linejoin=\"miter\" stroke-miterlimit=\"10\" stroke-width=\"1.5\" stroke=\"var(--1hq5eo6, rgb(0,0,0))\" transform=\"translate(2 2.174)\" width=\"11.825559999999996px\"/></svg>\\') alpha no-repeat center / auto var(--framer-icon-mask-mode, add), var(--framer-icon-mask, none)';const SVG=/*#__PURE__*/forwardRef((props,ref)=>{const{animated,layoutId,children,...rest}=props;return animated?/*#__PURE__*/_jsx(motion.div,{...rest,layoutId:layoutId,ref:ref}):/*#__PURE__*/_jsx(\"div\",{...rest,ref:ref});});const getProps=({color,height,id,width,...props})=>{return{...props,rbdZVdoTC:color??props.rbdZVdoTC??\"rgb(0, 0, 0)\"};};const Component=/*#__PURE__*/React.forwardRef(function(props,ref){const{style,className,layoutId,variant,rbdZVdoTC,...restProps}=getProps(props);return /*#__PURE__*/_jsx(SVG,{...restProps,className:cx(\"framer-LTGwB\",className),layoutId:layoutId,ref:ref,style:{\"--1hq5eo6\":rbdZVdoTC,...style}});});const css=[`.framer-LTGwB { -webkit-mask: ${mask}; aspect-ratio: 1; background-color: var(--1hq5eo6); mask: ${mask}; width: 16px; }`];/**\n * This is a generated Framer component.\n * @framerIntrinsicWidth 16\n * @framerIntrinsicHeight 16\n * @framerSupportedLayoutWidth any-prefer-fixed\n * @framerSupportedLayoutHeight any-prefer-fixed\n * @framerVariables {\"rbdZVdoTC\":\"color\"}\n * @framerImmutableVariables true\n * @framerVector {\"name\":\"x\",\"color\":{\"type\":\"variable\",\"value\":\"1hq5eo6\"},\"set\":{\"localId\":\"vectorSet/vTOhJ9WvM\",\"id\":\"vTOhJ9WvM\",\"moduleId\":\"xRCLAO1zx4ahXRqmKuvl\"}}\n */const Icon=withCSS(Component,css,\"framer-LTGwB\");Icon.displayName=\"x\";export default Icon;addPropertyControls(Icon,{rbdZVdoTC:{defaultValue:\"rgb(0, 0, 0)\",hidden:false,title:\"Color\",type:ControlType.Color}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"Icon\",\"slots\":[],\"annotations\":{\"framerIntrinsicWidth\":\"16\",\"framerContractVersion\":\"1\",\"framerSupportedLayoutWidth\":\"any-prefer-fixed\",\"framerVariables\":\"{\\\"rbdZVdoTC\\\":\\\"color\\\"}\",\"framerImmutableVariables\":\"true\",\"framerIntrinsicHeight\":\"16\",\"framerSupportedLayoutHeight\":\"any-prefer-fixed\",\"framerVector\":\"{\\\"name\\\":\\\"x\\\",\\\"color\\\":{\\\"type\\\":\\\"variable\\\",\\\"value\\\":\\\"1hq5eo6\\\"},\\\"set\\\":{\\\"localId\\\":\\\"vectorSet/vTOhJ9WvM\\\",\\\"id\\\":\\\"vTOhJ9WvM\\\",\\\"moduleId\\\":\\\"xRCLAO1zx4ahXRqmKuvl\\\"}}\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}","// Generated by Framer (167aefa)\nimport{fontStore}from\"framer\";fontStore.loadFonts([\"GF;TASA Orbiter-500\",\"GF;TASA Orbiter-700\"]);export const fonts=[{explicitInter:true,fonts:[{cssFamilyName:\"TASA Orbiter\",source:\"google\",style:\"normal\",uiFamilyName:\"TASA Orbiter\",url:\"https://fonts.gstatic.com/s/tasaorbiter/v2/3XF4Erw3860rsdSUVZx78hPcTvQoDGHxaFGfVEwC8pm095IuGcc.woff2\",weight:\"500\"},{cssFamilyName:\"TASA Orbiter\",source:\"google\",style:\"normal\",uiFamilyName:\"TASA Orbiter\",url:\"https://fonts.gstatic.com/s/tasaorbiter/v2/3XF4Erw3860rsdSUVZx78hPcTvQoDGHxaFGfVJkF8pm095IuGcc.woff2\",weight:\"700\"}]}];export const css=['.framer-vo8rg .framer-styles-preset-bfdy2e:not(.rich-text-wrapper), .framer-vo8rg .framer-styles-preset-bfdy2e.rich-text-wrapper h4 { --framer-font-family: \"TASA Orbiter\", \"TASA Orbiter Placeholder\", sans-serif; --framer-font-family-bold: \"TASA Orbiter\", \"TASA Orbiter Placeholder\", sans-serif; --framer-font-open-type-features: normal; --framer-font-size: 24px; --framer-font-style: normal; --framer-font-style-bold: normal; --framer-font-variation-axes: normal; --framer-font-weight: 500; --framer-font-weight-bold: 700; --framer-letter-spacing: -0.04em; --framer-line-height: 0.9em; --framer-paragraph-spacing: 20px; --framer-text-alignment: left; --framer-text-color: var(--token-f87ea788-5cdc-4aac-9d76-b9ca5ca31f6c, #171512); --framer-text-decoration: none; --framer-text-stroke-color: initial; --framer-text-stroke-width: initial; --framer-text-transform: uppercase; }'];export const className=\"framer-vo8rg\";\nexport const __FramerMetadata__ = {\"exports\":{\"className\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"fonts\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"css\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}","import{jsx as _jsx}from\"react/jsx-runtime\";import{addPropertyControls,ControlType,RenderTarget}from\"framer\";import{useEffect,useRef}from\"react\";/**\n * @framerSupportedLayoutWidth auto\n * @framerSupportedLayoutHeight auto\n *\n * @framerDisableUnlink\n */export default function AvoidLayoutJumping({direction,style}){const isCanvas=RenderTarget.current()===RenderTarget.canvas;const ref=useRef(null);const rafId=useRef();const vertical=direction===\"vertical\"||direction===\"both\";const horizontal=direction===\"horizontal\"||direction===\"both\";useEffect(()=>{if(isCanvas)return;const parent=ref.current?.parentElement?.parentElement;if(!parent)return;const container=parent.parentElement;if(!container)return;const updateSize=()=>{const rect=parent.getBoundingClientRect();if(horizontal){container.style.width=`${rect.width}px`;}if(vertical){container.style.height=`${rect.height}px`;}rafId.current=requestAnimationFrame(updateSize);};// Start the RAF loop\nrafId.current=requestAnimationFrame(updateSize);return()=>{if(rafId.current){cancelAnimationFrame(rafId.current);}if(container){if(horizontal){container.style.width=\"\";}if(vertical){container.style.height=\"\";}}};},[direction]);return /*#__PURE__*/_jsx(\"div\",{ref:ref,style:{...style}});}AvoidLayoutJumping.displayName=\"Layout Jump Preventer\";addPropertyControls(AvoidLayoutJumping,{direction:{type:ControlType.Enum,defaultValue:\"vertical\",options:[\"vertical\",\"horizontal\",\"both\"],optionTitles:[\"Vertical\",\"Horizontal\",\"Both\"],displaySegmentedControl:true,segmentedControlDirection:\"vertical\",// @ts-ignore\noptionIcons:[\"direction-vertical\",\"direction-horizontal\",\"direction-all\"],description:\"More components at [Framer University](https://frameruni.link/cc).\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"AvoidLayoutJumping\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\",\"framerDisableUnlink\":\"\",\"framerSupportedLayoutWidth\":\"auto\",\"framerSupportedLayoutHeight\":\"auto\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./AvoidLayoutJumping_Prod.map"],"mappings":"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"}