@thg-agentic/hyper-personalisation-web 3.32.0 → 3.35.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.
@@ -1,4 +1,4 @@
1
- (()=>{function _(t,e,n){let r=t.lastChild,s="ends_at"in e,i=s?Date.parse(e.ends_at):Date.now()+Math.max(0,Number(e.minutes)||0)*6e4,c=()=>{let a=Math.max(0,i-Date.now())||0,u=Math.floor(a/864e5);r.textContent=`${u?`${u}d `:""}${new Date(a).toISOString().slice(a<36e5?14:11,19)}`,t.hidden=!a&&s&&!n,a||clearInterval(o)},o=setInterval(c,1e3);return c(),()=>clearInterval(o)}var y=t=>t!==null&&typeof t=="object"&&!Array.isArray(t);function w(t,e,n,r,s){let i=t("select","i");i.setAttribute("aria-label",e);for(let[c,o]of[["",n],...r]){let a=t("option","",o);a.value=c,a.selected=c===s,i.append(a)}return i}var $=t=>(t.options??[]).filter(e=>y(e)&&typeof e.value=="string");function S(t,e,n,r,s){let i=t("input");return i.type=s,i.name=`q_${e.key}`,i.value=n.value,i.checked=r.includes(n.value),i}var A=t=>{let e=t.options.length;return e<=4?e:e%4?3:4};var M=t=>String(t).padStart(2,"0"),R=120,U=/^-?\d{1,10}(?:\.(\d{1,10}))?$/,z=1e9;function L(t){try{let e=new Intl.DateTimeFormat(t,{month:"long",timeZone:"UTC"});return{name:n=>e.format(Date.UTC(2016,n-1,1)),monthFirst:new Intl.DateTimeFormat(t,{month:"numeric",day:"numeric"}).formatToParts(0).find(n=>n.type!=="literal")?.type==="month"}}catch{return{name:String,monthFirst:!1}}}var q=(t,e,n,r,s,i)=>{let c=w(t,n,n,Array.from({length:r},(o,a)=>[M(a+1),s(a+1)]),i);return c.name=e,c};function v(t,e,n,r,s){let i=t("input","i");return i.name=e,i.inputMode=r,i.setAttribute("aria-label",n),i.value=s??"",i}function C(t,e,n,r,s){let i=e.format??{},c=n("div",i.kind==="birthday"?"ph bd":"ph");if(e.type==="number")c.append(v(n,"hp_v",e.label,i.decimals?"decimal":"numeric",r)),i.unit&&c.append(n("span","u",i.unit));else if(i.kind==="birthday"){let[,o,a,u]=/^(\d{4}|-)-(\d\d)-(\d\d)$/.exec(r??"")??[],p=L(s||void 0),d=q(n,"hp_d","Day",31,String,u),m=q(n,"hp_m","Month",12,p.name,a);if(c.append(...p.monthFirst?[m,d]:[d,m]),i.year!=="none"){let f=v(n,"hp_y","Year","numeric",o==="-"?"":o);f.placeholder=i.year==="required"?"Year":"Year (optional)",f.autocomplete="bday-year",f.maxLength=4,c.append(f)}}else{let o=v(n,"hp_v",e.label,"none",r);o.type="date",o.min="1900-01-01",o.max="2100-12-31",c.append(o)}t.append(c)}function I(t,e){try{return new Intl.NumberFormat(e||void 0).format(t)}catch{return String(t)}}var D=(t,e,n)=>{let r=new Date(Date.UTC(t,e-1,n));return r.getUTCMonth()===e-1&&r.getUTCDate()===n};function P(t){let e=t.replace(/\s/g,""),n=e.lastIndexOf(","),r=e.lastIndexOf(".");return n>=0&&r>=0?n>r?e.replace(/\./g,"").replace(",","."):e.replace(/,/g,""):/^-?\d{1,3}(?:,\d{3})+$/.test(e)?e.replace(/,/g,""):e.replace(",",".")}function N(t,e,n=Date.now(),r=void 0){let s=e.format??{},i=l=>t.querySelector(`[name=${l}]`);if(e.type==="number"){let l=i("hp_v"),x=P(l.value);if(!x)return{value:null};let h=Number(x),b=U.exec(x);return b&&(b[1]?.replace(/0+$/,"").length??0)<=(s.decimals?2:0)&&Math.abs(h)<=z&&!(h<s.min||h>s.max)?{value:String(h===0?0:h)}:{error:`Enter a ${s.decimals?"":"whole "}number${s.min!=null&&s.max!=null?` from ${I(s.min,r)} to ${I(s.max,r)}`:""}.`,input:l}}let c=l=>({error:"Enter a real date.",input:l});if(s.kind!=="birthday"){let l=i("hp_v");return l.value?l.value>=l.min&&l.value<=l.max?{value:l.value}:c(l):{value:null}}let[o,a,u]=["hp_d","hp_m","hp_y"].map(i),p=u?.value.trim()??"";if(!o.value&&!a.value&&!p)return{value:null};if(!o.value||!a.value)return c(o.value?a:o);if(!p)return s.year==="required"||!D(2016,+a.value,+o.value)?c(u??o):{value:`--${a.value}-${o.value}`};let d=`${p}-${a.value}-${o.value}`,m=new Date(n).toISOString().slice(0,10),f=new Date(n+864e5).toISOString().slice(0,10),g=`${+m.slice(0,4)-R}${m.slice(4)}`;return/^\d{4}$/.test(p)&&D(+p,+a.value,+o.value)&&d<=f&&d>=g?{value:d}:c(u)}var k=`.cd{display:contents}
1
+ (()=>{function v(t,e,r,i){let o=t.lastChild,n=e.daily&&(()=>i?.find?.(l=>l>Date.now())||0),a=n||"ends_at"in e,s=n?n():"ends_at"in e?Date.parse(e.ends_at):Date.now()+Math.max(0,Number(e.minutes)||0)*6e4,c=()=>{n&&s<=Date.now()&&(s=n());let l=Math.max(0,s-Date.now())||0,p=Math.floor(l/864e5);o.textContent=`${p?`${p}d `:""}${new Date(l).toISOString().slice(l<36e5?14:11,19)}`,t.hidden=!l&&a&&!r,!l&&!(n&&s)&&clearInterval(d)},d=setInterval(c,1e3);return c(),()=>clearInterval(d)}var y=t=>t!==null&&typeof t=="object"&&!Array.isArray(t);function w(t,e,r,i,o){let n=t("select","i");n.setAttribute("aria-label",e);for(let[a,s]of[["",r],...i]){let c=t("option","",s);c.value=a,c.selected=a===o,n.append(c)}return n}var S=t=>(t.options??[]).filter(e=>y(e)&&typeof e.value=="string");function $(t,e,r,i,o){let n=t("input");return n.type=o,n.name=`q_${e.key}`,n.value=r.value,n.checked=i.includes(r.value),n}var A=t=>{let e=t.options.length;return e<=4?e:e%4?3:4};var M=t=>String(t).padStart(2,"0"),U=120,R=/^-?\d{1,10}(?:\.(\d{1,10}))?$/,z=1e9;function L(t){try{let e=new Intl.DateTimeFormat(t,{month:"long",timeZone:"UTC"});return{name:r=>e.format(Date.UTC(2016,r-1,1)),monthFirst:new Intl.DateTimeFormat(t,{month:"numeric",day:"numeric"}).formatToParts(0).find(r=>r.type!=="literal")?.type==="month"}}catch{return{name:String,monthFirst:!1}}}var D=(t,e,r,i,o,n)=>{let a=w(t,r,r,Array.from({length:i},(s,c)=>[M(c+1),o(c+1)]),n);return a.name=e,a};function b(t,e,r,i,o){let n=t("input","i");return n.name=e,n.inputMode=i,n.setAttribute("aria-label",r),n.value=o??"",n}function E(t,e,r,i,o){let n=e.format??{},a=r("div",n.kind==="birthday"?"ph bd":"ph");if(e.type==="number")a.append(b(r,"hp_v",e.label,n.decimals?"decimal":"numeric",i)),n.unit&&a.append(r("span","u",n.unit));else if(n.kind==="birthday"){let[,s,c,d]=/^(\d{4}|-)-(\d\d)-(\d\d)$/.exec(i??"")??[],l=L(o||void 0),p=D(r,"hp_d","Day",31,String,d),m=D(r,"hp_m","Month",12,l.name,c);if(a.append(...l.monthFirst?[m,p]:[p,m]),n.year!=="none"){let f=b(r,"hp_y","Year","numeric",s==="-"?"":s);f.placeholder=n.year==="required"?"Year":"Year (optional)",f.autocomplete="bday-year",f.maxLength=4,a.append(f)}}else{let s=b(r,"hp_v",e.label,"none",i);s.type="date",s.min="1900-01-01",s.max="2100-12-31",a.append(s)}t.append(a)}function I(t,e){try{return new Intl.NumberFormat(e||void 0).format(t)}catch{return String(t)}}var q=(t,e,r)=>{let i=new Date(Date.UTC(t,e-1,r));return i.getUTCMonth()===e-1&&i.getUTCDate()===r};function P(t){let e=t.replace(/\s/g,""),r=e.lastIndexOf(","),i=e.lastIndexOf(".");return r>=0&&i>=0?r>i?e.replace(/\./g,"").replace(",","."):e.replace(/,/g,""):/^-?\d{1,3}(?:,\d{3})+$/.test(e)?e.replace(/,/g,""):e.replace(",",".")}function C(t,e,r=Date.now(),i=void 0){let o=e.format??{},n=u=>t.querySelector(`[name=${u}]`);if(e.type==="number"){let u=n("hp_v"),x=P(u.value);if(!x)return{value:null};let h=Number(x),_=R.exec(x);return _&&(_[1]?.replace(/0+$/,"").length??0)<=(o.decimals?2:0)&&Math.abs(h)<=z&&!(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 ${I(o.min,i)} to ${I(o.max,i)}`:""}.`,input:u}}let a=u=>({error:"Enter a real date.",input:u});if(o.kind!=="birthday"){let u=n("hp_v");return u.value?u.value>=u.min&&u.value<=u.max?{value:u.value}:a(u):{value:null}}let[s,c,d]=["hp_d","hp_m","hp_y"].map(n),l=d?.value.trim()??"";if(!s.value&&!c.value&&!l)return{value:null};if(!s.value||!c.value)return a(s.value?c:s);if(!l)return o.year==="required"||!q(2016,+c.value,+s.value)?a(d??s):{value:`--${c.value}-${s.value}`};let p=`${l}-${c.value}-${s.value}`,m=new Date(r).toISOString().slice(0,10),f=new Date(r+864e5).toISOString().slice(0,10),g=`${+m.slice(0,4)-U}${m.slice(4)}`;return/^\d{4}$/.test(l)&&q(+l,+c.value,+s.value)&&p<=f&&p>=g?{value:p}:a(d)}var k=`.cd{display:contents}
2
2
  .cd>.x-md{color:var(--mu)}
3
3
  .tm{font-size:40px;line-height:1;font-weight:800;letter-spacing:.02em;font-variant-numeric:tabular-nums;text-align:center}
4
4
  .qw{container-type:inline-size;width:100%}
@@ -12,4 +12,4 @@
12
12
  .qk :checked~.qf{box-shadow:0 0 0 2px var(--b),0 0 0 4px var(--a)}
13
13
  .qk :checked~.qf::after{content:"\u2713";position:absolute;top:8px;right:8px;display:grid;place-content:center;width:26px;height:26px;border-radius:50%;background:var(--a);color:var(--ot);font:700 15px/1 sans-serif}
14
14
  .ql{font-size:15px;font-weight:600;line-height:1.3;text-align:center}
15
- @media (prefers-reduced-motion:reduce){.qi{transition:none}}`,E=new WeakSet;function O(t,e){if(E.has(t))return;E.add(t);let n=e("style");n.textContent=k,t.append(n)}function T(t,e,n,r){O(t.getRootNode(),r),e.label&&t.append(r("p","x-md",e.label));let s=r("p","tm");return s.setAttribute("role","timer"),t.append(s),_(t,e,n)}function F(t,e,n,r,s,i,c){let{pictures:o}=n,a=$(e);O(c,r);let u=r("div","qc");u.style.setProperty("--n",String(A(e)));let p=r("div","qw");p.append(u);for(let d of a){let m=r("span","qf"),f=y(o)?o[d.value]:null,g=y(f)&&i(f);g&&m.append(g);let l=r("label","qk");l.append(S(r,e,d,s,"radio"),m,r("span","ql",d.label??d.value)),u.append(l)}t.append(p)}window[Symbol.for("@thg-agentic/hyper-personalisation-web.onsite.answers")]={answerCards:F,answerFields:C,answerOf:N,countdown:T};})();
15
+ @media (prefers-reduced-motion:reduce){.qi{transition:none}}`,O=new WeakSet;function N(t,e){if(O.has(t))return;O.add(t);let r=e("style");r.textContent=k,t.append(r)}function T(t,e,r,i,o){N(t.getRootNode(),i),e.label&&t.append(i("p","x-md",e.label));let n=i("p","tm");return n.setAttribute("role","timer"),t.append(n),v(t,e,r,o)}function F(t,e,r,i,o,n,a){let{pictures:s}=r,c=S(e);N(a,i);let d=i("div","qc");d.style.setProperty("--n",String(A(e)));let l=i("div","qw");l.append(d);for(let p of c){let m=i("span","qf"),f=y(s)?s[p.value]:null,g=y(f)&&n(f);g&&m.append(g);let u=i("label","qk");u.append($(i,e,p,o,"radio"),m,i("span","ql",p.label??p.value)),d.append(u)}t.append(l)}window[Symbol.for("@thg-agentic/hyper-personalisation-web.onsite.answers")]={answerCards:F,answerFields:E,answerOf:C,countdown:T};})();
@@ -1 +1 @@
1
- (()=>{var w=["source","medium","campaign","content","term"];var d=e=>String(e).trim().toLowerCase();function f(e,t,n){let i=d(e),o=d(n);return t==="is"?i===o:t==="contains"&&o!==""&&i.includes(o)}function S(e){return e.trim().toLowerCase().replace(/\s*\/\s*/g,"/").replace(/^\/+|\/+$/g,"")}var O={gte:(e,t)=>e>=t,greater_than_or_equal:(e,t)=>e>=t,">=":(e,t)=>e>=t,lte:(e,t)=>e<=t,less_than_or_equal:(e,t)=>e<=t,"<=":(e,t)=>e<=t,eq:(e,t)=>e===t,equals:(e,t)=>e===t,"=":(e,t)=>e===t},p=e=>typeof e=="string",u=(e,t)=>p(t)&&f(e,"is",t),x={eq:u,equals:u,"=":u,neq:(e,t)=>p(t)&&!u(e,t),in:(e,t)=>Array.isArray(t)&&t.some(n=>u(e,n)),contains:(e,t)=>p(t)&&f(e,"contains",t)},g={in:(e,t)=>t.some(n=>e.includes(n)),not_in:(e,t)=>!t.some(n=>e.includes(n)),all:(e,t)=>t.every(n=>e.includes(n))},G=new Set([...Object.keys(O),...Object.keys(x),...Object.keys(g),"between"]);function m(e,t){let n=S(t);return n?e.filter(i=>i===n||i.startsWith(`${n}/`)).length:0}function A(e,t){return e.length===0?0:m(e,t)/e.length}var j={categoryViews:(e,t)=>m(e.recentCategories,t),categoryShare:(e,t)=>A(e.recentCategories,t),browseViews:(e,t)=>m(e.recentBrowse,t),browseShare:(e,t)=>A(e.recentBrowse,t)};function I(e,t){let n=e.indexOf(".");if(n>0){let o=e.slice(0,n),s=e.slice(n+1);if(o==="campaign"){let r=w.includes(s)?t.campaign?.[s]:null;return typeof r=="string"?r:null}if(o==="answer"){let{answers:r}=t;return!r||typeof r!="object"?null:Object.hasOwn(r,s)&&Array.isArray(r[s])?r[s]:[]}let c=j[o];return c&&s?c(t,s):null}let i=t[e];return typeof i=="number"?i:null}function v(e,t){let n=I(e.field,t);if(n===null)return!1;if(Array.isArray(n))return Array.isArray(e.value)&&e.value.length>0&&Object.hasOwn(g,e.operator)&&g[e.operator](n,e.value);if(typeof n=="string"){let o=x[e.operator];return o?o(n,e.value):!1}if(e.operator==="between")return typeof e.value=="number"&&typeof e.value2=="number"&&n>=e.value&&n<=e.value2;let i=O[e.operator];return!i||typeof e.value!="number"?!1:i(n,e.value)}function y(e,t){let n=e.rules??[];if(n.length===0)return!1;let i=new Map;for(let c of n){let r=c.group??0,a=i.get(r);a?a.push(c):i.set(r,[c])}let o=e.groupOperators??[],s=[];for(let[c,r]of i)s.push(o[c]==="OR"?r.some(a=>v(a,t)):r.every(a=>v(a,t)));return e.groupJoin==="OR"?s.some(Boolean):s.every(Boolean)}function _(e,t){return e.early===!0&&Array.isArray(e.answer_rules)&&typeof t?.answers=="object"&&y({...e,rules:[...e.rules??[],...e.answer_rules]},t)}function b(e,t){if(!Array.isArray(t))return e;let n=new Set(t),i=e.recentBrowseCategories??[],o=(e.recentBrowse??[]).filter((c,r)=>n.has(i[r])),s=Object.entries(e.listViewsByCategory??{}).reduce((c,[r,a])=>n.has(r)?c+a:c,0);return{...e,recentBrowse:o,listViews:s}}var N=100,T=128,q=e=>typeof e=="string"&&e!==""&&e.length<=T,l=new WeakMap;function h(e){if(!l.has(e)){let t=e.datafile().then(n=>n.status===200?n.body:null).catch(()=>null);l.set(e,t),t.then(n=>{!n&&l.get(e)===t&&l.delete(e)})}return l.get(e)}async function E(e,t,n=[],i=[]){let o=await h(e),s=t?.(),c=Array.isArray(o?.session_audiences)?o.session_audiences:[],r=o&&s?M(o,s):[],a=R([...r,...i],n,c),C=o&&s?M(o,s,_):[];return{claims:a,answered:R(C,n,c)}}function R(e,t,n){let i=new Map(n.map(r=>[r?.slug,Array.isArray(r?.requires)?r.requires:[]])),o=new Set,s=r=>{if(!o.has(r)){o.add(r);for(let a of i.get(r)??[])s(a)}};for(let r of t)s(r);let c=[...new Set(e.filter(q))];return[...c.filter(r=>o.has(r)),...c.filter(r=>!o.has(r))].slice(0,N)}function M(e,t,n=y){let i=Array.isArray(e?.session_audiences)?e.session_audiences:[],o=b(t,e.browse_categories??null);return i.filter(s=>q(s?.slug)&&n(s,o)).map(s=>s.slug)}window[Symbol.for("@thg-agentic/hyper-personalisation-web.onsite.audiences")]={prefetch:h,visitAudiences:E};})();
1
+ (()=>{var w=["source","medium","campaign","content","term"];var d=e=>String(e).trim().toLowerCase();function f(e,t,n){let i=d(e),o=d(n);return t==="is"?i===o:t==="contains"&&o!==""&&i.includes(o)}function S(e){return e.trim().toLowerCase().replace(/\s*\/\s*/g,"/").replace(/^\/+|\/+$/g,"")}var O={gte:(e,t)=>e>=t,greater_than_or_equal:(e,t)=>e>=t,">=":(e,t)=>e>=t,lte:(e,t)=>e<=t,less_than_or_equal:(e,t)=>e<=t,"<=":(e,t)=>e<=t,eq:(e,t)=>e===t,equals:(e,t)=>e===t,"=":(e,t)=>e===t},p=e=>typeof e=="string",u=(e,t)=>p(t)&&f(e,"is",t),b={eq:u,equals:u,"=":u,neq:(e,t)=>p(t)&&!u(e,t),in:(e,t)=>Array.isArray(t)&&t.some(n=>u(e,n)),contains:(e,t)=>p(t)&&f(e,"contains",t)},g={in:(e,t)=>t.some(n=>e.includes(n)),not_in:(e,t)=>!t.some(n=>e.includes(n)),all:(e,t)=>t.every(n=>e.includes(n))},G=new Set([...Object.keys(O),...Object.keys(b),...Object.keys(g),"between"]);function m(e,t){let n=S(t);return n?e.filter(i=>i===n||i.startsWith(`${n}/`)).length:0}function A(e,t){return e.length===0?0:m(e,t)/e.length}var j={categoryViews:(e,t)=>m(e.recentCategories,t),categoryShare:(e,t)=>A(e.recentCategories,t),browseViews:(e,t)=>m(e.recentBrowse,t),browseShare:(e,t)=>A(e.recentBrowse,t)};function I(e,t){let n=e.indexOf(".");if(n>0){let o=e.slice(0,n),s=e.slice(n+1);if(o==="campaign"){let r=w.includes(s)?t.campaign?.[s]:null;return typeof r=="string"?r:null}if(o==="answer"){let{answers:r}=t;return!r||typeof r!="object"?null:Object.hasOwn(r,s)&&Array.isArray(r[s])?r[s]:[]}let a=j[o];return a&&s?a(t,s):null}let i=e==="basketCodeCount"?t.basketCodes?.length:t[e];return typeof i=="number"?i:null}function v(e,t){let n=I(e.field,t);if(n===null)return!1;if(Array.isArray(n))return Array.isArray(e.value)&&e.value.length>0&&Object.hasOwn(g,e.operator)&&g[e.operator](n,e.value);if(typeof n=="string"){let o=b[e.operator];return o?o(n,e.value):!1}if(e.operator==="between")return typeof e.value=="number"&&typeof e.value2=="number"&&n>=e.value&&n<=e.value2;let i=O[e.operator];return!i||typeof e.value!="number"?!1:i(n,e.value)}function y(e,t){let n=e.rules??[];if(n.length===0)return!1;let i=new Map;for(let a of n){let r=a.group??0,c=i.get(r);c?c.push(a):i.set(r,[a])}let o=e.groupOperators??[],s=[];for(let[a,r]of i)s.push(o[a]==="OR"?r.some(c=>v(c,t)):r.every(c=>v(c,t)));return e.groupJoin==="OR"?s.some(Boolean):s.every(Boolean)}function x(e,t){return e.early===!0&&Array.isArray(e.answer_rules)&&typeof t?.answers=="object"&&y({...e,rules:[...e.rules??[],...e.answer_rules]},t)}function _(e,t){if(!Array.isArray(t))return e;let n=new Set(t),i=e.recentBrowseCategories??[],o=(e.recentBrowse??[]).filter((a,r)=>n.has(i[r])),s=Object.entries(e.listViewsByCategory??{}).reduce((a,[r,c])=>n.has(r)?a+c:a,0);return{...e,recentBrowse:o,listViews:s}}var N=100,T=128,M=e=>typeof e=="string"&&e!==""&&e.length<=T,l=new WeakMap;function h(e){if(!l.has(e)){let t=e.datafile().then(n=>n.status===200?n.body:null).catch(()=>null);l.set(e,t),t.then(n=>{!n&&l.get(e)===t&&l.delete(e)})}return l.get(e)}async function q(e,t,n=[],i=[]){let o=await h(e),s=t?.(),a=Array.isArray(o?.session_audiences)?o.session_audiences:[],r=o&&s?C(o,s):[],c=R([...r,...i],n,a),E=o&&s?C(o,s,x):[];return{claims:c,answered:R(E,n,a)}}function R(e,t,n){let i=new Map(n.map(r=>[r?.slug,Array.isArray(r?.requires)?r.requires:[]])),o=new Set,s=r=>{if(!o.has(r)){o.add(r);for(let c of i.get(r)??[])s(c)}};for(let r of t)s(r);let a=[...new Set(e.filter(M))];return[...a.filter(r=>o.has(r)),...a.filter(r=>!o.has(r))].slice(0,N)}function C(e,t,n=y){let i=Array.isArray(e?.session_audiences)?e.session_audiences:[],o=_(t,e.browse_categories??null);return i.filter(s=>M(s?.slug)&&n(s,o)).map(s=>s.slug)}window[Symbol.for("@thg-agentic/hyper-personalisation-web.onsite.audiences")]={prefetch:h,visitAudiences:q};})();
@@ -1,4 +1,4 @@
1
- (()=>{var P=Array.from({length:11},(t,e)=>e/10);function F(t,e){if(!t.isIntersecting)return!1;let{intersectionRect:s,boundingClientRect:n,rootBounds:c}=t;if(!s||!n)return!0;let f=s.width*s.height,a=n.width*n.height,u=c?Math.min(a,c.width*c.height):a;return u>0&&f/u>=e}function R(t){let{selector:e,onViewable:s,visibleRatio:n=.5,dwellMs:c=1e3,root:f=document}=t,a=new Map,u=new WeakSet,l=new Set,p=i=>{a.has(i)||a.set(i,setTimeout(()=>{a.delete(i),s(i)&&(h?.unobserve(i),l.delete(i))},c))},d=i=>{clearTimeout(a.get(i)),a.delete(i)},h=typeof IntersectionObserver>"u"?null:new IntersectionObserver(i=>{for(let E of i){let o=E.target;if(!F(E,n)){l.delete(o),d(o);continue}l.add(o),b()&&p(o)}},{threshold:P}),b=()=>typeof document>"u"||document.visibilityState!=="hidden",_=()=>{if(b())for(let i of l)p(i);else for(let i of l)d(i)};document.addEventListener("visibilitychange",_);let y=()=>{for(let i of f.querySelectorAll(e))u.has(i)||(u.add(i),h?.observe(i))},x=typeof MutationObserver>"u"?null:new MutationObserver(()=>y()),v=()=>{y(),x?.observe(f===document?document.body:f,{childList:!0,subtree:!0})},w=f===document&&!document.body;return w?document.addEventListener("DOMContentLoaded",v,{once:!0}):v(),()=>{w&&document.removeEventListener("DOMContentLoaded",v),document.removeEventListener("visibilitychange",_),h?.disconnect(),x?.disconnect();for(let i of a.values())clearTimeout(i);a.clear(),l.clear()}}function $(t,e){try{return new Intl.NumberFormat(t||void 0,{style:"currency",currency:e})}catch{return null}}function T(t){if(typeof t!="string")return null;try{let e=new URL(t);return e.protocol==="https:"?e.href:null}catch{return null}}var D=t=>t!==null&&typeof t=="object"&&!Array.isArray(t);var C=`.pr ul{list-style:none;margin:0;padding:0;display:grid;gap:12px}
1
+ (()=>{var F=Array.from({length:11},(t,e)=>e/10);function P(t,e){if(!t.isIntersecting)return!1;let{intersectionRect:s,boundingClientRect:n,rootBounds:c}=t;if(!s||!n)return!0;let f=s.width*s.height,a=n.width*n.height,u=c?Math.min(a,c.width*c.height):a;return u>0&&f/u>=e}function $(t){let{selector:e,onViewable:s,visibleRatio:n=.5,dwellMs:c=1e3,root:f=document}=t,a=new Map,u=new WeakSet,l=new Set,p=i=>{a.has(i)||a.set(i,setTimeout(()=>{a.delete(i),s(i)&&(g?.unobserve(i),l.delete(i))},c))},d=i=>{clearTimeout(a.get(i)),a.delete(i)},g=typeof IntersectionObserver>"u"?null:new IntersectionObserver(i=>{for(let E of i){let o=E.target;if(!P(E,n)){l.delete(o),d(o);continue}l.add(o),b()&&p(o)}},{threshold:F}),b=()=>typeof document>"u"||document.visibilityState!=="hidden",x=()=>{if(b())for(let i of l)p(i);else for(let i of l)d(i)};document.addEventListener("visibilitychange",x);let y=()=>{for(let i of f.querySelectorAll(e))u.has(i)||(u.add(i),g?.observe(i))},v=typeof MutationObserver>"u"?null:new MutationObserver(()=>y()),_=()=>{y(),v?.observe(f===document?document.body:f,{childList:!0,subtree:!0})},A=f===document&&!document.body;return A?document.addEventListener("DOMContentLoaded",_,{once:!0}):_(),()=>{A&&document.removeEventListener("DOMContentLoaded",_),document.removeEventListener("visibilitychange",x),g?.disconnect(),v?.disconnect();for(let i of a.values())clearTimeout(i);a.clear(),l.clear()}}function M(t,e){try{return new Intl.NumberFormat(t||void 0,{style:"currency",currency:e})}catch{return null}}function T(t){if(typeof t!="string")return null;try{let e=new URL(t);return e.protocol==="https:"?e.href:null}catch{return null}}var D=t=>t!==null&&typeof t=="object"&&!Array.isArray(t);var C=`.pr ul{list-style:none;margin:0;padding:0;display:grid;gap:12px}
2
2
  .pr-c ul{grid-auto-flow:column;grid-auto-columns:minmax(132px,42%);overflow-x:auto;scroll-snap-type:x mandatory;scroll-behavior:smooth;padding-bottom:6px;overscroll-behavior-x:contain}
3
3
  .pr-c li{scroll-snap-align:start}
4
4
  .pr-g ul{grid-template-columns:repeat(auto-fill,minmax(132px,1fr))}
@@ -19,4 +19,4 @@
19
19
  .ar+.ar{left:auto;right:-6px}
20
20
  .ar[aria-disabled=true]{opacity:.35;cursor:default}
21
21
  .mob .ar,.pr-f .ar{display:none}
22
- @media (prefers-reduced-motion:reduce){.pr-c ul{scroll-behavior:auto}}`,z=["left","center","right"];function q(t,e){let s=$(t,e);return s?n=>s.format(n):n=>n.toFixed(2)}function M(t,e,s){let{el:n}=s,c=D(e.served)?e.served:{},f=Number.isInteger(e.limit)?Math.min(Math.max(e.limit,1),12):4,a=(Array.isArray(c.products)?c.products:[]).filter(o=>D(o)&&typeof o.product_id=="string"&&T(o.url)).slice(0,f);if(a.length===0)return;let u=D(e.show)?e.show:{},l=e.layout==="grid";t.classList.add(l?"pr-g":"pr-c"),z.includes(e.align)&&t.classList.add(`a-${e.align}`),l||(t.setAttribute("role","region"),t.setAttribute("aria-label","Products"));let p=n("style");p.textContent=C;let d=n("ul");d.setAttribute("role","list");let h=(o,r)=>({product_id:o.product_id,...typeof o.name=="string"?{name:o.name}:{},...Number.isFinite(o.price)?{price:o.price}:{},position:r}),b=typeof c.recommendation_request_id=="string"&&!s.preview?s.client:null,_=new Map,y=c.recommendation_request_id,x=s.seen??new Set,v=null,w=()=>{clearTimeout(v),!(!b||x.has(y))&&(x.add(y),b.recommendationsViewed({recommendation_request_id:y,placement:c.placement||s.placement,strategy:c.strategy||c.recipe||e.source,recipe:c.recipe??null,algorithm_version:c.algorithm_version??null,products:a.map((o,r)=>h(o,r+1)),viewable:[..._.values()].sort((o,r)=>o.position-r.position)}))};for(let[o,r]of a.entries()){let L=o+1,S=n("li","pc");S.dataset.hpProduct=r.product_id,S.dataset.hpPosition=String(L);let g=n("a","pa"),O=typeof r.name=="string"?r.name:"",I=T(r.image);if(I){let m=n("img","pi");m.alt=u.name===!1?O:"",m.loading="lazy",m.decoding="async",m.src=I;let A=n("span","pf");A.append(m),g.append(A)}else g.append(n("span","pf e"));if(u.name!==!1&&g.append(n("span","pn",O)),u.price!==!1&&Number.isFinite(r.price)){let m=q(s.lang,r.currency),A=n("span","pp");if(A.append(n("span","",m(r.price))),Number.isFinite(r.compare_at_price)&&r.compare_at_price>r.price){let N=n("s","",m(r.compare_at_price));N.setAttribute("aria-label",`was ${m(r.compare_at_price)}`),A.append(" ",N)}g.append(A)}u.name===!1&&!I&&g.setAttribute("aria-label",O||r.product_id),typeof e.button=="string"&&e.button&&g.append(n("span","btn bs pb",e.button)),g.href=T(r.url),g.rel="noopener",g.addEventListener("click",m=>{if(s.preview)return m.preventDefault();w(),b?.productClicked({recommendation_request_id:c.recommendation_request_id,interaction:"navigate",products:[h(r,L)]}),s.engaged("click",void 0,{position:L,products:[h(r,L)]})}),S.append(g),d.append(S)}t.append(p,d);let i=l?null:V(t,d,n),E=b&&!x.has(y)&&R({selector:"[data-hp-product]",root:s.root,onViewable(o){let r=Number(o.dataset.hpPosition);return _.has(r)||_.set(r,{position:r,product_id:o.dataset.hpProduct,viewable_at:new Date().toISOString()}),v??(v=setTimeout(w,0)),!0}});return()=>{i?.disconnect(),E&&E()}}function V(t,e,s){let n=["Previous","Next"].map((u,l)=>{let p=s("button","ar",l?"\u203A":"\u2039");return p.type="button",p.setAttribute("aria-label",`${u} products`),p.addEventListener("click",()=>e.scrollBy({left:(l?1:-1)*e.clientWidth})),e.before(p),p}),c="",f=()=>{let u=e.scrollWidth-e.clientWidth,l=e.scrollLeft,p=e.firstElementChild?.offsetWidth??0,d=[u<2,l<2,l>u-2,p];`${d}`!==c&&(c=`${d}`,t.classList.toggle("pr-f",d[0]),t.style.setProperty("--ph",`${p}px`),n[0].setAttribute("aria-disabled",String(d[1])),n[1].setAttribute("aria-disabled",String(d[2])))};e.addEventListener("scroll",f,{passive:!0}),f();let a=globalThis.ResizeObserver&&new ResizeObserver(f);return a?.observe(e),a}window[Symbol.for("@thg-agentic/hyper-personalisation-web.onsite.products")]={mountProducts:M};})();
22
+ @media (prefers-reduced-motion:reduce){.pr-c ul{scroll-behavior:auto}}`,z=["left","center","right"];function q(t,e){let s=M(t,e);return s?n=>s.format(n):n=>n.toFixed(2)}function R(t,e,s){let{el:n}=s,c=D(e.served)?e.served:{},f=Number.isInteger(e.limit)?Math.min(Math.max(e.limit,1),12):4,a=(Array.isArray(c.products)?c.products:[]).filter(o=>D(o)&&typeof o.product_id=="string"&&T(o.url)).slice(0,f);if(a.length===0)return;let u=D(e.show)?e.show:{},l=e.layout==="grid";t.classList.add(l?"pr-g":"pr-c"),z.includes(e.align)&&t.classList.add(`a-${e.align}`),l||(t.setAttribute("role","region"),t.setAttribute("aria-label","Products"));let p=n("style");p.textContent=C;let d=n("ul");d.setAttribute("role","list");let g=(o,r)=>({product_id:o.product_id,...typeof o.name=="string"?{name:o.name}:{},...Number.isFinite(o.price)?{price:o.price}:{},position:r}),b=typeof c.recommendation_request_id=="string"&&!s.preview?s.client:null,x=new Map,y=c.recommendation_request_id,v=s.seen??new Set,_=null,A=()=>{clearTimeout(_),!(!b||v.has(y))&&(v.add(y),b.recommendationsViewed({recommendation_request_id:y,placement:c.placement||s.placement,strategy:c.strategy||c.recipe||e.source,recipe:c.recipe??null,algorithm_version:c.algorithm_version??null,products:a.map((o,r)=>g(o,r+1)),viewable:[...x.values()].sort((o,r)=>o.position-r.position)}))};for(let[o,r]of a.entries()){let S=o+1,L=n("li","pc");L.dataset.hpProduct=r.product_id,L.dataset.hpPosition=String(S);let h=n("a","pa"),I=typeof r.name=="string"?r.name:"",O=T(r.image);if(O){let m=n("img","pi");m.alt=u.name===!1?I:"",m.loading="lazy",m.decoding="async",m.src=O;let w=n("span","pf");w.append(m),h.append(w)}else h.append(n("span","pf e"));if(u.name!==!1&&h.append(n("span","pn",I)),u.price!==!1&&Number.isFinite(r.price)){let m=q(s.lang,r.currency),w=n("span","pp");if(w.append(n("span","",m(r.price))),Number.isFinite(r.compare_at_price)&&r.compare_at_price>r.price){let N=n("s","",m(r.compare_at_price));N.setAttribute("aria-label",`was ${m(r.compare_at_price)}`),w.append(" ",N)}h.append(w)}u.name===!1&&!O&&h.setAttribute("aria-label",I||r.product_id),typeof e.button=="string"&&e.button&&h.append(n("span","btn bs pb",e.button)),h.href=T(r.url),h.rel="noopener",h.addEventListener("click",m=>{if(s.preview)return m.preventDefault();A(),b?.productClicked({recommendation_request_id:c.recommendation_request_id,interaction:"navigate",products:[g(r,S)]}),s.engaged("click",void 0,{position:S,products:[g(r,S)]})}),L.append(h),d.append(L)}t.append(p,d);let i=l?null:H(t,d,n),E=b&&!v.has(y)&&$({selector:"[data-hp-product]",root:s.root,onViewable(o){let r=Number(o.dataset.hpPosition);return x.has(r)||x.set(r,{position:r,product_id:o.dataset.hpProduct,viewable_at:new Date().toISOString()}),_??(_=setTimeout(A,0)),!0}});return()=>{i?.disconnect(),E&&E()}}function H(t,e,s){let n=["Previous","Next"].map((u,l)=>{let p=s("button","ar",l?"\u203A":"\u2039");return p.type="button",p.setAttribute("aria-label",`${u} products`),p.addEventListener("click",()=>e.scrollBy({left:(l?1:-1)*e.clientWidth})),e.before(p),p}),c="",f=()=>{let u=e.scrollWidth-e.clientWidth,l=e.scrollLeft,p=e.firstElementChild?.offsetWidth??0,d=[u<2,l<2,l>u-2,p];`${d}`!==c&&(c=`${d}`,t.classList.toggle("pr-f",d[0]),t.style.setProperty("--ph",`${p}px`),n[0].setAttribute("aria-disabled",String(d[1])),n[1].setAttribute("aria-disabled",String(d[2])))};e.addEventListener("scroll",f,{passive:!0}),f();let a=globalThis.ResizeObserver&&new ResizeObserver(f);return a?.observe(e),a}window[Symbol.for("@thg-agentic/hyper-personalisation-web.onsite.products")]={mountProducts:R};})();
@@ -1,4 +1,4 @@
1
- (()=>{async function Be(o,r,a){let l=b=>Array.from(new Uint8Array(b),w=>w.toString(16).padStart(2,"0")).join(""),p=new TextEncoder,x=o.maxnumber??1e6;for(let b=0;b<=x;b+=256){let w=[];for(let C=b;C<b+256&&C<=x;C++)w.push(crypto.subtle.digest("SHA-256",p.encode(o.salt+C)));let h=(await Promise.all(w)).findIndex(C=>l(C)===o.challenge);if(h>=0)return b+h;if(r&&await r(),a?.aborted)return null}return null}var Ct=()=>globalThis.scheduler?.postTask?.(()=>{},{priority:"user-visible"})??new Promise(o=>setTimeout(o,0)),He=(o,r)=>Be(o,Ct,r);function Tt(o,r){let a=`onmessage=async(e)=>postMessage(await(${Be})(e.data))`,l=URL.createObjectURL(new Blob([a],{type:"text/javascript"}));return new Promise((p,x)=>{let b;try{b=new Worker(l)}catch(h){URL.revokeObjectURL(l),x(h);return}let w=(h,C)=>{b.terminate(),URL.revokeObjectURL(l),h(C)};r.addEventListener("abort",()=>w(p,null),{once:!0}),b.onmessage=h=>w(p,h.data),b.onerror=h=>{h.preventDefault?.(),w(x,h)},b.postMessage({challenge:o.challenge,salt:o.salt,maxnumber:o.maxnumber})})}var Lt=o=>o&&o.algorithm==="SHA-256"&&typeof o.challenge=="string"&&typeof o.salt=="string"&&typeof o.signature=="string";async function Ve(o){if(!Lt(o)||typeof crypto?.subtle?.digest!="function")return null;let r=Date.now(),a=new AbortController,l,p=new Promise(w=>{l=setTimeout(()=>w(null),2e4)}),x=typeof Worker=="function"&&typeof Blob=="function"?Tt(o,a.signal).catch(()=>He(o,a.signal)):He(o,a.signal),b=await Promise.race([x,p]);return clearTimeout(l),a.abort(),typeof b!="number"?null:btoa(JSON.stringify({algorithm:o.algorithm,challenge:o.challenge,number:b,salt:o.salt,signature:o.signature,took:Date.now()-r}))}function X(o){if(typeof o!="string")return null;try{let r=new URL(o);return r.protocol==="https:"?r.href:null}catch{return null}}function K(o){if(typeof o!="string")return null;try{let r=new URL(o);return r.protocol==="https:"||r.protocol==="http:"&&r.hostname==="localhost"?r.href:null}catch{return null}}function be(o,r,a,l){if(typeof r=="string"){o.append(a.createTextNode(r));return}if(l>6||r===null)return;if(Array.isArray(r)){for(let w of r)be(o,w,a,l+1);return}if(typeof r!="object")return;let p="b"in r?"b":"i"in r?"i":"a"in r?"a":null;if(!p)return;let x=p==="a"?X(r.href):null,b=p==="a"&&!x?o:a.createElement(p);x&&(b.setAttribute("href",x),b.setAttribute("rel","noopener")),be(b,r[p],a,l+1),b!==o&&o.append(b)}function Ge(o,r=document){let a=r.createDocumentFragment();return be(a,o,r,0),a}var M=o=>o!==null&&typeof o=="object"&&!Array.isArray(o);function ee(o,r,a){if(typeof a=="string"&&a)return a;let l=M(o?.next?.answers)?o.next.answers:{};for(let p of o?.blocks??[])for(let x of r[p?.question]??[]){let b=l[`${p.question}=${x}`];if(typeof b=="string")return b}return typeof o?.next?.default=="string"?o.next.default:null}var ge={AT:"43",AU:"61",BE:"32",CA:"1",CH:"41",DE:"49",DK:"45",ES:"34",FI:"358",FR:"33",GB:"44",IE:"353",IT:"39",NL:"31",NO:"47",NZ:"64",PL:"48",PT:"351",SE:"46",US:"1"};function Xe(o,r){let a=String(o??"").replace(/[\s.()-]/g,"");a.startsWith("00")&&(a=`+${a.slice(2)}`);let l=ge[String(r??"").toUpperCase()];return!a.startsWith("+")&&l&&(a=`+${l}${a.replace(/^0/,"")}`),/^\+[1-9]\d{7,14}$/.test(a)?a:null}var Ke=o=>/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(o);function xe(o,r,a,l,p){let x=o("select","i");x.setAttribute("aria-label",r);for(let[b,w]of[["",a],...l]){let h=o("option","",w);h.value=b,h.selected=b===p,x.append(h)}return x}var Ze=o=>{let r=o.options.length;return r<=4?r:r%4?3:4};var ve={system:"system-ui,sans-serif","neo-grotesque":'Inter,Roboto,"Helvetica Neue",Arial,sans-serif',humanist:'Seravek,"Gill Sans Nova",Ubuntu,Calibri,sans-serif',"geometric-humanist":"Avenir,Montserrat,Corbel,sans-serif","rounded-sans":'ui-rounded,Quicksand,Comfortaa,"Arial Rounded MT Bold",sans-serif',industrial:'Bahnschrift,"DIN Alternate","Franklin Gothic Medium",sans-serif',transitional:'Charter,"Sitka Text",Cambria,serif',"old-style":'"Iowan Old Style","Palatino Linotype",P052,serif',didone:'Didot,"Bodoni MT","Noto Serif Display",serif',"slab-serif":'Rockwell,"Roboto Slab","DejaVu Serif",serif'},ye="cubic-bezier(.16,1,.3,1)",we=`
1
+ (()=>{async function Be(i,r,a){let l=b=>Array.from(new Uint8Array(b),w=>w.toString(16).padStart(2,"0")).join(""),p=new TextEncoder,x=i.maxnumber??1e6;for(let b=0;b<=x;b+=256){let w=[];for(let C=b;C<b+256&&C<=x;C++)w.push(crypto.subtle.digest("SHA-256",p.encode(i.salt+C)));let h=(await Promise.all(w)).findIndex(C=>l(C)===i.challenge);if(h>=0)return b+h;if(r&&await r(),a?.aborted)return null}return null}var Ct=()=>globalThis.scheduler?.postTask?.(()=>{},{priority:"user-visible"})??new Promise(i=>setTimeout(i,0)),Ye=(i,r)=>Be(i,Ct,r);function Tt(i,r){let a=`onmessage=async(e)=>postMessage(await(${Be})(e.data))`,l=URL.createObjectURL(new Blob([a],{type:"text/javascript"}));return new Promise((p,x)=>{let b;try{b=new Worker(l)}catch(h){URL.revokeObjectURL(l),x(h);return}let w=(h,C)=>{b.terminate(),URL.revokeObjectURL(l),h(C)};r.addEventListener("abort",()=>w(p,null),{once:!0}),b.onmessage=h=>w(p,h.data),b.onerror=h=>{h.preventDefault?.(),w(x,h)},b.postMessage({challenge:i.challenge,salt:i.salt,maxnumber:i.maxnumber})})}var Ot=i=>i&&i.algorithm==="SHA-256"&&typeof i.challenge=="string"&&typeof i.salt=="string"&&typeof i.signature=="string";async function Ge(i){if(!Ot(i)||typeof crypto?.subtle?.digest!="function")return null;let r=Date.now(),a=new AbortController,l,p=new Promise(w=>{l=setTimeout(()=>w(null),2e4)}),x=typeof Worker=="function"&&typeof Blob=="function"?Tt(i,a.signal).catch(()=>Ye(i,a.signal)):Ye(i,a.signal),b=await Promise.race([x,p]);return clearTimeout(l),a.abort(),typeof b!="number"?null:btoa(JSON.stringify({algorithm:i.algorithm,challenge:i.challenge,number:b,salt:i.salt,signature:i.signature,took:Date.now()-r}))}function X(i){if(typeof i!="string")return null;try{let r=new URL(i);return r.protocol==="https:"?r.href:null}catch{return null}}function K(i){if(typeof i!="string")return null;try{let r=new URL(i);return r.protocol==="https:"||r.protocol==="http:"&&r.hostname==="localhost"?r.href:null}catch{return null}}function be(i,r,a,l){if(typeof r=="string"){i.append(a.createTextNode(r));return}if(l>6||r===null)return;if(Array.isArray(r)){for(let w of r)be(i,w,a,l+1);return}if(typeof r!="object")return;let p="b"in r?"b":"i"in r?"i":"a"in r?"a":null;if(!p)return;let x=p==="a"?X(r.href):null,b=p==="a"&&!x?i:a.createElement(p);x&&(b.setAttribute("href",x),b.setAttribute("rel","noopener")),be(b,r[p],a,l+1),b!==i&&i.append(b)}function Ve(i,r=document){let a=r.createDocumentFragment();return be(a,i,r,0),a}var I=i=>i!==null&&typeof i=="object"&&!Array.isArray(i);function ee(i,r,a){if(typeof a=="string"&&a)return a;let l=I(i?.next?.answers)?i.next.answers:{};for(let p of i?.blocks??[])for(let x of r[p?.question]??[]){let b=l[`${p.question}=${x}`];if(typeof b=="string")return b}return typeof i?.next?.default=="string"?i.next.default:null}var ge={AT:"43",AU:"61",BE:"32",CA:"1",CH:"41",DE:"49",DK:"45",ES:"34",FI:"358",FR:"33",GB:"44",IE:"353",IT:"39",NL:"31",NO:"47",NZ:"64",PL:"48",PT:"351",SE:"46",US:"1"};function Xe(i,r){let a=String(i??"").replace(/[\s.()-]/g,"");a.startsWith("00")&&(a=`+${a.slice(2)}`);let l=ge[String(r??"").toUpperCase()];return!a.startsWith("+")&&l&&(a=`+${l}${a.replace(/^0/,"")}`),/^\+[1-9]\d{7,14}$/.test(a)?a:null}var Ke=i=>/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(i);function xe(i,r,a,l,p){let x=i("select","i");x.setAttribute("aria-label",r);for(let[b,w]of[["",a],...l]){let h=i("option","",w);h.value=b,h.selected=b===p,x.append(h)}return x}var Ze=i=>{let r=i.options.length;return r<=4?r:r%4?3:4};var ve={system:"system-ui,sans-serif","neo-grotesque":'Inter,Roboto,"Helvetica Neue",Arial,sans-serif',humanist:'Seravek,"Gill Sans Nova",Ubuntu,Calibri,sans-serif',"geometric-humanist":"Avenir,Montserrat,Corbel,sans-serif","rounded-sans":'ui-rounded,Quicksand,Comfortaa,"Arial Rounded MT Bold",sans-serif',industrial:'Bahnschrift,"DIN Alternate","Franklin Gothic Medium",sans-serif',transitional:'Charter,"Sitka Text",Cambria,serif',"old-style":'"Iowan Old Style","Palatino Linotype",P052,serif',didone:'Didot,"Bodoni MT","Noto Serif Display",serif',"slab-serif":'Rockwell,"Roboto Slab","DejaVu Serif",serif'},ye="cubic-bezier(.16,1,.3,1)",we=`
2
2
  :host{all:initial}
3
3
  :host([preview]){display:block;position:relative;width:100%;height:100%;overflow:hidden;contain:layout paint}
4
4
  .s{--a:var(--hp-accent,#111);--b:var(--hp-bg,#fff);--t:var(--hp-text,#111);--r:var(--hp-radius,16px);--oa:var(--hp-on-accent,#fff);--ot:var(--hp-on-accent-text,var(--oa));--fl:var(--hp-field,color-mix(in srgb,var(--t) 5%,var(--b)));--ft:var(--hp-field-text,var(--t));--mu:color-mix(in srgb,var(--t) 74%,var(--b));--ln:color-mix(in srgb,var(--t) 18%,var(--b));--br:min(12px,var(--r));--ir:min(var(--r),8px);font:16px/1.5 var(--hp-font,system-ui,-apple-system,"Segoe UI",Roboto,sans-serif);color:var(--t);-webkit-font-smoothing:antialiased;box-sizing:border-box;margin:0;padding:0;border:0;background:none;max-width:none;max-height:none;overflow:visible}
@@ -178,4 +178,4 @@ hr{width:100%;margin:4px 0;border:0;border-top:1px solid var(--ln)}
178
178
  @keyframes hp-down{from{transform:translateY(-100%)}}
179
179
  @keyframes hp-out{to{opacity:0;transform:translateY(12px) scale(.98)}}
180
180
  @media (prefers-reduced-motion:reduce){.s .w,.s .ov,.f>*{animation:hp-fade .15s ease both!important}.btn{transition:none}}
181
- `;var Ot=/^#(?:[0-9a-f]{3}){1,2}$/i,Je=["popup","fullscreen"],Mt=["ok","verify","already"],Pt=["stack","split","overlay","image-only"],Qe={bar:["bottom","top"],sheet:["bottom-right","bottom-left","bottom"],teaser:["bottom-left","bottom-right","left","right"]},It=["xs","sm","md","lg","xl","display"],et={xs:4,sm:8,md:16,lg:28,xl:44},tt={sm:380,md:480,lg:880},qt=["left","center","right"],nt={secondary:" b2",link:" no"},Nt=220,jt=["verify","already","held","fallback","success"],Rt=[500,1500],Dt=600,Ut=1800,S={email:"Enter a valid email address.",phone:"Enter a valid mobile number.",intl:"Enter a valid mobile number, starting with + and its country code.",consent:"Tick the box to sign up.",failed:"Something went wrong. Please try again.",busy:"Too many tries. Please wait a moment and try again.",spin:"Sign up first to spin.",yours:"Your code",held:"You\u2019re already on the list",resent:"We\u2019ve sent your code to your inbox again.",inbox:"Your code is in the email we sent when you first signed up.",shop:"Continue shopping",closeOffer:"Close offer",code:"We\u2019ll email your code to you.",claimed:"This email address has already claimed its code.",copied:"Copied",thanks:"Thanks, you\u2019re signed up",retry:"You\u2019re signed up, but we couldn\u2019t load your prize. Please try again.",unclaimed:"We couldn\u2019t load your prize right now.",unavailable:"Not available right now.",won:"You won"},H=(o,r,a)=>o.includes(r)?r:a,I=(o,r,a)=>Number.isFinite(o)?Math.min(Math.max(o,r),a):null,ke=o=>o.type==="date"||o.type==="number",Ae=()=>globalThis.matchMedia?.("(prefers-reduced-motion: reduce)")?.matches===!0;function rt(o){let r=M(o.layout)?o.layout:{},a=M(r.media)?r.media:null,l=H(Pt,r.template,"stack"),p=a?.side==="right"?"right":"left";return!a&&M(r.image)&&r.image.side!=="none"&&(a=r.image,r.image.side!=="top"&&(l="split",p=r.image.side==="right"?"right":"left")),(!a||!K(a.asset))&&(a=null,l="stack"),{template:l,media:a,side:p,scrim:I(r.scrim,0,.9)??.45,padding:H(["none","sm","md","lg"],r.padding,"md")}}var st=(o,r)=>H(["sm","md","lg","full"],o.size,null)??(r.template==="split"||r.template==="overlay"?"lg":"md"),at=(o,r,a=1,l="100vw")=>{if(o==="fullscreen"||r==="full")return l;let p=o==="teaser"?220:o==="sheet"?400:tt[r]??tt.md;return`(max-width: 639px) ${l}, ${Math.round(p*a)}px`},lt=(o,r)=>o==="lg"?1/Ze(r):.5,ct=(o,r,a)=>{if(!a||!Array.isArray(o.widths)||!r.endsWith(".webp"))return null;let l=o.widths.filter(p=>Number.isInteger(p)&&p>0&&p<a).sort((p,x)=>p-x);return l.length===0?null:[...l.map(p=>`${r.slice(0,-5)}-${p}w.webp ${p}w`),`${r} ${a}w`].join(",")},dt=(o,r)=>o.format==="inline"?"inline":r.format&&r.format!=="inline"?r.format:o.format,Ee=o=>o.kind==="video"||o.t==="video",_e={webm:"video/webm",mp4:"video/mp4",m4v:"video/mp4",mov:"video/quicktime",ogv:"video/ogg"},$e=o=>_e[o.split(/[?#]/)[0].split(".").pop().toLowerCase()],Wt=(o,r)=>[...new Set([r,...Array.isArray(o.sources)?o.sources.map(K):[]])].filter(Boolean).sort((a,l)=>($e(l)===_e.webm)-($e(a)===_e.webm));function ze(o,r,a,l=new Set){let p=r.steps.find(v=>v.id===a);if(!p)return Promise.resolve();let x=dt(o,r),b=rt(p),w=x==="teaser"&&p===r.steps[0],h=x==="teaser"&&!w?"popup":x,C=st(r.theme,b),_=w?[]:p.blocks.flatMap(v=>{if(v?.t==="image"||v?.t==="video")return[[v]];let F=v?.display==="cards"&&o.questions.find(T=>T.key===v.question&&T.type==="one");return F?Object.values(v.pictures??{}).filter(M).map(T=>[T,lt(C,F),"50vw"]):[]});return b.media&&!(w&&b.template!=="image-only")&&_.push([b.media,b.template==="split"?.46:1]),Promise.all(_.map(([v,F,T])=>{let L=K(Ee(v)?v.poster:v.asset);if(!L)return null;let R=document.createElement("img"),y=!Ee(v)&&ct(v,L,I(v.width,1,8192));y&&(R.sizes=at(h,C,F,T),R.srcset=y);let Z=`${R.sizes} ${y||L}`;return l.has(Z)?null:(l.add(Z),R.src=L,R.decode?.().catch(()=>{}))}))}var it=o=>o?.call?o():clearInterval(o),Ft=0,Se=o=>`hp-${o}-${++Ft}`;function d(o,r,a){let l=document.createElement(o);return r&&(l.className=r),a!==void 0&&l.append(Ge(a)),l}var pt=o=>{let r=o.length===4?[...o.slice(1)].map(a=>a+a).join(""):o.slice(1);return[0,2,4].map(a=>Number.parseInt(r.slice(a,a+2),16))},te=o=>{let[r,a,l]=pt(o).map(p=>{let x=p/255;return x<=.04045?x/12.92:((x+.055)/1.055)**2.4});return .2126*r+.7152*a+.0722*l},ot=(o,r=4.5)=>{let a=te(o)+.05,l=1.05/a;return l>=r?"#fff":a/(te("#111")+.05)>l?"#111":"#fff"};function Yt(o,r){let a=(_,v)=>v&&o.style.setProperty(_,v),l=_=>Ot.test(_??"")?_:null;a("--hp-accent",l(r.accent)),a("--hp-bg",l(r.background)),a("--hp-text",l(r.text));let p=I(r.radius,0,48);p!==null&&a("--hp-radius",`${p}px`),a("--hp-font",r.font==="site"?o.ownerDocument.defaultView.getComputedStyle(o.parentElement??o.ownerDocument.body).fontFamily:Object.hasOwn(ve,r.font)?ve[r.font]:null),l(r.accent)&&(a("--hp-on-accent",ot(r.accent,3)),a("--hp-on-accent-text",ot(r.accent))),l(r.background)&&te(r.background)<.18&&(a("--hp-field","#fff"),a("--hp-field-text","#111"));let x=M(r.overlay)?r.overlay:{},b=[l(r.text),l(r.background)].filter(Boolean).sort((_,v)=>te(_)-te(v))[0],[w,h,C]=pt(l(x.colour)??b??"#0b0b0f");a("--hp-ov",`rgb(${w} ${h} ${C} / ${I(x.opacity,0,1)??.6})`)}function Ht(o){try{let r=new CSSStyleSheet;r.replaceSync(we),o.adoptedStyleSheets=[r]}catch{let r=document.createElement("style");r.textContent=we,o.append(r)}}function ut(o){let{form:r,creative:a,decision:l,access:p,client:x,api:b,counters:w}=o,h=o.preview??null,C=e=>{let t=e.blocks.find(i=>i?.t==="email"||i?.t==="phone");return t?.t==="phone"||!t&&!r.consent_text?r.sms_consent_text:r.consent_text},_=dt(r,a),v=a.theme,F=H(Qe[_]??[],v.position,Qe[_]?.[0]),T=document.createElement("hp-onsite");h&&T.setAttribute("preview",""),Yt(T,v);let L=T.attachShadow({mode:"open"});Ht(L);let R=_!=="inline"&&!h,y=d(R?"dialog":_==="inline"?"section":"div"),Z=d("div","ov"),$=d("div","w"),Y=d("div","m");h&&(Y.dataset.hpMedia="");let Ce=()=>{let e=d("form","f");return e.noValidate=!0,e.addEventListener("submit",St),e.addEventListener("input",()=>{O.textContent&&E.getAttribute("aria-busy")!=="true"&&N(null)}),e},E=Ce(),O=d("p","e");O.id=Se("err"),O.setAttribute("aria-live","assertive");let se=d("div","hd");se.setAttribute("aria-hidden","true"),$.append(se,Y,E),y.append(Z,$);let B=_!=="inline"&&d("button","x");B&&(B.type="button",B.addEventListener("click",()=>U("close")),$.append(B),Z.addEventListener("click",()=>U("close"))),L.append(y);let n={step:null,mode:_,size:"md",modal:!1,mobile:h?.device==="mobile",answers:{},answeredOn:{},sent:new Set,clicked:!1,seen:new Set,receipt:null,claim:o.coupon?{code:o.coupon}:h?{code:"WELCOME15"}:null,claiming:null,touched:!1,toWarm:new Set,warmed:o.warmed??new Set,warming:!1,owed:!1,unclaimed:!1,misses:0,submitted:!1,pow:null,wheel:null,timers:[],codes:[],videos:[],closed:!1},J=r.locale||document.documentElement.lang,Te=(r.questions.some(ke)||a.steps.some(e=>e.blocks.some(t=>t?.t==="countdown"||t?.display==="cards")))&&o.loadAnswers().catch(()=>null),Le=new WeakMap,Oe=()=>{let e=M(v.button)?v.button:{};y.className=`s ${n.mode}${F?` p-${F}`:""} b-${H(["pill","rounded","square"],e.shape,"rounded")}${n.mobile?" mob":""}${h?" pv":""}${e.style==="outline"?" bo":""}${v.caps===!0?" uc":""}`},Q=h?null:globalThis.matchMedia?.("(max-width: 639px)"),Me=()=>{n.mobile=Q?.matches===!0,pe(),Oe()};Q&&(n.mobile=Q.matches===!0,Q.addEventListener?.("change",Me));let ae=!r.channels?.length,V=(e,t,i={})=>{if(!(h||!l.decision_id||!p.analytics())){if(e==="click"){let s=n.clicked;if(n.clicked=!0,s&&!i.products)return}x.slotEngaged({decision_id:l.decision_id,slot:l.slot,arm:l.arm??null,engagement:e,step:t??n.step?.id??null,...i})}},N=(e,t)=>{O.className="e",O.textContent=e??"";for(let s of E.querySelectorAll("[aria-invalid]"))s.removeAttribute("aria-invalid");let i=t?.closest("label,fieldset");i&&E.contains(i)?i.after(O):E.append(O),t&&(t.setAttribute("aria-invalid","true"),t.setAttribute("aria-describedby",O.id),t.focus(),t.scrollIntoView?.({block:"nearest"}))},G=e=>{E.setAttribute("aria-busy",String(e));for(let t of E.querySelectorAll("button"))t.disabled=e},Pe=()=>h?Promise.resolve(null):(n.pow??(n.pow=b.challenge().then(e=>e.status===200?Ve(e.body):null).catch(()=>null)),n.pow),le=()=>{for(let e of n.videos)try{document.hidden||Ae()?e.pause():e.play()?.catch?.(()=>{})}catch{}};document.addEventListener("visibilitychange",le);function ce(e,t,i,s,c){let u=K(e.asset);if(!u)return null;let g=typeof e.alt=="string"?e.alt:"",m;if(Ee(e)){m=d("video",t),m.muted=m.defaultMuted=m.loop=m.playsInline=!0;let A=K(e.poster);A&&(m.poster=A),g?m.setAttribute("aria-label",g):m.setAttribute("aria-hidden","true"),m.autoplay=!Ae()&&!h,m.preload=m.autoplay?"auto":A?"none":"metadata";let j=Wt(e,u);if(j.length>1)for(let z of j){let P=d("source");P.src=z;let q=$e(z);q&&(P.type=q),m.append(P)}else m.src=u;n.videos.push(m)}else{m=d("img",t),m.alt=g,m.decoding="async",m.loading=i?"eager":"lazy",i&&(m.fetchPriority="high");let A=ct(e,u,I(e.width,1,8192));A&&(m.sizes=at(n.mode,n.size,s,c),m.srcset=A),m.src=u}let f=I(e.width,1,8192),k=I(e.height,1,8192);return f&&k&&(m.width=f,m.height=k),M(e.focal)&&(m.style.objectPosition=`${I(e.focal.x,0,100)??50}% ${I(e.focal.y,0,100)??50}%`),m}function Ie(e,t){let i=d("label","l");i.append(d("span","lt",e.label??(t==="email"?"Email":"Mobile number")));let s=d("input","i");if(s.type=t,s.name=t==="email"?"email":"phone",s.autocomplete=s.inputMode=t,s.required=!0,typeof e.placeholder=="string"&&(s.placeholder=e.placeholder),s.setAttribute("aria-describedby",O.id),s.addEventListener("focus",Pe,{once:!0}),t!=="tel")return i.append(s),i;s.id=`${O.id}-p`,i.htmlFor=s.id;let c=xe(d,"Country code","+",Object.entries(ge).map(([g,m])=>[g,`${g} +${m}`]),(e.country||/-(\w\w)$/.exec(J)?.[1]||"").toUpperCase());c.classList.add("cc"),c.name="hp_cc";let u=d("span","ph");return u.append(c,s),i.append(u),i}function ft(e){let t=r.questions.find(f=>f.key===e.question);if(!t||!ke(t)&&!Array.isArray(t.options))return null;let i=d("fieldset");i.dataset.question=t.key,i.append(d("legend","",t.label??""));let s=n.answers[t.key]??[],c=e.display==="cards"&&t.type==="one";if(ke(t)||c)return Te.then(f=>{if(!f)return i.append(d("p","sm",S.unavailable));if(c)return f.answerCards(i,t,e,d,s,k=>ce(k,"qi",!1,lt(n.size,t),"50vw"),L);f.answerFields(i,t,d,s[0],J),Le.set(i,()=>f.answerOf(i,t,void 0,J))}),i;let u=t.type==="many",g=H(["list","dropdown"],e.display,"buttons"),m=t.options.filter(f=>M(f)&&typeof f.value=="string");if(g==="dropdown"&&!u)return i.append(xe(d,t.label??t.key,"\u2014",m.map(f=>[f.value,f.label??f.value]),s[0])),i;g!=="buttons"&&(i.className="ls");for(let f of m){let k=d("label",g==="buttons"?"ch":"c"),A=d("input");A.type=u?"checkbox":"radio",A.name=`q_${t.key}`,A.value=f.value,A.checked=s.includes(f.value),k.append(A,d("span","",f.label??f.value)),i.append(k)}return i}function ne(){for(let e of n.codes){if(e.replaceChildren(),!n.claim){n.unclaimed&&e.append(d("p","",S.unclaimed));continue}if(!n.claim.code){let s=n.claim.held?S.claimed:n.claim.fallback===!0?S.code:n.claim.prize?.label;s&&e.append(d("p","",s));continue}n.claim.prize?.label&&e.append(d("p","",n.claim.prize.label));let t=d("output");t.textContent=n.claim.code;let i=d("button","btn cp");i.type="button",i.textContent="Copy code",i.addEventListener("click",()=>{navigator.clipboard?.writeText(n.claim.code).then(()=>{i.textContent=S.copied}).catch(()=>{})}),e.append(t,i)}}function mt(e){if(n.claim&&!n.claim.code)return null;let t=d("div","cd");return t.hidden=!0,Te.then(i=>i&&t.isConnected&&n.timers.push(i.countdown(t,e,h,d))),t}function de(e,t){return e.href=t,e.rel="noopener",e.addEventListener("click",i=>{if(h)return i.preventDefault();V("click"),We()}),e}function ht(e){let t=e.label??"Continue";if(e.action==="link"){let s=X(e.href);return s?de(d("a",`btn${nt[e.variant]??""}`,t),s):null}let i=d("button",`btn${nt[e.variant]??""}`,t);return i.type=e.action==="submit"?"submit":"button",i.type==="button"?i.addEventListener("click",()=>re(e)):i.dataset.submit="",i}let qe=(e,t,i)=>(e.classList.add(`x-${H(It,t.size,i)}`),qt.includes(t.align)&&e.classList.add(`a-${t.align}`),e);function Ne(e){let t=ce(e,"bi",n.step===a.steps[0]);if(!t)return null;t.style.objectFit=e.fit==="contain"?"contain":"cover";let i=I(e.radius,0,48);i!==null&&(t.style.borderRadius=`${i}px`);let s=I(e.max_height,40,800);if(s!==null&&(t.style.maxHeight=`${s}px`),!t.width&&e.fit!=="contain"&&(t.style.aspectRatio="16 / 9"),e.t==="video"||!X(e.href))return t;let c=de(d("a","bl"),X(e.href));return c.append(t),c}function bt(e){let t=I(e.threshold,.01,1e7);if(!t)return null;let i=d("div","pg"),s=d("p"),c=d("div","tr"),u=d("i");c.append(u),c.setAttribute("role","progressbar"),c.setAttribute("aria-valuemin","0"),c.setAttribute("aria-valuemax",String(t)),i.append(s,c);let g=f=>f.toFixed(2);try{let f=new Intl.NumberFormat(J||void 0,{style:"currency",currency:e.currency});g=k=>f.format(k)}catch{}let m=()=>{let f=Math.max(0,Number(o.basket?.())||0),k=t-f;s.textContent=k>0?String(e.text??"").replace("{amount}",g(k)):e.done??"",u.style.transform=`scaleX(${Math.min(1,f/t)})`,c.setAttribute("aria-valuenow",String(Math.min(f,t))),s.id||(s.id=Se("pg")),c.setAttribute("aria-labelledby",s.id)};return m(),n.timers.push(setInterval(m,2e3)),i}function gt(e){let t=d("div","pr");return o.loadProducts?.().then(i=>{t.isConnected&&n.timers.push(i.mountProducts(t,e,{el:d,lang:J,root:L,placement:r.slot,preview:h,client:!h&&p.analytics()&&x,engaged:V,seen:n.seen}))}).catch(()=>{}),t}let je={heading(e){let t=qe(d("h2","",e.text),e,"xl");return t.id=Se("h"),t.tabIndex=-1,y.hasAttribute("aria-labelledby")||(y.setAttribute("aria-labelledby",t.id),n.step===a.steps[0]&&Je.includes(n.mode)&&!h&&(t.autofocus=!0)),t},text:e=>qe(d("p","",e.text),e,"md"),email:e=>Ie(e,"email"),phone:e=>Ie(e,"tel"),consent(e){let t=C(n.step)?.text;if(typeof t!="string")return null;if(e.required!==!0)return d("p","sm",t);let i=d("label","c"),s=d("input");return s.type="checkbox",s.name="hp_consent",s.required=!0,s.setAttribute("aria-describedby",O.id),i.append(s,d("span","",t)),i},question:ft,wheel(){let e=d("div","wh");return o.loadWheel().then(t=>{n.closed||(n.wheel=t.mountWheel(e,r.prizes))}).catch(()=>{}),e},code(){let e=d("div","k");return e.setAttribute("aria-live","polite"),n.codes.push(e),e},button:ht,decline(e){let t=d("button","btn no",e.label??"No thanks");return t.type="button",t.addEventListener("click",()=>U("decline")),t},countdown:mt,progress:bt,products:gt,image:Ne,video:Ne,spacer(e){let t=d("div","sp");return t.style.height=`${et[e.size]??et.md}px`,t.setAttribute("aria-hidden","true"),t},divider:()=>d("hr")};function xt(e,t){Y.replaceChildren();let i=e.media,s=!i||t&&e.template!=="image-only";if(n.size=st(v,e),$.className=`w t-${e.template} z-${n.size}${e.side==="right"?" right":""}${v.text_align==="center"?" ta-center":""}${s?" nm":""}`,$.style.setProperty("--sc",String(e.scrim)),E.className=`f pd-${e.padding}`,Y.hidden=s,Y.hidden)return;let c=ce(i,"",n.step===a.steps[0],e.template==="split"?.46:1);if(!c)return;if(c.width?$.style.setProperty("--ar",`${c.width} / ${c.height}`):$.style.removeProperty("--ar"),e.template!=="image-only"){c.tagName==="IMG"&&e.template==="overlay"&&(c.alt=""),Y.append(c);return}let u=X(i.href),g=u?de(d("a","io"),u):d("button","io");u||(g.type="button",g.addEventListener("click",()=>re({action:"next"}))),g.append(c),Y.append(g)}function yt(e){let t=e.find(c=>c?.t==="heading"),i=e.find(c=>c?.t==="button"&&c.action==="next"),s=d("button","tb");return s.textContent=t?d("b","",t.text).textContent:i?.label??"Open",s.type="button",s.addEventListener("click",()=>re(i??{action:"next"})),s}function D(e,t=new Set){let i=a.steps.find(z=>z.id===e);if(!i)return U("done");if(i.kind==="question"&&!h&&!p.analytics()&&!t.has(i.id))return D(ee(i,n.answers),t.add(i.id));let s=n.step!==null,c=s&&(L.activeElement||document.activeElement===document.body),u=s&&!h?{mode:n.mode,w:$.offsetWidth,h:$.offsetHeight,top:$.offsetTop}:null;n.step=i,n.touched=!1;for(let z of n.timers.splice(0))it(z);n.codes=[],n.videos=[],n.wheel=null;let g=_==="teaser"&&i===a.steps[0];if(n.mode=_==="teaser"&&!g?"popup":_,_==="teaser"&&w.tab?.(r.slot,g),B&&B.setAttribute("aria-label",g?S.closeOffer:"Close"),Oe(),y.removeAttribute("aria-labelledby"),u){let z=Ce();E.replaceWith(z),E=z}let m=rt(i);xt(m,g);let f=u?.mode==="popup"&&n.mode==="popup";pe(),u?.mode===n.mode&&u.h>0&&!f&&($.style.setProperty("--lw",`${u.w}px`),$.style.setProperty("--lh",`${u.h}px`),$.classList.add("lk")),E.replaceChildren();let k=i.blocks.map(z=>o.fill?.(z,n.answers)??z);if(g&&m.template!=="image-only")E.append(yt(k));else for(let[z,P]of k.entries()){let q=M(P)&&Object.hasOwn(je,P.t)?je[P.t](P):null;q&&(h&&(q.dataset.hpBlock=String(z)),E.append(q))}let A=E.querySelector("[data-submit]"),j=E.querySelector("[name=hp_consent]")?.parentNode;A&&j&&A.before(j),E.hidden=E.childElementCount===0,N(null),ne(),y.hasAttribute("aria-labelledby")?y.removeAttribute("aria-label"):y.setAttribute("aria-label",m.media?.alt?.trim?.()||"Sign up"),f&&u.h>0&&vt(u),s&&Re(),le(),h||wt(i),c&&E.querySelector("h2")?.focus()}function pe(){$.classList.remove("lk","an"),$.style.removeProperty("--tp")}function vt(e){let t=$.offsetHeight;$.classList.add("an");let i=$.offsetTop,s=Math.max(0,e.top-i);if(s+t>y.clientHeight-2*i)return pe();$.style.setProperty("--tp",`${s}px`)}function wt(e){let t=e.next??{};for(let c of[t.default,...Object.values(M(t.answers)?t.answers:{}),...e.blocks.map(u=>u?.next),...jt])typeof c=="string"&&n.toWarm.add(c);if(n.warming)return;n.warming=!0;let i=()=>{if(n.warming=!1,!n.closed&&T.isConnected)for(let c of n.toWarm)ze(r,a,c,n.warmed);n.toWarm.clear()},s=()=>globalThis.requestIdleCallback?requestIdleCallback(i,{timeout:2e3}):setTimeout(i,200);document.readyState==="complete"?s():window.addEventListener("load",s,{once:!0})}function Re(){if(!R)return;let e=Je.includes(n.mode);if(!(y.open&&n.modal===e)){try{y.open&&y.close()}catch{}if(n.modal=e,y.setAttribute("aria-modal",String(e)),e&&typeof y.showModal=="function")y.showModal();else if(typeof y.show=="function"){let t=document.activeElement;y.show(),t&&t!==document.body?t.focus?.({preventScroll:!0}):T.blur()}else y.setAttribute("open","");!e||typeof y.showModal!="function"?y.setAttribute("role","dialog"):y.removeAttribute("role")}}function De(){for(let e of E.querySelectorAll("fieldset[data-question]")){let t=e.dataset.question,i=Le.get(e)?.()??{};if(i.error)return i;let s=[i.value,...[...e.querySelectorAll("input:checked,select:not([name])")].map(c=>c.value)].filter(Boolean);s.length?(n.answers[t]=s,n.answeredOn[t]=n.step.id):delete n.answers[t]}}function Ue(){let e=Object.entries(n.answers).map(([i,s])=>({question:i,values:s})).filter(i=>!n.sent.has(ue(i))),t=({question:i})=>n.answeredOn[i];if(n.signedUp){for(let i of new Set(e.map(t))){let s=e.filter(c=>t(c)===i);for(let c of s)n.sent.add(ue(c));b.answers({anonymousId:p.anonymousId(),sessionId:p.sessionId()??void 0,slot:l.slot,arm:l.arm??void 0,decision_id:l.decision_id??void 0,step:i,...n.signedUp,answers:s,context:Fe()})}return}if(p.analytics())for(let i of e)n.sent.add(ue(i)),x.preferencesStated({...i,source:"onsite",slot:l.slot,arm:l.arm??null,decision_id:l.decision_id??null,step:t(i)})}let ue=({question:e,values:t})=>`${e}=${t.join(",")}`,We=()=>{ae&&(De(),Ue())},Fe=()=>({page:{url:p.pageUrl()},locale:p.locale()??void 0,consent:p.consent()}),ie=e=>{!h&&(n.receipt||ae)&&Ue(),D(ee(n.step,n.answers,e))};async function kt(e){let t=n.step,i=E.querySelector("input[name=email],input[name=phone]");if(!i)return ie(e.next);let s=i.name==="email"?"email":"sms",c=E.querySelector("select[name=hp_cc]")?.value,u=s==="email"?Ke(i.value.trim())?i.value.trim():null:Xe(i.value,c);if(!u)return N(s==="email"?S.email:c?S.phone:S.intl,i);let g=E.querySelector("input[name=hp_consent]");if(g&&!g.checked)return N(S.consent,g);N(null),G(!0);let m=await Pe();n.pow=null;let f=Object.entries(n.answers).map(([W,he])=>({question:W,values:he})),k=s==="sms"?r.sms_consent_text:r.consent_text,A=await b.capture({anonymousId:p.anonymousId(),sessionId:p.sessionId()??void 0,slot:l.slot,arm:l.arm??void 0,decision_id:l.decision_id??void 0,step:t.id,channel:s,[s==="email"?"email":"phone"]:u,...s==="sms"&&n.signedUp,consent_text:k?{id:k.id,version:k.version}:void 0,...f.length?{answers:f}:{},...m?{altcha:m}:{},context:Fe()}),j=A.body?.status,z=(A.status===202||A.status===200)&&Mt.includes(j);if(n.closed&&!z)return;z||G(!1);let P=A.status===400?A.body?.field:null;if(P==="email"||P==="phone")return N(S[P],i);if(!z)return N(A.status===429?S.busy:S.failed,i);i.value="";for(let[W,he]of Object.entries(n.answers))n.sent.add(`${W}=${he.join(",")}`);n.receipt=typeof A.body.receipt=="string"?A.body.receipt:null,s==="email"&&(n.signedUp={email:u,email_receipt:n.receipt}),n.submitted=!0,w.submitted(r.slot),V("submit",t.id),n.owed=s==="email"&&r.prizes.length>0;let q=n.owed?fe([]):null;q||o.emit?.("submitted",{coupon:null});let _t=q&&await Promise.race([q,new Promise(W=>setTimeout(W,Dt))]);if(n.closed)return;if(G(!1),_t?.held)return D(oe("held"));let $t=j!=="ok"&&a.steps.some(W=>W.id===j);D($t?j:ee(t,n.answers,e.next));let zt=n.step;q?.then(W=>{W?.held&&!n.closed&&n.step===zt&&!n.touched&&D(oe("held"))})}function oe(e){if(a.steps.some(s=>s.id===e))return e;let t={t:"button",label:S.shop,action:"close"},i=e==="unclaimed"?[{t:"heading",text:S.thanks},{t:"text",text:S.unclaimed},t]:e==="fallback"||n.claim?.code?[{t:"heading",text:e==="fallback"?S.thanks:S.yours},{t:"code"}]:[{t:"heading",text:S.held},{t:"text",text:r.code_relayed===!0?S.resent:S.inbox},t];return a.steps.push({id:e,blocks:i}),e}function Ye(e){n.owed&&(n.owed=!1,o.emit?.("submitted",{coupon:e?{code:e.code??null,prize:e.prize?.key}:null}))}function fe(e=Rt){let t=n.receipt;return n.claiming??(n.claiming=(async()=>{n.unclaimed=!1;let i;for(let g of[0,...e])if(g&&await new Promise(m=>setTimeout(m,g)),i=await b.claim({slot:l.slot,decision_id:l.decision_id??void 0,receipt:t}),i.status!==503)break;let s=i.body,c=s?.fallback===!0&&!s.code;if(i.status!==200||!(M(s?.prize)||c))return n.claiming=null,!e.length&&i.status===503?fe():(Ye(null),n.unclaimed=!0,n.closed||ne(),null);let u=s.held&&!s.code?w.code?.():null;return u&&(s={...s,code:u}),n.claim=s,typeof s.code=="string"&&w.code?.(s.code),Ye(s),n.closed||ne(),s})()),n.claiming}async function At(e){if(!n.receipt)return N(S.spin);G(!0);let t=await fe();if(n.closed)return;if(!t)return G(!1),n.misses+=1,n.misses<2?N(S.retry):D(oe("unclaimed"));let i=t.fallback===!0&&!t.code,s=t.held?-1:r.prizes.findIndex(g=>g.key===t.prize?.key&&g.label===t.prize?.label);if(n.wheel&&s>=0&&!i){if(await n.wheel.spinTo(s),n.closed)return;O.className="e won",O.textContent=`${S.won} ${t.prize.label}`,await new Promise(g=>setTimeout(g,Ut))}if(n.closed)return;G(!1);let c=i?"fallback":s<0?"held":null,u=c?oe(c):ee(n.step,n.answers,e.next);u?D(u):ne()}function re(e){if(e.action==="close")return U("close");let t=De();return h?ie(e.next):t?N(t.error,t.input):(ae&&n.step.blocks.some(i=>n.answers[i?.question])&&V("click"),e.action==="apply"?(o.emit?.("apply",{coupon:n.claim?.code?{code:n.claim.code}:null}),V("click"),ie(e.next)):e.action==="submit"?kt(e):e.action==="spin"?At(e):ie(e.next))}function St(e){if(e.preventDefault(),E.getAttribute("aria-busy")==="true")return;let t=n.step.blocks.find(i=>i?.t==="button"&&i.action==="submit");re(t??{action:"next"})}function me(e=!1){n.closed=!0;for(let i of n.timers.splice(0))it(i);document.removeEventListener("visibilitychange",le),Q?.removeEventListener?.("change",Me);let t=()=>{try{y.open&&y.close()}catch{}T.remove()};if(e||!R||Ae())return t();y.classList.add("out"),setTimeout(t,Nt)}function U(e){n.closed||h||(We(),!n.submitted&&e!=="done"&&V("dismiss"),w.closed(r.slot),w.tab?.(r.slot,!1),me(),o.onClose?.(e))}for(let e of["pointerdown","keydown","input"])y.addEventListener(e,()=>{n.touched=!0});y.addEventListener("cancel",e=>{e.preventDefault(),U("esc")}),y.addEventListener("keydown",e=>{e.key==="Escape"&&!n.modal&&_!=="inline"&&U("esc"),e.key==="Tab"&&n.modal&&Et(e)});function Et(e){let t=[...L.querySelectorAll("input[type=radio]:checked")],i=new Set,s=[...L.querySelectorAll("a[href],button,input,select,textarea")].filter(f=>{if(f.disabled||!f.getClientRects().length)return!1;if(f.type!=="radio")return!0;let k=t.find(A=>A.name===f.name);return(k?f!==k:i.has(f.name))?!1:(i.add(f.name),!0)});if(!s.length)return;let c=e.shiftKey,u=L.activeElement;u?.type==="radio"&&(u=s.find(f=>f.type==="radio"&&f.name===u.name)??u);let g=s.indexOf(u),m=null;if(g<0){let f=k=>u&&u.compareDocumentPosition(k)&4;m=c?s.findLast(k=>!f(k))??s.at(-1):s.find(f)??s[0]}else(c?g===0:g===s.length-1)&&(m=s.at(c?-1:0));m&&(e.preventDefault(),m.focus())}se.addEventListener("pointerdown",e=>{if(!n.mobile||n.mode!=="sheet")return;let t=e.clientY,i=0,s=u=>{i=Math.max(0,u.clientY-t),$.style.transform=`translateY(${i}px)`},c=()=>{document.removeEventListener("pointermove",s),document.removeEventListener("pointerup",c),$.style.transform="",i>80&&U("close")};document.addEventListener("pointermove",s),document.addEventListener("pointerup",c)});try{D(h?.step&&a.steps.some(e=>e.id===h.step)?h.step:a.steps[0].id),(o.container??document.body).append(T),Re()}catch(e){throw me(!0),e}return{close:U,root:L,host:T,show:D,step:()=>n.step?.id??null,modal:()=>!n.closed&&n.modal,destroy:()=>!n.closed&&me()}}window[Symbol.for("@thg-agentic/hyper-personalisation-web.onsite.render")]={mountForm:ut,warm:ze};})();
181
+ `;var Lt=/^#(?:[0-9a-f]{3}){1,2}$/i,Je=["popup","fullscreen"],It=["ok","verify","already"],Mt=["stack","split","overlay","image-only"],Qe={bar:["bottom","top"],sheet:["bottom-right","bottom-left","bottom"],teaser:["bottom-left","bottom-right","left","right"]},Pt=["xs","sm","md","lg","xl","display"],et={xs:4,sm:8,md:16,lg:28,xl:44},tt={sm:380,md:480,lg:880},Nt=["left","center","right"],nt={secondary:" b2",link:" no"},qt=220,jt=["verify","already","held","fallback","success"],Dt=[500,1500],Rt=600,Ut=1800,S={email:"Enter a valid email address.",phone:"Enter a valid mobile number.",intl:"Enter a valid mobile number, starting with + and its country code.",consent:"Tick the box to sign up.",failed:"Something went wrong. Please try again.",busy:"Too many tries. Please wait a moment and try again.",spin:"Sign up first to spin.",yours:"Your code",held:"You\u2019re already on the list",resent:"We\u2019ve sent your code to your inbox again.",inbox:"Your code is in the email we sent when you first signed up.",shop:"Continue shopping",closeOffer:"Close offer",code:"We\u2019ll email your code to you.",claimed:"This email address has already claimed its code.",copied:"Copied",thanks:"Thanks, you\u2019re signed up",retry:"You\u2019re signed up, but we couldn\u2019t load your prize. Please try again.",unclaimed:"We couldn\u2019t load your prize right now.",unavailable:"Not available right now.",won:"You won"},Y=(i,r,a)=>i.includes(r)?r:a,P=(i,r,a)=>Number.isFinite(i)?Math.min(Math.max(i,r),a):null,ke=i=>i.type==="date"||i.type==="number",Ae=()=>globalThis.matchMedia?.("(prefers-reduced-motion: reduce)")?.matches===!0;function rt(i){let r=I(i.layout)?i.layout:{},a=I(r.media)?r.media:null,l=Y(Mt,r.template,"stack"),p=a?.side==="right"?"right":"left";return!a&&I(r.image)&&r.image.side!=="none"&&(a=r.image,r.image.side!=="top"&&(l="split",p=r.image.side==="right"?"right":"left")),(!a||!K(a.asset))&&(a=null,l="stack"),{template:l,media:a,side:p,scrim:P(r.scrim,0,.9)??.45,padding:Y(["none","sm","md","lg"],r.padding,"md")}}var st=(i,r)=>Y(["sm","md","lg","full"],i.size,null)??(r.template==="split"||r.template==="overlay"?"lg":"md"),at=(i,r,a=1,l="100vw")=>{if(i==="fullscreen"||r==="full")return l;let p=i==="teaser"?220:i==="sheet"?400:tt[r]??tt.md;return`(max-width: 639px) ${l}, ${Math.round(p*a)}px`},lt=(i,r)=>i==="lg"?1/Ze(r):.5,ct=(i,r,a)=>{if(!a||!Array.isArray(i.widths)||!r.endsWith(".webp"))return null;let l=i.widths.filter(p=>Number.isInteger(p)&&p>0&&p<a).sort((p,x)=>p-x);return l.length===0?null:[...l.map(p=>`${r.slice(0,-5)}-${p}w.webp ${p}w`),`${r} ${a}w`].join(",")},dt=(i,r)=>i.format==="inline"?"inline":r.format&&r.format!=="inline"?r.format:i.format,_e=i=>i.kind==="video"||i.t==="video",Ee={webm:"video/webm",mp4:"video/mp4",m4v:"video/mp4",mov:"video/quicktime",ogv:"video/ogg"},$e=i=>Ee[i.split(/[?#]/)[0].split(".").pop().toLowerCase()],Wt=(i,r)=>[...new Set([r,...Array.isArray(i.sources)?i.sources.map(K):[]])].filter(Boolean).sort((a,l)=>($e(l)===Ee.webm)-($e(a)===Ee.webm));function ze(i,r,a,l=new Set){let p=r.steps.find(v=>v.id===a);if(!p)return Promise.resolve();let x=dt(i,r),b=rt(p),w=x==="teaser"&&p===r.steps[0],h=x==="teaser"&&!w?"popup":x,C=st(r.theme,b),E=w?[]:p.blocks.flatMap(v=>{if(v?.t==="image"||v?.t==="video")return[[v]];let F=v?.display==="cards"&&i.questions.find(T=>T.key===v.question&&T.type==="one");return F?Object.values(v.pictures??{}).filter(I).map(T=>[T,lt(C,F),"50vw"]):[]});return b.media&&!(w&&b.template!=="image-only")&&E.push([b.media,b.template==="split"?.46:1]),Promise.all(E.map(([v,F,T])=>{let O=K(_e(v)?v.poster:v.asset);if(!O)return null;let D=document.createElement("img"),y=!_e(v)&&ct(v,O,P(v.width,1,8192));y&&(D.sizes=at(h,C,F,T),D.srcset=y);let Z=`${D.sizes} ${y||O}`;return l.has(Z)?null:(l.add(Z),D.src=O,D.decode?.().catch(()=>{}))}))}var ot=i=>i?.call?i():clearInterval(i),Ft=0,Se=i=>`hp-${i}-${++Ft}`;function d(i,r,a){let l=document.createElement(i);return r&&(l.className=r),a!==void 0&&l.append(Ve(a)),l}var pt=i=>{let r=i.length===4?[...i.slice(1)].map(a=>a+a).join(""):i.slice(1);return[0,2,4].map(a=>Number.parseInt(r.slice(a,a+2),16))},te=i=>{let[r,a,l]=pt(i).map(p=>{let x=p/255;return x<=.04045?x/12.92:((x+.055)/1.055)**2.4});return .2126*r+.7152*a+.0722*l},it=(i,r=4.5)=>{let a=te(i)+.05,l=1.05/a;return l>=r?"#fff":a/(te("#111")+.05)>l?"#111":"#fff"};function Ht(i,r){let a=(E,v)=>v&&i.style.setProperty(E,v),l=E=>Lt.test(E??"")?E:null;a("--hp-accent",l(r.accent)),a("--hp-bg",l(r.background)),a("--hp-text",l(r.text));let p=P(r.radius,0,48);p!==null&&a("--hp-radius",`${p}px`),a("--hp-font",r.font==="site"?i.ownerDocument.defaultView.getComputedStyle(i.parentElement??i.ownerDocument.body).fontFamily:Object.hasOwn(ve,r.font)?ve[r.font]:null),l(r.accent)&&(a("--hp-on-accent",it(r.accent,3)),a("--hp-on-accent-text",it(r.accent))),l(r.background)&&te(r.background)<.18&&(a("--hp-field","#fff"),a("--hp-field-text","#111"));let x=I(r.overlay)?r.overlay:{},b=[l(r.text),l(r.background)].filter(Boolean).sort((E,v)=>te(E)-te(v))[0],[w,h,C]=pt(l(x.colour)??b??"#0b0b0f");a("--hp-ov",`rgb(${w} ${h} ${C} / ${P(x.opacity,0,1)??.6})`)}function Yt(i){try{let r=new CSSStyleSheet;r.replaceSync(we),i.adoptedStyleSheets=[r]}catch{let r=document.createElement("style");r.textContent=we,i.append(r)}}function ut(i){let{form:r,creative:a,decision:l,access:p,client:x,api:b,counters:w}=i,h=i.preview??null,C=e=>{let t=e.blocks.find(o=>o?.t==="email"||o?.t==="phone");return t?.t==="phone"||!t&&!r.consent_text?r.sms_consent_text:r.consent_text},E=dt(r,a),v=a.theme,F=Y(Qe[E]??[],v.position,Qe[E]?.[0]),T=document.createElement("hp-onsite");h&&T.setAttribute("preview",""),Ht(T,v);let O=T.attachShadow({mode:"open"});Yt(O);let D=E!=="inline"&&!h,y=d(D?"dialog":E==="inline"?"section":"div"),Z=d("div","ov"),$=d("div","w"),H=d("div","m");h&&(H.dataset.hpMedia="");let Ce=()=>{let e=d("form","f");return e.noValidate=!0,e.addEventListener("submit",St),e.addEventListener("input",()=>{L.textContent&&_.getAttribute("aria-busy")!=="true"&&q(null)}),e},_=Ce(),L=d("p","e");L.id=Se("err"),L.setAttribute("aria-live","assertive");let se=d("div","hd");se.setAttribute("aria-hidden","true"),$.append(se,H,_),y.append(Z,$);let B=E!=="inline"&&d("button","x");B&&(B.type="button",B.addEventListener("click",()=>U("close")),$.append(B),Z.addEventListener("click",()=>U("close"))),O.append(y);let n={step:null,mode:E,size:"md",modal:!1,mobile:h?.device==="mobile",answers:{},answeredOn:{},sent:new Set,clicked:!1,seen:new Set,receipt:null,claim:i.coupon?{code:i.coupon}:h?{code:"WELCOME15"}:null,claiming:null,touched:!1,toWarm:new Set,warmed:i.warmed??new Set,warming:!1,owed:!1,unclaimed:!1,misses:0,submitted:!1,pow:null,wheel:null,timers:[],codes:[],videos:[],closed:!1},J=r.locale||document.documentElement.lang,Te=(r.questions.some(ke)||a.steps.some(e=>e.blocks.some(t=>t?.t==="countdown"||t?.display==="cards")))&&i.loadAnswers().catch(()=>null),Oe=new WeakMap,Le=()=>{let e=I(v.button)?v.button:{};y.className=`s ${n.mode}${F?` p-${F}`:""} b-${Y(["pill","rounded","square"],e.shape,"rounded")}${n.mobile?" mob":""}${h?" pv":""}${e.style==="outline"?" bo":""}${v.caps===!0?" uc":""}`},Q=h?null:globalThis.matchMedia?.("(max-width: 639px)"),Ie=()=>{n.mobile=Q?.matches===!0,pe(),Le()};Q&&(n.mobile=Q.matches===!0,Q.addEventListener?.("change",Ie));let ae=!r.channels?.length,G=(e,t,o={})=>{if(!(h||!l.decision_id||!p.analytics())){if(e==="click"){let s=n.clicked;if(n.clicked=!0,s&&!o.products)return}x.slotEngaged({decision_id:l.decision_id,slot:l.slot,arm:l.arm??null,engagement:e,step:t??n.step?.id??null,...o})}},q=(e,t)=>{L.className="e",L.textContent=e??"";for(let s of _.querySelectorAll("[aria-invalid]"))s.removeAttribute("aria-invalid");let o=t?.closest("label,fieldset");o&&_.contains(o)?o.after(L):_.append(L),t&&(t.setAttribute("aria-invalid","true"),t.setAttribute("aria-describedby",L.id),t.focus(),t.scrollIntoView?.({block:"nearest"}))},V=e=>{_.setAttribute("aria-busy",String(e));for(let t of _.querySelectorAll("button"))t.disabled=e},Me=()=>h?Promise.resolve(null):(n.pow??(n.pow=b.challenge().then(e=>e.status===200?Ge(e.body):null).catch(()=>null)),n.pow),le=()=>{for(let e of n.videos)try{document.hidden||Ae()?e.pause():e.play()?.catch?.(()=>{})}catch{}};document.addEventListener("visibilitychange",le);function ce(e,t,o,s,c){let u=K(e.asset);if(!u)return null;let g=typeof e.alt=="string"?e.alt:"",m;if(_e(e)){m=d("video",t),m.muted=m.defaultMuted=m.loop=m.playsInline=!0;let A=K(e.poster);A&&(m.poster=A),g?m.setAttribute("aria-label",g):m.setAttribute("aria-hidden","true"),m.autoplay=!Ae()&&!h,m.preload=m.autoplay?"auto":A?"none":"metadata";let j=Wt(e,u);if(j.length>1)for(let z of j){let M=d("source");M.src=z;let N=$e(z);N&&(M.type=N),m.append(M)}else m.src=u;n.videos.push(m)}else{m=d("img",t),m.alt=g,m.decoding="async",m.loading=o?"eager":"lazy",o&&(m.fetchPriority="high");let A=ct(e,u,P(e.width,1,8192));A&&(m.sizes=at(n.mode,n.size,s,c),m.srcset=A),m.src=u}let f=P(e.width,1,8192),k=P(e.height,1,8192);return f&&k&&(m.width=f,m.height=k),I(e.focal)&&(m.style.objectPosition=`${P(e.focal.x,0,100)??50}% ${P(e.focal.y,0,100)??50}%`),m}function Pe(e,t){let o=d("label","l");o.append(d("span","lt",e.label??(t==="email"?"Email":"Mobile number")));let s=d("input","i");if(s.type=t,s.name=t==="email"?"email":"phone",s.autocomplete=s.inputMode=t,s.required=!0,typeof e.placeholder=="string"&&(s.placeholder=e.placeholder),s.setAttribute("aria-describedby",L.id),s.addEventListener("focus",Me,{once:!0}),t!=="tel")return o.append(s),o;s.id=`${L.id}-p`,o.htmlFor=s.id;let c=xe(d,"Country code","+",Object.entries(ge).map(([g,m])=>[g,`${g} +${m}`]),(e.country||/-(\w\w)$/.exec(J)?.[1]||"").toUpperCase());c.classList.add("cc"),c.name="hp_cc";let u=d("span","ph");return u.append(c,s),o.append(u),o}function ft(e){let t=r.questions.find(f=>f.key===e.question);if(!t||!ke(t)&&!Array.isArray(t.options))return null;let o=d("fieldset");o.dataset.question=t.key,o.append(d("legend","",t.label??""));let s=n.answers[t.key]??[],c=e.display==="cards"&&t.type==="one";if(ke(t)||c)return Te.then(f=>{if(!f)return o.append(d("p","sm",S.unavailable));if(c)return f.answerCards(o,t,e,d,s,k=>ce(k,"qi",!1,lt(n.size,t),"50vw"),O);f.answerFields(o,t,d,s[0],J),Oe.set(o,()=>f.answerOf(o,t,void 0,J))}),o;let u=t.type==="many",g=Y(["list","dropdown"],e.display,"buttons"),m=t.options.filter(f=>I(f)&&typeof f.value=="string");if(g==="dropdown"&&!u)return o.append(xe(d,t.label??t.key,"\u2014",m.map(f=>[f.value,f.label??f.value]),s[0])),o;g!=="buttons"&&(o.className="ls");for(let f of m){let k=d("label",g==="buttons"?"ch":"c"),A=d("input");A.type=u?"checkbox":"radio",A.name=`q_${t.key}`,A.value=f.value,A.checked=s.includes(f.value),k.append(A,d("span","",f.label??f.value)),o.append(k)}return o}function ne(){for(let e of n.codes){if(e.replaceChildren(),!n.claim){n.unclaimed&&e.append(d("p","",S.unclaimed));continue}if(!n.claim.code){let s=n.claim.held?S.claimed:n.claim.fallback===!0?S.code:n.claim.prize?.label;s&&e.append(d("p","",s));continue}n.claim.prize?.label&&e.append(d("p","",n.claim.prize.label));let t=d("output");t.textContent=n.claim.code;let o=d("button","btn cp");o.type="button",o.textContent="Copy code",o.addEventListener("click",()=>{navigator.clipboard?.writeText(n.claim.code).then(()=>{o.textContent=S.copied}).catch(()=>{})}),e.append(t,o)}}function mt(e){if(n.claim&&!n.claim.code)return null;let t=d("div","cd");return t.hidden=!0,Te.then(o=>o&&t.isConnected&&n.timers.push(o.countdown(t,e,h,d,r.window.daily?.next))),t}function de(e,t){return e.href=t,e.rel="noopener",e.addEventListener("click",o=>{if(h)return o.preventDefault();G("click"),We()}),e}function ht(e){let t=e.label??"Continue";if(e.action==="link"){let s=X(e.href);return s?de(d("a",`btn${nt[e.variant]??""}`,t),s):null}let o=d("button",`btn${nt[e.variant]??""}`,t);return o.type=e.action==="submit"?"submit":"button",o.type==="button"?o.addEventListener("click",()=>re(e)):o.dataset.submit="",o}let Ne=(e,t,o)=>(e.classList.add(`x-${Y(Pt,t.size,o)}`),Nt.includes(t.align)&&e.classList.add(`a-${t.align}`),e);function qe(e){let t=ce(e,"bi",n.step===a.steps[0]);if(!t)return null;t.style.objectFit=e.fit==="contain"?"contain":"cover";let o=P(e.radius,0,48);o!==null&&(t.style.borderRadius=`${o}px`);let s=P(e.max_height,40,800);if(s!==null&&(t.style.maxHeight=`${s}px`),!t.width&&e.fit!=="contain"&&(t.style.aspectRatio="16 / 9"),e.t==="video"||!X(e.href))return t;let c=de(d("a","bl"),X(e.href));return c.append(t),c}function bt(e){let t=P(e.threshold,.01,1e7);if(!t)return null;let o=d("div","pg"),s=d("p"),c=d("div","tr"),u=d("i");c.append(u),c.setAttribute("role","progressbar"),c.setAttribute("aria-valuemin","0"),c.setAttribute("aria-valuemax",String(t)),o.append(s,c);let g=f=>f.toFixed(2);try{let f=new Intl.NumberFormat(J||void 0,{style:"currency",currency:e.currency});g=k=>f.format(k)}catch{}let m=()=>{let f=Math.max(0,Number(i.basket?.())||0),k=t-f;s.textContent=k>0?String(e.text??"").replace("{amount}",g(k)):e.done??"",u.style.transform=`scaleX(${Math.min(1,f/t)})`,c.setAttribute("aria-valuenow",String(Math.min(f,t))),s.id||(s.id=Se("pg")),c.setAttribute("aria-labelledby",s.id)};return m(),n.timers.push(setInterval(m,2e3)),o}function gt(e){let t=d("div","pr");return i.loadProducts?.().then(o=>{t.isConnected&&n.timers.push(o.mountProducts(t,e,{el:d,lang:J,root:O,placement:r.slot,preview:h,client:!h&&p.analytics()&&x,engaged:G,seen:n.seen}))}).catch(()=>{}),t}let je={heading(e){let t=Ne(d("h2","",e.text),e,"xl");return t.id=Se("h"),t.tabIndex=-1,y.hasAttribute("aria-labelledby")||(y.setAttribute("aria-labelledby",t.id),n.step===a.steps[0]&&Je.includes(n.mode)&&!h&&(t.autofocus=!0)),t},text:e=>Ne(d("p","",e.text),e,"md"),email:e=>Pe(e,"email"),phone:e=>Pe(e,"tel"),consent(e){let t=C(n.step)?.text;if(typeof t!="string")return null;if(e.required!==!0)return d("p","sm",t);let o=d("label","c"),s=d("input");return s.type="checkbox",s.name="hp_consent",s.required=!0,s.setAttribute("aria-describedby",L.id),o.append(s,d("span","",t)),o},question:ft,wheel(){let e=d("div","wh");return i.loadWheel().then(t=>{n.closed||(n.wheel=t.mountWheel(e,r.prizes))}).catch(()=>{}),e},code(){let e=d("div","k");return e.setAttribute("aria-live","polite"),n.codes.push(e),e},button:ht,decline(e){let t=d("button","btn no",e.label??"No thanks");return t.type="button",t.addEventListener("click",()=>U("decline")),t},countdown:mt,progress:bt,products:gt,image:qe,video:qe,spacer(e){let t=d("div","sp");return t.style.height=`${et[e.size]??et.md}px`,t.setAttribute("aria-hidden","true"),t},divider:()=>d("hr")};function xt(e,t){H.replaceChildren();let o=e.media,s=!o||t&&e.template!=="image-only";if(n.size=st(v,e),$.className=`w t-${e.template} z-${n.size}${e.side==="right"?" right":""}${v.text_align==="center"?" ta-center":""}${s?" nm":""}`,$.style.setProperty("--sc",String(e.scrim)),_.className=`f pd-${e.padding}`,H.hidden=s,H.hidden)return;let c=ce(o,"",n.step===a.steps[0],e.template==="split"?.46:1);if(!c)return;if(c.width?$.style.setProperty("--ar",`${c.width} / ${c.height}`):$.style.removeProperty("--ar"),e.template!=="image-only"){c.tagName==="IMG"&&e.template==="overlay"&&(c.alt=""),H.append(c);return}let u=X(o.href),g=u?de(d("a","io"),u):d("button","io");u||(g.type="button",g.addEventListener("click",()=>re({action:"next"}))),g.append(c),H.append(g)}function yt(e){let t=e.find(c=>c?.t==="heading"),o=e.find(c=>c?.t==="button"&&c.action==="next"),s=d("button","tb");return s.textContent=t?d("b","",t.text).textContent:o?.label??"Open",s.type="button",s.addEventListener("click",()=>re(o??{action:"next"})),s}function R(e,t=new Set){let o=a.steps.find(z=>z.id===e);if(!o)return U("done");if(o.kind==="question"&&!h&&!p.analytics()&&!t.has(o.id))return R(ee(o,n.answers),t.add(o.id));let s=n.step!==null,c=s&&(O.activeElement||document.activeElement===document.body),u=s&&!h?{mode:n.mode,w:$.offsetWidth,h:$.offsetHeight,top:$.offsetTop}:null;n.step=o,n.touched=!1;for(let z of n.timers.splice(0))ot(z);n.codes=[],n.videos=[],n.wheel=null;let g=E==="teaser"&&o===a.steps[0];if(n.mode=E==="teaser"&&!g?"popup":E,E==="teaser"&&w.tab?.(r.slot,g),B&&B.setAttribute("aria-label",g?S.closeOffer:"Close"),Le(),y.removeAttribute("aria-labelledby"),u){let z=Ce();_.replaceWith(z),_=z}let m=rt(o);xt(m,g);let f=u?.mode==="popup"&&n.mode==="popup";pe(),u?.mode===n.mode&&u.h>0&&!f&&($.style.setProperty("--lw",`${u.w}px`),$.style.setProperty("--lh",`${u.h}px`),$.classList.add("lk")),_.replaceChildren();let k=o.blocks.map(z=>i.fill?.(z,n.answers)??z);if(g&&m.template!=="image-only")_.append(yt(k));else for(let[z,M]of k.entries()){let N=I(M)&&Object.hasOwn(je,M.t)?je[M.t](M):null;N&&(h&&(N.dataset.hpBlock=String(z)),_.append(N))}let A=_.querySelector("[data-submit]"),j=_.querySelector("[name=hp_consent]")?.parentNode;A&&j&&A.before(j),_.hidden=_.childElementCount===0,q(null),ne(),y.hasAttribute("aria-labelledby")?y.removeAttribute("aria-label"):y.setAttribute("aria-label",m.media?.alt?.trim?.()||"Sign up"),f&&u.h>0&&vt(u),s&&De(),le(),h||wt(o),c&&_.querySelector("h2")?.focus()}function pe(){$.classList.remove("lk","an"),$.style.removeProperty("--tp")}function vt(e){let t=$.offsetHeight;$.classList.add("an");let o=$.offsetTop,s=Math.max(0,e.top-o);if(s+t>y.clientHeight-2*o)return pe();$.style.setProperty("--tp",`${s}px`)}function wt(e){let t=e.next??{};for(let c of[t.default,...Object.values(I(t.answers)?t.answers:{}),...e.blocks.map(u=>u?.next),...jt])typeof c=="string"&&n.toWarm.add(c);if(n.warming)return;n.warming=!0;let o=()=>{if(n.warming=!1,!n.closed&&T.isConnected)for(let c of n.toWarm)ze(r,a,c,n.warmed);n.toWarm.clear()},s=()=>globalThis.requestIdleCallback?requestIdleCallback(o,{timeout:2e3}):setTimeout(o,200);document.readyState==="complete"?s():window.addEventListener("load",s,{once:!0})}function De(){if(!D)return;let e=Je.includes(n.mode);if(!(y.open&&n.modal===e)){try{y.open&&y.close()}catch{}if(n.modal=e,y.setAttribute("aria-modal",String(e)),e&&typeof y.showModal=="function")y.showModal();else if(typeof y.show=="function"){let t=document.activeElement;y.show(),t&&t!==document.body?t.focus?.({preventScroll:!0}):T.blur()}else y.setAttribute("open","");!e||typeof y.showModal!="function"?y.setAttribute("role","dialog"):y.removeAttribute("role")}}function Re(){for(let e of _.querySelectorAll("fieldset[data-question]")){let t=e.dataset.question,o=Oe.get(e)?.()??{};if(o.error)return o;let s=[o.value,...[...e.querySelectorAll("input:checked,select:not([name])")].map(c=>c.value)].filter(Boolean);s.length?(n.answers[t]=s,n.answeredOn[t]=n.step.id):delete n.answers[t]}}function Ue(){let e=Object.entries(n.answers).map(([o,s])=>({question:o,values:s})).filter(o=>!n.sent.has(ue(o))),t=({question:o})=>n.answeredOn[o];if(n.signedUp){for(let o of new Set(e.map(t))){let s=e.filter(c=>t(c)===o);for(let c of s)n.sent.add(ue(c));b.answers({anonymousId:p.anonymousId(),sessionId:p.sessionId()??void 0,slot:l.slot,arm:l.arm??void 0,decision_id:l.decision_id??void 0,step:o,...n.signedUp,answers:s,context:Fe()})}return}if(p.analytics())for(let o of e)n.sent.add(ue(o)),x.preferencesStated({...o,source:"onsite",slot:l.slot,arm:l.arm??null,decision_id:l.decision_id??null,step:t(o)})}let ue=({question:e,values:t})=>`${e}=${t.join(",")}`,We=()=>{ae&&(Re(),Ue())},Fe=()=>({page:{url:p.pageUrl()},locale:p.locale()??void 0,consent:p.consent()}),oe=e=>{!h&&(n.receipt||ae)&&Ue(),R(ee(n.step,n.answers,e))};async function kt(e){let t=n.step,o=_.querySelector("input[name=email],input[name=phone]");if(!o)return oe(e.next);let s=o.name==="email"?"email":"sms",c=_.querySelector("select[name=hp_cc]")?.value,u=s==="email"?Ke(o.value.trim())?o.value.trim():null:Xe(o.value,c);if(!u)return q(s==="email"?S.email:c?S.phone:S.intl,o);let g=_.querySelector("input[name=hp_consent]");if(g&&!g.checked)return q(S.consent,g);q(null),V(!0);let m=await Me();n.pow=null;let f=Object.entries(n.answers).map(([W,he])=>({question:W,values:he})),k=s==="sms"?r.sms_consent_text:r.consent_text,A=await b.capture({anonymousId:p.anonymousId(),sessionId:p.sessionId()??void 0,slot:l.slot,arm:l.arm??void 0,decision_id:l.decision_id??void 0,step:t.id,channel:s,[s==="email"?"email":"phone"]:u,...s==="sms"&&n.signedUp,consent_text:k?{id:k.id,version:k.version}:void 0,...f.length?{answers:f}:{},...m?{altcha:m}:{},context:Fe()}),j=A.body?.status,z=(A.status===202||A.status===200)&&It.includes(j);if(n.closed&&!z)return;z||V(!1);let M=A.status===400?A.body?.field:null;if(M==="email"||M==="phone")return q(S[M],o);if(!z)return q(A.status===429?S.busy:S.failed,o);o.value="";for(let[W,he]of Object.entries(n.answers))n.sent.add(`${W}=${he.join(",")}`);n.receipt=typeof A.body.receipt=="string"?A.body.receipt:null,s==="email"&&(n.signedUp={email:u,email_receipt:n.receipt}),n.submitted=!0,w.submitted(r.slot),G("submit",t.id),n.owed=s==="email"&&r.prizes.length>0;let N=n.owed?fe([]):null;N||i.emit?.("submitted",{coupon:null});let Et=N&&await Promise.race([N,new Promise(W=>setTimeout(W,Rt))]);if(n.closed)return;if(V(!1),Et?.held)return R(ie("held"));let $t=j!=="ok"&&a.steps.some(W=>W.id===j);R($t?j:ee(t,n.answers,e.next));let zt=n.step;N?.then(W=>{W?.held&&!n.closed&&n.step===zt&&!n.touched&&R(ie("held"))})}function ie(e){if(a.steps.some(s=>s.id===e))return e;let t={t:"button",label:S.shop,action:"close"},o=e==="unclaimed"?[{t:"heading",text:S.thanks},{t:"text",text:S.unclaimed},t]:e==="fallback"||n.claim?.code?[{t:"heading",text:e==="fallback"?S.thanks:S.yours},{t:"code"}]:[{t:"heading",text:S.held},{t:"text",text:r.code_relayed===!0?S.resent:S.inbox},t];return a.steps.push({id:e,blocks:o}),e}function He(e){n.owed&&(n.owed=!1,i.emit?.("submitted",{coupon:e?{code:e.code??null,prize:e.prize?.key}:null}))}function fe(e=Dt){let t=n.receipt;return n.claiming??(n.claiming=(async()=>{n.unclaimed=!1;let o;for(let g of[0,...e])if(g&&await new Promise(m=>setTimeout(m,g)),o=await b.claim({slot:l.slot,decision_id:l.decision_id??void 0,receipt:t}),o.status!==503)break;let s=o.body,c=s?.fallback===!0&&!s.code;if(o.status!==200||!(I(s?.prize)||c))return n.claiming=null,!e.length&&o.status===503?fe():(He(null),n.unclaimed=!0,n.closed||ne(),null);let u=s.held&&!s.code?w.code?.():null;return u&&(s={...s,code:u}),n.claim=s,typeof s.code=="string"&&w.code?.(s.code),He(s),n.closed||ne(),s})()),n.claiming}async function At(e){if(!n.receipt)return q(S.spin);V(!0);let t=await fe();if(n.closed)return;if(!t)return V(!1),n.misses+=1,n.misses<2?q(S.retry):R(ie("unclaimed"));let o=t.fallback===!0&&!t.code,s=t.held?-1:r.prizes.findIndex(g=>g.key===t.prize?.key&&g.label===t.prize?.label);if(n.wheel&&s>=0&&!o){if(await n.wheel.spinTo(s),n.closed)return;L.className="e won",L.textContent=`${S.won} ${t.prize.label}`,await new Promise(g=>setTimeout(g,Ut))}if(n.closed)return;V(!1);let c=o?"fallback":s<0?"held":null,u=c?ie(c):ee(n.step,n.answers,e.next);u?R(u):ne()}function re(e){if(e.action==="close")return U("close");let t=Re();return h?oe(e.next):t?q(t.error,t.input):(ae&&n.step.blocks.some(o=>n.answers[o?.question])&&G("click"),e.action==="apply"?(i.emit?.("apply",{coupon:n.claim?.code?{code:n.claim.code}:null}),G("click"),oe(e.next)):e.action==="submit"?kt(e):e.action==="spin"?At(e):oe(e.next))}function St(e){if(e.preventDefault(),_.getAttribute("aria-busy")==="true")return;let t=n.step.blocks.find(o=>o?.t==="button"&&o.action==="submit");re(t??{action:"next"})}function me(e=!1){n.closed=!0;for(let o of n.timers.splice(0))ot(o);document.removeEventListener("visibilitychange",le),Q?.removeEventListener?.("change",Ie);let t=()=>{try{y.open&&y.close()}catch{}T.remove()};if(e||!D||Ae())return t();y.classList.add("out"),setTimeout(t,qt)}function U(e){n.closed||h||(We(),!n.submitted&&e!=="done"&&G("dismiss"),w.closed(r.slot),w.tab?.(r.slot,!1),me(),i.onClose?.(e))}for(let e of["pointerdown","keydown","input"])y.addEventListener(e,()=>{n.touched=!0});y.addEventListener("cancel",e=>{e.preventDefault(),U("esc")}),y.addEventListener("keydown",e=>{e.key==="Escape"&&!n.modal&&E!=="inline"&&U("esc"),e.key==="Tab"&&n.modal&&_t(e)});function _t(e){let t=[...O.querySelectorAll("input[type=radio]:checked")],o=new Set,s=[...O.querySelectorAll("a[href],button,input,select,textarea")].filter(f=>{if(f.disabled||!f.getClientRects().length)return!1;if(f.type!=="radio")return!0;let k=t.find(A=>A.name===f.name);return(k?f!==k:o.has(f.name))?!1:(o.add(f.name),!0)});if(!s.length)return;let c=e.shiftKey,u=O.activeElement;u?.type==="radio"&&(u=s.find(f=>f.type==="radio"&&f.name===u.name)??u);let g=s.indexOf(u),m=null;if(g<0){let f=k=>u&&u.compareDocumentPosition(k)&4;m=c?s.findLast(k=>!f(k))??s.at(-1):s.find(f)??s[0]}else(c?g===0:g===s.length-1)&&(m=s.at(c?-1:0));m&&(e.preventDefault(),m.focus())}se.addEventListener("pointerdown",e=>{if(!n.mobile||n.mode!=="sheet")return;let t=e.clientY,o=0,s=u=>{o=Math.max(0,u.clientY-t),$.style.transform=`translateY(${o}px)`},c=()=>{document.removeEventListener("pointermove",s),document.removeEventListener("pointerup",c),$.style.transform="",o>80&&U("close")};document.addEventListener("pointermove",s),document.addEventListener("pointerup",c)});try{R(h?.step&&a.steps.some(e=>e.id===h.step)?h.step:a.steps[0].id),(i.container??document.body).append(T),De()}catch(e){throw me(!0),e}return{close:U,root:O,host:T,show:R,step:()=>n.step?.id??null,modal:()=>!n.closed&&n.modal,destroy:()=>!n.closed&&me()}}window[Symbol.for("@thg-agentic/hyper-personalisation-web.onsite.render")]={mountForm:ut,warm:ze};})();
@@ -1 +1 @@
1
- (()=>{function v(e,o,n=5){let s=360/o;return n*360+(360-(e+.5)*s)}var w="http://www.w3.org/2000/svg",L=4500,S=.22,F=.95,P=.105,z=.082,A=.062,I=.62,O=1.15,$="var(--hp-accent,#111)",k="var(--hp-on-accent,#fff)",g="var(--hp-bg,#fff)",N="var(--hp-text,#111)";function c(e,o={}){let n=document.createElementNS(w,e);for(let[s,i]of Object.entries(o))n.setAttribute(s,String(i));return n}function d(e,o,n,s=1){return e.style.fill=o,s<1&&(e.style.fillOpacity=String(s)),n&&(e.style.stroke=n),e}var q=()=>globalThis.matchMedia?.("(prefers-reduced-motion: reduce)")?.matches===!0,T=(e,o=1)=>{let n=(e-90)*Math.PI/180;return`${(o*Math.cos(n)).toFixed(4)} ${(o*Math.sin(n)).toFixed(4)}`};function j(e,o){let n=F-S,s=2*.35*Math.sin(Math.min(Math.PI/o,Math.PI/2)),i=t=>Math.max(z,Math.min(P,s/(t*O))),a=t=>n/(Math.max(1,t.length)*I),r=[...e.matchAll(/ /g)].map(t=>t.index),u=e.length/2,p=r.length?r.reduce((t,l)=>Math.abs(l-u)<Math.abs(t-u)?l:t):-1,h=p<0?null:[e.slice(0,p),e.slice(p+1)];for(let t of[z,A]){let l=a(e);if(l>=t)return{lines:[e],size:Math.min(i(1),l)};if(h){let m=Math.min(i(2),...h.map(a));if(m>=t)return{lines:h,size:m}}}let f=Math.floor(n/(A*I));return{lines:[`${e.slice(0,f-1).trimEnd()}\u2026`],size:A}}function C(e){let o=F-S,n=s=>s.getComputedTextLength?.()??0;for(let s of e){let i=[...s.querySelectorAll("tspan")],a=Math.max(0,...i.map(n));if(!(a>o))continue;let r=Math.max(A,Number(s.getAttribute("font-size"))*o/a);s.setAttribute("font-size",r.toFixed(4)),i.forEach((u,p)=>{u.setAttribute("y",((p-(i.length-1)/2)*r*O).toFixed(4)),n(u)>o&&(u.setAttribute("textLength",o.toFixed(4)),u.setAttribute("lengthAdjust","spacingAndGlyphs"))})}}function R(e,o){let n=(Array.isArray(o)?o:[]).map(f=>String(f?.label??f?.key??"")),s=n.length;if(s<2)return null;let i=360/s,a=c("svg",{viewBox:"-1.2 -1.2 2.4 2.4",role:"img","aria-label":`Prize wheel: ${n.join(", ")}`}),r=c("g");r.style.transformBox="fill-box",r.style.transformOrigin="50% 50%";let u=[[1,k],[.14,N],[.72,k]];r.append(d(c("circle",{r:1}),g));let p=[],h=[];return n.forEach((f,t)=>{let[l,m]=u[s%2===1&&t===s-1?2:t%2];r.append(d(c("path",{d:`M0 0L${T(t*i)}A1 1 0 ${i>180?1:0} 1 ${T((t+1)*i)}Z`,"stroke-width":.012}),$,g,l));let b=(t+.5)*i-90,x=j(f,s),_=d(c("text",{transform:`rotate(${b}) translate(${(S+F)/2} 0)${b>90&&b<270?" rotate(180)":""}`,"text-anchor":"middle","dominant-baseline":"central","font-size":x.size.toFixed(4),"font-weight":700,"aria-hidden":"true"}),m);x.lines.forEach((E,M)=>{let y=c("tspan",{x:0,y:((M-(x.lines.length-1)/2)*x.size*O).toFixed(4)});y.textContent=E,_.append(y)}),r.append(_),h.push(_);for(let E of[t*i,(t+.5)*i]){let[M,y]=T(E,1.075).split(" ");p.push(d(c("circle",{cx:M,cy:y,r:.024}),g))}}),a.append(d(c("circle",{r:1.13}),N),...p,r,d(c("circle",{r:.17,"stroke-width":.035}),g,N),d(c("circle",{r:.065}),$),d(c("path",{d:"M-0.12 -1.2L0.12 -1.2L0 -0.86Z","stroke-width":.03,"stroke-linejoin":"round"}),$,g)),e.append(a),C(h),globalThis.requestAnimationFrame?.(()=>C(h)),{spinTo(f){let t=q();return r.style.transition=t?"none":`transform ${L}ms cubic-bezier(.15,.7,.1,1)`,r.style.transform=`rotate(${v(f,n.length,t?0:5)}deg)`,t?Promise.resolve():new Promise(l=>{let m=setTimeout(l,L+200);r.addEventListener("transitionend",()=>{clearTimeout(m),l()},{once:!0})})},remove:()=>a.remove()}}window[Symbol.for("@thg-agentic/hyper-personalisation-web.onsite.wheel")]={mountWheel:R};})();
1
+ (()=>{function F(e,o,s=5){let n=360/o;return s*360+(360-(e+.5)*n)}var v="http://www.w3.org/2000/svg",I=4500,T=.22,O=.95,R=.105,L=.082,A=.062,z=.62,w=1.15,N="var(--hp-accent,#111)",k="var(--hp-on-accent,#fff)",m="var(--hp-bg,#fff)",$="var(--hp-text,#111)";function c(e,o={}){let s=document.createElementNS(v,e);for(let[n,i]of Object.entries(o))s.setAttribute(n,String(i));return s}function f(e,o,s,n=1){return e.style.fill=o,n<1&&(e.style.fillOpacity=String(n)),s&&(e.style.stroke=s),e}var D=()=>globalThis.matchMedia?.("(prefers-reduced-motion: reduce)")?.matches===!0,S=(e,o=1)=>{let s=(e-90)*Math.PI/180;return`${(o*Math.cos(s)).toFixed(4)} ${(o*Math.sin(s)).toFixed(4)}`};function q(e,o){let s=O-T,n=2*.35*Math.sin(Math.min(Math.PI/o,Math.PI/2)),i=t=>Math.max(L,Math.min(R,n/(t*w))),a=t=>s/(Math.max(1,t.length)*z),r=[...e.matchAll(/ /g)].map(t=>t.index),u=e.length/2,p=r.length?r.reduce((t,l)=>Math.abs(l-u)<Math.abs(t-u)?l:t):-1,h=p<0?null:[e.slice(0,p),e.slice(p+1)];for(let t of[L,A]){let l=a(e);if(l>=t)return{lines:[e],size:Math.min(i(1),l)};if(h){let g=Math.min(i(2),...h.map(a));if(g>=t)return{lines:h,size:g}}}let d=Math.floor(s/(A*z));return{lines:[`${e.slice(0,d-1).trimEnd()}\u2026`],size:A}}function C(e){let o=O-T,s=n=>n.getComputedTextLength?.()??0;for(let n of e){let i=[...n.querySelectorAll("tspan")],a=Math.max(0,...i.map(s));if(!(a>o))continue;let r=Math.max(A,Number(n.getAttribute("font-size"))*o/a);n.setAttribute("font-size",r.toFixed(4)),i.forEach((u,p)=>{u.setAttribute("y",((p-(i.length-1)/2)*r*w).toFixed(4)),s(u)>o&&(u.setAttribute("textLength",o.toFixed(4)),u.setAttribute("lengthAdjust","spacingAndGlyphs"))})}}function P(e,o){let s=(Array.isArray(o)?o:[]).map(d=>String(d?.label??d?.key??"")),n=s.length;if(n<2)return null;let i=360/n,a=c("svg",{viewBox:"-1.2 -1.2 2.4 2.4",role:"img","aria-label":`Prize wheel: ${s.join(", ")}`}),r=c("g");r.style.transformBox="fill-box",r.style.transformOrigin="50% 50%";let u=[[1,k],[.14,$],[.72,k]];r.append(f(c("circle",{r:1}),m));let p=[],h=[];return s.forEach((d,t)=>{let[l,g]=u[n%2===1&&t===n-1?2:t%2];r.append(f(c("path",{d:`M0 0L${S(t*i)}A1 1 0 ${i>180?1:0} 1 ${S((t+1)*i)}Z`,"stroke-width":.012}),N,m,l));let _=(t+.5)*i-90,x=q(d,n),b=f(c("text",{transform:`rotate(${_}) translate(${(T+O)/2} 0)${_>90&&_<270?" rotate(180)":""}`,"text-anchor":"middle","dominant-baseline":"central","font-size":x.size.toFixed(4),"font-weight":700,"aria-hidden":"true"}),g);x.lines.forEach((E,M)=>{let y=c("tspan",{x:0,y:((M-(x.lines.length-1)/2)*x.size*w).toFixed(4)});y.textContent=E,b.append(y)}),r.append(b),h.push(b);for(let E of[t*i,(t+.5)*i]){let[M,y]=S(E,1.075).split(" ");p.push(f(c("circle",{cx:M,cy:y,r:.024}),m))}}),a.append(f(c("circle",{r:1.13}),$),...p,r,f(c("circle",{r:.17,"stroke-width":.035}),m,$),f(c("circle",{r:.065}),N),f(c("path",{d:"M-0.12 -1.2L0.12 -1.2L0 -0.86Z","stroke-width":.03,"stroke-linejoin":"round"}),N,m)),e.append(a),C(h),globalThis.requestAnimationFrame?.(()=>C(h)),{spinTo(d){let t=D();return r.style.transition=t?"none":`transform ${I}ms cubic-bezier(.15,.7,.1,1)`,r.style.transform=`rotate(${F(d,s.length,t?0:5)}deg)`,t?Promise.resolve():new Promise(l=>{let g=setTimeout(l,I+200);r.addEventListener("transitionend",()=>{clearTimeout(g),l()},{once:!0})})},remove:()=>a.remove()}}window[Symbol.for("@thg-agentic/hyper-personalisation-web.onsite.wheel")]={mountWheel:P};})();
@@ -1 +1 @@
1
- (()=>{function E(e){let s=typeof document>"u"?null:document.currentScript?.src;return s?new URL(e,s).href:null}var z=new Map;function T(e,s){return window[s]?Promise.resolve(window[s]):e?(z.has(s)||z.set(s,new Promise((n,i)=>{let p=document.createElement("script");p.src=e,p.async=!0,p.onload=()=>window[s]?n(window[s]):i(new Error(`${e} did not register`)),p.onerror=()=>i(new Error(`${e} did not load`)),document.head.append(p)}).finally(()=>z.delete(s))),z.get(s)):Promise.reject(new Error("the CDN script\u2019s own URL is unknown"))}var ct=E("onsite-answers.min.js"),be=()=>T(ct,Symbol.for("@thg-agentic/hyper-personalisation-web.onsite.answers"));var ut="/v1/capture/challenge",dt=e=>typeof e=="string"&&/^\/v1\/[\w/-]+$/.test(e)?e:ut;function _e(e,s={}){let n=s.fetch??globalThis.fetch?.bind(globalThis),i=s.servingHost??e.servingHost,p=s.gatewayHost??e.gatewayHost;async function l(c,{method:o="GET",body:r,consent:u=!1,timeoutMs:y}={}){if(!n)return{status:0,body:null};try{let _=await n(c,{method:o,credentials:"omit",signal:y&&AbortSignal.timeout?.(y),headers:{accept:"application/json",authorization:`Bearer ${e.writeKey}`,...r?{"content-type":"application/json"}:{},...u?e.headers():{}},...r?{body:JSON.stringify(r)}:{}}),A=null;try{A=await _.json()}catch{}return{status:_.status,body:A}}catch{return{status:0,body:null}}}let m=(c,o)=>l(`${p}/v1/capture${c}`,{method:"POST",body:o}).then(r=>(r.status>=200&&r.status<300&&e.answered?.(o.answers,o.slot),r));return{decide:(c,o,{visitAudiences:r,visitCampaign:u,visitContext:y,timeoutMs:_=3e3}={})=>l(`${i}/v1/decisions`,{method:"POST",consent:!0,timeoutMs:Math.max(1,_),body:{slots:[o?{key:c,pin:{experiment:o[0],arm:o[1],split:o[2]}}:c],library:e.library,identifier_value:e.anonymousId()??void 0,session_id:e.sessionId()??void 0,identity_token:e.identityToken?.()??void 0,...e.preview?{preview:e.preview}:{},...r&&{visit_audiences:r.claims,...r.answered?.length&&{answered_audiences:r.answered}},...u?{visit_campaign:u}:{},...y?{visit_context:y}:{}}}),datafile:()=>l(`${i}/v1/audiences/datafile`,{timeoutMs:1500}),challenge:()=>l(`${p}${dt(s.challenge)}`),capture:c=>m("",c),answers:c=>m("/answers",c),claim:c=>l(`${i}/v1/offers/claim`,{method:"POST",consent:!0,body:c,timeoutMs:8e3})}}var pt=E("onsite-audiences.min.js"),Se=()=>T(pt,Symbol.for("@thg-agentic/hyper-personalisation-web.onsite.audiences"));function Ae(e,s){let n={},i=()=>{try{let l=JSON.parse(e().getItem(s));l&&typeof l=="object"&&(n=l)}catch{}return n};return{read:i,write:l=>{let m=i();l(m),n=m;try{e().setItem(s,JSON.stringify(m))}catch{}}}}function ve(e,s=()=>!0){let n=Ae(()=>sessionStorage,e),i=Ae(()=>localStorage,e),p=()=>s()?i:n,l=()=>{let o=i.read();(o.sub!==void 0||o.k!==void 0)&&i.write(r=>{delete r.sub,delete r.k})},m=()=>s()?[n.read(),i.read()]:(l(),[n.read()]),c=(o,r)=>{var u;return o.f??(o.f={}),(u=o.f)[r]??(u[r]={}),o.f[r]};return{seen(o){let r=i.read().f?.[o]??{};return{session:n.read().f?.[o]?.n??0,lifetime:r.n??0,closedAt:r.c??null,submitted:r.s===1}},subscribed:()=>m().some(o=>o.sub===1),shown(o){n.write(r=>{let u=c(r,o);u.n=(u.n??0)+1}),i.write(r=>{let u=c(r,o);u.n=(u.n??0)+1})},closed(o,r=Date.now()){i.write(u=>{c(u,o).c=r})},tab(o,r){n.write(u=>{let y=c(u,o);r?y.t=1:delete y.t})},tabOut:o=>n.read().f?.[o]?.t===1,pin(o,r){if(r===void 0)return n.read().f?.[o]?.p??null;n.write(u=>{c(u,o).p=r})},coveredAt:()=>n.read().o??null,covered(o=Date.now()){n.write(r=>{r.o=o})},code(o,r=Date.now()){if(o===void 0){let[u]=m().flatMap(y=>y.k?[y.k]:[]).sort((y,_)=>_.at-y.at);return u&&r-u.at<14*864e5?u.c:null}return p().write(u=>{u.k={c:o,at:r}}),o},submitted(o){i.write(r=>{c(r,o).s=1}),p().write(r=>{r.sub=1})}}}var ft=E("onsite-products.min.js"),G=()=>T(ft,Symbol.for("@thg-agentic/hyper-personalisation-web.onsite.products"));var ht=E("onsite-render.min.js"),Ee=()=>T(ht,Symbol.for("@thg-agentic/hyper-personalisation-web.onsite.render"));var q=(e,s=0)=>s<=6&&typeof e=="object"&&!!e&&(Array.isArray(e)?e.some(n=>q(n,s+1)):typeof e.v=="string"||q(e.b??e.i??e.a,s+1));var mt=["source","medium","campaign","content","term"];var Te=e=>String(e).trim().toLowerCase();function gt(e,s,n){let i=Te(e),p=Te(n);return s==="is"?i===p:s==="contains"&&p!==""&&i.includes(p)}function xe(e,s){return(Array.isArray(e)?e:[]).every(n=>{let i=s?.[n?.field];return!mt.includes(n?.field)||typeof i!="string"?!1:[].concat(n.values??[]).some(p=>gt(i,n.match,p))})}var De=["popup","sheet","bar","teaser","inline","fullscreen"],wt=["entry","exit","scroll","time","idle","inline","manual"],ie=e=>e!=="inline",Oe=e=>e==="popup"||e==="sheet"||e==="fullscreen",x=e=>e!==null&&typeof e=="object"&&!Array.isArray(e),j=e=>Array.isArray(e)?e.filter(s=>typeof s=="string"):[],Me=e=>Number.isInteger(e)&&e>=0?e:null,yt={field:null,match:null,values:[]},bt=e=>e==null?[]:Array.isArray(e)&&e.every(x)?e:[yt];function Pe(e){if(!x(e)||typeof e.slot!="string"||e.slot==="")return null;let s=x(e.trigger)?e.trigger:{};if(!De.includes(e.format)||!wt.includes(s.type))return null;let n=x(e.caps)?e.caps:{};return{...e,trigger:s,priority:Number.isFinite(e.priority)?e.priority:0,pages:x(e.pages)?e.pages:{},devices:j(e.devices),aliases:j(e.aliases),audiences:j(e.audiences),arrived_from:bt(e.arrived_from),caps:{per_session:Me(n.per_session),lifetime:Me(n.lifetime),after_close_days:Number.isFinite(n.after_close_days)?n.after_close_days:null},window:x(e.window)?e.window:{},questions:Array.isArray(e.questions)?e.questions.filter(x):[],prizes:Array.isArray(e.prizes)?e.prizes.filter(x):[]}}var _t=/^[a-z][a-z0-9_-]{0,31}$/;function Ne(e){if(!x(e)||e.v!==1||!Array.isArray(e.steps))return null;let s=e.steps.filter(n=>x(n)&&_t.test(n.id)&&Array.isArray(n.blocks));return s.length===0?null:{format:De.includes(e.format)?e.format:null,theme:x(e.theme)?e.theme:{},steps:s}}function Ie(e,s){let n=String(e).split("*").map(i=>i.replace(/[.+?^${}()|[\]\\]/g,"\\$&")).join(".*");return new RegExp(`^${n}$`,"i").test(s)}function St(e,s){let n=j(e?.include);return(!n.length||n.some(i=>Ie(i,s)))&&!j(e?.exclude).some(i=>Ie(i,s))}function $e(e){return e.matchMedia?.("(hover: none) and (pointer: coarse)")?.matches===!0||e.innerWidth<768?"mobile":"desktop"}var Ce=e=>typeof e=="string"?Date.parse(e):Number.NaN,U=e=>e.trigger.type==="manual";function le(e,s){let n=[];St(e.pages,s.path)||n.push("page not included"),e.devices.length&&!e.devices.includes(s.device)&&n.push(`not on ${s.device}`),xe(e.arrived_from,s.campaign)||n.push("not from its campaign");let i=Ce(e.window.starts_at),p=Ce(e.window.ends_at);if((s.now<i||s.now>=p)&&n.push("outside its dates"),e.audiences.length&&!s.preview&&(s.personalisation?s.audiences&&!e.audiences.some(c=>s.audiences.includes(c))&&n.push("not in its audiences"):n.push("audiences need personalisation consent")),s.preview||s.asked||U(e))return n;let{seen:l}=s,{caps:m}=e;return l.submitted&&n.push("already submitted"),e.exclude_subscribed===!0&&s.subscribed&&n.push("already subscribed"),m.per_session!==null&&l.session>=m.per_session&&n.push("per_session cap"),m.lifetime!==null&&l.lifetime>=m.lifetime&&n.push("lifetime cap"),m.after_close_days!==null&&l.closedAt&&s.now-l.closedAt<m.after_close_days*864e5&&n.push("closed recently"),n}var ke=(e,s)=>s.priority-e.priority;var At=["mousemove","pointerdown","keydown","scroll","touchstart","wheel"];function vt(){let e=[];return{on:(i,p,l,m={passive:!0})=>{i.addEventListener(p,l,m),e.push(()=>i.removeEventListener(p,l,m))},later:(i,p)=>{let l=setTimeout(i,p);e.push(()=>clearTimeout(l))},stop:()=>{for(let i of e.splice(0))i()}}}var Le=(e,s)=>{let n=s.documentElement.scrollHeight||0;return n>0?(e.scrollY+e.innerHeight)/n:0},Et=e=>{let s=e.activeElement;return!!(s&&(/^(INPUT|TEXTAREA|SELECT)$/.test(s.tagName)||s.isContentEditable))};function Tt({on:e,later:s},n,i,p,l){let m=!1,c=!1,o=null,r=0;s(()=>{m=!0},i.delay_ms??5e3),e(l,"mousemove",u=>{u.clientY>p.innerHeight*.1&&(c=!0),o!==null&&(r=u.clientY-o),o=u.clientY}),e(l,"mouseout",u=>{m&&c&&!u.relatedTarget&&u.clientY<=0&&r<0&&!Et(l)&&n("exit")})}function xt({on:e,later:s},n,i,p,l){let m=!1,c=0,o=p.scrollY,r=Date.now(),u=null,y=null;s(()=>{m=!0},i.delay_ms??5e3),e(p,"scroll",()=>{let _=p.scrollY,A=Date.now();if(c=Math.max(c,Le(p,l)),_<o){(!u||A-u.t>300)&&(u={y:o,t:r});let M=u.y-_;m&&c>=.3&&M>=120&&M/Math.max(1,A-u.t)>=.5&&n("exit_scroll")}else u=null;o=_,r=A}),e(l,"visibilitychange",()=>{l.visibilityState==="hidden"?y=Date.now():y!==null&&Date.now()-y>=1e4&&n("return"),l.visibilityState!=="hidden"&&(y=null)})}function Re(e,s,{device:n,win:i=window,doc:p=document}){let l=vt(),m=(e.seconds??30)*1e3;if(e.type==="entry"&&l.later(()=>s("entry"),e.delay_ms??0),e.type==="time"&&l.later(()=>s("time"),m),e.type==="exit"&&(n==="mobile"?xt:Tt)(l,s,e,i,p),e.type==="scroll"){let c=e.depth??.5;l.on(i,"scroll",()=>Le(i,p)>=c&&s("scroll"))}if(e.type==="idle"){let c=null,o=()=>{clearTimeout(c),c=setTimeout(()=>s("idle"),m)};o();for(let r of At)l.on(r==="scroll"?i:p,r,o);return l.on(p,"visibilitychange",o),()=>{clearTimeout(c),l.stop()}}return l.stop}var Mt=E("onsite-values.min.js"),Fe=()=>T(Mt,Symbol.for("@thg-agentic/hyper-personalisation-web.onsite.values"));var It=E("onsite-wheel.min.js"),je=()=>T(It,Symbol.for("@thg-agentic/hyper-personalisation-web.onsite.wheel"));var Ue=Symbol.for("@thg-agentic/hyper-personalisation-web.onsite-access"),H=Symbol.for("@thg-agentic/hyper-personalisation-web.onsite"),Ct=Symbol.for("@thg-agentic/hyper-personalisation-web.onsite.pending"),Dt=Symbol.for("@thg-agentic/hyper-personalisation-web.onsite.listeners"),He=Symbol.for("@thg-agentic/hyper-personalisation-web.onsite.suppressed"),We={seen:()=>({session:0,lifetime:0,closedAt:null,submitted:!1}),subscribed:()=>!1,shown(){},closed(){},submitted(){},tab(){},tabOut:()=>!1,pin:()=>null,coveredAt:()=>null,covered(){},code:()=>null},Ot=new Set(["decision-failed","no-creative","no-code","renderer-failed","products-failed","values-failed","error"]),Xe=3e3,Ke={status:0,body:null},Pt=1500,Ve=50,Nt=300,$t=()=>{try{return new URLSearchParams(location.search).get("hp_debug")==="onsite"}catch{return!1}},Ye=(e,s)=>e.steps.some(n=>n.blocks.some(s));function ze(e,s={}){if(typeof window>"u"||typeof document>"u")return null;if(window[H])return window[H];let n=typeof e?.[Ue]=="function"?e[Ue]():null;if(!n)return console.warn("[hp] onsite: startOnsite needs the client bootstrap or createAnalytics made"),null;let i=s.settings??n.settings??{};n.started?.(i);let p=_e(n,{...s,challenge:i.capture?.challenge}),l=n.preview?We:ve(n.storageKey,n.personalisation),m=()=>n.campaign?.()??null,c=new Map,o=()=>window[He]?.size>0,r=(t,a)=>{for(let d of window[Dt]?.[t]??[])try{d(a)}catch(f){console.warn(`[hp] onsite ${t} listener failed:`,f)}},u=$e(window),y=n.debug||s.debug===!0||$t(),_=new Map,A=new Map,M=[];for(let t of Array.isArray(i.forms)?i.forms:[]){let a=Pe(t);a?M.push(a):_.set(String(t?.slot??`form ${_.size+1}`),{slot:String(t?.slot??""),state:"invalid",code:"invalid",reasons:["not a form this SDK can show"]})}let ae=()=>Se().catch(t=>(console.warn("[hp] onsite audiences not loaded:",t?.message??t),null));n.personalisation()&&M.some(t=>t.audiences.length>0)&&ae().then(t=>t?.prefetch(p));let $=new Map,W=new Map,I=null,ce=!1,ue=new Set,Ge=t=>{for(let a of $.keys()){let d=c.get(a);if(!t||!d||d.modal?.())return a}return null},X=null,B=new Set,J=Number.isInteger(i.overlay_gap_minutes)?i.overlay_gap_minutes:0,qe=()=>{let t=l.coveredAt();if(!(J>0)||typeof t!="number")return null;let a=Math.max(0,Math.floor((Date.now()-t)/6e4));return a<J?`a popup showed ${a} min ago; ${J} min between them`:null},k=new Set,K=new Map,b=(t,a,d,f=[])=>(_.set(t.slot,{slot:t.slot,format:t.format,trigger:t.trigger.type,priority:t.priority,state:a,code:d,reasons:f}),y&&console.info(`[hp] onsite ${t.slot}: ${a}${f.length?` (${f.join("; ")})`:""}`),{state:a,code:d}),C=(t,a,d,f)=>($.delete(t.slot),b(t,a,d,f)),N=(t,a,d)=>{let f;return Promise.race([t,new Promise(g=>{f=setTimeout(g,a-Date.now(),d)})]).then(g=>Date.now()>a?d:g).finally(()=>clearTimeout(f))},Be=(t,a)=>{ce||o()||(I??(I=t.slot),r("nothing",{slot:t.slot,format:t.format,code:a}))},de=()=>{try{let t=s.audiences?.();return Array.isArray(t)?t:null}catch{return null}},pe=t=>({path:location.pathname,device:u,campaign:m(),now:Date.now(),seen:l.seen(t.slot),subscribed:l.subscribed()||s.subscribed?.()===!0,personalisation:n.personalisation(),preview:!!n.preview,audiences:de()}),Z=t=>{A.get(t.slot)?.(),A.delete(t.slot)};function L(t,a,d=!1,f=U(t),g=Date.now()+Xe){if(c.has(t.slot))return Promise.resolve({state:"shown",code:"shown",asked:f});let w=W.get(t.slot);return w?(w.asked||(w.asked=f),w.done):(w={asked:f},w.done=Je(t,a,d,f,g).catch(v=>c.has(t.slot)?{state:"shown",code:"shown"}:(console.warn("[hp] onsite form failed:",v?.message??v),C(t,"not shown","error",[`failed: ${v?.message??v}`]))).then(v=>(W.delete(t.slot),{...v,asked:w.asked||w.opened})),W.set(t.slot,w),w.done)}async function Je(t,a,d,f,g){if(o())return b(t,"not shown","suppressed",[`suppressed: ${[...window[He]].join(", ")}`]);let w=le(t,{...pe(t),...d?{seen:We.seen()}:{},asked:f});if(w.length)return b(t,"not eligible","not-eligible",w);let v=Oe(t.format)&&!d,D=v&&!f&&qe();if(D)return b(t,"not shown","overlay-gap",[D]);if(v&&!n.preview&&n.consentAnswered?.()===!1)return K.set(t,f),b(t,"not shown","awaiting-consent",["waiting for the consent banner"]);let O=ie(t.format),he=O&&Ge(f);if(he)return b(t,"not shown","another-showing",[`${he} is showing`]);if(O&&I&&!f)return b(t,"not shown","allowance-spent",[`${I} already showed on this page view`]);let V=null;if(!O){try{V=document.querySelector(t.trigger.selector??"")}catch{V=null}if(!V)return b(t,"not shown","no-element",["no element matches its selector"])}O&&$.set(t.slot,t),Z(t),b(t,"asking for a decision","deciding",[a]);let tt=Ee().catch(h=>(console.warn("[hp] onsite renderer not loaded:",h?.message??h),null)),Y=t.visit_context===!0?G().catch(()=>null):null,ee=de()??[],me={claims:[...new Set([...t.audiences,...ee])].filter(h=>ee.includes(h)).slice(0,100)},nt=t.audiences.length>0&&!n.preview&&n.personalisation()?await N(ae().then(h=>h?h.visitAudiences(p,n.sessionSignals,t.audiences,ee):me),Math.min(g,Date.now()+Pt),me):null,F=Date.now()<g?await N(p.decide(t.slot,l.pin(t.slot),{visitAudiences:nt,visitCampaign:t.arrived_from.length?m():null,visitContext:t.visit_context===!0?n.visitContext?.()??null:null,timeoutMs:g-Date.now()}),g,Ke):Ke,te=F.status===200?F.body?.decisions:null,S=Array.isArray(te)?te.find(h=>h?.slot===t.slot):null;S?.experiment&&S.arm&&S.split&&l.pin(t.slot,[S.experiment,S.arm,S.split]);let P=S&&S.holdout!==!0?Ne(S.payload):null,ge=P?.steps[0].blocks??[],we=S?.offer?.code??(n.preview?"PREVIEW":l.code()),st=n.basketValue?.()??null,ne=ge.some(h=>h?.t==="code")&&!we&&"no code to remind of"||ge.some(h=>h?.t==="progress")&&!(st>0)&&"the basket is empty";if(ne){let h=ne==="the basket is empty";return h&&k.add(t),C(t,"not shown",h?"empty-basket":"no-code",[ne])}if(k.delete(t),!P){let h=S?.holdout===!0;return h&&n.analytics()&&e.recordExposure(F.body),O&&h&&(I??(I=t.slot)),h&&!f&&r("held",{slot:t.slot,arm:S.arm??null,format:t.format}),h||Array.isArray(te)?C(t,h?"held out":"no decision",h?"held-out":"no-creative",["no creative for this visitor"]):C(t,"no decision","decision-failed",[`decisions answered ${F.status}`])}let se=await N(tt,g,null);if(!se)return C(t,"not shown","renderer-failed",["the renderer did not load"]);let ye=Ye(P,h=>h?.t==="products");ye&&(Y??(Y=G().catch(()=>null)));let ot=N(se.warm?.(t,P,P.steps[0].id,ue),Math.min(g,Date.now()+Nt)),[rt,oe]=await Promise.all([!ye||N(Y,g,null),Ye(P,h=>(h?.t==="heading"||h?.t==="text")&&q(h.text))&&N(Fe().catch(()=>null),g,null)]);if(!rt)return C(t,"not shown","products-failed",["its products did not load"]);if(oe===null)return C(t,"not shown","values-failed",["its values did not load"]);if(await ot,o())return C(t,"not shown","suppressed",["suppressed"]);let re=(h,at={})=>r(h,{slot:t.slot,arm:S.arm??null,format:P.format??t.format,...at}),it=se.mountForm({form:t,creative:P,decision:S,access:n,client:e,api:p,counters:l,loadWheel:je,loadAnswers:be,loadProducts:()=>Y??G(),container:V,warmed:ue,coupon:we,basket:()=>n.basketValue?.()??null,fill:oe?oe.fillFor(t,n,s.values):void 0,emit:re,onClose(h){c.delete(t.slot),$.delete(t.slot),b(t,"closed","closed",[h]),re("closed",{reason:h})}});c.set(t.slot,it),d||l.shown(t.slot),v&&l.covered(),O&&(I??(I=t.slot)),n.analytics()&&e.recordExposure(F.body);let lt=b(t,"shown","shown",[a]);return re("shown"),lt}function Q(t,a,d=U(t)){if(!ie(t.format))return L(t,a,!1,d);if(!X){let f={forms:[],taken:new Set,deadline:Date.now()+Ve+Xe};X=f,B.add(f),setTimeout(()=>{X=null,Ze(f)},Ve)}X.forms.push([t,a,d])}async function Ze(t){let a=t.forms.sort(([f],[g])=>ke(f,g)),d=null;for(let[f,[g,w,v]]of a.entries()){if(t.taken.has(g))continue;let D=await L(g,w,!1,v,t.deadline);if(!d&&Ot.has(D.code)&&!D.asked&&(d=[g,D.code]),D.state==="shown"||D.state==="held out"){for(let[O]of a.slice(f+1))b(O,"not shown","lower-priority",[`${g.slot} has a higher priority`]);d=null;break}}B.delete(t),d&&Be(...d)}for(let t of M){if(t.format==="teaser"&&l.tabOut(t.slot)){L(t,"tab kept from an earlier page",!0);continue}let a=le(t,pe(t));if(a.length){b(t,"not eligible","not-eligible",a);continue}let d=t.trigger.type;d==="manual"?b(t,"waiting for hp.onsite.open","waiting-for-open"):d==="inline"||t.format==="inline"?L(t,"inline"):fe(t)}function fe(t){Z(t),A.set(t.slot,Re(t.trigger,a=>{Z(t),Q(t,a)},{device:u})),b(t,"armed","armed",[`${t.trigger.type} on ${u}`])}let Qe=n.onConsentAnswered?.(()=>{let t=[...K];K.clear();for(let[a,d]of t)c.has(a.slot)||(d?Q(a,"manual",d):fe(a))}),et=n.onBasket?.(()=>{if(!((n.basketValue?.()??0)>0))return;let t=[...k];k.clear();for(let a of t)c.has(a.slot)||Q(a,"the basket changed")}),R=Object.freeze({open(t){let a=M.find(w=>w.slot===t),d=a??M.find(w=>w.aliases.includes(t));if(!d)return Promise.resolve(!1);if(c.has(d.slot))return Promise.resolve(!0);for(let w of B)w.taken.add(d);let f=L(d,"manual",!1,U(d)||!a),g=W.get(d.slot);return g&&(g.opened=!0),f.then(({state:w})=>w==="shown")},suppress(){for(let[t,a]of c){a.destroy(),c.delete(t),$.delete(t);let d=M.find(f=>f.slot===t);d&&b(d,"closed","suppressed",["suppressed"])}},debug:()=>[..._.values()].map(t=>({...t,reasons:[...t.reasons]})),stop(){ce=!0;for(let t of A.values())t();A.clear(),et?.(),Qe?.(),k.clear(),K.clear(),window[H]===R&&delete window[H]}});window[H]=R;for(let{slot:t,resolve:a}of window[Ct]?.splice(0)??[])a(R.open(t));return y&&console.table?.(R.debug()),R}window[Symbol.for("@thg-agentic/hyper-personalisation-web.onsite.module")]={startOnsite:ze};})();
1
+ (()=>{function v(e){let s=typeof document>"u"?null:document.currentScript?.src;return s?new URL(e,s).href:null}var Z=new Map;function T(e,s){return window[s]?Promise.resolve(window[s]):e?(Z.has(s)||Z.set(s,new Promise((n,o)=>{let d=document.createElement("script");d.src=e,d.async=!0,d.onload=()=>window[s]?n(window[s]):o(new Error(`${e} did not register`)),d.onerror=()=>o(new Error(`${e} did not load`)),document.head.append(d)}).finally(()=>Z.delete(s))),Z.get(s)):Promise.reject(new Error("the CDN script\u2019s own URL is unknown"))}var xt=v("onsite-answers.min.js"),Oe=()=>T(xt,Symbol.for("@thg-agentic/hyper-personalisation-web.onsite.answers"));var It="/v1/capture/challenge",Mt=e=>typeof e=="string"&&/^\/v1\/[\w/-]+$/.test(e)?e:It;function Ne(e,s={}){let n=s.fetch??globalThis.fetch?.bind(globalThis),o=s.servingHost??e.servingHost,d=s.gatewayHost??e.gatewayHost;async function l(c,{method:i="GET",body:a,consent:p=!1,timeoutMs:y}={}){if(!n)return{status:0,body:null};try{let b=await n(c,{method:i,credentials:"omit",signal:y&&AbortSignal.timeout?.(y),headers:{accept:"application/json",authorization:`Bearer ${e.writeKey}`,...a?{"content-type":"application/json"}:{},...p?e.headers():{}},...a?{body:JSON.stringify(a)}:{}}),S=null;try{S=await b.json()}catch{}return{status:b.status,body:S}}catch{return{status:0,body:null}}}let g=(c,i)=>l(`${d}/v1/capture${c}`,{method:"POST",body:i}).then(a=>(a.status>=200&&a.status<300&&e.answered?.(i.answers,i.slot),a));return{decide:(c,i,{visitAudiences:a,visitCampaign:p,visitContext:y,pageFacts:b,timeoutMs:S=3e3}={})=>l(`${o}/v1/decisions`,{method:"POST",consent:!0,timeoutMs:Math.max(1,S),body:{slots:[i?{key:c,pin:{experiment:i[0],arm:i[1],split:i[2]}}:c],library:e.library,identifier_value:e.anonymousId()??void 0,session_id:e.sessionId()??void 0,identity_token:e.identityToken?.()??void 0,...e.preview?{preview:e.preview}:{},...a&&{visit_audiences:a.claims,...a.answered?.length&&{answered_audiences:a.answered}},...p?{visit_campaign:p}:{},...y?{visit_context:y}:{},...b?{page_facts:b}:{}}}),datafile:()=>l(`${o}/v1/audiences/datafile`,{timeoutMs:1500}),challenge:()=>l(`${d}${Mt(s.challenge)}`),capture:c=>g("",c),answers:c=>g("/answers",c),claim:c=>l(`${o}/v1/offers/claim`,{method:"POST",consent:!0,body:c,timeoutMs:8e3})}}var Ct=v("onsite-audiences.min.js"),Pe=()=>T(Ct,Symbol.for("@thg-agentic/hyper-personalisation-web.onsite.audiences"));function $e(e,s){let n={},o=()=>{try{let l=JSON.parse(e().getItem(s));l&&typeof l=="object"&&(n=l)}catch{}return n};return{read:o,write:l=>{let g=o();l(g),n=g;try{e().setItem(s,JSON.stringify(g))}catch{}}}}function ke(e,s=()=>!0){let n=$e(()=>sessionStorage,e),o=$e(()=>localStorage,e),d=()=>s()?o:n,l=()=>{let i=o.read();(i.sub!==void 0||i.k!==void 0)&&o.write(a=>{delete a.sub,delete a.k})},g=()=>s()?[n.read(),o.read()]:(l(),[n.read()]),c=(i,a)=>{var p;return i.f??(i.f={}),(p=i.f)[a]??(p[a]={}),i.f[a]};return{seen(i){let a=o.read().f?.[i]??{};return{session:n.read().f?.[i]?.n??0,lifetime:a.n??0,closedAt:a.c??null,submitted:a.s===1}},subscribed:()=>g().some(i=>i.sub===1),shown(i){n.write(a=>{let p=c(a,i);p.n=(p.n??0)+1}),o.write(a=>{let p=c(a,i);p.n=(p.n??0)+1})},closed(i,a=Date.now()){o.write(p=>{c(p,i).c=a})},tab(i,a){n.write(p=>{let y=c(p,i);a?y.t=1:delete y.t})},tabOut:i=>n.read().f?.[i]?.t===1,pin(i,a){if(a===void 0)return n.read().f?.[i]?.p??null;n.write(p=>{c(p,i).p=a})},coveredAt:()=>n.read().o??null,covered(i=Date.now()){n.write(a=>{a.o=i})},code(i,a=Date.now()){if(i===void 0){let[p]=g().flatMap(y=>y.k?[y.k]:[]).sort((y,b)=>b.at-y.at);return p&&a-p.at<14*864e5?p.c:null}return d().write(p=>{p.k={c:i,at:a}}),i},submitted(i){o.write(a=>{c(a,i).s=1}),d().write(a=>{a.sub=1})}}}var Dt=Symbol.for("@thg-agentic/hyper-personalisation-web.onsite.page-facts");function fe(e=globalThis.window){let s=e?.[Dt];return s?.path===e?.location?.pathname?s.facts:{}}var Fe=e=>typeof e=="string"?e.slice(0,100):e,Le=e=>typeof e=="string"?e.trim().toLowerCase():e,Re=(e,s)=>e.every(n=>{let o=Fe(s?.[n.fact]),d=Array.isArray(n.values)?n.values:[];if(o==null||typeof o!=typeof d[0]||typeof o=="number"&&!Number.isFinite(o))return!1;let l=d.some(g=>Le(g)===Le(o));return n.op==="is"?l:n.op==="is_not"?!l:n.op==="at_least"?o>=d[0]:n.op==="at_most"&&o<=d[0]}),Ue=(e,s)=>Object.fromEntries(e.filter(n=>n.fact in s).map(n=>[n.fact,Fe(s[n.fact])]));var Ot=v("onsite-products.min.js"),Q=()=>T(Ot,Symbol.for("@thg-agentic/hyper-personalisation-web.onsite.products"));var Nt=v("onsite-render.min.js"),je=()=>T(Nt,Symbol.for("@thg-agentic/hyper-personalisation-web.onsite.render"));var ee=(e,s=0)=>s<=6&&typeof e=="object"&&!!e&&(Array.isArray(e)?e.some(n=>ee(n,s+1)):typeof e.v=="string"||ee(e.b??e.i??e.a,s+1));var Pt=["source","medium","campaign","content","term"];var He=e=>String(e).trim().toLowerCase();function $t(e,s,n){let o=He(e),d=He(n);return s==="is"?o===d:s==="contains"&&d!==""&&o.includes(d)}function We(e,s){return(Array.isArray(e)?e:[]).every(n=>{let o=s?.[n?.field];return!Pt.includes(n?.field)||typeof o!="string"?!1:[].concat(n.values??[]).some(d=>$t(o,n.match,d))})}var te=["the page does not say so","not a product page"],ze=["popup","sheet","bar","teaser","inline","fullscreen"],kt=["entry","exit","scroll","time","idle","inline","manual"],he=e=>e!=="inline",Be=e=>e==="popup"||e==="sheet"||e==="fullscreen",x=e=>e!==null&&typeof e=="object"&&!Array.isArray(e),K=e=>Array.isArray(e)?e.filter(s=>typeof s=="string"):[],Ke=e=>Number.isInteger(e)&&e>=0?e:null,Xe=(e,s)=>e==null?[]:Array.isArray(e)&&e.every(x)?e:[s];function Ge(e){if(!x(e)||typeof e.slot!="string"||e.slot==="")return null;let s=x(e.trigger)?e.trigger:{};if(!ze.includes(e.format)||!kt.includes(s.type))return null;let n=x(e.caps)?e.caps:{};return{...e,trigger:s,priority:Number.isFinite(e.priority)?e.priority:0,pages:x(e.pages)?e.pages:{},devices:K(e.devices),aliases:K(e.aliases),audiences:K(e.audiences),arrived_from:Xe(e.arrived_from,{field:null,match:null,values:[]}),page_facts:Xe(e.page_facts,{fact:null,op:null,values:[]}),products:e.products===!0,caps:{per_session:Ke(n.per_session),lifetime:Ke(n.lifetime),after_close_days:Number.isFinite(n.after_close_days)?n.after_close_days:null},window:x(e.window)?e.window:{},questions:Array.isArray(e.questions)?e.questions.filter(x):[],prizes:Array.isArray(e.prizes)?e.prizes.filter(x):[]}}var Lt=/^[a-z][a-z0-9_-]{0,31}$/;function qe(e){if(!x(e)||e.v!==1||!Array.isArray(e.steps))return null;let s=e.steps.filter(n=>x(n)&&Lt.test(n.id)&&Array.isArray(n.blocks));return s.length===0?null:{format:ze.includes(e.format)?e.format:null,theme:x(e.theme)?e.theme:{},steps:s}}function Ve(e,s){let n=String(e).split("*").map(o=>o.replace(/[.+?^${}()|[\]\\]/g,"\\$&")).join(".*");return new RegExp(`^${n}$`,"i").test(s)}function Ft(e,s){let n=K(e?.include);return(!n.length||n.some(o=>Ve(o,s)))&&!K(e?.exclude).some(o=>Ve(o,s))}function Je(e){return e.matchMedia?.("(hover: none) and (pointer: coarse)")?.matches===!0||e.innerWidth<768?"mobile":"desktop"}var Ye=e=>typeof e=="string"?Date.parse(e):Number.NaN,X=e=>e.trigger.type==="manual",ge="code in basket",we="outside its daily window",Ze=(e,s)=>{let{daily:n}=e.window;return n.next.find(o=>o>s)-n.within_hours*36e5-s};function me(e,s){let n=[];Ft(e.pages,s.path)||n.push("page not included"),e.devices.length&&!e.devices.includes(s.device)&&n.push(`not on ${s.device}`),We(e.arrived_from,s.campaign)||n.push("not from its campaign"),!s.later&&!s.preview&&(Re(e.page_facts,s.facts)||n.push(te[0]),e.products&&!s.product&&n.push(te[1]));let o=Ye(e.window.starts_at),d=Ye(e.window.ends_at);(s.now<o||s.now>=d)&&n.push("outside its dates");let{daily:l}=e.window;if(l&&!s.preview){let i=l.next?.find?.(a=>a>s.now)-s.now;i>0?!s.later&&i>l.within_hours*36e5&&n.push(we):n.push("no cut-off ahead")}if(e.audiences.length&&!s.preview&&(s.personalisation?s.audiences&&!e.audiences.some(i=>s.audiences.includes(i))&&n.push("not in its audiences"):n.push("audiences need personalisation consent")),s.preview||s.asked||X(e))return n;let{seen:g}=s,{caps:c}=e;return g.submitted&&n.push("already submitted"),e.exclude_subscribed===!0&&s.subscribed&&n.push("already subscribed"),e.exclude_code_applied===!0&&s.basketHasCode&&n.push(ge),c.per_session!==null&&g.session>=c.per_session&&n.push("per_session cap"),c.lifetime!==null&&g.lifetime>=c.lifetime&&n.push("lifetime cap"),c.after_close_days!==null&&g.closedAt&&s.now-g.closedAt<c.after_close_days*864e5&&n.push("closed recently"),n}var Qe=(e,s)=>s.priority-e.priority;var Rt=["mousemove","pointerdown","keydown","scroll","touchstart","wheel"];function Ut(){let e=[];return{on:(o,d,l,g={passive:!0})=>{o.addEventListener(d,l,g),e.push(()=>o.removeEventListener(d,l,g))},later:(o,d)=>{let l=setTimeout(o,d);e.push(()=>clearTimeout(l))},stop:()=>{for(let o of e.splice(0))o()}}}var et=(e,s)=>{let n=s.documentElement.scrollHeight||0;return n>0?(e.scrollY+e.innerHeight)/n:0},jt=e=>{let s=e.activeElement;return!!(s&&(/^(INPUT|TEXTAREA|SELECT)$/.test(s.tagName)||s.isContentEditable))};function Ht({on:e,later:s},n,o,d,l){let g=!1,c=!1,i=null,a=0;s(()=>{g=!0},o.delay_ms??5e3),e(l,"mousemove",p=>{p.clientY>d.innerHeight*.1&&(c=!0),i!==null&&(a=p.clientY-i),i=p.clientY}),e(l,"mouseout",p=>{g&&c&&!p.relatedTarget&&p.clientY<=0&&a<0&&!jt(l)&&n("exit")})}function Wt({on:e,later:s},n,o,d,l){let g=!1,c=0,i=d.scrollY,a=Date.now(),p=null,y=null;s(()=>{g=!0},o.delay_ms??5e3),e(d,"scroll",()=>{let b=d.scrollY,S=Date.now();if(c=Math.max(c,et(d,l)),b<i){(!p||S-p.t>300)&&(p={y:i,t:a});let I=p.y-b;g&&c>=.3&&I>=120&&I/Math.max(1,S-p.t)>=.5&&n("exit_scroll")}else p=null;i=b,a=S}),e(l,"visibilitychange",()=>{l.visibilityState==="hidden"?y=Date.now():y!==null&&Date.now()-y>=1e4&&n("return"),l.visibilityState!=="hidden"&&(y=null)})}function tt(e,s,{device:n,win:o=window,doc:d=document}){let l=Ut(),g=(e.seconds??30)*1e3;if(e.type==="entry"&&l.later(()=>s("entry"),e.delay_ms??0),e.type==="time"&&l.later(()=>s("time"),g),e.type==="exit"&&(n==="mobile"?Wt:Ht)(l,s,e,o,d),e.type==="scroll"){let c=e.depth??.5;l.on(o,"scroll",()=>et(o,d)>=c&&s("scroll"))}if(e.type==="idle"){let c=null,i=()=>{clearTimeout(c),c=setTimeout(()=>s("idle"),g)};i();for(let a of Rt)l.on(a==="scroll"?o:d,a,i);return l.on(d,"visibilitychange",i),()=>{clearTimeout(c),l.stop()}}return l.stop}var Kt=v("onsite-values.min.js"),nt=()=>T(Kt,Symbol.for("@thg-agentic/hyper-personalisation-web.onsite.values"));var Xt=v("onsite-wheel.min.js"),st=()=>T(Xt,Symbol.for("@thg-agentic/hyper-personalisation-web.onsite.wheel"));var ot=Symbol.for("@thg-agentic/hyper-personalisation-web.onsite-access"),V=Symbol.for("@thg-agentic/hyper-personalisation-web.onsite"),Vt=Symbol.for("@thg-agentic/hyper-personalisation-web.onsite.pending"),Yt=Symbol.for("@thg-agentic/hyper-personalisation-web.onsite.listeners"),ne=Symbol.for("@thg-agentic/hyper-personalisation-web.onsite.page-said"),it=Symbol.for("@thg-agentic/hyper-personalisation-web.onsite.suppressed"),rt={seen:()=>({session:0,lifetime:0,closedAt:null,submitted:!1}),subscribed:()=>!1,shown(){},closed(){},submitted(){},tab(){},tabOut:()=>!1,pin:()=>null,coveredAt:()=>null,covered(){},code:()=>null},zt=new Set(["decision-failed","no-creative","no-code","renderer-failed","products-failed","values-failed","error"]),at=3e3,lt={status:0,body:null},Bt=1500,ct=50,Gt=300,qt=()=>{try{return new URLSearchParams(location.search).get("hp_debug")==="onsite"}catch{return!1}},ut=(e,s)=>e.steps.some(n=>n.blocks.some(s));function dt(e,s={}){if(typeof window>"u"||typeof document>"u")return null;if(window[V])return window[V];let n=typeof e?.[ot]=="function"?e[ot]():null;if(!n)return console.warn("[hp] onsite: startOnsite needs the client bootstrap or createAnalytics made"),null;let o=s.settings??n.settings??{};n.started?.(o);let d=Ne(n,{...s,challenge:o.capture?.challenge}),l=n.preview?rt:ke(n.storageKey,n.personalisation),g=()=>n.campaign?.()??null,c=new Map,i=()=>window[it]?.size>0,a=(t,r)=>{for(let u of window[Yt]?.[t]??[])try{u(r)}catch(h){console.warn(`[hp] onsite ${t} listener failed:`,h)}},p=Je(window),y=n.debug||s.debug===!0||qt(),b=new Map,S=new Map,I=[];for(let t of Array.isArray(o.forms)?o.forms:[]){let r=Ge(t);r?I.push(r):b.set(String(t?.slot??`form ${b.size+1}`),{slot:String(t?.slot??""),state:"invalid",code:"invalid",reasons:["not a form this SDK can show"]})}let ye=()=>Pe().catch(t=>(console.warn("[hp] onsite audiences not loaded:",t?.message??t),null));n.personalisation()&&I.some(t=>t.audiences.length>0)&&ye().then(t=>t?.prefetch(d));let L=new Map,F=new Map,M=null,R=!1,be=new Set,pt=t=>{for(let r of L.keys()){let u=c.get(r);if(!t||!u||u.modal?.())return r}return null},Y=null,se=new Set,oe=Number.isInteger(o.overlay_gap_minutes)?o.overlay_gap_minutes:0,ft=()=>{let t=l.coveredAt();if(!(oe>0)||typeof t!="number")return null;let r=Math.max(0,Math.floor((Date.now()-t)/6e4));return r<oe?`a popup showed ${r} min ago; ${oe} min between them`:null},U=new Set,$=new Map,_e=()=>n.basketCodes?.()?.length>0,Se=(t,r,u)=>{r.includes(ge)&&$.set(t,u)},j=new Set,z=new Map,_=(t,r,u,h=[])=>(b.set(t.slot,{slot:t.slot,format:t.format,trigger:t.trigger.type,priority:t.priority,state:r,code:u,reasons:h}),y&&console.info(`[hp] onsite ${t.slot}: ${r}${h.length?` (${h.join("; ")})`:""}`),{state:r,code:u}),C=(t,r,u,h)=>(L.delete(t.slot),_(t,r,u,h)),k=(t,r,u)=>{let h;return Promise.race([t,new Promise(m=>{h=setTimeout(m,r-Date.now(),u)})]).then(m=>Date.now()>r?u:m).finally(()=>clearTimeout(h))},ht=(t,r)=>{R||i()||(M??(M=t.slot),a("nothing",{slot:t.slot,format:t.format,code:r}))},Ae=()=>{try{let t=s.audiences?.();return Array.isArray(t)?t:null}catch{return null}},Ee=t=>({path:location.pathname,device:p,campaign:g(),facts:fe(),product:n.pageProduct?.(),now:Date.now(),seen:l.seen(t.slot),subscribed:l.subscribed()||s.subscribed?.()===!0,basketHasCode:t.exclude_code_applied===!0&&_e(),personalisation:n.personalisation(),preview:!!n.preview,audiences:Ae()}),B=t=>{S.get(t.slot)?.(),S.delete(t.slot)};function P(t,r,u=!1,h=X(t),m=Date.now()+at){if(c.has(t.slot))return Promise.resolve({state:"shown",code:"shown",asked:h});let w=F.get(t.slot);return w?(w.asked||(w.asked=h),w.done):(w={asked:h},w.done=gt(t,r,u,h,m).catch(E=>c.has(t.slot)?{state:"shown",code:"shown"}:(console.warn("[hp] onsite form failed:",E?.message??E),C(t,"not shown","error",[`failed: ${E?.message??E}`]))).then(E=>(F.delete(t.slot),{...E,asked:w.asked||w.opened})),F.set(t.slot,w),w.done)}async function gt(t,r,u,h,m){if(i())return _(t,"not shown","suppressed",[`suppressed: ${[...window[it]].join(", ")}`]);let w=me(t,{...Ee(t),...u?{seen:rt.seen()}:{},asked:h});if(w.length){if(Se(t,w,!u),u&&w.every(f=>te.includes(f))&&j.add(t),w.length===1&&w[0]===we&&!h&&!u&&!R){let f=t.trigger.type==="inline"||t.format==="inline";B(t);let pe=setTimeout(()=>f?P(t,"inline"):ie(t),Ze(t,Date.now()));S.set(t.slot,()=>clearTimeout(pe))}return _(t,"not eligible","not-eligible",w)}j.delete(t);let E=Be(t.format)&&!u,D=E&&!h&&ft();if(D)return _(t,"not shown","overlay-gap",[D]);if(E&&!n.preview&&n.consentAnswered?.()===!1)return z.set(t,h),_(t,"not shown","awaiting-consent",["waiting for the consent banner"]);let O=he(t.format),xe=O&&pt(h);if(xe)return _(t,"not shown","another-showing",[`${xe} is showing`]);if(O&&M&&!h)return _(t,"not shown","allowance-spent",[`${M} already showed on this page view`]);let q=null;if(!O){try{q=document.querySelector(t.trigger.selector??"")}catch{q=null}if(!q)return _(t,"not shown","no-element",["no element matches its selector"])}O&&L.set(t.slot,t),B(t),_(t,"asking for a decision","deciding",[r]);let bt=je().catch(f=>(console.warn("[hp] onsite renderer not loaded:",f?.message??f),null)),J=t.visit_context===!0?Q().catch(()=>null):null,re=Ae()??[],Ie={claims:[...new Set([...t.audiences,...re])].filter(f=>re.includes(f)).slice(0,100)},_t=t.audiences.length>0&&!n.preview&&n.personalisation()?await k(ye().then(f=>f?f.visitAudiences(d,n.sessionSignals,t.audiences,re):Ie),Math.min(m,Date.now()+Bt),Ie):null,W=Date.now()<m?await k(d.decide(t.slot,l.pin(t.slot),{visitAudiences:_t,visitCampaign:t.arrived_from.length?g():null,visitContext:t.visit_context===!0?n.visitContext?.()??null:t.products?{product_id:n.pageProduct?.()}:null,pageFacts:t.page_facts.length?Ue(t.page_facts,fe()):null,timeoutMs:m-Date.now()}),m,lt):lt,ae=W.status===200?W.body?.decisions:null,A=Array.isArray(ae)?ae.find(f=>f?.slot===t.slot):null;A?.experiment&&A.arm&&A.split&&l.pin(t.slot,[A.experiment,A.arm,A.split]);let N=A&&A.holdout!==!0?qe(A.payload):null,Me=N?.steps[0].blocks??[],Ce=A?.offer?.code??(n.preview?"PREVIEW":l.code()),St=n.basketValue?.()??null,le=Me.some(f=>f?.t==="code")&&!Ce&&"no code to remind of"||Me.some(f=>f?.t==="progress")&&!(St>0)&&"the basket is empty";if(le){let f=le==="the basket is empty";return f&&U.add(t),C(t,"not shown",f?"empty-basket":"no-code",[le])}if(U.delete(t),$.delete(t),!N){let f=A?.holdout===!0;return f&&n.analytics()&&e.recordExposure(W.body),O&&f&&(M??(M=t.slot)),f&&!h&&a("held",{slot:t.slot,arm:A.arm??null,format:t.format}),f||Array.isArray(ae)?C(t,f?"held out":"no decision",f?"held-out":"no-creative",["no creative for this visitor"]):C(t,"no decision","decision-failed",[`decisions answered ${W.status}`])}let ce=await k(bt,m,null);if(!ce)return C(t,"not shown","renderer-failed",["the renderer did not load"]);let De=ut(N,f=>f?.t==="products");De&&(J??(J=Q().catch(()=>null)));let At=k(ce.warm?.(t,N,N.steps[0].id,be),Math.min(m,Date.now()+Gt)),[Et,ue]=await Promise.all([!De||k(J,m,null),ut(N,f=>(f?.t==="heading"||f?.t==="text")&&ee(f.text))&&k(nt().catch(()=>null),m,null)]);if(!Et)return C(t,"not shown","products-failed",["its products did not load"]);if(ue===null)return C(t,"not shown","values-failed",["its values did not load"]);if(await At,i())return C(t,"not shown","suppressed",["suppressed"]);let de=(f,pe={})=>a(f,{slot:t.slot,arm:A.arm??null,format:N.format??t.format,...pe}),vt=ce.mountForm({form:t,creative:N,decision:A,access:n,client:e,api:d,counters:l,loadWheel:st,loadAnswers:Oe,loadProducts:()=>J??Q(),container:q,warmed:be,coupon:Ce,basket:()=>n.basketValue?.()??null,fill:ue?ue.fillFor(t,n,s.values):void 0,emit:de,onClose(f){c.delete(t.slot),L.delete(t.slot),_(t,"closed","closed",[f]),de("closed",{reason:f})}});c.set(t.slot,vt),u||l.shown(t.slot),E&&l.covered(),O&&(M??(M=t.slot)),n.analytics()&&e.recordExposure(W.body);let Tt=_(t,"shown","shown",[r]);return de("shown"),Tt}function G(t,r,u=X(t)){if(!he(t.format))return P(t,r,!1,u);if(!Y){let h={forms:[],taken:new Set,deadline:Date.now()+ct+at};Y=h,se.add(h),setTimeout(()=>{Y=null,wt(h)},ct)}Y.forms.push([t,r,u])}async function wt(t){let r=t.forms.sort(([h],[m])=>Qe(h,m)),u=null;for(let[h,[m,w,E]]of r.entries()){if(t.taken.has(m))continue;let D=await P(m,w,!1,E,t.deadline);if(!u&&zt.has(D.code)&&!D.asked&&(u=[m,D.code]),D.state==="shown"||D.state==="held out"){for(let[O]of r.slice(h+1))_(O,"not shown","lower-priority",[`${m.slot} has a higher priority`]);u=null;break}}se.delete(t),u&&ht(...u)}function ve(t){if(t.format==="teaser"&&l.tabOut(t.slot))return P(t,"tab kept from an earlier page",!0);let r=me(t,{...Ee(t),later:!0});if(r.length)return Se(t,r,!1),_(t,"not eligible","not-eligible",r);let u=t.trigger.type;u==="manual"?_(t,"waiting for hp.onsite.open","waiting-for-open"):u==="inline"||t.format==="inline"?P(t,"inline"):ie(t)}for(let t of I)ve(t);function ie(t){B(t),S.set(t.slot,tt(t.trigger,r=>{B(t),G(t,r)},{device:p})),_(t,"armed","armed",[`${t.trigger.type} on ${p}`])}let mt=n.onConsentAnswered?.(()=>{let t=[...z];z.clear();for(let[r,u]of t)c.has(r.slot)||(u?G(r,"manual",u):ie(r))}),Te=()=>{let t=[...j];j.clear();for(let r of t)Promise.resolve(F.get(r.slot)?.done).then(()=>R||c.has(r.slot)||P(r,"tab kept from an earlier page",!0))};(window[ne]??(window[ne]=new Set)).add(Te);let yt=n.onBasket?.(()=>{if($.size&&!_e()){for(let[r,u]of $)setTimeout(()=>R||c.has(r.slot)||(u?G(r,"the basket changed"):ve(r)));$.clear()}if(!((n.basketValue?.()??0)>0))return;let t=[...U];U.clear();for(let r of t)c.has(r.slot)||G(r,"the basket changed")}),H=Object.freeze({open(t){let r=I.find(w=>w.slot===t),u=r??I.find(w=>w.aliases.includes(t));if(!u)return Promise.resolve(!1);if(c.has(u.slot))return Promise.resolve(!0);for(let w of se)w.taken.add(u);let h=P(u,"manual",!1,X(u)||!r),m=F.get(u.slot);return m&&(m.opened=!0),h.then(({state:w})=>w==="shown")},suppress(){for(let[t,r]of c){r.destroy(),c.delete(t),L.delete(t);let u=I.find(h=>h.slot===t);u&&_(u,"closed","suppressed",["suppressed"])}},debug:()=>[...b.values()].map(t=>({...t,reasons:[...t.reasons]})),stop(){R=!0;for(let t of S.values())t();S.clear(),yt?.(),mt?.(),U.clear(),$.clear(),z.clear(),j.clear(),window[ne]?.delete(Te),window[V]===H&&delete window[V]}});window[V]=H;for(let{slot:t,resolve:r}of window[Vt]?.splice(0)??[])r(H.open(t));return y&&console.table?.(H.debug()),H}window[Symbol.for("@thg-agentic/hyper-personalisation-web.onsite.module")]={startOnsite:dt};})();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@thg-agentic/hyper-personalisation-web",
3
- "version": "3.32.0",
3
+ "version": "3.35.0",
4
4
  "description": "Browser SDK for the THG Hyper-Personalisation event specification: event tracking from a write key and remote settings, strict CMP-agnostic consent, a GA4 dataLayer bridge and in-session audience evaluation. Dependency-free ESM on the Segment wire protocol, a CDN script (dist/hp.min.js), and an optional @segment/analytics-next plugin path.",
5
5
  "type": "module",
6
6
  "main": "./src/index.js",
package/src/datalayer.js CHANGED
@@ -180,7 +180,10 @@ function defaultMappings(steps) {
180
180
  cart_id: text(p.ecommerce.cart_id),
181
181
  value: p.value,
182
182
  currency: p.currency,
183
- coupon: text(p.ecommerce.coupon),
183
+ // Only when the push names one: a missing coupon says nothing, and null is "no code".
184
+ ...(p.ecommerce.coupon !== undefined
185
+ ? { coupon: text(p.ecommerce.coupon) }
186
+ : {}),
184
187
  // A view_cart without items says nothing about the basket; [] would claim it was empty.
185
188
  ...(p.itemsListed ? { products: p.products } : {}),
186
189
  },
@@ -189,7 +192,9 @@ function defaultMappings(steps) {
189
192
  needProducts('Checkout Started', {
190
193
  value: p.value,
191
194
  currency: p.currency,
192
- coupon: text(p.ecommerce.coupon),
195
+ ...(p.ecommerce.coupon !== undefined
196
+ ? { coupon: text(p.ecommerce.coupon) }
197
+ : {}),
193
198
  products: p.products,
194
199
  }),
195
200
  add_shipping_info: (p) => ({
package/src/index.js CHANGED
@@ -70,6 +70,7 @@ import {
70
70
  import { guardMethods, InvalidEventError } from './guard.js';
71
71
  import { emailSha256, sha256Hex } from './hash.js';
72
72
  import { IDENTITY_OPTION } from './identity-option.js';
73
+ import { pageSaid } from './onsite-facade.js';
73
74
  import { applyPreview } from './preview.js';
74
75
  import {
75
76
  forgetVisit,
@@ -77,7 +78,12 @@ import {
77
78
  recommendationContextFrom,
78
79
  } from './recommendation-context.js';
79
80
  import { sampledIn } from './sampling.js';
80
- import { basketItemsOf, recordSessionEvent } from './session/record.js';
81
+ import {
82
+ BASKET_CODE_EVENTS,
83
+ basketCodesAfter,
84
+ basketItemsOf,
85
+ recordSessionEvent,
86
+ } from './session/record.js';
81
87
  import {
82
88
  clearSessionSignals,
83
89
  getSessionSignals,
@@ -545,6 +551,8 @@ export function createAnalytics(options) {
545
551
  /** How many items it holds, when its lines say, and its currency, when it names one. */
546
552
  let pageItems = null;
547
553
  let pageCurrency = null;
554
+ /** The discount codes in the basket as this page reported them (`basketCodesAfter`), or null. */
555
+ let pageCodes = null;
548
556
  /** The product this page is about: the last Product Viewed it sent, for an onsite form's products. */
549
557
  let pageProduct = null;
550
558
  const basketListeners = new Set();
@@ -556,8 +564,31 @@ export function createAnalytics(options) {
556
564
  if (partial.type === 'track' && partial.event === 'Product Viewed') {
557
565
  const id = partial.properties?.products?.[0]?.product_id;
558
566
  pageProduct = typeof id === 'string' && id ? id : pageProduct;
567
+ pageSaid();
568
+ }
569
+ if (partial.type !== 'track') return;
570
+ // From the codes as they stand, the visit's kept ones until this page reports a basket, so a
571
+ // code taken out here of a basket from an earlier page is taken out of that one.
572
+ let codesChanged = false;
573
+ if (BASKET_CODE_EVENTS.has(partial.event))
574
+ try {
575
+ const before = basketCodes();
576
+ const codes = basketCodesAfter(
577
+ before,
578
+ partial.event,
579
+ partial.properties,
580
+ );
581
+ codesChanged = codes !== before;
582
+ // Kept for the page even when unchanged, so it outlasts a withdrawn consent.
583
+ pageCodes = codes;
584
+ } catch (err) {
585
+ // The event goes whatever its codes say.
586
+ if (cfg.debug) console.warn('[hp] basket codes not read', err);
587
+ }
588
+ if (partial.event !== 'Cart Updated') {
589
+ if (codesChanged) tellBasketListeners();
590
+ return;
559
591
  }
560
- if (partial.type !== 'track' || partial.event !== 'Cart Updated') return;
561
592
  const value = partial.properties?.value;
562
593
  const lines = partial.properties?.products;
563
594
  pageItems = Array.isArray(lines) ? basketItemsOf(lines) : null;
@@ -566,6 +597,19 @@ export function createAnalytics(options) {
566
597
  typeof value === 'number' && Number.isFinite(value) && value >= 0
567
598
  ? value
568
599
  : null;
600
+ tellBasketListeners();
601
+ }
602
+
603
+ /** The basket's codes: this page's, else the visit's kept ones, else null (none reported). */
604
+ function basketCodes() {
605
+ if (pageCodes !== null) return pageCodes;
606
+ // Kept only under personalisation consent, in the visit's own scope (a new page has none yet).
607
+ if (!personalisationGranted()) return null;
608
+ scopeVisit();
609
+ return getSessionSignals().basketCodes;
610
+ }
611
+
612
+ function tellBasketListeners() {
569
613
  for (const listener of basketListeners)
570
614
  try {
571
615
  listener();
@@ -603,7 +647,8 @@ export function createAnalytics(options) {
603
647
  context: buildContext(cfg, contextOverrides(ctxOverrides)),
604
648
  };
605
649
 
606
- if (event.properties) event.properties = pruneProperties(event.properties);
650
+ if (event.properties)
651
+ event.properties = pruneProperties(event.properties, event.event);
607
652
  if (typeof event.properties?.href === 'string')
608
653
  event.properties.href = scrubHref(event.properties.href, cfg);
609
654
 
@@ -1261,6 +1306,11 @@ export function createAnalytics(options) {
1261
1306
  const value = getSessionSignals().basketValue;
1262
1307
  return pageBasket ?? (Number.isFinite(value) ? value : null);
1263
1308
  },
1309
+ /**
1310
+ * The discount codes in the basket: the ones this page reported, else the ones this visit
1311
+ * kept (under personalisation consent), else null when no cart event has named them.
1312
+ */
1313
+ basketCodes,
1264
1314
  /**
1265
1315
  * What a form's text may show (ADR 0064, shopper values): the basket's value and items,
1266
1316
  * as for a basket bar, in the currency of the basket the value came from (else the
@@ -1302,6 +1352,8 @@ export function createAnalytics(options) {
1302
1352
  answers: readAnswers(cfg.propertyId),
1303
1353
  };
1304
1354
  },
1355
+ /** The product this page is about (its last Product Viewed), for a form limited to products. */
1356
+ pageProduct: () => pageProduct,
1305
1357
  /**
1306
1358
  * The visit's context for a form that shows products (`visit_context`): the page's type and
1307
1359
  * product, and only under personalisation consent the basket's product ids and the visit's