@thg-agentic/hyper-personalisation-web 3.25.0 → 3.27.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # @thg-agentic/hyper-personalisation-web
2
2
 
3
3
  The browser SDK for THG Hyper-Personalisation, a customer data platform. It implements the event
4
- specification (spec 1.18, stamped on every event as `context.spec.version`) for any storefront: it
4
+ specification (spec 1.20, stamped on every event as `context.spec.version`) for any storefront: it
5
5
  sends events in the Segment wire format, applies consent strictly whichever CMP the site uses, reads
6
6
  the GA4 `dataLayer` the site already pushes to, and has no runtime dependencies.
7
7
 
@@ -63,7 +63,7 @@ collects, is a settings change and never a deploy:
63
63
  | `consent` | **Required.** The page's CMP: `{ provider: 'didomi' \| 'onetrust' \| 'cookie' \| 'forwarded' \| 'static', ...adapterOptions }`, or a consent adapter of your own. A preset may supply defaults for a provider. |
64
64
  | `identityCookies` | `{ anonymousId, sessionId }`: the names of your own first-party device and session cookies. `sessionId` is always read from here; without it the SDK keeps its own session (see [Session ids](#session-ids)). `anonymousId` is read only when the settings name no device cookie: see [Device ids](#device-ids). |
65
65
  | `autocapture` | `false`, or per tracker `{ promotions, productLists, recommendations, exposures }`, each `false` or its options. All on by default: they report only what the page tags. |
66
- | `identity` | The signed-in visitor, `{ userId, emailSha256 }`. `userId` goes on every event; the `identify` is sent once per session and user. |
66
+ | `identity` | The signed-in visitor, `{ userId, emailSha256, token }`. `userId` goes on every event; the `identify` is sent once per session and user, and again once a `token` arrives. `token` is the identity token your server signs for the user on this page view (3.26, see [Verified sign-ins](#verified-sign-ins)). |
67
67
  | `getCurrency`, `getShipToCountry`, `getLocale` | Read per event; see below. |
68
68
  | `preset` | A platform preset, passed in by the host. |
69
69
  | `pageType` | `context.page.type` of this page's page view. |
@@ -220,6 +220,7 @@ Since 3.19 (spec 1.12), a search box's suggestions are their own event:
220
220
  | `queryParamAllowlist` | none | Keep only these query params (plus campaign params) in `context.page`, and in a clicked link's `href`, which leaves another site's link as origin and path only (3.22.2). Patterns are anchored and case-insensitive. |
221
221
  | `queryParamBlocklist` | `[]` | Strip these params. Ignored when an allowlist is given. |
222
222
  | `sensitiveParamAllowlist` | `[]` | Whatever else is configured, a param is always dropped from every reported URL when its name contains `email`, `token`, `password`, `secret`, `auth`, `session`, `phone`, `address`, `card`, `customerid` and the like (see `SENSITIVE_PARAM_FRAGMENTS` in `src/context.js`), or when its value is an email address or a card-length number — campaign params and the referrer included. This exempts names from the first rule, for a false positive such as an `author` filter; nothing exempts a value. |
223
+ | `identityToken` | none | The identity token your server signed for the user `getUserId` names, read once: on each `identify` as `context.identity_token` and with each onsite decision, until `reset()`, a sign-out or another user's `identify` (3.26, see [Verified sign-ins](#verified-sign-ins)). |
223
224
  | `getAnonymousId`, `getUserId`, `getSessionId` | none | Identity accessors. Without `getSessionId` the SDK keeps its own session (see [Session ids](#session-ids)); a missing or empty device id gives way to the SDK's own (see [Device ids](#device-ids)). |
224
225
  | `getExperiments`, `getAudiences`, `getDecisions`, `getRecommendations`, `getExtensions` | none | Read per event into the matching `context` field. Without `getDecisions`, `context.decisions` is what `recordExposure` last recorded per slot. |
225
226
  | `pageType` | `null` | `context.page.type` before the first `page()` call. |
@@ -465,6 +466,12 @@ can include tax where `value` does not. It is `null`, so every rule on it fails,
465
466
  sends a Cart Updated, and again after one without a `value`. Send `cartUpdated` after every confirmed basket change, as the spec asks, or
466
467
  a basket audience goes stale.
467
468
 
469
+ Since 3.27, `campaign.source`, `campaign.medium`, `campaign.campaign`, `campaign.content` and
470
+ `campaign.term` are the campaign the visit arrived from: the `utm_*` tags of the first page of the
471
+ visit that had any (a page view records them), kept for the visit. They are text, compared trimmed
472
+ and in any case with `eq`, `neq`, `in` (a list) or `contains`. A visit that arrived untagged fails
473
+ every rule on them, `neq` included, so "not from Facebook" never means "from nowhere".
474
+
468
475
  ### Audiences only some integrations may target
469
476
 
470
477
  Since 3.8, only audiences marked Targetable in the console are membership. Pass the membership
@@ -508,8 +515,8 @@ separate chunk and starts it; otherwise it is never fetched. A page on `createAn
508
515
  itself: `import { startOnsite } from '@thg-agentic/hyper-personalisation-web/onsite'` then
509
516
  `startOnsite(client, options)`. On the CDN, `hp.min.js` loads `onsite.min.js` (and that loads
510
517
  `onsite-render.min.js` once a trigger fires, `onsite-wheel.min.js` for a wheel,
511
- `onsite-answers.min.js` for a date or number question) from beside itself; a self-hosted copy keeps
512
- all four 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-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
513
520
  decision; the renderer and its stylesheet are fetched only when a trigger fires, alongside the
514
521
  decision request, so a page whose forms never fire never downloads them. If the renderer cannot
515
522
  load, the form is not shown (`hp.onsite.debug()` says `the renderer did not load`) and the page goes
@@ -558,20 +565,40 @@ on desktop arms after `delay_ms` (5 s) and once the pointer has been below the t
558
565
  viewport, and fires when it leaves through the top edge, moving up. On mobile it is a fast upward
559
566
  flick (120px at 0.5 px/ms) after 30% of the page, or a return to the tab after 10 s away. Pages
560
567
  (include/exclude globs on the path, `*` matching anything, in any case), devices (`mobile` is a coarse pointer
561
- or under 768px), dates and caps are checked first; then `POST /v1/decisions` is asked for that one
568
+ or under 768px), the campaign the visit arrived from (`arrived_from`), dates and caps are checked
569
+ first; then `POST /v1/decisions` is asked for that one
562
570
  slot. A held-out visitor, or no decision, sees nothing. One overlay per page view: of the forms that
563
571
  fire within 50 ms, the highest `priority`; once one has shown (or the visitor was held out of it),
564
572
  closing it lets no other form in on that page view. A `manual` form, which the site opens on the
565
573
  shopper's click (its own sign-up button), is the shopper asking: it opens whatever its caps, the gap
566
574
  and the page view's allowance say, as Klaviyo's custom-triggered forms do, though never over a
567
- modal on screen (a popup, or a teaser opened from its tab); its pages, devices, dates and audiences
568
- still hold. Asked for twice while it opens, it opens once. With the property's `overlay_gap_minutes`, no popup, sheet or full-screen form
575
+ modal on screen (a popup, or a teaser opened from its tab); its pages, devices, campaign, dates and
576
+ audiences still hold. Asked for twice while it opens, it opens once. With the property's `overlay_gap_minutes`, no popup, sheet or full-screen form
569
577
  shows until that long after the last one this session (1440 is once per session); bars, teasers and
570
578
  inline forms are never held back. A form with `audiences` needs personalisation consent.
571
579
 
580
+ **Arrived from.** A form with `arrived_from` shows only to a visit that landed from a matching
581
+ campaign: `[{ field, match, values }]`, `field` one of `source`, `medium`, `campaign`, `content`,
582
+ `term` (the link's `utm_*` tags), `match` `is` or `contains`, compared trimmed and in any case.
583
+ Every rule must hold; any of a rule's values meets it. The campaign is the landing page's, as GA4's
584
+ session source is: the client keeps the first page of the visit with `utm_*` tags in one store,
585
+ `thg_hp_visit_campaign:<property>` (localStorage, so every tab of the visit reads it; the tags,
586
+ when the visit was last active and its session id once kept on the device, never a device or
587
+ person id, the same strictly necessary basis as the onsite counters). Later pages without tags, or
588
+ with others, keep it until the visit ends as the SDK's session does: 30 minutes without a page or
589
+ an event, or a new session id. Each tag is read up to 100 characters. The tags are read when the
590
+ client is created, so a later `replaceState` cannot lose them. A sign-out or a withdrawn consent
591
+ forgets it; a first refusal does not, as the forms judge it without consent. The session id is
592
+ written only while analytics is granted, and without localStorage the campaign holds for the page. It needs no consent; a visit with no campaign meets no rule
593
+ (`not eligible: not from its campaign`), and an `arrived_from` this SDK cannot read never matches.
594
+ The decision request for such a form carries it as `visit_campaign` (never logged), and the public API answers no
595
+ form unless the rules hold, so an SDK older than 3.26 never shows one. A preview link reads its own
596
+ URL's tags: the console's Preview on site link adds them. Click ids
597
+ (`fbclid`, `gclid`) are not a campaign.
598
+
572
599
  | Option | |
573
600
  |---|---|
574
- | `audiences()` | The visitor's session audiences, when the page evaluates them: a form targeting none of them is skipped. Without it the server decides. |
601
+ | `audiences()` | The visitor's session audiences, when the page evaluates them: a form targeting none of them is skipped. Without it HP's server decides, from the visitor's stored audiences and the in-visit audiences whose rules hold in this visit (the runtime evaluates them from `GET /v1/audiences/datafile` and sends them with the decision). |
575
602
  | `subscribed()` | True for a visitor the page knows is subscribed, for forms with `exclude_subscribed`. |
576
603
  | `servingHost`, `gatewayHost` | Where decisions and claims go (default: the host the SDK was pointed at) and capture goes (default: where events go). |
577
604
  | `debug` | Log why each form did or did not show. Also on with `?hp_debug=onsite`. |
@@ -661,7 +688,7 @@ each form did or did not show, and a preview link (`?hp_preview=`) counts nothin
661
688
  `onsite.min.js` under 5.875 KiB gzipped (about 5.6 KiB), `onsite-render.min.js` under 14 KiB (about
662
689
  13.7 KiB), so a page that shows a form loads about 19 KiB of onsite code and one whose forms never
663
690
  fire about 5.6 KiB; `onsite-wheel.min.js` under 8 KiB (about 1.3 KiB), `onsite-answers.min.js` under
664
- 2 KiB (about 1.5 KiB). The core carries only the loader.
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.
665
692
 
666
693
  Try it locally: `node tools/local/serve.mjs`, then
667
694
  `http://localhost:8099/onsite.html?hp_debug=onsite` (offline mocks by default, `?mode=live` for
@@ -904,6 +931,29 @@ base64). `bootstrap`'s `identity.emailSha256` and `identify`'s `email_sha256` (s
904
931
  either, and `normaliseSha256(value)` converts either to the lowercase hex the spec wants. It re-encodes the same digest and never
905
932
  re-hashes, so pass the hash, never the email.
906
933
 
934
+ ## Verified sign-ins
935
+
936
+ A publishable key is public, so a `userId` the browser sends is only a claim: the identity graph
937
+ records it and never joins the device to that customer unless the integrator vouches for it (ADR
938
+ 0067). Your server signs an identity token for each signed-in page view, a JWT `ES256` (header
939
+ `typ: "JWT"`) over `{ sub: <userId>, aud: "hyper-personalisation", exp }` (at most 24 hours) with a
940
+ P-256 key whose public half is registered on the source, and the page hands it over:
941
+
942
+ ```js
943
+ bootstrap(writeKey, { consent, identity: { userId: customer.id, token } });
944
+ // or, calling identify yourself:
945
+ analytics.identify({ userId: customer.id }, { identity_token: token });
946
+ ```
947
+
948
+ The token goes on the `identify` as `context.identity_token`, and with each onsite decision, where
949
+ it is what lets a promo reminder's code be shown. The SDK keeps one token, for the user it was
950
+ signed for: `reset()`, a `Signed Out` or another user's `identify` drops it, and the same user's
951
+ `identify` without one keeps it; a single-page app passes a fresh one on `identify` before the
952
+ last expires. A session identifies again once, when a token first appears for
953
+ the user, and never because a page (one served from a shared cache) has none. The ingest checks it,
954
+ stamps `context.identity_verified` and never stores it. Steps, key generation and rotation:
955
+ [Verify signed-in shoppers](../../apps/docs/src/content/docs/guides/verify-signed-in-shoppers.mdx).
956
+
907
957
  ## Handing off to server producers
908
958
 
909
959
  Server-side producers (for example an order service using the Java SDK) read two first-party cookies:
@@ -1046,6 +1096,7 @@ SDK per page.
1046
1096
  | `preview` | `thg_hp_preview` | session cookie | a trader's preview token from `?hp_preview=` (3.15, see [Preview](#preview)) |
1047
1097
  | `debug` | `thg_hp_debug` | sessionStorage | a developer's debug token from `?hp_debug=` (3.18), checked against the settings on every page |
1048
1098
  | `onsite` | `thg_hp_onsite:<property>` | localStorage, sessionStorage | onsite forms' opaque counters per slot and a subscribed flag; never contact data (see [Onsite forms](#onsite-forms)) |
1099
+ | `visitCampaign` | `thg_hp_visit_campaign:<property>` | localStorage | the campaign tags the visit landed with, when it was last active and its session id once kept; ended with the session (see [Onsite forms](#onsite-forms)) |
1049
1100
  | — | `thg_hp_conformance_page_type` | sessionStorage | the previous page's type, only while the development-only conformance checker runs |
1050
1101
 
1051
1102
  Keys are scoped by property because one origin can serve several tenants. The names the SDK used
package/dist/hp.min.js CHANGED
@@ -1,3 +1,3 @@
1
- (()=>{var sn=e=>{throw TypeError(e)};var zr=(e,t,n)=>t.has(e)||sn("Cannot "+n);var an=(e,t,n)=>t.has(e)?sn("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,n);var O=(e,t,n)=>(zr(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 cn=e=>(e-Math.floor(e))*2**32>>>0,Gr=Ae.slice(0,8).map(e=>cn(Math.sqrt(e))),Wr=Ae.map(e=>cn(Math.cbrt(e))),Y=(e,t)=>e>>>t|e<<32-t;function un(e){let t=new TextEncoder().encode(String(e)),n=new Uint32Array((t.length+8>>6)*16+16);t.forEach((i,s)=>{n[s>>2]|=i<<24-s%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(Gr),o=new Uint32Array(64);for(let i=0;i<n.length;i+=16){for(let y=0;y<64;y++){if(y<16){o[y]=n[i+y];continue}let b=o[y-15],v=o[y-2],A=Y(b,7)^Y(b,18)^b>>>3,m=Y(v,17)^Y(v,19)^v>>>10;o[y]=o[y-16]+A+o[y-7]+m}let[s,c,u,d,f,p,g,_]=r;for(let y=0;y<64;y++){let b=Y(f,6)^Y(f,11)^Y(f,25),v=_+b+(f&p^~f&g)+Wr[y]+o[y]|0,m=(Y(s,2)^Y(s,13)^Y(s,22))+(s&c^s&u^c&u)|0;[_,g,p,f,d,u,c,s]=[g,p,f,d+v|0,u,c,s,v+m|0]}[s,c,u,d,f,p,g,_].forEach((y,b)=>{r[b]+=y})}return Array.from(r,i=>i.toString(16).padStart(8,"0")).join("")}var lt=(e,t)=>e<<t|e>>>32-t;function ln(e){let t=new Uint32Array((e.length+8>>6)*16+16);e.forEach((i,s)=>{t[s>>2]|=i<<24-s%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 i=0;i<t.length;i+=16){for(let p=0;p<80;p++)r[p]=p<16?t[i+p]:lt(r[p-3]^r[p-8]^r[p-14]^r[p-16],1);let[s,c,u,d,f]=n;for(let p=0;p<80;p++){let g,_;p<20?(g=c&u|~c&d,_=1518500249):p<40?(g=c^u^d,_=1859775393):p<60?(g=c&u|c&d|u&d,_=2400959708):(g=c^u^d,_=3395469782);let y=lt(s,5)+g+f+_+r[p]|0;[f,d,u,c,s]=[d,u,lt(c,30),s,y]}[s,c,u,d,f].forEach((p,g)=>{n[g]+=p})}let o=new Uint8Array(20);return n.forEach((i,s)=>{o[s*4]=i>>>24,o[s*4+1]=i>>>16,o[s*4+2]=i>>>8,o[s*4+3]=i}),o}var Jr="e28e8ada-5b76-4209-bba9-79b823a0af75",Yr=e=>Array.from(e,t=>t.toString(16).padStart(2,"0")).join("");function dn(e,t){let n=Uint8Array.from(e.replace(/-/g,"").match(/../g),c=>Number.parseInt(c,16)),r=new TextEncoder().encode(t),o=new Uint8Array(16+r.length);o.set(n),o.set(r,16);let i=ln(o).slice(0,16);i[6]=i[6]&15|80,i[8]=i[8]&63|128;let s=Yr(i);return`${s.slice(0,8)}-${s.slice(8,12)}-${s.slice(12,16)}-${s.slice(16,20)}-${s.slice(20)}`}var se=(e,t)=>typeof e=="string"&&e!==""&&e.length<=t?e:null;function Ue(e,t){return se(e,64)??se(t,256)}function fn({sessionId:e,slot:t,arm:n}={}){let r=se(e,256);return!r||!se(t,256)||!se(n,256)?null:dn(Jr,`${r}:${t}:${n}`)}var Xr="4b1f2c7e-9a3d-4e58-b6c1-2d7f0a9e8c53";function pn({sessionId:e,surface:t}={}){let n=se(e,256);return!n||!se(t,64)?null:dn(Xr,`${n}:${t}`)}var Zr=Array.from({length:11},(e,t)=>t/10);function Qr(e,t){if(!e.isIntersecting)return!1;let{intersectionRect:n,boundingClientRect:r,rootBounds:o}=e;if(!n||!r)return!0;let i=n.width*n.height,s=r.width*r.height,c=o?Math.min(s,o.width*o.height):s;return c>0&&i/c>=t}function Q(e){let{selector:t,onViewable:n,visibleRatio:r=.5,dwellMs:o=1e3,root:i=document}=e,s=new Map,c=new WeakSet,u=new Set,d=m=>{s.has(m)||s.set(m,setTimeout(()=>{s.delete(m),n(m)&&(p?.unobserve(m),u.delete(m))},o))},f=m=>{clearTimeout(s.get(m)),s.delete(m)},p=typeof IntersectionObserver>"u"?null:new IntersectionObserver(m=>{for(let E of m){let w=E.target;if(!Qr(E,r)){u.delete(w),f(w);continue}u.add(w),g()&&d(w)}},{threshold:Zr}),g=()=>typeof document>"u"||document.visibilityState!=="hidden",_=()=>{if(g())for(let m of u)d(m);else for(let m of u)f(m)};document.addEventListener("visibilitychange",_);let y=()=>{for(let m of i.querySelectorAll(t))c.has(m)||(c.add(m),p?.observe(m))},b=typeof MutationObserver>"u"?null:new MutationObserver(()=>y()),v=()=>{y(),b?.observe(i===document?document.body:i,{childList:!0,subtree:!0})},A=i===document&&!document.body;return A?document.addEventListener("DOMContentLoaded",v,{once:!0}):v(),()=>{A&&document.removeEventListener("DOMContentLoaded",v),document.removeEventListener("visibilitychange",_),p?.disconnect(),b?.disconnect();for(let m of s.values())clearTimeout(m);s.clear(),u.clear()}}function dt(e,t={}){if(typeof window>"u"||typeof document>"u")return()=>{};let{selector:n="[data-hp-exposure]",visibleRatio:r=.5,dwellMs:o=1e3,root:i=document}=t;return Q({selector:n,root:i,visibleRatio:r,dwellMs:o,onViewable(s){let c=s.dataset?.hpExposure?.trim();return c&&e.surfaceViewed({surface:c}),!0}})}var mn=e=>{try{return new URL(e,document.baseURI).toString()}catch{return e}};function ft(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:i=1e3,root:s=document}=t,c=new Set,u=y=>y.closest?.(n)??null,d=y=>{let b=y.dataset.hpList?.trim();return b?{list_id:b,category:y.dataset.hpListCategory?.trim()||null}:null},f=y=>Array.from(y.querySelectorAll(r)).filter(b=>u(b)===y),p=(y,b)=>{try{let v=JSON.parse(y.dataset.hpProduct??"");return!v||typeof v!="object"||!v.product_id?null:{...v,position:v.position??b+1,...v.url?{url:mn(v.url)}:{},...v.image_url?{image_url:mn(v.image_url)}:{}}}catch{return null}},g=Q({selector:`${n} ${r}`,root:s,visibleRatio:o,dwellMs:i,onViewable(y){let b=u(y);if(!b||b.dataset.hpListView==="manual")return!0;let v=d(b);if(!v||c.has(v.list_id))return!0;let A=new Set,m=f(b).map(p).filter(E=>!E||A.has(E.product_id)?!1:(A.add(E.product_id),!0));return m.length===0||(c.add(v.list_id),e.productListViewed({...v,products:m})),!0}}),_=y=>{let v=y.target?.closest?.("a[href]")?.closest(r);if(!v)return;let A=u(v),m=p(v,A?f(A).indexOf(v):0);m&&e.productClicked({list_id:A?d(A)?.list_id??null:null,products:[m]})};return document.addEventListener("click",_,!0),()=>{document.removeEventListener("click",_,!0),g()}}function R(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 $e(e,...t){let n=R(e,...t);if(n===null)return null;let r=Number(n);return Number.isFinite(r)?Math.trunc(r):null}function eo(e,t){let n=R(e,"hpPromotion");return n?{promotion_id:n,name:R(e,"hpPromotionName"),creative:R(e,"hpPromotionCreative"),position:R(e,"hpPromotionSlot")??String(t+1)}:null}function pt(e,t={}){if(typeof window>"u"||typeof document>"u")return()=>{};let{selector:n="[data-hp-promotion]",resolve:r=eo,visibleRatio:o=.5,dwellMs:i=1e3,root:s=document}=t,c=new Set,u=p=>{let g=Array.from(s.querySelectorAll(n)),_=g.indexOf(p);try{return r(p,_<0?g.length:_)}catch{return null}},d=Q({selector:n,root:s,visibleRatio:o,dwellMs:i,onViewable(p){let g=u(p);return!g||c.has(g.promotion_id)?!1:(c.add(g.promotion_id),e.promotionViewed(g),!0)}}),f=p=>{let g=p.target;if(!g||typeof g.closest!="function")return;let _=g.closest(n),y=g.closest("a[href]");if(!_||!y||!_.contains(y)&&!y.contains(_))return;let b=u(_);b&&e.promotionClicked({...b,href:y.getAttribute("href")})};return document.addEventListener("click",f,!0),()=>{document.removeEventListener("click",f,!0),d()}}function to(e){let t=R(e,"hpRecoRequest"),n=R(e,"hpRecoPlacement"),r=R(e,"hpRecoStrategy");if(!t||!n||!r)return null;let o=R(e,"hpRecoHoldout");return{recommendation_request_id:t,placement:n,strategy:r,recipe:R(e,"hpRecoRecipe"),algorithm_version:R(e,"hpRecoAlgorithmVersion"),experiment:R(e,"hpRecoExperiment"),variant:R(e,"hpRecoVariant"),holdout:o===null?null:o==="true",assignment_bucket:$e(e,"hpRecoBucket"),assignment_unit_kind:R(e,"hpRecoUnitKind"),candidate_set_fingerprint:R(e,"hpRecoFingerprint"),candidate_set_size:$e(e,"hpRecoCandidates"),ranked_by:R(e,"hpRecoRankedBy"),served_at:R(e,"hpRecoServedAt")}}function no(e,t){let n=R(e,"hpRecoProduct");if(!n)return null;let r=R(e,"hpRecoPrice");return{product_id:n,sku:R(e,"hpRecoSku"),name:R(e,"hpRecoName"),brand:R(e,"hpRecoBrand"),price:r===null||Number.isNaN(Number(r))?null:Number(r),position:$e(e,"hpRecoPosition")??t+1}}function mt(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=to,resolveTile:i=no,visibleRatio:s=.5,dwellMs:c=1e3,root:u=document}=t,d=new Set,f=new Map,p=new Map,g=(m,...E)=>{try{return m(...E)}catch{return null}},_=m=>typeof m.closest=="function"?m.closest(n):null,y=m=>Array.from(m.querySelectorAll(r)),b=(m,E)=>{if(p.delete(E.recommendation_request_id),d.has(E.recommendation_request_id))return;let w=y(m).map((S,T)=>g(i,S,T)).filter(S=>S?.product_id);if(w.length===0)return;d.add(E.recommendation_request_id);let h=[...f.get(E.recommendation_request_id)?.values()??[]].sort((S,T)=>S.position-T.position);e.recommendationsViewed({...E,products:w,viewable:h})},v=Q({selector:`${n} ${r}`,root:u,visibleRatio:s,dwellMs:c,onViewable(m){let E=_(m);if(!E)return!0;let w=g(o,E);if(!w)return!0;let h=w.recommendation_request_id,S=g(i,m,y(E).indexOf(m));if(S?.product_id){f.has(h)||f.set(h,new Map);let T=f.get(h);T.has(S.position)||T.set(S.position,{position:S.position,product_id:S.product_id,viewable_at:new Date().toISOString()})}return!d.has(h)&&!p.has(h)&&p.set(h,setTimeout(()=>b(E,w),0)),!0}}),A=m=>{let E=m.target;if(!E||typeof E.closest!="function")return;let w=E.closest(r);if(!w)return;let h=E.closest("[data-hp-reco-interaction]"),S=E.closest("a[href]"),T=S&&(w.contains(S)||S.contains(w));if(!(h&&w.contains(h))&&!T)return;let D=_(w);if(!D)return;let K=g(o,D);if(!K)return;let G=g(i,w,y(D).indexOf(w));if(!G?.product_id)return;let B=K.recommendation_request_id;d.has(B)||(clearTimeout(p.get(B)),b(D,K)),e.productClicked({recommendation_request_id:K.recommendation_request_id,interaction:R(h??w,"hpRecoInteraction")??"navigate",products:[G]})};return document.addEventListener("click",A,!0),()=>{document.removeEventListener("click",A,!0);for(let m of p.values())clearTimeout(m);p.clear(),v()}}var we=new Set(["home","list","product","search","basket","checkout","order_confirmation","login","register","account","info","blog","other"]),ro=new Set(["products"]),hn=e=>e==null;function ht(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=>ht(r,t)):Object.fromEntries(Object.entries(e).filter(([,r])=>!hn(r)).map(([r,o])=>[r,ht(o,t)]));return t.delete(e),n}function gt(e){if(!e)return e;let t=ht(e);for(let n of ro)n in e&&hn(e[n])&&(t[n]=e[n]);return t}function gn(){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 oo=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 oo.has(t.toLowerCase())?null:t}function ee(){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 yn="1.18";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 so={gclid:"gclid",fbclid:"fbclid",ttclid:"ttclid"},io=/[a-z0-9._%+-]+@[a-z0-9-]+(\.[a-z0-9-]+)*\.[a-z]{2,}/i,ao=/\d(?:[ -]?\d){12,}/,co=new Set(["gclid","fbclid","ttclid","msclkid"]);function Sn(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=>io.test(o)||r&&ao.test(o))}function uo(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,i]of[...Object.entries(r),...Object.entries(so)]){let s=t.get(o);s&&!Sn(s,o)&&(n[i]=s)}return Object.keys(n).length?n:null}var lo=["email","e-mail","password","pass","pwd","token","auth","code","uid","customer_id","postcode","zip","phone","applyCode"],fo=["email","password","passwd","pwd","token","secret","auth","session","phone","postcode","zip","address","birth","card","cvv","iban","ssn","customerid","userid"],po=["tel","uid","dob"],mo=["utm_source","utm_medium","utm_campaign","utm_term","utm_content","gclid","fbclid","ttclid","msclkid"],ho=new Set(lo.map(e=>e.toLowerCase()));function go(e){let t=String(e).toLowerCase();if(ho.has(t))return!0;let n=t.replace(/[-_.]/g,"");return fo.some(o=>n.includes(o))?!0:String(e).replace(/([a-z0-9])([A-Z])/g,"$1 $2").toLowerCase().split(/[^a-z0-9]+/).some(o=>po.includes(o))}function yt(e){return(e??[]).map(t=>{try{return new RegExp(`^${t}$`,"i")}catch{return{test:n=>n.toLowerCase()===String(t).toLowerCase()}}})}function _n(e,t={}){if(!e)return null;try{let n=new URLSearchParams(e),r=t.queryParamAllowlist?yt([...t.queryParamAllowlist,...mo]):null,o=yt(t.queryParamBlocklist),i=yt(t.sensitiveParamAllowlist);for(let c of new Set(n.keys()))(go(c)&&!i.some(d=>d.test(c))||n.getAll(c).some(d=>Sn(d,c))||(r?!r.some(d=>d.test(c)):o.some(d=>d.test(c))))&&n.delete(c);let s=n.toString();return s?`?${s}`:""}catch{return""}}function bn(e,t,n={}){if(!e)return null;try{let r=new URL(e);return t&&r.origin===t?r.origin+r.pathname+(_n(r.search,n)??""):r.origin+r.pathname}catch{return null}}function wt(e,t={}){if(typeof e!="string"||typeof location>"u")return null;try{let n=new URL(e,location.href);return n.protocol!=="https:"&&n.protocol!=="http:"?null:bn(n.href,location.origin,t)}catch{return null}}function St(e){if(typeof e!="string")return null;let t=e.trim().toUpperCase();return/^[A-Z]{3}$/.test(t)?t:null}function wn(e){if(typeof e!="string")return null;let t=e.trim().toUpperCase();return/^[A-Z]{2}$/.test(t)?t:null}function _t(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 yo(e){return{...e.propertyId==null?{}:{property_id:String(e.propertyId)},channel:e.channel??null,market:e.market??null,environment:e.environment??null}}function wo(e){let t=typeof window<"u"?window.location:null,n=t?_n(t.search,e):null;return{url:t?t.origin+t.pathname+(n??""):e.pageUrl??null,path:t?t.pathname:e.pagePath??null,search:n??null,referrer:typeof document<"u"?bn(document.referrer,t?.origin,e):null,title:typeof document<"u"&&document.title||null,type:e.pageType??null}}var ve;function So(){if(ve!==void 0)return ve;try{ve=globalThis.Temporal?.Now?.timeZoneId?.()||Intl.DateTimeFormat().resolvedOptions().timeZone||null}catch{ve=null}return ve}function In(e,t={}){let n=typeof window<"u"?window.location:null,r={library:{name:e.libraryName,version:e.libraryVersion},spec:{version:yn},source:yo(e),session_id:M(e.getSessionId,null),identity_trust:F(M(e.getAnonymousId,null))?"device":"none",page:wo(e),campaign:n?uo(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:St(M(e.getCurrency,e.currency)),locale:_t(M(e.getLocale,e.locale)),timezone:So(),country:wn(e.country),ship_to_country:wn(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 xn(r,t)}function xn(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]=xn(e[r],o):o!==void 0&&(n[r]=o);return n}var ce=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"}),_o={retry:"cdp.retry",sessionSignals:"cdp_session_signals",identified:"cdp_identified",previousPage:"cdp_prev_page_message_id"},bt={...ce},kn=!1;function Ve(e){let t={...ce};for(let[n,r]of Object.entries(e??{})){if(!(n in ce))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}bt=t}function L(e){return bt[e]}var bo="_",An=e=>e==null||e===""?bo:String(e);function j(e,t,n){let r=`${e}:${An(t)}`;return n==null||n===""?r:`${r}:${n}`}function vn(e,t){return`${e}:${An(t)}:`}function Be(){if(!kn){kn=!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(_o)){if(n!==o&&!n.startsWith(`${o}:`))continue;let i=bt[r]+n.slice(o.length);t.getItem(i)===null&&t.setItem(i,t.getItem(n)),t.removeItem(n)}}catch{}}}}var xt=1800*1e3,je=()=>{try{return typeof sessionStorage>"u"?null:sessionStorage}catch{return null}},It=()=>{try{return typeof localStorage>"u"?null:localStorage}catch{return null}};function En(e,t=()=>Date.now()){return{read(){try{let n=je()?.getItem(e),r=n?JSON.parse(n):null;return!r||t()-r.savedAt>xt?(r&&je()?.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?je()?.removeItem(e):je()?.setItem(e,JSON.stringify({savedAt:t(),items:n,anonymousId:r}))}catch{}}}}var Io=400*24*60*60;function te(e,t,n,r){if(typeof document>"u")return!1;try{let o=typeof location<"u"&&location.protocol==="https:"?"; Secure":"",i=r?`; Domain=${r}`:"",s=n===null?"":`; Max-Age=${n}`;return document.cookie=`${e}=${encodeURIComponent(t)}; Path=/${s}; SameSite=Lax`+i+o,!0}catch{return!1}}function xo({name:e,domain:t=null,legacyKey:n,read:r,mint:o,mayStore:i,carried:s=null}){let c=null;try{c=It()?.getItem(n)||null}catch{c=null}let u=r(e)??c??s,d=!1,f=()=>{if(!(d||u===null||!i())&&(d=te(e,u,Io,t),!(!d||c===null)))try{It()?.removeItem(n),c=null}catch{}};return{get(){return u??(u=o()),f(),u},peek:()=>u,persist:f,forget(){te(e,"",0,t),u=null,d=!1;try{It()?.removeItem(n)}catch{}c=null}}}function Cn(e,{carried:t=null,mayStore:n,orOwn:r=!1}){let o=e.anonymousIdSource,i=()=>xo({name:L("anonymousId"),domain:e.consentCookieDomain??null,legacyKey:j(L("anonymousId"),e.propertyId),read:$,mint:ee,mayStore:n,carried:t});if(o?.source==="hp_cookie"){let u=i();return e.getAnonymousId=()=>u.get(),u}if(o?.source==="site_cookie"&&o.cookie){let u=o.cookie;e.getAnonymousId=()=>$(u)}if(!r)return null;let s=e.getAnonymousId,c=i();return e.getAnonymousId=()=>F(M(s,null))??c.get(),c}var ko=200;function Pn(e,t,n=()=>Date.now()){let r=()=>j(L("carried"),e),o=!1;function i(){try{let s=JSON.parse(sessionStorage.getItem(r())??"null");return!s||!(n()-s.savedAt<=xt)?[]:Array.isArray(s.calls)?s.calls:[]}catch{return[]}}return{take(){let s=i();try{sessionStorage.removeItem(r())}catch{}return s},save(s){try{return o||!t()?!1:(sessionStorage.setItem(r(),JSON.stringify({savedAt:n(),calls:[...i(),...s].slice(-ko)})),!0)}catch{return!1}},close(){o=!0}}}var Gi=ce.consent,He=Object.freeze({visitor:"visitor",host:"host"}),On=()=>({basis:He.host}),Ao="hp-consent",ue=["analytics","marketing","personalisation","ad_user_data","ad_personalization"],Ln={analytics:"a",marketing:"m",personalisation:"p",ad_user_data:"aud",ad_personalization:"adp"},X=()=>typeof window<"u",Tn=()=>X()&&typeof window.cookieStore?.addEventListener=="function",vo=e=>e===!0?!0:e===!1?!1:null;function Se(e){if(!e||typeof e!="object")return null;let t={};for(let n of ue)t[n]=vo(e[n]);return t}function At(e,t){return!e||!t?e===t:ue.every(n=>e[n]===t[n])}function vt(e){if(!e)return"";let t=[];for(let n of ue){let r=e[n];(r===!0||r===!1)&&t.push(`${Ln[n]}=${r?1:0}`)}return t.join("&")}function Et(e){return{[Ao]:vt(Se(e))}}function Ee(e){let t=Se({});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(Ln).map(([i,s])=>[s,i])),o=new Set;for(let i of n.split("&")){let s=i.indexOf("=");if(s<=0)continue;let c=r[i.slice(0,s).trim()],u={1:!0,0:!1}[i.slice(s+1).trim()]??null;!c||u===null||o.has(c)||(t[c]===null?t[c]=u:t[c]!==u&&(t[c]=null,o.add(c)))}return t}function Ct(e,t){if(!t)return e;let n=r=>{if(!r)return r;let o={...r};for(let i of ue)i!=="analytics"&&t[i]!==!0&&(o[i]=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 Pt(e,t={}){return{...e,ad_user_data:t.ad_user_data??e.marketing,ad_personalization:t.ad_personalization??e.marketing}}function qe(e,t){let n=!0;return{notify:()=>{if(n)try{let o=e();o&&t(o)}catch{}},stop:()=>n=!1}}var Eo={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 Co(e,t){if(!t?.length)return null;let n=!1;for(let[r,o]of Object.entries(e)){let i=String(o?.id??r).toLowerCase();if(t.some(c=>{let u=String(c).toLowerCase();return i===u||i.startsWith(`${u}-`)})&&(n=!0,o?.enabled===!0))return!0}return n?!1:null}function Nn(e={}){let t={...Eo,...e.purposes};function n(){let r=X()?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 i=s=>Co(o,t[s]);return Pt({analytics:i("analytics"),marketing:i("marketing"),personalisation:i("personalisation")},{ad_user_data:i("ad_user_data"),ad_personalization:i("ad_personalization")})}return{name:"didomi",read:n,observesChanges:!0,subscribe(r){if(!X())return()=>{};let o=qe(n,r),i={event:"consent.changed",listener:o.notify};return window.didomiEventListeners=window.didomiEventListeners||[],window.didomiEventListeners.push(i),window.didomiOnReady=window.didomiOnReady||[],window.didomiOnReady.push(s=>{o.notify(),(s??window.Didomi)?.on?.("consent.changed",o.notify)}),window.Didomi?.on?.("consent.changed",o.notify),o.stop}}}function kt(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 Rn(e={}){let t={analytics:"C0002",personalisation:"C0003",marketing:"C0004",...e.groups},n=e.impliedConsent===!0;function r(){let s=kt($("OptanonConsent"));if(s.groups){let d={};for(let f of s.groups.split(",")){let[p,g]=f.split(":");p?.trim()&&(d[p.trim()]=g==="1"?!0:g==="0"?!1:null)}return f=>d[f]??!1}let c=X()?window.OnetrustActiveGroups:void 0;if(typeof c!="string"||!c.length)return null;let u=new Set(c.split(",").map(d=>d.trim()).filter(Boolean));return d=>u.has(d)}function o(){if($("OptanonAlertBoxClosed"))return!0;try{if(X()&&window.OneTrust?.IsAlertBoxClosed?.()===!0)return!0}catch{}return Number.parseInt(kt($("OptanonConsent")).interactionCount,10)>0?!0:n&&X()&&(!!window.OneTrust||typeof window.OnetrustActiveGroups=="string")}function i(){if(!o())return null;let s=r();if(!s)return null;let c=p=>t[p]?s(t[p]):null,u=Pt({analytics:c("analytics"),marketing:c("marketing"),personalisation:c("personalisation")},{ad_user_data:c("ad_user_data"),ad_personalization:c("ad_personalization")}),d=kt($("OptanonConsent"));return(typeof navigator<"u"&&navigator.globalPrivacyControl===!0||d.isGpcEnabled==="1")&&(u.marketing=!1,u.ad_user_data=!1,u.ad_personalization=!1),u}return{name:"onetrust",read:i,observesChanges:!0,subscribe(s){if(!X())return()=>{};let c=qe(i,s),u=!1,d=()=>{u||!window.OneTrust?.OnConsentChanged||(u=!0,window.OneTrust.OnConsentChanged(c.notify))};window.addEventListener("OneTrustGroupsUpdated",c.notify);let f=window.OptanonWrapper;return window.OptanonWrapper=function(...g){try{typeof f=="function"&&f.apply(this,g)}finally{d(),c.notify()}},d(),()=>{c.stop(),window.removeEventListener("OneTrustGroupsUpdated",c.notify)}}}}function Po(e){let t=String(e).split(",").map(n=>n.trim()).filter(Boolean);return t.length?new Set(t):null}function Mn(e){let{name:t,categories:n,parse:r=Po,refusedValue:o,source:i="native",changeEvent:s="thg_hp_consent_change"}=e??{};if(typeof t!="string"||t==="")throw new Error("cookieConsent: `name` (the cookie your banner writes) is required");if(!n||typeof n.analytics!="string")throw new Error("cookieConsent: `categories.analytics` (the category id that grants analytics) is required");function c(){let u=$(t);if(u==null)return null;let d;if(o!==void 0&&u===o)d=new Set;else try{d=r(u)}catch{d=null}if(!(d instanceof Set))return null;let f=p=>n[p]?d.has(n[p]):null;return Pt({analytics:f("analytics"),marketing:f("marketing"),personalisation:f("personalisation")},{ad_user_data:f("ad_user_data"),ad_personalization:f("ad_personalization")})}return{name:i,read:c,get observesChanges(){return Tn()},subscribe(u){if(!X())return()=>{};let d=qe(c,u),f=p=>{[...p.changed??[],...p.deleted??[]].some(_=>_?.name===t)&&d.notify()};return window.addEventListener(s,d.notify),window.cookieStore?.addEventListener?.("change",f),()=>{d.stop(),window.removeEventListener(s,d.notify),window.cookieStore?.removeEventListener?.("change",f)}}}}function Dn(e={}){let t=e.name??L("consent"),n=()=>{let r=$(t);if(r==null)return null;let o=Ee(r);return o.analytics==null?null:o};return{name:"forwarded",read:n,get observesChanges(){return Tn()},subscribe(r){if(!X())return()=>{};let o=qe(n,r),i=s=>{[...s.changed??[],...s.deleted??[]].some(u=>u?.name===t)&&o.notify()};return window.cookieStore?.addEventListener?.("change",i),()=>{o.stop(),window.cookieStore?.removeEventListener?.("change",i)}}}}function Un(e){let t=Se(e);return{name:"static",basis:He.host,read:()=>t?{...t}:null,observesChanges:!0,subscribe:()=>()=>{}}}function $n(e){if(e==null)return null;let t=String(e).split("/").map(n=>n.trim()).filter(Boolean).join("/");return t===""?null:t}function Oo(e){let t=e.item_category;if(t!=null&&String(t).includes("/"))return $n(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 $n(n.join("/"))}var Lo=e=>{if(e==null||typeof e=="object")return null;let t=String(e).trim();return t===""?null:t};function To(...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 Fe=e=>To(e.item_group_id,e.item_id);function No(e,t=Fe){if(!e)return null;let n=c=>c==null||c===""||Number.isNaN(Number(c))?null:Number(c),r=c=>{let u=n(c);return u==null?null:Math.round(u*1e6)/1e6},o=c=>{let u=r(c);return u!=null&&u>=0?u:null},i=c=>{let u=n(c);return Number.isInteger(u)&&u>=0?u:null},s=Lo;return{product_id:s(t(e)),sku:s(e.item_id),name:s(e.item_name),brand:s(e.item_brand),variant:s(e.item_variant)??s(e.variant),category:Oo(e),price:r(e.price),discount:o(e.discount),quantity:i(e.quantity),coupon:s(e.coupon),position:i(e.index)!=null?i(e.index)+1:null,url:s(e.url)??s(e.item_url)??null,image_url:s(e.image_url)??s(e.image_link)??null,displayed_sku:s(e.displayed_sku)??s(e.displayed_variant_sku)}}function Ot(e,t=Fe){return(e??[]).map(n=>No(n,t)).filter(n=>n?.product_id)}var Ro=1e3,Mo={shipping:2,payment:3},Do=new Set(["password","google","apple","facebook","magic_link","sso","passkey","other"]),V=e=>{if(e==null||typeof e=="object")return null;let t=String(e).trim();return t===""?null:t},Uo=e=>{if(e==null||e===""||typeof e=="object")return null;let t=Number(e);return Number.isFinite(t)&&t>=0?t:null},Ke=e=>e!==null&&typeof e=="object";function $o(e){return Array.isArray(e.items)?e.items.filter(Ke):null}function Vn(e){let t=V(e)?.toLowerCase().replace(/[\s-]+/g,"_");return t?Do.has(t)?t:t==="email"||t==="email_password"?"password":"other":null}function Vo({ecommerce:e,items:t}){let n=i=>({promotion_id:V(i.promotion_id),name:V(i.promotion_name),creative:V(i.creative_name),position:V(i.creative_slot)}),r=new Set,o=[];for(let i of[n(e),...t.map(n)])!i.promotion_id||r.has(i.promotion_id)||(r.add(i.promotion_id),o.push(i));return o}var Bn=({ecommerce:e,items:t})=>V(e.item_list_id)??V(e.item_list_name)??V(t[0]?.item_list_id)??V(t[0]?.item_list_name),le=(e,t)=>t.products?.length?{event:e,properties:t}:null,Bo=new Set(["product","products","item","items"]);function jo({ecommerce:e}){let t=V(e.item_id),n=V(e.content_type)?.toLowerCase();return!t||n&&!Bo.has(n)?null:{event:"Product Shared",properties:{share_via:V(e.method),products:[{product_id:t}]}}}function Ho(e){let t=o=>le("Product List Viewed",{list_id:Bn(o),products:o.products}),n=o=>{let i=V(o.ecommerce.search_term);return i?{event:"Products Searched",properties:{query:i,...o.products.length?{products:o.products}:{}}}:null},r=o=>i=>i.promotions.map(s=>({event:o,properties:s}));return{view_item:o=>le("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=>le("Product Clicked",{list_id:Bn(o),products:o.products.slice(0,1)}),add_to_cart:o=>le("Product Added",{cart_id:V(o.ecommerce.cart_id),products:o.products}),remove_from_cart:o=>le("Product Removed",{cart_id:V(o.ecommerce.cart_id),products:o.products}),view_cart:o=>({event:"Cart Viewed",properties:{cart_id:V(o.ecommerce.cart_id),value:o.value,currency:o.currency,coupon:V(o.ecommerce.coupon),...o.itemsListed?{products:o.products}:{}}}),begin_checkout:o=>le("Checkout Started",{value:o.value,currency:o.currency,coupon:V(o.ecommerce.coupon),products:o.products}),add_shipping_info:o=>({event:"Checkout Step Completed",properties:{step:e.shipping,step_name:"shipping",shipping_method:V(o.ecommerce.shipping_tier)}}),add_payment_info:o=>({event:"Payment Info Entered",properties:{step:e.payment,step_name:"payment",payment_method:V(o.ecommerce.payment_type)}}),view_promotion:r("Promotion Viewed"),select_promotion:r("Promotion Clicked"),add_to_wishlist:o=>le("Product Added to Wishlist",{products:o.products}),share:jo,login:o=>({event:"Signed In",properties:{method:Vn(o.ecommerce.method)}}),sign_up:o=>({event:"Signed Up",properties:{method:Vn(o.ecommerce.method)}})}}var qo=e=>e.event;function Fo(e,t){if(!Ke(e))return null;if(typeof e.length=="number"&&e[0]==="event"&&typeof e[1]=="string"){let r=Ke(e[2])?e[2]:{};return{name:e[1],entry:r,ecommerce:r}}let n=V(t(e));return n?{name:n,entry:e,ecommerce:Ke(e.ecommerce)?e.ecommerce:e}:null}function Lt(e){return Array.isArray(e)?`[${e.map(Lt).join(",")}]`:e&&typeof e=="object"?`{${Object.keys(e).sort().map(t=>`${JSON.stringify(t)}:${Lt(e[t])}`).join(",")}}`:JSON.stringify(e??null)}function jn(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=Ho({...Mo,...t.steps}),o=t.map??{},i=t.eventName??qo,s=t.productId??Fe,c=new Set(["purchase","refund",...t.ignore??[]]),u=t.dedupeMs??Ro,d=new Map,f=!0;function p(w,h,S){if(u<=0)return!1;let T=`${w}|${S??""}|${Lt(h)}`,D=Date.now();for(let[K,G]of d)D-G>u&&d.delete(K);return d.has(T)?!0:(d.set(T,D),!1)}let g=null,_=new Set;function y(w,h){if(w!=="Product Viewed")return!1;let S=typeof location>"u"?"":location.pathname;S!==g&&(g=S,_.clear());let T=h.products?.[0]?.product_id;return T?_.has(T)?!0:(_.add(T),!1):!1}function b({event:w,properties:h={}},S){if(!w||p(w,h,S)||y(w,h))return;let T=S?{context:{currency:S}}:void 0;if(w==="Signed Out"&&typeof e.signedOut=="function"){e.signedOut(T);return}e.track(w,h,T)}function v(w){let h=t.transform?t.transform(w):w,S=Fo(h,i);if(!S||c.has(S.name))return;let T=Object.hasOwn(o,S.name),D=T?o[S.name]:r[S.name];if(typeof D!="function")return;let K=$o(S.ecommerce),G=K??[],B={...S,items:G,itemsListed:K!==null,products:Ot(G,s),currency:St(S.ecommerce.currency),value:Uo(S.ecommerce.value)};B.promotions=Vo(B);let xe=T?D(h,{...B,toProducts:W=>Ot(W,s)}):D(B);for(let W of[xe].flat())W&&b(W,B.currency)}function A(w){if(f)try{v(w)}catch(h){try{t.onError?.(h,w)}catch{}}}for(let w of n.slice())A(w);let m=n.push;function E(...w){let h=m.apply(this,w);for(let S of w)A(S);return h}return n.push=E,()=>{f=!1,n.push===E&&(n.push=m)}}var Ko="hp_debug",zo=256;function Go(){try{return new URLSearchParams(location.search).get(Ko)}catch{return null}}function Hn(e,t){if(typeof location>"u")return!1;try{let n=Go();if(n!==null){let o=n.trim();o===""||o.length>zo?sessionStorage.removeItem(t):sessionStorage.setItem(t,o)}let r=sessionStorage.getItem(t);return!!(e&&r&&un(r)===e)}catch{return!1}}var _e=class extends Error{},Wo={inHoldout:()=>!0,personalisationGroup:()=>"excluded",servingHeaders:()=>({}),recommendationContext:()=>({}),flush:()=>Promise.resolve(),reset:()=>{}};function Tt(e,t){let n=Wo[e]??(()=>null),r=o=>(console.warn(`[hp] ${String(e)} failed; nothing was sent`,o),n());return function(...i){try{let s=t.apply(this,i);return typeof s?.then=="function"?Promise.resolve(s).catch(r):s}catch(s){if(s instanceof _e)throw s;return r(s)}}}function qn(e){for(let t of Reflect.ownKeys(e)){let{value:n}=Object.getOwnPropertyDescriptor(e,t)??{};typeof n=="function"&&(e[t]=Tt(t,n))}return e}var Ce=Symbol("hp.identityOption");var Jo=4320*60*60,Yo=100,Xo=1e3,Zo=2e3,Fn=500,ze=e=>(e?.unref?.(),e);function Qo(e,t){if(t?.analytics===!0&&e.analytics===!1)return"withdrawn";let n=ue.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 es(e,t,n=L("consent")){if(!(typeof document>"u"))try{let r=typeof location<"u"&&location.protocol==="https:"?"; Secure":"",o=t?`; Domain=${t}`:"";document.cookie=`${n}=${vt(e)}; Path=/; Max-Age=${Jo}; SameSite=Lax`+o+r}catch{}}function ts(e){let t=Ee($(e));return ue.some(n=>t[n]!==null)?t:null}function Kn(e){let{adapter:t,timeoutMs:n=5e3,cookieDomain:r=null,cookieName:o=L("consent"),release:i,announce:s}=e,c=e.discard??(()=>{}),u="pending",d=null,f=null,p=null,g=null,_=!1,y=null,b=[],v=N=>{u=N,e.onStatus?.(N)};function A(){try{return Se(t.read())}catch{return null}}function m(){f&&clearInterval(f),p&&clearTimeout(p),f=null,p=null}let E=()=>typeof window<"u"&&typeof document<"u",w=()=>{try{return typeof t.subscribe=="function"&&t.observesChanges===!0}catch{return!1}};function h(){g&&clearInterval(g),g=null}function S(){_||g||d===null||w()||E()&&document.visibilityState==="hidden"||(g=ze(setInterval(()=>B(A()),Zo)))}let T=()=>u==="pending"||u==="unknown",D=e.store??null,K=()=>{let N=b.splice(0);D?.write([]);for(let H of N)i(H)},G=()=>{let N=b.splice(0);D?.write([]);for(let H of N)c(H)};function B(N){let H=Se(N);if(!H||H.analytics===null)return;let ge=d===null,Z=ge?ts(o):d;if(!ge&&At(Z,H))return;m(),d=H,S(),es(H,r,o);let k=!At(Z,H);if(H.analytics){v("granted"),K(),k&&s({action:Qo(H,Z),state:H,previous:Z,withdrawal:!1});return}G(),Z?.analytics===!0&&s({action:"withdrawn",state:H,previous:Z,withdrawal:!0}),v("denied")}function xe(){p=null,u==="pending"&&(v("unknown"),f&&clearInterval(f),f=ze(setInterval(()=>B(A()),Xo)))}function W(N){if(T()){if(D){D.write(b);return}N?.type!=="visibilitychange"&&!N?.persisted&&G()}}let oe=N=>{document.visibilityState==="hidden"?(h(),W(N)):S()},ke=N=>{h(),W(N)},he=N=>{N?.persisted&&d!==null&&B(A()),S()};return{get status(){return u},get state(){return d?{...d}:null},stamp(){return d?{...d,source:t.name??null,basis:t.basis??He.visitor}:null},admits(){return u==="granted"},hold(N){return!T()||b.length>=Fn?(c(N),!1):(b.push(N),!0)},onHidden:W,start(){_=!1;try{y=t.subscribe?.(N=>B(N))??null}catch(N){e.debug&&console.warn("[hp] consent adapter subscribe failed",N)}E()&&(window.addEventListener("pagehide",ke),window.addEventListener("pageshow",he),document.addEventListener("visibilitychange",oe)),D&&b.length===0&&b.push(...D.read().slice(-Fn)),B(A()),!d&&(f=ze(setInterval(()=>B(A()),Yo)),p=ze(setTimeout(xe,n)))},stop(){_=!0,m(),h(),typeof y=="function"&&y(),E()&&(window.removeEventListener("pagehide",ke),window.removeEventListener("pageshow",he),document.removeEventListener("visibilitychange",oe))}}}var ns=["recommendation","search_rank","banner","offer","layout","copy","price","other"],Ge=e=>typeof e=="string"&&e!=="";function zn(e){return(Array.isArray(e?.decisions)?e.decisions:[]).filter(t=>Ge(t?.slot)&&Ge(t.decision_id)&&t.holdout!==!0).map(({decision_id:t,slot:n,arm:r,kind:o})=>({decision_id:t,slot:n,...Ge(r)&&{arm:r},...ns.includes(o)&&{kind:o}}))}function Gn({key:e,mayStore:t}){let n,r=()=>{if(n)return n;try{let i=JSON.parse(sessionStorage.getItem(e));n=Array.isArray(i)?i.filter(s=>Ge(s?.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(i=>({...i})):null,remember(i){if(!i.length)return;let s=new Set(i.map(c=>c.slot));n=[...r().filter(c=>!s.has(c.slot)),...i],o()},forget(){n=[];try{sessionStorage.removeItem(e)}catch{}}}}function rs(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 We(e,t,n=1e4){return rs(`${t}\0${e}`)%n}function Nt(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 Rt(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}=Nt(e),i=We(t,e.salt),s=u=>Math.round(u*1e4),c=r>0&&i<s(r)?"holdout":!n||i<s(r+o)?"personalised":"excluded";return{holdout:c==="holdout",bucket:i,group:c}}function Wn(e,t){return typeof e!="string"||e===""||t==null||t===""?null:We(t,`bandit-vs-default:${e}`)<1e4/2?"default":"bandit"}var os="hp_preview",ss=256;function Jn(e,t=null){if(typeof location>"u")return $(e);let n=null;try{n=new URLSearchParams(location.search).get(os)}catch{n=null}if(n===null)return $(e);let r=n.trim();return r===""||r.length>ss?(te(e,"",0,t),null):(te(e,r,null,t),r)}var is=40,as=128,cs=5,us=60,Xn=e=>typeof e=="string"&&e!==""&&e.length<=as&&!e.includes(","),Yn=e=>Array.isArray(e)?e.filter(Xn).slice(0,is):[],ls=e=>Array.isArray(e)?e.filter(t=>typeof t=="string").map(t=>t.replaceAll(","," ").trim()).filter(t=>t!=="").slice(0,cs):[],ds=e=>Object.entries(e&&typeof e=="object"?e:{}).filter(([t,n])=>Xn(t)&&Number.isFinite(n)&&n>=1).sort(([,t],[,n])=>n-t).slice(0,us).map(([t,n])=>`${t}:${Math.floor(n)}`);function Mt(e){let t={},n={viewed:Yn(e?.recentProducts),basket:Yn(e?.basketProducts),q:ls(e?.recentSearches),impressed:ds(e?.impressions)};for(let[r,o]of Object.entries(n))o.length>0&&(t[r]=o.join(","));return t}var fs=1800*1e3;function Zn(e,t=Date.now()){try{localStorage.setItem(L("recommendationContext"),JSON.stringify({context:e,until:t+fs}))}catch{}}function Qn(){try{localStorage.removeItem(L("recommendationContext"))}catch{}}var ps="hp_sample",er=1e4;function tr(e,t){return!(typeof t=="number"&&t<1)||e==null||e===""?!0:We(e,ps,er)<Math.round(t*er)}function be(e){return e.trim().toLowerCase().replace(/\s*\/\s*/g,"/").replace(/^\/+|\/+$/g,"")}var ms=2,hs=12;function Pe(e,t=ms){return e.split("/").slice(0,t).join("/")}function Dt(e,t){if(typeof t!="string"||!t.trim())return null;let n=Pe(be(t));return n?(e.unshift(n),e.length=Math.min(e.length,hs),n):null}var de=()=>L("sessionSignals"),Ie=null,Ut=()=>Ie??de();function nr(){try{return Ie?localStorage:sessionStorage}catch{return}}function rr(e,t){let n=t==null?null:String(t),r=e?j(de(),n,e):null;if(r===Ie)return;let o=Ie===null?gs():null;if(Ie=r,!!Ie)try{let i=Ut(),s=vn(de(),n);for(let c of Object.keys(localStorage))c.startsWith(s)&&c!==i&&localStorage.removeItem(c);o&&!localStorage.getItem(i)&&(localStorage.setItem(i,JSON.stringify(o)),sessionStorage.removeItem(de()))}catch{}}function gs(){try{let e=sessionStorage.getItem(de());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:null}catch{return null}}function Je(){return{productViews:0,listViews:0,cartAdds:0,searches:0,recentProducts:[],recentCategories:[],recentBrowse:[],basketProducts:[],basketValue:null,recentSearches:[],impressions:{},browsingCategory:null,recentBrowseCategories:[],browsingListing:null,listViewsByCategory:{},startedAt:0}}function $t(){let e=nr();if(!e)return Je();try{let t=e.getItem(Ut());return t?{...Je(),...JSON.parse(t)}:{...Je(),startedAt:Date.now()}}catch{return{...Je(),startedAt:Date.now()}}}function Vt(e){let t=nr();if(t)try{t.setItem(Ut(),JSON.stringify(e))}catch{}}function Bt(){return $t()}function or(){for(let e of[()=>sessionStorage,()=>localStorage])try{let t=e();t.removeItem(de());for(let n of Object.keys(t))n.startsWith(`${de()}:`)&&t.removeItem(n)}catch{}}var sr=20,ir=200,ys=new Set(["Product Viewed","Product Clicked","Product Added","Product Added to Wishlist"]),ws=new Set(["Product Viewed","Product Added"]),ar=50;function Ye(e,t){let n=Dt(e.recentBrowse,t);return n?(e.recentBrowseCategories=[e.browsingListing?.category??null,...e.recentBrowseCategories].slice(0,e.recentBrowse.length),n):null}function Ss(e,t){let n=e.listViewsByCategory;n[t]=(n[t]??0)+1;let r=Object.keys(n);if(r.length>ar){let o={};for(let i of r.sort((s,c)=>n[c]-n[s]).slice(0,ar))o[i]=n[i];e.listViewsByCategory=o}}function cr(e,t){let n=$t();n.startedAt||(n.startedAt=Date.now());let r=Array.isArray(t?.products)?t.products:[];switch(e){case"Product Viewed":n.productViews+=1,Ye(n,n.browsingCategory);break;case"Product List Viewed":{let s=t?.list_id,c=t?.category;if(!(typeof s=="string"&&s.includes("/")&&!s.startsWith("cdp-")))break;let d=typeof c=="string"&&Pe(be(c))||null,f=d?Pe(be(s)):"";if(!f){n.browsingCategory=null,n.browsingListing=null;break}n.browsingListing={key:f,category:d},Ye(n,f),n.browsingCategory=f,Ss(n,d),n.listViews+=1}break;case"Product List Filtered":{let s=t?.change,c=typeof t?.list_id=="string"?t.list_id:"",u=typeof s?.value=="string"?s.value:"",d=n.browsingListing;if(u&&s?.action!=="removed"&&d&&Pe(be(c))===d.key){let f=Ye(n,`${c}/${u}`);f&&(n.browsingCategory=f)}break}case"Product Added":{n.cartAdds+=1,Ye(n,n.browsingCategory);for(let s of r){let c=s.product_id;typeof c!="string"||!c||(n.basketProducts=[c,...n.basketProducts.filter(u=>u!==c)].slice(0,sr))}break}case"Product Removed":{for(let s of r){let c=s.product_id;typeof c=="string"&&c&&(n.basketProducts=n.basketProducts.filter(u=>u!==c))}break}case"Products Searched":{n.searches+=1;let s=t?.query;if(typeof s=="string"&&s.trim()){let c=s.trim().toLowerCase().slice(0,64);n.recentSearches=[c,...n.recentSearches.filter(u=>u!==c)].slice(0,5)}break}case"Product Clicked":case"Product Added to Wishlist":break;case"Cart Updated":{let s=t?.value;return n.basketValue=typeof s=="number"&&Number.isFinite(s)&&s>=0?s:null,Vt(n),n}default:return n}let o=ys.has(e);if(o)for(let s of r)typeof s.product_id=="string"&&s.product_id&&delete n.impressions[s.product_id];else{for(let c of r){let u=c.product_id;typeof u!="string"||!u||(n.impressions[u]=(n.impressions[u]??0)+1)}let s=Object.keys(n.impressions);if(s.length>ir){let c={};for(let u of s.sort((d,f)=>n.impressions[f]-n.impressions[d]).slice(0,ir))c[u]=n.impressions[u];n.impressions=c}}let i=new Set;for(let s of r){let c=s.product_id;if(o&&typeof c=="string"&&c&&(n.recentProducts=[c,...n.recentProducts.filter(u=>u!==c)].slice(0,sr)),ws.has(e)&&typeof s.category=="string"&&s.category){let u=be(s.category);u&&!i.has(u)&&(i.add(u),Dt(n.recentCategories,u))}}return Vt(n),n}var ur=1800*1e3;function lr({name:e,domain:t=null,mayStore:n,now:r=()=>Date.now(),mint:o=ee}){let i=null,s=0,c=()=>{i!==null&&n()&&te(e,i,ur/1e3,t)};return{get(){let u=r(),d=$(e);return d?i=d:(i===null||u-s>=ur)&&(i=o()),s=u,c(),i},persist:c,forget(){te(e,"",0,t),i=null}}}var z=e=>e!==null&&typeof e=="object"&&!Array.isArray(e),dr=e=>Array.isArray(e)&&e.every(t=>typeof t=="string"),fr=Object.freeze({enabled:!1}),Ht=Object.freeze({enabled:!0,queryParamAllowlist:Object.freeze([])});function pr(e,t){let n=e?.track;return z(n)?(Object.hasOwn(n,t)?n[t]:n.__default)?.enabled!==!1:!0}function _s(e,t){return`${ne(e)}/v1/projects/${encodeURIComponent(t)}/settings`}var bs="https://hp.thgingenuity.com";function ne(e){return e==null||e===""?bs:hr(e)}function mr(e,t){return e!=null&&e!==""?ne(e):t?.startsWith("https://")?t:ne(void 0)}function hr(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 Is(e){if(!z(e))return null;let t=Object.fromEntries(Object.entries(e).filter(([,n])=>typeof n=="boolean"));return Object.keys(t).length?t:null}var jt=e=>typeof e=="number"&&e>=0&&e<=1,xs=/^[0-9a-f]{64}$/;function ks(e){return z(e)?{enabled:e.enabled===!0,tokenSha256:typeof e.tokenSha256=="string"&&xs.test(e.tokenSha256)?e.tokenSha256:null}:{enabled:!1,tokenSha256:null}}function As(e){if(!z(e))return null;let t=Object.fromEntries(Object.entries(e).filter(([,n])=>z(n)&&jt(n.share)&&(n.ramp==null||jt(n.ramp))&&typeof n.salt=="string"&&n.salt!=="").map(([n,r])=>[n,{share:r.share,ramp:r.ramp??null,salt:r.salt,...dr(r.readoutSlots)&&r.readoutSlots.length>0&&{readoutSlots:r.readoutSlots}}]));return Object.keys(t).length?t:null}var vs=/^[A-Za-z0-9!#$%&'*+.^_`|~-]{1,128}$/;function Es(e){return z(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"&&vs.test(e.cookie)?{source:"site_cookie",cookie:e.cookie}:null:null}function Cs(e){let t=Array.isArray(e?.forms)?e.forms.filter(z):[];return t.length===0?null:{forms:t,capture:z(e.capture)?e.capture:null,...Number.isInteger(e.overlay_gap_minutes)?{overlay_gap_minutes:e.overlay_gap_minutes}:{}}}function Ps(e){let t=z(e)?e.hp:null;return z(t)&&typeof t.enabled=="boolean"}function qt(e){let t=z(e)?e.hp:null;if(!z(t)||t.enabled!==!0)return fr;let n=Cs(t.onsite);return{enabled:!0,propertyId:typeof t.propertyId=="string"&&t.propertyId!==""?t.propertyId:null,environment:typeof t.environment=="string"?t.environment:null,consentPurposes:Is(t.consent?.purposes),queryParamAllowlist:dr(t.queryParamAllowlist)?t.queryParamAllowlist:null,anonymousId:Es(t.anonymousId),apiHost:hr(t.apiHost),holdouts:As(t.holdouts),sampleRate:jt(t.sampleRate)?t.sampleRate:1,debug:ks(t.debug),...n&&{onsite:n},plan:z(e.plan)&&z(e.plan.track)?{track:e.plan.track}:null}}var Os=3e3;async function gr(e,t,n=globalThis.fetch,r=Os){try{let o=await n(_s(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 fr;if(!o.ok)return null;let i=await o.json();return Ps(i)?qt(i):null}catch{return null}}var Xe=e=>j(L("settings"),e);function yr(e){try{let t=localStorage.getItem(Xe(e));if(!t)return null;let n=JSON.parse(t);return n?.enabled===!0?n:null}catch{return null}}function wr(e,t){try{t?.enabled===!0?localStorage.setItem(Xe(e),JSON.stringify(t)):localStorage.removeItem(Xe(e))}catch{}}function Ft(e){try{localStorage.removeItem(Xe(e))}catch{}}var Ls={flushAt:20,flushIntervalMs:1e4,maxQueue:500,maxRetryAgeMs:1440*60*1e3,maxRetries:5,maxPersistedBatches:20,maxPersistedBytes:1024*1024,storageKey:ce.retry,beaconSafeBytes:56*1024,maxBatchEvents:100,maxBatchBytes:500*1024},Ze=()=>Date.now(),Sr=3e4,Yt=55*1024;function Ts(e,t=Ze()){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 re=e=>typeof TextEncoder<"u"?new TextEncoder().encode(e).length:Buffer.byteLength(e),Kt=()=>typeof window<"u"&&typeof document<"u";function Ns(){try{return!Kt()||!window.localStorage?null:(window.localStorage.getItem("thg_hp_probe"),window.localStorage)}catch{return null}}var I,zt,Gt,Qe,Wt,Jt,_r,Oe,Le,Te,br,et,Ir,tt,nt=class{constructor(t){an(this,I);this.o={...Ls,...t},this.queue=[],this.timer=null,this.storage=Ns(),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,Kt()&&(window.addEventListener("pagehide",()=>this.flush({beacon:!0})),document.addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"&&this.flush()}),O(this,I,tt).call(this))}markFailing(){this.answered||(this.failing=!0)}replayPersisted(){return this.replayAllowed=!0,O(this,I,tt).call(this)}clearPersisted(){if(this.replayAllowed=!1,!!this.storage)try{let t=O(this,I,Te).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(),O(this,I,Gt).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():O(this,I,zt).call(this)}flush(t={}){if(O(this,I,Gt).call(this),this.queue.length===0)return Promise.resolve();if(t.beacon&&Kt()&&typeof navigator<"u"&&navigator.sendBeacon)return O(this,I,_r).call(this),Promise.resolve();if(this.inflight)return this.inflight;let n=O(this,I,Jt).call(this,this.queue,this.o.maxBatchEvents,this.o.maxBatchBytes).map(o=>{let i=O(this,I,et).call(this,o);return i&&(this.sending.add(i),this.sinceRefusal.add(i)),{batch:o,id:i}});this.queue=[];let r=this.epoch;return this.inflight=(async()=>{for(let{batch:o,id:i}of n){if(r!==this.epoch){O(this,I,Le).call(this,i);continue}await O(this,I,Oe).call(this,o,0,i,r)}})().finally(()=>{this.inflight=null,this.queue.length>=this.o.flushAt?this.flush():this.queue.length&&O(this,I,zt).call(this)}),this.inflight}};I=new WeakSet,zt=function(){this.timer||(this.timer=setTimeout(()=>this.flush(),this.o.flushIntervalMs),this.timer?.unref?.())},Gt=function(){this.timer&&(clearTimeout(this.timer),this.timer=null)},Qe=function(t){return JSON.stringify({batch:t,writeKey:this.o.writeKey,sentAt:new Date().toISOString()})},Wt=function(){return`${this.o.apiHost.replace(/\/$/,"")}/v1/batch`},Jt=function(t,n,r){let o=re(O(this,I,Qe).call(this,[])),i=[],s=[],c=o;for(let u of t){let d=re(JSON.stringify(u))+1;s.length&&(s.length>=n||c+d>r)&&(i.push(s),s=[],c=o),s.push(u),c+=d}return s.length&&i.push(s),i},_r=function(){let t=this.queue;this.queue=[];let n=O(this,I,Wt).call(this);for(let r of O(this,I,Jt).call(this,t,this.o.maxBatchEvents,this.o.beaconSafeBytes)){let o=O(this,I,Qe).call(this,r);if(re(o)<=this.o.beaconSafeBytes){let i=!1;try{i=navigator.sendBeacon(n,new Blob([o],{type:"text/plain"}))}catch{i=!1}if(i){let s=this.failing?O(this,I,et).call(this,r):null;s&&this.sending.add(s);continue}}O(this,I,Oe).call(this,r,0,O(this,I,et).call(this,r))}},Oe=async function(t,n,r=null,o=this.epoch){r&&this.sending.add(r);let i=O(this,I,Qe).call(this,t),s=0;try{let c=await fetch(O(this,I,Wt).call(this),{method:"POST",headers:{"Content-Type":"text/plain"},body:i,keepalive:re(i)<=this.o.beaconSafeBytes});if(c.ok)return this.failing=!1,this.answered=!0,O(this,I,Le).call(this,r),O(this,I,tt).call(this),!0;let u=c.status===408||c.status===429||c.status>=500;if(u&&(s=Ts(c.headers?.get?.("retry-after"))),!u)return O(this,I,Le).call(this,r),this.o.onError?.(`CDP ingest rejected batch (${c.status}); dropping ${t.length} events`),!0;throw new Error(`retryable ${c.status}`)}catch(c){if(this.failing=!0,n>=this.o.maxRetries){r&&this.sending.delete(r);let d=r?"kept for the next page":"dropped";return this.o.onError?.(`CDP ingest unreachable after ${n} attempts; ${d}: ${t.length} events`,c),!1}let u=Math.max(Math.min(1e3*2**n,Sr)*(.5+Math.random()),Math.min(s,Sr));return o===this.epoch&&await new Promise(d=>{let f=()=>{clearTimeout(p),this.wakers.delete(f),d()},p=setTimeout(f,u);this.wakers.add(f)}),o!==this.epoch?(O(this,I,Le).call(this,r),!1):O(this,I,Oe).call(this,t,n+1,r,o)}},Le=function(t){t&&(this.sending.delete(t),this.sinceRefusal.delete(t),O(this,I,Ir).call(this,t))},Te=function(){let t=JSON.parse(this.storage.getItem(this.o.storageKey)||"[]");return Array.isArray(t)?t:[]},br=function(t,n){let r=s=>re(JSON.stringify(s))+1,o=[...t,n].slice(-this.o.maxPersistedBatches),i=o.reduce((s,c)=>s+r(c),2);for(;o.length>1&&i>this.o.maxPersistedBytes;)i-=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},et=function(t){if(!this.storage||this.o.mayPersist&&!this.o.mayPersist())return null;try{let n={at:Ze(),id:`${Ze()}-${Math.random().toString(36).slice(2)}`,batch:t};return re(JSON.stringify(n))+3>this.o.maxPersistedBytes?null:O(this,I,br).call(this,O(this,I,Te).call(this),n)?n.id:null}catch{return null}},Ir=function(t){if(!(!t||!this.storage))try{let n=O(this,I,Te).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{}},tt=function(){if(!this.storage||!this.replayAllowed)return this.draining??Promise.resolve();if(this.draining)return this.draining;let t;try{let r=O(this,I,Te).call(this);t=r.filter(o=>Array.isArray(o?.batch)&&Ze()-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,i)=>o!==r[i]))&&(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 O(this,I,Oe).call(this,r.batch,0,r.id))return})().finally(()=>{this.draining=null}),this.draining):Promise.resolve()};var xr="3.25.0",kr="@thg-agentic/hyper-personalisation-web";var Rs=new Set(["audiences","decisions","recommendations"]);var Ms=Symbol.for("@thg-agentic/hyper-personalisation-web.replay"),Ds=Symbol.for("@thg-agentic/hyper-personalisation-web.unreachable"),Us=Symbol.for("@thg-agentic/hyper-personalisation-web.onsite-access");function $s(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,i)=>o+i,0))}return t}var Vs="e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855";function Bs(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 rt(e){if(typeof e!="string")return null;let t=Bs(e.trim());return t===Vs?null:t}var Ar=Object.freeze({email_sha256:"sha256",phone_sha256:"sha256",accepts_marketing:"boolean",gender:"string",created_at:"date-time"}),js=/^\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 Hs(e){if(typeof e!="string"||!js.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 qs(e,t){return t===null?null:e==="sha256"?rt(t)??void 0:e==="date-time"?t instanceof Date?Number.isNaN(t.getTime())?void 0:t.toISOString():Hs(t)?t:void 0:typeof t===e?t:void 0}function Fs(e,t){let n={},r=[];for(let[o,i]of Object.entries(e)){let s=Object.hasOwn(Ar,o)?Ar[o]:null,c=s?qs(s,i):void 0;c===void 0?r.push(o):n[o]=c}return t&&r.length&&console.warn(`[hp] identify: not sent, not spec traits: ${r.join(", ")}`),n}var vr=!1,Er=!1;function Ks(){Er||(Er=!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 zs(e){!e||vr||(vr=!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 Gs(e){try{return re(JSON.stringify(e))}catch{return 0}}function Cr(e){return e&&typeof e.context=="object"&&e.context!==null?e.context:e}function Ws(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,i]of n)try{let s=globalThis[r],c=j(L(o),e),u=s?.getItem(c);if(!u)continue;let d=j(L(o),t),f=s.getItem(d);s.setItem(d,JSON.stringify(i(JSON.parse(u),f?JSON.parse(f):null))),s.removeItem(c)}catch{}}function Pr(e){let t=ne(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:kr,libraryVersion:xr,writeKey:"web",queryParamBlocklist:[],debug:!1,validate:null,consentTimeoutMs:5e3,...e,apiHost:t};Ve(n.storageNames),Be();let r=!!n.consent;r||Ks();let o=null;n.getConsent=()=>o?o.stamp():On();let i=()=>!r||o?.status==="granted";Ws(n.propertyId,n.writeKey);let s=r&&n.holdAcrossPages?En(j(L("held"),n.writeKey)):null,c=s?.read()??{items:[],anonymousId:null};n.mintAnonymousId!==void 0&&zs(n.debug);let u=Cn(n,{carried:c.anonymousId,mayStore:i,orOwn:!0}),d=lr({name:L("session"),domain:n.consentCookieDomain??null,mayStore:i}),f=n.getSessionId;n.getSessionId=()=>F(M(f,null))??d.get();let p=Jn(L("preview"),n.consentCookieDomain??null),g=(a,l)=>n.debug&&console.warn("[hp]",a,l??""),_=n.transport??new nt({apiHost:n.apiHost,writeKey:n.writeKey,storageKey:j(L("retry"),n.writeKey),mayPersist:r?()=>o?.status==="granted":void 0,deferReplay:r,onError:g}),y=j(L("previousPage"),n.propertyId),b=null,v=()=>{if(b)return b;try{return sessionStorage.getItem(y)||null}catch{return null}};typeof window<"u"&&window.addEventListener("pageshow",a=>{a.persisted&&(b=null)});let A=a=>{if(b=a||null,!(r&&o.status!=="granted"))try{sessionStorage.setItem(y,a)}catch{}},m=Gn({key:j(L("decisions"),n.propertyId),mayStore:i});n.getDecisions??(n.getDecisions=m.current);let E=F(M(n.getUserId,null)),w=null,h=null,S=null,T=null,D=new Set,K=new Set;function G(a){if(a.type!=="track"||a.event!=="Cart Updated")return;let l=a.properties?.value;T=typeof l=="number"&&Number.isFinite(l)&&l>=0?l:null;for(let x of D)try{x()}catch(P){console.warn("[hp] a basket listener failed",P)}}function B(a,l,x=!1){G(a);try{return xe(a,l,x)}catch(P){if(P instanceof _e)throw P;return console.warn("[hp] the event was not sent",P),null}}function xe(a,l,x){let P=S;S=null;let q=a.type==="track"?a.event:a.type;if(!x&&!pr(n.plan,q))return null;let C={messageId:P?.messageId??ee(),timestamp:P?.timestamp??new Date().toISOString(),anonymousId:F(M(n.getAnonymousId,null)),userId:E??null,...a,context:In(n,Cr(l))};if(C.properties&&(C.properties=gt(C.properties)),typeof C.properties?.href=="string"&&(C.properties.href=wt(C.properties.href,n)),!x&&!tr(C.anonymousId,n.sampleRate))return n.debug&&console.debug("[hp] not sent: outside the sample",C),null;if(n.beforeSend){let ye;try{ye=n.beforeSend(C)}catch(Kr){return console.warn("[hp] beforeSend failed; the event was not sent",Kr),null}if(!ye)return null;let{type:De,event:on,messageId:qr,timestamp:Fr}=C;C={...ye,type:De,messageId:qr,timestamp:Fr,...on?{event:on}:{}}}if(n.validate){let ye=n.validate(C,{producer:"web"});if(!ye.valid){let De=`[hp] invalid ${C.event??C.type}:
2
- ${ye.errors.join(`
3
- `)}`;if(n.throwOnInvalid)throw new _e(De);console.error(De)}}n.debug&&console.debug("[hp]",C.event??C.type,C);let rn=Gs(C);return rn>Yt?(g(`${C.event??C.type} not sent: ${rn} bytes, over the ${Yt}-byte limit for one event`),null):(Z(C,x),C)}function W(a){if(a.type==="track"&&N(a),n.onEvent)try{n.onEvent(a)}catch(l){console.warn("[hp] onEvent observer failed",l)}}let oe=()=>r&&o?.state?.personalisation===!0,ke=()=>rr(M(n.getSessionId,null),n.propertyId),he=!1;function N(a){try{oe()?(ke(),Zn(Mt(cr(a.event,a.properties))),he=!0):H()}catch(l){n.debug&&console.warn("[hp] the visit was not recorded",l)}}function H(a=!1){Qn(),(a||he)&&or(),he=!1}function ge(){d.forget(),m.forget(),ut.clear(),u?.forget(),H(!0)}function Z(a,l){!r||l||o.admits()?(W(a),_.enqueue(a)):o.hold(a)}let k=(a,l,x)=>B({type:"track",event:a,properties:l??{}},x),ut=new Set,jr=(a,l,x)=>a==="audiences"?{audiences:l?null:x.audiences??[]}:a==="decisions"?{decisions:(x.decisions??[]).map(P=>({slot:P.slot,decision_id:P.decision_id??null,arm:P.arm??null,...P.variant&&{variant:P.variant}}))}:{recommendation_request_id:x.recommendation_request_id??null};r&&(o=Kn({adapter:n.consent,timeoutMs:n.consentTimeoutMs,cookieDomain:n.consentCookieDomain,debug:n.debug,store:s&&{read:()=>c.items,write:a=>s.write(a,u?.peek()??null)},release(a){a.context&&(a.context.consent=o.stamp()),W(a),_.enqueue(a)},onStatus(a){if(a==="granted"&&(u?.persist(),d.persist(),b&&A(b),m.persist(),_.replayPersisted?.()),a==="denied"){_.clearPersisted?.(),u?.forget(),d.forget();try{sessionStorage.removeItem(y)}catch{}m.forget(),H(!0)}try{n.onConsentStatus?.(a)}catch(l){console.warn("[hp] onConsentStatus observer failed",l)}if(a==="granted"||a==="denied")for(let l of K)try{l()}catch(x){console.warn("[hp] a consent listener failed",x)}},announce({action:a,state:l,previous:x,withdrawal:P}){l?.personalisation!==!0&&H(x?.personalisation===!0),P&&_.discardQueued?.(),B({type:"track",event:"Consent Updated",properties:{action:a,state:l}},void 0,P),P&&_.flush()}}),o.start());let Qt=()=>n.holdout?Nt(n.holdout):null,en=()=>Rt(n.holdout,F(M(n.getAnonymousId,null))).group;function Hr(a,l){if(!Array.isArray(a?.decisions))return a;let x=n.holdout?.readoutSlots??[],P=F(M(n.getAnonymousId,null));return{...a,decisions:a.decisions.map(q=>{let C=q?.variant==="bandit"||q?.variant==="default"?q.variant:!l&&q?.holdout!==!0&&x.includes(q?.slot)?Wn(q.slot,P):null;return C?C==="default"?{...q,variant:C,decision_id:null}:{...q,variant:C}:q})}}function tn(a,l){if(p)return null;let x=a?.exposure,P=x?.holdout===!0,q=Hr(a,P);return m.remember(zn(q)),!x?.token||ut.has(x.token)?null:(ut.add(x.token),k("Personalisation Exposed",{exposure_token:x.token,surface:x.surface,holdout:P,holdout_share:x.holdout_share??Qt()?.holdout_share??null,personalised_share:x.personalised_share??Qt()?.personalised_share??null,...jr(x.surface,P,q)},l))}function nn(a){return E&&ge(),E=null,w=null,h=null,a}return qn({track:(a,l,x)=>a==="Signed Out"?nn(k(a,l,x)):k(a,l,x),page(a,l){a??(a={});let x=n.pageType??null;a.type&&(we.has(a.type)?(x=a.type,n.pageType=a.type):n.debug&&console.warn(`[hp] ignoring unknown page.type "${a.type}". Allowed: ${[...we].join(", ")}`));let P=B({type:"page",properties:{name:a.name??null,navigation_trigger:a.navigation_trigger??gn(),previous_message_id:v()}},{page:{type:x},...Cr(l)??{}});return P&&A(P.messageId),P},identify(a,l,x){let{userId:P,...q}=a&&typeof a=="object"?a:{};if(P!==void 0){let C=F(P);x===Ce?h=C:w&&C&&C!==w?ge():n.debug&&h&&C&&C!==h&&console.warn("[hp] identify names another userId than the identity option; using the new one"),E=C,C&&x!==Ce&&(w=C)}return B({type:"identify",traits:Fs(q,n.debug)},l)},reset(){E&&ge(),E=null,w=null,h=null,A("")},productViewed:(a,l)=>k("Product Viewed",a,l),productListViewed:(a,l)=>k("Product List Viewed",a,l),recommendationsViewed:(a,l)=>k("Recommendations Viewed",a,l),personalisationExposed:(a,l)=>k("Personalisation Exposed",a,l),recordExposure:tn,surfaceViewed({surface:a}={},l){if(!Rs.has(a)||!n.holdout||a!=="decisions"&&!oe())return null;let x=F(M(n.getAnonymousId,null)),P=Rt(n.holdout,x).group;if(P==="excluded")return null;let q=pn({sessionId:Ue(M(n.getSessionId,null),x),surface:a});return q?tn({exposure:{token:q,surface:a,holdout:P==="holdout"}},l):null},inHoldout:()=>en()!=="personalised",personalisationGroup:en,productClicked:(a,l)=>k("Product Clicked",a,l),productListFiltered:(a,l)=>k("Product List Filtered",a,l),productsSearched:(a,l)=>k("Products Searched",a,l),searchSuggestionsViewed:(a,l)=>k("Search Suggestions Viewed",a,l),productAdded:(a,l)=>k("Product Added",a,l),productRemoved:(a,l)=>k("Product Removed",a,l),cartUpdated:(a,l)=>k("Cart Updated",$s(a),l),identityLinked:(a,l)=>k("Identity Linked",a,l),slotEngaged:(a,l)=>p?null:k("Slot Engaged",a,l),productVariantSelected:(a,l)=>k("Product Variant Selected",a,l),cartViewed:(a,l)=>k("Cart Viewed",a,l),productAddedToWishlist:(a,l)=>k("Product Added to Wishlist",a,l),productRemovedFromWishlist:(a,l)=>k("Product Removed from Wishlist",a,l),wishlistProductAddedToCart:(a,l)=>k("Wishlist Product Added to Cart",a,l),productShared:(a,l)=>k("Product Shared",a,l),cartShared:(a,l)=>k("Cart Shared",a,l),couponEntered:(a,l)=>k("Coupon Entered",a,l),couponApplied:(a,l)=>k("Coupon Applied",a,l),couponDenied:(a,l)=>k("Coupon Denied",a,l),couponRemoved:(a,l)=>k("Coupon Removed",a,l),checkoutStarted:(a,l)=>k("Checkout Started",a,l),promotionViewed:(a,l)=>k("Promotion Viewed",a,l),promotionClicked:(a,l)=>k("Promotion Clicked",a,l),checkoutStepViewed:(a,l)=>k("Checkout Step Viewed",a,l),checkoutStepCompleted:(a,l)=>k("Checkout Step Completed",a,l),paymentInfoEntered:(a,l)=>k("Payment Info Entered",a,l),checkoutFailed:(a,l)=>k("Checkout Failed",a,l),signedIn:(a,l)=>k("Signed In",a,l),signedUp:(a,l)=>k("Signed Up",a,l),signedOut:a=>nn(k("Signed Out",{},a)),newsletterSubscribed:(a,l)=>k("Newsletter Subscribed",a,l),newsletterUnsubscribed:(a,l)=>k("Newsletter Unsubscribed",a,l),preferencesStated:(a,l)=>k("Preferences Stated",a,l),backInStockSubscribed:(a,l)=>k("Back In Stock Subscribed",a,l),productReviewed:(a,l)=>k("Product Reviewed",a,l),consentUpdated:(a,l)=>k("Consent Updated",a,l),flush:a=>_.flush(a),recommendationContext(){if(!oe())return{};try{return ke(),Mt(Bt())}catch{return{}}},get consent(){return o?o.state:null},servingHeaders:()=>Et(o?.state??null),get lastPageMessageId(){return v()},get anonymousId(){return F(M(n.getAnonymousId,null))},[Us](){return{writeKey:n.writeKey,storageKey:j(L("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)),analytics:i,personalisation:oe,consent:()=>n.getConsent(),headers:()=>Et(o?.state??null),pageUrl:()=>typeof location>"u"?null:wt(location.href,n),locale:()=>_t(M(n.getLocale,n.locale)),basketValue:()=>{let a=Bt().basketValue;return T??(Number.isFinite(a)?a:null)},onBasket:a=>(D.add(a),()=>D.delete(a)),consentAnswered:()=>!o||o.status==="granted"||o.status==="denied",onConsentAnswered:a=>(K.add(a),()=>K.delete(a))}},[Ds](){_.markFailing?.()},[Ms](a,l,x){if(typeof this[a]=="function"){S=typeof x?.messageId=="string"&&typeof x?.timestamp=="string"?{messageId:x.messageId,timestamp:x.timestamp}:null;try{this[a](...Array.isArray(l)?l:[])}finally{S=null}}}})}var Ne=Symbol.for("@thg-agentic/hyper-personalisation-web.onsite"),J=Symbol.for("@thg-agentic/hyper-personalisation-web.onsite.pending"),Re=Symbol.for("@thg-agentic/hyper-personalisation-web.onsite.listeners"),ot=Symbol.for("@thg-agentic/hyper-personalisation-web.onsite.suppressed"),Js=["shown","submitted","apply","closed","held"],Or=10,fe=()=>typeof window>"u"?null:window;function Me(){try{for(let{resolve:e}of fe()?.[J]?.splice(0)??[])e(!1)}catch{}}var pe=Object.freeze({open(e){try{let t=fe();if(!t||typeof e!="string")return Promise.resolve(!1);if(t[Ne])return t[Ne].open(e);if(t[J]??(t[J]=[]),t[J].length<Or)return new Promise(n=>t[J].push({slot:e,resolve:n}))}catch{}return Promise.resolve(!1)},show(e){return pe.open(e)},on(e,t){var n;try{let r=fe();return!r||!Js.includes(e)||typeof t!="function"?()=>{}:(r[Re]??(r[Re]={}),((n=r[Re])[e]??(n[e]=new Set)).add(t),()=>r[Re][e].delete(t))}catch{return()=>{}}},suppress(e="page"){try{let t=fe();if(!t)return;(t[ot]??(t[ot]=new Set)).add(String(e)),t[Ne]?.suppress()}catch{}},unsuppress(e){try{let t=fe()?.[ot];e===void 0?t?.clear():t?.delete(String(e))}catch{}},ready(){try{let e=fe();if(!e)return Promise.resolve([]);if(e[Ne])return Promise.resolve(pe.debug());if(e[J]??(e[J]=[]),e[J].length<Or)return new Promise(t=>e[J].push({slot:null,resolve:()=>t(pe.debug())}))}catch{}return Promise.resolve([])},debug(){try{return fe()?.[Ne]?.debug()??[]}catch{return[]}}});function Lr(e){let t=typeof document>"u"?null:document.currentScript?.src;return t?new URL(e,t).href:null}var st=new Map;function Tr(e,t){return window[t]?Promise.resolve(window[t]):e?(st.has(t)||st.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(()=>st.delete(t))),st.get(t)):Promise.reject(new Error("the CDN script\u2019s own URL is unknown"))}var Ys=Lr("onsite.min.js"),Xt=()=>Tr(Ys,Symbol.for("@thg-agentic/hyper-personalisation-web.onsite.module"));var Zt=Symbol.for("@thg-agentic/hyper-personalisation-web.bootstrap"),Xs=Symbol.for("@thg-agentic/hyper-personalisation-web.drain"),Zs=Symbol.for("@thg-agentic/hyper-personalisation-web.carry"),Nr=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.assignment"),ti=Symbol.for("@thg-agentic/hyper-personalisation-web.recommendation-context"),ct=e=>e?()=>$(e):()=>null,Dr={didomi:e=>Nn({purposes:e.purposes}),onetrust:e=>Rn({groups:e.groups,impliedConsent:e.impliedConsent}),cookie:e=>Mn({name:e.name,categories:e.categories,refusedValue:e.refusedValue,source:e.source,changeEvent:e.changeEvent}),forwarded:e=>Dn({name:e.name}),static:e=>{if(!e.state||typeof e.state!="object")throw new Error('consent.state is required for provider "static"');return Un(e.state)}},Rr=Object.keys(Dr),me=e=>e!==null&&typeof e=="object"&&!Array.isArray(e),it=e=>typeof e=="string"&&e!=="",ni=e=>Array.isArray(e)&&e.every(t=>typeof t=="string"),Ur=e=>me(e)&&typeof e.read=="function";function ri(e,t={}){let n=[];if(!me(e))return["config must be { writeKey, apiHost? }"];it(e.writeKey)||n.push("writeKey is required"),ne(e.apiHost)||n.push("apiHost, when given, must be a host or an http(s) origin"),t.propertyId!==void 0&&!it(t.propertyId)&&n.push("propertyId must be a string");let{consent:r}=t;if(!Ur(r)&&!(me(r)&&Rr.includes(r.provider))&&n.push(`consent must be a consent adapter or { provider: ${Rr.join(" | ")} }`),t.autocapture!==void 0&&t.autocapture!==!1&&!me(t.autocapture)&&n.push("autocapture must be false or { promotions, productLists, recommendations }"),t.onsite!==void 0&&typeof t.onsite!="boolean"&&!me(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(!me(t.identityCookies))n.push("identityCookies must be an object");else for(let o of["anonymousId","sessionId"]){let i=t.identityCookies[o];i!==void 0&&!it(i)&&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&&(me(t.dataLayer)?(t.dataLayer.name!==void 0&&!it(t.dataLayer.name)&&n.push("dataLayer.name must be a string"),t.dataLayer.ignore!==void 0&&!ni(t.dataLayer.ignore)&&n.push("dataLayer.ignore must be an array of strings")):n.push("dataLayer must be an object")),n}function oi(e,t,n){if(Ur(e))return Ct(e,t.consentPurposes);let{provider:r,...o}=e,i=n?.consent?.[r]??Dr[r];return Ct(i(o),t.consentPurposes)}var $r=(e,t)=>`${e??""}|${t??""}`;function si(e,t){let n=F(t?.userId),r=rt(t?.emailSha256);if(!n&&!r)return null;try{let o=j(L("identified"),e);if(sessionStorage.getItem(o)===$r(n,r))return null}catch{}return{...n?{userId:n}:{},...r?{email_sha256:r}:{}}}async function ii({writeKey:e,apiHost:t},n){if(n.settings!==void 0)return{settings:qt(n.settings),revalidated:null};let r=gr(t,e),o=yr(e);if(o)return{settings:o,revalidated:r,fetched:r};let i=await r;return i?{settings:i,revalidated:r,fetched:r}:{settings:Ht,revalidated:null,fetched:r}}function Vr(e,t){let n=t??{},r=typeof window<"u"?window:null;if(r?.[Zt])return r[Zt];let o=Pn(e?.writeKey,()=>{let{analytics:s}=Ee($(L("consent")));return s===!0||s===null&&n.holdAcrossPages===!0}),i=li(e,n,o);if(r){let s=n.extend?.getSessionId??ct(n.identityCookies?.sessionId),c=ct(n.identityCookies?.anonymousId);r[ei]=({slot:u,arm:d}={})=>fn({sessionId:Ue(s(),c()),slot:u,arm:d}),r[Zt]=i,r[Zs]=o,r[Xs]?.(i)}return i}function ai(){let e=globalThis.performance?.now?.();return new Date(Date.now()-(Number.isFinite(e)?e:0)).toISOString()}function Mr(e,t){if(t===!1)return()=>{};let n={promotions:!0,productLists:!0,recommendations:!0,exposures:!0,...t},r=i=>i&&typeof i=="object"?i:{},o=[];try{n.promotions&&o.push(pt(e,r(n.promotions))),n.productLists&&o.push(ft(e,r(n.productLists))),n.recommendations&&o.push(mt(e,r(n.recommendations))),n.exposures&&o.push(dt(e,r(n.exposures)))}catch(i){console.warn("[hp] autocapture not started:",i?.message??i)}return()=>{for(let i of o)i()}}var ci=1e3;function ui(e,t,n,r){if(!t)return Me();let o=n.onsite?Xt():null;o?.catch(()=>{}),(r?Promise.race([r.then(s=>s??n),new Promise(s=>setTimeout(()=>s(n),ci))]):Promise.resolve(n)).then(s=>{let c=s.enabled?s.onsite:null;if(!c)return Me();let u=t===!0?{}:t;return(o??Xt()).then(d=>d.startOnsite(e,{...u,settings:u.settings??c}))}).catch(s=>{Me(),console.warn("[hp] onsite not started:",s?.message??s)})}function at(e){return e.close(),Me(),null}async function li(e,t,n){try{let r=ri(e,t);if(r.length)return console.warn(`[hp] not started, the configuration is invalid: ${r.join("; ")}`),at(n);Ve(t.storageNames),Be();let{writeKey:o}=e,[{settings:i,revalidated:s,fetched:c},u]=await Promise.all([ii(e,t),Promise.resolve(t.identity).catch(()=>null)]),d=s?i:null,f=!1,p=()=>f&&d&&wr(o,d);if(s?.then(h=>{h&&(d=h,h.enabled?p():Ft(o))}),!i.enabled)return t.debug&&console.info("[hp] off: the settings for this write key do not enable it"),at(n);let g=t.propertyId??i.propertyId??null;if(!g&&i!==Ht)return console.warn("[hp] not started: this write key covers several properties, so propertyId is required"),at(n);let{preset:_}=t,y=si(g,u),b=t.debug===!0||i.debug?.enabled===!0||Hn(i.debug?.tokenSha256??null,L("debug")),v=F(u?.userId),A=Pr({apiHost:mr(e.apiHost,i.apiHost),servingHost:ne(e.apiHost),onsite:i.onsite??null,writeKey:o,propertyId:g,pageType:we.has(t.pageType)?t.pageType:void 0,environment:i.environment,queryParamAllowlist:i.queryParamAllowlist??void 0,plan:i.plan,sampleRate:i.sampleRate??1,holdout:i.holdouts?.[g],getCurrency:t.getCurrency,getShipToCountry:t.getShipToCountry,getLocale:t.getLocale,consent:oi(t.consent,i,_),consentCookieDomain:t.consentCookieDomain,storageNames:t.storageNames,holdAcrossPages:t.holdAcrossPages===!0,mintAnonymousId:t.mintAnonymousId,debug:b,anonymousIdSource:i.anonymousId??void 0,getAnonymousId:ct(t.identityCookies?.anonymousId),getSessionId:t.identityCookies?.sessionId?ct(t.identityCookies.sessionId):void 0,getUserId:()=>v,beforeSend:t.beforeSend,...t.extend,onConsentStatus(h){if(h==="granted"&&(f=!0,p()),h==="denied"){Ft(o);try{sessionStorage.removeItem(j(L("identified"),g))}catch{}}t.extend?.onConsentStatus?.(h)},onEvent(h){if(h.type==="identify"){let S=$r(F(h.userId),rt(h.traits?.email_sha256));try{sessionStorage.setItem(j(L("identified"),g),S)}catch{}}t.extend?.onEvent?.(h)}});typeof window<"u"&&(window[ti]=()=>A.recommendationContext()),c?.then(h=>h===null&&A[Qs]());for(let[h,S,T]of n.take())try{A[Nr](h,S,T)}catch(D){console.warn(`[hp] carried ${h} failed`,D)}A[Nr]("page",[t.pageType?{type:t.pageType}:{}],{messageId:ee(),timestamp:ai()});let m=Mr(A,t.autocapture),E=A.page;A.page=Tt("page",(...h)=>{let S=E(...h);return m(),m=Mr(A,t.autocapture),S});let w=typeof window<"u"?window:null;if(w?.addEventListener?.("pageshow",h=>{h.persisted&&A.page({navigation_trigger:"back_forward"})}),t.dataLayer&&w){let h=t.dataLayer.name??"dataLayer";w[h]=w[h]||[],jn(A,{..._,dataLayer:w[h],ignore:[..._?.ignore??[],...t.dataLayer.ignore??[]],onError:S=>b&&console.warn("[hp] dataLayer mapping failed",S)})}return y&&A.identify(y,void 0,Ce),A.onsite=pe,ui(A,t.onsite,i,s),A}catch(r){return console.warn("[hp] not started:",r?.message??r),at(n)}}function Br(e){e.initialized=!0,Vr(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(i){console.warn(`[hp] queued ${r} failed`,i)}})}var U=window.hp=window.hp||[];U.servingHeaders??(U.servingHeaders=()=>({}));U.inHoldout??(U.inHoldout=()=>!0);U.personalisationGroup??(U.personalisationGroup=()=>"excluded");U.recommendationContext??(U.recommendationContext=()=>({}));U.onsite??(U.onsite=pe);U.initialized||(U._config?Br(U):U.load=(e,t)=>{U._config=e,U._options=t??{},Br(U)});})();
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 +1 @@
1
- (()=>{function b(s,e,t,i,o){let n=s("select","i");n.setAttribute("aria-label",e);for(let[a,r]of[["",t],...i]){let c=s("option","",r);c.value=a,c.selected=a===o,n.append(c)}return n}var D=s=>String(s).padStart(2,"0"),T=120,I=/^-?\d{1,10}(?:\.(\d{1,10}))?$/,O=1e9;function N(s){try{let e=new Intl.DateTimeFormat(s,{month:"long",timeZone:"UTC"});return{name:t=>e.format(Date.UTC(2016,t-1,1)),monthFirst:new Intl.DateTimeFormat(s,{month:"numeric",day:"numeric"}).formatToParts(0).find(t=>t.type!=="literal")?.type==="month"}}catch{return{name:String,monthFirst:!1}}}var _=(s,e,t,i,o,n)=>{let a=b(s,t,t,Array.from({length:i},(r,c)=>[D(c+1),o(c+1)]),n);return a.name=e,a};function g(s,e,t,i,o){let n=s("input","i");return n.name=e,n.inputMode=i,n.setAttribute("aria-label",t),n.value=o??"",n}function A(s,e,t,i,o){let n=e.format??{},a=t("div",n.kind==="birthday"?"ph bd":"ph");if(e.type==="number")a.append(g(t,"hp_v",e.label,n.decimals?"decimal":"numeric",i)),n.unit&&a.append(t("span","u",n.unit));else if(n.kind==="birthday"){let[,r,c,f]=/^(\d{4}|-)-(\d\d)-(\d\d)$/.exec(i??"")??[],u=N(o||void 0),p=_(t,"hp_d","Day",31,String,f),m=_(t,"hp_m","Month",12,u.name,c);if(a.append(...u.monthFirst?[m,p]:[p,m]),n.year!=="none"){let d=g(t,"hp_y","Year","numeric",r==="-"?"":r);d.placeholder=n.year==="required"?"Year":"Year (optional)",d.autocomplete="bday-year",d.maxLength=4,a.append(d)}}else{let r=g(t,"hp_v",e.label,"none",i);r.type="date",r.min="1900-01-01",r.max="2100-12-31",a.append(r)}s.append(a)}function $(s,e){try{return new Intl.NumberFormat(e||void 0).format(s)}catch{return String(s)}}var v=(s,e,t)=>{let i=new Date(Date.UTC(s,e-1,t));return i.getUTCMonth()===e-1&&i.getUTCDate()===t};function w(s){let e=s.replace(/\s/g,""),t=e.lastIndexOf(","),i=e.lastIndexOf(".");return t>=0&&i>=0?t>i?e.replace(/\./g,"").replace(",","."):e.replace(/,/g,""):/^-?\d{1,3}(?:,\d{3})+$/.test(e)?e.replace(/,/g,""):e.replace(",",".")}function S(s,e,t=Date.now(),i=void 0){let o=e.format??{},n=l=>s.querySelector(`[name=${l}]`);if(e.type==="number"){let l=n("hp_v"),y=w(l.value);if(!y)return{value:null};let h=Number(y),x=I.exec(y);return x&&(x[1]?.replace(/0+$/,"").length??0)<=(o.decimals?2:0)&&Math.abs(h)<=O&&!(h<o.min||h>o.max)?{value:String(h===0?0:h)}:{error:`Enter a ${o.decimals?"":"whole "}number${o.min!=null&&o.max!=null?` from ${$(o.min,i)} to ${$(o.max,i)}`:""}.`,input:l}}let a=l=>({error:"Enter a real date.",input:l});if(o.kind!=="birthday"){let l=n("hp_v");return l.value?l.value>=l.min&&l.value<=l.max?{value:l.value}:a(l):{value:null}}let[r,c,f]=["hp_d","hp_m","hp_y"].map(n),u=f?.value.trim()??"";if(!r.value&&!c.value&&!u)return{value:null};if(!r.value||!c.value)return a(r.value?c:r);if(!u)return o.year==="required"||!v(2016,+c.value,+r.value)?a(f??r):{value:`--${c.value}-${r.value}`};let p=`${u}-${c.value}-${r.value}`,m=new Date(t).toISOString().slice(0,10),d=new Date(t+864e5).toISOString().slice(0,10),E=`${+m.slice(0,4)-T}${m.slice(4)}`;return/^\d{4}$/.test(u)&&v(+u,+c.value,+r.value)&&p<=d&&p>=E?{value:p}:a(f)}window[Symbol.for("@thg-agentic/hyper-personalisation-web.onsite.answers")]={answerFields:A,answerOf:S};})();
1
+ (()=>{function b(r,e,t,i,o){let n=r("select","i");n.setAttribute("aria-label",e);for(let[a,s]of[["",t],...i]){let l=r("option","",s);l.value=a,l.selected=a===o,n.append(l)}return n}var D=r=>String(r).padStart(2,"0"),T=120,I=/^-?\d{1,10}(?:\.(\d{1,10}))?$/,N=1e9;function O(r){try{let e=new Intl.DateTimeFormat(r,{month:"long",timeZone:"UTC"});return{name:t=>e.format(Date.UTC(2016,t-1,1)),monthFirst:new Intl.DateTimeFormat(r,{month:"numeric",day:"numeric"}).formatToParts(0).find(t=>t.type!=="literal")?.type==="month"}}catch{return{name:String,monthFirst:!1}}}var _=(r,e,t,i,o,n)=>{let a=b(r,t,t,Array.from({length:i},(s,l)=>[D(l+1),o(l+1)]),n);return a.name=e,a};function g(r,e,t,i,o){let n=r("input","i");return n.name=e,n.inputMode=i,n.setAttribute("aria-label",t),n.value=o??"",n}function $(r,e,t,i,o){let n=e.format??{},a=t("div",n.kind==="birthday"?"ph bd":"ph");if(e.type==="number")a.append(g(t,"hp_v",e.label,n.decimals?"decimal":"numeric",i)),n.unit&&a.append(t("span","u",n.unit));else if(n.kind==="birthday"){let[,s,l,f]=/^(\d{4}|-)-(\d\d)-(\d\d)$/.exec(i??"")??[],u=O(o||void 0),p=_(t,"hp_d","Day",31,String,f),m=_(t,"hp_m","Month",12,u.name,l);if(a.append(...u.monthFirst?[m,p]:[p,m]),n.year!=="none"){let d=g(t,"hp_y","Year","numeric",s==="-"?"":s);d.placeholder=n.year==="required"?"Year":"Year (optional)",d.autocomplete="bday-year",d.maxLength=4,a.append(d)}}else{let s=g(t,"hp_v",e.label,"none",i);s.type="date",s.min="1900-01-01",s.max="2100-12-31",a.append(s)}r.append(a)}function v(r,e){try{return new Intl.NumberFormat(e||void 0).format(r)}catch{return String(r)}}var A=(r,e,t)=>{let i=new Date(Date.UTC(r,e-1,t));return i.getUTCMonth()===e-1&&i.getUTCDate()===t};function F(r){let e=r.replace(/\s/g,""),t=e.lastIndexOf(","),i=e.lastIndexOf(".");return t>=0&&i>=0?t>i?e.replace(/\./g,"").replace(",","."):e.replace(/,/g,""):/^-?\d{1,3}(?:,\d{3})+$/.test(e)?e.replace(/,/g,""):e.replace(",",".")}function S(r,e,t=Date.now(),i=void 0){let o=e.format??{},n=c=>r.querySelector(`[name=${c}]`);if(e.type==="number"){let c=n("hp_v"),y=F(c.value);if(!y)return{value:null};let h=Number(y),x=I.exec(y);return x&&(x[1]?.replace(/0+$/,"").length??0)<=(o.decimals?2:0)&&Math.abs(h)<=N&&!(h<o.min||h>o.max)?{value:String(h===0?0:h)}:{error:`Enter a ${o.decimals?"":"whole "}number${o.min!=null&&o.max!=null?` from ${v(o.min,i)} to ${v(o.max,i)}`:""}.`,input:c}}let a=c=>({error:"Enter a real date.",input:c});if(o.kind!=="birthday"){let c=n("hp_v");return c.value?c.value>=c.min&&c.value<=c.max?{value:c.value}:a(c):{value:null}}let[s,l,f]=["hp_d","hp_m","hp_y"].map(n),u=f?.value.trim()??"";if(!s.value&&!l.value&&!u)return{value:null};if(!s.value||!l.value)return a(s.value?l:s);if(!u)return o.year==="required"||!A(2016,+l.value,+s.value)?a(f??s):{value:`--${l.value}-${s.value}`};let p=`${u}-${l.value}-${s.value}`,m=new Date(t).toISOString().slice(0,10),d=new Date(t+864e5).toISOString().slice(0,10),E=`${+m.slice(0,4)-T}${m.slice(4)}`;return/^\d{4}$/.test(u)&&A(+u,+l.value,+s.value)&&p<=d&&p>=E?{value:p}:a(f)}window[Symbol.for("@thg-agentic/hyper-personalisation-web.onsite.answers")]={answerFields:$,answerOf:S};})();