!function(){"use strict";var e={enabled:!1,endpoint:"",site:"",key:"",sampleRate:.05,maxBodyBytes:65536,maxBodies:60,maxListeners:200,maxGlobals:300,suppressHosts:["googletagmanager.com","google-analytics.com","googleadservices.com","googlesyndication.com","doubleclick.net","gstatic.com","googleapis.com","connect.facebook.net","stats.wp.com","cloudflareinsights.com","hotjar.com","clarity.ms","kiprotect.com"],forceParam:"cacap",forceToken:"",captureGlobals:!0,captureLoadGlobalBodies:!1,captureDom:!0,flushMs:1500};!function(){var t=null;try{var r=window.__caCfg;r&&"object"==typeof r&&(t=r)}catch(e){}if(t){"string"==typeof t.endpoint&&t.endpoint&&(e.endpoint=t.endpoint),"string"==typeof t.site&&t.site&&(e.site=t.site),"string"==typeof t.key&&(e.key=t.key);var n=t.inject;if(n&&"object"==typeof n)for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(Object.prototype.hasOwnProperty.call(e,o)?typeof n[o]==typeof e[o]?e[o]=n[o]:a("ignoring inject."+o+": expected "+typeof e[o]+", got "+typeof n[o]):a("ignoring unknown setting: inject."+o))}function a(e){try{window.console&&console.warn&&console.warn("[traffic-diagnostics/inject] "+e)}catch(e){}}}();var t=/^https?:\/\/([^/?#]+)/.exec(e.endpoint||"");if(e.enabled&&(!t||t[1].indexOf("_")>=0)){try{window.console&&console.warn&&console.warn("[traffic-diagnostics/inject] enabled but not configured — set __caCfg.endpoint and .site. Detector disabled.")}catch(e){}e.enabled=!1}if(e.enabled){try{if(window.__caInjectDetect)return void window.__caInjectDetect++;window.__caInjectDetect=1}catch(e){}var r=function(){try{if(window.performance&&performance.now)return Math.round(performance.now())}catch(e){}return 0}(),n=[],o=function(){try{if(window.crypto&&crypto.randomUUID)return crypto.randomUUID()}catch(e){}return Date.now().toString(36)+Math.random().toString(36).slice(2,10)}();try{window.__caPid=o}catch(e){ee("pid_publish",e)}var a={version:1,def:"hide",fragment:"parse",path:"guard",placeholder:"",maskChar:"*",maskMax:12,maxValue:256,guards:{email:"hide",long_digits:"off"},exact:{gad_source:"show",gad_campaignid:"show",matchtype:"show",network:"show",device:"show",creative:"show",mc_cid:"show",page:"show",paged:"show",per_page:"show",sort:"show",order:"show",orderby:"show",view:"show",tab:"show",step:"show",lang:"show",locale:"show",hl:"show",currency:"show",preview:"show",amp:"show",gtm_debug:"show",ver:"show",zip:{mode:"mask",keep:3,side:"start"},zipcode:{mode:"mask",keep:3,side:"start"},postcode:{mode:"mask",keep:3,side:"start"},postal_code:{mode:"mask",keep:3,side:"start"},fbclid:"hide",gclid:"hide",gbraid:"hide",wbraid:"hide",msclkid:"hide",ttclid:"hide",twclid:"hide",li_fat_id:"hide",epik:"hide",igshid:"hide",dclid:"hide",yclid:"hide",rdt_cid:"hide",sccid:"hide",srsltid:"hide",s:"hide",q:"hide",search:"hide",query:"hide",keyword:"hide",email:"hide","e-mail":"hide",e_mail:"hide",mail:"hide",em:"hide",user_email:"hide",useremail:"hide",phone:"hide",phone_number:"hide",tel:"hide",telephone:"hide",mobile:"hide",ph:"hide",fname:"hide",firstname:"hide",first_name:"hide",lname:"hide",lastname:"hide",last_name:"hide",name:"hide",fullname:"hide",full_name:"hide",address:"hide",address1:"hide",address2:"hide",street:"hide",dob:"hide",birthdate:"hide",ssn:"hide",token:"drop",access_token:"drop",id_token:"drop",refresh_token:"drop",auth:"drop",authorization:"drop",password:"drop",passwd:"drop",pwd:"drop",pass:"drop",secret:"drop",client_secret:"drop",api_key:"drop",apikey:"drop",key:"drop",sig:"drop",signature:"drop",hmac:"drop",hash:"drop",jwt:"drop",otp:"drop",code:"drop",state:"drop",nonce:"drop",_wpnonce:"drop",session:"drop",sessionid:"drop",session_id:"drop",phpsessid:"drop",sid:"drop",ticket:"drop",reset_key:"drop",activation_key:"drop",confirm:"drop",verify:"drop",verification:"drop",_ga:"drop",_gl:"drop",_gac:"drop",_fbp:"drop",fbp:"drop",mc_eid:"drop",mkt_tok:"drop",_hsenc:"drop",_hsmi:"drop",vero_id:"drop",ck_subscriber_id:"drop",__s:"drop",vgo_ee:"drop",oly_enc_id:"drop",oly_anon_id:"drop",sc_customer:"drop",wickedid:"drop",ml_subscriber:"drop",ml_subscriber_hash:"drop"},wild:[{pre:"",suf:"_token",rule:"drop"},{pre:"utm_",suf:"",rule:"show"}]},i=/[^\s@]+@[^\s@]+\.[a-z]{2,}/i,c=/[A-Za-z0-9._%+'-]+@[A-Za-z0-9-]+(?:\.[A-Za-z0-9-]+)*\.[A-Za-z]{2,}/g,s=/\d(?:[ .()\/+-]?\d){8,}/,d=/^([a-z][a-z0-9+.-]*:\/\/)[^/?#@]*@/i,l={version:1,def:"hide",fragment:"parse",path:"guard",placeholder:"",maskChar:"*",maskMax:12,maxValue:256,guards:{email:"hide",long_digits:"off"},exact:{},wild:[{pre:"utm_",suf:"",rule:"show"}]},u=function(){try{if(!e.forceParam||!e.forceToken)return!1;var t=(location.search||"").match(new RegExp("[?&]"+e.forceParam+"=([^&]*)"));return!!t&&decodeURIComponent(t[1])===e.forceToken}catch(e){return!1}}(),h=u?1:Math.max(0,Math.min(1,+e.sampleRate||0)),p=u||ue("sample:"+o)/4294967296t.maxValue?n.push(c+"="+l.slice(0,t.maxValue)+re(t.maskChar,3)):n.push(a))}else{var p=ie(u,s,t);n.push(c+"="+(null===p?t.placeholder:encodeURIComponent(p)))}}else n.push(c+"="+t.placeholder);else n.push(c+"=")}}}}return n.join("&")}function de(e,t){if(!e)return e;t=t||l;var r=String(e),n=r.indexOf("#"),o=n>=0?r.slice(n+1):null,a=n>=0?r.slice(0,n):r,i=a.indexOf("?"),c=i>=0?a.slice(0,i):a,s=i>=0?a.slice(i+1):null,d=ce(c,t);if(s){var u=se(s,t);u&&(d+="?"+u)}else""===s&&(d+="?");if(null!==o){var h=function(e,t){if("drop"===t.fragment)return null;if("keep"===t.fragment)return e;if(!e)return e;var r=e.indexOf("?");if(r>=0){var n=ce(e.slice(0,r),t),o=se(e.slice(r+1),t);return o?n+"?"+o:n}return e.indexOf("=")>=0?se(e,t):ce(e,t)}(o,t);null===h||""===h&&""!==o||(d+="#"+h)}return d}function le(e){return de(e,a)}function ue(e,t){for(var r=(void 0===t?2166136261:t)>>>0,n=0;n>>0,e.charCodeAt(n)>255&&(r=(r^=e.charCodeAt(n)>>>8)+((r<<1)+(r<<4)+(r<<7)+(r<<8)+(r<<24))>>>0);return r>>>0}function he(e){var t=ue(e,2166136261),r=ue(e,16777619);return"f:"+("00000000"+t.toString(16)).slice(-8)+("00000000"+r.toString(16)).slice(-8)}function pe(e,t,r){if("string"==typeof t&&t){var n;e.len=t.length;try{n=function(e){if(!f)return Promise.resolve(he(e));try{var t=(new TextEncoder).encode(e);return f.digest("SHA-256",t).then(function(e){for(var t=new Uint8Array(e),r="",n=0;n<16;n++)r+=("0"+t[n].toString(16)).slice(-2);return"s:"+r},function(){return he(e)})}catch(t){return Promise.resolve(he(e))}}(t)}catch(r){return void(e.src_hash=he(t))}var o=n.then(function(n){return e.src_hash=n,p?(-1===r?v++:0===r?je(n,t):y[n]||w.push({priority:r,hash:n,src:t}),n):n});g.push(o),e.__syncHash=function(){e.src_hash||(e.src_hash=he(t))}}}function fe(e){return!!e&&!0===e[N]}function ge(e){try{e[N]=!0}catch(e){}return e}function ye(e){try{if(e===window)return"window";if(e===document)return"document";if(e&&1===e.nodeType){var t=String(e.tagName||"").toLowerCase();e.id&&(t+="#"+String(e.id).slice(0,40));var r=e.getAttribute&&e.getAttribute("name");r&&(t+="[name="+String(r).slice(0,40)+"]");var n=e.getAttribute&&e.getAttribute("type");return n&&(t+="[type="+String(n).slice(0,24)+"]"),t.slice(0,120)}if(e&&e.constructor&&e.constructor.name)return String(e.constructor.name).slice(0,60)}catch(e){}return"other"}function me(t,r,n,o,a){if(x++,I[r])if(b.length>=e.maxListeners)A=!0;else{var i=n;if(i&&"object"==typeof i&&"function"==typeof i.handleEvent&&(i=i.handleEvent),"function"==typeof i&&!fe(i)&&!fe(n)){var c="";try{c=Function.prototype.toString.call(i)}catch(e){c=""}var s,d=function(e){if(!e)return"";var t=String(e).split("\n"),r=0;for(t.length&&!/@|\bat\s/.test(t[0])&&(r=1),r+=1;r=0)){if(/\beval at\b/.test(n))return"";var o=z.exec(n+" ");if(o)return o[1].slice(0,300);if(/\beval\b||\[native code\]/.test(n))return""}}return""}(a),l=!!(s=d)&&!!T&&0===s.indexOf(T+"/"),u=r+"|"+ye(t)+"|"+c.length+"|"+c.slice(0,120);if(!k[u]){k[u]=1;var h=!l&&function(t){if(!t)return!1;for(var r=e.suppressHosts||[],n=0;n=0)return!0;return!1}(d),p={type:String(r).slice(0,40),target:ye(t),t_ms:Y(),post_seal:M,caller:d,first_party:l,suppressed:h,native_code:/\{\s*\[native code\]\s*\}/.test(c),src_hash:null,len:c.length};b.push(p);var f=-1;l||h||(f=d?1:0),pe(p,c,f)}}}}function _e(){try{if(R||"function"!=typeof Z||!G)return;var e=G.addEventListener;if(e===Z)return;R=!0;var t="";try{t=Function.prototype.toString.call(e)}catch(e){}t&&pe(V,t,0)}catch(e){ee("rewrap_check",e)}}function ve(e){try{return/\{\s*\[native code\]\s*\}/.test(Function.prototype.toString.call(e))}catch(e){return!1}}function we(e){for(var t=function(){if(J)return J;J=[];for(var e=["Array","Function","Date","RegExp","Error","Map","Set","WeakMap","WeakSet","Promise","ArrayBuffer","DataView","Int8Array","Uint8Array","Float32Array","Float64Array","String","Number","Boolean","Symbol"],t=0;t=40||(Q[e]=1,C.push(e))}function xe(){try{var t=window.webkit&&window.webkit.messageHandlers;if(t){var r=[];try{r=Object.getOwnPropertyNames(t)}catch(e){}if(r.length)for(var n=0;n=e.maxGlobals){P=!0;break}var a;S[o]=1;try{a=window[o]}catch(e){continue}var i=null===a?"null":typeof a,c={name:String(o).slice(0,120),js_type:i,phase:t,len:null,src_hash:null};if(O.push(c),"head"===t&&(E++,j[o]=1),"function"===i){var s="";try{s=Function.prototype.toString.call(a)}catch(e){}if(s){var d=/\{\s*\[native code\]\s*\}/.test(s),l=-1;d||("head"===t?l=0:e.captureLoadGlobalBodies&&(l=2)),pe(c,s,l)}}else if("string"===i)c.len=a.length;else if("object"===i)try{c.len=Object.getOwnPropertyNames(a).length}catch(e){}}}}catch(e){ee("globals",e)}}function Se(t){var r="",n="";try{r=location.search||"",n=location.hash||""}catch(e){}var a={v:2,site:e.site,source:"client",phase:t,pid:o,detector_v:4,url:le(location.pathname+r+n),ref:le(document.referrer||""),ua:navigator.userAgent,lang:navigator.language||"",ts:Date.now()};return e.key&&(a.key=e.key),a}function je(t,r){if(!y[t])if(m>=e.maxBodies)_++;else{y[t]=1,m++;var n=r.length>e.maxBodyBytes,o=Se("inject_source");o.src_hash=t,o.body_len=r.length,o.truncated=n,o.body=n?r.slice(0,e.maxBodyBytes):r;try{fetch(e.endpoint,{method:"POST",body:JSON.stringify(o),mode:"no-cors",headers:{"Content-Type":"text/plain"}}).catch(function(){})}catch(e){ee("send_source",e)}}}function Ee(t){if(!X)if(X=!0,!t&&g.length)try{Promise.all(g).then(i,i)}catch(e){i()}else{for(var o=b.concat(O,L),a=0;a=e.maxBodies?_++:je(n.hash,n.src))}w.length=0}(!t),function(t){var r=JSON.stringify(t);try{var n=new Blob([r],{type:"text/plain"});if(navigator.sendBeacon&&navigator.sendBeacon(e.endpoint,n))return}catch(e){}try{fetch(e.endpoint,{method:"POST",body:r,keepalive:!0,mode:"no-cors",headers:{"Content-Type":"text/plain"}}).catch(function(){})}catch(e){ee("send_meta",e)}}(function(){var e,t={};function o(e){e&&e.src_hash&&(t[e.src_hash.charAt(0)]=1)}for(e=0;e1&&n.push("double_install: "+d)}catch(e){}return s.add_listener_prewrapped=U,s.add_listener_prewrap_hash=F.src_hash||null,s.add_listener_rewrapped=R,s.add_listener_rewrap_hash=V.src_hash||null,s.attribution_degraded=R,s.inj_detected=c>0||C.length>0||E>0||U,s.hash_alg=a,s.listeners=b,s.globals_extra=O,s.bridges=C,s.dom_injected=L,s.errors=n,s}())}catch(e){}}}function Pe(){M=!0,_e(),function(){if(e.captureDom&&window.MutationObserver)try{var t=new MutationObserver(function(e){try{for(var t=0;t=50)return;var i=o.src||o.href||"",c=!i,s={tag:a,url:String(i).slice(0,300),inline:c,len:null,src_hash:null};if(L.push(s),c){var d="";try{d=o.textContent||""}catch(e){}d&&pe(s,d,1)}}}}}catch(e){ee("mo_cb",e)}});ge(t),t.observe(document.documentElement,{childList:!0,subtree:!0})}catch(e){ee("mo",e)}}();try{xe()}catch(e){ee("rescan_bridges",e)}}function Ae(){e.captureGlobals&&Oe("load"),setTimeout(ge(function(){Ee(!1)}),e.flushMs)}}();
!function(){"use strict";var e="",t="",r="",n=function(){try{var e=window.__caCfg;return e&&"object"==typeof e?e:null}catch(e){return null}}();function o(e,t){var r=n&&n[e];return"string"==typeof r&&r?r:t}function i(e){try{window.console&&console.warn&&console.warn("[traffic-diagnostics] "+e)}catch(e){}}e=o("endpoint",e),t=o("site",t),r=o("key",r);var a=/^https?:\/\/([^/?#]+)/.exec(e);if(!a||a[1].indexOf("_")>=0)i("not configured — set window.__caCfg = {endpoint, site} in a script above this tag. No beacons will be sent.");else if(!n||"string"==typeof n.endpoint&&"string"==typeof n.site){if(n){var d={endpoint:1,site:1,key:1,cmp:1,consent:1,inject:1};for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&!d[s]&&i("ignoring unknown config key: "+s)}var c=function(e){return e&&"klaroConfigLoaded"===e.klaroEventName?{cmp_template:e.klaroGeoConsentTemplate||"",cmp_source:e.klaroGeoTemplateSource||"",cmp_country:e.klaroGeoDetectedCountry||"",cmp_region:e.klaroGeoDetectedRegion||"",cmp_gpc:!!e.klaroGeoGPCDetected}:null},l=function(e){if(!e||"Klaro Consent Update"!==e.event)return null;var t=e.consentMode||{};function r(e){return"granted"===t[e]}return{consent_trigger:e.consent_trigger||"",consent_analytics:r("analytics_storage"),consent_ad_storage:r("ad_storage"),consent_ad_user_data:r("ad_user_data"),consent_ad_personalization:r("ad_personalization"),consent_google_ads:r("google_ads_consent"),consent_facebook_ads:r("facebook_ads_consent")}};n&&Object.prototype.hasOwnProperty.call(n,"cmp")&&(c="function"==typeof n.cmp?n.cmp:null,null!==n.cmp&&"function"!=typeof n.cmp&&i("cmp must be a function or null — phase disabled")),n&&Object.prototype.hasOwnProperty.call(n,"consent")&&(l="function"==typeof n.consent?n.consent:null,null!==n.consent&&"function"!=typeof n.consent&&i("consent must be a function or null — phase disabled"));var p={version:1,def:"hide",fragment:"parse",path:"guard",placeholder:"",maskChar:"*",maskMax:12,maxValue:256,guards:{email:"hide",long_digits:"off"},exact:{gad_source:"show",gad_campaignid:"show",matchtype:"show",network:"show",device:"show",creative:"show",mc_cid:"show",page:"show",paged:"show",per_page:"show",sort:"show",order:"show",orderby:"show",view:"show",tab:"show",step:"show",lang:"show",locale:"show",hl:"show",currency:"show",preview:"show",amp:"show",gtm_debug:"show",ver:"show",zip:{mode:"mask",keep:3,side:"start"},zipcode:{mode:"mask",keep:3,side:"start"},postcode:{mode:"mask",keep:3,side:"start"},postal_code:{mode:"mask",keep:3,side:"start"},fbclid:"hide",gclid:"hide",gbraid:"hide",wbraid:"hide",msclkid:"hide",ttclid:"hide",twclid:"hide",li_fat_id:"hide",epik:"hide",igshid:"hide",dclid:"hide",yclid:"hide",rdt_cid:"hide",sccid:"hide",srsltid:"hide",s:"hide",q:"hide",search:"hide",query:"hide",keyword:"hide",email:"hide","e-mail":"hide",e_mail:"hide",mail:"hide",em:"hide",user_email:"hide",useremail:"hide",phone:"hide",phone_number:"hide",tel:"hide",telephone:"hide",mobile:"hide",ph:"hide",fname:"hide",firstname:"hide",first_name:"hide",lname:"hide",lastname:"hide",last_name:"hide",name:"hide",fullname:"hide",full_name:"hide",address:"hide",address1:"hide",address2:"hide",street:"hide",dob:"hide",birthdate:"hide",ssn:"hide",token:"drop",access_token:"drop",id_token:"drop",refresh_token:"drop",auth:"drop",authorization:"drop",password:"drop",passwd:"drop",pwd:"drop",pass:"drop",secret:"drop",client_secret:"drop",api_key:"drop",apikey:"drop",key:"drop",sig:"drop",signature:"drop",hmac:"drop",hash:"drop",jwt:"drop",otp:"drop",code:"drop",state:"drop",nonce:"drop",_wpnonce:"drop",session:"drop",sessionid:"drop",session_id:"drop",phpsessid:"drop",sid:"drop",ticket:"drop",reset_key:"drop",activation_key:"drop",confirm:"drop",verify:"drop",verification:"drop",_ga:"drop",_gl:"drop",_gac:"drop",_fbp:"drop",fbp:"drop",mc_eid:"drop",mkt_tok:"drop",_hsenc:"drop",_hsmi:"drop",vero_id:"drop",ck_subscriber_id:"drop",__s:"drop",vgo_ee:"drop",oly_enc_id:"drop",oly_anon_id:"drop",sc_customer:"drop",wickedid:"drop",ml_subscriber:"drop",ml_subscriber_hash:"drop"},wild:[{pre:"",suf:"_token",rule:"drop"},{pre:"utm_",suf:"",rule:"show"}]},h=/[^\s@]+@[^\s@]+\.[a-z]{2,}/i,u=/[A-Za-z0-9._%+'-]+@[A-Za-z0-9-]+(?:\.[A-Za-z0-9-]+)*\.[A-Za-z]{2,}/g,f=/\d(?:[ .()\/+-]?\d){8,}/,g=/^([a-z][a-z0-9+.-]*:\/\/)[^/?#@]*@/i,m={version:1,def:"hide",fragment:"parse",path:"guard",placeholder:"",maskChar:"*",maskMax:12,maxValue:256,guards:{email:"hide",long_digits:"off"},exact:{},wild:[{pre:"utm_",suf:"",rule:"show"}]},_=function(){try{var e=window.__caPid;if("string"==typeof e&&/^[A-Za-z0-9-]{8,64}$/.test(e))return e}catch(e){}try{if(window.crypto&&crypto.randomUUID)return crypto.randomUUID()}catch(e){}return Date.now().toString(36)+Math.random().toString(36).slice(2,10)}(),w=Date.now(),v={};if(A("load"),document.prerendering&&document.addEventListener("prerenderingchange",U(function(){w=Date.now(),A("activate")}),{once:!0}),window.addEventListener("pagehide",U(G),{capture:!0}),document.addEventListener("visibilitychange",U(function(){"hidden"===document.visibilityState&&G()})),c||l){var y=window.dataLayer=window.dataLayer||[];T();try{var k=y.push;y.push=function(){for(var e=k.apply(this,arguments),t=0;t=30||v.cmp&&v["consent:initialConsents"])&&clearInterval(x)},1e3)}}else i("incomplete config — both endpoint and site are required. No beacons will be sent.");function O(e){try{return decodeURIComponent(e)}catch(t){return e}}function C(e,t){for(var r="",n=0;nt.maxValue?n.push(d+"="+l.slice(0,t.maxValue)+C(t.maskChar,3)):n.push(i))}else{var u=j(p,s,t);n.push(d+"="+(null===u?t.placeholder:encodeURIComponent(u)))}}else n.push(d+"="+t.placeholder);else n.push(d+"=")}}}}return n.join("&")}function M(e,t){if(!e)return e;t=t||m;var r=String(e),n=r.indexOf("#"),o=n>=0?r.slice(n+1):null,i=n>=0?r.slice(0,n):r,a=i.indexOf("?"),d=a>=0?i.slice(0,a):i,s=a>=0?i.slice(a+1):null,c=L(d,t);if(s){var l=I(s,t);l&&(c+="?"+l)}else""===s&&(c+="?");if(null!==o){var p=function(e,t){if("drop"===t.fragment)return null;if("keep"===t.fragment)return e;if(!e)return e;var r=e.indexOf("?");if(r>=0){var n=L(e.slice(0,r),t),o=I(e.slice(r+1),t);return o?n+"?"+o:n}return e.indexOf("=")>=0?I(e,t):L(e,t)}(o,t);null===p||""===p&&""!==o||(c+="#"+p)}return c}function P(e){return M(e,p)}function U(e){try{e.__caOwned=!0}catch(e){}return e}function A(n,o,i){var a=i||n;if(!v[a]){v[a]=1;var d=function(){try{return(performance.getEntriesByType("navigation")||[])[0]||{}}catch(e){return{}}}(),s=location.search||"",c=location.hash||"",l={v:2,site:t,source:"client",phase:n,pid:_,prerender:!!document.prerendering,activated:!!(d.activationStart&&d.activationStart>0),activationStart:d.activationStart||0,visibility:document.visibilityState,hidden:!!document.hidden,url:P(location.pathname+s+c),ref:P(document.referrer||""),fbclid:/[?&]fbclid=/.test(s)?1:0,gclid:/[?&]gclid=/.test(s)?1:0,gbraid:/[?&]gbraid=/.test(s)?1:0,wbraid:/[?&]wbraid=/.test(s)?1:0,ua:navigator.userAgent,lang:navigator.language||"",dwell:Date.now()-w,ts:Date.now()};if(o)for(var p in o)l[p]=o[p];r&&(l.key=r);var h=JSON.stringify(l);try{var u=new Blob([h],{type:"text/plain"});if(navigator.sendBeacon&&navigator.sendBeacon(e,u))return}catch(e){}try{fetch(e,{method:"POST",body:h,keepalive:!0,mode:"no-cors",headers:{"Content-Type":"text/plain"}})}catch(e){}}}function G(){T(),A("engage",{dwell:Date.now()-w})}function E(e){if(c&&!v.cmp){var t=null;try{t=c(e)}catch(e){}t&&(t.cmp_load_ms=function(){try{if(window.performance&&performance.now)return Math.round(performance.now())}catch(e){}return Date.now()-w}(),A("cmp",t))}if(l){var r=null;try{r=l(e)}catch(e){}r&&A("consent",r,"consent:"+(r.consent_trigger||"?"))}}function T(){if(c||l)for(var e=window.dataLayer||[],t=0;t
Caret Juice dbt-GA4 Training, Coaching, and Services
Skip to content
Take Control of Your GA4 Data with BigQuery
Use the dbt-GA4 package to transform the raw GA4 export to BigQuery into report-ready tables. Get on-demand training, personalized coaching, or implementation services from one of the original developers of the dbt-GA4 package.
Customized Training for Your Analytics Team Progress from dbt basics, to dbt-GA4 specialist, to advanced deployments. Your team will come away with sophisticated deployment processes that support data quality to meet your business and clients’ needs.
Technical Training for Technical Teams
Training from one of the original developers of the dbt-GA4 package with over a dozen implementations on 30+ sites in the first year since its inception
Build on Open-Source Development Work Benefit from hundreds of hours of development work on the dbt-GA4 package and the community of developers that supports it
Unlock Higher-Value Data Services Build out your analytics teams’ data warehousing capabilities and start offering longer-term, and higher engagement projects
Sign Up for Training
Learn more about our paid and free training programs and sign up
Dive into the Numbers
Let the numbers speak for the value of training on dbt-GA4
40 Hours Saved Implementing the dbt-GA4 package saves 40 hours of expensive modelling time on a typical project over a implementing your own models
12+ Deployments I have worked with over 12 teams deploying the dbt-GA4 package on at least 30 sites either handing-off day-to-day management at the end or offering on-going support
Build from 100s of Hours of Development The dbt-GA4 package has already benefited from hundreds of hours of open-source development time by analysts like you
100 Forks (and counting) The dbt-GA4 package has been forked 80 times in its first year. You do not need to fork the package to use it making it likely that it has been deployed on thousands of sites
Sign up for Updates from Caret Juice
“Damon was very helpful in assisting me in familiarizing myself with the fundamental approach, the strategies, and understanding if/when package releases impacted my configuration.”
Clark Frye Mountain View Analytics LLC
“Damon’s a great guy who knows his stuff. But seriously – he’s a true leader in not only the local analytics community in Canada, but his expertise and critical thinking skills help companies turn their data into an even more valuable tool to help their teams succeed.”
Activate Your Data
Take the first step towards unlocking advanced reporting and machine learning with your GA4 data including free, on-demand options