(function(w,d){"use strict"; var VERSION="2.0.0",KEY="zclaw_growth",state={ready:false,config:{siteId:1,apiBase:"",consent:"unknown",autoTrack:true,debug:false},queue:[],share:"",visitor:""}; function id(prefix){try{return prefix+"_"+crypto.randomUUID()}catch(e){return prefix+"_"+Date.now()+"_"+Math.random().toString(36).slice(2)}} function safeJSON(value){try{return JSON.stringify(value||{})}catch(e){return "{}"}} function read(name){try{return localStorage.getItem(KEY+":"+name)||""}catch(e){return ""}} function write(name,value){try{localStorage.setItem(KEY+":"+name,value)}catch(e){}} function query(name){try{return new URLSearchParams(location.search).get(name)||""}catch(e){return ""}} function bot(){var ua=(navigator.userAgent||"").toLowerCase();return !!(navigator.webdriver||/bot|spider|crawler|headless|preview/.test(ua))} function allowed(){if(navigator.doNotTrack==="1")return false;if(state.config.botFilter!==false&&bot())return false;return state.config.consentMode!=="explicit"||state.config.consent==="granted"} function envelope(body){return body&&body.data&&body.data.data?body.data.data:(body&&body.data?body.data:body)} function endpoint(path){return (state.config.apiBase||"").replace(/\/+$/,"")+path} function persist(){write("queue",safeJSON(state.queue.slice(-200)))} function restore(){try{state.queue=JSON.parse(read("queue")||"[]");if(!Array.isArray(state.queue))state.queue=[]}catch(e){state.queue=[]}} function payload(type,meta){meta=meta||{};var u;try{u=new URL(location.href)}catch(e){u={pathname:location.pathname,searchParams:{get:function(){return""}}}}return {site_id:Number(state.config.siteId||1),client_event_id:meta.clientEventId||id("evt"),visitor_id:state.visitor,share_code:state.share,customer_id:Number(meta.customerId||0),lead_id:Number(meta.leadId||0),event_type:type,page_path:String(meta.pagePath||u.pathname).slice(0,500),referrer:String(d.referrer||"").slice(0,500),utm_source:String(u.searchParams.get("utm_source")||read("utm_source")||"").slice(0,80),utm_medium:String(u.searchParams.get("utm_medium")||read("utm_medium")||"").slice(0,80),utm_campaign:String(u.searchParams.get("utm_campaign")||read("utm_campaign")||"").slice(0,120),metadata_json:safeJSON(meta.metadata||{}).slice(0,4000),consent_status:state.config.consent||"unknown"}} function send(item){return fetch(endpoint("/api/growth/track"),{method:"POST",headers:{"Content-Type":"application/json","X-Site-Id":String(state.config.siteId||1)},body:JSON.stringify(item),keepalive:true,credentials:"same-origin"}).then(function(r){if(!r.ok)throw new Error("HTTP "+r.status);return r.json()})} function flush(){if(!allowed()||!navigator.onLine||!state.queue.length)return Promise.resolve();var batch=state.queue.slice(0,20),done=[];return Promise.all(batch.map(function(item){return send(item).then(function(){done.push(item.client_event_id)}).catch(function(){})})).then(function(){state.queue=state.queue.filter(function(item){return done.indexOf(item.client_event_id)<0});persist();if(state.queue.length&&done.length)setTimeout(flush,800)})} function track(type,meta){var types={page_view:1,content_view:1,chat_started:1,form_submit:1,member_registered:1,lead_created:1,appointment:1,deal_created:1};if(!types[type]||!allowed())return "";var item=payload(type,meta);state.queue.push(item);persist();flush();return item.client_event_id} function captureAttribution(){var share=query("zc_share")||read("share");if(share){state.share=share;write("share",share)}["utm_source","utm_medium","utm_campaign"].forEach(function(k){var v=query(k);if(v)write(k,v)})} function auto(){if(!state.config.autoTrack)return;track("page_view",{metadata:{title:(d.title||"").slice(0,180)}});d.addEventListener("click",function(e){var el=e.target&&e.target.closest?e.target.closest("[data-zclaw-event]"):null;if(!el)return;track(el.getAttribute("data-zclaw-event")||"content_view",{metadata:{label:(el.getAttribute("data-zclaw-label")||el.textContent||"").trim().slice(0,120),content_type:el.getAttribute("data-zclaw-content-type")||"",content_id:el.getAttribute("data-zclaw-content-id")||""}})});d.addEventListener("submit",function(e){var form=e.target;if(!form||!form.matches||!form.matches("[data-zclaw-track]"))return;track("form_submit",{metadata:{form_id:form.id||form.getAttribute("data-zclaw-track")||"form"}})});w.addEventListener("zclaw:chat-started",function(){track("chat_started")});var push=history.pushState;history.pushState=function(){push.apply(history,arguments);setTimeout(function(){track("page_view",{metadata:{title:d.title,spa:true}})},0)};w.addEventListener("popstate",function(){track("page_view",{metadata:{title:d.title,spa:true}})})} function init(options){options=options||{};state.config.siteId=Number(options.siteId||1);state.config.apiBase=options.apiBase||"";return fetch(endpoint("/api/growth/config?site_id="+state.config.siteId),{headers:{"X-Site-Id":String(state.config.siteId)}}).then(function(r){return r.json()}).then(function(body){var c=envelope(body)||{};state.config.consentMode=options.consentMode||c.consent_mode||"essential";state.config.consent=options.consent||read("consent")||"unknown";state.config.botFilter=options.botFilter!==undefined?options.botFilter:Number(c.bot_filter_enabled)!==0;state.config.autoTrack=options.autoTrack!==false;state.config.debug=!!options.debug;if(Number(c.sdk_enabled)===0)return api;state.visitor=read("visitor")||id("visitor");write("visitor",state.visitor);captureAttribution();restore();state.ready=true;auto();flush();return api}).catch(function(){state.visitor=read("visitor")||id("visitor");write("visitor",state.visitor);captureAttribution();restore();state.ready=true;auto();flush();return api})} function identify(data){data=data||{};if(!state.visitor)return Promise.reject(new Error("SDK not initialized"));return fetch(endpoint("/api/growth/member/bind"),{method:"POST",headers:{"Content-Type":"application/json","Authorization":data.token?"Bearer "+data.token:""},body:JSON.stringify({site_id:state.config.siteId,visitor_id:state.visitor,share_code:state.share,company:data.company||"",mobile:data.mobile||"",email:data.email||"",consent_status:state.config.consent})}).then(function(r){return r.json()}).then(envelope)} function setConsent(value){state.config.consent=value==="granted"?"granted":"denied";write("consent",state.config.consent);if(value==="granted")flush();if(value!=="granted"){state.queue=[];persist()}return state.config.consent} var api={version:VERSION,init:init,track:track,identify:identify,setConsent:setConsent,flush:flush,visitorId:function(){return state.visitor},shareCode:function(){return state.share},lead:function(id,meta){return track("lead_created",{leadId:id,metadata:meta})},deal:function(meta){return track("deal_created",{metadata:meta})}};w.ZClawGrowth=api;w.addEventListener("online",flush); })(window,document);