@thg-agentic/hyper-personalisation-web 3.29.0 → 3.31.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # @thg-agentic/hyper-personalisation-web
2
2
 
3
3
  The browser SDK for THG Hyper-Personalisation, a customer data platform. It implements the event
4
- specification (spec 1.21, stamped on every event as `context.spec.version`) for any storefront: it
4
+ specification (spec 1.22, stamped on every event as `context.spec.version`) for any storefront: it
5
5
  sends events in the Segment wire format, applies consent strictly whichever CMP the site uses, reads
6
6
  the GA4 `dataLayer` the site already pushes to, and has no runtime dependencies.
7
7
 
@@ -582,6 +582,22 @@ audiences still hold. Asked for twice while it opens, it opens once. With the pr
582
582
  shows until that long after the last one this session (1440 is once per session); bars, teasers and
583
583
  inline forms are never held back. A form with `audiences` needs personalisation consent.
584
584
 
585
+ **Answers (3.31).** Under personalisation consent the client keeps what the shopper answered this
586
+ property's forms, `thg_hp_answers:<property>` in localStorage: the latest answer to each choice
587
+ question (its key and the option values chosen; never a date, a number, typed text or contact
588
+ data), each for 90 days from when it was given, written from a quiz's `Preferences Stated` (so only with analytics consent too) and a
589
+ sign-up form's answers once the gateway took them. A form limited to
590
+ an early audience, one whose every rule is an answer or about the visit, is then decided from those
591
+ answers with the visit, so it shows on the next page view without waiting for the warehouse. The
592
+ datafile ships it as a MIXED audience (`rules` its visit rules) with `early: true` and its
593
+ `answer_rules`: `answer.<question>` with `in` (is one of), `not_in` (is none of; holds with no
594
+ answer kept) or `all` (includes all of) and a list of answers. The runtime sends the early audiences
595
+ that hold on the kept answers as `answered_audiences`. The answers go when personalisation is
596
+ refused or withdrawn, at a sign-out and when another user signs in. Anywhere else (the page's own
597
+ `./session`, which carries no answers, an answer given on another device, an earlier SDK) an early
598
+ audience is MIXED: met where the warehouse qualified the shopper on its answers and its visit rules
599
+ hold, from the next profile update.
600
+
585
601
  **Arrived from.** A form with `arrived_from` shows only to a visit that landed from a matching
586
602
  campaign: `[{ field, match, values }]`, `field` one of `source`, `medium`, `campaign`, `content`,
587
603
  `term` (the link's `utm_*` tags), `match` `is` or `contains`, compared trimmed and in any case.
@@ -698,7 +714,7 @@ each form did or did not show, and a preview link (`?hp_preview=`) counts nothin
698
714
  (about 15.7 KiB), so a page that shows a form loads about 22.3 KiB of onsite code and one whose
699
715
  forms never fire about 6.6 KiB; `onsite-wheel.min.js` under 8 KiB (about 1.8 KiB),
700
716
  `onsite-answers.min.js` under 2 KiB (about 1.5 KiB), `onsite-products.min.js` under 2.6 KiB (about
701
- 2.5 KiB), `onsite-audiences.min.js` under 1.44 KiB (about 1.4 KiB). The core carries only the loader.
717
+ 2.5 KiB), `onsite-audiences.min.js` under 1.63 KiB (about 1.61 KiB). The core carries only the loader.
702
718
 
703
719
  **Products in a form.** A creative's `products` block (ADR 0064 as amended 2026-11-02) is filled by
704
720
  the public API in the decision that serves the form, as the block's `served`. For a form whose
@@ -1117,6 +1133,7 @@ SDK per page.
1117
1133
  | `debug` | `thg_hp_debug` | sessionStorage | a developer's debug token from `?hp_debug=` (3.18), checked against the settings on every page |
1118
1134
  | `onsite` | `thg_hp_onsite:<property>` | localStorage, sessionStorage | onsite forms' opaque counters per slot and a subscribed flag; never contact data (see [Onsite forms](#onsite-forms)) |
