@thg-agentic/hyper-personalisation-web 3.27.0 → 3.28.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
@@ -48,7 +48,7 @@ collects, is a settings change and never a deploy:
48
48
  | `propertyId` | `context.source.property_id`: the source's default property. A `propertyId` the page passes wins over it (since 3.20); a key scoped to several properties with no default needs one. |
49
49
  | `environment` | `context.source.environment`. |
50
50
  | `consent.purposes` | The purposes the property asks for. Only those are reported; the rest read as unanswered. Strict is the only mode. |
51
- | `queryParamAllowlist` | Query parameters kept on page URLs (plus campaign parameters). |
51
+ | `queryParamAllowlist` | Query parameters kept on page URLs (plus campaign parameters). The ingest gateway applies the same list to every URL that arrives, so an older SDK cannot store more. |
52
52
  | `anonymousId` | Where device ids come from, chosen per source in the console (since 3.6): `{ source: 'site_cookie', cookie }` or `{ source: 'hp_cookie' }`. See [Device ids](#device-ids). |
53
53
  | `apiHost` | Where events go when the page set no `apiHost` (an `https://` host only). A page's own `apiHost` is a proxy and carries events too (since 3.20). |
54
54
  | `plan.track` | Segment's tracking plan: an event with `enabled: false` is dropped at the source. The console's blocked events arrive here. |
@@ -515,8 +515,9 @@ separate chunk and starts it; otherwise it is never fetched. A page on `createAn
515
515
  itself: `import { startOnsite } from '@thg-agentic/hyper-personalisation-web/onsite'` then
516
516
  `startOnsite(client, options)`. On the CDN, `hp.min.js` loads `onsite.min.js` (and that loads
517
517
  `onsite-render.min.js` once a trigger fires, `onsite-wheel.min.js` for a wheel,
518
- `onsite-answers.min.js` for a date or number question, `onsite-audiences.min.js` for a form limited
519
- to audiences) from beside itself; a self-hosted copy keeps all five beside `hp.min.js`. The runtime watches triggers, caps and consent and asks for the
518
+ `onsite-answers.min.js` for a date or number question, `onsite-products.min.js` for a products
519
+ block, `onsite-audiences.min.js` for a form limited to audiences) from beside itself; a self-hosted
520
+ copy keeps all six beside `hp.min.js`. The runtime watches triggers, caps and consent and asks for the
520
521
  decision; the renderer and its stylesheet are fetched only when a trigger fires, alongside the
521
522
  decision request, so a page whose forms never fire never downloads them. If the renderer cannot
522
523
  load, the form is not shown (`hp.onsite.debug()` says `the renderer did not load`) and the page goes
@@ -685,10 +686,21 @@ session, the gap between popups, a teaser's tab, the A/B version), then reload;
685
686
  each form did or did not show, and a preview link (`?hp_preview=`) counts nothing.
686
687
 
687
688
  **Budgets**, enforced by `tests/onsite-chunks.test.mjs`, each about 5% over its chunk:
688
- `onsite.min.js` under 5.875 KiB gzipped (about 5.6 KiB), `onsite-render.min.js` under 14 KiB (about
689
- 13.7 KiB), so a page that shows a form loads about 19 KiB of onsite code and one whose forms never
690
- fire about 5.6 KiB; `onsite-wheel.min.js` under 8 KiB (about 1.3 KiB), `onsite-answers.min.js` under
691
- 2 KiB (about 1.5 KiB), `onsite-audiences.min.js` under 1.44 KiB (about 1.36 KiB). The core carries only the loader.
689
+ `onsite.min.js` under 6.75 KiB gzipped (about 6.6 KiB), `onsite-render.min.js` under 15.75 KiB
690
+ (about 15.7 KiB), so a page that shows a form loads about 22.3 KiB of onsite code and one whose
691
+ forms never fire about 6.6 KiB; `onsite-wheel.min.js` under 8 KiB (about 1.8 KiB),
692
+ `onsite-answers.min.js` under 2 KiB (about 1.5 KiB), `onsite-products.min.js` under 2.6 KiB (about
693
+ 2.5 KiB), `onsite-audiences.min.js` under 1.44 KiB (about 1.4 KiB). The core carries only the loader.
694
+
695
+ **Products in a form.** A creative's `products` block (ADR 0064 as amended 2026-11-02) is filled by
696
+ the public API in the decision that serves the form, as the block's `served`. For a form whose
697
+ settings carry `visit_context: true`, and only for it, the decision request carries `visit_context`:
698
+ `page_type`, the page's `product_id` (the last `Product Viewed` on the page) and, with
699
+ personalisation consent, up to 20 `basket` product ids (the last `Cart Updated` or `Cart Viewed`
700
+ lines, moved by `Product Added` and `Product Removed`) and 20 `viewed`. The cards are reported as a
701
+ rail's: `Recommendations Viewed` once they meet the viewability standard, `Product Clicked` with the
702
+ block's `recommendation_request_id`, and the form's `Slot Engaged` (`click`, with the product and its
703
+ position). A form whose `channels` is empty collects nothing and never calls capture.
692
704
 
693
705
  Try it locally: `node tools/local/serve.mjs`, then
694
706
  `http://localhost:8099/onsite.html?hp_debug=onsite` (offline mocks by default, `?mode=live` for
package/dist/hp.min.js CHANGED
@@ -1,3 +1,3 @@
1
- (()=>{var yn=e=>{throw TypeError(e)};var co=(e,t,n)=>t.has(e)||yn("Cannot "+n);var wn=(e,t,n)=>t.has(e)?yn("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,n);var L=(e,t,n)=>(co(e,t,"access private method"),n);var Ae=[];for(let e=2;Ae.length<64;e++)Ae.every(t=>e%t!==0)&&Ae.push(e);var Sn=e=>(e-Math.floor(e))*2**32>>>0,uo=Ae.slice(0,8).map(e=>Sn(Math.sqrt(e))),lo=Ae.map(e=>Sn(Math.cbrt(e))),Z=(e,t)=>e>>>t|e<<32-t;function _n(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(uo),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 x=o[w-15],_=o[w-2],k=Z(x,7)^Z(x,18)^x>>>3,h=Z(_,17)^Z(_,19)^_>>>10;o[w]=o[w-16]+k+o[w-7]+h}let[i,u,c,l,f,p,m,A]=r;for(let w=0;w<64;w++){let x=Z(f,6)^Z(f,11)^Z(f,25),_=A+x+(f&p^~f&m)+lo[w]+o[w]|0,h=(Z(i,2)^Z(i,13)^Z(i,22))+(i&u^i&c^u&c)|0;[A,m,p,f,l,c,u,i]=[m,p,f,l+_|0,c,u,i,_+h|0]}[i,u,c,l,f,p,m,A].forEach((w,x)=>{r[x]+=w})}return Array.from(r,s=>s.toString(16).padStart(8,"0")).join("")}var It=(e,t)=>e<<t|e>>>32-t;function bn(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 fo="e28e8ada-5b76-4209-bba9-79b823a0af75",po=e=>Array.from(e,t=>t.toString(16).padStart(2,"0")).join("");function In(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=bn(o).slice(0,16);s[6]=s[6]&15|80,s[8]=s[8]&63|128;let i=po(s);return`${i.slice(0,8)}-${i.slice(8,12)}-${i.slice(12,16)}-${i.slice(16,20)}-${i.slice(20)}`}var ce=(e,t)=>typeof e=="string"&&e!==""&&e.length<=t?e:null;function Be(e,t){return ce(e,64)??ce(t,256)}function xn({sessionId:e,slot:t,arm:n}={}){let r=ce(e,256);return!r||!ce(t,256)||!ce(n,256)?null:In(fo,`${r}:${t}:${n}`)}var mo="4b1f2c7e-9a3d-4e58-b6c1-2d7f0a9e8c53";function kn({sessionId:e,surface:t}={}){let n=ce(e,256);return!n||!ce(t,64)?null:In(mo,`${n}:${t}`)}var ho=Array.from({length:11},(e,t)=>t/10);function go(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 te(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(!go(E,r)){c.delete(S),f(S);continue}c.add(S),m()&&l(S)}},{threshold:ho}),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))},x=typeof MutationObserver>"u"?null:new MutationObserver(()=>w()),_=()=>{w(),x?.observe(s===document?document.body:s,{childList:!0,subtree:!0})},k=s===document&&!document.body;return k?document.addEventListener("DOMContentLoaded",_,{once:!0}):_(),()=>{k&&document.removeEventListener("DOMContentLoaded",_),document.removeEventListener("visibilitychange",A),p?.disconnect(),x?.disconnect();for(let h of i.values())clearTimeout(h);i.clear(),c.clear()}}function xt(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 te({selector:n,root:s,visibleRatio:r,dwellMs:o,onViewable(i){let u=i.dataset?.hpExposure?.trim();return u&&e.surfaceViewed({surface:u}),!0}})}var An=e=>{try{return new URL(e,document.baseURI).toString()}catch{return e}};function kt(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 x=w.dataset.hpList?.trim();return x?{list_id:x,category:w.dataset.hpListCategory?.trim()||null}:null},f=w=>Array.from(w.querySelectorAll(r)).filter(x=>c(x)===w),p=(w,x)=>{try{let _=JSON.parse(w.dataset.hpProduct??"");return!_||typeof _!="object"||!_.product_id?null:{..._,position:_.position??x+1,..._.url?{url:An(_.url)}:{},..._.image_url?{image_url:An(_.image_url)}:{}}}catch{return null}},m=te({selector:`${n} ${r}`,root:i,visibleRatio:o,dwellMs:s,onViewable(w){let x=c(w);if(!x||x.dataset.hpListView==="manual")return!0;let _=l(x);if(!_||u.has(_.list_id))return!0;let k=new Set,h=f(x).map(p).filter(E=>!E||k.has(E.product_id)?!1:(k.add(E.product_id),!0));return h.length===0||(u.add(_.list_id),e.productListViewed({..._,products:h})),!0}}),A=w=>{let _=w.target?.closest?.("a[href]")?.closest(r);if(!_)return;let k=c(_),h=p(_,k?f(k).indexOf(_):0);h&&e.productClicked({list_id:k?l(k)?.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 je(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 yo(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=yo,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=te({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 x=c(A);x&&e.promotionClicked({...x,href:w.getAttribute("href")})};return document.addEventListener("click",f,!0),()=>{document.removeEventListener("click",f,!0),l()}}function wo(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:je(e,"hpRecoBucket"),assignment_unit_kind:D(e,"hpRecoUnitKind"),candidate_set_fingerprint:D(e,"hpRecoFingerprint"),candidate_set_size:je(e,"hpRecoCandidates"),ranked_by:D(e,"hpRecoRankedBy"),served_at:D(e,"hpRecoServedAt")}}function So(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:je(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=wo,resolveTile:s=So,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)),x=(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})},_=te({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(()=>x(E,S),0)),!0}}),k=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 K=U.recommendation_request_id;l.has(K)||(clearTimeout(p.get(K)),x(N,U)),e.productClicked({recommendation_request_id:U.recommendation_request_id,interaction:D(g??S,"hpRecoInteraction")??"navigate",products:[G]})};return document.addEventListener("click",k,!0),()=>{document.removeEventListener("click",k,!0);for(let h of p.values())clearTimeout(h);p.clear(),_()}}var Se=new Set(["home","list","product","search","basket","checkout","order_confirmation","login","register","account","info","blog","other"]),_o=new Set(["products"]),vn=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])=>!vn(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 _o)n in e&&vn(e[n])&&(t[n]=e[n]);return t}function En(){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 bo=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 bo.has(t.toLowerCase())?null:t}var ve=e=>typeof e=="string"&&e!==""?e:null;function ne(){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 Cn="1.20";function V(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 Io={gclid:"gclid",fbclid:"fbclid",ttclid:"ttclid"},xo=/[a-z0-9._%+-]+@[a-z0-9-]+(\.[a-z0-9-]+)*\.[a-z]{2,}/i,ko=/\d(?:[ -]?\d){12,}/,Ao=new Set(["gclid","fbclid","ttclid","msclkid"]);function Pn(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=!Ao.has(String(t).toLowerCase());return n.some(o=>xo.test(o)||r&&ko.test(o))}function Pt(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(Io)]){let i=t.get(o);i&&!Pn(i,o)&&(n[s]=i)}return Object.keys(n).length?n:null}var vo=["email","e-mail","password","pass","pwd","token","auth","code","uid","customer_id","postcode","zip","phone","applyCode"],Eo=["email","password","passwd","pwd","token","secret","auth","session","phone","postcode","zip","address","birth","card","cvv","iban","ssn","customerid","userid"],Co=["tel","uid","dob"],Oo=["utm_source","utm_medium","utm_campaign","utm_term","utm_content","gclid","fbclid","ttclid","msclkid"],Po=new Set(vo.map(e=>e.toLowerCase()));function Lo(e){let t=String(e).toLowerCase();if(Po.has(t))return!0;let n=t.replace(/[-_.]/g,"");return Eo.some(o=>n.includes(o))?!0:String(e).replace(/([a-z0-9])([A-Z])/g,"$1 $2").toLowerCase().split(/[^a-z0-9]+/).some(o=>Co.includes(o))}function Ot(e){return(e??[]).map(t=>{try{return new RegExp(`^${t}$`,"i")}catch{return{test:n=>n.toLowerCase()===String(t).toLowerCase()}}})}function Ln(e,t={}){if(!e)return null;try{let n=new URLSearchParams(e),r=t.queryParamAllowlist?Ot([...t.queryParamAllowlist,...Oo]):null,o=Ot(t.queryParamBlocklist),s=Ot(t.sensitiveParamAllowlist);for(let u of new Set(n.keys()))(Lo(u)&&!s.some(l=>l.test(u))||n.getAll(u).some(l=>Pn(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 Tn(e,t,n={}){if(!e)return null;try{let r=new URL(e);return t&&r.origin===t?r.origin+r.pathname+(Ln(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:Tn(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 On(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 To(e){return{...e.propertyId==null?{}:{property_id:String(e.propertyId)},channel:e.channel??null,market:e.market??null,environment:e.environment??null}}function No(e){let t=typeof window<"u"?window.location:null,n=t?Ln(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"?Tn(document.referrer,t?.origin,e):null,title:typeof document<"u"&&document.title||null,type:e.pageType??null}}var Ee;function Ro(){if(Ee!==void 0)return Ee;try{Ee=globalThis.Temporal?.Now?.timeZoneId?.()||Intl.DateTimeFormat().resolvedOptions().timeZone||null}catch{Ee=null}return Ee}function Nn(e,t={}){let n=typeof window<"u"?window.location:null,r={library:{name:e.libraryName,version:e.libraryVersion},spec:{version:Cn},source:To(e),session_id:M(e.getSessionId,null),identity_trust:F(M(e.getAnonymousId,null))?"device":"none",page:No(e),campaign:n?Pt(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:Ro(),country:On(e.country),ship_to_country:On(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 Rn(r,t)}function Rn(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]=Rn(e[r],o):o!==void 0&&(n[r]=o);return n}var de=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"}),Mo={retry:"cdp.retry",sessionSignals:"cdp_session_signals",identified:"cdp_identified",previousPage:"cdp_prev_page_message_id"},Rt={...de},Mn=!1;function He(e){let t={...de};for(let[n,r]of Object.entries(e??{})){if(!(n in de))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 C(e){return Rt[e]}var Do="_",Dn=e=>e==null||e===""?Do:String(e);function $(e,t,n){let r=`${e}:${Dn(t)}`;return n==null||n===""?r:`${r}:${n}`}function Un(e,t){return`${e}:${Dn(t)}:`}function Fe(){if(!Mn){Mn=!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(Mo)){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,qe=()=>{try{return typeof sessionStorage>"u"?null:sessionStorage}catch{return null}},Mt=()=>{try{return typeof localStorage>"u"?null:localStorage}catch{return null}};function Vn(e,t=()=>Date.now()){return{read(){try{let n=qe()?.getItem(e),r=n?JSON.parse(n):null;return!r||t()-r.savedAt>Dt?(r&&qe()?.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?qe()?.removeItem(e):qe()?.setItem(e,JSON.stringify({savedAt:t(),items:n,anonymousId:r}))}catch{}}}}var Uo=400*24*60*60;function re(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 Vo({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=re(e,c,Uo,t),!(!l||u===null)))try{Mt()?.removeItem(n),u=null}catch{}};return{get(){return c??(c=o()),f(),c},peek:()=>c,persist:f,forget(){re(e,"",0,t),c=null,l=!1;try{Mt()?.removeItem(n)}catch{}u=null}}}function $n(e,{carried:t=null,mayStore:n,orOwn:r=!1}){let o=e.anonymousIdSource,s=()=>Vo({name:C("anonymousId"),domain:e.consentCookieDomain??null,legacyKey:$(C("anonymousId"),e.propertyId),read:V,mint:ne,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=()=>V(c)}if(!r)return null;let i=e.getAnonymousId,u=s();return e.getAnonymousId=()=>F(M(i,null))??u.get(),u}var $o=200;function Bn(e,t,n=()=>Date.now()){let r=()=>$(C("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(-$o)})),!0)}catch{return!1}},close(){o=!0}}}var fa=de.consent,Ke=Object.freeze({visitor:"visitor",host:"host"}),jn=()=>({basis:Ke.host}),Bo="hp-consent",fe=["analytics","marketing","personalisation","ad_user_data","ad_personalization"],Hn={analytics:"a",marketing:"m",personalisation:"p",ad_user_data:"aud",ad_personalization:"adp"},ee=()=>typeof window<"u",Fn=()=>ee()&&typeof window.cookieStore?.addEventListener=="function",jo=e=>e===!0?!0:e===!1?!1:null;function _e(e){if(!e||typeof e!="object")return null;let t={};for(let n of fe)t[n]=jo(e[n]);return t}function Vt(e,t){return!e||!t?e===t:fe.every(n=>e[n]===t[n])}function $t(e){if(!e)return"";let t=[];for(let n of fe){let r=e[n];(r===!0||r===!1)&&t.push(`${Hn[n]}=${r?1:0}`)}return t.join("&")}function Bt(e){return{[Bo]:$t(_e(e))}}function Ce(e){let t=_e({});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(Hn).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 jt(e,t){if(!t)return e;let n=r=>{if(!r)return r;let o={...r};for(let s of fe)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 Ht(e,t={}){return{...e,ad_user_data:t.ad_user_data??e.marketing,ad_personalization:t.ad_personalization??e.marketing}}function Ge(e,t){let n=!0;return{notify:()=>{if(n)try{let o=e();o&&t(o)}catch{}},stop:()=>n=!1}}var Ho={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 Fo(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 qn(e={}){let t={...Ho,...e.purposes};function n(){let r=ee()?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=>Fo(o,t[i]);return Ht({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(!ee())return()=>{};let o=Ge(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 Ut(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 Kn(e={}){let t={analytics:"C0002",personalisation:"C0003",marketing:"C0004",...e.groups},n=e.impliedConsent===!0;function r(){let i=Ut(V("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=ee()?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(V("OptanonAlertBoxClosed"))return!0;try{if(ee()&&window.OneTrust?.IsAlertBoxClosed?.()===!0)return!0}catch{}return Number.parseInt(Ut(V("OptanonConsent")).interactionCount,10)>0?!0:n&&ee()&&(!!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=Ht({analytics:u("analytics"),marketing:u("marketing"),personalisation:u("personalisation")},{ad_user_data:u("ad_user_data"),ad_personalization:u("ad_personalization")}),l=Ut(V("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(!ee())return()=>{};let u=Ge(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 qo(e){let t=String(e).split(",").map(n=>n.trim()).filter(Boolean);return t.length?new Set(t):null}function Gn(e){let{name:t,categories:n,parse:r=qo,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=V(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 Ht({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 Fn()},subscribe(c){if(!ee())return()=>{};let l=Ge(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 zn(e={}){let t=e.name??C("consent"),n=()=>{let r=V(t);if(r==null)return null;let o=Ce(r);return o.analytics==null?null:o};return{name:"forwarded",read:n,get observesChanges(){return Fn()},subscribe(r){if(!ee())return()=>{};let o=Ge(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 Wn(e){let t=_e(e);return{name:"static",basis:Ke.host,read:()=>t?{...t}:null,observesChanges:!0,subscribe:()=>()=>{}}}function Jn(e){if(e==null)return null;let t=String(e).split("/").map(n=>n.trim()).filter(Boolean).join("/");return t===""?null:t}function Ko(e){let t=e.item_category;if(t!=null&&String(t).includes("/"))return Jn(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 Jn(n.join("/"))}var Go=e=>{if(e==null||typeof e=="object")return null;let t=String(e).trim();return t===""?null:t};function zo(...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=>zo(e.item_group_id,e.item_id);function Wo(e,t=ze){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=Go;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:Ko(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 Ft(e,t=ze){return(e??[]).map(n=>Wo(n,t)).filter(n=>n?.product_id)}var Jo=1e3,Yo={shipping:2,payment:3},Xo=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},Zo=e=>{if(e==null||e===""||typeof e=="object")return null;let t=Number(e);return Number.isFinite(t)&&t>=0?t:null},We=e=>e!==null&&typeof e=="object";function Qo(e){return Array.isArray(e.items)?e.items.filter(We):null}function Yn(e){let t=H(e)?.toLowerCase().replace(/[\s-]+/g,"_");return t?Xo.has(t)?t:t==="email"||t==="email_password"?"password":"other":null}function es({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 Xn=({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),pe=(e,t)=>t.products?.length?{event:e,properties:t}:null,ts=new Set(["product","products","item","items"]);function ns({ecommerce:e}){let t=H(e.item_id),n=H(e.content_type)?.toLowerCase();return!t||n&&!ts.has(n)?null:{event:"Product Shared",properties:{share_via:H(e.method),products:[{product_id:t}]}}}function rs(e){let t=o=>pe("Product List Viewed",{list_id:Xn(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=>pe("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=>pe("Product Clicked",{list_id:Xn(o),products:o.products.slice(0,1)}),add_to_cart:o=>pe("Product Added",{cart_id:H(o.ecommerce.cart_id),products:o.products}),remove_from_cart:o=>pe("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=>pe("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=>pe("Product Added to Wishlist",{products:o.products}),share:ns,login:o=>({event:"Signed In",properties:{method:Yn(o.ecommerce.method)}}),sign_up:o=>({event:"Signed Up",properties:{method:Yn(o.ecommerce.method)}})}}var os=e=>e.event;function ss(e,t){if(!We(e))return null;if(typeof e.length=="number"&&e[0]==="event"&&typeof e[1]=="string"){let r=We(e[2])?e[2]:{};return{name:e[1],entry:r,ecommerce:r}}let n=H(t(e));return n?{name:n,entry:e,ecommerce:We(e.ecommerce)?e.ecommerce:e}:null}function qt(e){return Array.isArray(e)?`[${e.map(qt).join(",")}]`:e&&typeof e=="object"?`{${Object.keys(e).sort().map(t=>`${JSON.stringify(t)}:${qt(e[t])}`).join(",")}}`:JSON.stringify(e??null)}function Zn(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=rs({...Yo,...t.steps}),o=t.map??{},s=t.eventName??os,i=t.productId??ze,u=new Set(["purchase","refund",...t.ignore??[]]),c=t.dedupeMs??Jo,l=new Map,f=!0;function p(S,g,y){if(c<=0)return!1;let O=`${S}|${y??""}|${qt(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 x({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 _(S){let g=t.transform?t.transform(S):S,y=ss(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=Qo(y.ecommerce),G=U??[],K={...y,items:G,itemsListed:U!==null,products:Ft(G,i),currency:Tt(y.ecommerce.currency),value:Zo(y.ecommerce.value)};K.promotions=es(K);let ie=O?N(g,{...K,toProducts:J=>Ft(J,i)}):N(K);for(let J of[ie].flat())J&&x(J,K.currency)}function k(S){if(f)try{_(S)}catch(g){try{t.onError?.(g,S)}catch{}}}for(let S of n.slice())k(S);let h=n.push;function E(...S){let g=h.apply(this,S);for(let y of S)k(y);return g}return n.push=E,()=>{f=!1,n.push===E&&(n.push=h)}}var is="hp_debug",as=256;function cs(){try{return new URLSearchParams(location.search).get(is)}catch{return null}}function Qn(e,t){if(typeof location>"u")return!1;try{let n=cs();if(n!==null){let o=n.trim();o===""||o.length>as?sessionStorage.removeItem(t):sessionStorage.setItem(t,o)}let r=sessionStorage.getItem(t);return!!(e&&r&&_n(r)===e)}catch{return!1}}var be=class extends Error{},us={inHoldout:()=>!0,personalisationGroup:()=>"excluded",servingHeaders:()=>({}),recommendationContext:()=>({}),flush:()=>Promise.resolve(),reset:()=>{}};function Kt(e,t){let n=us[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 be)throw i;return r(i)}}}function er(e){for(let t of Reflect.ownKeys(e)){let{value:n}=Object.getOwnPropertyDescriptor(e,t)??{};typeof n=="function"&&(e[t]=Kt(t,n))}return e}var Oe=Symbol("hp.identityOption");var ls=4320*60*60,ds=100,fs=1e3,ps=2e3,tr=500,Je=e=>(e?.unref?.(),e);function ms(e,t){if(t?.analytics===!0&&e.analytics===!1)return"withdrawn";let n=fe.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 hs(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}=${$t(e)}; Path=/; Max-Age=${ls}; SameSite=Lax`+o+r}catch{}}function gs(e){let t=Ce(V(e));return fe.some(n=>t[n]!==null)?t:null}function nr(e){let{adapter:t,timeoutMs:n=5e3,cookieDomain:r=null,cookieName:o=C("consent"),release:s,announce:i}=e,u=e.discard??(()=>{}),c="pending",l=null,f=null,p=null,m=null,A=!1,w=null,x=[],_=R=>{c=R,e.onStatus?.(R)};function k(){try{return _e(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=Je(setInterval(()=>K(k()),ps)))}let O=()=>c==="pending"||c==="unknown",N=e.store??null,U=()=>{let R=x.splice(0);N?.write([]);for(let j of R)s(j)},G=()=>{let R=x.splice(0);N?.write([]);for(let j of R)u(j)};function K(R){let j=_e(R);if(!j||j.analytics===null)return;let we=l===null,X=we?gs(o):l;if(!we&&Vt(X,j))return;h(),l=j,y(),hs(j,r,o);let wt=!Vt(X,j);if(j.analytics){_("granted"),U(),wt&&i({action:ms(j,X),state:j,previous:X,withdrawal:!1});return}G(),X?.analytics===!0&&i({action:"withdrawn",state:j,previous:X,withdrawal:!0}),_("denied")}function ie(){p=null,c==="pending"&&(_("unknown"),f&&clearInterval(f),f=Je(setInterval(()=>K(k()),fs)))}function J(R){if(O()){if(N){N.write(x);return}R?.type!=="visibilitychange"&&!R?.persisted&&G()}}let Ue=R=>{document.visibilityState==="hidden"?(g(),J(R)):y()},ae=R=>{g(),J(R)},Ve=R=>{R?.persisted&&l!==null&&K(k()),y()};return{get status(){return c},get state(){return l?{...l}:null},stamp(){return l?{...l,source:t.name??null,basis:t.basis??Ke.visitor}:null},admits(){return c==="granted"},hold(R){return!O()||x.length>=tr?(u(R),!1):(x.push(R),!0)},onHidden:J,start(){A=!1;try{w=t.subscribe?.(R=>K(R))??null}catch(R){e.debug&&console.warn("[hp] consent adapter subscribe failed",R)}E()&&(window.addEventListener("pagehide",ae),window.addEventListener("pageshow",Ve),document.addEventListener("visibilitychange",Ue)),N&&x.length===0&&x.push(...N.read().slice(-tr)),K(k()),!l&&(f=Je(setInterval(()=>K(k()),ds)),p=Je(setTimeout(ie,n)))},stop(){A=!0,h(),g(),typeof w=="function"&&w(),E()&&(window.removeEventListener("pagehide",ae),window.removeEventListener("pageshow",Ve),document.removeEventListener("visibilitychange",Ue))}}}var ys=["recommendation","search_rank","banner","offer","layout","copy","price","other"],Ye=e=>typeof e=="string"&&e!=="";function rr(e){return(Array.isArray(e?.decisions)?e.decisions:[]).filter(t=>Ye(t?.slot)&&Ye(t.decision_id)&&t.holdout!==!0).map(({decision_id:t,slot:n,arm:r,kind:o})=>({decision_id:t,slot:n,...Ye(r)&&{arm:r},...ys.includes(o)&&{kind:o}}))}function or({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=>Ye(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 ws(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 Xe(e,t,n=1e4){return ws(`${t}\0${e}`)%n}function Gt(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 zt(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}=Gt(e),s=Xe(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 sr(e,t){return typeof e!="string"||e===""||t==null||t===""?null:Xe(t,`bandit-vs-default:${e}`)<1e4/2?"default":"bandit"}var Ss="hp_preview",_s=256;function ir(e,t=null){if(typeof location>"u")return V(e);let n=null;try{n=new URLSearchParams(location.search).get(Ss)}catch{n=null}if(n===null)return V(e);let r=n.trim();return r===""||r.length>_s?(re(e,"",0,t),null):(re(e,r,null,t),r)}var bs=40,Is=128,xs=5,ks=60,cr=e=>typeof e=="string"&&e!==""&&e.length<=Is&&!e.includes(","),ar=e=>Array.isArray(e)?e.filter(cr).slice(0,bs):[],As=e=>Array.isArray(e)?e.filter(t=>typeof t=="string").map(t=>t.replaceAll(","," ").trim()).filter(t=>t!=="").slice(0,xs):[],vs=e=>Object.entries(e&&typeof e=="object"?e:{}).filter(([t,n])=>cr(t)&&Number.isFinite(n)&&n>=1).sort(([,t],[,n])=>n-t).slice(0,ks).map(([t,n])=>`${t}:${Math.floor(n)}`);function Wt(e){let t={},n={viewed:ar(e?.recentProducts),basket:ar(e?.basketProducts),q:As(e?.recentSearches),impressed:vs(e?.impressions)};for(let[r,o]of Object.entries(n))o.length>0&&(t[r]=o.join(","));return t}var Es=1800*1e3;function ur(e,t=Date.now()){try{localStorage.setItem(C("recommendationContext"),JSON.stringify({context:e,until:t+Es}))}catch{}}function lr(){try{localStorage.removeItem(C("recommendationContext"))}catch{}}var Cs="hp_sample",dr=1e4;function fr(e,t){return!(typeof t=="number"&&t<1)||e==null||e===""?!0:Xe(e,Cs,dr)<Math.round(t*dr)}function Ie(e){return e.trim().toLowerCase().replace(/\s*\/\s*/g,"/").replace(/^\/+|\/+$/g,"")}var Os=2,Ps=12;function Pe(e,t=Os){return e.split("/").slice(0,t).join("/")}function Jt(e,t){if(typeof t!="string"||!t.trim())return null;let n=Pe(Ie(t));return n?(e.unshift(n),e.length=Math.min(e.length,Ps),n):null}var me=()=>C("sessionSignals"),xe=null,Yt=()=>xe??me();function pr(){try{return xe?localStorage:sessionStorage}catch{return}}function mr(e,t){let n=t==null?null:String(t),r=e?$(me(),n,e):null;if(r===xe)return;let o=xe===null?Ls():null;if(xe=r,!!xe)try{let s=Yt(),i=Un(me(),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(me()))}catch{}}function Ls(){try{let e=sessionStorage.getItem(me());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 Ze(){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 Xt(){let e=pr();if(!e)return Ze();try{let t=e.getItem(Yt());return t?{...Ze(),...JSON.parse(t)}:{...Ze(),startedAt:Date.now()}}catch{return{...Ze(),startedAt:Date.now()}}}function Qe(e){let t=pr();if(t)try{t.setItem(Yt(),JSON.stringify(e))}catch{}}function et(){return Xt()}function hr(){for(let e of[()=>sessionStorage,()=>localStorage])try{let t=e();t.removeItem(me());for(let n of Object.keys(t))n.startsWith(`${me()}:`)&&t.removeItem(n)}catch{}}var gr=20,yr=200,Ts=new Set(["Product Viewed","Product Clicked","Product Added","Product Added to Wishlist"]),Ns=new Set(["Product Viewed","Product Added"]),wr=50;function tt(e,t){let n=Jt(e.recentBrowse,t);return n?(e.recentBrowseCategories=[e.browsingListing?.category??null,...e.recentBrowseCategories].slice(0,e.recentBrowse.length),n):null}function Rs(e,t){let n=e.listViewsByCategory;n[t]=(n[t]??0)+1;let r=Object.keys(n);if(r.length>wr){let o={};for(let s of r.sort((i,u)=>n[u]-n[i]).slice(0,wr))o[s]=n[s];e.listViewsByCategory=o}}function Sr(e,t,n){let r=Xt();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,tt(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"&&Pe(Ie(l))||null,m=p?Pe(Ie(c)):"";if(!m){r.browsingCategory=null,r.browsingListing=null;break}r.browsingListing={key:m,category:p},tt(r,m),r.browsingCategory=m,Rs(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&&Pe(Ie(l))===p.key){let m=tt(r,`${l}/${f}`);m&&(r.browsingCategory=m)}break}case"Product Added":{r.cartAdds+=1,tt(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,gr))}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 Updated":{let c=t?.value;return r.basketValue=typeof c=="number"&&Number.isFinite(c)&&c>=0?c:null,Qe(r),r}default:return o&&Qe(r),r}let i=Ts.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>yr){let l={};for(let f of c.sort((p,m)=>r.impressions[m]-r.impressions[p]).slice(0,yr))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,gr)),Ns.has(e)&&typeof c.category=="string"&&c.category){let f=Ie(c.category);f&&!u.has(f)&&(u.add(f),Jt(r.recentCategories,f))}}return Qe(r),r}var nt=1800*1e3;function _r({name:e,domain:t=null,mayStore:n,now:r=()=>Date.now(),mint:o=ne}){let s=null,i=0,u=()=>{s!==null&&n()&&re(e,s,nt/1e3,t)};return{get(){let c=r(),l=V(e);return l?s=l:(s===null||c-i>=nt)&&(s=o()),i=c,u(),s},persist:u,forget(){re(e,"",0,t),s=null}}}var W=e=>e!==null&&typeof e=="object"&&!Array.isArray(e),br=e=>Array.isArray(e)&&e.every(t=>typeof t=="string"),Ir=Object.freeze({enabled:!1}),Qt=Object.freeze({enabled:!0,queryParamAllowlist:Object.freeze([])});function xr(e,t){let n=e?.track;return W(n)?(Object.hasOwn(n,t)?n[t]:n.__default)?.enabled!==!1:!0}function Ms(e,t){return`${oe(e)}/v1/projects/${encodeURIComponent(t)}/settings`}var Ds="https://hp.thgingenuity.com";function oe(e){return e==null||e===""?Ds:Ar(e)}function kr(e,t){return e!=null&&e!==""?oe(e):t?.startsWith("https://")?t:oe(void 0)}function Ar(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 Us(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,Vs=/^[0-9a-f]{64}$/;function $s(e){return W(e)?{enabled:e.enabled===!0,tokenSha256:typeof e.tokenSha256=="string"&&Vs.test(e.tokenSha256)?e.tokenSha256:null}:{enabled:!1,tokenSha256:null}}function Bs(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,...br(r.readoutSlots)&&r.readoutSlots.length>0&&{readoutSlots:r.readoutSlots}}]));return Object.keys(t).length?t:null}var js=/^[A-Za-z0-9!#$%&'*+.^_`|~-]{1,128}$/;function Hs(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"&&js.test(e.cookie)?{source:"site_cookie",cookie:e.cookie}:null:null}function Fs(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 qs(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 Ir;let n=Fs(t.onsite);return{enabled:!0,propertyId:typeof t.propertyId=="string"&&t.propertyId!==""?t.propertyId:null,environment:typeof t.environment=="string"?t.environment:null,consentPurposes:Us(t.consent?.purposes),queryParamAllowlist:br(t.queryParamAllowlist)?t.queryParamAllowlist:null,anonymousId:Hs(t.anonymousId),apiHost:Ar(t.apiHost),holdouts:Bs(t.holdouts),sampleRate:Zt(t.sampleRate)?t.sampleRate:1,debug:$s(t.debug),...n&&{onsite:n},plan:W(e.plan)&&W(e.plan.track)?{track:e.plan.track}:null}}var Ks=3e3;async function vr(e,t,n=globalThis.fetch,r=Ks){try{let o=await n(Ms(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 Ir;if(!o.ok)return null;let s=await o.json();return qs(s)?en(s):null}catch{return null}}var rt=e=>$(C("settings"),e);function Er(e){try{let t=localStorage.getItem(rt(e));if(!t)return null;let n=JSON.parse(t);return n?.enabled===!0?n:null}catch{return null}}function Cr(e,t){try{t?.enabled===!0?localStorage.setItem(rt(e),JSON.stringify(t)):localStorage.removeItem(rt(e))}catch{}}function tn(e){try{localStorage.removeItem(rt(e))}catch{}}var Gs={flushAt:20,flushIntervalMs:1e4,maxQueue:500,maxRetryAgeMs:1440*60*1e3,maxRetries:5,maxPersistedBatches:20,maxPersistedBytes:1024*1024,storageKey:de.retry,beaconSafeBytes:56*1024,maxBatchEvents:100,maxBatchBytes:500*1024},ot=()=>Date.now(),Or=3e4,cn=55*1024;function zs(e,t=ot()){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 se=e=>typeof TextEncoder<"u"?new TextEncoder().encode(e).length:Buffer.byteLength(e),nn=()=>typeof window<"u"&&typeof document<"u";function Ws(){try{return!nn()||!window.localStorage?null:(window.localStorage.getItem("thg_hp_probe"),window.localStorage)}catch{return null}}var b,rn,on,st,sn,an,Pr,Le,Te,Ne,Lr,it,Tr,at,ct=class{constructor(t){wn(this,b);this.o={...Gs,...t},this.queue=[],this.timer=null,this.storage=Ws(),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,b,at).call(this))}markFailing(){this.answered||(this.failing=!0)}replayPersisted(){return this.replayAllowed=!0,L(this,b,at).call(this)}clearPersisted(){if(this.replayAllowed=!1,!!this.storage)try{let t=L(this,b,Ne).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,b,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,b,rn).call(this)}flush(t={}){if(L(this,b,on).call(this),this.queue.length===0)return Promise.resolve();if(t.beacon&&nn()&&typeof navigator<"u"&&navigator.sendBeacon)return L(this,b,Pr).call(this),Promise.resolve();if(this.inflight)return this.inflight;let n=L(this,b,an).call(this,this.queue,this.o.maxBatchEvents,this.o.maxBatchBytes).map(o=>{let s=L(this,b,it).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,b,Te).call(this,s);continue}await L(this,b,Le).call(this,o,0,s,r)}})().finally(()=>{this.inflight=null,this.queue.length>=this.o.flushAt?this.flush():this.queue.length&&L(this,b,rn).call(this)}),this.inflight}};b=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)},st=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=se(L(this,b,st).call(this,[])),s=[],i=[],u=o;for(let c of t){let l=se(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},Pr=function(){let t=this.queue;this.queue=[];let n=L(this,b,sn).call(this);for(let r of L(this,b,an).call(this,t,this.o.maxBatchEvents,this.o.beaconSafeBytes)){let o=L(this,b,st).call(this,r);if(se(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,b,it).call(this,r):null;i&&this.sending.add(i);continue}}L(this,b,Le).call(this,r,0,L(this,b,it).call(this,r))}},Le=async function(t,n,r=null,o=this.epoch){r&&this.sending.add(r);let s=L(this,b,st).call(this,t),i=0;try{let u=await fetch(L(this,b,sn).call(this),{method:"POST",headers:{"Content-Type":"text/plain"},body:s,keepalive:se(s)<=this.o.beaconSafeBytes});if(u.ok)return this.failing=!1,this.answered=!0,L(this,b,Te).call(this,r),L(this,b,at).call(this),!0;let c=u.status===408||u.status===429||u.status>=500;if(c&&(i=zs(u.headers?.get?.("retry-after"))),!c)return L(this,b,Te).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,Or)*(.5+Math.random()),Math.min(i,Or));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,b,Te).call(this,r),!1):L(this,b,Le).call(this,t,n+1,r,o)}},Te=function(t){t&&(this.sending.delete(t),this.sinceRefusal.delete(t),L(this,b,Tr).call(this,t))},Ne=function(){let t=JSON.parse(this.storage.getItem(this.o.storageKey)||"[]");return Array.isArray(t)?t:[]},Lr=function(t,n){let r=i=>se(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},it=function(t){if(!this.storage||this.o.mayPersist&&!this.o.mayPersist())return null;try{let n={at:ot(),id:`${ot()}-${Math.random().toString(36).slice(2)}`,batch:t};return se(JSON.stringify(n))+3>this.o.maxPersistedBytes?null:L(this,b,Lr).call(this,L(this,b,Ne).call(this),n)?n.id:null}catch{return null}},Tr=function(t){if(!(!t||!this.storage))try{let n=L(this,b,Ne).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{}},at=function(){if(!this.storage||!this.replayAllowed)return this.draining??Promise.resolve();if(this.draining)return this.draining;let t;try{let r=L(this,b,Ne).call(this);t=r.filter(o=>Array.isArray(o?.batch)&&ot()-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,b,Le).call(this,r.batch,0,r.id))return})().finally(()=>{this.draining=null}),this.draining):Promise.resolve()};var Nr="3.27.0",Rr="@thg-agentic/hyper-personalisation-web";var Js=100,Ys=["source","medium","campaign","content","term"];function Dr(e){if(!e||typeof e!="object")return null;let t={};for(let n of Ys){let r=e[n==="campaign"?"name":n];typeof r=="string"&&r&&(t[n]=r.slice(0,Js))}return Object.keys(t).length?t:null}var Ur=e=>$(C("visitCampaign"),e==null?null:String(e)),ke=new Map;function Vr(e){if(ke.has(e))return ke.get(e);try{let t=JSON.parse(localStorage.getItem(e));return t&&typeof t=="object"?t:null}catch{return null}}function Mr(e,t){try{t?localStorage.setItem(e,JSON.stringify(t)):localStorage.removeItem(e),ke.delete(e)}catch{t?ke.set(e,t):ke.delete(e)}}function $r(e,t,n){return typeof e?.tags=="object"&&e.tags!==null&&Number.isFinite(e.at)&&n-e.at<nt&&!(t&&e.sid&&e.sid!==t)?e:null}function ut(e,{sessionId:t=null,now:n=Date.now()}={}){return $r(Vr(Ur(e)),t,n)?.tags??null}function Br(e,t,{sessionId:n=null,keepSession:r=!1,now:o=Date.now()}={}){let s=Ur(e),i=Vr(s),u=$r(i,n,o),c=u?.tags??t??null;return c?Mr(s,{tags:c,at:o,sid:(r?n:null)??u?.sid??null}):i&&Mr(s,null),c}function un(){ke.clear();try{let e=`${C("visitCampaign")}:`;for(let t of Object.keys(localStorage))t.startsWith(e)&&localStorage.removeItem(t)}catch{}}var Xs=new Set(["audiences","decisions","recommendations"]);var Zs=Symbol.for("@thg-agentic/hyper-personalisation-web.replay"),Qs=Symbol.for("@thg-agentic/hyper-personalisation-web.unreachable"),ei=Symbol.for("@thg-agentic/hyper-personalisation-web.onsite-access");function ti(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 ni="e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855";function ri(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 dt(e){if(typeof e!="string")return null;let t=ri(e.trim());return t===ni?null:t}var jr=Object.freeze({email_sha256:"sha256",phone_sha256:"sha256",accepts_marketing:"boolean",gender:"string",created_at:"date-time"}),oi=/^\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 si(e){if(typeof e!="string"||!oi.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 ii(e,t){return t===null?null:e==="sha256"?dt(t)??void 0:e==="date-time"?t instanceof Date?Number.isNaN(t.getTime())?void 0:t.toISOString():si(t)?t:void 0:typeof t===e?t:void 0}function ai(e,t){let n={},r=[];for(let[o,s]of Object.entries(e)){let i=Object.hasOwn(jr,o)?jr[o]:null,u=i?ii(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 Hr=!1,Fr=!1;function ci(){Fr||(Fr=!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 ui(e){!e||Hr||(Hr=!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 li(e){try{return se(JSON.stringify(e))}catch{return 0}}function lt(e){return e&&typeof e.context=="object"&&e.context!==null?e.context:e}function di(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=$(C(o),e),c=i?.getItem(u);if(!c)continue;let l=$(C(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 qr(e){let t=oe(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:Rr,libraryVersion:Nr,writeKey:"web",queryParamBlocklist:[],debug:!1,validate:null,consentTimeoutMs:5e3,...e,apiHost:t};He(n.storageNames),Fe();let r=!!n.consent;r||ci();let o=null;n.getConsent=()=>o?o.stamp():jn();let s=()=>!r||o?.status==="granted";di(n.propertyId,n.writeKey);let i=r&&n.holdAcrossPages?Vn($(C("held"),n.writeKey)):null,u=i?.read()??{items:[],anonymousId:null};n.mintAnonymousId!==void 0&&ui(n.debug);let c=$n(n,{carried:u.anonymousId,mayStore:s,orOwn:!0}),l=_r({name:C("session"),domain:n.consentCookieDomain??null,mayStore:s}),f=n.getSessionId;n.getSessionId=()=>F(M(f,null))??l.get();let p=ir(C("preview"),n.consentCookieDomain??null),m=()=>F(M(f,null))??V(C("session")),A=Dr(typeof location>"u"?null:Pt(location.search)),w=(a=null)=>{p||Br(n.propertyId,a,{sessionId:m(),keepSession:s()})},x=(a,d)=>n.debug&&console.warn("[hp]",a,d??""),_=n.transport??new ct({apiHost:n.apiHost,writeKey:n.writeKey,storageKey:$(C("retry"),n.writeKey),mayPersist:r?()=>o?.status==="granted":void 0,deferReplay:r,onError:x}),k=$(C("previousPage"),n.propertyId),h=null,E=()=>{if(h)return h;try{return sessionStorage.getItem(k)||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(k,a)}catch{}},g=or({key:$(C("decisions"),n.propertyId),mayStore:s});n.getDecisions??(n.getDecisions=g.current);let y=F(M(n.getUserId,null)),O=null,N=null,U=y?ve(n.identityToken):null,G=null,K=null,ie=new Set,J=new Set;function Ue(a){if(a.type!=="track"||a.event!=="Cart Updated")return;let d=a.properties?.value;K=typeof d=="number"&&Number.isFinite(d)&&d>=0?d:null;for(let I of ie)try{I()}catch(P){console.warn("[hp] a basket listener failed",P)}}function ae(a,d,I=!1){Ue(a),w();try{return Ve(a,d,I)}catch(P){if(P instanceof be)throw P;return console.warn("[hp] the event was not sent",P),null}}function Ve(a,d,I){let P=G;G=null;let q=a.type==="track"?a.event:a.type;if(!I&&!xr(n.plan,q))return null;let T={messageId:P?.messageId??ne(),timestamp:P?.timestamp??new Date().toISOString(),anonymousId:F(M(n.getAnonymousId,null)),userId:y??null,...a,context:Nn(n,lt(d))};if(T.properties&&(T.properties=Ct(T.properties)),typeof T.properties?.href=="string"&&(T.properties.href=Lt(T.properties.href,n)),!I&&!fr(T.anonymousId,n.sampleRate))return n.debug&&console.debug("[hp] not sent: outside the sample",T),null;if(n.beforeSend){let Q;try{Q=n.beforeSend(T)}catch(ao){return console.warn("[hp] beforeSend failed; the event was not sent",ao),null}if(!Q)return null;let{type:z,event:gn,messageId:so,timestamp:io}=T;T={...Q,type:z,messageId:so,timestamp:io,...gn?{event:gn}:{}}}if(n.validate){let Q=n.validate(T,{producer:"web"});if(!Q.valid){let z=`[hp] invalid ${T.event??T.type}:
2
- ${Q.errors.join(`
3
- `)}`;if(n.throwOnInvalid)throw new be(z);console.error(z)}}n.debug&&console.debug("[hp]",T.event??T.type,T);let bt=li(T);return bt>cn?(x(`${T.event??T.type} not sent: ${bt} bytes, over the ${cn}-byte limit for one event`),null):(no(T,I),T)}function R(a){if((a.type==="track"||a.type==="page")&&wt(a),n.onEvent)try{n.onEvent(a)}catch(d){console.warn("[hp] onEvent observer failed",d)}}let j=()=>r&&o?.state?.personalisation===!0,we=()=>mr(M(n.getSessionId,null),n.propertyId),X=!1;function wt(a){try{if(j()){we();let d=Sr(a.event,a.properties,ut(n.propertyId,{sessionId:m()}));a.type==="track"&&ur(Wt(d)),X=!0}else $e()}catch(d){n.debug&&console.warn("[hp] the visit was not recorded",d)}}function $e(a=!1){lr(),(a||X)&&hr(),X=!1}function St(){l.forget(),g.forget(),_t.clear(),c?.forget(),$e(!0),un()}function no(a,d){!r||d||o.admits()?(R(a),_.enqueue(a)):o.hold(a)}let v=(a,d,I)=>ae({type:"track",event:a,properties:d??{}},I),_t=new Set,ro=(a,d,I)=>a==="audiences"?{audiences:d?null:I.audiences??[]}:a==="decisions"?{decisions:(I.decisions??[]).map(P=>({slot:P.slot,decision_id:P.decision_id??null,arm:P.arm??null,...P.variant&&{variant:P.variant}}))}:{recommendation_request_id:I.recommendation_request_id??null};w(A),r&&(o=nr({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()),R(a),_.enqueue(a)},onStatus(a){if(a==="granted"&&(c?.persist(),l.persist(),h&&S(h),g.persist(),_.replayPersisted?.()),a==="denied"){_.clearPersisted?.(),c?.forget(),l.forget();try{sessionStorage.removeItem(k)}catch{}g.forget(),$e(!0)}try{n.onConsentStatus?.(a)}catch(d){console.warn("[hp] onConsentStatus observer failed",d)}if(a==="granted"||a==="denied")for(let d of J)try{d()}catch(I){console.warn("[hp] a consent listener failed",I)}},announce({action:a,state:d,previous:I,withdrawal:P}){d?.personalisation!==!0&&$e(I?.personalisation===!0),P&&(_.discardQueued?.(),un()),ae({type:"track",event:"Consent Updated",properties:{action:a,state:d}},void 0,P),P&&_.flush()}}),o.start(),w());let fn=()=>n.holdout?Gt(n.holdout):null,pn=()=>zt(n.holdout,F(M(n.getAnonymousId,null))).group;function oo(a,d){if(!Array.isArray(a?.decisions))return a;let I=n.holdout?.readoutSlots??[],P=F(M(n.getAnonymousId,null));return{...a,decisions:a.decisions.map(q=>{let T=q?.variant==="bandit"||q?.variant==="default"?q.variant:!d&&q?.holdout!==!0&&I.includes(q?.slot)?sr(q.slot,P):null;return T?T==="default"?{...q,variant:T,decision_id:null}:{...q,variant:T}:q})}}function mn(a,d){if(p)return null;let I=a?.exposure,P=I?.holdout===!0,q=oo(a,P);return g.remember(rr(q)),!I?.token||_t.has(I.token)?null:(_t.add(I.token),v("Personalisation Exposed",{exposure_token:I.token,surface:I.surface,holdout:P,holdout_share:I.holdout_share??fn()?.holdout_share??null,personalised_share:I.personalised_share??fn()?.personalised_share??null,...ro(I.surface,P,q)},d))}function hn(a){return y&&St(),y=null,O=null,N=null,U=null,a}return er({track:(a,d,I)=>a==="Signed Out"?hn(v(a,d,I)):v(a,d,I),page(a,d){a??(a={});let I=n.pageType??null;a.type&&(Se.has(a.type)?(I=a.type,n.pageType=a.type):n.debug&&console.warn(`[hp] ignoring unknown page.type "${a.type}". Allowed: ${[...Se].join(", ")}`));let P=ae({type:"page",properties:{name:a.name??null,navigation_trigger:a.navigation_trigger??En(),previous_message_id:E()}},{page:{type:I},...lt(d)??{}});return P&&S(P.messageId),P},identify(a,d,I){let{userId:P,...q}=a&&typeof a=="object"?a:{},T=ve(lt(d)?.identity_token);if(P!==void 0){let z=F(P);U=z?z===y?T??U:T:null,I===Oe?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&&I!==Oe&&(O=z)}else T&&y&&(U=T);let{identity_token:bt,...Q}=lt(d)??{};return ae({type:"identify",traits:ai(q,n.debug)},U?{...Q,identity_token:U}:Q)},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:mn,surfaceViewed({surface:a}={},d){if(!Xs.has(a)||!n.holdout||a!=="decisions"&&!j())return null;let I=F(M(n.getAnonymousId,null)),P=zt(n.holdout,I).group;if(P==="excluded")return null;let q=kn({sessionId:Be(M(n.getSessionId,null),I),surface:a});return q?mn({exposure:{token:q,surface:a,holdout:P==="holdout"}},d):null},inHoldout:()=>pn()!=="personalised",personalisationGroup:pn,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",ti(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=>hn(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=>_.flush(a),recommendationContext(){if(!j())return{};try{return we(),Wt(et())}catch{return{}}},get consent(){return o?o.state:null},servingHeaders:()=>Bt(o?.state??null),get lastPageMessageId(){return E()},get anonymousId(){return F(M(n.getAnonymousId,null))},[ei](){return{writeKey:n.writeKey,storageKey:$(C("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:()=>j()?U:null,analytics:s,personalisation:j,consent:()=>n.getConsent(),headers:()=>Bt(o?.state??null),pageUrl:()=>typeof location>"u"?null:Lt(location.href,n),locale:()=>Nt(M(n.getLocale,n.locale)),campaign:()=>p?A:ut(n.propertyId,{sessionId:m()}),basketValue:()=>{let a=et().basketValue;return K??(Number.isFinite(a)?a:null)},sessionSignals:()=>j()?(we(),{...et(),campaign:ut(n.propertyId,{sessionId:m()})}):null,onBasket:a=>(ie.add(a),()=>ie.delete(a)),consentAnswered:()=>!o||o.status==="granted"||o.status==="denied",onConsentAnswered:a=>(J.add(a),()=>J.delete(a))}},[Qs](){_.markFailing?.()},[Zs](a,d,I){if(typeof this[a]=="function"){G=typeof I?.messageId=="string"&&typeof I?.timestamp=="string"?{messageId:I.messageId,timestamp:I.timestamp}:null;try{this[a](...Array.isArray(d)?d:[])}finally{G=null}}}})}var Re=Symbol.for("@thg-agentic/hyper-personalisation-web.onsite"),Y=Symbol.for("@thg-agentic/hyper-personalisation-web.onsite.pending"),Me=Symbol.for("@thg-agentic/hyper-personalisation-web.onsite.listeners"),ft=Symbol.for("@thg-agentic/hyper-personalisation-web.onsite.suppressed"),fi=["shown","submitted","apply","closed","held"],Kr=10,he=()=>typeof window>"u"?null:window;function De(){try{for(let{resolve:e}of he()?.[Y]?.splice(0)??[])e(!1)}catch{}}var ge=Object.freeze({open(e){try{let t=he();if(!t||typeof e!="string")return Promise.resolve(!1);if(t[Re])return t[Re].open(e);if(t[Y]??(t[Y]=[]),t[Y].length<Kr)return new Promise(n=>t[Y].push({slot:e,resolve:n}))}catch{}return Promise.resolve(!1)},show(e){return ge.open(e)},on(e,t){var n;try{let r=he();return!r||!fi.includes(e)||typeof t!="function"?()=>{}:(r[Me]??(r[Me]={}),((n=r[Me])[e]??(n[e]=new Set)).add(t),()=>r[Me][e].delete(t))}catch{return()=>{}}},suppress(e="page"){try{let t=he();if(!t)return;(t[ft]??(t[ft]=new Set)).add(String(e)),t[Re]?.suppress()}catch{}},unsuppress(e){try{let t=he()?.[ft];e===void 0?t?.clear():t?.delete(String(e))}catch{}},ready(){try{let e=he();if(!e)return Promise.resolve([]);if(e[Re])return Promise.resolve(ge.debug());if(e[Y]??(e[Y]=[]),e[Y].length<Kr)return new Promise(t=>e[Y].push({slot:null,resolve:()=>t(ge.debug())}))}catch{}return Promise.resolve([])},debug(){try{return he()?.[Re]?.debug()??[]}catch{return[]}}});function Gr(e){let t=typeof document>"u"?null:document.currentScript?.src;return t?new URL(e,t).href:null}var pt=new Map;function zr(e,t){return window[t]?Promise.resolve(window[t]):e?(pt.has(t)||pt.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(()=>pt.delete(t))),pt.get(t)):Promise.reject(new Error("the CDN script\u2019s own URL is unknown"))}var pi=Gr("onsite.min.js"),ln=()=>zr(pi,Symbol.for("@thg-agentic/hyper-personalisation-web.onsite.module"));var dn=Symbol.for("@thg-agentic/hyper-personalisation-web.bootstrap"),mi=Symbol.for("@thg-agentic/hyper-personalisation-web.drain"),hi=Symbol.for("@thg-agentic/hyper-personalisation-web.carry"),Wr=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.assignment"),wi=Symbol.for("@thg-agentic/hyper-personalisation-web.recommendation-context"),gt=e=>e?()=>V(e):()=>null,Xr={didomi:e=>qn({purposes:e.purposes}),onetrust:e=>Kn({groups:e.groups,impliedConsent:e.impliedConsent}),cookie:e=>Gn({name:e.name,categories:e.categories,refusedValue:e.refusedValue,source:e.source,changeEvent:e.changeEvent}),forwarded:e=>zn({name:e.name}),static:e=>{if(!e.state||typeof e.state!="object")throw new Error('consent.state is required for provider "static"');return Wn(e.state)}},Jr=Object.keys(Xr),ye=e=>e!==null&&typeof e=="object"&&!Array.isArray(e),mt=e=>typeof e=="string"&&e!=="",Si=e=>Array.isArray(e)&&e.every(t=>typeof t=="string"),Zr=e=>ye(e)&&typeof e.read=="function";function _i(e,t={}){let n=[];if(!ye(e))return["config must be { writeKey, apiHost? }"];mt(e.writeKey)||n.push("writeKey is required"),oe(e.apiHost)||n.push("apiHost, when given, must be a host or an http(s) origin"),t.propertyId!==void 0&&!mt(t.propertyId)&&n.push("propertyId must be a string");let{consent:r}=t;if(!Zr(r)&&!(ye(r)&&Jr.includes(r.provider))&&n.push(`consent must be a consent adapter or { provider: ${Jr.join(" | ")} }`),t.autocapture!==void 0&&t.autocapture!==!1&&!ye(t.autocapture)&&n.push("autocapture must be false or { promotions, productLists, recommendations }"),t.onsite!==void 0&&typeof t.onsite!="boolean"&&!ye(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(!ye(t.identityCookies))n.push("identityCookies must be an object");else for(let o of["anonymousId","sessionId"]){let s=t.identityCookies[o];s!==void 0&&!mt(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&&(ye(t.dataLayer)?(t.dataLayer.name!==void 0&&!mt(t.dataLayer.name)&&n.push("dataLayer.name must be a string"),t.dataLayer.ignore!==void 0&&!Si(t.dataLayer.ignore)&&n.push("dataLayer.ignore must be an array of strings")):n.push("dataLayer must be an object")),n}function bi(e,t,n){if(Zr(e))return jt(e,t.consentPurposes);let{provider:r,...o}=e,s=n?.consent?.[r]??Xr[r];return jt(s(o),t.consentPurposes)}var yt=(e,t,n)=>`${e??""}|${t??""}${n?"|v":""}`,Ii=(e,t,n,r)=>e===yt(t,n,!0)||!r&&e===yt(t,n,!1),xi=e=>{if(e.context?.identity_token===void 0)return e;let{identity_token:t,...n}=e.context;return{...e,context:n}},Qr=e=>{try{return sessionStorage.getItem(e)}catch{return null}};function ki(e,t){let n=F(t?.userId),r=dt(t?.emailSha256);if(!n&&!r)return null;let o=Qr($(C("identified"),e));return Ii(o,n,r,n!==null&&ve(t?.token)!==null)?null:{...n?{userId:n}:{},...r?{email_sha256:r}:{}}}async function Ai({writeKey:e,apiHost:t},n){if(n.settings!==void 0)return{settings:en(n.settings),revalidated:null};let r=vr(t,e),o=Er(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 eo(e,t){let n=t??{},r=typeof window<"u"?window:null;if(r?.[dn])return r[dn];let o=Bn(e?.writeKey,()=>{let{analytics:i}=Ce(V(C("consent")));return i===!0||i===null&&n.holdAcrossPages===!0}),s=Oi(e,n,o);if(r){let i=n.extend?.getSessionId??gt(n.identityCookies?.sessionId),u=gt(n.identityCookies?.anonymousId);r[yi]=({slot:c,arm:l}={})=>xn({sessionId:Be(i(),u()),slot:c,arm:l}),r[dn]=s,r[hi]=o,r[mi]?.(s)}return s}function vi(){let e=globalThis.performance?.now?.();return new Date(Date.now()-(Number.isFinite(e)?e:0)).toISOString()}function Yr(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(kt(e,r(n.productLists))),n.recommendations&&o.push(vt(e,r(n.recommendations))),n.exposures&&o.push(xt(e,r(n.exposures)))}catch(s){console.warn("[hp] autocapture not started:",s?.message??s)}return()=>{for(let s of o)s()}}var Ei=1e3;function Ci(e,t,n,r){if(!t)return De();let o=n.onsite?ln():null;o?.catch(()=>{}),(r?Promise.race([r.then(i=>i??n),new Promise(i=>setTimeout(()=>i(n),Ei))]):Promise.resolve(n)).then(i=>{let u=i.enabled?i.onsite:null;if(!u)return De();let c=t===!0?{}:t;return(o??ln()).then(l=>l.startOnsite(e,{...c,settings:c.settings??u}))}).catch(i=>{De(),console.warn("[hp] onsite not started:",i?.message??i)})}function ht(e){return e.close(),De(),null}async function Oi(e,t,n){try{let r=_i(e,t);if(r.length)return console.warn(`[hp] not started, the configuration is invalid: ${r.join("; ")}`),ht(n);He(t.storageNames),Fe();let{writeKey:o}=e,[{settings:s,revalidated:i,fetched:u},c]=await Promise.all([Ai(e,t),Promise.resolve(t.identity).catch(()=>null)]),l=i?s:null,f=!1,p=()=>f&&l&&Cr(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"),ht(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"),ht(n);let{preset:A}=t,w=ki(m,c),x=t.debug===!0||s.debug?.enabled===!0||Qn(s.debug?.tokenSha256??null,C("debug")),_=F(c?.userId),k=qr({apiHost:kr(e.apiHost,s.apiHost),servingHost:oe(e.apiHost),onsite:s.onsite??null,writeKey:o,propertyId:m,pageType:Se.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:bi(t.consent,s,A),consentCookieDomain:t.consentCookieDomain,storageNames:t.storageNames,holdAcrossPages:t.holdAcrossPages===!0,mintAnonymousId:t.mintAnonymousId,debug:x,anonymousIdSource:s.anonymousId??void 0,getAnonymousId:gt(t.identityCookies?.anonymousId),getSessionId:t.identityCookies?.sessionId?gt(t.identityCookies.sessionId):void 0,getUserId:()=>_,identityToken:c?.token,beforeSend:t.beforeSend,...t.extend,onConsentStatus(g){if(g==="granted"&&(f=!0,p()),g==="denied"){tn(o);try{sessionStorage.removeItem($(C("identified"),m))}catch{}}t.extend?.onConsentStatus?.(g)},onEvent(g){if(g.type==="identify"){let y=$(C("identified"),m),O=F(g.userId),N=dt(g.traits?.email_sha256),U=!!g.context?.identity_token||Qr(y)===yt(O,N,!0);try{sessionStorage.setItem(y,yt(O,N,U))}catch{}}t.extend?.onEvent?.(xi(g))}});typeof window<"u"&&(window[wi]=()=>k.recommendationContext()),u?.then(g=>g===null&&k[gi]());for(let[g,y,O]of n.take())try{k[Wr](g,y,O)}catch(N){console.warn(`[hp] carried ${g} failed`,N)}k[Wr]("page",[t.pageType?{type:t.pageType}:{}],{messageId:ne(),timestamp:vi()});let h=Yr(k,t.autocapture),E=k.page;k.page=Kt("page",(...g)=>{let y=E(...g);return h(),h=Yr(k,t.autocapture),y});let S=typeof window<"u"?window:null;if(S?.addEventListener?.("pageshow",g=>{g.persisted&&k.page({navigation_trigger:"back_forward"})}),t.dataLayer&&S){let g=t.dataLayer.name??"dataLayer";S[g]=S[g]||[],Zn(k,{...A,dataLayer:S[g],ignore:[...A?.ignore??[],...t.dataLayer.ignore??[]],onError:y=>x&&console.warn("[hp] dataLayer mapping failed",y)})}return w&&k.identify(w,void 0,Oe),k.onsite=ge,Ci(k,t.onsite,s,i),k}catch(r){return console.warn("[hp] not started:",r?.message??r),ht(n)}}function to(e){e.initialized=!0,eo(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=ge);B.initialized||(B._config?to(B):B.load=(e,t)=>{B._config=e,B._options=t??{},to(B)});})();
1
+ (()=>{var wn=e=>{throw TypeError(e)};var lo=(e,t,n)=>t.has(e)||wn("Cannot "+n);var Sn=(e,t,n)=>t.has(e)?wn("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 Ce=[];for(let e=2;Ce.length<64;e++)Ce.every(t=>e%t!==0)&&Ce.push(e);var _n=e=>(e-Math.floor(e))*2**32>>>0,fo=Ce.slice(0,8).map(e=>_n(Math.sqrt(e))),po=Ce.map(e=>_n(Math.cbrt(e))),Q=(e,t)=>e>>>t|e<<32-t;function bn(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 In(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 kn(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=In(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 xn({sessionId:e,slot:t,arm:n}={}){let r=ue(e,256);return!r||!ue(t,256)||!ue(n,256)?null:kn(mo,`${r}:${t}:${n}`)}var go="4b1f2c7e-9a3d-4e58-b6c1-2d7f0a9e8c53";function An({sessionId:e,surface:t}={}){let n=ue(e,256);return!n||!ue(t,64)?null:kn(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 C of h){let S=C.target;if(!wo(C,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 vn=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:vn(b.url)}:{},...b.image_url?{image_url:vn(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(C=>!C||x.has(C.product_id)?!1:(x.add(C.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,...C)=>{try{return h(...C)}catch{return null}},A=h=>typeof h.closest=="function"?h.closest(n):null,w=h=>Array.from(h.querySelectorAll(r)),k=(h,C)=>{if(p.delete(C.recommendation_request_id),l.has(C.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(C.recommendation_request_id);let g=[...f.get(C.recommendation_request_id)?.values()??[]].sort((y,O)=>y.position-O.position);e.recommendationsViewed({...C,products:S,viewable:g})},b=re({selector:`${n} ${r}`,root:c,visibleRatio:i,dwellMs:u,onViewable(h){let C=A(h);if(!C)return!0;let S=m(o,C);if(!S)return!0;let g=S.recommendation_request_id,y=m(s,h,w(C).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(C,S),0)),!0}}),x=h=>{let C=h.target;if(!C||typeof C.closest!="function")return;let S=C.closest(r);if(!S)return;let g=C.closest("[data-hp-reco-interaction]"),y=C.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 Ct(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=>Ct(r,t)):Object.fromEntries(Object.entries(e).filter(([,r])=>!Cn(r)).map(([r,o])=>[r,Ct(o,t)]));return t.delete(e),n}function Et(e){if(!e)return e;let t=Ct(e);for(let n of Io)n in e&&Cn(e[n])&&(t[n]=e[n]);return t}function En(){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 Ee=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 Pn="1.20";function $(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,}/,Co=new Set(["gclid","fbclid","ttclid","msclkid"]);function Ln(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=!Co.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&&!Ln(i,o)&&(n[s]=i)}return Object.keys(n).length?n:null}var Eo=["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(Eo.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 Tn(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=>Ln(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 Nn(e,t,n={}){if(!e)return null;try{let r=new URL(e);return t&&r.origin===t?r.origin+r.pathname+(Tn(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:Nn(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 On(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?Tn(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"?Nn(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 Rn(e,t={}){let n=typeof window<"u"?window.location:null,r={library:{name:e.libraryName,version:e.libraryVersion},spec:{version:Pn},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:On(e.country),ship_to_country:On(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 Mn(r,t)}function Mn(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]=Mn(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},Dn=!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="_",Un=e=>e==null||e===""?Vo:String(e);function B(e,t,n){let r=`${e}:${Un(t)}`;return n==null||n===""?r:`${r}:${n}`}function Vn(e,t){return`${e}:${Un(t)}:`}function Ge(){if(!Dn){Dn=!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 $n(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 Bn(e,{carried:t=null,mayStore:n,orOwn:r=!1}){let o=e.anonymousIdSource,s=()=>Bo({name:P("anonymousId"),domain:e.consentCookieDomain??null,legacyKey:B(P("anonymousId"),e.propertyId),read:$,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=()=>$(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 jn(e,t,n=()=>Date.now()){let r=()=>B(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"}),Hn=()=>({basis:We.host}),Ho="hp-consent",pe=["analytics","marketing","personalisation","ad_user_data","ad_personalization"],Fn={analytics:"a",marketing:"m",personalisation:"p",ad_user_data:"aud",ad_personalization:"adp"},ne=()=>typeof window<"u",qn=()=>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 Vt(e,t){return!e||!t?e===t:pe.every(n=>e[n]===t[n])}function $t(e){if(!e)return"";let t=[];for(let n of pe){let r=e[n];(r===!0||r===!1)&&t.push(`${Fn[n]}=${r?1:0}`)}return t.join("&")}function Bt(e){return{[Ho]:$t(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(Fn).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 jt(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 Ht(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 Kn(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 Ht({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 Ut(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 Gn(e={}){let t={analytics:"C0002",personalisation:"C0003",marketing:"C0004",...e.groups},n=e.impliedConsent===!0;function r(){let i=Ut($("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($("OptanonAlertBoxClosed"))return!0;try{if(ne()&&window.OneTrust?.IsAlertBoxClosed?.()===!0)return!0}catch{}return Number.parseInt(Ut($("OptanonConsent")).interactionCount,10)>0?!0: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=Ht({analytics:u("analytics"),marketing:u("marketing"),personalisation:u("personalisation")},{ad_user_data:u("ad_user_data"),ad_personalization:u("ad_personalization")}),l=Ut($("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 zn(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=$(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 Ht({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 qn()},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 Wn(e={}){let t=e.name??P("consent"),n=()=>{let r=$(t);if(r==null)return null;let o=Oe(r);return o.analytics==null?null:o};return{name:"forwarded",read:n,get observesChanges(){return qn()},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 Jn(e){let t=be(e);return{name:"static",basis:We.host,read:()=>t?{...t}:null,observesChanges:!0,subscribe:()=>()=>{}}}function Yn(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 Yn(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 Yn(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 Ft(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 Xn(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 Zn=({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:Zn(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:Zn(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:Xn(o.ecommerce.method)}}),sign_up:o=>({event:"Signed Up",properties:{method:Xn(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 qt(e){return Array.isArray(e)?`[${e.map(qt).join(",")}]`:e&&typeof e=="object"?`{${Object.keys(e).sort().map(t=>`${JSON.stringify(t)}:${qt(e[t])}`).join(",")}}`:JSON.stringify(e??null)}function Qn(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??""}|${qt(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:Ft(G,i),currency:Tt(y.ecommerce.currency),value:es(y.ecommerce.value)};q.promotions=ns(q);let ee=O?N(g,{...q,toProducts:J=>Ft(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 C(...S){let g=h.apply(this,S);for(let y of S)x(y);return g}return n.push=C,()=>{f=!1,n.push===C&&(n.push=h)}}var cs="hp_debug",us=256;function ls(){try{return new URLSearchParams(location.search).get(cs)}catch{return null}}function er(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&&bn(r)===e)}catch{return!1}}var Ie=class extends Error{},ds={inHoldout:()=>!0,personalisationGroup:()=>"excluded",servingHeaders:()=>({}),recommendationContext:()=>({}),flush:()=>Promise.resolve(),reset:()=>{}};function Kt(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 tr(e){for(let t of Reflect.ownKeys(e)){let{value:n}=Object.getOwnPropertyDescriptor(e,t)??{};typeof n=="function"&&(e[t]=Kt(t,n))}return e}var Le=Symbol("hp.identityOption");var fs=4320*60*60,ps=100,ms=1e3,hs=2e3,nr=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}=${$t(e)}; Path=/; Max-Age=${fs}; SameSite=Lax`+o+r}catch{}}function ws(e){let t=Oe($(e));return pe.some(n=>t[n]!==null)?t:null}function rr(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 C=()=>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()||C()&&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&&Vt(Y,K))return;h(),l=K,y(),ys(K,r,o);let ve=!Vt(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>=nr?(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)}C()&&(window.addEventListener("pagehide",je),window.addEventListener("pageshow",ce),document.addEventListener("visibilitychange",Se)),N&&k.length===0&&k.push(...N.read().slice(-nr)),q(x()),!l&&(f=Ze(setInterval(()=>q(x()),ps)),p=Ze(setTimeout(ee,n)))},stop(){A=!0,h(),g(),typeof w=="function"&&w(),C()&&(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 or(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 sr({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 Gt(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 zt(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}=Gt(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 ir(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 ar(e,t=null){if(typeof location>"u")return $(e);let n=null;try{n=new URLSearchParams(location.search).get(bs)}catch{n=null}if(n===null)return $(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,ur=e=>typeof e=="string"&&e!==""&&e.length<=xs&&!e.includes(","),cr=e=>Array.isArray(e)?e.filter(ur).slice(0,ks):[],Cs=e=>Array.isArray(e)?e.filter(t=>typeof t=="string").map(t=>t.replaceAll(","," ").trim()).filter(t=>t!=="").slice(0,As):[],Es=e=>Object.entries(e&&typeof e=="object"?e:{}).filter(([t,n])=>ur(t)&&Number.isFinite(n)&&n>=1).sort(([,t],[,n])=>n-t).slice(0,vs).map(([t,n])=>`${t}:${Math.floor(n)}`);function Wt(e){let t={},n={viewed:cr(e?.recentProducts),basket:cr(e?.basketProducts),q:Cs(e?.recentSearches),impressed:Es(e?.impressions)};for(let[r,o]of Object.entries(n))o.length>0&&(t[r]=o.join(","));return t}var Ps=1800*1e3;function lr(e,t=Date.now()){try{localStorage.setItem(P("recommendationContext"),JSON.stringify({context:e,until:t+Ps}))}catch{}}function dr(){try{localStorage.removeItem(P("recommendationContext"))}catch{}}var Os="hp_sample",fr=1e4;function pr(e,t){return!(typeof t=="number"&&t<1)||e==null||e===""?!0:et(e,Os,fr)<Math.round(t*fr)}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 Jt(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,Yt=()=>xe??he();function mr(){try{return xe?localStorage:sessionStorage}catch{return}}function hr(e,t){let n=t==null?null:String(t),r=e?B(he(),n,e):null;if(r===xe)return;let o=xe===null?Ns():null;if(xe=r,!!xe)try{let s=Yt(),i=Vn(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 Xt(){let e=mr();if(!e)return tt();try{let t=e.getItem(Yt());return t?{...tt(),...JSON.parse(t)}:{...tt(),startedAt:Date.now()}}catch{return{...tt(),startedAt:Date.now()}}}function Ne(e){let t=mr();if(t)try{t.setItem(Yt(),JSON.stringify(e))}catch{}}function Re(){return Xt()}function gr(){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 Zt=20,yr=200,Rs=new Set(["Product Viewed","Product Clicked","Product Added","Product Added to Wishlist"]),Ms=new Set(["Product Viewed","Product Added"]),wr=50;function nt(e,t){let n=Jt(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>wr){let o={};for(let s of r.sort((i,u)=>n[u]-n[i]).slice(0,wr))o[s]=n[s];e.listViewsByCategory=o}}var Sr=e=>[...new Set(e.map(t=>t?.product_id).filter(t=>typeof t=="string"&&t))].slice(0,Zt);function _r(e,t,n){let r=Xt();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,Zt))}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=Sr(s)),Ne(r),r;case"Cart Updated":{Array.isArray(t?.products)&&(r.basketProducts=Sr(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>yr){let l={};for(let f of c.sort((p,m)=>r.impressions[m]-r.impressions[p]).slice(0,yr))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,Zt)),Ms.has(e)&&typeof c.category=="string"&&c.category){let f=ke(c.category);f&&!u.has(f)&&(u.add(f),Jt(r.recentCategories,f))}}return Ne(r),r}var rt=1800*1e3;function br({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=$(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),Ir=e=>Array.isArray(e)&&e.every(t=>typeof t=="string"),kr=Object.freeze({enabled:!1}),en=Object.freeze({enabled:!0,queryParamAllowlist:Object.freeze([])});function xr(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:vr(e)}function Ar(e,t){return e!=null&&e!==""?ie(e):t?.startsWith("https://")?t:ie(void 0)}function vr(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 Qt=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)&&Qt(n.share)&&(n.ramp==null||Qt(n.ramp))&&typeof n.salt=="string"&&n.salt!=="").map(([n,r])=>[n,{share:r.share,ramp:r.ramp??null,salt:r.salt,...Ir(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 tn(e){let t=W(e)?e.hp:null;if(!W(t)||t.enabled!==!0)return kr;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:Ir(t.queryParamAllowlist)?t.queryParamAllowlist:null,anonymousId:qs(t.anonymousId),apiHost:vr(t.apiHost),holdouts:Hs(t.holdouts),sampleRate:Qt(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 Cr(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 kr;if(!o.ok)return null;let s=await o.json();return Gs(s)?tn(s):null}catch{return null}}var ot=e=>B(P("settings"),e);function Er(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 Pr(e,t){try{t?.enabled===!0?localStorage.setItem(ot(e),JSON.stringify(t)):localStorage.removeItem(ot(e))}catch{}}function nn(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(),Or=3e4,un=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),rn=()=>typeof window<"u"&&typeof document<"u";function Ys(){try{return!rn()||!window.localStorage?null:(window.localStorage.getItem("thg_hp_probe"),window.localStorage)}catch{return null}}var I,on,sn,it,an,cn,Lr,Me,De,Ue,Tr,at,Nr,ct,ut=class{constructor(t){Sn(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,rn()&&(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,sn).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,on).call(this)}flush(t={}){if(L(this,I,sn).call(this),this.queue.length===0)return Promise.resolve();if(t.beacon&&rn()&&typeof navigator<"u"&&navigator.sendBeacon)return L(this,I,Lr).call(this),Promise.resolve();if(this.inflight)return this.inflight;let n=L(this,I,cn).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,on).call(this)}),this.inflight}};I=new WeakSet,on=function(){this.timer||(this.timer=setTimeout(()=>this.flush(),this.o.flushIntervalMs),this.timer?.unref?.())},sn=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()})},an=function(){return`${this.o.apiHost.replace(/\/$/,"")}/v1/batch`},cn=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},Lr=function(){let t=this.queue;this.queue=[];let n=L(this,I,an).call(this);for(let r of L(this,I,cn).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,an).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,Or)*(.5+Math.random()),Math.min(i,Or));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,Nr).call(this,t))},Ue=function(){let t=JSON.parse(this.storage.getItem(this.o.storageKey)||"[]");return Array.isArray(t)?t:[]},Tr=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,Tr).call(this,L(this,I,Ue).call(this),n)?n.id:null}catch{return null}},Nr=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 Rr="3.28.0",Mr="@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=>B(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 ln(){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=B(P(o),e),c=i?.getItem(u);if(!c)continue;let l=B(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:Mr,libraryVersion:Rr,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():Hn();let s=()=>!r||o?.status==="granted";pi(n.propertyId,n.writeKey);let i=r&&n.holdAcrossPages?$n(B(P("held"),n.writeKey)):null,u=i?.read()??{items:[],anonymousId:null};n.mintAnonymousId!==void 0&&di(n.debug);let c=Bn(n,{carried:u.anonymousId,mayStore:s,orOwn:!0}),l=br({name:P("session"),domain:n.consentCookieDomain??null,mayStore:s}),f=n.getSessionId;n.getSessionId=()=>F(M(f,null))??l.get();let p=ar(P("preview"),n.consentCookieDomain??null),m=()=>F(M(f,null))??$(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:B(P("retry"),n.writeKey),mayPersist:r?()=>o?.status==="granted":void 0,deferReplay:r,onError:k}),x=B(P("previousPage"),n.propertyId),h=null,C=()=>{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=sr({key:B(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?Ee(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(E){console.warn("[hp] a basket listener failed",E)}}function ce(a,d,_=!1){je(a),w();try{return R(a,d,_)}catch(E){if(E instanceof Ie)throw E;return console.warn("[hp] the event was not sent",E),null}}function R(a,d,_){let E=G;G=null;let V=a.type==="track"?a.event:a.type;if(!_&&!xr(n.plan,V))return null;let T={messageId:E?.messageId??oe(),timestamp:E?.timestamp??new Date().toISOString(),anonymousId:F(M(n.getAnonymousId,null)),userId:y??null,...a,context:Rn(n,dt(d))};if(T.properties&&(T.properties=Et(T.properties)),typeof T.properties?.href=="string"&&(T.properties.href=Lt(T.properties.href,n)),!_&&!pr(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:yn,messageId:ao,timestamp:co}=T;T={...te,type:z,messageId:ao,timestamp:co,...yn?{event:yn}:{}}}if(n.validate){let te=n.validate(T,{producer:"web"});if(!te.valid){let z=`[hp] invalid ${T.event??T.type}:
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>un?(k(`${T.event??T.type} not sent: ${bt} bytes, over the ${un}-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=()=>hr(M(n.getSessionId,null),n.propertyId),ve=!1;function ro(a){try{if(Z()){Y();let d=_r(a.event,a.properties,lt(n.propertyId,{sessionId:m()}));a.type==="track"&&lr(Wt(d)),ve=!0}else He()}catch(d){n.debug&&console.warn("[hp] the visit was not recorded",d)}}function He(a=!1){dr(),(a||ve)&&gr(),ve=!1}function St(){l.forget(),g.forget(),_t.clear(),c?.forget(),He(!0),ln()}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(E=>({slot:E.slot,decision_id:E.decision_id??null,arm:E.arm??null,...E.variant&&{variant:E.variant}}))}:{recommendation_request_id:_.recommendation_request_id??null};w(A),r&&(o=rr({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:E}){d?.personalisation!==!0&&He(_?.personalisation===!0),E&&(b.discardQueued?.(),ln()),ce({type:"track",event:"Consent Updated",properties:{action:a,state:d}},void 0,E),E&&b.flush()}}),o.start(),w());let pn=()=>n.holdout?Gt(n.holdout):null,mn=()=>zt(n.holdout,F(M(n.getAnonymousId,null))).group;function io(a,d){if(!Array.isArray(a?.decisions))return a;let _=n.holdout?.readoutSlots??[],E=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)?ir(V.slot,E):null;return T?T==="default"?{...V,variant:T,decision_id:null}:{...V,variant:T}:V})}}function hn(a,d){if(p)return null;let _=a?.exposure,E=_?.holdout===!0,V=io(a,E);return g.remember(or(V)),!_?.token||_t.has(_.token)?null:(_t.add(_.token),v("Personalisation Exposed",{exposure_token:_.token,surface:_.surface,holdout:E,holdout_share:_.holdout_share??pn()?.holdout_share??null,personalised_share:_.personalised_share??pn()?.personalised_share??null,...so(_.surface,E,V)},d))}function gn(a){return y&&St(),y=null,O=null,N=null,U=null,a}return tr({track:(a,d,_)=>a==="Signed Out"?gn(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 E=ce({type:"page",properties:{name:a.name??null,navigation_trigger:a.navigation_trigger??En(),previous_message_id:C()}},{page:{type:_},...dt(d)??{}});return E&&S(E.messageId),E},identify(a,d,_){let{userId:E,...V}=a&&typeof a=="object"?a:{},T=Ee(dt(d)?.identity_token);if(E!==void 0){let z=F(E);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:hn,surfaceViewed({surface:a}={},d){if(!Qs.has(a)||!n.holdout||a!=="decisions"&&!Z())return null;let _=F(M(n.getAnonymousId,null)),E=zt(n.holdout,_).group;if(E==="excluded")return null;let V=An({sessionId:Fe(M(n.getSessionId,null),_),surface:a});return V?hn({exposure:{token:V,surface:a,holdout:E==="holdout"}},d):null},inHoldout:()=>mn()!=="personalised",personalisationGroup:mn,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=>gn(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(),Wt(Re())}catch{return{}}},get consent(){return o?o.state:null},servingHeaders:()=>Bt(o?.state??null),get lastPageMessageId(){return C()},get anonymousId(){return F(M(n.getAnonymousId,null))},[ni](){return{writeKey:n.writeKey,storageKey:B(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:()=>Bt(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,_=E=>Array.isArray(E)?E.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"],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"),dn=()=>Wr(hi,Symbol.for("@thg-agentic/hyper-personalisation-web.onsite.module"));var fn=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?()=>$(e):()=>null,Zr={didomi:e=>Kn({purposes:e.purposes}),onetrust:e=>Gn({groups:e.groups,impliedConsent:e.impliedConsent}),cookie:e=>zn({name:e.name,categories:e.categories,refusedValue:e.refusedValue,source:e.source,changeEvent:e.changeEvent}),forwarded:e=>Wn({name:e.name}),static:e=>{if(!e.state||typeof e.state!="object")throw new Error('consent.state is required for provider "static"');return Jn(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 jt(e,t.consentPurposes);let{provider:r,...o}=e,s=n?.consent?.[r]??Zr[r];return jt(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(B(P("identified"),e));return xi(o,n,r,n!==null&&Ee(t?.token)!==null)?null:{...n?{userId:n}:{},...r?{email_sha256:r}:{}}}async function Ci({writeKey:e,apiHost:t},n){if(n.settings!==void 0)return{settings:tn(n.settings),revalidated:null};let r=Cr(t,e),o=Er(e);if(o)return{settings:o,revalidated:r,fetched:r};let s=await r;return s?{settings:s,revalidated:r,fetched:r}:{settings:en,revalidated:null,fetched:r}}function to(e,t){let n=t??{},r=typeof window<"u"?window:null;if(r?.[fn])return r[fn];let o=jn(e?.writeKey,()=>{let{analytics:i}=Oe($(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}={})=>xn({sessionId:Fe(i(),u()),slot:c,arm:l}),r[fn]=s,r[yi]=o,r[gi]?.(s)}return s}function Ei(){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?dn():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??dn()).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([Ci(e,t),Promise.resolve(t.identity).catch(()=>null)]),l=i?s:null,f=!1,p=()=>f&&l&&Pr(o,l);if(i?.then(g=>{g&&(l=g,g.enabled?p():nn(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!==en)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||er(s.debug?.tokenSha256??null,P("debug")),b=F(c?.userId),x=Kr({apiHost:Ar(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"){nn(o);try{sessionStorage.removeItem(B(P("identified"),m))}catch{}}t.extend?.onConsentStatus?.(g)},onEvent(g){if(g.type==="identify"){let y=B(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:Ei()});let h=Xr(x,t.autocapture),C=x.page;x.page=Kt("page",(...g)=>{let y=C(...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]||[],Qn(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 j=window.hp=window.hp||[];j.servingHeaders??(j.servingHeaders=()=>({}));j.inHoldout??(j.inHoldout=()=>!0);j.personalisationGroup??(j.personalisationGroup=()=>"excluded");j.recommendationContext??(j.recommendationContext=()=>({}));j.onsite??(j.onsite=ye);j.initialized||(j._config?no(j):j.load=(e,t)=>{j._config=e,j._options=t??{},no(j)});})();
@@ -0,0 +1,14 @@
1
+ (()=>{var F=Array.from({length:11},(r,n)=>n/10);function P(r,n){if(!r.isIntersecting)return!1;let{intersectionRect:i,boundingClientRect:o,rootBounds:s}=r;if(!i||!o)return!0;let f=i.width*i.height,a=o.width*o.height,l=s?Math.min(a,s.width*s.height):a;return l>0&&f/l>=n}function I(r){let{selector:n,onViewable:i,visibleRatio:o=.5,dwellMs:s=1e3,root:f=document}=r,a=new Map,l=new WeakSet,p=new Set,_=e=>{a.has(e)||a.set(e,setTimeout(()=>{a.delete(e),i(e)&&(m?.unobserve(e),p.delete(e))},s))},y=e=>{clearTimeout(a.get(e)),a.delete(e)},m=typeof IntersectionObserver>"u"?null:new IntersectionObserver(e=>{for(let t of e){let d=t.target;if(!P(t,o)){p.delete(d),y(d);continue}p.add(d),g()&&_(d)}},{threshold:F}),g=()=>typeof document>"u"||document.visibilityState!=="hidden",w=()=>{if(g())for(let e of p)_(e);else for(let e of p)y(e)};document.addEventListener("visibilitychange",w);let h=()=>{for(let e of f.querySelectorAll(n))l.has(e)||(l.add(e),m?.observe(e))},v=typeof MutationObserver>"u"?null:new MutationObserver(()=>h()),b=()=>{h(),v?.observe(f===document?document.body:f,{childList:!0,subtree:!0})},x=f===document&&!document.body;return x?document.addEventListener("DOMContentLoaded",b,{once:!0}):b(),()=>{x&&document.removeEventListener("DOMContentLoaded",b),document.removeEventListener("visibilitychange",w),m?.disconnect(),v?.disconnect();for(let e of a.values())clearTimeout(e);a.clear(),p.clear()}}function T(r){if(typeof r!="string")return null;try{let n=new URL(r);return n.protocol==="https:"?n.href:null}catch{return null}}var R=`.pr ul{list-style:none;margin:0;padding:0;display:grid;gap:12px}
2
+ .pr-c ul{grid-auto-flow:column;grid-auto-columns:minmax(132px,42%);overflow-x:auto;scroll-snap-type:x mandatory;scroll-behavior:smooth;padding-bottom:6px;overscroll-behavior-x:contain}
3
+ .pr-c li{scroll-snap-align:start}
4
+ .pr-g ul{grid-template-columns:repeat(auto-fill,minmax(132px,1fr))}
5
+ .mob .pr-g ul{grid-template-columns:repeat(2,1fr)}
6
+ .pr.a-center ul{justify-content:center}
7
+ .pa{display:flex;flex-direction:column;gap:4px;height:100%;color:inherit;text-decoration:none;border-radius:var(--ir);outline-offset:2px}
8
+ .pa:focus-visible{outline:2px solid var(--a)}
9
+ .pi{display:block;width:100%;aspect-ratio:1;object-fit:cover;border-radius:var(--ir);background:color-mix(in srgb,var(--t) 7%,var(--b))}
10
+ .pn{font-size:14px;line-height:1.3;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
11
+ .pp{display:flex;gap:6px;align-items:baseline;font-size:14px;font-weight:700}
12
+ .pp s{font-weight:400;color:var(--mu)}
13
+ .pb{margin-top:auto;padding:8px 12px;font-size:14px}
14
+ @media (prefers-reduced-motion:reduce){.pr-c ul{scroll-behavior:auto}}`,V=["left","center","right"],D=r=>r!==null&&typeof r=="object"&&!Array.isArray(r);function H(r,n){try{let i=new Intl.NumberFormat(r||void 0,{style:"currency",currency:n});return o=>i.format(o)}catch{return i=>i.toFixed(2)}}function O(r,n,i){let{el:o}=i,s=D(n.served)?n.served:{},f=Number.isInteger(n.limit)?Math.min(Math.max(n.limit,1),12):4,a=(Array.isArray(s.products)?s.products:[]).filter(e=>D(e)&&typeof e.product_id=="string"&&T(e.url)).slice(0,f);if(a.length===0)return;let l=D(n.show)?n.show:{},p=n.layout==="grid";r.classList.add(p?"pr-g":"pr-c"),V.includes(n.align)&&r.classList.add(`a-${n.align}`),p||(r.setAttribute("role","region"),r.setAttribute("aria-label","Products"));let _=o("style");_.textContent=R;let y=o("ul");y.setAttribute("role","list");let m=(e,t)=>({product_id:e.product_id,...typeof e.name=="string"?{name:e.name}:{},...Number.isFinite(e.price)?{price:e.price}:{},position:t}),g=typeof s.recommendation_request_id=="string"&&!i.preview?i.client:null,w=new Map,h=s.recommendation_request_id,v=i.seen??new Set,b=null,x=()=>{clearTimeout(b),!(!g||v.has(h))&&(v.add(h),g.recommendationsViewed({recommendation_request_id:h,placement:s.placement||i.placement,strategy:s.strategy||s.recipe||n.source,recipe:s.recipe??null,algorithm_version:s.algorithm_version??null,products:a.map((e,t)=>m(e,t+1)),viewable:[...w.values()].sort((e,t)=>e.position-t.position)}))};for(let[e,t]of a.entries()){let d=e+1,A=o("li","pc");A.dataset.hpProduct=t.product_id,A.dataset.hpPosition=String(d);let u=o("a","pa"),L=typeof t.name=="string"?t.name:"",E=T(t.image);if(E){let c=o("img","pi");c.alt=l.name===!1?L:"",c.loading="lazy",c.decoding="async",c.src=E,u.append(c)}else u.append(o("span","pi"));if(l.name!==!1&&L&&u.append(o("span","pn",L)),l.price!==!1&&Number.isFinite(t.price)){let c=H(i.lang,t.currency),S=o("span","pp");if(S.append(o("span","",c(t.price))),Number.isFinite(t.compare_at_price)&&t.compare_at_price>t.price){let M=o("s","",c(t.compare_at_price));M.setAttribute("aria-label",`was ${c(t.compare_at_price)}`),S.append(M)}u.append(S)}l.name===!1&&!E&&u.setAttribute("aria-label",L||t.product_id),typeof n.button=="string"&&n.button&&u.append(o("span","btn pb",n.button)),u.href=T(t.url),u.rel="noopener",u.addEventListener("click",c=>{if(i.preview)return c.preventDefault();x(),g?.productClicked({recommendation_request_id:s.recommendation_request_id,interaction:"navigate",products:[m(t,d)]}),i.engaged("click",void 0,{position:d,products:[m(t,d)]})}),A.append(u),y.append(A)}if(r.append(_,y),!(!g||v.has(h)))return I({selector:"[data-hp-product]",root:i.root,onViewable(e){let t=Number(e.dataset.hpPosition);return w.has(t)||w.set(t,{position:t,product_id:e.dataset.hpProduct,viewable_at:new Date().toISOString()}),b??(b=setTimeout(x,0)),!0}})}window[Symbol.for("@thg-agentic/hyper-personalisation-web.onsite.products")]={mountProducts:O};})();