1119
1135
  | `visitCampaign` | `thg_hp_visit_campaign:<property>` | localStorage | the campaign tags the visit landed with, when it was last active and its session id once kept; ended with the session (see [Onsite forms](#onsite-forms)) |
1136
+ | `answers` | `thg_hp_answers:<property>` | localStorage | the latest answer to each question of the property's onsite forms, 90 days each; only while personalisation is granted, gone at a sign-out (3.31, see [Onsite forms](#onsite-forms)) |
1120
1137
  | — | `thg_hp_conformance_page_type` | sessionStorage | the previous page's type, only while the development-only conformance checker runs |
1121
1138
 
1122
1139
  Keys are scoped by property because one origin can serve several tenants. The names the SDK used
package/dist/hp.min.js CHANGED
@@ -1,3 +1,3 @@
1
- (()=>{var Sn=e=>{throw TypeError(e)};var lo=(e,t,n)=>t.has(e)||Sn("Cannot "+n);var _n=(e,t,n)=>t.has(e)?Sn("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,n);var L=(e,t,n)=>(lo(e,t,"access private method"),n);var Ee=[];for(let e=2;Ee.length<64;e++)Ee.every(t=>e%t!==0)&&Ee.push(e);var bn=e=>(e-Math.floor(e))*2**32>>>0,fo=Ee.slice(0,8).map(e=>bn(Math.sqrt(e))),po=Ee.map(e=>bn(Math.cbrt(e))),Q=(e,t)=>e>>>t|e<<32-t;function In(e){let t=new TextEncoder().encode(String(e)),n=new Uint32Array((t.length+8>>6)*16+16);t.forEach((s,i)=>{n[i>>2]|=s<<24-i%4*8}),n[t.length>>2]|=128<<24-t.length%4*8,n[n.length-2]=Math.floor(t.length/2**29),n[n.length-1]=t.length*8;let r=Uint32Array.from(fo),o=new Uint32Array(64);for(let s=0;s<n.length;s+=16){for(let w=0;w<64;w++){if(w<16){o[w]=n[s+w];continue}let k=o[w-15],b=o[w-2],x=Q(k,7)^Q(k,18)^k>>>3,h=Q(b,17)^Q(b,19)^b>>>10;o[w]=o[w-16]+x+o[w-7]+h}let[i,u,c,l,f,p,m,A]=r;for(let w=0;w<64;w++){let k=Q(f,6)^Q(f,11)^Q(f,25),b=A+k+(f&p^~f&m)+po[w]+o[w]|0,h=(Q(i,2)^Q(i,13)^Q(i,22))+(i&u^i&c^u&c)|0;[A,m,p,f,l,c,u,i]=[m,p,f,l+b|0,c,u,i,b+h|0]}[i,u,c,l,f,p,m,A].forEach((w,k)=>{r[k]+=w})}return Array.from(r,s=>s.toString(16).padStart(8,"0")).join("")}var It=(e,t)=>e<<t|e>>>32-t;function kn(e){let t=new Uint32Array((e.length+8>>6)*16+16);e.forEach((s,i)=>{t[i>>2]|=s<<24-i%4*8}),t[e.length>>2]|=128<<24-e.length%4*8,t[t.length-2]=Math.floor(e.length/2**29),t[t.length-1]=e.length*8;let n=Uint32Array.of(1732584193,4023233417,2562383102,271733878,3285377520),r=new Uint32Array(80);for(let s=0;s<t.length;s+=16){for(let p=0;p<80;p++)r[p]=p<16?t[s+p]:It(r[p-3]^r[p-8]^r[p-14]^r[p-16],1);let[i,u,c,l,f]=n;for(let p=0;p<80;p++){let m,A;p<20?(m=u&c|~u&l,A=1518500249):p<40?(m=u^c^l,A=1859775393):p<60?(m=u&c|u&l|c&l,A=2400959708):(m=u^c^l,A=3395469782);let w=It(i,5)+m+f+A+r[p]|0;[f,l,c,u,i]=[l,c,It(u,30),i,w]}[i,u,c,l,f].forEach((p,m)=>{n[m]+=p})}let o=new Uint8Array(20);return n.forEach((s,i)=>{o[i*4]=s>>>24,o[i*4+1]=s>>>16,o[i*4+2]=s>>>8,o[i*4+3]=s}),o}var mo="e28e8ada-5b76-4209-bba9-79b823a0af75",ho=e=>Array.from(e,t=>t.toString(16).padStart(2,"0")).join("");function xn(e,t){let n=Uint8Array.from(e.replace(/-/g,"").match(/../g),u=>Number.parseInt(u,16)),r=new TextEncoder().encode(t),o=new Uint8Array(16+r.length);o.set(n),o.set(r,16);let s=kn(o).slice(0,16);s[6]=s[6]&15|80,s[8]=s[8]&63|128;let i=ho(s);return`${i.slice(0,8)}-${i.slice(8,12)}-${i.slice(12,16)}-${i.slice(16,20)}-${i.slice(20)}`}var ue=(e,t)=>typeof e=="string"&&e!==""&&e.length<=t?e:null;function Fe(e,t){return ue(e,64)??ue(t,256)}function An({sessionId:e,slot:t,arm:n}={}){let r=ue(e,256);return!r||!ue(t,256)||!ue(n,256)?null:xn(mo,`${r}:${t}:${n}`)}var go="4b1f2c7e-9a3d-4e58-b6c1-2d7f0a9e8c53";function vn({sessionId:e,surface:t}={}){let n=ue(e,256);return!n||!ue(t,64)?null:xn(go,`${n}:${t}`)}var yo=Array.from({length:11},(e,t)=>t/10);function wo(e,t){if(!e.isIntersecting)return!1;let{intersectionRect:n,boundingClientRect:r,rootBounds:o}=e;if(!n||!r)return!0;let s=n.width*n.height,i=r.width*r.height,u=o?Math.min(i,o.width*o.height):i;return u>0&&s/u>=t}function re(e){let{selector:t,onViewable:n,visibleRatio:r=.5,dwellMs:o=1e3,root:s=document}=e,i=new Map,u=new WeakSet,c=new Set,l=h=>{i.has(h)||i.set(h,setTimeout(()=>{i.delete(h),n(h)&&(p?.unobserve(h),c.delete(h))},o))},f=h=>{clearTimeout(i.get(h)),i.delete(h)},p=typeof IntersectionObserver>"u"?null:new IntersectionObserver(h=>{for(let E of h){let S=E.target;if(!wo(E,r)){c.delete(S),f(S);continue}c.add(S),m()&&l(S)}},{threshold:yo}),m=()=>typeof document>"u"||document.visibilityState!=="hidden",A=()=>{if(m())for(let h of c)l(h);else for(let h of c)f(h)};document.addEventListener("visibilitychange",A);let w=()=>{for(let h of s.querySelectorAll(t))u.has(h)||(u.add(h),p?.observe(h))},k=typeof MutationObserver>"u"?null:new MutationObserver(()=>w()),b=()=>{w(),k?.observe(s===document?document.body:s,{childList:!0,subtree:!0})},x=s===document&&!document.body;return x?document.addEventListener("DOMContentLoaded",b,{once:!0}):b(),()=>{x&&document.removeEventListener("DOMContentLoaded",b),document.removeEventListener("visibilitychange",A),p?.disconnect(),k?.disconnect();for(let h of i.values())clearTimeout(h);i.clear(),c.clear()}}function kt(e,t={}){if(typeof window>"u"||typeof document>"u")return()=>{};let{selector:n="[data-hp-exposure]",visibleRatio:r=.5,dwellMs:o=1e3,root:s=document}=t;return re({selector:n,root:s,visibleRatio:r,dwellMs:o,onViewable(i){let u=i.dataset?.hpExposure?.trim();return u&&e.surfaceViewed({surface:u}),!0}})}var En=e=>{try{return new URL(e,document.baseURI).toString()}catch{return e}};function xt(e,t={}){if(typeof window>"u"||typeof document>"u")return()=>{};let{selector:n="[data-hp-list]",tileSelector:r="[data-hp-product]",visibleRatio:o=.5,dwellMs:s=1e3,root:i=document}=t,u=new Set,c=w=>w.closest?.(n)??null,l=w=>{let k=w.dataset.hpList?.trim();return k?{list_id:k,category:w.dataset.hpListCategory?.trim()||null}:null},f=w=>Array.from(w.querySelectorAll(r)).filter(k=>c(k)===w),p=(w,k)=>{try{let b=JSON.parse(w.dataset.hpProduct??"");return!b||typeof b!="object"||!b.product_id?null:{...b,position:b.position??k+1,...b.url?{url:En(b.url)}:{},...b.image_url?{image_url:En(b.image_url)}:{}}}catch{return null}},m=re({selector:`${n} ${r}`,root:i,visibleRatio:o,dwellMs:s,onViewable(w){let k=c(w);if(!k||k.dataset.hpListView==="manual")return!0;let b=l(k);if(!b||u.has(b.list_id))return!0;let x=new Set,h=f(k).map(p).filter(E=>!E||x.has(E.product_id)?!1:(x.add(E.product_id),!0));return h.length===0||(u.add(b.list_id),e.productListViewed({...b,products:h})),!0}}),A=w=>{let b=w.target?.closest?.("a[href]")?.closest(r);if(!b)return;let x=c(b),h=p(b,x?f(x).indexOf(b):0);h&&e.productClicked({list_id:x?l(x)?.list_id??null:null,products:[h]})};return document.addEventListener("click",A,!0),()=>{document.removeEventListener("click",A,!0),m()}}function D(e,...t){let n=e.dataset??{};for(let r of t){let o=n[r];if(typeof o=="string"&&o.trim()!=="")return o.trim()}return null}function qe(e,...t){let n=D(e,...t);if(n===null)return null;let r=Number(n);return Number.isFinite(r)?Math.trunc(r):null}function So(e,t){let n=D(e,"hpPromotion");return n?{promotion_id:n,name:D(e,"hpPromotionName"),creative:D(e,"hpPromotionCreative"),position:D(e,"hpPromotionSlot")??String(t+1)}:null}function At(e,t={}){if(typeof window>"u"||typeof document>"u")return()=>{};let{selector:n="[data-hp-promotion]",resolve:r=So,visibleRatio:o=.5,dwellMs:s=1e3,root:i=document}=t,u=new Set,c=p=>{let m=Array.from(i.querySelectorAll(n)),A=m.indexOf(p);try{return r(p,A<0?m.length:A)}catch{return null}},l=re({selector:n,root:i,visibleRatio:o,dwellMs:s,onViewable(p){let m=c(p);return!m||u.has(m.promotion_id)?!1:(u.add(m.promotion_id),e.promotionViewed(m),!0)}}),f=p=>{let m=p.target;if(!m||typeof m.closest!="function")return;let A=m.closest(n),w=m.closest("a[href]");if(!A||!w||!A.contains(w)&&!w.contains(A))return;let k=c(A);k&&e.promotionClicked({...k,href:w.getAttribute("href")})};return document.addEventListener("click",f,!0),()=>{document.removeEventListener("click",f,!0),l()}}function _o(e){let t=D(e,"hpRecoRequest"),n=D(e,"hpRecoPlacement"),r=D(e,"hpRecoStrategy");if(!t||!n||!r)return null;let o=D(e,"hpRecoHoldout");return{recommendation_request_id:t,placement:n,strategy:r,recipe:D(e,"hpRecoRecipe"),algorithm_version:D(e,"hpRecoAlgorithmVersion"),experiment:D(e,"hpRecoExperiment"),variant:D(e,"hpRecoVariant"),holdout:o===null?null:o==="true",assignment_bucket:qe(e,"hpRecoBucket"),assignment_unit_kind:D(e,"hpRecoUnitKind"),candidate_set_fingerprint:D(e,"hpRecoFingerprint"),candidate_set_size:qe(e,"hpRecoCandidates"),ranked_by:D(e,"hpRecoRankedBy"),served_at:D(e,"hpRecoServedAt")}}function bo(e,t){let n=D(e,"hpRecoProduct");if(!n)return null;let r=D(e,"hpRecoPrice");return{product_id:n,sku:D(e,"hpRecoSku"),name:D(e,"hpRecoName"),brand:D(e,"hpRecoBrand"),price:r===null||Number.isNaN(Number(r))?null:Number(r),position:qe(e,"hpRecoPosition")??t+1}}function vt(e,t={}){if(typeof window>"u"||typeof document>"u")return()=>{};let{selector:n="[data-hp-reco-request]",tileSelector:r="[data-hp-reco-product]",resolveRail:o=_o,resolveTile:s=bo,visibleRatio:i=.5,dwellMs:u=1e3,root:c=document}=t,l=new Set,f=new Map,p=new Map,m=(h,...E)=>{try{return h(...E)}catch{return null}},A=h=>typeof h.closest=="function"?h.closest(n):null,w=h=>Array.from(h.querySelectorAll(r)),k=(h,E)=>{if(p.delete(E.recommendation_request_id),l.has(E.recommendation_request_id))return;let S=w(h).map((y,O)=>m(s,y,O)).filter(y=>y?.product_id);if(S.length===0)return;l.add(E.recommendation_request_id);let g=[...f.get(E.recommendation_request_id)?.values()??[]].sort((y,O)=>y.position-O.position);e.recommendationsViewed({...E,products:S,viewable:g})},b=re({selector:`${n} ${r}`,root:c,visibleRatio:i,dwellMs:u,onViewable(h){let E=A(h);if(!E)return!0;let S=m(o,E);if(!S)return!0;let g=S.recommendation_request_id,y=m(s,h,w(E).indexOf(h));if(y?.product_id){f.has(g)||f.set(g,new Map);let O=f.get(g);O.has(y.position)||O.set(y.position,{position:y.position,product_id:y.product_id,viewable_at:new Date().toISOString()})}return!l.has(g)&&!p.has(g)&&p.set(g,setTimeout(()=>k(E,S),0)),!0}}),x=h=>{let E=h.target;if(!E||typeof E.closest!="function")return;let S=E.closest(r);if(!S)return;let g=E.closest("[data-hp-reco-interaction]"),y=E.closest("a[href]"),O=y&&(S.contains(y)||y.contains(S));if(!(g&&S.contains(g))&&!O)return;let N=A(S);if(!N)return;let U=m(o,N);if(!U)return;let G=m(s,S,w(N).indexOf(S));if(!G?.product_id)return;let q=U.recommendation_request_id;l.has(q)||(clearTimeout(p.get(q)),k(N,U)),e.productClicked({recommendation_request_id:U.recommendation_request_id,interaction:D(g??S,"hpRecoInteraction")??"navigate",products:[G]})};return document.addEventListener("click",x,!0),()=>{document.removeEventListener("click",x,!0);for(let h of p.values())clearTimeout(h);p.clear(),b()}}var _e=new Set(["home","list","product","search","basket","checkout","order_confirmation","login","register","account","info","blog","other"]),Io=new Set(["products"]),Cn=e=>e==null;function Et(e,t=new WeakSet){if(e instanceof Date)return e.toJSON();if(e===null||typeof e!="object"||t.has(e))return e;t.add(e);let n=Array.isArray(e)?e.map(r=>Et(r,t)):Object.fromEntries(Object.entries(e).filter(([,r])=>!Cn(r)).map(([r,o])=>[r,Et(o,t)]));return t.delete(e),n}function Ct(e){if(!e)return e;let t=Et(e);for(let n of Io)n in e&&Cn(e[n])&&(t[n]=e[n]);return t}function Pn(){try{let e=performance.getEntriesByType("navigation")[0];return e?["navigate","reload","back_forward","prerender"].includes(e.type)?e.type:"navigate":null}catch{return null}}var ko=new Set(["","unknown","undefined","null","none","nil","nan","anonymous","guest","0","-1"]);function F(e){if(e==null)return null;let t=String(e).trim();return ko.has(t.toLowerCase())?null:t}var Ce=e=>typeof e=="string"&&e!==""?e:null;function oe(){return typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{let t=Math.random()*16|0;return(e==="x"?t:t&3|8).toString(16)})}var On="1.21";function j(e){if(typeof document>"u")return null;try{let t=document.cookie.split(";").map(n=>n.trim()).find(n=>n.startsWith(`${e}=`));return t&&decodeURIComponent(t.slice(e.length+1))||null}catch{return null}}var xo={gclid:"gclid",fbclid:"fbclid",ttclid:"ttclid"},Ao=/[a-z0-9._%+-]+@[a-z0-9-]+(\.[a-z0-9-]+)*\.[a-z]{2,}/i,vo=/\d(?:[ -]?\d){12,}/,Eo=new Set(["gclid","fbclid","ttclid","msclkid"]);function Tn(e,t=""){if(typeof e!="string"||e==="")return!1;let n=[e];try{let o=decodeURIComponent(e.replace(/\+/g," "));o!==e&&n.push(o)}catch{}let r=!Eo.has(String(t).toLowerCase());return n.some(o=>Ao.test(o)||r&&vo.test(o))}function Ot(e){if(!e)return null;let t=new URLSearchParams(e),n={},r={utm_source:"source",utm_medium:"medium",utm_campaign:"name",utm_term:"term",utm_content:"content"};for(let[o,s]of[...Object.entries(r),...Object.entries(xo)]){let i=t.get(o);i&&!Tn(i,o)&&(n[s]=i)}return Object.keys(n).length?n:null}var Co=["email","e-mail","password","pass","pwd","token","auth","code","uid","customer_id","postcode","zip","phone","applyCode"],Po=["email","password","passwd","pwd","token","secret","auth","session","phone","postcode","zip","address","birth","card","cvv","iban","ssn","customerid","userid"],Oo=["tel","uid","dob"],Lo=["utm_source","utm_medium","utm_campaign","utm_term","utm_content","gclid","fbclid","ttclid","msclkid"],To=new Set(Co.map(e=>e.toLowerCase()));function No(e){let t=String(e).toLowerCase();if(To.has(t))return!0;let n=t.replace(/[-_.]/g,"");return Po.some(o=>n.includes(o))?!0:String(e).replace(/([a-z0-9])([A-Z])/g,"$1 $2").toLowerCase().split(/[^a-z0-9]+/).some(o=>Oo.includes(o))}function Pt(e){return(e??[]).map(t=>{try{return new RegExp(`^${t}$`,"i")}catch{return{test:n=>n.toLowerCase()===String(t).toLowerCase()}}})}function Nn(e,t={}){if(!e)return null;try{let n=new URLSearchParams(e),r=t.queryParamAllowlist?Pt([...t.queryParamAllowlist,...Lo]):null,o=Pt(t.queryParamBlocklist),s=Pt(t.sensitiveParamAllowlist);for(let u of new Set(n.keys()))(No(u)&&!s.some(l=>l.test(u))||n.getAll(u).some(l=>Tn(l,u))||(r?!r.some(l=>l.test(u)):o.some(l=>l.test(u))))&&n.delete(u);let i=n.toString();return i?`?${i}`:""}catch{return""}}function Rn(e,t,n={}){if(!e)return null;try{let r=new URL(e);return t&&r.origin===t?r.origin+r.pathname+(Nn(r.search,n)??""):r.origin+r.pathname}catch{return null}}function Lt(e,t={}){if(typeof e!="string"||typeof location>"u")return null;try{let n=new URL(e,location.href);return n.protocol!=="https:"&&n.protocol!=="http:"?null:Rn(n.href,location.origin,t)}catch{return null}}function Tt(e){if(typeof e!="string")return null;let t=e.trim().toUpperCase();return/^[A-Z]{3}$/.test(t)?t:null}function Ln(e){if(typeof e!="string")return null;let t=e.trim().toUpperCase();return/^[A-Z]{2}$/.test(t)?t:null}function Nt(e){if(typeof e!="string")return null;let t=e.trim().replace(/_/g,"-");if(!/^[A-Za-z]{2,3}(-[A-Za-z0-9]{2,8})*$/.test(t))return null;try{return Intl.getCanonicalLocales(t)[0]}catch{return null}}function M(e,t){if(typeof e=="function")try{let n=e();if(n!=null)return n}catch{}return t}function Ro(e){return{...e.propertyId==null?{}:{property_id:String(e.propertyId)},channel:e.channel??null,market:e.market??null,environment:e.environment??null}}function Mo(e){let t=typeof window<"u"?window.location:null,n=t?Nn(t.search,e):null;return{url:t?t.origin+t.pathname+(n??""):e.pageUrl??null,path:t?t.pathname:e.pagePath??null,search:n??null,referrer:typeof document<"u"?Rn(document.referrer,t?.origin,e):null,title:typeof document<"u"&&document.title||null,type:e.pageType??null}}var Pe;function Do(){if(Pe!==void 0)return Pe;try{Pe=globalThis.Temporal?.Now?.timeZoneId?.()||Intl.DateTimeFormat().resolvedOptions().timeZone||null}catch{Pe=null}return Pe}function Mn(e,t={}){let n=typeof window<"u"?window.location:null,r={library:{name:e.libraryName,version:e.libraryVersion},spec:{version:On},source:Ro(e),session_id:M(e.getSessionId,null),identity_trust:F(M(e.getAnonymousId,null))?"device":"none",page:Mo(e),campaign:n?Ot(n.search):null,device:{user_agent:typeof navigator<"u"?navigator.userAgent:null,type:null,viewport_width:typeof window<"u"?window.innerWidth:null,viewport_height:typeof window<"u"?window.innerHeight:null},currency:Tt(M(e.getCurrency,e.currency)),locale:Nt(M(e.getLocale,e.locale)),timezone:Do(),country:Ln(e.country),ship_to_country:Ln(M(e.getShipToCountry,e.shipToCountry)),ip:null,bot:null,consent:e.getConsent?.()??null,experiments:M(e.getExperiments,null),audiences:M(e.getAudiences,null),decisions:M(e.getDecisions,null),recommendations:M(e.getRecommendations,null),extensions:M(e.getExtensions,null)};return Dn(r,t)}function Dn(e,t){if(!t)return e;let n={...e};for(let[r,o]of Object.entries(t))o&&typeof o=="object"&&!Array.isArray(o)&&e[r]&&typeof e[r]=="object"&&!Array.isArray(e[r])?n[r]=Dn(e[r],o):o!==void 0&&(n[r]=o);return n}var fe=Object.freeze({consent:"thg_hp_consent",retry:"thg_hp_retry",sessionSignals:"thg_hp_session_signals",identified:"thg_hp_identified",previousPage:"thg_hp_prev_page",decisions:"thg_hp_decisions",settings:"thg_hp_settings",held:"thg_hp_held",carried:"thg_hp_carried",recommendationContext:"thg_hp_recommendation_context",anonymousId:"thg_hp_anonymous_id",session:"thg_hp_session",preview:"thg_hp_preview",debug:"thg_hp_debug",onsite:"thg_hp_onsite",visitCampaign:"thg_hp_visit_campaign"}),Uo={retry:"cdp.retry",sessionSignals:"cdp_session_signals",identified:"cdp_identified",previousPage:"cdp_prev_page_message_id"},Rt={...fe},Un=!1;function Ke(e){let t={...fe};for(let[n,r]of Object.entries(e??{})){if(!(n in fe))throw new Error(`storageNames: unknown kind "${n}"`);if(typeof r!="string"||!/^[\w.-]+$/.test(r))throw new Error(`storageNames.${n} must be a non-empty cookie-safe name`);t[n]=r}Rt=t}function P(e){return Rt[e]}var Vo="_",Vn=e=>e==null||e===""?Vo:String(e);function $(e,t,n){let r=`${e}:${Vn(t)}`;return n==null||n===""?r:`${r}:${n}`}function $n(e,t){return`${e}:${Vn(t)}:`}function Ge(){if(!Un){Un=!0;for(let e of[()=>localStorage,()=>sessionStorage]){let t;try{if(t=e(),!t)continue;for(let n of Object.keys(t))for(let[r,o]of Object.entries(Uo)){if(n!==o&&!n.startsWith(`${o}:`))continue;let s=Rt[r]+n.slice(o.length);t.getItem(s)===null&&t.setItem(s,t.getItem(n)),t.removeItem(n)}}catch{}}}}var Dt=1800*1e3,ze=()=>{try{return typeof sessionStorage>"u"?null:sessionStorage}catch{return null}},Mt=()=>{try{return typeof localStorage>"u"?null:localStorage}catch{return null}};function Bn(e,t=()=>Date.now()){return{read(){try{let n=ze()?.getItem(e),r=n?JSON.parse(n):null;return!r||t()-r.savedAt>Dt?(r&&ze()?.removeItem(e),{items:[],anonymousId:null}):{items:Array.isArray(r.items)?r.items:[],anonymousId:typeof r.anonymousId=="string"?r.anonymousId:null}}catch{return{items:[],anonymousId:null}}},write(n,r=null){try{n.length===0?ze()?.removeItem(e):ze()?.setItem(e,JSON.stringify({savedAt:t(),items:n,anonymousId:r}))}catch{}}}}var $o=400*24*60*60;function se(e,t,n,r){if(typeof document>"u")return!1;try{let o=typeof location<"u"&&location.protocol==="https:"?"; Secure":"",s=r?`; Domain=${r}`:"",i=n===null?"":`; Max-Age=${n}`;return document.cookie=`${e}=${encodeURIComponent(t)}; Path=/${i}; SameSite=Lax`+s+o,!0}catch{return!1}}function Bo({name:e,domain:t=null,legacyKey:n,read:r,mint:o,mayStore:s,carried:i=null}){let u=null;try{u=Mt()?.getItem(n)||null}catch{u=null}let c=r(e)??u??i,l=!1,f=()=>{if(!(l||c===null||!s())&&(l=se(e,c,$o,t),!(!l||u===null)))try{Mt()?.removeItem(n),u=null}catch{}};return{get(){return c??(c=o()),f(),c},peek:()=>c,persist:f,forget(){se(e,"",0,t),c=null,l=!1;try{Mt()?.removeItem(n)}catch{}u=null}}}function jn(e,{carried:t=null,mayStore:n,orOwn:r=!1}){let o=e.anonymousIdSource,s=()=>Bo({name:P("anonymousId"),domain:e.consentCookieDomain??null,legacyKey:$(P("anonymousId"),e.propertyId),read:j,mint:oe,mayStore:n,carried:t});if(o?.source==="hp_cookie"){let c=s();return e.getAnonymousId=()=>c.get(),c}if(o?.source==="site_cookie"&&o.cookie){let c=o.cookie;e.getAnonymousId=()=>j(c)}if(!r)return null;let i=e.getAnonymousId,u=s();return e.getAnonymousId=()=>F(M(i,null))??u.get(),u}var jo=200;function Hn(e,t,n=()=>Date.now()){let r=()=>$(P("carried"),e),o=!1;function s(){try{let i=JSON.parse(sessionStorage.getItem(r())??"null");return!i||!(n()-i.savedAt<=Dt)?[]:Array.isArray(i.calls)?i.calls:[]}catch{return[]}}return{take(){let i=s();try{sessionStorage.removeItem(r())}catch{}return i},save(i){try{return o||!t()?!1:(sessionStorage.setItem(r(),JSON.stringify({savedAt:n(),calls:[...s(),...i].slice(-jo)})),!0)}catch{return!1}},close(){o=!0}}}var ma=fe.consent,We=Object.freeze({visitor:"visitor",host:"host"}),qn=()=>({basis:We.host}),Ho="hp-consent",pe=["analytics","marketing","personalisation","ad_user_data","ad_personalization"],Kn={analytics:"a",marketing:"m",personalisation:"p",ad_user_data:"aud",ad_personalization:"adp"},ne=()=>typeof window<"u",Gn=()=>ne()&&typeof window.cookieStore?.addEventListener=="function",Fo=e=>e===!0?!0:e===!1?!1:null;function be(e){if(!e||typeof e!="object")return null;let t={};for(let n of pe)t[n]=Fo(e[n]);return t}function Ut(e,t){return!e||!t?e===t:pe.every(n=>e[n]===t[n])}function Vt(e){if(!e)return"";let t=[];for(let n of pe){let r=e[n];(r===!0||r===!1)&&t.push(`${Kn[n]}=${r?1:0}`)}return t.join("&")}function $t(e){return{[Ho]:Vt(be(e))}}function Oe(e){let t=be({});if(e==null)return t;let n=String(e).trim();if(n.length>=2&&n.startsWith('"')&&n.endsWith('"')&&(n=n.slice(1,-1)),n.includes("%"))try{n=decodeURIComponent(n.replace(/\+/g," "))}catch{return t}let r=Object.fromEntries(Object.entries(Kn).map(([s,i])=>[i,s])),o=new Set;for(let s of n.split("&")){let i=s.indexOf("=");if(i<=0)continue;let u=r[s.slice(0,i).trim()],c={1:!0,0:!1}[s.slice(i+1).trim()]??null;!u||c===null||o.has(u)||(t[u]===null?t[u]=c:t[u]!==c&&(t[u]=null,o.add(u)))}return t}function Bt(e,t){if(!t)return e;let n=r=>{if(!r)return r;let o={...r};for(let s of pe)s!=="analytics"&&t[s]!==!0&&(o[s]=null);return o};return{name:e.name,basis:e.basis,read:()=>n(e.read()),subscribe:r=>e.subscribe(o=>r(n(o))),get observesChanges(){return e.observesChanges}}}function jt(e,t={}){return{...e,ad_user_data:t.ad_user_data??e.marketing,ad_personalization:t.ad_personalization??e.marketing}}function Je(e,t){let n=!0;return{notify:()=>{if(n)try{let o=e();o&&t(o)}catch{}},stop:()=>n=!1}}var qo={analytics:["analytics","measure_content_performance","audience_measurement"],marketing:["marketing","targeting","advertising","select_personalized_ads","create_ads_profile"],personalisation:["personalisation","personalization","select_personalized_content","create_content_profile"]};function Ko(e,t){if(!t?.length)return null;let n=!1;for(let[r,o]of Object.entries(e)){let s=String(o?.id??r).toLowerCase();if(t.some(u=>{let c=String(u).toLowerCase();return s===c||s.startsWith(`${c}-`)})&&(n=!0,o?.enabled===!0))return!0}return n?!1:null}function zn(e={}){let t={...qo,...e.purposes};function n(){let r=ne()?window.Didomi:void 0;if(!r?.getCurrentUserStatus||r.shouldUserStatusBeCollected?.()!==!1||r.isUserStatusPartial?.()===!0)return null;let o=r.getCurrentUserStatus()?.purposes;if(!o||typeof o!="object")return null;let s=i=>Ko(o,t[i]);return jt({analytics:s("analytics"),marketing:s("marketing"),personalisation:s("personalisation")},{ad_user_data:s("ad_user_data"),ad_personalization:s("ad_personalization")})}return{name:"didomi",read:n,observesChanges:!0,subscribe(r){if(!ne())return()=>{};let o=Je(n,r),s={event:"consent.changed",listener:o.notify};return window.didomiEventListeners=window.didomiEventListeners||[],window.didomiEventListeners.push(s),window.didomiOnReady=window.didomiOnReady||[],window.didomiOnReady.push(i=>{o.notify(),(i??window.Didomi)?.on?.("consent.changed",o.notify)}),window.Didomi?.on?.("consent.changed",o.notify),o.stop}}}function Fn(e){let t={};if(!e)return t;for(let n of String(e).split("&")){let r=n.indexOf("=");if(r<=0)continue;let o=n.slice(r+1).replace(/\+/g," ");try{o=decodeURIComponent(o)}catch{}t[n.slice(0,r)]=o}return t}function Wn(e={}){let t={analytics:"C0002",personalisation:"C0003",marketing:"C0004",...e.groups},n=e.impliedConsent===!0;function r(){let i=Fn(j("OptanonConsent"));if(i.groups){let l={};for(let f of i.groups.split(",")){let[p,m]=f.split(":");p?.trim()&&(l[p.trim()]=m==="1"?!0:m==="0"?!1:null)}return f=>l[f]??!1}let u=ne()?window.OnetrustActiveGroups:void 0;if(typeof u!="string"||!u.length)return null;let c=new Set(u.split(",").map(l=>l.trim()).filter(Boolean));return l=>c.has(l)}function o(){if(j("OptanonAlertBoxClosed"))return!0;try{if(ne()&&window.OneTrust?.IsAlertBoxClosed?.()===!0)return!0}catch{}return n&&ne()&&(!!window.OneTrust||typeof window.OnetrustActiveGroups=="string")}function s(){if(!o())return null;let i=r();if(!i)return null;let u=p=>t[p]?i(t[p]):null,c=jt({analytics:u("analytics"),marketing:u("marketing"),personalisation:u("personalisation")},{ad_user_data:u("ad_user_data"),ad_personalization:u("ad_personalization")}),l=Fn(j("OptanonConsent"));return(typeof navigator<"u"&&navigator.globalPrivacyControl===!0||l.isGpcEnabled==="1")&&(c.marketing=!1,c.ad_user_data=!1,c.ad_personalization=!1),c}return{name:"onetrust",read:s,observesChanges:!0,subscribe(i){if(!ne())return()=>{};let u=Je(s,i),c=!1,l=()=>{c||!window.OneTrust?.OnConsentChanged||(c=!0,window.OneTrust.OnConsentChanged(u.notify))};window.addEventListener("OneTrustGroupsUpdated",u.notify);let f=window.OptanonWrapper;return window.OptanonWrapper=function(...m){try{typeof f=="function"&&f.apply(this,m)}finally{l(),u.notify()}},l(),()=>{u.stop(),window.removeEventListener("OneTrustGroupsUpdated",u.notify)}}}}function Go(e){let t=String(e).split(",").map(n=>n.trim()).filter(Boolean);return t.length?new Set(t):null}function Jn(e){let{name:t,categories:n,parse:r=Go,refusedValue:o,source:s="native",changeEvent:i="thg_hp_consent_change"}=e??{};if(typeof t!="string"||t==="")throw new Error("cookieConsent: `name` (the cookie your banner writes) is required");if(!n||typeof n.analytics!="string")throw new Error("cookieConsent: `categories.analytics` (the category id that grants analytics) is required");function u(){let c=j(t);if(c==null)return null;let l;if(o!==void 0&&c===o)l=new Set;else try{l=r(c)}catch{l=null}if(!(l instanceof Set))return null;let f=p=>n[p]?l.has(n[p]):null;return jt({analytics:f("analytics"),marketing:f("marketing"),personalisation:f("personalisation")},{ad_user_data:f("ad_user_data"),ad_personalization:f("ad_personalization")})}return{name:s,read:u,get observesChanges(){return Gn()},subscribe(c){if(!ne())return()=>{};let l=Je(u,c),f=p=>{[...p.changed??[],...p.deleted??[]].some(A=>A?.name===t)&&l.notify()};return window.addEventListener(i,l.notify),window.cookieStore?.addEventListener?.("change",f),()=>{l.stop(),window.removeEventListener(i,l.notify),window.cookieStore?.removeEventListener?.("change",f)}}}}function Yn(e={}){let t=e.name??P("consent"),n=()=>{let r=j(t);if(r==null)return null;let o=Oe(r);return o.analytics==null?null:o};return{name:"forwarded",read:n,get observesChanges(){return Gn()},subscribe(r){if(!ne())return()=>{};let o=Je(n,r),s=i=>{[...i.changed??[],...i.deleted??[]].some(c=>c?.name===t)&&o.notify()};return window.cookieStore?.addEventListener?.("change",s),()=>{o.stop(),window.cookieStore?.removeEventListener?.("change",s)}}}}function Xn(e){let t=be(e);return{name:"static",basis:We.host,read:()=>t?{...t}:null,observesChanges:!0,subscribe:()=>()=>{}}}function Zn(e){if(e==null)return null;let t=String(e).split("/").map(n=>n.trim()).filter(Boolean).join("/");return t===""?null:t}function zo(e){let t=e.item_category;if(t!=null&&String(t).includes("/"))return Zn(t);let n=[t,e.item_category2,e.item_category3,e.item_category4,e.item_category5].map(r=>r==null?"":String(r).trim()).filter(Boolean);return Zn(n.join("/"))}var Wo=e=>{if(e==null||typeof e=="object")return null;let t=String(e).trim();return t===""?null:t};function Jo(...e){for(let t of e){if(typeof t=="number"&&Number.isFinite(t))return String(t);if(typeof t=="string"&&t.trim()!=="")return t.trim()}return null}var Ye=e=>Jo(e.item_group_id,e.item_id);function Yo(e,t=Ye){if(!e)return null;let n=u=>u==null||u===""||Number.isNaN(Number(u))?null:Number(u),r=u=>{let c=n(u);return c==null?null:Math.round(c*1e6)/1e6},o=u=>{let c=r(u);return c!=null&&c>=0?c:null},s=u=>{let c=n(u);return Number.isInteger(c)&&c>=0?c:null},i=Wo;return{product_id:i(t(e)),sku:i(e.item_id),name:i(e.item_name),brand:i(e.item_brand),variant:i(e.item_variant)??i(e.variant),category:zo(e),price:r(e.price),discount:o(e.discount),quantity:s(e.quantity),coupon:i(e.coupon),position:s(e.index)!=null?s(e.index)+1:null,url:i(e.url)??i(e.item_url)??null,image_url:i(e.image_url)??i(e.image_link)??null,displayed_sku:i(e.displayed_sku)??i(e.displayed_variant_sku)}}function Ht(e,t=Ye){return(e??[]).map(n=>Yo(n,t)).filter(n=>n?.product_id)}var Xo=1e3,Zo={shipping:2,payment:3},Qo=new Set(["password","google","apple","facebook","magic_link","sso","passkey","other"]),H=e=>{if(e==null||typeof e=="object")return null;let t=String(e).trim();return t===""?null:t},es=e=>{if(e==null||e===""||typeof e=="object")return null;let t=Number(e);return Number.isFinite(t)&&t>=0?t:null},Xe=e=>e!==null&&typeof e=="object";function ts(e){return Array.isArray(e.items)?e.items.filter(Xe):null}function Qn(e){let t=H(e)?.toLowerCase().replace(/[\s-]+/g,"_");return t?Qo.has(t)?t:t==="email"||t==="email_password"?"password":"other":null}function ns({ecommerce:e,items:t}){let n=s=>({promotion_id:H(s.promotion_id),name:H(s.promotion_name),creative:H(s.creative_name),position:H(s.creative_slot)}),r=new Set,o=[];for(let s of[n(e),...t.map(n)])!s.promotion_id||r.has(s.promotion_id)||(r.add(s.promotion_id),o.push(s));return o}var er=({ecommerce:e,items:t})=>H(e.item_list_id)??H(e.item_list_name)??H(t[0]?.item_list_id)??H(t[0]?.item_list_name),me=(e,t)=>t.products?.length?{event:e,properties:t}:null,rs=new Set(["product","products","item","items"]);function os({ecommerce:e}){let t=H(e.item_id),n=H(e.content_type)?.toLowerCase();return!t||n&&!rs.has(n)?null:{event:"Product Shared",properties:{share_via:H(e.method),products:[{product_id:t}]}}}function ss(e){let t=o=>me("Product List Viewed",{list_id:er(o),products:o.products}),n=o=>{let s=H(o.ecommerce.search_term);return s?{event:"Products Searched",properties:{query:s,...o.products.length?{products:o.products}:{}}}:null},r=o=>s=>s.promotions.map(i=>({event:o,properties:i}));return{view_item:o=>me("Product Viewed",{currency:o.currency,value:o.value,products:o.products.slice(0,1)}),view_item_list:t,view_search_results:o=>n(o)??t(o),search:n,select_item:o=>me("Product Clicked",{list_id:er(o),products:o.products.slice(0,1)}),add_to_cart:o=>me("Product Added",{cart_id:H(o.ecommerce.cart_id),products:o.products}),remove_from_cart:o=>me("Product Removed",{cart_id:H(o.ecommerce.cart_id),products:o.products}),view_cart:o=>({event:"Cart Viewed",properties:{cart_id:H(o.ecommerce.cart_id),value:o.value,currency:o.currency,coupon:H(o.ecommerce.coupon),...o.itemsListed?{products:o.products}:{}}}),begin_checkout:o=>me("Checkout Started",{value:o.value,currency:o.currency,coupon:H(o.ecommerce.coupon),products:o.products}),add_shipping_info:o=>({event:"Checkout Step Completed",properties:{step:e.shipping,step_name:"shipping",shipping_method:H(o.ecommerce.shipping_tier)}}),add_payment_info:o=>({event:"Payment Info Entered",properties:{step:e.payment,step_name:"payment",payment_method:H(o.ecommerce.payment_type)}}),view_promotion:r("Promotion Viewed"),select_promotion:r("Promotion Clicked"),add_to_wishlist:o=>me("Product Added to Wishlist",{products:o.products}),share:os,login:o=>({event:"Signed In",properties:{method:Qn(o.ecommerce.method)}}),sign_up:o=>({event:"Signed Up",properties:{method:Qn(o.ecommerce.method)}})}}var is=e=>e.event;function as(e,t){if(!Xe(e))return null;if(typeof e.length=="number"&&e[0]==="event"&&typeof e[1]=="string"){let r=Xe(e[2])?e[2]:{};return{name:e[1],entry:r,ecommerce:r}}let n=H(t(e));return n?{name:n,entry:e,ecommerce:Xe(e.ecommerce)?e.ecommerce:e}:null}function Ft(e){return Array.isArray(e)?`[${e.map(Ft).join(",")}]`:e&&typeof e=="object"?`{${Object.keys(e).sort().map(t=>`${JSON.stringify(t)}:${Ft(e[t])}`).join(",")}}`:JSON.stringify(e??null)}function tr(e,t={}){if(!e||typeof e.track!="function")throw new Error("connectDataLayer: analytics must have a track(event, properties, options) method");let n=t.dataLayer??(typeof window<"u"?window.dataLayer=window.dataLayer||[]:null);if(!Array.isArray(n))return()=>{};let r=ss({...Zo,...t.steps}),o=t.map??{},s=t.eventName??is,i=t.productId??Ye,u=new Set(["purchase","refund",...t.ignore??[]]),c=t.dedupeMs??Xo,l=new Map,f=!0;function p(S,g,y){if(c<=0)return!1;let O=`${S}|${y??""}|${Ft(g)}`,N=Date.now();for(let[U,G]of l)N-G>c&&l.delete(U);return l.has(O)?!0:(l.set(O,N),!1)}let m=null,A=new Set;function w(S,g){if(S!=="Product Viewed")return!1;let y=typeof location>"u"?"":location.pathname;y!==m&&(m=y,A.clear());let O=g.products?.[0]?.product_id;return O?A.has(O)?!0:(A.add(O),!1):!1}function k({event:S,properties:g={}},y){if(!S||p(S,g,y)||w(S,g))return;let O=y?{context:{currency:y}}:void 0;if(S==="Signed Out"&&typeof e.signedOut=="function"){e.signedOut(O);return}e.track(S,g,O)}function b(S){let g=t.transform?t.transform(S):S,y=as(g,s);if(!y||u.has(y.name))return;let O=Object.hasOwn(o,y.name),N=O?o[y.name]:r[y.name];if(typeof N!="function")return;let U=ts(y.ecommerce),G=U??[],q={...y,items:G,itemsListed:U!==null,products:Ht(G,i),currency:Tt(y.ecommerce.currency),value:es(y.ecommerce.value)};q.promotions=ns(q);let ee=O?N(g,{...q,toProducts:J=>Ht(J,i)}):N(q);for(let J of[ee].flat())J&&k(J,q.currency)}function x(S){if(f)try{b(S)}catch(g){try{t.onError?.(g,S)}catch{}}}for(let S of n.slice())x(S);let h=n.push;function E(...S){let g=h.apply(this,S);for(let y of S)x(y);return g}return n.push=E,()=>{f=!1,n.push===E&&(n.push=h)}}var cs="hp_debug",us=256;function ls(){try{return new URLSearchParams(location.search).get(cs)}catch{return null}}function nr(e,t){if(typeof location>"u")return!1;try{let n=ls();if(n!==null){let o=n.trim();o===""||o.length>us?sessionStorage.removeItem(t):sessionStorage.setItem(t,o)}let r=sessionStorage.getItem(t);return!!(e&&r&&In(r)===e)}catch{return!1}}var Ie=class extends Error{},ds={inHoldout:()=>!0,personalisationGroup:()=>"excluded",servingHeaders:()=>({}),recommendationContext:()=>({}),flush:()=>Promise.resolve(),reset:()=>{}};function qt(e,t){let n=ds[e]??(()=>null),r=o=>(console.warn(`[hp] ${String(e)} failed; nothing was sent`,o),n());return function(...s){try{let i=t.apply(this,s);return typeof i?.then=="function"?Promise.resolve(i).catch(r):i}catch(i){if(i instanceof Ie)throw i;return r(i)}}}function rr(e){for(let t of Reflect.ownKeys(e)){let{value:n}=Object.getOwnPropertyDescriptor(e,t)??{};typeof n=="function"&&(e[t]=qt(t,n))}return e}var Le=Symbol("hp.identityOption");var fs=4320*60*60,ps=100,ms=1e3,hs=2e3,or=500,Ze=e=>(e?.unref?.(),e);function gs(e,t){if(t?.analytics===!0&&e.analytics===!1)return"withdrawn";let n=pe.map(r=>e[r]).filter(r=>r!==null);return n.length&&n.every(Boolean)?"accept_all":n.length&&n.every(r=>!r)?"reject_all":"custom"}function ys(e,t,n=P("consent")){if(!(typeof document>"u"))try{let r=typeof location<"u"&&location.protocol==="https:"?"; Secure":"",o=t?`; Domain=${t}`:"";document.cookie=`${n}=${Vt(e)}; Path=/; Max-Age=${fs}; SameSite=Lax`+o+r}catch{}}function ws(e){let t=Oe(j(e));return pe.some(n=>t[n]!==null)?t:null}function sr(e){let{adapter:t,timeoutMs:n=5e3,cookieDomain:r=null,cookieName:o=P("consent"),release:s,announce:i}=e,u=e.discard??(()=>{}),c="pending",l=null,f=null,p=null,m=null,A=!1,w=null,k=[],b=R=>{c=R,e.onStatus?.(R)};function x(){try{return be(t.read())}catch{return null}}function h(){f&&clearInterval(f),p&&clearTimeout(p),f=null,p=null}let E=()=>typeof window<"u"&&typeof document<"u",S=()=>{try{return typeof t.subscribe=="function"&&t.observesChanges===!0}catch{return!1}};function g(){m&&clearInterval(m),m=null}function y(){A||m||l===null||S()||E()&&document.visibilityState==="hidden"||(m=Ze(setInterval(()=>q(x()),hs)))}let O=()=>c==="pending"||c==="unknown",N=e.store??null,U=()=>{let R=k.splice(0);N?.write([]);for(let K of R)s(K)},G=()=>{let R=k.splice(0);N?.write([]);for(let K of R)u(K)};function q(R){let K=be(R);if(!K||K.analytics===null)return;let Z=l===null,Y=Z?ws(o):l;if(!Z&&Ut(Y,K))return;h(),l=K,y(),ys(K,r,o);let ve=!Ut(Y,K);if(K.analytics){b("granted"),U(),ve&&i({action:gs(K,Y),state:K,previous:Y,withdrawal:!1});return}G(),Y?.analytics===!0&&i({action:"withdrawn",state:K,previous:Y,withdrawal:!0}),b("denied")}function ee(){p=null,c==="pending"&&(b("unknown"),f&&clearInterval(f),f=Ze(setInterval(()=>q(x()),ms)))}function J(R){if(O()){if(N){N.write(k);return}R?.type!=="visibilitychange"&&!R?.persisted&&G()}}let Se=R=>{document.visibilityState==="hidden"?(g(),J(R)):y()},je=R=>{g(),J(R)},ce=R=>{R?.persisted&&l!==null&&q(x()),y()};return{get status(){return c},get state(){return l?{...l}:null},stamp(){return l?{...l,source:t.name??null,basis:t.basis??We.visitor}:null},admits(){return c==="granted"},hold(R){return!O()||k.length>=or?(u(R),!1):(k.push(R),!0)},onHidden:J,start(){A=!1;try{w=t.subscribe?.(R=>q(R))??null}catch(R){e.debug&&console.warn("[hp] consent adapter subscribe failed",R)}E()&&(window.addEventListener("pagehide",je),window.addEventListener("pageshow",ce),document.addEventListener("visibilitychange",Se)),N&&k.length===0&&k.push(...N.read().slice(-or)),q(x()),!l&&(f=Ze(setInterval(()=>q(x()),ps)),p=Ze(setTimeout(ee,n)))},stop(){A=!0,h(),g(),typeof w=="function"&&w(),E()&&(window.removeEventListener("pagehide",je),window.removeEventListener("pageshow",ce),document.removeEventListener("visibilitychange",Se))}}}var Ss=["recommendation","search_rank","banner","offer","layout","copy","price","other"],Qe=e=>typeof e=="string"&&e!=="";function ir(e){return(Array.isArray(e?.decisions)?e.decisions:[]).filter(t=>Qe(t?.slot)&&Qe(t.decision_id)&&t.holdout!==!0).map(({decision_id:t,slot:n,arm:r,kind:o})=>({decision_id:t,slot:n,...Qe(r)&&{arm:r},...Ss.includes(o)&&{kind:o}}))}function ar({key:e,mayStore:t}){let n,r=()=>{if(n)return n;try{let s=JSON.parse(sessionStorage.getItem(e));n=Array.isArray(s)?s.filter(i=>Qe(i?.slot)):[]}catch{n=[]}return n},o=()=>{try{n?.length&&t()&&sessionStorage.setItem(e,JSON.stringify(n))}catch{}};return{persist:o,current:()=>r().length?n.map(s=>({...s})):null,remember(s){if(!s.length)return;let i=new Set(s.map(u=>u.slot));n=[...r().filter(u=>!i.has(u.slot)),...s],o()},forget(){n=[];try{sessionStorage.removeItem(e)}catch{}}}}function _s(e){let t=2166136261,n=String(e);for(let r=0;r<n.length;r+=1)t^=n.charCodeAt(r),t=t+((t<<1)+(t<<4)+(t<<7)+(t<<8)+(t<<24))>>>0;return t^=t>>>16,t=Math.imul(t,2246822507)>>>0,t^=t>>>13,t=Math.imul(t,3266489909)>>>0,t^=t>>>16,t>>>0}function et(e,t,n=1e4){return _s(`${t}\0${e}`)%n}function Kt(e){let t=o=>Math.min(Math.max(Number(o)||0,0),1),n=t(e.share),r=1-n;return{holdout_share:n,personalised_share:e.ramp==null?r:Math.min(t(e.ramp),r)}}function Gt(e,t){if(!e||typeof e.salt!="string")return{holdout:!1,bucket:null,group:"personalised"};let n=e.ramp!=null;if(t==null||t==="")return{holdout:!1,bucket:null,group:n?"excluded":"personalised"};let{holdout_share:r,personalised_share:o}=Kt(e),s=et(t,e.salt),i=c=>Math.round(c*1e4),u=r>0&&s<i(r)?"holdout":!n||s<i(r+o)?"personalised":"excluded";return{holdout:u==="holdout",bucket:s,group:u}}function cr(e,t){return typeof e!="string"||e===""||t==null||t===""?null:et(t,`bandit-vs-default:${e}`)<1e4/2?"default":"bandit"}var bs="hp_preview",Is=256;function ur(e,t=null){if(typeof location>"u")return j(e);let n=null;try{n=new URLSearchParams(location.search).get(bs)}catch{n=null}if(n===null)return j(e);let r=n.trim();return r===""||r.length>Is?(se(e,"",0,t),null):(se(e,r,null,t),r)}var ks=40,xs=128,As=5,vs=60,dr=e=>typeof e=="string"&&e!==""&&e.length<=xs&&!e.includes(","),lr=e=>Array.isArray(e)?e.filter(dr).slice(0,ks):[],Es=e=>Array.isArray(e)?e.filter(t=>typeof t=="string").map(t=>t.replaceAll(","," ").trim()).filter(t=>t!=="").slice(0,As):[],Cs=e=>Object.entries(e&&typeof e=="object"?e:{}).filter(([t,n])=>dr(t)&&Number.isFinite(n)&&n>=1).sort(([,t],[,n])=>n-t).slice(0,vs).map(([t,n])=>`${t}:${Math.floor(n)}`);function zt(e){let t={},n={viewed:lr(e?.recentProducts),basket:lr(e?.basketProducts),q:Es(e?.recentSearches),impressed:Cs(e?.impressions)};for(let[r,o]of Object.entries(n))o.length>0&&(t[r]=o.join(","));return t}var Ps=1800*1e3;function fr(e,t=Date.now()){try{localStorage.setItem(P("recommendationContext"),JSON.stringify({context:e,until:t+Ps}))}catch{}}function pr(){try{localStorage.removeItem(P("recommendationContext"))}catch{}}var Os="hp_sample",mr=1e4;function hr(e,t){return!(typeof t=="number"&&t<1)||e==null||e===""?!0:et(e,Os,mr)<Math.round(t*mr)}function ke(e){return e.trim().toLowerCase().replace(/\s*\/\s*/g,"/").replace(/^\/+|\/+$/g,"")}var Ls=2,Ts=12;function Te(e,t=Ls){return e.split("/").slice(0,t).join("/")}function Wt(e,t){if(typeof t!="string"||!t.trim())return null;let n=Te(ke(t));return n?(e.unshift(n),e.length=Math.min(e.length,Ts),n):null}var he=()=>P("sessionSignals"),xe=null,Jt=()=>xe??he();function gr(){try{return xe?localStorage:sessionStorage}catch{return}}function yr(e,t){let n=t==null?null:String(t),r=e?$(he(),n,e):null;if(r===xe)return;let o=xe===null?Ns():null;if(xe=r,!!xe)try{let s=Jt(),i=$n(he(),n);for(let u of Object.keys(localStorage))u.startsWith(i)&&u!==s&&localStorage.removeItem(u);o&&!localStorage.getItem(s)&&(localStorage.setItem(s,JSON.stringify(o)),sessionStorage.removeItem(he()))}catch{}}function Ns(){try{let e=sessionStorage.getItem(he());if(!e)return null;let t=JSON.parse(e);return t&&(t.productViews>0||t.listViews>0||t.basketValue!=null||t.recentProducts?.length||t.recentBrowse?.length||t.campaign)?t:null}catch{return null}}function tt(){return{productViews:0,listViews:0,cartAdds:0,searches:0,recentProducts:[],recentCategories:[],recentBrowse:[],basketProducts:[],basketValue:null,recentSearches:[],impressions:{},browsingCategory:null,recentBrowseCategories:[],browsingListing:null,listViewsByCategory:{},campaign:null,startedAt:0}}function Yt(){let e=gr();if(!e)return tt();try{let t=e.getItem(Jt());return t?{...tt(),...JSON.parse(t)}:{...tt(),startedAt:Date.now()}}catch{return{...tt(),startedAt:Date.now()}}}function Ne(e){let t=gr();if(t)try{t.setItem(Jt(),JSON.stringify(e))}catch{}}function Re(){return Yt()}function wr(){for(let e of[()=>sessionStorage,()=>localStorage])try{let t=e();t.removeItem(he());for(let n of Object.keys(t))n.startsWith(`${he()}:`)&&t.removeItem(n)}catch{}}var Xt=20,Sr=200,Rs=new Set(["Product Viewed","Product Clicked","Product Added","Product Added to Wishlist"]),Ms=new Set(["Product Viewed","Product Added"]),_r=50;function nt(e,t){let n=Wt(e.recentBrowse,t);return n?(e.recentBrowseCategories=[e.browsingListing?.category??null,...e.recentBrowseCategories].slice(0,e.recentBrowse.length),n):null}function Ds(e,t){let n=e.listViewsByCategory;n[t]=(n[t]??0)+1;let r=Object.keys(n);if(r.length>_r){let o={};for(let s of r.sort((i,u)=>n[u]-n[i]).slice(0,_r))o[s]=n[s];e.listViewsByCategory=o}}var br=e=>[...new Set(e.map(t=>t?.product_id).filter(t=>typeof t=="string"&&t))].slice(0,Xt);function Ir(e,t,n){let r=Yt();r.startedAt||(r.startedAt=Date.now());let o=n!==void 0&&JSON.stringify(n??null)!==JSON.stringify(r.campaign??null);o&&(r.campaign=n??null);let s=Array.isArray(t?.products)?t.products:[];switch(e){case"Product Viewed":r.productViews+=1,nt(r,r.browsingCategory);break;case"Product List Viewed":{let c=t?.list_id,l=t?.category;if(!(typeof c=="string"&&c.includes("/")&&!c.startsWith("cdp-")))break;let p=typeof l=="string"&&Te(ke(l))||null,m=p?Te(ke(c)):"";if(!m){r.browsingCategory=null,r.browsingListing=null;break}r.browsingListing={key:m,category:p},nt(r,m),r.browsingCategory=m,Ds(r,p),r.listViews+=1}break;case"Product List Filtered":{let c=t?.change,l=typeof t?.list_id=="string"?t.list_id:"",f=typeof c?.value=="string"?c.value:"",p=r.browsingListing;if(f&&c?.action!=="removed"&&p&&Te(ke(l))===p.key){let m=nt(r,`${l}/${f}`);m&&(r.browsingCategory=m)}break}case"Product Added":{r.cartAdds+=1,nt(r,r.browsingCategory);for(let c of s){let l=c.product_id;typeof l!="string"||!l||(r.basketProducts=[l,...r.basketProducts.filter(f=>f!==l)].slice(0,Xt))}break}case"Product Removed":{for(let c of s){let l=c.product_id;typeof l=="string"&&l&&(r.basketProducts=r.basketProducts.filter(f=>f!==l))}break}case"Products Searched":{r.searches+=1;let c=t?.query;if(typeof c=="string"&&c.trim()){let l=c.trim().toLowerCase().slice(0,64);r.recentSearches=[l,...r.recentSearches.filter(f=>f!==l)].slice(0,5)}break}case"Product Clicked":case"Product Added to Wishlist":break;case"Cart Viewed":return s.length>0&&(r.basketProducts=br(s)),Ne(r),r;case"Cart Updated":{Array.isArray(t?.products)&&(r.basketProducts=br(s));let c=t?.value;return r.basketValue=typeof c=="number"&&Number.isFinite(c)&&c>=0?c:null,Ne(r),r}default:return o&&Ne(r),r}let i=Rs.has(e);if(i)for(let c of s)typeof c.product_id=="string"&&c.product_id&&delete r.impressions[c.product_id];else{for(let l of s){let f=l.product_id;typeof f!="string"||!f||(r.impressions[f]=(r.impressions[f]??0)+1)}let c=Object.keys(r.impressions);if(c.length>Sr){let l={};for(let f of c.sort((p,m)=>r.impressions[m]-r.impressions[p]).slice(0,Sr))l[f]=r.impressions[f];r.impressions=l}}let u=new Set;for(let c of s){let l=c.product_id;if(i&&typeof l=="string"&&l&&(r.recentProducts=[l,...r.recentProducts.filter(f=>f!==l)].slice(0,Xt)),Ms.has(e)&&typeof c.category=="string"&&c.category){let f=ke(c.category);f&&!u.has(f)&&(u.add(f),Wt(r.recentCategories,f))}}return Ne(r),r}var rt=1800*1e3;function kr({name:e,domain:t=null,mayStore:n,now:r=()=>Date.now(),mint:o=oe}){let s=null,i=0,u=()=>{s!==null&&n()&&se(e,s,rt/1e3,t)};return{get(){let c=r(),l=j(e);return l?s=l:(s===null||c-i>=rt)&&(s=o()),i=c,u(),s},persist:u,forget(){se(e,"",0,t),s=null}}}var W=e=>e!==null&&typeof e=="object"&&!Array.isArray(e),xr=e=>Array.isArray(e)&&e.every(t=>typeof t=="string"),Ar=Object.freeze({enabled:!1}),Qt=Object.freeze({enabled:!0,queryParamAllowlist:Object.freeze([])});function vr(e,t){let n=e?.track;return W(n)?(Object.hasOwn(n,t)?n[t]:n.__default)?.enabled!==!1:!0}function Us(e,t){return`${ie(e)}/v1/projects/${encodeURIComponent(t)}/settings`}var Vs="https://hp.thgingenuity.com";function ie(e){return e==null||e===""?Vs:Cr(e)}function Er(e,t){return e!=null&&e!==""?ie(e):t?.startsWith("https://")?t:ie(void 0)}function Cr(e){if(typeof e!="string")return null;let t=e.trim().replace(/\/+$/,"");return/^https?:\/\/[^/\s]+$/i.test(t)?t:/^[a-z0-9.-]+(:\d+)?$/i.test(t)?`https://${t}`:null}function $s(e){if(!W(e))return null;let t=Object.fromEntries(Object.entries(e).filter(([,n])=>typeof n=="boolean"));return Object.keys(t).length?t:null}var Zt=e=>typeof e=="number"&&e>=0&&e<=1,Bs=/^[0-9a-f]{64}$/;function js(e){return W(e)?{enabled:e.enabled===!0,tokenSha256:typeof e.tokenSha256=="string"&&Bs.test(e.tokenSha256)?e.tokenSha256:null}:{enabled:!1,tokenSha256:null}}function Hs(e){if(!W(e))return null;let t=Object.fromEntries(Object.entries(e).filter(([,n])=>W(n)&&Zt(n.share)&&(n.ramp==null||Zt(n.ramp))&&typeof n.salt=="string"&&n.salt!=="").map(([n,r])=>[n,{share:r.share,ramp:r.ramp??null,salt:r.salt,...xr(r.readoutSlots)&&r.readoutSlots.length>0&&{readoutSlots:r.readoutSlots}}]));return Object.keys(t).length?t:null}var Fs=/^[A-Za-z0-9!#$%&'*+.^_`|~-]{1,128}$/;function qs(e){return W(e)?e.source==="hp_cookie"?{source:"hp_cookie"}:e.source!=="site_cookie"?null:e.cookie==null?{source:"site_cookie",cookie:null}:typeof e.cookie=="string"&&Fs.test(e.cookie)?{source:"site_cookie",cookie:e.cookie}:null:null}function Ks(e){let t=Array.isArray(e?.forms)?e.forms.filter(W):[];return t.length===0?null:{forms:t,capture:W(e.capture)?e.capture:null,...Number.isInteger(e.overlay_gap_minutes)?{overlay_gap_minutes:e.overlay_gap_minutes}:{}}}function Gs(e){let t=W(e)?e.hp:null;return W(t)&&typeof t.enabled=="boolean"}function en(e){let t=W(e)?e.hp:null;if(!W(t)||t.enabled!==!0)return Ar;let n=Ks(t.onsite);return{enabled:!0,propertyId:typeof t.propertyId=="string"&&t.propertyId!==""?t.propertyId:null,environment:typeof t.environment=="string"?t.environment:null,consentPurposes:$s(t.consent?.purposes),queryParamAllowlist:xr(t.queryParamAllowlist)?t.queryParamAllowlist:null,anonymousId:qs(t.anonymousId),apiHost:Cr(t.apiHost),holdouts:Hs(t.holdouts),sampleRate:Zt(t.sampleRate)?t.sampleRate:1,debug:js(t.debug),...n&&{onsite:n},plan:W(e.plan)&&W(e.plan.track)?{track:e.plan.track}:null}}var zs=3e3;async function Pr(e,t,n=globalThis.fetch,r=zs){try{let o=await n(Us(e,t),{credentials:"omit",headers:{accept:"application/json"},signal:AbortSignal.timeout?.(r)});if(o.status>=400&&o.status<500&&o.status!==408&&o.status!==429)return Ar;if(!o.ok)return null;let s=await o.json();return Gs(s)?en(s):null}catch{return null}}var ot=e=>$(P("settings"),e);function Or(e){try{let t=localStorage.getItem(ot(e));if(!t)return null;let n=JSON.parse(t);return n?.enabled===!0?n:null}catch{return null}}function Lr(e,t){try{t?.enabled===!0?localStorage.setItem(ot(e),JSON.stringify(t)):localStorage.removeItem(ot(e))}catch{}}function tn(e){try{localStorage.removeItem(ot(e))}catch{}}var Ws={flushAt:20,flushIntervalMs:1e4,maxQueue:500,maxRetryAgeMs:1440*60*1e3,maxRetries:5,maxPersistedBatches:20,maxPersistedBytes:1024*1024,storageKey:fe.retry,beaconSafeBytes:56*1024,maxBatchEvents:100,maxBatchBytes:500*1024},st=()=>Date.now(),Tr=3e4,cn=55*1024;function Js(e,t=st()){if(typeof e!="string")return 0;let n=e.trim();if(/^\d+$/.test(n))return Number(n)*1e3;if(n==="")return 0;let r=Date.parse(n);return Number.isNaN(r)?0:Math.max(0,r-t)}var ae=e=>typeof TextEncoder<"u"?new TextEncoder().encode(e).length:Buffer.byteLength(e),nn=()=>typeof window<"u"&&typeof document<"u";function Ys(){try{return!nn()||!window.localStorage?null:(window.localStorage.getItem("thg_hp_probe"),window.localStorage)}catch{return null}}var I,rn,on,it,sn,an,Nr,Me,De,Ue,Rr,at,Mr,ct,ut=class{constructor(t){_n(this,I);this.o={...Ws,...t},this.queue=[],this.timer=null,this.storage=Ys(),this.inflight=null,this.sending=new Set,this.epoch=0,this.sinceRefusal=new Set,this.wakers=new Set,this.replayAllowed=!this.o.deferReplay,this.draining=null,this.failing=!1,this.answered=!1,nn()&&(window.addEventListener("pagehide",()=>this.flush({beacon:!0})),document.addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"&&this.flush()}),L(this,I,ct).call(this))}markFailing(){this.answered||(this.failing=!0)}replayPersisted(){return this.replayAllowed=!0,L(this,I,ct).call(this)}clearPersisted(){if(this.replayAllowed=!1,!!this.storage)try{let t=L(this,I,Ue).call(this).filter(n=>this.sinceRefusal.has(n?.id));t.length?this.storage.setItem(this.o.storageKey,JSON.stringify(t)):this.storage.removeItem(this.o.storageKey)}catch{}}discardQueued(){this.queue=[],this.epoch+=1,this.sinceRefusal.clear(),L(this,I,on).call(this);for(let t of this.wakers)t()}enqueue(t){let n;try{n=JSON.parse(JSON.stringify(t))}catch(r){this.o.onError?.(`event ${t?.messageId??""} cannot be serialised; dropped`,r);return}this.queue.push(n),this.queue.length>this.o.maxQueue&&this.queue.splice(0,this.queue.length-this.o.maxQueue),this.queue.length>=this.o.flushAt?this.flush():L(this,I,rn).call(this)}flush(t={}){if(L(this,I,on).call(this),this.queue.length===0)return Promise.resolve();if(t.beacon&&nn()&&typeof navigator<"u"&&navigator.sendBeacon)return L(this,I,Nr).call(this),Promise.resolve();if(this.inflight)return this.inflight;let n=L(this,I,an).call(this,this.queue,this.o.maxBatchEvents,this.o.maxBatchBytes).map(o=>{let s=L(this,I,at).call(this,o);return s&&(this.sending.add(s),this.sinceRefusal.add(s)),{batch:o,id:s}});this.queue=[];let r=this.epoch;return this.inflight=(async()=>{for(let{batch:o,id:s}of n){if(r!==this.epoch){L(this,I,De).call(this,s);continue}await L(this,I,Me).call(this,o,0,s,r)}})().finally(()=>{this.inflight=null,this.queue.length>=this.o.flushAt?this.flush():this.queue.length&&L(this,I,rn).call(this)}),this.inflight}};I=new WeakSet,rn=function(){this.timer||(this.timer=setTimeout(()=>this.flush(),this.o.flushIntervalMs),this.timer?.unref?.())},on=function(){this.timer&&(clearTimeout(this.timer),this.timer=null)},it=function(t){return JSON.stringify({batch:t,writeKey:this.o.writeKey,sentAt:new Date().toISOString()})},sn=function(){return`${this.o.apiHost.replace(/\/$/,"")}/v1/batch`},an=function(t,n,r){let o=ae(L(this,I,it).call(this,[])),s=[],i=[],u=o;for(let c of t){let l=ae(JSON.stringify(c))+1;i.length&&(i.length>=n||u+l>r)&&(s.push(i),i=[],u=o),i.push(c),u+=l}return i.length&&s.push(i),s},Nr=function(){let t=this.queue;this.queue=[];let n=L(this,I,sn).call(this);for(let r of L(this,I,an).call(this,t,this.o.maxBatchEvents,this.o.beaconSafeBytes)){let o=L(this,I,it).call(this,r);if(ae(o)<=this.o.beaconSafeBytes){let s=!1;try{s=navigator.sendBeacon(n,new Blob([o],{type:"text/plain"}))}catch{s=!1}if(s){let i=this.failing?L(this,I,at).call(this,r):null;i&&this.sending.add(i);continue}}L(this,I,Me).call(this,r,0,L(this,I,at).call(this,r))}},Me=async function(t,n,r=null,o=this.epoch){r&&this.sending.add(r);let s=L(this,I,it).call(this,t),i=0;try{let u=await fetch(L(this,I,sn).call(this),{method:"POST",headers:{"Content-Type":"text/plain"},body:s,keepalive:ae(s)<=this.o.beaconSafeBytes});if(u.ok)return this.failing=!1,this.answered=!0,L(this,I,De).call(this,r),L(this,I,ct).call(this),!0;let c=u.status===408||u.status===429||u.status>=500;if(c&&(i=Js(u.headers?.get?.("retry-after"))),!c)return L(this,I,De).call(this,r),this.o.onError?.(`CDP ingest rejected batch (${u.status}); dropping ${t.length} events`),!0;throw new Error(`retryable ${u.status}`)}catch(u){if(this.failing=!0,n>=this.o.maxRetries){r&&this.sending.delete(r);let l=r?"kept for the next page":"dropped";return this.o.onError?.(`CDP ingest unreachable after ${n} attempts; ${l}: ${t.length} events`,u),!1}let c=Math.max(Math.min(1e3*2**n,Tr)*(.5+Math.random()),Math.min(i,Tr));return o===this.epoch&&await new Promise(l=>{let f=()=>{clearTimeout(p),this.wakers.delete(f),l()},p=setTimeout(f,c);this.wakers.add(f)}),o!==this.epoch?(L(this,I,De).call(this,r),!1):L(this,I,Me).call(this,t,n+1,r,o)}},De=function(t){t&&(this.sending.delete(t),this.sinceRefusal.delete(t),L(this,I,Mr).call(this,t))},Ue=function(){let t=JSON.parse(this.storage.getItem(this.o.storageKey)||"[]");return Array.isArray(t)?t:[]},Rr=function(t,n){let r=i=>ae(JSON.stringify(i))+1,o=[...t,n].slice(-this.o.maxPersistedBatches),s=o.reduce((i,u)=>i+r(u),2);for(;o.length>1&&s>this.o.maxPersistedBytes;)s-=r(o[0]),o=o.slice(1);for(;o.length;)try{return this.storage.setItem(this.o.storageKey,JSON.stringify(o)),!0}catch{o=o.slice(1)}return!1},at=function(t){if(!this.storage||this.o.mayPersist&&!this.o.mayPersist())return null;try{let n={at:st(),id:`${st()}-${Math.random().toString(36).slice(2)}`,batch:t};return ae(JSON.stringify(n))+3>this.o.maxPersistedBytes?null:L(this,I,Rr).call(this,L(this,I,Ue).call(this),n)?n.id:null}catch{return null}},Mr=function(t){if(!(!t||!this.storage))try{let n=L(this,I,Ue).call(this).filter(r=>r.id!==t);n.length?this.storage.setItem(this.o.storageKey,JSON.stringify(n)):this.storage.removeItem(this.o.storageKey)}catch{}},ct=function(){if(!this.storage||!this.replayAllowed)return this.draining??Promise.resolve();if(this.draining)return this.draining;let t;try{let r=L(this,I,Ue).call(this);t=r.filter(o=>Array.isArray(o?.batch)&&st()-o.at<this.o.maxRetryAgeMs).map(o=>o.id?o:{...o,id:`${o.at}-${Math.random().toString(36).slice(2)}`}),(t.length!==r.length||t.some((o,s)=>o!==r[s]))&&(t.length?this.storage.setItem(this.o.storageKey,JSON.stringify(t)):this.storage.removeItem(this.o.storageKey))}catch{return Promise.resolve()}let n=t.filter(r=>!this.sending.has(r.id));return n.length?(this.draining=(async()=>{for(let r of n)if(!this.replayAllowed||!await L(this,I,Me).call(this,r.batch,0,r.id))return})().finally(()=>{this.draining=null}),this.draining):Promise.resolve()};var un="3.29.0",ln="@thg-agentic/hyper-personalisation-web";var Xs=100,Zs=["source","medium","campaign","content","term"];function Ur(e){if(!e||typeof e!="object")return null;let t={};for(let n of Zs){let r=e[n==="campaign"?"name":n];typeof r=="string"&&r&&(t[n]=r.slice(0,Xs))}return Object.keys(t).length?t:null}var Vr=e=>$(P("visitCampaign"),e==null?null:String(e)),Ae=new Map;function $r(e){if(Ae.has(e))return Ae.get(e);try{let t=JSON.parse(localStorage.getItem(e));return t&&typeof t=="object"?t:null}catch{return null}}function Dr(e,t){try{t?localStorage.setItem(e,JSON.stringify(t)):localStorage.removeItem(e),Ae.delete(e)}catch{t?Ae.set(e,t):Ae.delete(e)}}function Br(e,t,n){return typeof e?.tags=="object"&&e.tags!==null&&Number.isFinite(e.at)&&n-e.at<rt&&!(t&&e.sid&&e.sid!==t)?e:null}function lt(e,{sessionId:t=null,now:n=Date.now()}={}){return Br($r(Vr(e)),t,n)?.tags??null}function jr(e,t,{sessionId:n=null,keepSession:r=!1,now:o=Date.now()}={}){let s=Vr(e),i=$r(s),u=Br(i,n,o),c=u?.tags??t??null;return c?Dr(s,{tags:c,at:o,sid:(r?n:null)??u?.sid??null}):i&&Dr(s,null),c}function dn(){Ae.clear();try{let e=`${P("visitCampaign")}:`;for(let t of Object.keys(localStorage))t.startsWith(e)&&localStorage.removeItem(t)}catch{}}var Qs=new Set(["audiences","decisions","recommendations"]);var ei=Symbol.for("@thg-agentic/hyper-personalisation-web.replay"),ti=Symbol.for("@thg-agentic/hyper-personalisation-web.unreachable"),ni=Symbol.for("@thg-agentic/hyper-personalisation-web.onsite-access");function ri(e){let t={...e??{}},n=Array.isArray(t.products)?t.products:null;if(t.item_count==null&&n){let r=n.map(o=>o?.quantity);r.every(Number.isInteger)&&(t.item_count=r.reduce((o,s)=>o+s,0))}return t}var oi="e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855";function si(e){if(/^[0-9a-fA-F]{64}$/.test(e))return e.toLowerCase();if(!/^[A-Za-z0-9+/_-]{43}=?$/.test(e))return null;try{let t=atob(e.replace(/-/g,"+").replace(/_/g,"/").padEnd(44,"="));return t.length!==32?null:Array.from(t,n=>n.charCodeAt(0).toString(16).padStart(2,"0")).join("")}catch{return null}}function ft(e){if(typeof e!="string")return null;let t=si(e.trim());return t===oi?null:t}var Hr=Object.freeze({email_sha256:"sha256",phone_sha256:"sha256",accepts_marketing:"boolean",gender:"string",created_at:"date-time"}),ii=/^\d{4}-\d{2}-\d{2}T([01]\d|2[0-3]):[0-5]\d:[0-5]\d(\.\d+)?(Z|[+-]([01]\d|2[0-3]):[0-5]\d)$/i;function ai(e){if(typeof e!="string"||!ii.test(e))return!1;let[t,n,r]=e.slice(0,10).split("-").map(Number),o=new Date(Date.UTC(t,n-1,r));return o.getUTCMonth()===n-1&&o.getUTCDate()===r&&!Number.isNaN(Date.parse(e))}function ci(e,t){return t===null?null:e==="sha256"?ft(t)??void 0:e==="date-time"?t instanceof Date?Number.isNaN(t.getTime())?void 0:t.toISOString():ai(t)?t:void 0:typeof t===e?t:void 0}function ui(e,t){let n={},r=[];for(let[o,s]of Object.entries(e)){let i=Object.hasOwn(Hr,o)?Hr[o]:null,u=i?ci(i,s):void 0;u===void 0?r.push(o):n[o]=u}return t&&r.length&&console.warn(`[hp] identify: not sent, not spec traits: ${r.join(", ")}`),n}var Fr=!1,qr=!1;function li(){qr||(qr=!0,console.warn("[hp] no consent adapter: events are sent under the host's lawful basis (basis 'host'). Pass `consent` to send only once the visitor allows analytics."))}function di(e){!e||Fr||(Fr=!0,console.warn("[hp] mintAnonymousId is ignored since 3.6: where device ids come from is set per source in the console (the site\u2019s own cookie, or Hyper-Personalisation\u2019s)."))}function fi(e){try{return ae(JSON.stringify(e))}catch{return 0}}function dt(e){return e&&typeof e.context=="object"&&e.context!==null?e.context:e}function pi(e,t){if(e==null||String(e)===t)return;let n=[["localStorage","retry",(r,o)=>[...Array.isArray(r)?r:[],...Array.isArray(o)?o:[]]],["sessionStorage","held",(r,o)=>o?{...o,items:[...r.items??[],...o.items??[]]}:r]];for(let[r,o,s]of n)try{let i=globalThis[r],u=$(P(o),e),c=i?.getItem(u);if(!c)continue;let l=$(P(o),t),f=i.getItem(l);i.setItem(l,JSON.stringify(s(JSON.parse(c),f?JSON.parse(f):null))),i.removeItem(u)}catch{}}function Kr(e){let t=ie(e?.apiHost);if(!t)throw new Error("createAnalytics: apiHost, when given, must be a host or an http(s) origin");if(e?.propertyId!==null&&!e?.propertyId)throw new Error("createAnalytics: propertyId is required (null: the ingest stamps the key\u2019s)");let n={libraryName:ln,libraryVersion:un,writeKey:"web",queryParamBlocklist:[],debug:!1,validate:null,consentTimeoutMs:5e3,...e,apiHost:t};Ke(n.storageNames),Ge();let r=!!n.consent;r||li();let o=null;n.getConsent=()=>o?o.stamp():qn();let s=()=>!r||o?.status==="granted";pi(n.propertyId,n.writeKey);let i=r&&n.holdAcrossPages?Bn($(P("held"),n.writeKey)):null,u=i?.read()??{items:[],anonymousId:null};n.mintAnonymousId!==void 0&&di(n.debug);let c=jn(n,{carried:u.anonymousId,mayStore:s,orOwn:!0}),l=kr({name:P("session"),domain:n.consentCookieDomain??null,mayStore:s}),f=n.getSessionId;n.getSessionId=()=>F(M(f,null))??l.get();let p=ur(P("preview"),n.consentCookieDomain??null),m=()=>F(M(f,null))??j(P("session")),A=Ur(typeof location>"u"?null:Ot(location.search)),w=(a=null)=>{p||jr(n.propertyId,a,{sessionId:m(),keepSession:s()})},k=(a,d)=>n.debug&&console.warn("[hp]",a,d??""),b=n.transport??new ut({apiHost:n.apiHost,writeKey:n.writeKey,storageKey:$(P("retry"),n.writeKey),mayPersist:r?()=>o?.status==="granted":void 0,deferReplay:r,onError:k}),x=$(P("previousPage"),n.propertyId),h=null,E=()=>{if(h)return h;try{return sessionStorage.getItem(x)||null}catch{return null}};typeof window<"u"&&window.addEventListener("pageshow",a=>{a.persisted&&(h=null)});let S=a=>{if(h=a||null,!(r&&o.status!=="granted"))try{sessionStorage.setItem(x,a)}catch{}},g=ar({key:$(P("decisions"),n.propertyId),mayStore:s});n.getDecisions??(n.getDecisions=g.current);let y=F(M(n.getUserId,null)),O=null,N=null,U=y?Ce(n.identityToken):null,G=null,q=null,ee=null,J=new Set,Se=new Set;function je(a){if(a.type==="page"&&(ee=null),a.type==="track"&&a.event==="Product Viewed"){let _=a.properties?.products?.[0]?.product_id;ee=typeof _=="string"&&_?_:ee}if(a.type!=="track"||a.event!=="Cart Updated")return;let d=a.properties?.value;q=typeof d=="number"&&Number.isFinite(d)&&d>=0?d:null;for(let _ of J)try{_()}catch(C){console.warn("[hp] a basket listener failed",C)}}function ce(a,d,_=!1){je(a),w();try{return R(a,d,_)}catch(C){if(C instanceof Ie)throw C;return console.warn("[hp] the event was not sent",C),null}}function R(a,d,_){let C=G;G=null;let V=a.type==="track"?a.event:a.type;if(!_&&!vr(n.plan,V))return null;let T={messageId:C?.messageId??oe(),timestamp:C?.timestamp??new Date().toISOString(),anonymousId:F(M(n.getAnonymousId,null)),userId:y??null,...a,context:Mn(n,dt(d))};if(T.properties&&(T.properties=Ct(T.properties)),typeof T.properties?.href=="string"&&(T.properties.href=Lt(T.properties.href,n)),!_&&!hr(T.anonymousId,n.sampleRate))return n.debug&&console.debug("[hp] not sent: outside the sample",T),null;if(n.beforeSend){let te;try{te=n.beforeSend(T)}catch(uo){return console.warn("[hp] beforeSend failed; the event was not sent",uo),null}if(!te)return null;let{type:z,event:wn,messageId:ao,timestamp:co}=T;T={...te,type:z,messageId:ao,timestamp:co,...wn?{event:wn}:{}}}if(n.validate){let te=n.validate(T,{producer:"web"});if(!te.valid){let z=`[hp] invalid ${T.event??T.type}:
1
+ (()=>{var In=e=>{throw TypeError(e)};var Ao=(e,t,n)=>t.has(e)||In("Cannot "+n);var vn=(e,t,n)=>t.has(e)?In("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,n);var L=(e,t,n)=>(Ao(e,t,"access private method"),n);var Ee=[];for(let e=2;Ee.length<64;e++)Ee.every(t=>e%t!==0)&&Ee.push(e);var En=e=>(e-Math.floor(e))*2**32>>>0,ko=Ee.slice(0,8).map(e=>En(Math.sqrt(e))),xo=Ee.map(e=>En(Math.cbrt(e))),Q=(e,t)=>e>>>t|e<<32-t;function Cn(e){let t=new TextEncoder().encode(String(e)),n=new Uint32Array((t.length+8>>6)*16+16);t.forEach((s,i)=>{n[i>>2]|=s<<24-i%4*8}),n[t.length>>2]|=128<<24-t.length%4*8,n[n.length-2]=Math.floor(t.length/2**29),n[n.length-1]=t.length*8;let r=Uint32Array.from(ko),o=new Uint32Array(64);for(let s=0;s<n.length;s+=16){for(let w=0;w<64;w++){if(w<16){o[w]=n[s+w];continue}let k=o[w-15],b=o[w-2],x=Q(k,7)^Q(k,18)^k>>>3,h=Q(b,17)^Q(b,19)^b>>>10;o[w]=o[w-16]+x+o[w-7]+h}let[i,c,u,d,f,p,m,I]=r;for(let w=0;w<64;w++){let k=Q(f,6)^Q(f,11)^Q(f,25),b=I+k+(f&p^~f&m)+xo[w]+o[w]|0,h=(Q(i,2)^Q(i,13)^Q(i,22))+(i&c^i&u^c&u)|0;[I,m,p,f,d,u,c,i]=[m,p,f,d+b|0,u,c,i,b+h|0]}[i,c,u,d,f,p,m,I].forEach((w,k)=>{r[k]+=w})}return Array.from(r,s=>s.toString(16).padStart(8,"0")).join("")}var vt=(e,t)=>e<<t|e>>>32-t;function On(e){let t=new Uint32Array((e.length+8>>6)*16+16);e.forEach((s,i)=>{t[i>>2]|=s<<24-i%4*8}),t[e.length>>2]|=128<<24-e.length%4*8,t[t.length-2]=Math.floor(e.length/2**29),t[t.length-1]=e.length*8;let n=Uint32Array.of(1732584193,4023233417,2562383102,271733878,3285377520),r=new Uint32Array(80);for(let s=0;s<t.length;s+=16){for(let p=0;p<80;p++)r[p]=p<16?t[s+p]:vt(r[p-3]^r[p-8]^r[p-14]^r[p-16],1);let[i,c,u,d,f]=n;for(let p=0;p<80;p++){let m,I;p<20?(m=c&u|~c&d,I=1518500249):p<40?(m=c^u^d,I=1859775393):p<60?(m=c&u|c&d|u&d,I=2400959708):(m=c^u^d,I=3395469782);let w=vt(i,5)+m+f+I+r[p]|0;[f,d,u,c,i]=[d,u,vt(c,30),i,w]}[i,c,u,d,f].forEach((p,m)=>{n[m]+=p})}let o=new Uint8Array(20);return n.forEach((s,i)=>{o[i*4]=s>>>24,o[i*4+1]=s>>>16,o[i*4+2]=s>>>8,o[i*4+3]=s}),o}var Io="e28e8ada-5b76-4209-bba9-79b823a0af75",vo=e=>Array.from(e,t=>t.toString(16).padStart(2,"0")).join("");function Pn(e,t){let n=Uint8Array.from(e.replace(/-/g,"").match(/../g),c=>Number.parseInt(c,16)),r=new TextEncoder().encode(t),o=new Uint8Array(16+r.length);o.set(n),o.set(r,16);let s=On(o).slice(0,16);s[6]=s[6]&15|80,s[8]=s[8]&63|128;let i=vo(s);return`${i.slice(0,8)}-${i.slice(8,12)}-${i.slice(12,16)}-${i.slice(16,20)}-${i.slice(20)}`}var ue=(e,t)=>typeof e=="string"&&e!==""&&e.length<=t?e:null;function He(e,t){return ue(e,64)??ue(t,256)}function Ln({sessionId:e,slot:t,arm:n}={}){let r=ue(e,256);return!r||!ue(t,256)||!ue(n,256)?null:Pn(Io,`${r}:${t}:${n}`)}var Eo="4b1f2c7e-9a3d-4e58-b6c1-2d7f0a9e8c53";function Tn({sessionId:e,surface:t}={}){let n=ue(e,256);return!n||!ue(t,64)?null:Pn(Eo,`${n}:${t}`)}var Co=Array.from({length:11},(e,t)=>t/10);function Oo(e,t){if(!e.isIntersecting)return!1;let{intersectionRect:n,boundingClientRect:r,rootBounds:o}=e;if(!n||!r)return!0;let s=n.width*n.height,i=r.width*r.height,c=o?Math.min(i,o.width*o.height):i;return c>0&&s/c>=t}function re(e){let{selector:t,onViewable:n,visibleRatio:r=.5,dwellMs:o=1e3,root:s=document}=e,i=new Map,c=new WeakSet,u=new Set,d=h=>{i.has(h)||i.set(h,setTimeout(()=>{i.delete(h),n(h)&&(p?.unobserve(h),u.delete(h))},o))},f=h=>{clearTimeout(i.get(h)),i.delete(h)},p=typeof IntersectionObserver>"u"?null:new IntersectionObserver(h=>{for(let O of h){let _=O.target;if(!Oo(O,r)){u.delete(_),f(_);continue}u.add(_),m()&&d(_)}},{threshold:Co}),m=()=>typeof document>"u"||document.visibilityState!=="hidden",I=()=>{if(m())for(let h of u)d(h);else for(let h of u)f(h)};document.addEventListener("visibilitychange",I);let w=()=>{for(let h of s.querySelectorAll(t))c.has(h)||(c.add(h),p?.observe(h))},k=typeof MutationObserver>"u"?null:new MutationObserver(()=>w()),b=()=>{w(),k?.observe(s===document?document.body:s,{childList:!0,subtree:!0})},x=s===document&&!document.body;return x?document.addEventListener("DOMContentLoaded",b,{once:!0}):b(),()=>{x&&document.removeEventListener("DOMContentLoaded",b),document.removeEventListener("visibilitychange",I),p?.disconnect(),k?.disconnect();for(let h of i.values())clearTimeout(h);i.clear(),u.clear()}}function Et(e,t={}){if(typeof window>"u"||typeof document>"u")return()=>{};let{selector:n="[data-hp-exposure]",visibleRatio:r=.5,dwellMs:o=1e3,root:s=document}=t;return re({selector:n,root:s,visibleRatio:r,dwellMs:o,onViewable(i){let c=i.dataset?.hpExposure?.trim();return c&&e.surfaceViewed({surface:c}),!0}})}var Nn=e=>{try{return new URL(e,document.baseURI).toString()}catch{return e}};function Ct(e,t={}){if(typeof window>"u"||typeof document>"u")return()=>{};let{selector:n="[data-hp-list]",tileSelector:r="[data-hp-product]",visibleRatio:o=.5,dwellMs:s=1e3,root:i=document}=t,c=new Set,u=w=>w.closest?.(n)??null,d=w=>{let k=w.dataset.hpList?.trim();return k?{list_id:k,category:w.dataset.hpListCategory?.trim()||null}:null},f=w=>Array.from(w.querySelectorAll(r)).filter(k=>u(k)===w),p=(w,k)=>{try{let b=JSON.parse(w.dataset.hpProduct??"");return!b||typeof b!="object"||!b.product_id?null:{...b,position:b.position??k+1,...b.url?{url:Nn(b.url)}:{},...b.image_url?{image_url:Nn(b.image_url)}:{}}}catch{return null}},m=re({selector:`${n} ${r}`,root:i,visibleRatio:o,dwellMs:s,onViewable(w){let k=u(w);if(!k||k.dataset.hpListView==="manual")return!0;let b=d(k);if(!b||c.has(b.list_id))return!0;let x=new Set,h=f(k).map(p).filter(O=>!O||x.has(O.product_id)?!1:(x.add(O.product_id),!0));return h.length===0||(c.add(b.list_id),e.productListViewed({...b,products:h})),!0}}),I=w=>{let b=w.target?.closest?.("a[href]")?.closest(r);if(!b)return;let x=u(b),h=p(b,x?f(x).indexOf(b):0);h&&e.productClicked({list_id:x?d(x)?.list_id??null:null,products:[h]})};return document.addEventListener("click",I,!0),()=>{document.removeEventListener("click",I,!0),m()}}function D(e,...t){let n=e.dataset??{};for(let r of t){let o=n[r];if(typeof o=="string"&&o.trim()!=="")return o.trim()}return null}function Fe(e,...t){let n=D(e,...t);if(n===null)return null;let r=Number(n);return Number.isFinite(r)?Math.trunc(r):null}function Po(e,t){let n=D(e,"hpPromotion");return n?{promotion_id:n,name:D(e,"hpPromotionName"),creative:D(e,"hpPromotionCreative"),position:D(e,"hpPromotionSlot")??String(t+1)}:null}function Ot(e,t={}){if(typeof window>"u"||typeof document>"u")return()=>{};let{selector:n="[data-hp-promotion]",resolve:r=Po,visibleRatio:o=.5,dwellMs:s=1e3,root:i=document}=t,c=new Set,u=p=>{let m=Array.from(i.querySelectorAll(n)),I=m.indexOf(p);try{return r(p,I<0?m.length:I)}catch{return null}},d=re({selector:n,root:i,visibleRatio:o,dwellMs:s,onViewable(p){let m=u(p);return!m||c.has(m.promotion_id)?!1:(c.add(m.promotion_id),e.promotionViewed(m),!0)}}),f=p=>{let m=p.target;if(!m||typeof m.closest!="function")return;let I=m.closest(n),w=m.closest("a[href]");if(!I||!w||!I.contains(w)&&!w.contains(I))return;let k=u(I);k&&e.promotionClicked({...k,href:w.getAttribute("href")})};return document.addEventListener("click",f,!0),()=>{document.removeEventListener("click",f,!0),d()}}function Lo(e){let t=D(e,"hpRecoRequest"),n=D(e,"hpRecoPlacement"),r=D(e,"hpRecoStrategy");if(!t||!n||!r)return null;let o=D(e,"hpRecoHoldout");return{recommendation_request_id:t,placement:n,strategy:r,recipe:D(e,"hpRecoRecipe"),algorithm_version:D(e,"hpRecoAlgorithmVersion"),experiment:D(e,"hpRecoExperiment"),variant:D(e,"hpRecoVariant"),holdout:o===null?null:o==="true",assignment_bucket:Fe(e,"hpRecoBucket"),assignment_unit_kind:D(e,"hpRecoUnitKind"),candidate_set_fingerprint:D(e,"hpRecoFingerprint"),candidate_set_size:Fe(e,"hpRecoCandidates"),ranked_by:D(e,"hpRecoRankedBy"),served_at:D(e,"hpRecoServedAt")}}function To(e,t){let n=D(e,"hpRecoProduct");if(!n)return null;let r=D(e,"hpRecoPrice");return{product_id:n,sku:D(e,"hpRecoSku"),name:D(e,"hpRecoName"),brand:D(e,"hpRecoBrand"),price:r===null||Number.isNaN(Number(r))?null:Number(r),position:Fe(e,"hpRecoPosition")??t+1}}function Pt(e,t={}){if(typeof window>"u"||typeof document>"u")return()=>{};let{selector:n="[data-hp-reco-request]",tileSelector:r="[data-hp-reco-product]",resolveRail:o=Lo,resolveTile:s=To,visibleRatio:i=.5,dwellMs:c=1e3,root:u=document}=t,d=new Set,f=new Map,p=new Map,m=(h,...O)=>{try{return h(...O)}catch{return null}},I=h=>typeof h.closest=="function"?h.closest(n):null,w=h=>Array.from(h.querySelectorAll(r)),k=(h,O)=>{if(p.delete(O.recommendation_request_id),d.has(O.recommendation_request_id))return;let _=w(h).map((y,P)=>m(s,y,P)).filter(y=>y?.product_id);if(_.length===0)return;d.add(O.recommendation_request_id);let g=[...f.get(O.recommendation_request_id)?.values()??[]].sort((y,P)=>y.position-P.position);e.recommendationsViewed({...O,products:_,viewable:g})},b=re({selector:`${n} ${r}`,root:u,visibleRatio:i,dwellMs:c,onViewable(h){let O=I(h);if(!O)return!0;let _=m(o,O);if(!_)return!0;let g=_.recommendation_request_id,y=m(s,h,w(O).indexOf(h));if(y?.product_id){f.has(g)||f.set(g,new Map);let P=f.get(g);P.has(y.position)||P.set(y.position,{position:y.position,product_id:y.product_id,viewable_at:new Date().toISOString()})}return!d.has(g)&&!p.has(g)&&p.set(g,setTimeout(()=>k(O,_),0)),!0}}),x=h=>{let O=h.target;if(!O||typeof O.closest!="function")return;let _=O.closest(r);if(!_)return;let g=O.closest("[data-hp-reco-interaction]"),y=O.closest("a[href]"),P=y&&(_.contains(y)||y.contains(_));if(!(g&&_.contains(g))&&!P)return;let N=I(_);if(!N)return;let V=m(o,N);if(!V)return;let G=m(s,_,w(N).indexOf(_));if(!G?.product_id)return;let F=V.recommendation_request_id;d.has(F)||(clearTimeout(p.get(F)),k(N,V)),e.productClicked({recommendation_request_id:V.recommendation_request_id,interaction:D(g??_,"hpRecoInteraction")??"navigate",products:[G]})};return document.addEventListener("click",x,!0),()=>{document.removeEventListener("click",x,!0);for(let h of p.values())clearTimeout(h);p.clear(),b()}}var _e=new Set(["home","list","product","search","basket","checkout","order_confirmation","login","register","account","info","blog","other"]),No=new Set(["products"]),Rn=e=>e==null;function Lt(e,t=new WeakSet){if(e instanceof Date)return e.toJSON();if(e===null||typeof e!="object"||t.has(e))return e;t.add(e);let n=Array.isArray(e)?e.map(r=>Lt(r,t)):Object.fromEntries(Object.entries(e).filter(([,r])=>!Rn(r)).map(([r,o])=>[r,Lt(o,t)]));return t.delete(e),n}function Tt(e){if(!e)return e;let t=Lt(e);for(let n of No)n in e&&Rn(e[n])&&(t[n]=e[n]);return t}function Mn(){try{let e=performance.getEntriesByType("navigation")[0];return e?["navigate","reload","back_forward","prerender"].includes(e.type)?e.type:"navigate":null}catch{return null}}var Ro=new Set(["","unknown","undefined","null","none","nil","nan","anonymous","guest","0","-1"]);function H(e){if(e==null)return null;let t=String(e).trim();return Ro.has(t.toLowerCase())?null:t}var Ce=e=>typeof e=="string"&&e!==""?e:null;function oe(){return typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{let t=Math.random()*16|0;return(e==="x"?t:t&3|8).toString(16)})}var Dn="1.22";function j(e){if(typeof document>"u")return null;try{let t=document.cookie.split(";").map(n=>n.trim()).find(n=>n.startsWith(`${e}=`));return t&&decodeURIComponent(t.slice(e.length+1))||null}catch{return null}}var Mo={gclid:"gclid",fbclid:"fbclid",ttclid:"ttclid"},Do=/[a-z0-9._%+-]+@[a-z0-9-]+(\.[a-z0-9-]+)*\.[a-z]{2,}/i,Uo=/\d(?:[ -]?\d){12,}/,Vo=new Set(["gclid","fbclid","ttclid","msclkid"]);function Vn(e,t=""){if(typeof e!="string"||e==="")return!1;let n=[e];try{let o=decodeURIComponent(e.replace(/\+/g," "));o!==e&&n.push(o)}catch{}let r=!Vo.has(String(t).toLowerCase());return n.some(o=>Do.test(o)||r&&Uo.test(o))}function Rt(e){if(!e)return null;let t=new URLSearchParams(e),n={},r={utm_source:"source",utm_medium:"medium",utm_campaign:"name",utm_term:"term",utm_content:"content"};for(let[o,s]of[...Object.entries(r),...Object.entries(Mo)]){let i=t.get(o);i&&!Vn(i,o)&&(n[s]=i)}return Object.keys(n).length?n:null}var $o=["email","e-mail","password","pass","pwd","token","auth","code","uid","customer_id","postcode","zip","phone","applyCode"],Bo=["email","password","passwd","pwd","token","secret","auth","session","phone","postcode","zip","address","birth","card","cvv","iban","ssn","customerid","userid"],jo=["tel","uid","dob"],qo=["utm_source","utm_medium","utm_campaign","utm_term","utm_content","gclid","fbclid","ttclid","msclkid"],Ho=new Set($o.map(e=>e.toLowerCase()));function Fo(e){let t=String(e).toLowerCase();if(Ho.has(t))return!0;let n=t.replace(/[-_.]/g,"");return Bo.some(o=>n.includes(o))?!0:String(e).replace(/([a-z0-9])([A-Z])/g,"$1 $2").toLowerCase().split(/[^a-z0-9]+/).some(o=>jo.includes(o))}function Nt(e){return(e??[]).map(t=>{try{return new RegExp(`^${t}$`,"i")}catch{return{test:n=>n.toLowerCase()===String(t).toLowerCase()}}})}function $n(e,t={}){if(!e)return null;try{let n=new URLSearchParams(e),r=t.queryParamAllowlist?Nt([...t.queryParamAllowlist,...qo]):null,o=Nt(t.queryParamBlocklist),s=Nt(t.sensitiveParamAllowlist);for(let c of new Set(n.keys()))(Fo(c)&&!s.some(d=>d.test(c))||n.getAll(c).some(d=>Vn(d,c))||(r?!r.some(d=>d.test(c)):o.some(d=>d.test(c))))&&n.delete(c);let i=n.toString();return i?`?${i}`:""}catch{return""}}function Bn(e,t,n={}){if(!e)return null;try{let r=new URL(e);return t&&r.origin===t?r.origin+r.pathname+($n(r.search,n)??""):r.origin+r.pathname}catch{return null}}function Mt(e,t={}){if(typeof e!="string"||typeof location>"u")return null;try{let n=new URL(e,location.href);return n.protocol!=="https:"&&n.protocol!=="http:"?null:Bn(n.href,location.origin,t)}catch{return null}}function Dt(e){if(typeof e!="string")return null;let t=e.trim().toUpperCase();return/^[A-Z]{3}$/.test(t)?t:null}function Un(e){if(typeof e!="string")return null;let t=e.trim().toUpperCase();return/^[A-Z]{2}$/.test(t)?t:null}function Ut(e){if(typeof e!="string")return null;let t=e.trim().replace(/_/g,"-");if(!/^[A-Za-z]{2,3}(-[A-Za-z0-9]{2,8})*$/.test(t))return null;try{return Intl.getCanonicalLocales(t)[0]}catch{return null}}function M(e,t){if(typeof e=="function")try{let n=e();if(n!=null)return n}catch{}return t}function Ko(e){return{...e.propertyId==null?{}:{property_id:String(e.propertyId)},channel:e.channel??null,market:e.market??null,environment:e.environment??null}}function Go(e){let t=typeof window<"u"?window.location:null,n=t?$n(t.search,e):null;return{url:t?t.origin+t.pathname+(n??""):e.pageUrl??null,path:t?t.pathname:e.pagePath??null,search:n??null,referrer:typeof document<"u"?Bn(document.referrer,t?.origin,e):null,title:typeof document<"u"&&document.title||null,type:e.pageType??null}}var Oe;function zo(){if(Oe!==void 0)return Oe;try{Oe=globalThis.Temporal?.Now?.timeZoneId?.()||Intl.DateTimeFormat().resolvedOptions().timeZone||null}catch{Oe=null}return Oe}function jn(e,t={}){let n=typeof window<"u"?window.location:null,r={library:{name:e.libraryName,version:e.libraryVersion},spec:{version:Dn},source:Ko(e),session_id:M(e.getSessionId,null),identity_trust:H(M(e.getAnonymousId,null))?"device":"none",page:Go(e),campaign:n?Rt(n.search):null,device:{user_agent:typeof navigator<"u"?navigator.userAgent:null,type:null,viewport_width:typeof window<"u"?window.innerWidth:null,viewport_height:typeof window<"u"?window.innerHeight:null},currency:Dt(M(e.getCurrency,e.currency)),locale:Ut(M(e.getLocale,e.locale)),timezone:zo(),country:Un(e.country),ship_to_country:Un(M(e.getShipToCountry,e.shipToCountry)),ip:null,bot:null,consent:e.getConsent?.()??null,experiments:M(e.getExperiments,null),audiences:M(e.getAudiences,null),decisions:M(e.getDecisions,null),recommendations:M(e.getRecommendations,null),extensions:M(e.getExtensions,null)};return qn(r,t)}function qn(e,t){if(!t)return e;let n={...e};for(let[r,o]of Object.entries(t))o&&typeof o=="object"&&!Array.isArray(o)&&e[r]&&typeof e[r]=="object"&&!Array.isArray(e[r])?n[r]=qn(e[r],o):o!==void 0&&(n[r]=o);return n}var fe=Object.freeze({consent:"thg_hp_consent",retry:"thg_hp_retry",sessionSignals:"thg_hp_session_signals",identified:"thg_hp_identified",previousPage:"thg_hp_prev_page",decisions:"thg_hp_decisions",settings:"thg_hp_settings",held:"thg_hp_held",carried:"thg_hp_carried",recommendationContext:"thg_hp_recommendation_context",anonymousId:"thg_hp_anonymous_id",session:"thg_hp_session",preview:"thg_hp_preview",debug:"thg_hp_debug",onsite:"thg_hp_onsite",visitCampaign:"thg_hp_visit_campaign",answers:"thg_hp_answers"}),Jo={retry:"cdp.retry",sessionSignals:"cdp_session_signals",identified:"cdp_identified",previousPage:"cdp_prev_page_message_id"},Ke={...fe},Hn=!1;function Ge(e){let t={...fe};for(let[n,r]of Object.entries(e??{})){if(!(n in fe))throw new Error(`storageNames: unknown kind "${n}"`);if(typeof r!="string"||!/^[\w.-]+$/.test(r))throw new Error(`storageNames.${n} must be a non-empty cookie-safe name`);t[n]=r}Ke=t}function C(e){return Ke[e]}var Wo="_",Fn=e=>e==null||e===""?Wo:String(e);function U(e,t,n){let r=`${e}:${Fn(t)}`;return n==null||n===""?r:`${r}:${n}`}function Kn(e,t){return`${e}:${Fn(t)}:`}function ze(e){let t=`${Ke[e]}:`;try{for(let n of Object.keys(localStorage))n.startsWith(t)&&localStorage.removeItem(n)}catch{}}function Je(){if(!Hn){Hn=!0;for(let e of[()=>localStorage,()=>sessionStorage]){let t;try{if(t=e(),!t)continue;for(let n of Object.keys(t))for(let[r,o]of Object.entries(Jo)){if(n!==o&&!n.startsWith(`${o}:`))continue;let s=Ke[r]+n.slice(o.length);t.getItem(s)===null&&t.setItem(s,t.getItem(n)),t.removeItem(n)}}catch{}}}}var $t=1800*1e3,We=()=>{try{return typeof sessionStorage>"u"?null:sessionStorage}catch{return null}},Vt=()=>{try{return typeof localStorage>"u"?null:localStorage}catch{return null}};function Gn(e,t=()=>Date.now()){return{read(){try{let n=We()?.getItem(e),r=n?JSON.parse(n):null;return!r||t()-r.savedAt>$t?(r&&We()?.removeItem(e),{items:[],anonymousId:null}):{items:Array.isArray(r.items)?r.items:[],anonymousId:typeof r.anonymousId=="string"?r.anonymousId:null}}catch{return{items:[],anonymousId:null}}},write(n,r=null){try{n.length===0?We()?.removeItem(e):We()?.setItem(e,JSON.stringify({savedAt:t(),items:n,anonymousId:r}))}catch{}}}}var Xo=400*24*60*60;function se(e,t,n,r){if(typeof document>"u")return!1;try{let o=typeof location<"u"&&location.protocol==="https:"?"; Secure":"",s=r?`; Domain=${r}`:"",i=n===null?"":`; Max-Age=${n}`;return document.cookie=`${e}=${encodeURIComponent(t)}; Path=/${i}; SameSite=Lax`+s+o,!0}catch{return!1}}function Yo({name:e,domain:t=null,legacyKey:n,read:r,mint:o,mayStore:s,carried:i=null}){let c=null;try{c=Vt()?.getItem(n)||null}catch{c=null}let u=r(e)??c??i,d=!1,f=()=>{if(!(d||u===null||!s())&&(d=se(e,u,Xo,t),!(!d||c===null)))try{Vt()?.removeItem(n),c=null}catch{}};return{get(){return u??(u=o()),f(),u},peek:()=>u,persist:f,forget(){se(e,"",0,t),u=null,d=!1;try{Vt()?.removeItem(n)}catch{}c=null}}}function zn(e,{carried:t=null,mayStore:n,orOwn:r=!1}){let o=e.anonymousIdSource,s=()=>Yo({name:C("anonymousId"),domain:e.consentCookieDomain??null,legacyKey:U(C("anonymousId"),e.propertyId),read:j,mint:oe,mayStore:n,carried:t});if(o?.source==="hp_cookie"){let u=s();return e.getAnonymousId=()=>u.get(),u}if(o?.source==="site_cookie"&&o.cookie){let u=o.cookie;e.getAnonymousId=()=>j(u)}if(!r)return null;let i=e.getAnonymousId,c=s();return e.getAnonymousId=()=>H(M(i,null))??c.get(),c}var Zo=200;function Jn(e,t,n=()=>Date.now()){let r=()=>U(C("carried"),e),o=!1;function s(){try{let i=JSON.parse(sessionStorage.getItem(r())??"null");return!i||!(n()-i.savedAt<=$t)?[]:Array.isArray(i.calls)?i.calls:[]}catch{return[]}}return{take(){let i=s();try{sessionStorage.removeItem(r())}catch{}return i},save(i){try{return o||!t()?!1:(sessionStorage.setItem(r(),JSON.stringify({savedAt:n(),calls:[...s(),...i].slice(-Zo)})),!0)}catch{return!1}},close(){o=!0}}}var Oa=fe.consent,Xe=Object.freeze({visitor:"visitor",host:"host"}),Xn=()=>({basis:Xe.host}),Qo="hp-consent",pe=["analytics","marketing","personalisation","ad_user_data","ad_personalization"],Yn={analytics:"a",marketing:"m",personalisation:"p",ad_user_data:"aud",ad_personalization:"adp"},ne=()=>typeof window<"u",Zn=()=>ne()&&typeof window.cookieStore?.addEventListener=="function",es=e=>e===!0?!0:e===!1?!1:null;function be(e){if(!e||typeof e!="object")return null;let t={};for(let n of pe)t[n]=es(e[n]);return t}function Bt(e,t){return!e||!t?e===t:pe.every(n=>e[n]===t[n])}function jt(e){if(!e)return"";let t=[];for(let n of pe){let r=e[n];(r===!0||r===!1)&&t.push(`${Yn[n]}=${r?1:0}`)}return t.join("&")}function qt(e){return{[Qo]:jt(be(e))}}function Pe(e){let t=be({});if(e==null)return t;let n=String(e).trim();if(n.length>=2&&n.startsWith('"')&&n.endsWith('"')&&(n=n.slice(1,-1)),n.includes("%"))try{n=decodeURIComponent(n.replace(/\+/g," "))}catch{return t}let r=Object.fromEntries(Object.entries(Yn).map(([s,i])=>[i,s])),o=new Set;for(let s of n.split("&")){let i=s.indexOf("=");if(i<=0)continue;let c=r[s.slice(0,i).trim()],u={1:!0,0:!1}[s.slice(i+1).trim()]??null;!c||u===null||o.has(c)||(t[c]===null?t[c]=u:t[c]!==u&&(t[c]=null,o.add(c)))}return t}function Ht(e,t){if(!t)return e;let n=r=>{if(!r)return r;let o={...r};for(let s of pe)s!=="analytics"&&t[s]!==!0&&(o[s]=null);return o};return{name:e.name,basis:e.basis,read:()=>n(e.read()),subscribe:r=>e.subscribe(o=>r(n(o))),get observesChanges(){return e.observesChanges}}}function Ft(e,t={}){return{...e,ad_user_data:t.ad_user_data??e.marketing,ad_personalization:t.ad_personalization??e.marketing}}function Ye(e,t){let n=!0;return{notify:()=>{if(n)try{let o=e();o&&t(o)}catch{}},stop:()=>n=!1}}var ts={analytics:["analytics","measure_content_performance","audience_measurement"],marketing:["marketing","targeting","advertising","select_personalized_ads","create_ads_profile"],personalisation:["personalisation","personalization","select_personalized_content","create_content_profile"]};function ns(e,t){if(!t?.length)return null;let n=!1;for(let[r,o]of Object.entries(e)){let s=String(o?.id??r).toLowerCase();if(t.some(c=>{let u=String(c).toLowerCase();return s===u||s.startsWith(`${u}-`)})&&(n=!0,o?.enabled===!0))return!0}return n?!1:null}function Qn(e={}){let t={...ts,...e.purposes};function n(){let r=ne()?window.Didomi:void 0;if(!r?.getCurrentUserStatus||r.shouldUserStatusBeCollected?.()!==!1||r.isUserStatusPartial?.()===!0)return null;let o=r.getCurrentUserStatus()?.purposes;if(!o||typeof o!="object")return null;let s=i=>ns(o,t[i]);return Ft({analytics:s("analytics"),marketing:s("marketing"),personalisation:s("personalisation")},{ad_user_data:s("ad_user_data"),ad_personalization:s("ad_personalization")})}return{name:"didomi",read:n,observesChanges:!0,subscribe(r){if(!ne())return()=>{};let o=Ye(n,r),s={event:"consent.changed",listener:o.notify};return window.didomiEventListeners=window.didomiEventListeners||[],window.didomiEventListeners.push(s),window.didomiOnReady=window.didomiOnReady||[],window.didomiOnReady.push(i=>{o.notify(),(i??window.Didomi)?.on?.("consent.changed",o.notify)}),window.Didomi?.on?.("consent.changed",o.notify),o.stop}}}function Wn(e){let t={};if(!e)return t;for(let n of String(e).split("&")){let r=n.indexOf("=");if(r<=0)continue;let o=n.slice(r+1).replace(/\+/g," ");try{o=decodeURIComponent(o)}catch{}t[n.slice(0,r)]=o}return t}function er(e={}){let t={analytics:"C0002",personalisation:"C0003",marketing:"C0004",...e.groups},n=e.impliedConsent===!0;function r(){let i=Wn(j("OptanonConsent"));if(i.groups){let d={};for(let f of i.groups.split(",")){let[p,m]=f.split(":");p?.trim()&&(d[p.trim()]=m==="1"?!0:m==="0"?!1:null)}return f=>d[f]??!1}let c=ne()?window.OnetrustActiveGroups:void 0;if(typeof c!="string"||!c.length)return null;let u=new Set(c.split(",").map(d=>d.trim()).filter(Boolean));return d=>u.has(d)}function o(){if(j("OptanonAlertBoxClosed"))return!0;try{if(ne()&&window.OneTrust?.IsAlertBoxClosed?.()===!0)return!0}catch{}return n&&ne()&&(!!window.OneTrust||typeof window.OnetrustActiveGroups=="string")}function s(){if(!o())return null;let i=r();if(!i)return null;let c=p=>t[p]?i(t[p]):null,u=Ft({analytics:c("analytics"),marketing:c("marketing"),personalisation:c("personalisation")},{ad_user_data:c("ad_user_data"),ad_personalization:c("ad_personalization")}),d=Wn(j("OptanonConsent"));return(typeof navigator<"u"&&navigator.globalPrivacyControl===!0||d.isGpcEnabled==="1")&&(u.marketing=!1,u.ad_user_data=!1,u.ad_personalization=!1),u}return{name:"onetrust",read:s,observesChanges:!0,subscribe(i){if(!ne())return()=>{};let c=Ye(s,i),u=!1,d=()=>{u||!window.OneTrust?.OnConsentChanged||(u=!0,window.OneTrust.OnConsentChanged(c.notify))};window.addEventListener("OneTrustGroupsUpdated",c.notify);let f=window.OptanonWrapper;return window.OptanonWrapper=function(...m){try{typeof f=="function"&&f.apply(this,m)}finally{d(),c.notify()}},d(),()=>{c.stop(),window.removeEventListener("OneTrustGroupsUpdated",c.notify)}}}}function rs(e){let t=String(e).split(",").map(n=>n.trim()).filter(Boolean);return t.length?new Set(t):null}function tr(e){let{name:t,categories:n,parse:r=rs,refusedValue:o,source:s="native",changeEvent:i="thg_hp_consent_change"}=e??{};if(typeof t!="string"||t==="")throw new Error("cookieConsent: `name` (the cookie your banner writes) is required");if(!n||typeof n.analytics!="string")throw new Error("cookieConsent: `categories.analytics` (the category id that grants analytics) is required");function c(){let u=j(t);if(u==null)return null;let d;if(o!==void 0&&u===o)d=new Set;else try{d=r(u)}catch{d=null}if(!(d instanceof Set))return null;let f=p=>n[p]?d.has(n[p]):null;return Ft({analytics:f("analytics"),marketing:f("marketing"),personalisation:f("personalisation")},{ad_user_data:f("ad_user_data"),ad_personalization:f("ad_personalization")})}return{name:s,read:c,get observesChanges(){return Zn()},subscribe(u){if(!ne())return()=>{};let d=Ye(c,u),f=p=>{[...p.changed??[],...p.deleted??[]].some(I=>I?.name===t)&&d.notify()};return window.addEventListener(i,d.notify),window.cookieStore?.addEventListener?.("change",f),()=>{d.stop(),window.removeEventListener(i,d.notify),window.cookieStore?.removeEventListener?.("change",f)}}}}function nr(e={}){let t=e.name??C("consent"),n=()=>{let r=j(t);if(r==null)return null;let o=Pe(r);return o.analytics==null?null:o};return{name:"forwarded",read:n,get observesChanges(){return Zn()},subscribe(r){if(!ne())return()=>{};let o=Ye(n,r),s=i=>{[...i.changed??[],...i.deleted??[]].some(u=>u?.name===t)&&o.notify()};return window.cookieStore?.addEventListener?.("change",s),()=>{o.stop(),window.cookieStore?.removeEventListener?.("change",s)}}}}function rr(e){let t=be(e);return{name:"static",basis:Xe.host,read:()=>t?{...t}:null,observesChanges:!0,subscribe:()=>()=>{}}}function or(e){if(e==null)return null;let t=String(e).split("/").map(n=>n.trim()).filter(Boolean).join("/");return t===""?null:t}function os(e){let t=e.item_category;if(t!=null&&String(t).includes("/"))return or(t);let n=[t,e.item_category2,e.item_category3,e.item_category4,e.item_category5].map(r=>r==null?"":String(r).trim()).filter(Boolean);return or(n.join("/"))}var ss=e=>{if(e==null||typeof e=="object")return null;let t=String(e).trim();return t===""?null:t};function is(...e){for(let t of e){if(typeof t=="number"&&Number.isFinite(t))return String(t);if(typeof t=="string"&&t.trim()!=="")return t.trim()}return null}var Ze=e=>is(e.item_group_id,e.item_id);function as(e,t=Ze){if(!e)return null;let n=c=>c==null||c===""||Number.isNaN(Number(c))?null:Number(c),r=c=>{let u=n(c);return u==null?null:Math.round(u*1e6)/1e6},o=c=>{let u=r(c);return u!=null&&u>=0?u:null},s=c=>{let u=n(c);return Number.isInteger(u)&&u>=0?u:null},i=ss;return{product_id:i(t(e)),sku:i(e.item_id),name:i(e.item_name),brand:i(e.item_brand),variant:i(e.item_variant)??i(e.variant),category:os(e),price:r(e.price),discount:o(e.discount),quantity:s(e.quantity),coupon:i(e.coupon),position:s(e.index)!=null?s(e.index)+1:null,url:i(e.url)??i(e.item_url)??null,image_url:i(e.image_url)??i(e.image_link)??null,displayed_sku:i(e.displayed_sku)??i(e.displayed_variant_sku)}}function Kt(e,t=Ze){return(e??[]).map(n=>as(n,t)).filter(n=>n?.product_id)}var cs=1e3,us={shipping:2,payment:3},ls=new Set(["password","google","apple","facebook","magic_link","sso","passkey","other"]),q=e=>{if(e==null||typeof e=="object")return null;let t=String(e).trim();return t===""?null:t},ds=e=>{if(e==null||e===""||typeof e=="object")return null;let t=Number(e);return Number.isFinite(t)&&t>=0?t:null},Qe=e=>e!==null&&typeof e=="object";function fs(e){return Array.isArray(e.items)?e.items.filter(Qe):null}function sr(e){let t=q(e)?.toLowerCase().replace(/[\s-]+/g,"_");return t?ls.has(t)?t:t==="email"||t==="email_password"?"password":"other":null}function ps({ecommerce:e,items:t}){let n=s=>({promotion_id:q(s.promotion_id),name:q(s.promotion_name),creative:q(s.creative_name),position:q(s.creative_slot)}),r=new Set,o=[];for(let s of[n(e),...t.map(n)])!s.promotion_id||r.has(s.promotion_id)||(r.add(s.promotion_id),o.push(s));return o}var ir=({ecommerce:e,items:t})=>q(e.item_list_id)??q(e.item_list_name)??q(t[0]?.item_list_id)??q(t[0]?.item_list_name),me=(e,t)=>t.products?.length?{event:e,properties:t}:null,ms=new Set(["product","products","item","items"]);function hs({ecommerce:e}){let t=q(e.item_id),n=q(e.content_type)?.toLowerCase();return!t||n&&!ms.has(n)?null:{event:"Product Shared",properties:{share_via:q(e.method),products:[{product_id:t}]}}}function gs(e){let t=o=>me("Product List Viewed",{list_id:ir(o),products:o.products}),n=o=>{let s=q(o.ecommerce.search_term);return s?{event:"Products Searched",properties:{query:s,...o.products.length?{products:o.products}:{}}}:null},r=o=>s=>s.promotions.map(i=>({event:o,properties:i}));return{view_item:o=>me("Product Viewed",{currency:o.currency,value:o.value,products:o.products.slice(0,1)}),view_item_list:t,view_search_results:o=>n(o)??t(o),search:n,select_item:o=>me("Product Clicked",{list_id:ir(o),products:o.products.slice(0,1)}),add_to_cart:o=>me("Product Added",{cart_id:q(o.ecommerce.cart_id),products:o.products}),remove_from_cart:o=>me("Product Removed",{cart_id:q(o.ecommerce.cart_id),products:o.products}),view_cart:o=>({event:"Cart Viewed",properties:{cart_id:q(o.ecommerce.cart_id),value:o.value,currency:o.currency,coupon:q(o.ecommerce.coupon),...o.itemsListed?{products:o.products}:{}}}),begin_checkout:o=>me("Checkout Started",{value:o.value,currency:o.currency,coupon:q(o.ecommerce.coupon),products:o.products}),add_shipping_info:o=>({event:"Checkout Step Completed",properties:{step:e.shipping,step_name:"shipping",shipping_method:q(o.ecommerce.shipping_tier)}}),add_payment_info:o=>({event:"Payment Info Entered",properties:{step:e.payment,step_name:"payment",payment_method:q(o.ecommerce.payment_type)}}),view_promotion:r("Promotion Viewed"),select_promotion:r("Promotion Clicked"),add_to_wishlist:o=>me("Product Added to Wishlist",{products:o.products}),share:hs,login:o=>({event:"Signed In",properties:{method:sr(o.ecommerce.method)}}),sign_up:o=>({event:"Signed Up",properties:{method:sr(o.ecommerce.method)}})}}var ys=e=>e.event;function ws(e,t){if(!Qe(e))return null;if(typeof e.length=="number"&&e[0]==="event"&&typeof e[1]=="string"){let r=Qe(e[2])?e[2]:{};return{name:e[1],entry:r,ecommerce:r}}let n=q(t(e));return n?{name:n,entry:e,ecommerce:Qe(e.ecommerce)?e.ecommerce:e}:null}function Gt(e){return Array.isArray(e)?`[${e.map(Gt).join(",")}]`:e&&typeof e=="object"?`{${Object.keys(e).sort().map(t=>`${JSON.stringify(t)}:${Gt(e[t])}`).join(",")}}`:JSON.stringify(e??null)}function ar(e,t={}){if(!e||typeof e.track!="function")throw new Error("connectDataLayer: analytics must have a track(event, properties, options) method");let n=t.dataLayer??(typeof window<"u"?window.dataLayer=window.dataLayer||[]:null);if(!Array.isArray(n))return()=>{};let r=gs({...us,...t.steps}),o=t.map??{},s=t.eventName??ys,i=t.productId??Ze,c=new Set(["purchase","refund",...t.ignore??[]]),u=t.dedupeMs??cs,d=new Map,f=!0;function p(_,g,y){if(u<=0)return!1;let P=`${_}|${y??""}|${Gt(g)}`,N=Date.now();for(let[V,G]of d)N-G>u&&d.delete(V);return d.has(P)?!0:(d.set(P,N),!1)}let m=null,I=new Set;function w(_,g){if(_!=="Product Viewed")return!1;let y=typeof location>"u"?"":location.pathname;y!==m&&(m=y,I.clear());let P=g.products?.[0]?.product_id;return P?I.has(P)?!0:(I.add(P),!1):!1}function k({event:_,properties:g={}},y){if(!_||p(_,g,y)||w(_,g))return;let P=y?{context:{currency:y}}:void 0;if(_==="Signed Out"&&typeof e.signedOut=="function"){e.signedOut(P);return}e.track(_,g,P)}function b(_){let g=t.transform?t.transform(_):_,y=ws(g,s);if(!y||c.has(y.name))return;let P=Object.hasOwn(o,y.name),N=P?o[y.name]:r[y.name];if(typeof N!="function")return;let V=fs(y.ecommerce),G=V??[],F={...y,items:G,itemsListed:V!==null,products:Kt(G,i),currency:Dt(y.ecommerce.currency),value:ds(y.ecommerce.value)};F.promotions=ps(F);let ee=P?N(g,{...F,toProducts:W=>Kt(W,i)}):N(F);for(let W of[ee].flat())W&&k(W,F.currency)}function x(_){if(f)try{b(_)}catch(g){try{t.onError?.(g,_)}catch{}}}for(let _ of n.slice())x(_);let h=n.push;function O(..._){let g=h.apply(this,_);for(let y of _)x(y);return g}return n.push=O,()=>{f=!1,n.push===O&&(n.push=h)}}var Ss="hp_debug",_s=256;function bs(){try{return new URLSearchParams(location.search).get(Ss)}catch{return null}}function cr(e,t){if(typeof location>"u")return!1;try{let n=bs();if(n!==null){let o=n.trim();o===""||o.length>_s?sessionStorage.removeItem(t):sessionStorage.setItem(t,o)}let r=sessionStorage.getItem(t);return!!(e&&r&&Cn(r)===e)}catch{return!1}}var Ae=class extends Error{},As={inHoldout:()=>!0,personalisationGroup:()=>"excluded",servingHeaders:()=>({}),recommendationContext:()=>({}),flush:()=>Promise.resolve(),reset:()=>{}};function zt(e,t){let n=As[e]??(()=>null),r=o=>(console.warn(`[hp] ${String(e)} failed; nothing was sent`,o),n());return function(...s){try{let i=t.apply(this,s);return typeof i?.then=="function"?Promise.resolve(i).catch(r):i}catch(i){if(i instanceof Ae)throw i;return r(i)}}}function ur(e){for(let t of Reflect.ownKeys(e)){let{value:n}=Object.getOwnPropertyDescriptor(e,t)??{};typeof n=="function"&&(e[t]=zt(t,n))}return e}var Le=Symbol("hp.identityOption");var ks=2160*60*60*1e3,xs=50,Is=20,vs=128,Jt=e=>U(C("answers"),e),tt=e=>typeof e=="string"&&e!==""&&e.length<=vs;function lr(e,t){try{let n=JSON.parse(localStorage.getItem(Jt(e)));return Array.isArray(n)?n.filter(r=>tt(r?.q)&&Array.isArray(r.v)&&r.v.every(tt)&&t-r.at<ks):[]}catch{return[]}}function dr(e,t=Date.now()){return Object.fromEntries(lr(e,t).map(n=>[n.q,n.v]))}function fr(e,t){let n=Array.isArray(t)?t:[];return(Array.isArray(e)?e:[]).flatMap(r=>{let o=n.find(c=>c?.key===r?.question);if(!o||o.type!=="one"&&o.type!=="many")return[];let s=new Set((o.options??[]).map(c=>c?.value)),i=(Array.isArray(r.values)?r.values:[]).filter(c=>s.has(c));return i.length?[{question:r.question,values:i}]:[]})}function pr(e,t,n=Date.now()){let r=(Array.isArray(t)?t:[]).filter(i=>tt(i?.question)&&Array.isArray(i.values));if(!r.length)return;let o=new Set(r.map(i=>i.question)),s=[...lr(e,n).filter(i=>!o.has(i.q)),...r.map(i=>({q:i.question,v:i.values.filter(tt).slice(0,Is),at:n}))].slice(-xs);try{et.delete(e),localStorage.setItem(Jt(e),JSON.stringify(s))}catch{}}var et=new Set;function mr(e){if(e===void 0)ze("answers"),et.clear();else if(!et.has(e)){try{localStorage.removeItem(Jt(e))}catch{}et.add(e)}}var Es=4320*60*60,Cs=100,Os=1e3,Ps=2e3,hr=500,nt=e=>(e?.unref?.(),e);function Ls(e,t){if(t?.analytics===!0&&e.analytics===!1)return"withdrawn";let n=pe.map(r=>e[r]).filter(r=>r!==null);return n.length&&n.every(Boolean)?"accept_all":n.length&&n.every(r=>!r)?"reject_all":"custom"}function Ts(e,t,n=C("consent")){if(!(typeof document>"u"))try{let r=typeof location<"u"&&location.protocol==="https:"?"; Secure":"",o=t?`; Domain=${t}`:"";document.cookie=`${n}=${jt(e)}; Path=/; Max-Age=${Es}; SameSite=Lax`+o+r}catch{}}function Ns(e){let t=Pe(j(e));return pe.some(n=>t[n]!==null)?t:null}function gr(e){let{adapter:t,timeoutMs:n=5e3,cookieDomain:r=null,cookieName:o=C("consent"),release:s,announce:i}=e,c=e.discard??(()=>{}),u="pending",d=null,f=null,p=null,m=null,I=!1,w=null,k=[],b=R=>{u=R,e.onStatus?.(R)};function x(){try{return be(t.read())}catch{return null}}function h(){f&&clearInterval(f),p&&clearTimeout(p),f=null,p=null}let O=()=>typeof window<"u"&&typeof document<"u",_=()=>{try{return typeof t.subscribe=="function"&&t.observesChanges===!0}catch{return!1}};function g(){m&&clearInterval(m),m=null}function y(){I||m||d===null||_()||O()&&document.visibilityState==="hidden"||(m=nt(setInterval(()=>F(x()),Ps)))}let P=()=>u==="pending"||u==="unknown",N=e.store??null,V=()=>{let R=k.splice(0);N?.write([]);for(let K of R)s(K)},G=()=>{let R=k.splice(0);N?.write([]);for(let K of R)c(K)};function F(R){let K=be(R);if(!K||K.analytics===null)return;let X=d===null,Y=X?Ns(o):d;if(!X&&Bt(Y,K))return;h(),d=K,y(),Ts(K,r,o);let ve=!Bt(Y,K);if(K.analytics){b("granted"),V(),ve&&i({action:Ls(K,Y),state:K,previous:Y,withdrawal:!1});return}G(),Y?.analytics===!0&&i({action:"withdrawn",state:K,previous:Y,withdrawal:!0}),b("denied")}function ee(){p=null,u==="pending"&&(b("unknown"),f&&clearInterval(f),f=nt(setInterval(()=>F(x()),Os)))}function W(R){if(P()){if(N){N.write(k);return}R?.type!=="visibilitychange"&&!R?.persisted&&G()}}let Se=R=>{document.visibilityState==="hidden"?(g(),W(R)):y()},je=R=>{g(),W(R)},ce=R=>{R?.persisted&&d!==null&&F(x()),y()};return{get status(){return u},get state(){return d?{...d}:null},stamp(){return d?{...d,source:t.name??null,basis:t.basis??Xe.visitor}:null},admits(){return u==="granted"},hold(R){return!P()||k.length>=hr?(c(R),!1):(k.push(R),!0)},onHidden:W,start(){I=!1;try{w=t.subscribe?.(R=>F(R))??null}catch(R){e.debug&&console.warn("[hp] consent adapter subscribe failed",R)}O()&&(window.addEventListener("pagehide",je),window.addEventListener("pageshow",ce),document.addEventListener("visibilitychange",Se)),N&&k.length===0&&k.push(...N.read().slice(-hr)),F(x()),!d&&(f=nt(setInterval(()=>F(x()),Cs)),p=nt(setTimeout(ee,n)))},stop(){I=!0,h(),g(),typeof w=="function"&&w(),O()&&(window.removeEventListener("pagehide",je),window.removeEventListener("pageshow",ce),document.removeEventListener("visibilitychange",Se))}}}var Rs=["recommendation","search_rank","banner","offer","layout","copy","price","other"],rt=e=>typeof e=="string"&&e!=="";function yr(e){return(Array.isArray(e?.decisions)?e.decisions:[]).filter(t=>rt(t?.slot)&&rt(t.decision_id)&&t.holdout!==!0).map(({decision_id:t,slot:n,arm:r,kind:o})=>({decision_id:t,slot:n,...rt(r)&&{arm:r},...Rs.includes(o)&&{kind:o}}))}function wr({key:e,mayStore:t}){let n,r=()=>{if(n)return n;try{let s=JSON.parse(sessionStorage.getItem(e));n=Array.isArray(s)?s.filter(i=>rt(i?.slot)):[]}catch{n=[]}return n},o=()=>{try{n?.length&&t()&&sessionStorage.setItem(e,JSON.stringify(n))}catch{}};return{persist:o,current:()=>r().length?n.map(s=>({...s})):null,remember(s){if(!s.length)return;let i=new Set(s.map(c=>c.slot));n=[...r().filter(c=>!i.has(c.slot)),...s],o()},forget(){n=[];try{sessionStorage.removeItem(e)}catch{}}}}function Ms(e){let t=2166136261,n=String(e);for(let r=0;r<n.length;r+=1)t^=n.charCodeAt(r),t=t+((t<<1)+(t<<4)+(t<<7)+(t<<8)+(t<<24))>>>0;return t^=t>>>16,t=Math.imul(t,2246822507)>>>0,t^=t>>>13,t=Math.imul(t,3266489909)>>>0,t^=t>>>16,t>>>0}function ot(e,t,n=1e4){return Ms(`${t}\0${e}`)%n}function Wt(e){let t=o=>Math.min(Math.max(Number(o)||0,0),1),n=t(e.share),r=1-n;return{holdout_share:n,personalised_share:e.ramp==null?r:Math.min(t(e.ramp),r)}}function Xt(e,t){if(!e||typeof e.salt!="string")return{holdout:!1,bucket:null,group:"personalised"};let n=e.ramp!=null;if(t==null||t==="")return{holdout:!1,bucket:null,group:n?"excluded":"personalised"};let{holdout_share:r,personalised_share:o}=Wt(e),s=ot(t,e.salt),i=u=>Math.round(u*1e4),c=r>0&&s<i(r)?"holdout":!n||s<i(r+o)?"personalised":"excluded";return{holdout:c==="holdout",bucket:s,group:c}}function Sr(e,t){return typeof e!="string"||e===""||t==null||t===""?null:ot(t,`bandit-vs-default:${e}`)<1e4/2?"default":"bandit"}var Ds="hp_preview",Us=256;function _r(e,t=null){if(typeof location>"u")return j(e);let n=null;try{n=new URLSearchParams(location.search).get(Ds)}catch{n=null}if(n===null)return j(e);let r=n.trim();return r===""||r.length>Us?(se(e,"",0,t),null):(se(e,r,null,t),r)}var Vs=40,$s=128,Bs=5,js=60,Ar=e=>typeof e=="string"&&e!==""&&e.length<=$s&&!e.includes(","),br=e=>Array.isArray(e)?e.filter(Ar).slice(0,Vs):[],qs=e=>Array.isArray(e)?e.filter(t=>typeof t=="string").map(t=>t.replaceAll(","," ").trim()).filter(t=>t!=="").slice(0,Bs):[],Hs=e=>Object.entries(e&&typeof e=="object"?e:{}).filter(([t,n])=>Ar(t)&&Number.isFinite(n)&&n>=1).sort(([,t],[,n])=>n-t).slice(0,js).map(([t,n])=>`${t}:${Math.floor(n)}`);function Yt(e){let t={},n={viewed:br(e?.recentProducts),basket:br(e?.basketProducts),q:qs(e?.recentSearches),impressed:Hs(e?.impressions)};for(let[r,o]of Object.entries(n))o.length>0&&(t[r]=o.join(","));return t}var Fs=1800*1e3;function kr(e,t=Date.now()){try{localStorage.setItem(C("recommendationContext"),JSON.stringify({context:e,until:t+Fs}))}catch{}}function xr(){try{localStorage.removeItem(C("recommendationContext"))}catch{}}var Ks="hp_sample",Ir=1e4;function vr(e,t){return!(typeof t=="number"&&t<1)||e==null||e===""?!0:ot(e,Ks,Ir)<Math.round(t*Ir)}function ke(e){return e.trim().toLowerCase().replace(/\s*\/\s*/g,"/").replace(/^\/+|\/+$/g,"")}var Gs=2,zs=12;function Te(e,t=Gs){return e.split("/").slice(0,t).join("/")}function Zt(e,t){if(typeof t!="string"||!t.trim())return null;let n=Te(ke(t));return n?(e.unshift(n),e.length=Math.min(e.length,zs),n):null}var he=()=>C("sessionSignals"),xe=null,Qt=()=>xe??he();function Er(){try{return xe?localStorage:sessionStorage}catch{return}}function Cr(e,t){let n=t==null?null:String(t),r=e?U(he(),n,e):null;if(r===xe)return;let o=xe===null?Js():null;if(xe=r,!!xe)try{let s=Qt(),i=Kn(he(),n);for(let c of Object.keys(localStorage))c.startsWith(i)&&c!==s&&localStorage.removeItem(c);o&&!localStorage.getItem(s)&&(localStorage.setItem(s,JSON.stringify(o)),sessionStorage.removeItem(he()))}catch{}}function Js(){try{let e=sessionStorage.getItem(he());if(!e)return null;let t=JSON.parse(e);return t&&(t.productViews>0||t.listViews>0||t.basketValue!=null||t.recentProducts?.length||t.recentBrowse?.length||t.campaign)?t:null}catch{return null}}function st(){return{productViews:0,listViews:0,cartAdds:0,searches:0,recentProducts:[],recentCategories:[],recentBrowse:[],basketProducts:[],basketValue:null,recentSearches:[],impressions:{},browsingCategory:null,recentBrowseCategories:[],browsingListing:null,listViewsByCategory:{},campaign:null,startedAt:0}}function en(){let e=Er();if(!e)return st();try{let t=e.getItem(Qt());return t?{...st(),...JSON.parse(t)}:{...st(),startedAt:Date.now()}}catch{return{...st(),startedAt:Date.now()}}}function Ne(e){let t=Er();if(t)try{t.setItem(Qt(),JSON.stringify(e))}catch{}}function Re(){return en()}function Or(){for(let e of[()=>sessionStorage,()=>localStorage])try{let t=e();t.removeItem(he());for(let n of Object.keys(t))n.startsWith(`${he()}:`)&&t.removeItem(n)}catch{}}var tn=20,Pr=200,Ws=new Set(["Product Viewed","Product Clicked","Product Added","Product Added to Wishlist"]),Xs=new Set(["Product Viewed","Product Added"]),Lr=50;function it(e,t){let n=Zt(e.recentBrowse,t);return n?(e.recentBrowseCategories=[e.browsingListing?.category??null,...e.recentBrowseCategories].slice(0,e.recentBrowse.length),n):null}function Ys(e,t){let n=e.listViewsByCategory;n[t]=(n[t]??0)+1;let r=Object.keys(n);if(r.length>Lr){let o={};for(let s of r.sort((i,c)=>n[c]-n[i]).slice(0,Lr))o[s]=n[s];e.listViewsByCategory=o}}var Tr=e=>[...new Set(e.map(t=>t?.product_id).filter(t=>typeof t=="string"&&t))].slice(0,tn);function Nr(e,t,n){let r=en();r.startedAt||(r.startedAt=Date.now());let o=n!==void 0&&JSON.stringify(n??null)!==JSON.stringify(r.campaign??null);o&&(r.campaign=n??null);let s=Array.isArray(t?.products)?t.products:[];switch(e){case"Product Viewed":r.productViews+=1,it(r,r.browsingCategory);break;case"Product List Viewed":{let u=t?.list_id,d=t?.category;if(!(typeof u=="string"&&u.includes("/")&&!u.startsWith("cdp-")))break;let p=typeof d=="string"&&Te(ke(d))||null,m=p?Te(ke(u)):"";if(!m){r.browsingCategory=null,r.browsingListing=null;break}r.browsingListing={key:m,category:p},it(r,m),r.browsingCategory=m,Ys(r,p),r.listViews+=1}break;case"Product List Filtered":{let u=t?.change,d=typeof t?.list_id=="string"?t.list_id:"",f=typeof u?.value=="string"?u.value:"",p=r.browsingListing;if(f&&u?.action!=="removed"&&p&&Te(ke(d))===p.key){let m=it(r,`${d}/${f}`);m&&(r.browsingCategory=m)}break}case"Product Added":{r.cartAdds+=1,it(r,r.browsingCategory);for(let u of s){let d=u.product_id;typeof d!="string"||!d||(r.basketProducts=[d,...r.basketProducts.filter(f=>f!==d)].slice(0,tn))}break}case"Product Removed":{for(let u of s){let d=u.product_id;typeof d=="string"&&d&&(r.basketProducts=r.basketProducts.filter(f=>f!==d))}break}case"Products Searched":{r.searches+=1;let u=t?.query;if(typeof u=="string"&&u.trim()){let d=u.trim().toLowerCase().slice(0,64);r.recentSearches=[d,...r.recentSearches.filter(f=>f!==d)].slice(0,5)}break}case"Product Clicked":case"Product Added to Wishlist":break;case"Cart Viewed":return s.length>0&&(r.basketProducts=Tr(s)),Ne(r),r;case"Cart Updated":{Array.isArray(t?.products)&&(r.basketProducts=Tr(s));let u=t?.value;return r.basketValue=typeof u=="number"&&Number.isFinite(u)&&u>=0?u:null,Ne(r),r}default:return o&&Ne(r),r}let i=Ws.has(e);if(i)for(let u of s)typeof u.product_id=="string"&&u.product_id&&delete r.impressions[u.product_id];else{for(let d of s){let f=d.product_id;typeof f!="string"||!f||(r.impressions[f]=(r.impressions[f]??0)+1)}let u=Object.keys(r.impressions);if(u.length>Pr){let d={};for(let f of u.sort((p,m)=>r.impressions[m]-r.impressions[p]).slice(0,Pr))d[f]=r.impressions[f];r.impressions=d}}let c=new Set;for(let u of s){let d=u.product_id;if(i&&typeof d=="string"&&d&&(r.recentProducts=[d,...r.recentProducts.filter(f=>f!==d)].slice(0,tn)),Xs.has(e)&&typeof u.category=="string"&&u.category){let f=ke(u.category);f&&!c.has(f)&&(c.add(f),Zt(r.recentCategories,f))}}return Ne(r),r}var at=1800*1e3;function Rr({name:e,domain:t=null,mayStore:n,now:r=()=>Date.now(),mint:o=oe}){let s=null,i=0,c=()=>{s!==null&&n()&&se(e,s,at/1e3,t)};return{get(){let u=r(),d=j(e);return d?s=d:(s===null||u-i>=at)&&(s=o()),i=u,c(),s},persist:c,forget(){se(e,"",0,t),s=null}}}var J=e=>e!==null&&typeof e=="object"&&!Array.isArray(e),Mr=e=>Array.isArray(e)&&e.every(t=>typeof t=="string"),Dr=Object.freeze({enabled:!1}),rn=Object.freeze({enabled:!0,queryParamAllowlist:Object.freeze([])});function Ur(e,t){let n=e?.track;return J(n)?(Object.hasOwn(n,t)?n[t]:n.__default)?.enabled!==!1:!0}function Zs(e,t){return`${ie(e)}/v1/projects/${encodeURIComponent(t)}/settings`}var Qs="https://hp.thgingenuity.com";function ie(e){return e==null||e===""?Qs:$r(e)}function Vr(e,t){return e!=null&&e!==""?ie(e):t?.startsWith("https://")?t:ie(void 0)}function $r(e){if(typeof e!="string")return null;let t=e.trim().replace(/\/+$/,"");return/^https?:\/\/[^/\s]+$/i.test(t)?t:/^[a-z0-9.-]+(:\d+)?$/i.test(t)?`https://${t}`:null}function ei(e){if(!J(e))return null;let t=Object.fromEntries(Object.entries(e).filter(([,n])=>typeof n=="boolean"));return Object.keys(t).length?t:null}var nn=e=>typeof e=="number"&&e>=0&&e<=1,ti=/^[0-9a-f]{64}$/;function ni(e){return J(e)?{enabled:e.enabled===!0,tokenSha256:typeof e.tokenSha256=="string"&&ti.test(e.tokenSha256)?e.tokenSha256:null}:{enabled:!1,tokenSha256:null}}function ri(e){if(!J(e))return null;let t=Object.fromEntries(Object.entries(e).filter(([,n])=>J(n)&&nn(n.share)&&(n.ramp==null||nn(n.ramp))&&typeof n.salt=="string"&&n.salt!=="").map(([n,r])=>[n,{share:r.share,ramp:r.ramp??null,salt:r.salt,...Mr(r.readoutSlots)&&r.readoutSlots.length>0&&{readoutSlots:r.readoutSlots}}]));return Object.keys(t).length?t:null}var oi=/^[A-Za-z0-9!#$%&'*+.^_`|~-]{1,128}$/;function si(e){return J(e)?e.source==="hp_cookie"?{source:"hp_cookie"}:e.source!=="site_cookie"?null:e.cookie==null?{source:"site_cookie",cookie:null}:typeof e.cookie=="string"&&oi.test(e.cookie)?{source:"site_cookie",cookie:e.cookie}:null:null}function ii(e){let t=Array.isArray(e?.forms)?e.forms.filter(J):[];return t.length===0?null:{forms:t,capture:J(e.capture)?e.capture:null,...Number.isInteger(e.overlay_gap_minutes)?{overlay_gap_minutes:e.overlay_gap_minutes}:{}}}function ai(e){let t=J(e)?e.hp:null;return J(t)&&typeof t.enabled=="boolean"}function on(e){let t=J(e)?e.hp:null;if(!J(t)||t.enabled!==!0)return Dr;let n=ii(t.onsite);return{enabled:!0,propertyId:typeof t.propertyId=="string"&&t.propertyId!==""?t.propertyId:null,environment:typeof t.environment=="string"?t.environment:null,consentPurposes:ei(t.consent?.purposes),queryParamAllowlist:Mr(t.queryParamAllowlist)?t.queryParamAllowlist:null,anonymousId:si(t.anonymousId),apiHost:$r(t.apiHost),holdouts:ri(t.holdouts),sampleRate:nn(t.sampleRate)?t.sampleRate:1,debug:ni(t.debug),...n&&{onsite:n},plan:J(e.plan)&&J(e.plan.track)?{track:e.plan.track}:null}}var ci=3e3;async function Br(e,t,n=globalThis.fetch,r=ci){try{let o=await n(Zs(e,t),{credentials:"omit",headers:{accept:"application/json"},signal:AbortSignal.timeout?.(r)});if(o.status>=400&&o.status<500&&o.status!==408&&o.status!==429)return Dr;if(!o.ok)return null;let s=await o.json();return ai(s)?on(s):null}catch{return null}}var ct=e=>U(C("settings"),e);function jr(e){try{let t=localStorage.getItem(ct(e));if(!t)return null;let n=JSON.parse(t);return n?.enabled===!0?n:null}catch{return null}}function qr(e,t){try{t?.enabled===!0?localStorage.setItem(ct(e),JSON.stringify(t)):localStorage.removeItem(ct(e))}catch{}}function sn(e){try{localStorage.removeItem(ct(e))}catch{}}var ui={flushAt:20,flushIntervalMs:1e4,maxQueue:500,maxRetryAgeMs:1440*60*1e3,maxRetries:5,maxPersistedBatches:20,maxPersistedBytes:1024*1024,storageKey:fe.retry,beaconSafeBytes:56*1024,maxBatchEvents:100,maxBatchBytes:500*1024},ut=()=>Date.now(),Hr=3e4,fn=55*1024;function li(e,t=ut()){if(typeof e!="string")return 0;let n=e.trim();if(/^\d+$/.test(n))return Number(n)*1e3;if(n==="")return 0;let r=Date.parse(n);return Number.isNaN(r)?0:Math.max(0,r-t)}var ae=e=>typeof TextEncoder<"u"?new TextEncoder().encode(e).length:Buffer.byteLength(e),an=()=>typeof window<"u"&&typeof document<"u";function di(){try{return!an()||!window.localStorage?null:(window.localStorage.getItem("thg_hp_probe"),window.localStorage)}catch{return null}}var A,cn,un,lt,ln,dn,Fr,Me,De,Ue,Kr,dt,Gr,ft,pt=class{constructor(t){vn(this,A);this.o={...ui,...t},this.queue=[],this.timer=null,this.storage=di(),this.inflight=null,this.sending=new Set,this.epoch=0,this.sinceRefusal=new Set,this.wakers=new Set,this.replayAllowed=!this.o.deferReplay,this.draining=null,this.failing=!1,this.answered=!1,an()&&(window.addEventListener("pagehide",()=>this.flush({beacon:!0})),document.addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"&&this.flush()}),L(this,A,ft).call(this))}markFailing(){this.answered||(this.failing=!0)}replayPersisted(){return this.replayAllowed=!0,L(this,A,ft).call(this)}clearPersisted(){if(this.replayAllowed=!1,!!this.storage)try{let t=L(this,A,Ue).call(this).filter(n=>this.sinceRefusal.has(n?.id));t.length?this.storage.setItem(this.o.storageKey,JSON.stringify(t)):this.storage.removeItem(this.o.storageKey)}catch{}}discardQueued(){this.queue=[],this.epoch+=1,this.sinceRefusal.clear(),L(this,A,un).call(this);for(let t of this.wakers)t()}enqueue(t){let n;try{n=JSON.parse(JSON.stringify(t))}catch(r){this.o.onError?.(`event ${t?.messageId??""} cannot be serialised; dropped`,r);return}this.queue.push(n),this.queue.length>this.o.maxQueue&&this.queue.splice(0,this.queue.length-this.o.maxQueue),this.queue.length>=this.o.flushAt?this.flush():L(this,A,cn).call(this)}flush(t={}){if(L(this,A,un).call(this),this.queue.length===0)return Promise.resolve();if(t.beacon&&an()&&typeof navigator<"u"&&navigator.sendBeacon)return L(this,A,Fr).call(this),Promise.resolve();if(this.inflight)return this.inflight;let n=L(this,A,dn).call(this,this.queue,this.o.maxBatchEvents,this.o.maxBatchBytes).map(o=>{let s=L(this,A,dt).call(this,o);return s&&(this.sending.add(s),this.sinceRefusal.add(s)),{batch:o,id:s}});this.queue=[];let r=this.epoch;return this.inflight=(async()=>{for(let{batch:o,id:s}of n){if(r!==this.epoch){L(this,A,De).call(this,s);continue}await L(this,A,Me).call(this,o,0,s,r)}})().finally(()=>{this.inflight=null,this.queue.length>=this.o.flushAt?this.flush():this.queue.length&&L(this,A,cn).call(this)}),this.inflight}};A=new WeakSet,cn=function(){this.timer||(this.timer=setTimeout(()=>this.flush(),this.o.flushIntervalMs),this.timer?.unref?.())},un=function(){this.timer&&(clearTimeout(this.timer),this.timer=null)},lt=function(t){return JSON.stringify({batch:t,writeKey:this.o.writeKey,sentAt:new Date().toISOString()})},ln=function(){return`${this.o.apiHost.replace(/\/$/,"")}/v1/batch`},dn=function(t,n,r){let o=ae(L(this,A,lt).call(this,[])),s=[],i=[],c=o;for(let u of t){let d=ae(JSON.stringify(u))+1;i.length&&(i.length>=n||c+d>r)&&(s.push(i),i=[],c=o),i.push(u),c+=d}return i.length&&s.push(i),s},Fr=function(){let t=this.queue;this.queue=[];let n=L(this,A,ln).call(this);for(let r of L(this,A,dn).call(this,t,this.o.maxBatchEvents,this.o.beaconSafeBytes)){let o=L(this,A,lt).call(this,r);if(ae(o)<=this.o.beaconSafeBytes){let s=!1;try{s=navigator.sendBeacon(n,new Blob([o],{type:"text/plain"}))}catch{s=!1}if(s){let i=this.failing?L(this,A,dt).call(this,r):null;i&&this.sending.add(i);continue}}L(this,A,Me).call(this,r,0,L(this,A,dt).call(this,r))}},Me=async function(t,n,r=null,o=this.epoch){r&&this.sending.add(r);let s=L(this,A,lt).call(this,t),i=0;try{let c=await fetch(L(this,A,ln).call(this),{method:"POST",headers:{"Content-Type":"text/plain"},body:s,keepalive:ae(s)<=this.o.beaconSafeBytes});if(c.ok)return this.failing=!1,this.answered=!0,L(this,A,De).call(this,r),L(this,A,ft).call(this),!0;let u=c.status===408||c.status===429||c.status>=500;if(u&&(i=li(c.headers?.get?.("retry-after"))),!u)return L(this,A,De).call(this,r),this.o.onError?.(`CDP ingest rejected batch (${c.status}); dropping ${t.length} events`),!0;throw new Error(`retryable ${c.status}`)}catch(c){if(this.failing=!0,n>=this.o.maxRetries){r&&this.sending.delete(r);let d=r?"kept for the next page":"dropped";return this.o.onError?.(`CDP ingest unreachable after ${n} attempts; ${d}: ${t.length} events`,c),!1}let u=Math.max(Math.min(1e3*2**n,Hr)*(.5+Math.random()),Math.min(i,Hr));return o===this.epoch&&await new Promise(d=>{let f=()=>{clearTimeout(p),this.wakers.delete(f),d()},p=setTimeout(f,u);this.wakers.add(f)}),o!==this.epoch?(L(this,A,De).call(this,r),!1):L(this,A,Me).call(this,t,n+1,r,o)}},De=function(t){t&&(this.sending.delete(t),this.sinceRefusal.delete(t),L(this,A,Gr).call(this,t))},Ue=function(){let t=JSON.parse(this.storage.getItem(this.o.storageKey)||"[]");return Array.isArray(t)?t:[]},Kr=function(t,n){let r=i=>ae(JSON.stringify(i))+1,o=[...t,n].slice(-this.o.maxPersistedBatches),s=o.reduce((i,c)=>i+r(c),2);for(;o.length>1&&s>this.o.maxPersistedBytes;)s-=r(o[0]),o=o.slice(1);for(;o.length;)try{return this.storage.setItem(this.o.storageKey,JSON.stringify(o)),!0}catch{o=o.slice(1)}return!1},dt=function(t){if(!this.storage||this.o.mayPersist&&!this.o.mayPersist())return null;try{let n={at:ut(),id:`${ut()}-${Math.random().toString(36).slice(2)}`,batch:t};return ae(JSON.stringify(n))+3>this.o.maxPersistedBytes?null:L(this,A,Kr).call(this,L(this,A,Ue).call(this),n)?n.id:null}catch{return null}},Gr=function(t){if(!(!t||!this.storage))try{let n=L(this,A,Ue).call(this).filter(r=>r.id!==t);n.length?this.storage.setItem(this.o.storageKey,JSON.stringify(n)):this.storage.removeItem(this.o.storageKey)}catch{}},ft=function(){if(!this.storage||!this.replayAllowed)return this.draining??Promise.resolve();if(this.draining)return this.draining;let t;try{let r=L(this,A,Ue).call(this);t=r.filter(o=>Array.isArray(o?.batch)&&ut()-o.at<this.o.maxRetryAgeMs).map(o=>o.id?o:{...o,id:`${o.at}-${Math.random().toString(36).slice(2)}`}),(t.length!==r.length||t.some((o,s)=>o!==r[s]))&&(t.length?this.storage.setItem(this.o.storageKey,JSON.stringify(t)):this.storage.removeItem(this.o.storageKey))}catch{return Promise.resolve()}let n=t.filter(r=>!this.sending.has(r.id));return n.length?(this.draining=(async()=>{for(let r of n)if(!this.replayAllowed||!await L(this,A,Me).call(this,r.batch,0,r.id))return})().finally(()=>{this.draining=null}),this.draining):Promise.resolve()};var pn="3.31.0",mn="@thg-agentic/hyper-personalisation-web";var fi=100,pi=["source","medium","campaign","content","term"];function Jr(e){if(!e||typeof e!="object")return null;let t={};for(let n of pi){let r=e[n==="campaign"?"name":n];typeof r=="string"&&r&&(t[n]=r.slice(0,fi))}return Object.keys(t).length?t:null}var Wr=e=>U(C("visitCampaign"),e==null?null:String(e)),Ie=new Map;function Xr(e){if(Ie.has(e))return Ie.get(e);try{let t=JSON.parse(localStorage.getItem(e));return t&&typeof t=="object"?t:null}catch{return null}}function zr(e,t){try{t?localStorage.setItem(e,JSON.stringify(t)):localStorage.removeItem(e),Ie.delete(e)}catch{t?Ie.set(e,t):Ie.delete(e)}}function Yr(e,t,n){return typeof e?.tags=="object"&&e.tags!==null&&Number.isFinite(e.at)&&n-e.at<at&&!(t&&e.sid&&e.sid!==t)?e:null}function mt(e,{sessionId:t=null,now:n=Date.now()}={}){return Yr(Xr(Wr(e)),t,n)?.tags??null}function Zr(e,t,{sessionId:n=null,keepSession:r=!1,now:o=Date.now()}={}){let s=Wr(e),i=Xr(s),c=Yr(i,n,o),u=c?.tags??t??null;return u?zr(s,{tags:u,at:o,sid:(r?n:null)??c?.sid??null}):i&&zr(s,null),u}function hn(){Ie.clear(),ze("visitCampaign")}var mi=new Set(["audiences","decisions","recommendations"]);var hi=Symbol.for("@thg-agentic/hyper-personalisation-web.replay"),gi=Symbol.for("@thg-agentic/hyper-personalisation-web.unreachable"),yi=Symbol.for("@thg-agentic/hyper-personalisation-web.onsite-access");function wi(e){let t={...e??{}},n=Array.isArray(t.products)?t.products:null;if(t.item_count==null&&n){let r=n.map(o=>o?.quantity);r.every(Number.isInteger)&&(t.item_count=r.reduce((o,s)=>o+s,0))}return t}var Si="e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855";function _i(e){if(/^[0-9a-fA-F]{64}$/.test(e))return e.toLowerCase();if(!/^[A-Za-z0-9+/_-]{43}=?$/.test(e))return null;try{let t=atob(e.replace(/-/g,"+").replace(/_/g,"/").padEnd(44,"="));return t.length!==32?null:Array.from(t,n=>n.charCodeAt(0).toString(16).padStart(2,"0")).join("")}catch{return null}}function gt(e){if(typeof e!="string")return null;let t=_i(e.trim());return t===Si?null:t}var Qr=Object.freeze({email_sha256:"sha256",phone_sha256:"sha256",accepts_marketing:"boolean",gender:"string",created_at:"date-time"}),bi=/^\d{4}-\d{2}-\d{2}T([01]\d|2[0-3]):[0-5]\d:[0-5]\d(\.\d+)?(Z|[+-]([01]\d|2[0-3]):[0-5]\d)$/i;function Ai(e){if(typeof e!="string"||!bi.test(e))return!1;let[t,n,r]=e.slice(0,10).split("-").map(Number),o=new Date(Date.UTC(t,n-1,r));return o.getUTCMonth()===n-1&&o.getUTCDate()===r&&!Number.isNaN(Date.parse(e))}function ki(e,t){return t===null?null:e==="sha256"?gt(t)??void 0:e==="date-time"?t instanceof Date?Number.isNaN(t.getTime())?void 0:t.toISOString():Ai(t)?t:void 0:typeof t===e?t:void 0}function xi(e,t){let n={},r=[];for(let[o,s]of Object.entries(e)){let i=Object.hasOwn(Qr,o)?Qr[o]:null,c=i?ki(i,s):void 0;c===void 0?r.push(o):n[o]=c}return t&&r.length&&console.warn(`[hp] identify: not sent, not spec traits: ${r.join(", ")}`),n}var eo=!1,to=!1;function Ii(){to||(to=!0,console.warn("[hp] no consent adapter: events are sent under the host's lawful basis (basis 'host'). Pass `consent` to send only once the visitor allows analytics."))}function vi(e){!e||eo||(eo=!0,console.warn("[hp] mintAnonymousId is ignored since 3.6: where device ids come from is set per source in the console (the site\u2019s own cookie, or Hyper-Personalisation\u2019s)."))}function Ei(e){try{return ae(JSON.stringify(e))}catch{return 0}}function ht(e){return e&&typeof e.context=="object"&&e.context!==null?e.context:e}function Ci(e,t){if(e==null||String(e)===t)return;let n=[["localStorage","retry",(r,o)=>[...Array.isArray(r)?r:[],...Array.isArray(o)?o:[]]],["sessionStorage","held",(r,o)=>o?{...o,items:[...r.items??[],...o.items??[]]}:r]];for(let[r,o,s]of n)try{let i=globalThis[r],c=U(C(o),e),u=i?.getItem(c);if(!u)continue;let d=U(C(o),t),f=i.getItem(d);i.setItem(d,JSON.stringify(s(JSON.parse(u),f?JSON.parse(f):null))),i.removeItem(c)}catch{}}function no(e){let t=ie(e?.apiHost);if(!t)throw new Error("createAnalytics: apiHost, when given, must be a host or an http(s) origin");if(e?.propertyId!==null&&!e?.propertyId)throw new Error("createAnalytics: propertyId is required (null: the ingest stamps the key\u2019s)");let n={libraryName:mn,libraryVersion:pn,writeKey:"web",queryParamBlocklist:[],debug:!1,validate:null,consentTimeoutMs:5e3,...e,apiHost:t};Ge(n.storageNames),Je();let r=!!n.consent;r||Ii();let o=null;n.getConsent=()=>o?o.stamp():Xn();let s=()=>!r||o?.status==="granted";Ci(n.propertyId,n.writeKey);let i=r&&n.holdAcrossPages?Gn(U(C("held"),n.writeKey)):null,c=i?.read()??{items:[],anonymousId:null};n.mintAnonymousId!==void 0&&vi(n.debug);let u=zn(n,{carried:c.anonymousId,mayStore:s,orOwn:!0}),d=Rr({name:C("session"),domain:n.consentCookieDomain??null,mayStore:s}),f=n.getSessionId;n.getSessionId=()=>H(M(f,null))??d.get();let p=_r(C("preview"),n.consentCookieDomain??null),m=()=>H(M(f,null))??j(C("session")),I=Jr(typeof location>"u"?null:Rt(location.search)),w=(a=null)=>{p||Zr(n.propertyId,a,{sessionId:m(),keepSession:s()})},k=(a,l)=>n.debug&&console.warn("[hp]",a,l??""),b=n.transport??new pt({apiHost:n.apiHost,writeKey:n.writeKey,storageKey:U(C("retry"),n.writeKey),mayPersist:r?()=>o?.status==="granted":void 0,deferReplay:r,onError:k}),x=U(C("previousPage"),n.propertyId),h=null,O=()=>{if(h)return h;try{return sessionStorage.getItem(x)||null}catch{return null}};typeof window<"u"&&window.addEventListener("pageshow",a=>{a.persisted&&(h=null)});let _=a=>{if(h=a||null,!(r&&o.status!=="granted"))try{sessionStorage.setItem(x,a)}catch{}},g=wr({key:U(C("decisions"),n.propertyId),mayStore:s});n.getDecisions??(n.getDecisions=g.current);let y=H(M(n.getUserId,null)),P=null,N=null,V=y?Ce(n.identityToken):null,G=null,F=null,ee=null,W=new Set,Se=new Set;function je(a){if(a.type==="page"&&(ee=null),a.type==="track"&&a.event==="Product Viewed"){let S=a.properties?.products?.[0]?.product_id;ee=typeof S=="string"&&S?S:ee}if(a.type!=="track"||a.event!=="Cart Updated")return;let l=a.properties?.value;F=typeof l=="number"&&Number.isFinite(l)&&l>=0?l:null;for(let S of W)try{S()}catch(E){console.warn("[hp] a basket listener failed",E)}}function ce(a,l,S=!1){je(a),w();try{return R(a,l,S)}catch(E){if(E instanceof Ae)throw E;return console.warn("[hp] the event was not sent",E),null}}function R(a,l,S){let E=G;G=null;let $=a.type==="track"?a.event:a.type;if(!S&&!Ur(n.plan,$))return null;let T={messageId:E?.messageId??oe(),timestamp:E?.timestamp??new Date().toISOString(),anonymousId:H(M(n.getAnonymousId,null)),userId:y??null,...a,context:jn(n,ht(l))};if(T.properties&&(T.properties=Tt(T.properties)),typeof T.properties?.href=="string"&&(T.properties.href=Mt(T.properties.href,n)),!S&&!vr(T.anonymousId,n.sampleRate))return n.debug&&console.debug("[hp] not sent: outside the sample",T),null;if(n.beforeSend){let te;try{te=n.beforeSend(T)}catch(bo){return console.warn("[hp] beforeSend failed; the event was not sent",bo),null}if(!te)return null;let{type:z,event:xn,messageId:So,timestamp:_o}=T;T={...te,type:z,messageId:So,timestamp:_o,...xn?{event:xn}:{}}}if(n.validate){let te=n.validate(T,{producer:"web"});if(!te.valid){let z=`[hp] invalid ${T.event??T.type}:
2
2
  ${te.errors.join(`
3
- `)}`;if(n.throwOnInvalid)throw new Ie(z);console.error(z)}}n.debug&&console.debug("[hp]",T.event??T.type,T);let bt=fi(T);return bt>cn?(k(`${T.event??T.type} not sent: ${bt} bytes, over the ${cn}-byte limit for one event`),null):(oo(T,_),T)}function K(a){if((a.type==="track"||a.type==="page")&&ro(a),n.onEvent)try{n.onEvent(a)}catch(d){console.warn("[hp] onEvent observer failed",d)}}let Z=()=>r&&o?.state?.personalisation===!0,Y=()=>yr(M(n.getSessionId,null),n.propertyId),ve=!1;function ro(a){try{if(Z()){Y();let d=Ir(a.event,a.properties,lt(n.propertyId,{sessionId:m()}));a.type==="track"&&fr(zt(d)),ve=!0}else He()}catch(d){n.debug&&console.warn("[hp] the visit was not recorded",d)}}function He(a=!1){pr(),(a||ve)&&wr(),ve=!1}function St(){l.forget(),g.forget(),_t.clear(),c?.forget(),He(!0),dn()}function oo(a,d){!r||d||o.admits()?(K(a),b.enqueue(a)):o.hold(a)}let v=(a,d,_)=>ce({type:"track",event:a,properties:d??{}},_),_t=new Set,so=(a,d,_)=>a==="audiences"?{audiences:d?null:_.audiences??[]}:a==="decisions"?{decisions:(_.decisions??[]).map(C=>({slot:C.slot,decision_id:C.decision_id??null,arm:C.arm??null,...C.variant&&{variant:C.variant}}))}:{recommendation_request_id:_.recommendation_request_id??null};w(A),r&&(o=sr({adapter:n.consent,timeoutMs:n.consentTimeoutMs,cookieDomain:n.consentCookieDomain,debug:n.debug,store:i&&{read:()=>u.items,write:a=>i.write(a,c?.peek()??null)},release(a){a.context&&(a.context.consent=o.stamp()),K(a),b.enqueue(a)},onStatus(a){if(a==="granted"&&(c?.persist(),l.persist(),h&&S(h),g.persist(),b.replayPersisted?.()),a==="denied"){b.clearPersisted?.(),c?.forget(),l.forget();try{sessionStorage.removeItem(x)}catch{}g.forget(),He(!0)}try{n.onConsentStatus?.(a)}catch(d){console.warn("[hp] onConsentStatus observer failed",d)}if(a==="granted"||a==="denied")for(let d of Se)try{d()}catch(_){console.warn("[hp] a consent listener failed",_)}},announce({action:a,state:d,previous:_,withdrawal:C}){d?.personalisation!==!0&&He(_?.personalisation===!0),C&&(b.discardQueued?.(),dn()),ce({type:"track",event:"Consent Updated",properties:{action:a,state:d}},void 0,C),C&&b.flush()}}),o.start(),w());let mn=()=>n.holdout?Kt(n.holdout):null,hn=()=>Gt(n.holdout,F(M(n.getAnonymousId,null))).group;function io(a,d){if(!Array.isArray(a?.decisions))return a;let _=n.holdout?.readoutSlots??[],C=F(M(n.getAnonymousId,null));return{...a,decisions:a.decisions.map(V=>{let T=V?.variant==="bandit"||V?.variant==="default"?V.variant:!d&&V?.holdout!==!0&&_.includes(V?.slot)?cr(V.slot,C):null;return T?T==="default"?{...V,variant:T,decision_id:null}:{...V,variant:T}:V})}}function gn(a,d){if(p)return null;let _=a?.exposure,C=_?.holdout===!0,V=io(a,C);return g.remember(ir(V)),!_?.token||_t.has(_.token)?null:(_t.add(_.token),v("Personalisation Exposed",{exposure_token:_.token,surface:_.surface,holdout:C,holdout_share:_.holdout_share??mn()?.holdout_share??null,personalised_share:_.personalised_share??mn()?.personalised_share??null,...so(_.surface,C,V)},d))}function yn(a){return y&&St(),y=null,O=null,N=null,U=null,a}return rr({track:(a,d,_)=>a==="Signed Out"?yn(v(a,d,_)):v(a,d,_),page(a,d){a??(a={});let _=n.pageType??null;a.type&&(_e.has(a.type)?(_=a.type,n.pageType=a.type):n.debug&&console.warn(`[hp] ignoring unknown page.type "${a.type}". Allowed: ${[..._e].join(", ")}`));let C=ce({type:"page",properties:{name:a.name??null,navigation_trigger:a.navigation_trigger??Pn(),previous_message_id:E()}},{page:{type:_},...dt(d)??{}});return C&&S(C.messageId),C},identify(a,d,_){let{userId:C,...V}=a&&typeof a=="object"?a:{},T=Ce(dt(d)?.identity_token);if(C!==void 0){let z=F(C);U=z?z===y?T??U:T:null,_===Le?N=z:O&&z&&z!==O?St():n.debug&&N&&z&&z!==N&&console.warn("[hp] identify names another userId than the identity option; using the new one"),y=z,z&&_!==Le&&(O=z)}else T&&y&&(U=T);let{identity_token:bt,...te}=dt(d)??{};return ce({type:"identify",traits:ui(V,n.debug)},U?{...te,identity_token:U}:te)},reset(){y&&St(),y=null,O=null,N=null,U=null,S("")},productViewed:(a,d)=>v("Product Viewed",a,d),productListViewed:(a,d)=>v("Product List Viewed",a,d),recommendationsViewed:(a,d)=>v("Recommendations Viewed",a,d),personalisationExposed:(a,d)=>v("Personalisation Exposed",a,d),recordExposure:gn,surfaceViewed({surface:a}={},d){if(!Qs.has(a)||!n.holdout||a!=="decisions"&&!Z())return null;let _=F(M(n.getAnonymousId,null)),C=Gt(n.holdout,_).group;if(C==="excluded")return null;let V=vn({sessionId:Fe(M(n.getSessionId,null),_),surface:a});return V?gn({exposure:{token:V,surface:a,holdout:C==="holdout"}},d):null},inHoldout:()=>hn()!=="personalised",personalisationGroup:hn,productClicked:(a,d)=>v("Product Clicked",a,d),productListFiltered:(a,d)=>v("Product List Filtered",a,d),productsSearched:(a,d)=>v("Products Searched",a,d),searchSuggestionsViewed:(a,d)=>v("Search Suggestions Viewed",a,d),productAdded:(a,d)=>v("Product Added",a,d),productRemoved:(a,d)=>v("Product Removed",a,d),cartUpdated:(a,d)=>v("Cart Updated",ri(a),d),identityLinked:(a,d)=>v("Identity Linked",a,d),slotEngaged:(a,d)=>p?null:v("Slot Engaged",a,d),productVariantSelected:(a,d)=>v("Product Variant Selected",a,d),cartViewed:(a,d)=>v("Cart Viewed",a,d),productAddedToWishlist:(a,d)=>v("Product Added to Wishlist",a,d),productRemovedFromWishlist:(a,d)=>v("Product Removed from Wishlist",a,d),wishlistProductAddedToCart:(a,d)=>v("Wishlist Product Added to Cart",a,d),productShared:(a,d)=>v("Product Shared",a,d),cartShared:(a,d)=>v("Cart Shared",a,d),couponEntered:(a,d)=>v("Coupon Entered",a,d),couponApplied:(a,d)=>v("Coupon Applied",a,d),couponDenied:(a,d)=>v("Coupon Denied",a,d),couponRemoved:(a,d)=>v("Coupon Removed",a,d),checkoutStarted:(a,d)=>v("Checkout Started",a,d),promotionViewed:(a,d)=>v("Promotion Viewed",a,d),promotionClicked:(a,d)=>v("Promotion Clicked",a,d),checkoutStepViewed:(a,d)=>v("Checkout Step Viewed",a,d),checkoutStepCompleted:(a,d)=>v("Checkout Step Completed",a,d),paymentInfoEntered:(a,d)=>v("Payment Info Entered",a,d),checkoutFailed:(a,d)=>v("Checkout Failed",a,d),signedIn:(a,d)=>v("Signed In",a,d),signedUp:(a,d)=>v("Signed Up",a,d),signedOut:a=>yn(v("Signed Out",{},a)),newsletterSubscribed:(a,d)=>v("Newsletter Subscribed",a,d),newsletterUnsubscribed:(a,d)=>v("Newsletter Unsubscribed",a,d),preferencesStated:(a,d)=>v("Preferences Stated",a,d),backInStockSubscribed:(a,d)=>v("Back In Stock Subscribed",a,d),productReviewed:(a,d)=>v("Product Reviewed",a,d),consentUpdated:(a,d)=>v("Consent Updated",a,d),flush:a=>b.flush(a),recommendationContext(){if(!Z())return{};try{return Y(),zt(Re())}catch{return{}}},get consent(){return o?o.state:null},servingHeaders:()=>$t(o?.state??null),get lastPageMessageId(){return E()},get anonymousId(){return F(M(n.getAnonymousId,null))},[ni](){return{writeKey:n.writeKey,library:{name:ln,version:un},storageKey:$(P("onsite"),n.propertyId),gatewayHost:n.apiHost,servingHost:n.servingHost??n.apiHost,settings:n.onsite??null,debug:n.debug===!0,preview:p,anonymousId:()=>F(M(n.getAnonymousId,null)),sessionId:()=>F(M(n.getSessionId,null)),identityToken:()=>Z()?U:null,analytics:s,personalisation:Z,consent:()=>n.getConsent(),headers:()=>$t(o?.state??null),pageUrl:()=>typeof location>"u"?null:Lt(location.href,n),locale:()=>Nt(M(n.getLocale,n.locale)),campaign:()=>p?A:lt(n.propertyId,{sessionId:m()}),basketValue:()=>{let a=Re().basketValue;return q??(Number.isFinite(a)?a:null)},sessionSignals:()=>Z()?(Y(),{...Re(),campaign:lt(n.propertyId,{sessionId:m()})}):null,visitContext:()=>{let a=Z();a&&Y();let d=a?Re():null,_=C=>Array.isArray(C)?C.filter(V=>typeof V=="string"&&V.length<=128).slice(0,20):[];return{...n.pageType?{page_type:n.pageType}:{},...ee?{product_id:ee}:{},...d?{basket:_(d.basketProducts),viewed:_(d.recentProducts)}:{}}},onBasket:a=>(J.add(a),()=>J.delete(a)),consentAnswered:()=>!o||o.status==="granted"||o.status==="denied",onConsentAnswered:a=>(Se.add(a),()=>Se.delete(a))}},[ti](){b.markFailing?.()},[ei](a,d,_){if(typeof this[a]=="function"){G=typeof _?.messageId=="string"&&typeof _?.timestamp=="string"?{messageId:_.messageId,timestamp:_.timestamp}:null;try{this[a](...Array.isArray(d)?d:[])}finally{G=null}}}})}var Ve=Symbol.for("@thg-agentic/hyper-personalisation-web.onsite"),X=Symbol.for("@thg-agentic/hyper-personalisation-web.onsite.pending"),$e=Symbol.for("@thg-agentic/hyper-personalisation-web.onsite.listeners"),pt=Symbol.for("@thg-agentic/hyper-personalisation-web.onsite.suppressed"),mi=["shown","submitted","apply","closed","held","nothing"],Gr=10,ge=()=>typeof window>"u"?null:window;function Be(){try{for(let{resolve:e}of ge()?.[X]?.splice(0)??[])e(!1)}catch{}}var ye=Object.freeze({open(e){try{let t=ge();if(!t||typeof e!="string")return Promise.resolve(!1);if(t[Ve])return t[Ve].open(e);if(t[X]??(t[X]=[]),t[X].length<Gr)return new Promise(n=>t[X].push({slot:e,resolve:n}))}catch{}return Promise.resolve(!1)},show(e){return ye.open(e)},on(e,t){var n;try{let r=ge();return!r||!mi.includes(e)||typeof t!="function"?()=>{}:(r[$e]??(r[$e]={}),((n=r[$e])[e]??(n[e]=new Set)).add(t),()=>r[$e][e].delete(t))}catch{return()=>{}}},suppress(e="page"){try{let t=ge();if(!t)return;(t[pt]??(t[pt]=new Set)).add(String(e)),t[Ve]?.suppress()}catch{}},unsuppress(e){try{let t=ge()?.[pt];e===void 0?t?.clear():t?.delete(String(e))}catch{}},ready(){try{let e=ge();if(!e)return Promise.resolve([]);if(e[Ve])return Promise.resolve(ye.debug());if(e[X]??(e[X]=[]),e[X].length<Gr)return new Promise(t=>e[X].push({slot:null,resolve:()=>t(ye.debug())}))}catch{}return Promise.resolve([])},debug(){try{return ge()?.[Ve]?.debug()??[]}catch{return[]}}});function zr(e){let t=typeof document>"u"?null:document.currentScript?.src;return t?new URL(e,t).href:null}var mt=new Map;function Wr(e,t){return window[t]?Promise.resolve(window[t]):e?(mt.has(t)||mt.set(t,new Promise((n,r)=>{let o=document.createElement("script");o.src=e,o.async=!0,o.onload=()=>window[t]?n(window[t]):r(new Error(`${e} did not register`)),o.onerror=()=>r(new Error(`${e} did not load`)),document.head.append(o)}).finally(()=>mt.delete(t))),mt.get(t)):Promise.reject(new Error("the CDN script\u2019s own URL is unknown"))}var hi=zr("onsite.min.js"),fn=()=>Wr(hi,Symbol.for("@thg-agentic/hyper-personalisation-web.onsite.module"));var pn=Symbol.for("@thg-agentic/hyper-personalisation-web.bootstrap"),gi=Symbol.for("@thg-agentic/hyper-personalisation-web.drain"),yi=Symbol.for("@thg-agentic/hyper-personalisation-web.carry"),Jr=Symbol.for("@thg-agentic/hyper-personalisation-web.replay"),wi=Symbol.for("@thg-agentic/hyper-personalisation-web.unreachable"),Si=Symbol.for("@thg-agentic/hyper-personalisation-web.assignment"),_i=Symbol.for("@thg-agentic/hyper-personalisation-web.recommendation-context"),yt=e=>e?()=>j(e):()=>null,Zr={didomi:e=>zn({purposes:e.purposes}),onetrust:e=>Wn({groups:e.groups,impliedConsent:e.impliedConsent}),cookie:e=>Jn({name:e.name,categories:e.categories,refusedValue:e.refusedValue,source:e.source,changeEvent:e.changeEvent}),forwarded:e=>Yn({name:e.name}),static:e=>{if(!e.state||typeof e.state!="object")throw new Error('consent.state is required for provider "static"');return Xn(e.state)}},Yr=Object.keys(Zr),we=e=>e!==null&&typeof e=="object"&&!Array.isArray(e),ht=e=>typeof e=="string"&&e!=="",bi=e=>Array.isArray(e)&&e.every(t=>typeof t=="string"),Qr=e=>we(e)&&typeof e.read=="function";function Ii(e,t={}){let n=[];if(!we(e))return["config must be { writeKey, apiHost? }"];ht(e.writeKey)||n.push("writeKey is required"),ie(e.apiHost)||n.push("apiHost, when given, must be a host or an http(s) origin"),t.propertyId!==void 0&&!ht(t.propertyId)&&n.push("propertyId must be a string");let{consent:r}=t;if(!Qr(r)&&!(we(r)&&Yr.includes(r.provider))&&n.push(`consent must be a consent adapter or { provider: ${Yr.join(" | ")} }`),t.autocapture!==void 0&&t.autocapture!==!1&&!we(t.autocapture)&&n.push("autocapture must be false or { promotions, productLists, recommendations }"),t.onsite!==void 0&&typeof t.onsite!="boolean"&&!we(t.onsite)&&n.push("onsite must be true, false or the onsite options"),t.beforeSend!==void 0&&typeof t.beforeSend!="function"&&n.push("beforeSend must be a function"),t.identityCookies!==void 0)if(!we(t.identityCookies))n.push("identityCookies must be an object");else for(let o of["anonymousId","sessionId"]){let s=t.identityCookies[o];s!==void 0&&!ht(s)&&n.push(`identityCookies.${o} must be a cookie name`)}for(let o of["getCurrency","getShipToCountry","getLocale"])t[o]!==void 0&&typeof t[o]!="function"&&n.push(`${o} must be a function`);return t.dataLayer!==void 0&&(we(t.dataLayer)?(t.dataLayer.name!==void 0&&!ht(t.dataLayer.name)&&n.push("dataLayer.name must be a string"),t.dataLayer.ignore!==void 0&&!bi(t.dataLayer.ignore)&&n.push("dataLayer.ignore must be an array of strings")):n.push("dataLayer must be an object")),n}function ki(e,t,n){if(Qr(e))return Bt(e,t.consentPurposes);let{provider:r,...o}=e,s=n?.consent?.[r]??Zr[r];return Bt(s(o),t.consentPurposes)}var wt=(e,t,n)=>`${e??""}|${t??""}${n?"|v":""}`,xi=(e,t,n,r)=>e===wt(t,n,!0)||!r&&e===wt(t,n,!1),Ai=e=>{if(e.context?.identity_token===void 0)return e;let{identity_token:t,...n}=e.context;return{...e,context:n}},eo=e=>{try{return sessionStorage.getItem(e)}catch{return null}};function vi(e,t){let n=F(t?.userId),r=ft(t?.emailSha256);if(!n&&!r)return null;let o=eo($(P("identified"),e));return xi(o,n,r,n!==null&&Ce(t?.token)!==null)?null:{...n?{userId:n}:{},...r?{email_sha256:r}:{}}}async function Ei({writeKey:e,apiHost:t},n){if(n.settings!==void 0)return{settings:en(n.settings),revalidated:null};let r=Pr(t,e),o=Or(e);if(o)return{settings:o,revalidated:r,fetched:r};let s=await r;return s?{settings:s,revalidated:r,fetched:r}:{settings:Qt,revalidated:null,fetched:r}}function to(e,t){let n=t??{},r=typeof window<"u"?window:null;if(r?.[pn])return r[pn];let o=Hn(e?.writeKey,()=>{let{analytics:i}=Oe(j(P("consent")));return i===!0||i===null&&n.holdAcrossPages===!0}),s=Li(e,n,o);if(r){let i=n.extend?.getSessionId??yt(n.identityCookies?.sessionId),u=yt(n.identityCookies?.anonymousId);r[Si]=({slot:c,arm:l}={})=>An({sessionId:Fe(i(),u()),slot:c,arm:l}),r[pn]=s,r[yi]=o,r[gi]?.(s)}return s}function Ci(){let e=globalThis.performance?.now?.();return new Date(Date.now()-(Number.isFinite(e)?e:0)).toISOString()}function Xr(e,t){if(t===!1)return()=>{};let n={promotions:!0,productLists:!0,recommendations:!0,exposures:!0,...t},r=s=>s&&typeof s=="object"?s:{},o=[];try{n.promotions&&o.push(At(e,r(n.promotions))),n.productLists&&o.push(xt(e,r(n.productLists))),n.recommendations&&o.push(vt(e,r(n.recommendations))),n.exposures&&o.push(kt(e,r(n.exposures)))}catch(s){console.warn("[hp] autocapture not started:",s?.message??s)}return()=>{for(let s of o)s()}}var Pi=1e3;function Oi(e,t,n,r){if(!t)return Be();let o=n.onsite?fn():null;o?.catch(()=>{}),(r?Promise.race([r.then(i=>i??n),new Promise(i=>setTimeout(()=>i(n),Pi))]):Promise.resolve(n)).then(i=>{let u=i.enabled?i.onsite:null;if(!u)return Be();let c=t===!0?{}:t;return(o??fn()).then(l=>l.startOnsite(e,{...c,settings:c.settings??u}))}).catch(i=>{Be(),console.warn("[hp] onsite not started:",i?.message??i)})}function gt(e){return e.close(),Be(),null}async function Li(e,t,n){try{let r=Ii(e,t);if(r.length)return console.warn(`[hp] not started, the configuration is invalid: ${r.join("; ")}`),gt(n);Ke(t.storageNames),Ge();let{writeKey:o}=e,[{settings:s,revalidated:i,fetched:u},c]=await Promise.all([Ei(e,t),Promise.resolve(t.identity).catch(()=>null)]),l=i?s:null,f=!1,p=()=>f&&l&&Lr(o,l);if(i?.then(g=>{g&&(l=g,g.enabled?p():tn(o))}),!s.enabled)return t.debug&&console.info("[hp] off: the settings for this write key do not enable it"),gt(n);let m=t.propertyId??s.propertyId??null;if(!m&&s!==Qt)return console.warn("[hp] not started: this write key covers several properties, so propertyId is required"),gt(n);let{preset:A}=t,w=vi(m,c),k=t.debug===!0||s.debug?.enabled===!0||nr(s.debug?.tokenSha256??null,P("debug")),b=F(c?.userId),x=Kr({apiHost:Er(e.apiHost,s.apiHost),servingHost:ie(e.apiHost),onsite:s.onsite??null,writeKey:o,propertyId:m,pageType:_e.has(t.pageType)?t.pageType:void 0,environment:s.environment,queryParamAllowlist:s.queryParamAllowlist??void 0,plan:s.plan,sampleRate:s.sampleRate??1,holdout:s.holdouts?.[m],getCurrency:t.getCurrency,getShipToCountry:t.getShipToCountry,getLocale:t.getLocale,consent:ki(t.consent,s,A),consentCookieDomain:t.consentCookieDomain,storageNames:t.storageNames,holdAcrossPages:t.holdAcrossPages===!0,mintAnonymousId:t.mintAnonymousId,debug:k,anonymousIdSource:s.anonymousId??void 0,getAnonymousId:yt(t.identityCookies?.anonymousId),getSessionId:t.identityCookies?.sessionId?yt(t.identityCookies.sessionId):void 0,getUserId:()=>b,identityToken:c?.token,beforeSend:t.beforeSend,...t.extend,onConsentStatus(g){if(g==="granted"&&(f=!0,p()),g==="denied"){tn(o);try{sessionStorage.removeItem($(P("identified"),m))}catch{}}t.extend?.onConsentStatus?.(g)},onEvent(g){if(g.type==="identify"){let y=$(P("identified"),m),O=F(g.userId),N=ft(g.traits?.email_sha256),U=!!g.context?.identity_token||eo(y)===wt(O,N,!0);try{sessionStorage.setItem(y,wt(O,N,U))}catch{}}t.extend?.onEvent?.(Ai(g))}});typeof window<"u"&&(window[_i]=()=>x.recommendationContext()),u?.then(g=>g===null&&x[wi]());for(let[g,y,O]of n.take())try{x[Jr](g,y,O)}catch(N){console.warn(`[hp] carried ${g} failed`,N)}x[Jr]("page",[t.pageType?{type:t.pageType}:{}],{messageId:oe(),timestamp:Ci()});let h=Xr(x,t.autocapture),E=x.page;x.page=qt("page",(...g)=>{let y=E(...g);return h(),h=Xr(x,t.autocapture),y});let S=typeof window<"u"?window:null;if(S?.addEventListener?.("pageshow",g=>{g.persisted&&x.page({navigation_trigger:"back_forward"})}),t.dataLayer&&S){let g=t.dataLayer.name??"dataLayer";S[g]=S[g]||[],tr(x,{...A,dataLayer:S[g],ignore:[...A?.ignore??[],...t.dataLayer.ignore??[]],onError:y=>k&&console.warn("[hp] dataLayer mapping failed",y)})}return w&&x.identify(w,void 0,Le),x.onsite=ye,Oi(x,t.onsite,s,i),x}catch(r){return console.warn("[hp] not started:",r?.message??r),gt(n)}}function no(e){e.initialized=!0,to(e._config,e._options).then(t=>{let n=e.splice(0);if(!t){for(let r of e.methods??[])e[r]=()=>e;return}e.client=t;for(let[r,o]of Object.entries(t))typeof o=="function"&&(e[r]=o);for(let[r,...o]of n)try{t[r]?.(...o)}catch(s){console.warn(`[hp] queued ${r} failed`,s)}})}var B=window.hp=window.hp||[];B.servingHeaders??(B.servingHeaders=()=>({}));B.inHoldout??(B.inHoldout=()=>!0);B.personalisationGroup??(B.personalisationGroup=()=>"excluded");B.recommendationContext??(B.recommendationContext=()=>({}));B.onsite??(B.onsite=ye);B.initialized||(B._config?no(B):B.load=(e,t)=>{B._config=e,B._options=t??{},no(B)});})();
3
+ `)}`;if(n.throwOnInvalid)throw new Ae(z);console.error(z)}}n.debug&&console.debug("[hp]",T.event??T.type,T);let It=Ei(T);return It>fn?(k(`${T.event??T.type} not sent: ${It} bytes, over the ${fn}-byte limit for one event`),null):(go(T,S),T)}function K(a){if((a.type==="track"||a.type==="page")&&ho(a),n.onEvent)try{n.onEvent(a)}catch(l){console.warn("[hp] onEvent observer failed",l)}}let X=()=>r&&o?.state?.personalisation===!0,Y=()=>Cr(M(n.getSessionId,null),n.propertyId),ve=!1,wn=null;function ho(a){try{if(X()){Y();let l=Nr(a.event,a.properties,mt(n.propertyId,{sessionId:m()}));a.type==="track"&&kr(Yt(l)),a.event==="Preferences Stated"&&a.properties?.source==="onsite"&&Sn([a.properties],a.properties.slot),ve=!0}else qe(!1,n.propertyId??null)}catch(l){n.debug&&console.warn("[hp] the visit was not recorded",l)}}function Sn(a,l){let S=(wn??n.onsite)?.forms?.find?.(E=>E?.slot===l);pr(n.propertyId,fr(a,S?.questions))}function qe(a=!1,l=void 0){xr(),mr(l),(a||ve)&&Or(),ve=!1}function kt(){d.forget(),g.forget(),xt.clear(),u?.forget(),qe(!0),hn()}function go(a,l){!r||l||o.admits()?(K(a),b.enqueue(a)):o.hold(a)}let v=(a,l,S)=>ce({type:"track",event:a,properties:l??{}},S),xt=new Set,yo=(a,l,S)=>a==="audiences"?{audiences:l?null:S.audiences??[]}:a==="decisions"?{decisions:(S.decisions??[]).map(E=>({slot:E.slot,decision_id:E.decision_id??null,arm:E.arm??null,...E.variant&&{variant:E.variant}}))}:{recommendation_request_id:S.recommendation_request_id??null};w(I),r&&(o=gr({adapter:n.consent,timeoutMs:n.consentTimeoutMs,cookieDomain:n.consentCookieDomain,debug:n.debug,store:i&&{read:()=>c.items,write:a=>i.write(a,u?.peek()??null)},release(a){a.context&&(a.context.consent=o.stamp()),K(a),b.enqueue(a)},onStatus(a){if(a==="granted"&&(u?.persist(),d.persist(),h&&_(h),g.persist(),b.replayPersisted?.()),a==="denied"){b.clearPersisted?.(),u?.forget(),d.forget();try{sessionStorage.removeItem(x)}catch{}g.forget(),qe(!0)}try{n.onConsentStatus?.(a)}catch(l){console.warn("[hp] onConsentStatus observer failed",l)}if(a==="granted"||a==="denied")for(let l of Se)try{l()}catch(S){console.warn("[hp] a consent listener failed",S)}},announce({action:a,state:l,previous:S,withdrawal:E}){l?.personalisation!==!0&&qe(S?.personalisation===!0),E&&(b.discardQueued?.(),hn()),ce({type:"track",event:"Consent Updated",properties:{action:a,state:l}},void 0,E),E&&b.flush()}}),o.start(),w());let _n=()=>n.holdout?Wt(n.holdout):null,bn=()=>Xt(n.holdout,H(M(n.getAnonymousId,null))).group;function wo(a,l){if(!Array.isArray(a?.decisions))return a;let S=n.holdout?.readoutSlots??[],E=H(M(n.getAnonymousId,null));return{...a,decisions:a.decisions.map($=>{let T=$?.variant==="bandit"||$?.variant==="default"?$.variant:!l&&$?.holdout!==!0&&S.includes($?.slot)?Sr($.slot,E):null;return T?T==="default"?{...$,variant:T,decision_id:null}:{...$,variant:T}:$})}}function An(a,l){if(p)return null;let S=a?.exposure,E=S?.holdout===!0,$=wo(a,E);return g.remember(yr($)),!S?.token||xt.has(S.token)?null:(xt.add(S.token),v("Personalisation Exposed",{exposure_token:S.token,surface:S.surface,holdout:E,holdout_share:S.holdout_share??_n()?.holdout_share??null,personalised_share:S.personalised_share??_n()?.personalised_share??null,...yo(S.surface,E,$)},l))}function kn(a){return y&&kt(),y=null,P=null,N=null,V=null,a}return ur({track:(a,l,S)=>a==="Signed Out"?kn(v(a,l,S)):v(a,l,S),page(a,l){a??(a={});let S=n.pageType??null;a.type&&(_e.has(a.type)?(S=a.type,n.pageType=a.type):n.debug&&console.warn(`[hp] ignoring unknown page.type "${a.type}". Allowed: ${[..._e].join(", ")}`));let E=ce({type:"page",properties:{name:a.name??null,navigation_trigger:a.navigation_trigger??Mn(),previous_message_id:O()}},{page:{type:S},...ht(l)??{}});return E&&_(E.messageId),E},identify(a,l,S){let{userId:E,...$}=a&&typeof a=="object"?a:{},T=Ce(ht(l)?.identity_token);if(E!==void 0){let z=H(E);V=z?z===y?T??V:T:null,S===Le?N=z:P&&z&&z!==P?kt():n.debug&&N&&z&&z!==N&&console.warn("[hp] identify names another userId than the identity option; using the new one"),y=z,z&&S!==Le&&(P=z)}else T&&y&&(V=T);let{identity_token:It,...te}=ht(l)??{};return ce({type:"identify",traits:xi($,n.debug)},V?{...te,identity_token:V}:te)},reset(){y&&kt(),y=null,P=null,N=null,V=null,_("")},productViewed:(a,l)=>v("Product Viewed",a,l),productListViewed:(a,l)=>v("Product List Viewed",a,l),recommendationsViewed:(a,l)=>v("Recommendations Viewed",a,l),personalisationExposed:(a,l)=>v("Personalisation Exposed",a,l),recordExposure:An,surfaceViewed({surface:a}={},l){if(!mi.has(a)||!n.holdout||a!=="decisions"&&!X())return null;let S=H(M(n.getAnonymousId,null)),E=Xt(n.holdout,S).group;if(E==="excluded")return null;let $=Tn({sessionId:He(M(n.getSessionId,null),S),surface:a});return $?An({exposure:{token:$,surface:a,holdout:E==="holdout"}},l):null},inHoldout:()=>bn()!=="personalised",personalisationGroup:bn,productClicked:(a,l)=>v("Product Clicked",a,l),productListFiltered:(a,l)=>v("Product List Filtered",a,l),productsSearched:(a,l)=>v("Products Searched",a,l),searchSuggestionsViewed:(a,l)=>v("Search Suggestions Viewed",a,l),productAdded:(a,l)=>v("Product Added",a,l),productRemoved:(a,l)=>v("Product Removed",a,l),cartUpdated:(a,l)=>v("Cart Updated",wi(a),l),identityLinked:(a,l)=>v("Identity Linked",a,l),slotEngaged:(a,l)=>p?null:v("Slot Engaged",a,l),productVariantSelected:(a,l)=>v("Product Variant Selected",a,l),cartViewed:(a,l)=>v("Cart Viewed",a,l),productAddedToWishlist:(a,l)=>v("Product Added to Wishlist",a,l),productRemovedFromWishlist:(a,l)=>v("Product Removed from Wishlist",a,l),wishlistProductAddedToCart:(a,l)=>v("Wishlist Product Added to Cart",a,l),productShared:(a,l)=>v("Product Shared",a,l),cartShared:(a,l)=>v("Cart Shared",a,l),couponEntered:(a,l)=>v("Coupon Entered",a,l),couponApplied:(a,l)=>v("Coupon Applied",a,l),couponDenied:(a,l)=>v("Coupon Denied",a,l),couponRemoved:(a,l)=>v("Coupon Removed",a,l),checkoutStarted:(a,l)=>v("Checkout Started",a,l),promotionViewed:(a,l)=>v("Promotion Viewed",a,l),promotionClicked:(a,l)=>v("Promotion Clicked",a,l),checkoutStepViewed:(a,l)=>v("Checkout Step Viewed",a,l),checkoutStepCompleted:(a,l)=>v("Checkout Step Completed",a,l),paymentInfoEntered:(a,l)=>v("Payment Info Entered",a,l),checkoutFailed:(a,l)=>v("Checkout Failed",a,l),signedIn:(a,l)=>v("Signed In",a,l),signedUp:(a,l)=>v("Signed Up",a,l),signedOut:a=>kn(v("Signed Out",{},a)),newsletterSubscribed:(a,l)=>v("Newsletter Subscribed",a,l),newsletterUnsubscribed:(a,l)=>v("Newsletter Unsubscribed",a,l),preferencesStated:(a,l)=>v("Preferences Stated",a,l),backInStockSubscribed:(a,l)=>v("Back In Stock Subscribed",a,l),productReviewed:(a,l)=>v("Product Reviewed",a,l),consentUpdated:(a,l)=>v("Consent Updated",a,l),flush:a=>b.flush(a),recommendationContext(){if(!X())return{};try{return Y(),Yt(Re())}catch{return{}}},get consent(){return o?o.state:null},servingHeaders:()=>qt(o?.state??null),get lastPageMessageId(){return O()},get anonymousId(){return H(M(n.getAnonymousId,null))},[yi](){return{writeKey:n.writeKey,library:{name:mn,version:pn},storageKey:U(C("onsite"),n.propertyId),gatewayHost:n.apiHost,servingHost:n.servingHost??n.apiHost,settings:n.onsite??null,debug:n.debug===!0,preview:p,anonymousId:()=>H(M(n.getAnonymousId,null)),sessionId:()=>H(M(n.getSessionId,null)),identityToken:()=>X()?V:null,analytics:s,personalisation:X,answered:(a,l)=>{X()&&Sn(a,l)},started:a=>{wn=a},consent:()=>n.getConsent(),headers:()=>qt(o?.state??null),pageUrl:()=>typeof location>"u"?null:Mt(location.href,n),locale:()=>Ut(M(n.getLocale,n.locale)),campaign:()=>p?I:mt(n.propertyId,{sessionId:m()}),basketValue:()=>{let a=Re().basketValue;return F??(Number.isFinite(a)?a:null)},sessionSignals:()=>X()?(Y(),{...Re(),campaign:mt(n.propertyId,{sessionId:m()}),answers:dr(n.propertyId)}):null,visitContext:()=>{let a=X();a&&Y();let l=a?Re():null,S=E=>Array.isArray(E)?E.filter($=>typeof $=="string"&&$.length<=128).slice(0,20):[];return{...n.pageType?{page_type:n.pageType}:{},...ee?{product_id:ee}:{},...l?{basket:S(l.basketProducts),viewed:S(l.recentProducts)}:{}}},onBasket:a=>(W.add(a),()=>W.delete(a)),consentAnswered:()=>!o||o.status==="granted"||o.status==="denied",onConsentAnswered:a=>(Se.add(a),()=>Se.delete(a))}},[gi](){b.markFailing?.()},[hi](a,l,S){if(typeof this[a]=="function"){G=typeof S?.messageId=="string"&&typeof S?.timestamp=="string"?{messageId:S.messageId,timestamp:S.timestamp}:null;try{this[a](...Array.isArray(l)?l:[])}finally{G=null}}}})}var Ve=Symbol.for("@thg-agentic/hyper-personalisation-web.onsite"),Z=Symbol.for("@thg-agentic/hyper-personalisation-web.onsite.pending"),$e=Symbol.for("@thg-agentic/hyper-personalisation-web.onsite.listeners"),yt=Symbol.for("@thg-agentic/hyper-personalisation-web.onsite.suppressed"),Oi=["shown","submitted","apply","closed","held","nothing"],ro=10,ge=()=>typeof window>"u"?null:window;function Be(){try{for(let{resolve:e}of ge()?.[Z]?.splice(0)??[])e(!1)}catch{}}var ye=Object.freeze({open(e){try{let t=ge();if(!t||typeof e!="string")return Promise.resolve(!1);if(t[Ve])return t[Ve].open(e);if(t[Z]??(t[Z]=[]),t[Z].length<ro)return new Promise(n=>t[Z].push({slot:e,resolve:n}))}catch{}return Promise.resolve(!1)},show(e){return ye.open(e)},on(e,t){var n;try{let r=ge();return!r||!Oi.includes(e)||typeof t!="function"?()=>{}:(r[$e]??(r[$e]={}),((n=r[$e])[e]??(n[e]=new Set)).add(t),()=>r[$e][e].delete(t))}catch{return()=>{}}},suppress(e="page"){try{let t=ge();if(!t)return;(t[yt]??(t[yt]=new Set)).add(String(e)),t[Ve]?.suppress()}catch{}},unsuppress(e){try{let t=ge()?.[yt];e===void 0?t?.clear():t?.delete(String(e))}catch{}},ready(){try{let e=ge();if(!e)return Promise.resolve([]);if(e[Ve])return Promise.resolve(ye.debug());if(e[Z]??(e[Z]=[]),e[Z].length<ro)return new Promise(t=>e[Z].push({slot:null,resolve:()=>t(ye.debug())}))}catch{}return Promise.resolve([])},debug(){try{return ge()?.[Ve]?.debug()??[]}catch{return[]}}});function oo(e){let t=typeof document>"u"?null:document.currentScript?.src;return t?new URL(e,t).href:null}var wt=new Map;function so(e,t){return window[t]?Promise.resolve(window[t]):e?(wt.has(t)||wt.set(t,new Promise((n,r)=>{let o=document.createElement("script");o.src=e,o.async=!0,o.onload=()=>window[t]?n(window[t]):r(new Error(`${e} did not register`)),o.onerror=()=>r(new Error(`${e} did not load`)),document.head.append(o)}).finally(()=>wt.delete(t))),wt.get(t)):Promise.reject(new Error("the CDN script\u2019s own URL is unknown"))}var Pi=oo("onsite.min.js"),gn=()=>so(Pi,Symbol.for("@thg-agentic/hyper-personalisation-web.onsite.module"));var yn=Symbol.for("@thg-agentic/hyper-personalisation-web.bootstrap"),Li=Symbol.for("@thg-agentic/hyper-personalisation-web.drain"),Ti=Symbol.for("@thg-agentic/hyper-personalisation-web.carry"),io=Symbol.for("@thg-agentic/hyper-personalisation-web.replay"),Ni=Symbol.for("@thg-agentic/hyper-personalisation-web.unreachable"),Ri=Symbol.for("@thg-agentic/hyper-personalisation-web.assignment"),Mi=Symbol.for("@thg-agentic/hyper-personalisation-web.recommendation-context"),bt=e=>e?()=>j(e):()=>null,uo={didomi:e=>Qn({purposes:e.purposes}),onetrust:e=>er({groups:e.groups,impliedConsent:e.impliedConsent}),cookie:e=>tr({name:e.name,categories:e.categories,refusedValue:e.refusedValue,source:e.source,changeEvent:e.changeEvent}),forwarded:e=>nr({name:e.name}),static:e=>{if(!e.state||typeof e.state!="object")throw new Error('consent.state is required for provider "static"');return rr(e.state)}},ao=Object.keys(uo),we=e=>e!==null&&typeof e=="object"&&!Array.isArray(e),St=e=>typeof e=="string"&&e!=="",Di=e=>Array.isArray(e)&&e.every(t=>typeof t=="string"),lo=e=>we(e)&&typeof e.read=="function";function Ui(e,t={}){let n=[];if(!we(e))return["config must be { writeKey, apiHost? }"];St(e.writeKey)||n.push("writeKey is required"),ie(e.apiHost)||n.push("apiHost, when given, must be a host or an http(s) origin"),t.propertyId!==void 0&&!St(t.propertyId)&&n.push("propertyId must be a string");let{consent:r}=t;if(!lo(r)&&!(we(r)&&ao.includes(r.provider))&&n.push(`consent must be a consent adapter or { provider: ${ao.join(" | ")} }`),t.autocapture!==void 0&&t.autocapture!==!1&&!we(t.autocapture)&&n.push("autocapture must be false or { promotions, productLists, recommendations }"),t.onsite!==void 0&&typeof t.onsite!="boolean"&&!we(t.onsite)&&n.push("onsite must be true, false or the onsite options"),t.beforeSend!==void 0&&typeof t.beforeSend!="function"&&n.push("beforeSend must be a function"),t.identityCookies!==void 0)if(!we(t.identityCookies))n.push("identityCookies must be an object");else for(let o of["anonymousId","sessionId"]){let s=t.identityCookies[o];s!==void 0&&!St(s)&&n.push(`identityCookies.${o} must be a cookie name`)}for(let o of["getCurrency","getShipToCountry","getLocale"])t[o]!==void 0&&typeof t[o]!="function"&&n.push(`${o} must be a function`);return t.dataLayer!==void 0&&(we(t.dataLayer)?(t.dataLayer.name!==void 0&&!St(t.dataLayer.name)&&n.push("dataLayer.name must be a string"),t.dataLayer.ignore!==void 0&&!Di(t.dataLayer.ignore)&&n.push("dataLayer.ignore must be an array of strings")):n.push("dataLayer must be an object")),n}function Vi(e,t,n){if(lo(e))return Ht(e,t.consentPurposes);let{provider:r,...o}=e,s=n?.consent?.[r]??uo[r];return Ht(s(o),t.consentPurposes)}var At=(e,t,n)=>`${e??""}|${t??""}${n?"|v":""}`,$i=(e,t,n,r)=>e===At(t,n,!0)||!r&&e===At(t,n,!1),Bi=e=>{if(e.context?.identity_token===void 0)return e;let{identity_token:t,...n}=e.context;return{...e,context:n}},fo=e=>{try{return sessionStorage.getItem(e)}catch{return null}};function ji(e,t){let n=H(t?.userId),r=gt(t?.emailSha256);if(!n&&!r)return null;let o=fo(U(C("identified"),e));return $i(o,n,r,n!==null&&Ce(t?.token)!==null)?null:{...n?{userId:n}:{},...r?{email_sha256:r}:{}}}async function qi({writeKey:e,apiHost:t},n){if(n.settings!==void 0)return{settings:on(n.settings),revalidated:null};let r=Br(t,e),o=jr(e);if(o)return{settings:o,revalidated:r,fetched:r};let s=await r;return s?{settings:s,revalidated:r,fetched:r}:{settings:rn,revalidated:null,fetched:r}}function po(e,t){let n=t??{},r=typeof window<"u"?window:null;if(r?.[yn])return r[yn];let o=Jn(e?.writeKey,()=>{let{analytics:i}=Pe(j(C("consent")));return i===!0||i===null&&n.holdAcrossPages===!0}),s=Gi(e,n,o);if(r){let i=n.extend?.getSessionId??bt(n.identityCookies?.sessionId),c=bt(n.identityCookies?.anonymousId);r[Ri]=({slot:u,arm:d}={})=>Ln({sessionId:He(i(),c()),slot:u,arm:d}),r[yn]=s,r[Ti]=o,r[Li]?.(s)}return s}function Hi(){let e=globalThis.performance?.now?.();return new Date(Date.now()-(Number.isFinite(e)?e:0)).toISOString()}function co(e,t){if(t===!1)return()=>{};let n={promotions:!0,productLists:!0,recommendations:!0,exposures:!0,...t},r=s=>s&&typeof s=="object"?s:{},o=[];try{n.promotions&&o.push(Ot(e,r(n.promotions))),n.productLists&&o.push(Ct(e,r(n.productLists))),n.recommendations&&o.push(Pt(e,r(n.recommendations))),n.exposures&&o.push(Et(e,r(n.exposures)))}catch(s){console.warn("[hp] autocapture not started:",s?.message??s)}return()=>{for(let s of o)s()}}var Fi=1e3;function Ki(e,t,n,r){if(!t)return Be();let o=n.onsite?gn():null;o?.catch(()=>{}),(r?Promise.race([r.then(i=>i??n),new Promise(i=>setTimeout(()=>i(n),Fi))]):Promise.resolve(n)).then(i=>{let c=i.enabled?i.onsite:null;if(!c)return Be();let u=t===!0?{}:t;return(o??gn()).then(d=>d.startOnsite(e,{...u,settings:u.settings??c}))}).catch(i=>{Be(),console.warn("[hp] onsite not started:",i?.message??i)})}function _t(e){return e.close(),Be(),null}async function Gi(e,t,n){try{let r=Ui(e,t);if(r.length)return console.warn(`[hp] not started, the configuration is invalid: ${r.join("; ")}`),_t(n);Ge(t.storageNames),Je();let{writeKey:o}=e,[{settings:s,revalidated:i,fetched:c},u]=await Promise.all([qi(e,t),Promise.resolve(t.identity).catch(()=>null)]),d=i?s:null,f=!1,p=()=>f&&d&&qr(o,d);if(i?.then(g=>{g&&(d=g,g.enabled?p():sn(o))}),!s.enabled)return t.debug&&console.info("[hp] off: the settings for this write key do not enable it"),_t(n);let m=t.propertyId??s.propertyId??null;if(!m&&s!==rn)return console.warn("[hp] not started: this write key covers several properties, so propertyId is required"),_t(n);let{preset:I}=t,w=ji(m,u),k=t.debug===!0||s.debug?.enabled===!0||cr(s.debug?.tokenSha256??null,C("debug")),b=H(u?.userId),x=no({apiHost:Vr(e.apiHost,s.apiHost),servingHost:ie(e.apiHost),onsite:s.onsite??null,writeKey:o,propertyId:m,pageType:_e.has(t.pageType)?t.pageType:void 0,environment:s.environment,queryParamAllowlist:s.queryParamAllowlist??void 0,plan:s.plan,sampleRate:s.sampleRate??1,holdout:s.holdouts?.[m],getCurrency:t.getCurrency,getShipToCountry:t.getShipToCountry,getLocale:t.getLocale,consent:Vi(t.consent,s,I),consentCookieDomain:t.consentCookieDomain,storageNames:t.storageNames,holdAcrossPages:t.holdAcrossPages===!0,mintAnonymousId:t.mintAnonymousId,debug:k,anonymousIdSource:s.anonymousId??void 0,getAnonymousId:bt(t.identityCookies?.anonymousId),getSessionId:t.identityCookies?.sessionId?bt(t.identityCookies.sessionId):void 0,getUserId:()=>b,identityToken:u?.token,beforeSend:t.beforeSend,...t.extend,onConsentStatus(g){if(g==="granted"&&(f=!0,p()),g==="denied"){sn(o);try{sessionStorage.removeItem(U(C("identified"),m))}catch{}}t.extend?.onConsentStatus?.(g)},onEvent(g){if(g.type==="identify"){let y=U(C("identified"),m),P=H(g.userId),N=gt(g.traits?.email_sha256),V=!!g.context?.identity_token||fo(y)===At(P,N,!0);try{sessionStorage.setItem(y,At(P,N,V))}catch{}}t.extend?.onEvent?.(Bi(g))}});typeof window<"u"&&(window[Mi]=()=>x.recommendationContext()),c?.then(g=>g===null&&x[Ni]());for(let[g,y,P]of n.take())try{x[io](g,y,P)}catch(N){console.warn(`[hp] carried ${g} failed`,N)}x[io]("page",[t.pageType?{type:t.pageType}:{}],{messageId:oe(),timestamp:Hi()});let h=co(x,t.autocapture),O=x.page;x.page=zt("page",(...g)=>{let y=O(...g);return h(),h=co(x,t.autocapture),y});let _=typeof window<"u"?window:null;if(_?.addEventListener?.("pageshow",g=>{g.persisted&&x.page({navigation_trigger:"back_forward"})}),t.dataLayer&&_){let g=t.dataLayer.name??"dataLayer";_[g]=_[g]||[],ar(x,{...I,dataLayer:_[g],ignore:[...I?.ignore??[],...t.dataLayer.ignore??[]],onError:y=>k&&console.warn("[hp] dataLayer mapping failed",y)})}return w&&x.identify(w,void 0,Le),x.onsite=ye,Ki(x,t.onsite,s,i),x}catch(r){return console.warn("[hp] not started:",r?.message??r),_t(n)}}function mo(e){e.initialized=!0,po(e._config,e._options).then(t=>{let n=e.splice(0);if(!t){for(let r of e.methods??[])e[r]=()=>e;return}e.client=t;for(let[r,o]of Object.entries(t))typeof o=="function"&&(e[r]=o);for(let[r,...o]of n)try{t[r]?.(...o)}catch(s){console.warn(`[hp] queued ${r} failed`,s)}})}var B=window.hp=window.hp||[];B.servingHeaders??(B.servingHeaders=()=>({}));B.inHoldout??(B.inHoldout=()=>!0);B.personalisationGroup??(B.personalisationGroup=()=>"excluded");B.recommendationContext??(B.recommendationContext=()=>({}));B.onsite??(B.onsite=ye);B.initialized||(B._config?mo(B):B.load=(e,t)=>{B._config=e,B._options=t??{},mo(B)});})();
@@ -1 +1 @@
1
- (()=>{var y=["source","medium","campaign","content","term"];var h=e=>String(e).trim().toLowerCase();function f(e,t,n){let s=h(e),r=h(n);return t==="is"?s===r:t==="contains"&&r!==""&&s.includes(r)}function d(e){return e.trim().toLowerCase().replace(/\s*\/\s*/g,"/").replace(/^\/+|\/+$/g,"")}var A={gte:(e,t)=>e>=t,greater_than_or_equal:(e,t)=>e>=t,">=":(e,t)=>e>=t,lte:(e,t)=>e<=t,less_than_or_equal:(e,t)=>e<=t,"<=":(e,t)=>e<=t,eq:(e,t)=>e===t,equals:(e,t)=>e===t,"=":(e,t)=>e===t},p=e=>typeof e=="string",u=(e,t)=>p(t)&&f(e,"is",t),x={eq:u,equals:u,"=":u,neq:(e,t)=>p(t)&&!u(e,t),in:(e,t)=>Array.isArray(t)&&t.some(n=>u(e,n)),contains:(e,t)=>p(t)&&f(e,"contains",t)},D=new Set([...Object.keys(A),...Object.keys(x),"between"]);function g(e,t){let n=d(t);return n?e.filter(s=>s===n||s.startsWith(`${n}/`)).length:0}function S(e,t){return e.length===0?0:g(e,t)/e.length}var M={categoryViews:(e,t)=>g(e.recentCategories,t),categoryShare:(e,t)=>S(e.recentCategories,t),browseViews:(e,t)=>g(e.recentBrowse,t),browseShare:(e,t)=>S(e.recentBrowse,t)};function q(e,t){let n=e.indexOf(".");if(n>0){let r=e.slice(0,n),c=e.slice(n+1);if(r==="campaign"){let o=y.includes(c)?t.campaign?.[c]:null;return typeof o=="string"?o:null}let i=M[r];return i&&c?i(t,c):null}let s=t[e];return typeof s=="number"?s:null}function w(e,t){let n=q(e.field,t);if(n===null)return!1;if(typeof n=="string"){let r=x[e.operator];return r?r(n,e.value):!1}if(e.operator==="between")return typeof e.value=="number"&&typeof e.value2=="number"&&n>=e.value&&n<=e.value2;let s=A[e.operator];return!s||typeof e.value!="number"?!1:s(n,e.value)}function v(e,t){let n=e.rules??[];if(n.length===0)return!1;let s=new Map;for(let i of n){let o=i.group??0,a=s.get(o);a?a.push(i):s.set(o,[i])}let r=e.groupOperators??[],c=[];for(let[i,o]of s)c.push(r[i]==="OR"?o.some(a=>w(a,t)):o.every(a=>w(a,t)));return e.groupJoin==="OR"?c.some(Boolean):c.every(Boolean)}function O(e,t){if(!Array.isArray(t))return e;let n=new Set(t),s=e.recentBrowseCategories??[],r=(e.recentBrowse??[]).filter((i,o)=>n.has(s[o])),c=Object.entries(e.listViewsByCategory??{}).reduce((i,[o,a])=>n.has(o)?i+a:i,0);return{...e,recentBrowse:r,listViews:c}}var R=100,C=128,_=e=>typeof e=="string"&&e!==""&&e.length<=C,l=new WeakMap;function m(e){if(!l.has(e)){let t=e.datafile().then(n=>n.status===200?n.body:null).catch(()=>null);l.set(e,t),t.then(n=>{!n&&l.get(e)===t&&l.delete(e)})}return l.get(e)}async function b(e,t,n=[],s=[]){let r=await m(e),c=t?.(),i=Array.isArray(r?.session_audiences)?r.session_audiences:[],o=r&&c?I(r,c):[];return E([...o,...s],n,i)}function E(e,t,n){let s=new Map(n.map(o=>[o?.slug,Array.isArray(o?.requires)?o.requires:[]])),r=new Set,c=o=>{if(!r.has(o)){r.add(o);for(let a of s.get(o)??[])c(a)}};for(let o of t)c(o);let i=[...new Set(e.filter(_))];return[...i.filter(o=>r.has(o)),...i.filter(o=>!r.has(o))].slice(0,R)}function I(e,t){let n=Array.isArray(e?.session_audiences)?e.session_audiences:[],s=O(t,e.browse_categories??null);return n.filter(r=>_(r?.slug)&&v(r,s)).map(r=>r.slug)}window[Symbol.for("@thg-agentic/hyper-personalisation-web.onsite.audiences")]={prefetch:m,visitAudiences:b};})();
1
+ (()=>{var w=["source","medium","campaign","content","term"];var d=e=>String(e).trim().toLowerCase();function f(e,t,n){let i=d(e),o=d(n);return t==="is"?i===o:t==="contains"&&o!==""&&i.includes(o)}function S(e){return e.trim().toLowerCase().replace(/\s*\/\s*/g,"/").replace(/^\/+|\/+$/g,"")}var O={gte:(e,t)=>e>=t,greater_than_or_equal:(e,t)=>e>=t,">=":(e,t)=>e>=t,lte:(e,t)=>e<=t,less_than_or_equal:(e,t)=>e<=t,"<=":(e,t)=>e<=t,eq:(e,t)=>e===t,equals:(e,t)=>e===t,"=":(e,t)=>e===t},p=e=>typeof e=="string",u=(e,t)=>p(t)&&f(e,"is",t),x={eq:u,equals:u,"=":u,neq:(e,t)=>p(t)&&!u(e,t),in:(e,t)=>Array.isArray(t)&&t.some(n=>u(e,n)),contains:(e,t)=>p(t)&&f(e,"contains",t)},g={in:(e,t)=>t.some(n=>e.includes(n)),not_in:(e,t)=>!t.some(n=>e.includes(n)),all:(e,t)=>t.every(n=>e.includes(n))},G=new Set([...Object.keys(O),...Object.keys(x),...Object.keys(g),"between"]);function m(e,t){let n=S(t);return n?e.filter(i=>i===n||i.startsWith(`${n}/`)).length:0}function A(e,t){return e.length===0?0:m(e,t)/e.length}var j={categoryViews:(e,t)=>m(e.recentCategories,t),categoryShare:(e,t)=>A(e.recentCategories,t),browseViews:(e,t)=>m(e.recentBrowse,t),browseShare:(e,t)=>A(e.recentBrowse,t)};function I(e,t){let n=e.indexOf(".");if(n>0){let o=e.slice(0,n),s=e.slice(n+1);if(o==="campaign"){let r=w.includes(s)?t.campaign?.[s]:null;return typeof r=="string"?r:null}if(o==="answer"){let{answers:r}=t;return!r||typeof r!="object"?null:Object.hasOwn(r,s)&&Array.isArray(r[s])?r[s]:[]}let c=j[o];return c&&s?c(t,s):null}let i=t[e];return typeof i=="number"?i:null}function v(e,t){let n=I(e.field,t);if(n===null)return!1;if(Array.isArray(n))return Array.isArray(e.value)&&e.value.length>0&&Object.hasOwn(g,e.operator)&&g[e.operator](n,e.value);if(typeof n=="string"){let o=x[e.operator];return o?o(n,e.value):!1}if(e.operator==="between")return typeof e.value=="number"&&typeof e.value2=="number"&&n>=e.value&&n<=e.value2;let i=O[e.operator];return!i||typeof e.value!="number"?!1:i(n,e.value)}function y(e,t){let n=e.rules??[];if(n.length===0)return!1;let i=new Map;for(let c of n){let r=c.group??0,a=i.get(r);a?a.push(c):i.set(r,[c])}let o=e.groupOperators??[],s=[];for(let[c,r]of i)s.push(o[c]==="OR"?r.some(a=>v(a,t)):r.every(a=>v(a,t)));return e.groupJoin==="OR"?s.some(Boolean):s.every(Boolean)}function _(e,t){return e.early===!0&&Array.isArray(e.answer_rules)&&typeof t?.answers=="object"&&y({...e,rules:[...e.rules??[],...e.answer_rules]},t)}function b(e,t){if(!Array.isArray(t))return e;let n=new Set(t),i=e.recentBrowseCategories??[],o=(e.recentBrowse??[]).filter((c,r)=>n.has(i[r])),s=Object.entries(e.listViewsByCategory??{}).reduce((c,[r,a])=>n.has(r)?c+a:c,0);return{...e,recentBrowse:o,listViews:s}}var N=100,T=128,q=e=>typeof e=="string"&&e!==""&&e.length<=T,l=new WeakMap;function h(e){if(!l.has(e)){let t=e.datafile().then(n=>n.status===200?n.body:null).catch(()=>null);l.set(e,t),t.then(n=>{!n&&l.get(e)===t&&l.delete(e)})}return l.get(e)}async function E(e,t,n=[],i=[]){let o=await h(e),s=t?.(),c=Array.isArray(o?.session_audiences)?o.session_audiences:[],r=o&&s?M(o,s):[],a=R([...r,...i],n,c),C=o&&s?M(o,s,_):[];return{claims:a,answered:R(C,n,c)}}function R(e,t,n){let i=new Map(n.map(r=>[r?.slug,Array.isArray(r?.requires)?r.requires:[]])),o=new Set,s=r=>{if(!o.has(r)){o.add(r);for(let a of i.get(r)??[])s(a)}};for(let r of t)s(r);let c=[...new Set(e.filter(q))];return[...c.filter(r=>o.has(r)),...c.filter(r=>!o.has(r))].slice(0,N)}function M(e,t,n=y){let i=Array.isArray(e?.session_audiences)?e.session_audiences:[],o=b(t,e.browse_categories??null);return i.filter(s=>q(s?.slug)&&n(s,o)).map(s=>s.slug)}window[Symbol.for("@thg-agentic/hyper-personalisation-web.onsite.audiences")]={prefetch:h,visitAudiences:E};})();