PageSourceSearch

https://www.theworkstation.co.uk/hubfs/hub_generated/template_asse…/1790689372592/template_index.min.js

js theworkstation.co.uk collected 2026-09-29 22:47:50 UTC 122,643 bytes, 2 lines download raw bytes

1!function(){"use strict";function ot(e,n){let t;return function(){const o=this,a=arguments;clearTimeout(t),t=setTimeout(()=>e.apply(o,a),n)}}function Nt(e,{rootMargin:n="40% 0px"}={}){const t=()=>{e.querySelectorAll('img[loading="lazy"]').forEach(a=>{a.loading="eager"})};if(!("IntersectionObserver"in window))return void t();const o=new IntersectionObserver(a=>{a.some(i=>i.isIntersecting)&&(o.disconnect(),t())},{rootMargin:n});o.observe(e)}function Pt(e,n,t){e.setAttribute("aria-expanded","false"),t.classList.remove("AccordionItem--active"),n.style.maxHeight=null,n.style.paddingBottom=null}function An(e,n,t){"true"===e.getAttribute("aria-expanded")?Pt(e,n,t):function(e,n,t){const o=t.closest(".Accordion__stack");o&&o.querySelectorAll(":scope > .AccordionItem--active").forEach(a=>{if(a===t)return;const i=a.querySelector(".AccordionItem__question"),s=a.querySelector(".AccordionItem__answer");i&&s&&Pt(i,s,a)}),e.setAttribute("aria-expanded","true"),t.classList.add("AccordionItem--active"),n.style.maxHeight=n.scrollHeight+24+"px",n.style.paddingBottom="24px"}(e,n,t)}function Vn(e){const n=e.querySelector(".AccordionItem__question"),t=e.querySelector(".AccordionItem__answer");if(!n||!t)return;n.addEventListener("click",()=>An(n,t,e));const o=ot(()=>function(e,n){"true"===e.getAttribute("aria-expanded")&&(n.style.maxHeight=n.scrollHeight+24+"px")}(n,t),200);window.addEventListener("resize",o)}function st(e){return"number"==typeof e}function rt(e){return"string"==typeof e}function Ye(e){return"boolean"==typeof e}function Mt(e){return"[object Object]"===Object.prototype.toString.call(e)}function te(e){return Math.abs(e)}function it(e){return Math.sign(e)}function xe(e,n){return te(e-n)}function Ve(e){return qe(e).map(Number)}function de(e){return e[Te(e)]}function Te(e){return Math.max(0,e.length-1)}function lt(e,n){return n===Te(e)}function Bt(e,n=0){return Array.from(Array(e),(t,o)=>n+o)}function qe(e){return Object.keys(e)}function Rt(e,n){return[e,n].reduce((t,o)=>(qe(o).forEach(a=>{const i=t[a],s=o[a],l=Mt(i)&&Mt(s);t[a]=l?Rt(i,s):s}),t),{})}function ct(e,n){return typeof n.MouseEvent<"u"&&e instanceof n.MouseEvent}function Oe(){let e=[];const o={add:function(a,i,s,l={passive:!0}){let c;if("addEventListener"in a)a.addEventListener(i,s,l),c=()=>a.removeEventListener(i,s,l);else{const r=a;r.addListener(s),c=()=>r.removeListener(s)}return e.push(c),o},clear:function(){e=e.filter(a=>a())}};return o}function Nn(e,n,t,o){const a=Oe(),i=1e3/60;let s=null,l=0,c=0;function m(g){if(!c)return;s||(s=g,t(),t());const p=g-s;for(s=g,l+=p;l>=i;)t(),l-=i;o(l/i),c&&(c=n.requestAnimationFrame(m))}function E(){n.cancelAnimationFrame(c),s=null,l=0,c=0}return{init:function(){a.add(e,"visibilitychange",()=>{e.hidden&&(s=null,l=0)})},destroy:function(){E(),a.clear()},start:function(){c||(c=n.requestAnimationFrame(m))},stop:E,update:t,render:o}}function ve(e=0,n=0){const t=te(e-n);function o(r){return r<e}function a(r){return r>n}function i(r){return o(r)||a(r)}return{length:t,max:n,min:e,constrain:function(r){return i(r)?o(r)?e:n:r},reachedAny:i,reachedMax:a,reachedMin:o,removeOffset:function(r){return t?r-t*Math.ceil((r-n)/t):r}}}function Ft(e,n,t){const{constrain:o}=ve(0,e),a=e+1;let i=s(n);function s(h){return t?te((a+h)%a):o(h)}function l(){return i}function u(){return Ft(e,l(),t)}const m={get:l,set:function(h){return i=s(h),m},add:function(h){return u().set(l()+h)},clone:u};return m}function Mn(e,n,t,o,a,i,s,l,c,r,u,m,h,E,y,f,g,p,S){const{cross:b,direction:v}=e,k=["INPUT","SELECT","TEXTAREA"],P={passive:!1},O=Oe(),D=Oe(),T=ve(50,225).constrain(E.measure(20)),B={mouse:300,touch:400},F={mouse:500,touch:600},Q=y?43:25;let Z=!1,A=0,I=0,U=!1,W=!1,G=!1,K=!1;function $(q){if(!ct(q,o)&&q.touches.length>=2)return N(q);const ne=i.readPoint(q),ie=i.readPoint(q,b),fe=xe(ne,A),me=xe(ie,I);if(!(W||K||q.cancelable&&(W=fe>me,W)))return N(q);const we=i.pointerMove(q);fe>f&&(G=!0),r.useFriction(.3).useDuration(.75),l.start(),a.add(v(we)),q.preventDefault()}function N(q){const ne=u.byDistance(0,!1).index!==m.get(),ie=i.pointerUp(q)*(y?F:B)[K?"mouse":"touch"],fe=function(q,J){const ne=m.add(-1*it(q)),ie=u.byDistance(q,!y).distance;return y||te(q)<T?ie:g&&J?.5*ie:u.byIndex(ne.get(),0).distance}(v(ie),ne),me=function(e,n){if(0===e||0===n||te(e)<=te(n))return 0;const t=xe(te(e),te(n));return te(t/e)}(ie,fe),we=Q-10*me,be=p+me/50;W=!1,U=!1,D.clear(),r.useDuration(we).useFriction(be),c.distance(fe,!y),K=!1,h.emit("pointerUp")}function j(q){G&&(q.stopPropagation(),q.preventDefault(),G=!1)}return{init:function(q){if(!S)return;function J(ie){(Ye(S)||S(q,ie))&&function(q){const J=ct(q,o);K=J,G=y&&J&&!q.buttons&&Z,Z=xe(a.get(),s.get())>=2,(!J||0===q.button)&&(function(q){const J=q.nodeName||"";return k.includes(J)}(q.target)||(U=!0,i.pointerDown(q),r.useFriction(0).useDuration(0),a.set(s),function(){const q=K?t:n;D.add(q,"touchmove",$,P).add(q,"touchend",N).add(q,"mousemove",$,P).add(q,"mouseup",N)}(),A=i.readPoint(q),I=i.readPoint(q,b),h.emit("pointerDown")))}(ie)}const ne=n;O.add(ne,"dragstart",ie=>ie.preventDefault(),P).add(ne,"touchmove",()=>{},P).add(ne,"touchend",()=>{}).add(ne,"touchstart",J).add(ne,"mousedown",J).add(ne,"touchcancel",N).add(ne,"contextmenu",N).add(ne,"click",j,!0)},destroy:function(){O.clear(),D.clear()},pointerDown:function(){return U}}}function Bn(e,n){let o,a;function i(m){return m.timeStamp}function s(m,h){const y="client"+("x"===(h||e.scroll)?"X":"Y");return(ct(m,n)?m:m.touches[0])[y]}return{pointerDown:function(m){return o=m,a=m,s(m)},pointerMove:function(m){const h=s(m)-s(a),E=i(m)-i(o)>170;return a=m,E&&(o=m),h},pointerUp:function(m){if(!o||!a)return 0;const h=s(a)-s(o),E=i(m)-i(o),y=i(m)-i(a)>170,f=h/E;return E&&!y&&te(f)>.1?f:0},readPoint:s}}function Dn(e,n,t,o,a,i,s){const l=[e].concat(o);let c,r,u=[],m=!1;function h(g){return a.measureSize(s.measure(g))}return{init:function(g){i&&(r=h(e),u=o.map(h),c=new ResizeObserver(S=>{(Ye(i)||i(g,S))&&function(S){for(const b of S){if(m)return;const v=b.target===e,k=o.indexOf(b.target),P=v?r:u[k];if(te(h(v?e:o[k])-P)>=.5){g.reInit(),n.emit("resize");break}}}(S)}),t.requestAnimationFrame(()=>{l.forEach(S=>c.observe(S))}))},destroy:function(){m=!0,c&&c.disconnect()}}}function Hn(e,n,t,o,a){const i=a.measure(10),s=a.measure(50),l=ve(.1,.99);let c=!1;function r(){return!(c||!e.reachedAny(t.get())||!e.reachedAny(n.get()))}return{shouldConstrain:r,constrain:function(E){if(!r())return;const y=e.reachedMin(n.get())?"min":"max",f=te(e[y]-n.get()),g=t.get()-n.get(),p=l.constrain(f/s);t.subtract(g*p),!E&&te(g)<i&&(t.set(e.constrain(t.get())),o.useDuration(25).useBaseFriction())},toggleActive:function(E){c=!E}}}function zn(e,n,t,o){const i=n.min+.1,s=n.max+.1,{reachedMin:l,reachedMax:c}=ve(i,s);return{loop:function(h){if(!function(h){return 1===h?c(t.get()):-1===h&&l(t.get())}(h))return;const E=e*(-1*h);o.forEach(y=>y.add(E))}}}function Qn(e,n,t,o,a){const{reachedAny:i,removeOffset:s,constrain:l}=o;function c(y){return y.concat().sort((f,g)=>te(f)-te(g))[0]}function u(y,f){const g=[y,y+t,y-t];if(!e)return y;if(!f)return c(g);const p=g.filter(S=>it(S)===f);return p.length?c(p):de(g)-t}return{byDistance:function(y,f){const g=a.get()+y,{index:p,distance:S}=function(y){const f=e?s(y):l(y),g=n.map((S,b)=>({diff:u(S-f,0),index:b})).sort((S,b)=>te(S.diff)-te(b.diff)),{index:p}=g[0];
1return{index:p,distance:f}}(g),b=!e&&i(g);return!f||b?{index:p,distance:y}:{index:p,distance:y+u(n[p]-S,0)}},byIndex:function(y,f){return{index:y,distance:u(n[y]-a.get(),f)}},shortcut:u}}function Xn(e,n,t,o,a,i,s,l){const c={passive:!0,capture:!0};let r=0;function m(E){"Tab"===E.code&&(r=(new Date).getTime())}return{init:function(E){l&&(i.add(document,"keydown",m,!1),n.forEach((f,g)=>{i.add(f,"focus",p=>{(Ye(l)||l(E,p))&&function(f){if((new Date).getTime()-r>10)return;s.emit("slideFocusStart"),e.scrollLeft=0;const S=t.findIndex(b=>b.includes(f));st(S)&&(a.useDuration(0),o.index(S,0),s.emit("slideFocus"))}(g)},c)}))}}}function Ie(e){let n=e;function s(c){return st(c)?c:c.get()}return{get:function(){return n},set:function(c){n=s(c)},add:function(c){n+=s(c)},subtract:function(c){n-=s(c)}}}function Dt(e,n){const t="x"===e.scroll?function(h){return`translate3d(${h}px,0px,0px)`}:function(h){return`translate3d(0px,${h}px,0px)`},o=n.style;let a=null,i=!1;return{clear:function(){i||(o.transform="",n.getAttribute("style")||n.removeAttribute("style"))},to:function(h){if(i)return;const E=function(e){return Math.round(100*e)/100}(e.direction(h));E!==a&&(o.transform=t(E),a=E)},toggleActive:function(h){i=!h}}}function Zn(e,n,t,o,a,i,s,l,c){const u=Ve(a),m=Ve(a).reverse(),h=function(){const O=s[0];return g(y(m,O),t,!1)}().concat(function(){const O=n-s[0]-1;return g(y(u,O),-t,!0)}());function E(O,D){return O.reduce((T,B)=>T-a[B],D)}function y(O,D){return O.reduce((T,B)=>E(T,D)>0?T.concat([B]):T,[])}function g(O,D,T){const B=function(O){return i.map((D,T)=>({start:D-o[T]+.5+O,end:D+n-.5+O}))}(D);return O.map(F=>{const Q=T?0:-t,Z=T?t:0,A=T?"end":"start",I=B[F][A];return{index:F,loopPoint:I,slideLocation:Ie(-1),translate:Dt(e,c[F]),target:()=>l.get()>I?Q:Z}})}return{canLoop:function(){return h.every(({index:O})=>E(u.filter(T=>T!==O),n)<=.1)},clear:function(){h.forEach(O=>O.translate.clear())},loop:function(){h.forEach(O=>{const{target:D,translate:T,slideLocation:B}=O,F=D();F!==B.get()&&(T.to(F),B.set(F))})},loopPoints:h}}function eo(e,n,t){let o,a=!1;return{init:function(c){t&&(o=new MutationObserver(u=>{a||(Ye(t)||t(c,u))&&function(u){for(const m of u)if("childList"===m.type){c.reInit(),n.emit("slidesChanged");break}}(u)}),o.observe(e,{childList:!0}))},destroy:function(){o&&o.disconnect(),a=!0}}}function to(e,n,t,o){const a={};let l,i=null,s=null,c=!1;return{init:function(){l=new IntersectionObserver(y=>{c||(y.forEach(f=>{const g=n.indexOf(f.target);a[g]=f}),i=null,s=null,t.emit("slidesInView"))},{root:e.parentElement,threshold:o}),n.forEach(y=>l.observe(y))},destroy:function(){l&&l.disconnect(),c=!0},get:function(y=!0){if(y&&i)return i;if(!y&&s)return s;const f=function(y){return qe(a).reduce((f,g)=>{const p=parseInt(g),{isIntersecting:S}=a[p];return(y&&S||!y&&!S)&&f.push(p),f},[])}(y);return y&&(i=f),y||(s=f),f}}}function oo(e,n,t,o,a,i,s,l,c){const{startEdge:r,endEdge:u,direction:m}=e,h=st(t);return{groupSlides:function(p){return h?function(p,S){return Ve(p).filter(b=>b%S===0).map(b=>p.slice(b,b+S))}(p,t):function(p){return p.length?Ve(p).reduce((S,b,v)=>{const k=de(S)||0,P=0===k,O=b===Te(p),D=a[r]-i[k][r],T=a[r]-i[b][u],B=!o&&P?m(s):0,Q=te(T-(!o&&O?m(l):0)-(D+B));return v&&Q>n+c&&S.push(b),O&&S.push(p.length),S},[]).map((S,b,v)=>{const k=Math.max(v[b-1]||0);return p.slice(k,S)}):[]}(p)}}}function ao(e,n,t,o,a,i,s){const{align:l,axis:c,direction:r,startIndex:u,loop:m,duration:h,dragFree:E,dragThreshold:y,inViewThreshold:f,slidesToScroll:g,skipSnaps:p,containScroll:S,watchResize:b,watchSlides:v,watchDrag:k,watchFocus:P}=i,D={measure:function(t){const{offsetTop:o,offsetLeft:a,offsetWidth:i,offsetHeight:s}=t;return{top:o,right:a+i,bottom:o+s,left:a,width:i,height:s}}},T=D.measure(n),B=t.map(D.measure),F=function(e,n){const t="rtl"===n,o="y"===e,s=!o&&t?-1:1;return{scroll:o?"y":"x",cross:o?"x":"y",startEdge:o?"top":t?"right":"left",endEdge:o?"bottom":t?"left":"right",measureSize:function(y){const{height:f,width:g}=y;return o?f:g},direction:function(y){return y*s}}}(c,r),Q=F.measureSize(T),Z=function(e){return{measure:function(o){return e*(o/100)}}}(Q),A=function(e,n){const t={start:function(){return 0},center:function(c){return i(c)/2},end:i};function i(c){return n-c}
vendor: 7,327 bytes, line 1
1return{measure:function(c,r){return rt(e)?t[e](c):e(n,c,r)}}}(l,Q),I=!m&&!!S,U=m||!!S,{slideSizes:W,slideSizesWithGaps:G,startGap:K,endGap:_}=function(e,n,t,o,a,i){const{measureSize:s,startEdge:l,endEdge:c}=e,r=t[0]&&a,u=function(){if(!r)return 0;const S=t[0];return te(n[l]-S[l])}(),m=function(){if(!r)return 0;const S=i.getComputedStyle(de(o));return parseFloat(S.getPropertyValue(`margin-${c}`))}(),h=t.map(s),E=t.map((S,b,v)=>{const k=!b,P=lt(v,b);return k?h[b]+u:P?h[b]+m:v[b+1][l]-S[l]}).map(te);return{slideSizes:h,slideSizesWithGaps:E,startGap:u,endGap:m}}(F,T,B,t,U,a),L=oo(F,Q,g,m,T,B,K,_,2),{snaps:M,snapsAligned:H}=function(e,n,t,o,a){const{startEdge:i,endEdge:s}=e,{groupSlides:l}=a,c=l(o).map(f=>de(f)[s]-f[0][i]).map(te).map(n.measure),r=o.map(f=>t[i]-f[i]).map(f=>-te(f)),u=l(r).map(f=>f[0]).map((f,g)=>f+c[g]);return{snaps:r,snapsAligned:u}}(F,A,T,B,L),z=-de(M)+de(G),{snapsContained:d,scrollContainLimit:w}=function(e,n,t,o,a){const i=ve(-n+e,0),s=t.map((y,f)=>{const{min:g,max:p}=i,S=i.constrain(y),b=!f,v=lt(t,f);return b?p:v||r(g,S)?g:r(p,S)?p:S}).map(y=>parseFloat(y.toFixed(3))),l=function(){const y=s[0],f=de(s);return ve(s.lastIndexOf(y),s.indexOf(f)+1)}();function r(y,f){return xe(y,f)<=1}return{snapsContained:function(){if(n<=e+a)return[i.max];if("keepSnaps"===o)return s;const{min:y,max:f}=l;return s.slice(y,f)}(),scrollContainLimit:l}}(Q,z,H,S,2),$=I?d:H,{limit:N}=function(e,n,t){const o=n[0];return{limit:ve(t?o-e:de(n),o)}}(z,$,m),j=Ft(Te($),u,m),Y=j.clone(),V=Ve(t),ne=Nn(o,a,()=>(({dragHandler:Ae,scrollBody:Ot,scrollBounds:It,options:{loop:nt}})=>{nt||It.constrain(Ae.pointerDown()),Ot.seek()})(qt),Ae=>(({scrollBody:Ae,translate:Ot,location:It,offsetLocation:nt,previousLocation:Ns,scrollLooper:Ps,slideLooper:Ms,dragHandler:Bs,animation:Rs,eventHandler:vn,scrollBounds:Fs,options:{loop:Sn}},wn)=>{const kn=Ae.settled(),Ds=!Fs.shouldConstrain(),$n=Sn?kn:kn&&Ds,En=$n&&!Bs.pointerDown();En&&Rs.stop();const Us=It.get()*wn+Ns.get()*(1-wn);nt.set(Us),Sn&&(Ps.loop(Ae.direction()),Ms.loop()),Ot.to(nt.get()),En&&vn.emit("settle"),$n||vn.emit("scroll")})(qt,Ae)),fe=$[j.get()],me=Ie(fe),we=Ie(fe),be=Ie(fe),ke=Ie(fe),je=function(e,n,t,o,a,i){let s=0,l=0,c=a,r=i,u=e.get(),m=0;function b(P){return c=P,k}function v(P){return r=P,k}const k={direction:function(){return l},duration:function(){return c},velocity:function(){return s},seek:function(){const P=o.get()-e.get();let D=0;return c?(t.set(e),s+=P/c,s*=r,u+=s,e.add(s),D=u-m):(s=0,t.set(o),e.set(o),D=P),l=it(D),m=u,k},settled:function(){return te(o.get()-n.get())<.001},useBaseFriction:function(){return v(i)},useBaseDuration:function(){return b(a)},useFriction:v,useDuration:b};return k}(me,be,we,ke,h,.68),Vt=Qn(m,$,z,N,ke),Tt=function(e,n,t,o,a,i,s){function l(m){const h=m.distance,E=m.index!==n.get();i.add(h),h&&(o.duration()?e.start():(e.update(),e.render(1),e.update())),E&&(t.set(n.get()),n.set(m.index),s.emit("select"))}return{distance:function(m,h){l(a.byDistance(m,h))},index:function(m,h){const E=n.clone().set(m);l(a.byIndex(E.get(),h))}}}(ne,j,Y,je,Vt,ke,s),gn=function(e){const{max:n,length:t}=e;return{get:function(i){return t?(i-n)/-t:0}}}(N),_n=Oe(),Os=to(n,t,s,f),{slideRegistry:bn}=function(e,n,t,o,a,i){const{groupSlides:s}=a,{min:l,max:c}=o;return{slideRegistry:function(){const h=s(i),E=!e||"keepSnaps"===n;return 1===t.length?[i]:E?h:h.slice(l,c).map((y,f,g)=>{const p=!f,S=lt(g,f);return p?Bt(de(g[0])+1):S?Bt(Te(i)-de(g)[0]+1,de(g)[0]):y})}()}}(I,S,$,w,L,V),Is=Xn(e,t,bn,Tt,je,_n,s,P),qt={ownerDocument:o,ownerWindow:a,eventHandler:s,containerRect:T,slideRects:B,animation:ne,axis:F,dragHandler:Mn(F,e,o,a,ke,Bn(F,a),me,ne,Tt,je,Vt,j,s,Z,E,y,p,.68,k),eventStore:_n,percentOfView:Z,index:j,indexPrevious:Y,limit:N,location:me,offsetLocation:be,previousLocation:we,options:i,resizeHandler:Dn(n,s,a,t,F,b,D),scrollBody:je,scrollBounds:Hn(N,be,ke,je,Z),scrollLooper:zn(z,N,be,[me,be,we,ke]),scrollProgress:gn,scrollSnapList:$.map(gn.get),scrollSnaps:$,scrollTarget:Vt,scrollTo:Tt,slideLooper:Zn(F,Q,z,W,G,M,$,be,t),slideFocus:Is,slidesHandler:eo(n,s,v),slidesInView:Os,slideIndexes:V,slideRegistry:bn,slidesToScroll:L,target:ke,translate:Dt(F,n)};return qt}const ro={align:"center",axis:"x",container:null,slides:null,containScroll:"trimSnaps",direction:"ltr",slidesToScroll:1,inViewThreshold:0,breakpoints:{},dragFree:!1,dragThreshold:10,loop:!1,skipSnaps:!1,duration:25,startIndex:0,active:!0,watchDrag:!0,watchResize:!0,watchSlides:!0,watchFocus:!0};function io(e){function n(i,s){return Rt(i,s||{})}return{mergeOptions:n,optionsAtMedia:function(i){const s=i.breakpoints||{},l=qe(s).filter(c=>e.matchMedia(c).matches).map(c=>s[c]).reduce((c,r)=>n(c,r),{});return n(i,l)},optionsMediaQueries:function(i){return i.map(s=>qe(s.breakpoints||{})).reduce((s,l)=>s.concat(l),[]).map(e.matchMedia)}}}function he(e,n,t){const o=e.ownerDocument,a=o.defaultView,i=io(a),s=function(e){let n=[];return{init:function(i,s){return n=s.filter(({options:l})=>!1!==e.optionsAtMedia(l).active),n.forEach(l=>l.init(i,e)),s.reduce((l,c)=>Object.assign(l,{[c.name]:c}),{})},destroy:function(){n=n.filter(i=>i.destroy())}}}(i),l=Oe(),c=function(){let n,e={};function o(r){return e[r]||[]}const c={init:function(r){n=r},emit:function(r){return o(r).forEach(u=>u(n,r)),c},off:function(r,u){return e[r]=o(r).filter(m=>m!==u),c},on:function(r,u){return e[r]=o(r).concat([u]),c},clear:function(){e={}}};return c}(),{mergeOptions:r,optionsAtMedia:u,optionsMediaQueries:m}=i,{on:h,off:E,emit:y}=c,f=F;let p,k,P,O,g=!1,S=r(ro,he.globalOptions),b=r(S),v=[];function T(V){const q=ao(e,P,O,o,a,V,c);if(V.loop&&!q.slideLooper.canLoop()){return T(Object.assign({},V,{loop:!1}))}return q}function B(V,q){g||(S=r(S,V),b=u(S),v=q||v,function(){const{container:V,slides:q}=b;P=(rt(V)?e.querySelector(V):V)||e.children[0];const ne=rt(q)?P.querySelectorAll(q):q;O=[].slice.call(ne||P.children)}(),p=T(b),m([S,...v.map(({options:J})=>J)]).forEach(J=>l.add(J,"change",F)),b.active&&(p.translate.to(p.location.get()),p.animation.init(),p.slidesInView.init(),p.slideFocus.init(Y),p.eventHandler.init(Y),p.resizeHandler.init(Y),p.slidesHandler.init(Y),p.options.loop&&p.slideLooper.loop(),P.offsetParent&&O.length&&p.dragHandler.init(Y),k=s.init(Y,v)))}function F(V,q){const J=L();Q(),B(r({startIndex:J},V),q),c.emit("reInit")}function Q(){p.dragHandler.destroy(),p.eventStore.clear(),p.translate.clear(),p.slideLooper.clear(),p.resizeHandler.destroy(),p.slidesHandler.destroy(),p.slidesInView.destroy(),p.animation.destroy(),s.destroy(),l.clear()}function A(V,q,J){!b.active||g||(p.scrollBody.useBaseFriction().useDuration(!0===q?0:b.duration),p.scrollTo.index(V,J||0))}function L(){return p.index.get()}const Y={canScrollNext:function(){return p.index.add(1).get()!==L()},canScrollPrev:function(){return p.index.add(-1).get()!==L()},containerNode:function(){return P},internalEngine:function(){return p},destroy:function(){g||(g=!0,l.clear(),Q(),c.emit("destroy"),c.clear())},off:E,on:h,emit:y,plugins:function(){return k},previousScrollSnap:function(){return p.indexPrevious.get()},reInit:f,rootNode:function(){return e},scrollNext:function(V){A(p.index.add(1).get(),V,-1)},scrollPrev:function(V){A(p.index.add(-1).get(),V,1)},scrollProgress:function(){return p.scrollProgress.get(p.offsetLocation.get())},scrollSnapList:function(){return p.scrollSnapList}
1,scrollTo:A,selectedScrollSnap:L,slideNodes:function(){return O},slidesInView:function(){return p.slidesInView.get()},slidesNotInView:function(){return p.slidesInView.get(!1)}};return B(n,t),setTimeout(()=>c.emit("init"),0),Y}function Ut(e,n,t){return Math.min(Math.max(e,n),t)}function ut(e){return"number"==typeof e&&!isNaN(e)}function Ht(e={}){let a,s,m,h,i=[],l=0,c=0,r=0,u=!1;function f(){P(a.selectedScrollSnap(),1)}function g(){u=!1}function p(){u=!1,l=0,c=0}function S(){const A=a.internalEngine().scrollBody.duration();c=A?0:1,u=!0,A||f()}function P(A,I){a.scrollSnapList().forEach((W,G)=>{const K=Math.abs(I),_=i[G],L=G===A,H=Ut(L?_+K:_-K,0,1);i[G]=H;const z=L&&u,d=a.previousScrollSnap();z&&(i[d]=1-H),L&&function(A,I){const{index:U,dragHandler:W,scrollSnaps:G}=a.internalEngine(),K=W.pointerDown(),_=1/(G.length-1);let L=A,M=K?a.selectedScrollSnap():a.previousScrollSnap();if(K&&L===M){const d=-1*Math.sign(l);L=M,M=U.clone().set(M).add(d).get()}const H=M*_,z=(L-M)*_;r=H+z*I}(A,H),function(A){const I=a.internalEngine().slideRegistry[A],{scrollSnaps:U,containerRect:W}=a.internalEngine(),G=i[A];I.forEach(K=>{const _=a.slideNodes()[K].style,L=parseFloat(G.toFixed(2)),M=L>0,z=function(A){const{axis:I}=a.internalEngine();return`translate${I.scroll.toUpperCase()}(${I.direction(A)}px)`}(M?U[A]:W.width+2);M&&(_.transform=z),_.opacity=L.toString(),_.pointerEvents=G>.5?"auto":"none",M||(_.transform=z)})}(G)})}function T(){const{dragHandler:A,index:I,scrollBody:U}=a.internalEngine(),W=a.selectedScrollSnap();if(!A.pointerDown())return W;const G=Math.sign(U.velocity()),K=Math.sign(l),_=I.clone().set(W).add(-1*G).get();return G&&K?K===G?_:W:null}function B(A){const{dragHandler:I,scrollBody:U}=A.internalEngine(),W=I.pointerDown(),G=U.velocity(),K=U.duration(),_=T(),L=!ut(_);if(W){if(!G)return;l+=G,c=Math.abs(G/s),function(A){const{scrollSnaps:I,location:U,target:W}=a.internalEngine();!ut(A)||i[A]<.5||(U.set(I[A]),W.set(U))}(_)}if(!W){if(!K||L)return;c+=(1-i[_])/K,c*=.68}L||P(_,c)}function F(){const{target:A,location:I}=a.internalEngine(),U=A.get()-I.get(),W=Math.abs(U)>=1,G=T(),K=!ut(G);return B(a),!K&&!W&&i[G]>.999}function Q(){return r}return{name:"fade",options:e,init:function(A){a=A;const I=a.selectedScrollSnap(),{scrollBody:U,containerRect:W,axis:G}=a.internalEngine(),K=G.measureSize(W);s=Ut(.75*K,200,500),u=!1,i=a.scrollSnapList().map((_,L)=>L===I?1:0),m=U.settled,h=a.scrollProgress,U.settled=F,a.scrollProgress=Q,a.on("select",S).on("slideFocus",f).on("pointerDown",p).on("pointerUp",g),function(){const{translate:A,slideLooper:I}=a.internalEngine();A.clear(),A.toggleActive(!1),I.loopPoints.forEach(({translate:U})=>{U.clear(),U.toggleActive(!1)})}(),f()},destroy:function(){const{scrollBody:A}=a.internalEngine();A.settled=m,a.scrollProgress=h,a.off("select",S).off("slideFocus",f).off("pointerDown",p).off("pointerUp",g),a.slideNodes().forEach(I=>{const U=I.style;U.opacity="",U.transform="",U.pointerEvents="",I.getAttribute("style")||I.removeAttribute("style")})}}}he.globalOptions=void 0,Ht.globalOptions=void 0;const co={active:!0,breakpoints:{},delay:4e3,jump:!1,playOnInit:!0,stopOnFocusIn:!0,stopOnInteraction:!0,stopOnMouseEnter:!1,stopOnLastSnap:!1,rootNode:null};function dt(e={}){let n,t,o,a,i=null,s=0,l=!1,c=!1,r=!1,u=!1;function f(){if(!o){if(S())return void(r=!0);l||t.emit("autoplay:play"),function(){const{ownerWindow:A}=t.internalEngine();A.clearTimeout(s),s=A.setTimeout(F,a[t.selectedScrollSnap()]),i=(new Date).getTime(),t.emit("autoplay:timerset")}(),l=!0}}function g(){o||(l&&t.emit("autoplay:stop"),function(){const{ownerWindow:A}=t.internalEngine();A.clearTimeout(s),s=0,i=null,t.emit("autoplay:timerstopped")}(),l=!1)}function p(){if(S())return r=l,g();r&&f()}function S(){const{ownerDocument:A}=t.internalEngine();return"hidden"===A.visibilityState}function b(){c||g()}function v(){c||f()}function k(){c=!0,g()}function P(){c=!1,f()}function F(){const{index:A}=t.internalEngine(),I=A.clone().add(1).get(),U=t.scrollSnapList().length-1,W=n.stopOnLastSnap&&I===U;if(t.canScrollNext()?t.scrollNext(u):t.scrollTo(0,u),t.emit("autoplay:select"),W)return g();f()}return{name:"autoplay",options:e,init:function(A,I){t=A;const{mergeOptions:U,optionsAtMedia:W}=I,G=U(co,dt.globalOptions),K=U(G,e);if(n=W(K),t.scrollSnapList().length<=1)return;u=n.jump,o=!1,a=function(e,n){const t=e.scrollSnapList();return"number"==typeof n?t.map(()=>n):n(t,e)}(t,n.delay);const{eventStore:_,ownerDocument:L}=t.internalEngine(),M=!!t.internalEngine().options.watchDrag,H=function(e,n){const t=e.rootNode();return n&&n(t)||t}(t,n.rootNode);_.add(L,"visibilitychange",p),M&&t.on("pointerDown",b),M&&!n.stopOnInteraction&&t.on("pointerUp",v),n.stopOnMouseEnter&&_.add(H,"mouseenter",k),n.stopOnMouseEnter&&!n.stopOnInteraction&&_.add(H,"mouseleave",P),n.stopOnFocusIn&&t.on("slideFocusStart",g),n.stopOnFocusIn&&!n.stopOnInteraction&&_.add(t.containerNode(),"focusout",f),n.playOnInit&&f()},destroy:function(){t.off("pointerDown",b).off("pointerUp",v).off("slideFocusStart",g),g(),o=!0,l=!1},play:function(A){typeof A<"u"&&(u=A),f()},stop:function(){l&&g()},reset:function(){l&&f()},isPlaying:function(){return l},timeUntilNext:function(){return i?a[t.selectedScrollSnap()]-((new Date).getTime()-i):null}}}dt.globalOptions=void 0;function ho(e){const n=e.querySelector("[data-amenities-viewport]");if(!n)return;const t=e.querySelector("[data-amenities-prev]"),o=e.querySelector("[data-amenities-next]"),a=[Ht()],i=window.matchMedia("(prefers-reduced-motion: reduce)").matches;if("true"===e.dataset.amenitiesAutoplay&&!i){const c=parseFloat(e.dataset.amenitiesDelay)||3;a.push(dt({delay:1e3*c,stopOnInteraction:!0,stopOnMouseEnter:!0}))}const s=he(n,{loop:!0,align:"center",duration:60},a),l=()=>{var r;
1const c=null==(r=s.plugins())?void 0:r.autoplay;c&&c.stop()};t&&t.addEventListener("click",()=>{s.scrollPrev(),l()}),o&&o.addEventListener("click",()=>{s.scrollNext(),l()})}const go={direction:"forward",speed:2,startDelay:1e3,active:!0,breakpoints:{},playOnInit:!0,stopOnFocusIn:!0,stopOnInteraction:!0,stopOnMouseEnter:!1,rootNode:null};function pt(e={}){let n,t,o,a,c,i=0,s=!1,l=!1;function m(){if(o||s)return;t.emit("autoScroll:play");const T=t.internalEngine(),{ownerWindow:B}=T;i=B.setTimeout(()=>{T.scrollBody=function(T){const{location:B,previousLocation:F,offsetLocation:Q,target:Z,scrollTarget:A,index:I,indexPrevious:U,limit:{reachedMin:W,reachedMax:G,constrain:K},options:{loop:_}}=T,L="forward"===n.direction?-1:1,M=()=>j;let H=0,z=0,d=B.get(),w=0,$=!1;function N(){let Y=0;F.set(B),H=L*n.speed,d+=H,B.add(H),Z.set(B),Y=d-w,z=Math.sign(Y),w=d;const V=A.byDistance(0,!1).index;I.get()!==V&&(U.set(I.get()),I.set(V),t.emit("select"));const q="forward"===n.direction?W(Q.get()):G(Q.get());if(!_&&q){$=!0;const J=K(B.get());B.set(J),Z.set(B),h()}return j}const j={direction:()=>z,duration:()=>-1,velocity:()=>H,settled:()=>$,seek:N,useBaseFriction:M,useBaseDuration:M,useFriction:M,useDuration:M};return j}(T),T.animation.start()},a),s=!0}function h(){if(o||!s)return;t.emit("autoScroll:stop");const T=t.internalEngine(),{ownerWindow:B}=T;T.scrollBody=c,B.clearTimeout(i),i=0,s=!1}function y(){l||h()}function f(){l||b()}function g(){l=!0,h()}function p(){l=!1,m()}function S(){t.off("settle",S),m()}function b(){t.on("settle",S)}return{name:"autoScroll",options:e,init:function(T,B){t=T;const{mergeOptions:F,optionsAtMedia:Q}=B,Z=F(go,pt.globalOptions),A=F(Z,e);if(n=Q(A),t.scrollSnapList().length<=1)return;a=n.startDelay,o=!1,c=t.internalEngine().scrollBody;const{eventStore:I}=t.internalEngine(),U=!!t.internalEngine().options.watchDrag,W=function(e,n){const t=e.rootNode();return n&&n(t)||t}(t,n.rootNode);U&&t.on("pointerDown",y),U&&!n.stopOnInteraction&&t.on("pointerUp",f),n.stopOnMouseEnter&&I.add(W,"mouseenter",g),n.stopOnMouseEnter&&!n.stopOnInteraction&&I.add(W,"mouseleave",p),n.stopOnFocusIn&&t.on("slideFocusStart",h),n.stopOnFocusIn&&!n.stopOnInteraction&&I.add(t.containerNode(),"focusout",m),n.playOnInit&&m()},destroy:function(){t.off("pointerDown",y).off("pointerUp",f).off("slideFocusStart",h).off("settle",S),h(),o=!0,s=!1},play:function(T){typeof T<"u"&&(a=T),m()},stop:function(){s&&h()},reset:function(){s&&(h(),b())},isPlaying:function(){return s}}}pt.globalOptions=void 0;const So={loop:!0,align:"start",watchDrag:!1},wo={speed:.6,startDelay:0,stopOnInteraction:!1};function jt(e){const n=e.querySelector("[data-finder-tablist]"),t=Array.from(e.querySelectorAll("[data-finder-tab]")),o=Array.from(e.querySelectorAll("[data-finder-panel]"));
1if(!n||0===t.length||o.length!==t.length)return;const a=(s,{focus:l=!1}={})=>{t.forEach((c,r)=>{const u=r===s;c.setAttribute("aria-selected",u?"true":"false"),c.setAttribute("tabindex",u?"0":"-1"),c.classList.toggle("is-active",u),u?o[r].removeAttribute("hidden"):o[r].setAttribute("hidden","")}),l&&t[s].focus()};t.forEach((s,l)=>{s.addEventListener("click",()=>a(l))}),n.addEventListener("keydown",s=>{const l=t.findIndex(r=>"true"===r.getAttribute("aria-selected"));let c=null;switch(s.key){case"ArrowRight":c=(l+1)%t.length;break;case"ArrowLeft":c=(l-1+t.length)%t.length;break;case"Home":c=0;break;case"End":c=t.length-1;break;default:return}s.preventDefault(),a(c,{focus:!0})});const i=["","#","/#"];e.querySelectorAll("[data-finder-form]").forEach(s=>{const l=s.querySelector("[data-finder-select]"),c=s.querySelector("[data-finder-book]");if(!l)return;const r=()=>{if(!c)return;const u=i.includes(l.value),m=0!==l.selectedIndex||u?c.dataset.labelBook:c.dataset.labelAll;m&&(c.textContent=m),c.classList.toggle("is-inactive",u),c.setAttribute("aria-disabled",u?"true":"false")};l.addEventListener("change",r),r(),s.addEventListener("submit",u=>{u.preventDefault(),i.includes(l.value)?l.focus():window.location.assign(l.value)})})}function Yt(e){const n=e.querySelector("[data-logos-viewport]");if(!n||window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;let t=null;const i=window.matchMedia("(max-width: 767px)"),s=()=>{i.matches?t||(n.classList.add("is-embla"),t=he(n,So,[pt(wo)])):(()=>{if(!t)return;t.destroy(),t=null,n.classList.remove("is-embla");const l=n.firstElementChild;l&&(l.style.transform="")})()};i.addEventListener("change",s),s()}const Eo={loop:!1,align:"start",containScroll:"trimSnaps",skipSnaps:!1};function Lo(e){const n=e.querySelector(".Carousel__viewport");if(!n)return;const t=e.querySelector("[data-carousel-prev]"),o=e.querySelector("[data-carousel-next]"),a=he(n,Eo);Nt(e);const i=()=>{const s=a.canScrollPrev(),l=a.canScrollNext();t&&(t.disabled=!s),o&&(o.disabled=!l),e.classList.toggle("is-static",!s&&!l)};a.on("init",i),a.on("reInit",i),a.on("select",i),t&&t.addEventListener("click",()=>a.scrollPrev()),o&&o.addEventListener("click",()=>a.scrollNext()),i()}const xo={align:"center",containScroll:!1};function Vo(e){const n=e.querySelector("[data-ct-tabs]"),t=e.querySelector("[data-ct-viewport]"),o=e.querySelector(".ComparisonTable__tabs-container"),a=Array.from(e.querySelectorAll("[data-ct-tab]")),i=e.querySelector("[data-ct-prev]"),s=e.querySelector("[data-ct-next]");if(!n||!t||0===a.length)return;e.classList.add("is-enhanced"),n.hidden=!1;let l=null;const c=()=>{l&&(i&&(i.disabled=!l.canScrollPrev()),s&&(s.disabled=!l.canScrollNext()))},r=y=>{e.dataset.activeCol=y,a.forEach(f=>{const g=f.dataset.ctTab===y;f.classList.toggle("is-active",g),f.setAttribute("aria-pressed",String(g))}),c()};a.forEach((y,f)=>{y.addEventListener("click",()=>{l?l.scrollTo(f):r(y.dataset.ctTab)})}),i&&i.addEventListener("click",()=>l&&l.scrollPrev()),s&&s.addEventListener("click",()=>l&&l.scrollNext());const h=window.matchMedia("(max-width: 767px)"),E=()=>{h.matches?l||(l=he(t,xo),l.on("select",()=>r(String(l.selectedScrollSnap()+1))),l.on("reInit",c),l.scrollTo((parseInt(e.dataset.activeCol,10)||1)-1,!0),c()):l&&(l.destroy(),l=null,o&&(o.style.transform=""))};h.addEventListener("change",E),E()}function qo(e){const n=e.querySelector("[data-footer-locations-toggle]"),t=e.querySelector("[data-footer-locations-body]"),o=window.matchMedia("(prefers-reduced-motion: reduce)");if(n&&t){let c=null;const r=()=>{c&&t.removeEventListener("transitionend",c),c=null},u=E=>{c=y=>{y.target!==t||"height"!==y.propertyName||(r(),E())},t.addEventListener("transitionend",c)},m=()=>{if(n.setAttribute("aria-expanded","true"),r(),t.removeAttribute("hidden"),o.matches)return;const E=t.scrollHeight;t.style.overflow="hidden",t.style.height="0px",t.offsetHeight,t.style.height=`${E}px`,u(()=>{t.style.height="",t.style.overflow=""})},h=()=>{n.setAttribute("aria-expanded","false"),r(),o.matches?t.setAttribute("hidden",""):(t.style.overflow="hidden",t.style.height=`${t.scrollHeight}px`,t.offsetHeight,t.style.height="0px",u(()=>{t.setAttribute("hidden",""),t.style.height="",t.style.overflow=""}))};n.addEventListener("click",()=>{"true"===n.getAttribute("aria-expanded")?h():m()})}const a=e.querySelector("[data-footer-tablist]"),i=Array.from(e.querySelectorAll("[data-footer-tab]")),s=Array.from(e.querySelectorAll("[data-footer-panel]"));if(!a||0===i.length)return;const l=(c,{focus:r=!1}={})=>{c<0||c>=i.length||(i.forEach((u,m)=>{const h=m===c;u.setAttribute("aria-selected",h?"true":"false"),u.setAttribute("tabindex",h?"0":"-1"),u.classList.toggle("is-active",h)}
1),s.forEach((u,m)=>{m===c?u.removeAttribute("hidden"):u.setAttribute("hidden","")}),r&&i[c].focus())};i.forEach((c,r)=>{c.addEventListener("click",()=>l(r))}),a.addEventListener("keydown",c=>{const r=i.findIndex(m=>"true"===m.getAttribute("aria-selected"));let u=null;switch(c.key){case"ArrowRight":u=(r+1)%i.length;break;case"ArrowLeft":u=(r-1+i.length)%i.length;break;case"Home":u=0;break;case"End":u=i.length-1;break;default:return}c.preventDefault(),l(u,{focus:!0})})}const Po={available_label:"Available",available_title:"{name} looks available",available_text:"No company on the Companies House register has the same name. Choose a package to form your company with it. Companies House makes the final check when your company is registered.",available_button:"Form your company",permission_label:"Needs permission",permission_title:"{name} needs permission to use",permission_text:"It includes a word Companies House only accepts with supporting paperwork. You can still go ahead, or try a name without it.",permission_button:"Continue with this name",similar_label:"Similar name registered",similar_title:"{name} is close to a registered name",similar_text:"It's available, but it's very close to a company already on the register, so you'll need to provide supporting evidence when you apply:",taken_label:"Not available",taken_title:"{name} is already taken",taken_text:"Companies House won't register a name that is the same as one already on the register:",taken_button:"Try a different name",error_label:"Not checked",error_title:"We couldn't check that name just now",error_text:"Carry on to the packages and it will be checked there.",error_button:"Continue to packages",another_label:"Check another name",checking_label:"Checking..."};function oe(e,n,t){const o=document.createElement(e);return n&&(o.className=n),null!=t&&(o.textContent=t),o}function Bo(e){let n=String(e||"");return/<[a-z][\s\S]*>/i.test(n)&&(n=(new DOMParser).parseFromString(n.replace(/<br\s*\/?>/gi,"\n").replace(/<\/(p|div|li)>/gi,"\n\n"),"text/html").body.textContent||""),n.split(/\n{2,}/).map(t=>t.replace(/[ \t]+/g," ").trim()).filter(Boolean)}function Fo(e){const n=e.dataset.checkUrl,t=document.getElementById(e.dataset.result),o=e.querySelector('input[name="name"]'),a=e.querySelector(".NameCheck__button"),i=null==a?void 0:a.querySelector("span");if(!(n&&t&&o&&a))return;const{copy:s,phone:l}=function(e){const n=e.querySelector("[data-name-check-copy]");let t={};try{t=JSON.parse((null==n?void 0:n.textContent)||"{}")||{}}catch{t={}}const o={...Po};for(const[a,i]of Object.entries(t.copy||{}))"string"==typeof i&&i.trim()&&(o[a]=i.trim());return{copy:o,phone:t.phone||""}}(e),c=(null==i?void 0:i.textContent)??"";let r=0,u=null;const m=(b,v)=>b.replace(/\{name\}/g,v),E=(b,v)=>{const k=oe("a","NameResult__cta",v);return k.href=(b=>{const v=new URL(e.action,window.location.href);return new FormData(e).forEach((k,P)=>v.searchParams.set(P,String(k))),v.searchParams.set("name",b),v.toString()})(b),k.insertAdjacentHTML("beforeend",'<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M5 12h14M13 6l6 6-6 6"/></svg>'),k},y=(b,v="NameResult__retry")=>{const k=oe("button",v,b);return k.type="button",k.addEventListener("click",()=>{o.focus(),o.select()}),k},f=(b,v,k)=>{t.dataset.status=b,t.append(oe("span","NameResult__chip",v),oe("p","NameResult__title",k))},g=b=>{const v=oe("ul","NameResult__similar");for(const k of b){if(null==k||!k.Name)continue;const P=oe("li");P.append(oe("strong",null,k.Name)),k.Number&&P.append(oe("span",null,`Company no. ${k.Number}`)),v.append(P)}return v};const S=b=>{a.toggleAttribute("aria-busy",b),a.disabled=b,i&&(i.textContent=b?s.checking_label:c)};e.addEventListener("submit",async b=>{const v=o.value.replace(/\s+/g," ").trim();if(v.length<2)return;b.preventDefault();const k=++r;null==u||u.abort(),u=new AbortController;const P=setTimeout(()=>u.abort(),6e3);S(!0);let O=null;try{const D=new URL(n,window.location.href);D.searchParams.set("name",v);const T=await fetch(D,{signal:u.signal,headers:{Accept:"application/json"}});T.ok&&(O=await T.json())}catch{O=null}finally{clearTimeout(P)}k===r&&(S(!1),function(b,v){var D;t.replaceChildren();const k=String((null==b?void 0:b.NameStatus)||"").toUpperCase(),P=(null==b?void 0:b.NameRequested)||v.toUpperCase(),O=oe("div","NameResult__actions");
1if("GREEN"===k)f("green",s.available_label,m(s.available_title,P)),t.append(oe("p","NameResult__text",s.available_text)),O.append(E(v,s.available_button),y(s.another_label));else if("AMBER"===k){const T=b.SensitiveWords||[],B=(b.SimilarNames||[]).filter(F=>null==F?void 0:F.Name);if(T.length){f("amber",s.permission_label,m(s.permission_title,P)),t.append(oe("p","NameResult__text",s.permission_text));const F=oe("div","NameResult__words");for(const Q of T){const Z=oe("details","NameResult__word"),A=oe("summary",null,`“${Q.Word}”`),I=oe("div","NameResult__guidance");Bo(Q.Guidance).forEach(U=>I.append(oe("p",null,U))),Z.append(A,I),F.append(Z)}t.append(F),B.length&&t.append(oe("p","NameResult__text",s.similar_text))}else f("amber",s.similar_label,m(s.similar_title,P)),t.append(oe("p","NameResult__text",s.similar_text));B.length&&t.append(g(B)),O.append(E(v,s.permission_button),y(s.another_label))}else if("RED"===k){f("red",s.taken_label,m(s.taken_title,P)),t.append(oe("p","NameResult__text",s.taken_text));const T=g(null!=(D=b.SimilarNames)&&D.length?b.SimilarNames:[{Name:b.MatchName}]);if(T.children.length&&t.append(T),O.append(y(s.taken_button,"NameResult__cta")),l){const B=oe("span","NameResult__talk","Stuck? Call "),F=oe("a",null,l);F.href=`tel:${l.replace(/\s+/g,"")}`,B.append(F),O.append(B)}}else f("error",s.error_label,s.error_title),t.append(oe("p","NameResult__text",s.error_text)),O.append(E(v,s.error_button),y(s.another_label));t.append(O),t.hidden=!1}(null!=O&&O.NameStatus?O:null,v))})}const zt="https://api.postcodes.io",zo=/^([a-z]{1,2}\d[a-z\d]?)\s*(\d[a-z]{2})?$/i,Wo=/park|grass|wood|landcover|cemetery|pitch|garden/i,ft=()=>window.matchMedia("(prefers-reduced-motion: reduce)").matches;let ze=null;function Wt(e,n){return ze||(ze=new Promise((t,o)=>{const a=document.createElement("link");a.rel="stylesheet",a.href=n,document.head.appendChild(a);const i=document.createElement("script");i.src=e,i.defer=!0,i.onload=()=>t(window.maplibregl),i.onerror=()=>o(new Error("MapLibre failed to load")),document.head.appendChild(i)}),ze)}function We(e,n){const t=l=>l*Math.PI/180,a=t(n.lat-e.lat),i=t(n.lng-e.lng),s=Math.sin(a/2)**2+Math.cos(t(e.lat))*Math.cos(t(n.lat))*Math.sin(i/2)**2;return 7917.6*Math.asin(Math.sqrt(s))}function Zo(e){const n=e.querySelector("[data-lm-map]"),t=e.querySelector("[data-lm-list-wrap]"),o=e.querySelector("[data-lm-shell]"),a=e.querySelector("[data-lm-list]"),i=e.querySelector("[data-lm-form]"),s=e.querySelector("[data-lm-input]"),l=e.querySelector("[data-lm-clear]"),c=e.querySelector("[data-lm-nearest]"),r=e.querySelector("[data-lm-nearest-label]"),u=e.querySelector("[data-lm-city]"),m=e.querySelector("[data-lm-status]"),h=Array.from(e.querySelectorAll("[data-lm-card]"));if(!a||0===h.length)return;const E=[...h],y=new Map;let f=null,g=null;const p={origin:null,city:""},S=_=>{const L=parseFloat(_.dataset.lat),M=parseFloat(_.dataset.lng);return Number.isFinite(L)&&Number.isFinite(M)?{lat:L,lng:M}:null};[...new Set(h.map(_=>_.dataset.city).filter(Boolean))].sort((_,L)=>_.localeCompare(L)).forEach(_=>{const L=document.createElement("option");L.value=_,L.textContent=_,u.appendChild(L)}),e.classList.add("is-enhanced");const v=e.querySelector("[data-lm-map-toggle]");if(v){const _=v.querySelector("[data-lm-map-toggle-label]");v.hidden=!1,v.addEventListener("click",()=>{const L=e.classList.toggle("is-map-open");v.setAttribute("aria-expanded",String(L)),_.textContent=L?v.dataset.labelHide:v.dataset.labelShow,L&&requestAnimationFrame(()=>{f&&(f.resize(),F())})})}const k=()=>{const _=t.scrollTop+t.clientHeight>=t.scrollHeight-12;o.classList.toggle("is-scroll-end",_),o.classList.toggle("is-scrollable",t.scrollHeight>t.clientHeight)};t.addEventListener("scroll",k,{passive:!0}),window.addEventListener("resize",k);const P=()=>{h.forEach(_=>_.classList.remove("is-active")),y.forEach(({pin:_})=>_.classList.remove("is-active"))},O=(_,{scrollList:L=!0,easeMap:M=!0}={})=>{P(),_.classList.add("is-active");const H=y.get(_);if(H){H.pin.classList.add("is-active");const z=S(_);f&&M&&z&&f.easeTo({center:[z.lng,z.lat],duration:ft()?0:600})}L&&t.scrollTo({top:_.offsetTop-a.offsetTop,behavior:ft()?"auto":"smooth"})},D=()=>h.filter(_=>!p.city||_.dataset.city===p.city),T=e.querySelector("[data-lm-reset]"),B=()=>{T&&(T.disabled=!(p.origin||p.city||s.value.trim()))},F=()=>
1{if(!f||!n.clientWidth)return;const _=D().map(S).filter(Boolean);if(p.origin&&_.push({lat:p.origin.lat,lng:p.origin.lng}),0===_.length)return;const L=_.reduce((M,H)=>M.extend([H.lng,H.lat]),new window.maplibregl.LngLatBounds([_[0].lng,_[0].lat],[_[0].lng,_[0].lat]));f.fitBounds(L,{padding:56,maxZoom:14,duration:ft()?0:700})},Z=({fit:_=!0}={})=>{const L=D();(p.origin?[...h].sort((H,z)=>{const d=S(H),w=S(z);return d?w?We(p.origin,d)-We(p.origin,w):-1:1}):E).forEach(H=>a.appendChild(H)),h.forEach(H=>{const z=L.includes(H);H.hidden=!z;const d=y.get(H);d&&(d.marker.getElement().style.display=z?"":"none");const w=H.querySelector("[data-lm-distance]"),$=S(H);w&&(p.origin&&$?(w.textContent=function(e){return e<.1?"Less than 0.1 miles away":e<10?`${e.toFixed(1)} miles away`:`${Math.round(e)} miles away`}(We(p.origin,$)),w.hidden=!1):w.hidden=!0)}),m.textContent=(_=>{if(0===_)return`No locations in ${p.city}`;const L=[];return p.city?L.push(`Showing ${_} location${1===_?"":"s"} in ${p.city}`):L.push(_===h.length?"Showing all locations":`Showing ${_} locations`),p.origin&&L.push(p.origin.isUser?"nearest to you first":`nearest to ${p.origin.label} first`),L.join(", ")})(L.length),t.scrollTop=0,k(),B(),_&&F()},A=_=>{m.textContent=_},I=({refit:_=!0}={})=>{s.value="",l.hidden=!0,p.origin=null,g&&(g.remove(),g=null),P(),Z({fit:_})},U=_=>{p.origin=_,f&&W(),Z()},W=()=>{if(!f||!p.origin)return;g&&g.remove();const _=document.createElement("span");_.className="LocationsMap__origin",_.setAttribute("title",p.origin.isUser?"Your location":p.origin.label),g=new window.maplibregl.Marker({element:_}).setLngLat([p.origin.lng,p.origin.lat]),g.addTo(f)};i.addEventListener("submit",async _=>{_.preventDefault();const L=s.value.trim();if(L){m.textContent="Searching…";try{const M=await async function(e){const n=e.trim(),t=n.match(zo);if(t){const s=t[2]?`/postcodes/${encodeURIComponent(n.replace(/\s+/g,""))}`:`/outcodes/${encodeURIComponent(t[1])}`,l=await fetch(`${zt}${s}`);if(l.ok){const{result:c}=await l.json();if(null!=(null==c?void 0:c.latitude))return{lat:c.latitude,lng:c.longitude,label:n.toUpperCase()}}}const o=await fetch(`${zt}/places?q=${encodeURIComponent(n)}&limit=1`);if(!o.ok)return null;const{result:a}=await o.json(),i=null==a?void 0:a[0];return i&&null!=i.latitude?{lat:i.latitude,lng:i.longitude,label:i.name_1}:null}(L);if(!M)return void A(`We couldn't find "${L}". Try a town or a postcode.`);U({...M,isUser:!1})}catch{A("Search is unavailable right now. Please try again.")}}else I()}),s.addEventListener("input",()=>{l.hidden=0===s.value.length,B(),""===s.value.trim()&&p.origin&&!p.origin.isUser&&I()}),l.addEventListener("click",()=>{I(),s.focus()});const G=_=>new Promise((L,M)=>navigator.geolocation.getCurrentPosition(L,M,_));c.addEventListener("click",async()=>{if(!("geolocation"in navigator))return void A("Location is not supported by this browser. Try searching instead.");const _=r.textContent;c.disabled=!0,r.textContent="Locating…";try{let L,M;for(const z of[{options:{timeout:1e4,maximumAge:3e5},delay:0},{options:{enableHighAccuracy:!0,timeout:1e4,maximumAge:0},delay:1e3},{options:{enableHighAccuracy:!0,timeout:1e4,maximumAge:0},delay:2e3}]){z.delay&&await new Promise(d=>setTimeout(d,z.delay));try{L=await G(z.options);break}catch(d){if(d.code===d.PERMISSION_DENIED)throw d;M=d}}if(!L)throw M;s.value="",l.hidden=!0,U({lat:L.coords.latitude,lng:L.coords.longitude,label:"you",isUser:!0});const H=D().reduce((z,d)=>{const w=S(d);if(!w)return z;const $=We(p.origin,w);return!z||$<z.d?{c:d,d:$}:z},null);H&&O(H.c,{easeMap:!1})}catch(L){A(L.code===L.PERMISSION_DENIED?"Location permission was declined. Try searching by town or postcode instead.":"Your device could not provide a location. Check Location Services is on for your browser, or search by town or postcode.")}finally{c.disabled=!1,r.textContent=_}}),u.addEventListener("change",()=>{p.city=u.value,P(),Z()}),T&&T.addEventListener("click",()=>{u.value="",p.city="",I()}),h.forEach(_=>{_.addEventListener("click",L=>{L.target.closest("a")||O(_)})});const K=_=>{f=new _.Map({container:n,style:n.dataset.mapStyle,center:[-.5,51.9],zoom:7,cooperativeGestures:!0,attributionControl:{compact:!0}}),f.addControl(new _.NavigationControl({showCompass:!1})),f.on("load",()=>{const L=n.querySelector(".maplibregl-ctrl-attrib");L&&(L.classList.remove("maplibregl-compact-show"),L.removeAttribute("open"));try{for(const M of f.getStyle().layers)"fill"===M.type&&Wo.test(M.id)&&f.setPaintProperty(M.id,"fill-color","#e9f4c3"),"background"===M.type&&f.setPaintProperty(M.id,"background-color","#f4f5f2")}catch{}
1h.forEach(M=>{const H=S(M);if(!H)return;const z=function(e){const n=document.createElement("button");return n.type="button",n.className="LocationsMap__pin",n.setAttribute("aria-label",`Show ${e} in the list`),n.innerHTML=`\n    <svg class="LocationsMap__pin-svg" viewBox="0 0 34 44" width="34" height="44" aria-hidden="true">\n      <path class="LocationsMap__pin-body" d="M17 1C8.2 1 1 8.2 1 17c0 11.5 16 26 16 26s16-14.5 16-26C33 8.2 25.8 1 17 1Z" />\n      <circle class="LocationsMap__pin-dot" cx="17" cy="16.5" r="6.5" />\n    </svg>\n    <span class="LocationsMap__pin-label">${e}</span>\n  `,n}(M.dataset.name);z.addEventListener("click",()=>O(M,{easeMap:!1}));const d=new _.Marker({element:z,anchor:"bottom"}).setLngLat([H.lng,H.lat]).addTo(f);y.set(M,{marker:d,pin:z})}),W(),Z({fit:!0})})};if(n&&n.dataset.maplibreJs){const _=new IntersectionObserver(L=>{L.some(M=>M.isIntersecting)&&(_.disconnect(),Wt(n.dataset.maplibreJs,n.dataset.maplibreCss).then(K).catch(()=>{n.classList.add("is-unavailable")}))},{rootMargin:"400px"});_.observe(n)}Z({fit:!1})}function Se(e,n,t=!1){e.textContent=n,e.classList.toggle("Payments__status--error",t)}function oa(e,n){const t=new URLSearchParams(window.location.search),o=t.get("checkout");if(!o)return;"success"===o&&t.get("session_id")?async function(e,n,t){Se(t,"Confirming your payment…");try{const o=await fetch(`${e}/api/session?id=${encodeURIComponent(n)}`),a=await o.json();if(!o.ok)throw new Error(a.error||"Could not confirm the payment");console.log("[Payments] checkout complete — payload for Novacy:",a),"paid"===a.paymentStatus?Se(t,`Payment successful — thanks${a.customer.name?`, ${a.customer.name.split(" ")[0]}`:""}! Your ${a.planName||"plan"} is confirmed.`):Se(t,`Checkout ${a.status} — payment status: ${a.paymentStatus}.`)}catch(o){Se(t,`Could not confirm the payment: ${o.message}`,!0)}}(e,t.get("session_id"),n):"cancelled"===o&&Se(n,"Checkout cancelled — you have not been charged."),t.delete("checkout"),t.delete("session_id");const a=t.toString();history.replaceState(null,"",window.location.pathname+(a?`?${a}`:"")+window.location.hash)}function aa(e){const n=(e.dataset.endpoint||"").replace(/\/+$/,""),t=e.querySelector("[data-payments-status]");!n||!t||(e.querySelectorAll("button[data-plan]").forEach(o=>{o.addEventListener("click",()=>async function(e,n,t,o){o.disabled=!0,Se(t,"Redirecting to secure checkout…");try{const a=window.location.origin+window.location.pathname,i=await fetch(`${e}/api/checkout`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({plan:n,pageUrl:a})}),s=await i.json();if(!i.ok||!s.url)throw new Error(s.error||"Checkout could not be started");window.location.assign(s.url)}catch(a){Se(t,`Something went wrong: ${a.message}`,!0),o.disabled=!1}}(n,o.dataset.plan,t,o))}),oa(n,t))}let Ne=null;function $e(e,n,t=!1){e.statusEl.textContent=n,e.statusEl.classList.toggle("PaymentsEmbedded__status--error",t)}function mt(e,n){e.buyButtons.forEach(t=>{t.disabled=n})}async function ua(e,n){mt(e,!0),$e(e,"Loading secure checkout…");try{const t=await fetch(`${e.endpoint}/api/checkout`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({plan:n,ui:"embedded"})}),o=await t.json();if(!t.ok||!o.clientSecret)throw new Error(o.error||"Checkout could not be started");await(window.Stripe?Promise.resolve():Ne||(Ne=new Promise((e,n)=>{const t=document.createElement("script");t.src="https://js.stripe.com/v3/",t.onload=e,t.onerror=()=>{Ne=null,n(new Error("Stripe.js failed to load"))},document.head.appendChild(t)}),Ne));const a=window.Stripe(o.publishableKey);e.checkout&&(e.checkout.destroy(),e.checkout=null),e.checkout=await a.initEmbeddedCheckout({clientSecret:o.clientSecret,onComplete:()=>async function(e,n){try{const t=await fetch(`${e.endpoint}/api/session?id=${encodeURIComponent(n)}`),o=await t.json();if(!t.ok)throw new Error(o.error||"Could not confirm the payment");console.log("[PaymentsEmbedded] checkout complete — payload for Novacy:",o),$e(e,"paid"===o.paymentStatus?`Payment successful — your ${o.planName||"plan"} is confirmed.`:`Checkout ${o.status} — payment status: ${o.paymentStatus}.`)}catch(t){$e(e,`Could not confirm the payment: ${t.message}`,!0)}}(e,o.sessionId)}),e.grid.hidden=!0,e.panel.hidden=!1,e.checkout.mount(e.mount),$e(e,""),e.backButton.focus()}catch(t){$e(e,`Something went wrong: ${t.message}`,!0),mt(e,!1)}}function da(e){const n={endpoint:(e.dataset.endpoint||"").replace(/\/+$/,""),grid:e.querySelector("[data-plans]"),panel:e.querySelector("[data-checkout]"),mount:e.querySelector("[data-checkout-mount]"),backButton:e.querySelector("[data-back]"),statusEl:e.querySelector("[data-payments-status]"),buyButtons:e.querySelectorAll("button[data-plan]"),checkout:null};
1!n.endpoint||!n.grid||!n.panel||!n.mount||!n.statusEl||(n.buyButtons.forEach(t=>{t.addEventListener("click",()=>ua(n,t.dataset.plan))}),n.backButton.addEventListener("click",()=>{(function(e){e.checkout&&(e.checkout.destroy(),e.checkout=null),e.panel.hidden=!0,e.grid.hidden=!1,mt(e,!1)})(n),$e(n,""),n.buyButtons[0]&&n.buyButtons[0].focus()}))}function fa(e){const n=Array.from(e.querySelectorAll("[data-term-button]"));if(0===n.length)return;const t=Array.from(e.querySelectorAll('a[href*="package="]')),a=i=>{e.dataset.term=i,n.forEach(s=>{const l=s.dataset.termButton===i;s.classList.toggle("is-active",l),s.setAttribute("aria-pressed",String(l))}),(i=>{t.forEach(s=>{try{const l=new URL(s.getAttribute("href"),window.location.href);l.searchParams.set("term",i),s.setAttribute("href",l.pathname+l.search+l.hash)}catch{}})})(i)};n.forEach(i=>{i.addEventListener("click",()=>a(i.dataset.termButton))})}const ga=[{selector:".Button :is(a, button)"},{selector:".Button__tour-label",trigger:e=>e.closest("a, button")},{selector:"a.NavCTA__button > span",trigger:e=>e.closest("a")},{selector:"div.NavCTA__button a"}];function _a(e){const n=e.textContent.replace(/\s+/g," ").trim(),t=document.createDocumentFragment(),o=document.createElement("span");o.className="visually-hidden",o.textContent=n,t.appendChild(o);const a=document.createElement("span");a.className="RollText",a.setAttribute("aria-hidden","true"),Array.from(n).forEach((i,s)=>{const l=document.createElement("span");l.className="RollText__char",l.style.setProperty("--ri",Math.min(s,14));for(let c=0;c<2;c+=1){const r=document.createElement("span");r.className="RollText__glyph",r.textContent=" "===i?" ":i,l.appendChild(r)}a.appendChild(l)}),t.appendChild(a),e.replaceWith(t)}const va=()=>{window.matchMedia("(prefers-reduced-motion: reduce)").matches||window.matchMedia("(hover: none)").matches||ga.forEach(({selector:e,trigger:n})=>{document.querySelectorAll(e).forEach(t=>{!function(e,n){if(e.dataset.rollReady)return;const t=Array.from(e.childNodes).filter(o=>o.nodeType===Node.TEXT_NODE&&o.textContent.trim());0!==t.length&&(t.forEach(_a),e.dataset.rollReady="true",(n||e).classList.add("has-roll"))}(t,n?n(t):t)})})};function Sa(e){const n=e.querySelector("[data-video]"),t=e.querySelector("[data-video-play]");if(!n||!t)return;const o=()=>{e.classList.add("is-playing"),n.controls=!0,t.hidden=!0;const a=n.play();a&&a.catch&&a.catch(()=>{})};t.addEventListener("click",o),n.addEventListener("click",()=>{n.controls||o()})}const wa={loop:!1,align:"start",containScroll:"trimSnaps",skipSnaps:!1,watchDrag:(e,n)=>!n.target.closest("video")};function ka(e){const n=e.querySelector(".SocialCards__viewport");if(!n)return;const t=e.querySelector("[data-social-cards-prev]"),o=e.querySelector("[data-social-cards-next]"),a=he(n,wa);Nt(e);const i=()=>{const s=a.canScrollPrev(),l=a.canScrollNext();t&&(t.disabled=!s),o&&(o.disabled=!l),e.classList.toggle("is-static",!s&&!l)};a.on("init",i),a.on("reInit",i),a.on("select",i),t&&t.addEventListener("click",()=>a.scrollPrev()),o&&o.addEventListener("click",()=>a.scrollNext()),i()}function Gt(e,n,t=0){return e.split("").map((o,a)=>function(e,n){return`<span class="StatItem__value-char" style="transition-delay: ${n}s">${e}</span>`}(o,(t+a)*n)).join("")}function xa(e){var c,r,u;const n=e.querySelector(".StatItem__value"),t=e.querySelector(".StatItem__modifier");if(!n)return;const o=(null==(r=null==(c=n.childNodes[0])?void 0:c.nodeValue)?void 0:r.trim())||"",a=(null==(u=null==t?void 0:t.textContent)?void 0:u.trim())||"";if(!o)return;const i=Gt(o,.16,0),s=a?`<span class="StatItem__modifier">${Gt(a,.05,o.length)}</span>`:"";n.innerHTML=i+s,new IntersectionObserver(m=>{m.forEach(h=>{h.target.classList.toggle("active",h.isIntersecting)})},{threshold:.6}).observe(e)}const Jt="(max-width: 767px)",Ta={axis:"x",align:"center",containScroll:!1,slides:"[data-tabs-panel]"};function qa(e){const n=e.querySelector("[data-tabs-tablist]"),t=e.querySelector("[data-tabs-indicator]"),o=Array.from(e.querySelectorAll("[data-tabs-tab]")),a=Array.from(e.querySelectorAll("[data-tabs-panel]")),i=e.querySelector("[data-tabs-panels-viewport]"),s=e.querySelector("[data-tabs-title]"),l=e.querySelector("[data-tabs-prev]"),c=e.querySelector("[data-tabs-next]");
1if(!n||0===o.length)return;let r=Math.max(0,o.findIndex(v=>"true"===v.getAttribute("aria-selected"))),u=null;const m=()=>{if(!t)return;const v=o[r];v&&(t.style.width=`${v.offsetWidth}px`,t.style.transform=`translateX(${v.offsetLeft}px)`)},h=({togglePanels:v})=>{o.forEach((k,P)=>{const O=P===r;k.setAttribute("aria-selected",O?"true":"false"),k.setAttribute("tabindex",O?"0":"-1"),k.classList.toggle("is-active",O)}),v&&a.forEach((k,P)=>{P===r?k.removeAttribute("hidden"):k.setAttribute("hidden","")}),s&&o[r]&&(s.textContent=o[r].textContent.trim()),m()},y=(v,{focus:k=!1}={})=>{v<0||v>=o.length||(r=v,h({togglePanels:!0}),k&&o[v].focus())};o.forEach((v,k)=>{v.addEventListener("click",()=>{window.matchMedia(Jt).matches||y(k)})}),n.addEventListener("keydown",v=>{let k=null;switch(v.key){case"ArrowRight":k=(r+1)%o.length;break;case"ArrowLeft":k=(r-1+o.length)%o.length;break;case"Home":k=0;break;case"End":k=o.length-1;break;default:return}v.preventDefault(),y(k,{focus:!0})});const f=()=>{u&&(l&&(l.disabled=!u.canScrollPrev()),c&&(c.disabled=!u.canScrollNext()))};l&&l.addEventListener("click",()=>u&&u.scrollPrev()),c&&c.addEventListener("click",()=>u&&u.scrollNext());const S=window.matchMedia(Jt),b=()=>{S.matches?u||!i||(a.forEach(v=>v.removeAttribute("hidden")),u=he(i,Ta),u.on("select",()=>{r=u.selectedScrollSnap(),h({togglePanels:!1}),f()}),u.on("reInit",f),u.scrollTo(r,!0),h({togglePanels:!1}),f()):(()=>{if(!u)return;u.destroy(),u=null;const v=e.querySelector("[data-tabs-panels]");v&&(v.style.transform=""),l&&(l.disabled=!1),c&&(c.disabled=!1),h({togglePanels:!0})})()};S.addEventListener("change",b),window.addEventListener("resize",ot(m,150)),h({togglePanels:!S.matches}),b(),document.fonts&&document.fonts.ready&&document.fonts.ready.then(m),requestAnimationFrame(()=>e.classList.add("is-ready"))}function Ia(e){const n=e.getAttribute("aria-controls");if(!n)return;const t=document.getElementById(n);if(!t)return;const o=e.closest(".TeamMember__card");e.addEventListener("click",()=>{"true"===e.getAttribute("aria-expanded")?(e.setAttribute("aria-expanded","false"),t.setAttribute("inert","")):(e.setAttribute("aria-expanded","true"),t.removeAttribute("inert"))}),o&&(o.addEventListener("click",a=>{a.target.closest(".TeamMember__toggle")||"true"===e.getAttribute("aria-expanded")&&a.target.closest(".TeamMember__bio")||e.click()}),o.addEventListener("keydown",a=>{"Escape"===a.key&&"true"===e.getAttribute("aria-expanded")&&(e.setAttribute("aria-expanded","false"),t.setAttribute("inert",""),e.focus())}))}const Pa=/park|grass|wood|landcover|cemetery|pitch|garden/i;function Ra(){const e=document.createElement("div");return e.className="TextMap__pin",e.setAttribute("aria-hidden","true"),e.innerHTML='\n    <svg class="TextMap__pin-svg" viewBox="0 0 34 44" width="34" height="44" aria-hidden="true">\n      <path class="TextMap__pin-body" d="M17 1C8.2 1 1 8.2 1 17c0 11.5 16 26 16 26s16-14.5 16-26C33 8.2 25.8 1 17 1Z" />\n      <circle class="TextMap__pin-dot" cx="17" cy="16.5" r="6.5" />\n    </svg>\n  ',e}function Fa(e){const n=parseFloat(e.dataset.lat),t=parseFloat(e.dataset.lng);if(!Number.isFinite(n)||!Number.isFinite(t))return;const o=parseFloat(e.dataset.zoom)||13,a=s=>{const l=new s.Map({container:e,style:e.dataset.mapStyle,center:[t,n],zoom:o,cooperativeGestures:!0,attributionControl:{compact:!0}});l.addControl(new s.NavigationControl({showCompass:!1})),l.on("load",()=>{const c=e.querySelector(".maplibregl-ctrl-attrib");c&&(c.classList.remove("maplibregl-compact-show"),c.removeAttribute("open"));try{for(const r of l.getStyle().layers)"fill"===r.type&&Pa.test(r.id)&&l.setPaintProperty(r.id,"fill-color","#e9f4c3"),"background"===r.type&&l.setPaintProperty(r.id,"background-color","#f4f5f2")}catch{}new s.Marker({element:Ra(),anchor:"bottom"}).setLngLat([t,n]).addTo(l)})},i=new IntersectionObserver(s=>{s.some(l=>l.isIntersecting)&&(i.disconnect(),Wt(e.dataset.maplibreJs,e.dataset.maplibreCss).then(a).catch(()=>{e.classList.add("is-unavailable")}))},{rootMargin:"400px"});i.observe(e)}let le=null,ye=null;function ja(e){!function(){if(le)return;le=document.createElement("dialog"),le.className="TourModal",le.innerHTML='\n    <button class="TourModal__close" type="button" aria-label="Close tour">\n      <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">\n        <path d="M18 6 6 18" />\n        <path d="m6 6 12 12" />\n      </svg>\n    </button>\n    <div class="TourModal__frame"></div>\n  ',ye=document.createElement("iframe"),ye.className="TourModal__iframe",ye.setAttribute("allow","fullscreen;
1 xr-spatial-tracking; gyroscope; accelerometer"),ye.setAttribute("allowfullscreen",""),le.querySelector(".TourModal__frame").appendChild(ye);const e=()=>{ye.src="about:blank",document.body.style.overflow=""},n=()=>{le.open&&le.close(),e()};le.querySelector(".TourModal__close").addEventListener("click",n),le.addEventListener("click",t=>{t.target===le&&n()}),le.addEventListener("close",e),document.body.appendChild(le)}();const n=e.dataset.tourLabel||"Virtual tour";le.setAttribute("aria-label",n),ye.title=n,ye.src=function(e){try{const n=new URL(e);return/(^|\.)matterport\.com$/i.test(n.hostname)&&n.searchParams.set("play","1"),n.toString()}catch{return e}}(e.href),document.body.style.overflow="hidden",le.showModal()}function za(){const e=document.querySelectorAll(".Video--container");0!==e.length&&(e.forEach(function(n){!function(e){if("true"===e.dataset.videoinitialised)return;e.dataset.videoinitialised="true";const n=e.querySelector(".Video__play"),t=e.querySelector(".Video__iframe"),o=e.querySelector(".Video__thumb"),a=e.dataset.src;if(!t||!o||!a)return void console.warn("Video container missing required elements or data-src attribute");function i(){if(t.querySelector("iframe"))return;const s=function(e){try{const n=new URL(e),t=n.hostname.replace(/^www\./,"");if(t.includes("youtube.com")){const o=n.searchParams.get("v");if(o)return"https://www.youtube.com/embed/"+o+"?autoplay=1&rel=0"}if(t.includes("youtu.be")){const o=n.pathname.slice(1).split("/")[0];if(o)return"https://www.youtube.com/embed/"+o+"?autoplay=1&rel=0"}if(t.includes("vimeo.com")){const o=n.pathname.split("/").filter(Boolean),a=o[o.length-1];if(/^\d+$/.test(a))return"https://player.vimeo.com/video/"+a+"?autoplay=1"}return""}catch(n){return console.error("Invalid video URL:",e,n),""}}(a);if(!s)return void console.error("Unable to generate embed URL from:",a);const l=function(e){const n=document.createElement("iframe");return n.src=e,n.width="800",n.height="500",n.allow="autoplay; encrypted-media; picture-in-picture",n.setAttribute("allowfullscreen",""),n.setAttribute("title","Video player"),n}(s);t.appendChild(l),n&&(n.style.display="none"),o.classList.add("fade-out")}o.addEventListener("click",i),n&&n.addEventListener("click",i)}(n)}),document.addEventListener("click",function(e){const n=e.target,t=n.closest(".Video__thumb"),o=n.closest(".Video__play");if(t||o){const a=n.closest(".Video--container");a&&setTimeout(function(){!function(e){document.querySelectorAll(".Video--container").forEach(function(t){t!==e&&t.querySelector(".Video__iframe iframe")&&function(e){const n=e.querySelector(".Video__iframe");if(!n)return;const t=n.querySelector("iframe");if(t){t.remove();const o=e.querySelector(".Video__thumb"),a=e.querySelector(".Video__play");o&&o.classList.remove("fade-out"),a&&(a.style.display="")}}(t)})}(a)},100)}}))}const ht="wsVosBasket",Pe=["location","package","term","mail","intercom","phone"],x=e=>String(e??"").replace(/[&<>"']/g,n=>({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"}[n])),ge_tick='<svg viewBox="0 0 16 16" aria-hidden="true"><path d="M3 8.5l3 3 7-7" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"/></svg>',ge_tickInk='<svg viewBox="0 0 16 16" aria-hidden="true"><path d="M3 8.5l3 3 7-7" fill="none" stroke="#00312d" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"/></svg>',ge_info='<svg viewBox="0 0 20 20" aria-hidden="true"><circle cx="10" cy="10" r="8.25" fill="none" stroke="currentColor" stroke-width="1.5"/><path d="M10 9v5" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"/><circle cx="10" cy="6.2" r="1.1" fill="currentColor"/></svg>',ge_close='<svg viewBox="0 0 18 18" aria-hidden="true"><path d="M3 3l12 12M15 3L3 15" stroke="currentColor" stroke-width="2" stroke-linecap="round"/></svg>',ge_reset='<svg viewBox="0 0 16 16" aria-hidden="true"><path d="M13 8a5 5 0 1 1-1.6-3.66" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round"/><path d="M13 2.2V5.2H10" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"/></svg>',Za={eyebrow:"Virtual Office at",location_placeholder:"Choose your business centre",change_location:"Change",add_location_label:"Add location",add_location_title:"Purchasing services for more than one location?",add_location_text:"Please complete a separate checkout for each location. Once your first purchase is complete, you may return to choose your next location.",term_annual:"Pay annually",term_annual_note:"Save {saving}",term_annual_note_plain:"Annual only",term_monthly:"Pay monthly",term_monthly_note:"3-month minimum",term_monthly_unavailable:"Not available",annual_only_note:"{package} is an annual plan.",annual_centre_note:"This centre offers annual plans only.",fine_print:"All prices exclude VAT. Your details will be collected on the next page, and any additional information we need will be confirmed by email after payment.",total_label:"Total today",total_empty_hint:"Choose a package",vat_note:"Includes {vat} VAT",show_breakdown:"Show breakdown",hide_breakdown:"Hide breakdown",breakdown_vat:"VAT ({rate}%)",breakdown_then:"Then {total} inc VAT {per_long}. Prices exclude VAT.",monthly_terms_note:"Monthly plans have a 3-month minimum and one month's n
1otice.",continue:"Continue to checkout",continue_note:"Review your details before payment",need_location:"Choose a business centre to continue",need_package:"Choose a package to continue",need_phone:"Choose a telephone option to continue",location_title:"Choose your business centre",location_hint:"Terms vary by centre",location_prompt:"Select location",packages_title:"Choose your package",packages_hint:"Prices exclude VAT",mail_title:"Mail handling",mail_hint:"*T&Cs apply",mail_included:"Included",mail_note:"Choose the option that works best for you. Once you've chosen your option, we'll take care of the rest.",mail_faq_link:"Read our mail handling FAQs",extras_title:"Add-ons",extras_hint:"Optional",extras_included:"Included",phone_title:"Telephone services",phone_hint:"Choose one",phone_none_label:"I don't need a local telephone number",phone_none_sub:"No telephone number is added.",phone_none_text:"You might not need a business telephone number today. But as your business gets busier, having a dedicated local number can help you stay professional, protect your privacy and keep your personal mobile number offline.\nNo pressure. Add a telephone service whenever you're ready.",phone_after_title:"That's all we need for now",phone_after_text:"We'll collect your setup preferences after checkout.",phone_why_q:"Why do I need a local number?",phone_why_a:"A local telephone number gives your business a professional presence in the area, without needing to publish your personal mobile number. You can keep using the phone you already have.",phone_port_q:"Can an existing business number be transferred?",phone_port_a:"Possibly. In many cases, an existing UK business number can be transferred to our service. The transfer process and eligibility will depend on your current provider and number. We can confirm this after purchase.",popular_tag:"Most popular",annual_only_tag:"Annual only",recommended_tag:"Recommended",start_over:"Start over",start_over_aria:"Clear every selection and start again",start_over_confirm:"Are you sure?",start_over_yes:"Yes, start over",start_over_no:"Cancel"},Me={packages:[{key:"registered-office",title:"Registered Office PLUS+",summary:"A professional registered office address for your limited company.",popular:!1,annual_only:!0,price_annual:125,price_monthly:0,mail_options:!0,mail_keys:"scan, scan-originals",intercom:"hidden",tip:"Use a Workstation address as your company's registered office at Companies House. Statutory correspondence is handled in line with your selected service.",features:["Registered Office Address PLUS+","One Director's Service Address","Statutory mail scanned to you","Companies House and HMRC address"]},{key:"business-address",title:"Business Address",summary:"A professional business address for your everyday correspondence.",popular:!1,annual_only:!1,price_annual:250,price_monthly:25,mail_options:!0,mail_keys:"",intercom:"optional",tip:"Give your business a professional address for everyday correspondence and business communications, with mail handling options to suit your needs.",features:["Professional Business Address","One included mail name","Business mail handling","Use on your website, cards and invoices"]},{key:"complete-address",title:"Complete Address",summary:"Registered Office, Director's Service Address and Business Address in one.",popular:!0,annual_only:!1,price_annual:350,price_monthly:35,mail_options:!0,mail_keys:"",intercom:"included",tip:"Bring your business address needs together with our complete virtual office package, including a Registered Office Address, Director's Service Address and Business Address.",features:["Registered Office Address","Professional Business Address","One Director's Service Address","Statutory and business mail handling"]}],mail:[{key:"scan",title:"Scan & Email",summary:"Best if you mainly work digitally.",recommended:!0,price_annual:0,price_monthly:0,tip:"We open your mail, scan it and email it to you promptly. We keep the original for at least 30 days, after which we reserve the right to securely dispose of it as confidential waste.\nNeed an original during that time? Just email us and we'll forward it to you for a nominal handling charge, plus postage and packing.\nIf something can't be scanned and emailed, such as a bank card, don't worry: we'll automatically forward it to your nominated address instead, at no extra charge within the UK.\nWe won't normally scan or forward items clearly identifiable as unsolicited or junk mail.",followup:""}
1,{key:"scan-originals",title:"Scan & Email + Postal Mail",summary:"Best if you want everything digitally but still want your originals.",recommended:!1,price_annual:100,price_monthly:10,tip:"We scan and email your mail promptly, then retain your originals for your next scheduled quarterly dispatch, with UK postage included.\nInternational forwarding is also available, subject to additional postage charges.\nNeed a particular original sooner? Just email us and we'll forward it for a nominal handling charge, plus postage and packing.",followup:"Your preferred postal address"},{key:"postal",title:"Postal Mail Only",summary:"Best if you prefer to receive your mail unopened.",recommended:!1,price_annual:150,price_monthly:15,tip:"We keep your mail unopened and forward it to your nominated address by Royal Mail First Class as part of our regular weekday mail dispatches, with UK postage included.\nInternational forwarding is also available, subject to additional postage charges.",followup:"Your preferred forwarding address"},{key:"collection",title:"Collect My Mail",summary:"Best if you prefer to collect your mail in person.",recommended:!1,price_annual:100,price_monthly:10,tip:"We keep your mail unopened in your own dedicated physical mailbox, ready for you to collect 7 days a week, between 6am and 10pm.",followup:""}],phone:[{key:"divert",title:"Local Telephone Number + Call Divert",includes:"You answer. Calls come to your existing mobile or landline.",popular:!0,price_annual:140,price_monthly:14,tip:"Calls to your local business number are automatically diverted to your existing mobile or landline. You answer the call as normal, no additional phone is needed.",features:["Dedicated UK number","Forward to landline or mobile","Optional automated greeting"],followup:"Your preferred divert number and greeting"},{key:"answering",title:"Local Telephone Number + Virtual Receptionist",includes:"We answer, 24/7. Our receptionists answer in your business name.",popular:!1,price_annual:360,price_monthly:36,tip:"Our receptionists answer your calls 24/7 in your business name, following your instructions. They can take messages and, where required, attempt to transfer calls to you.",features:["Answered in your business name","24/7 answering","Transfer calls","Take messages"],followup:"Your call handling preferences"}],extras:[{key:"intercom",title:"Direct Intercom Access",summary:"Stay connected to visitors.",price_annual:50,price_monthly:5,tip:"When someone selects your business name at the door, the intercom calls your mobile so you can speak to them directly. Only available at selected business centres.",followup:"The mobile number your intercom should call"}]};let yt=null;const Qt=(e,n)=>{const t=e&&e.querySelector(n);if(!t)return null;try{return JSON.parse(t.textContent||"null")}catch{return null}},Ge=(e,n)=>{if(!Array.isArray(e))return n;const t=e.filter(o=>o&&(o.sku||o.key)&&o.title).map(o=>({...o,key:o.key||o.sku}));return t.length?t:n},Kt=e=>Array.isArray(e)?e:e?String(e).split("\n").map(n=>n.trim()).filter(Boolean):[],gt=e=>(e||"/").replace(/\/+$/,"")||"/",Xt=["hidden","optional","included"],ns=e=>{const n=Me.packages.find(i=>i.key===e.key)||{},t=void 0===e.mail_keys||null===e.mail_keys?n.mail_keys:e.mail_keys,o=Xt.includes(e.intercom)?e.intercom:n.intercom||"hidden",a=(e=>(Array.isArray(e)?e:String(e??"").split(",")).map(n=>String(n).trim()).filter(Boolean))(t);return{mail_keys:a,mail_options:a.length>0||!1!==e.mail_options,intercom:o}};function os(){const e=document.querySelector("[data-vos-config]"),n=Qt(e,"[data-vos-catalogue]")||{},t=((e,n)=>{const t={...e};return n&&Object.values(n).forEach(o=>{!o||"object"!=typeof o||Object.entries(o).forEach(([a,i])=>{null!=i&&""!==String(i).trim()&&(t[a]=i)})}),t})(Za,Qt(e,"[data-vos-copy]")),o=Ge(n.packages,Me.packages).map(r=>({...r,...ns(r),features:Kt(r.features),price_annual:Number(r.price_annual)||0,price_monthly:Number(r.price_monthly)||0})),a=Ge(n.mail,Me.mail).map(r=>({...r,price_annual:Number(r.price_annual)||0,price_monthly:Number(r.price_monthly)||0})),i=Ge(n.extras,Me.extras).map(r=>({...r,price_annual:Number(r.price_annual)||0,price_monthly:Number(r.price_monthly)||0}
1)),s=Ge(n.phone,Me.phone).map(r=>({...r,features:Kt(r.features),price_annual:Number(r.price_annual)||0,price_monthly:Number(r.price_monthly)||0})),l=[],c=e&&e.querySelector("template[data-vos-locations]");return c&&c.content.querySelectorAll("option[value]").forEach(r=>{r.value&&l.push({id:r.value,label:r.dataset.label||r.textContent.trim(),city:r.dataset.city||"",building:r.dataset.building||r.dataset.label||"",address:r.dataset.address||"",postcode:r.dataset.postcode||"",image:r.dataset.image||"",terms:(r.dataset.terms||"annual monthly").trim().split(/\s+/).filter(Boolean),intercom:"true"===r.dataset.intercom})}),{packages:o,mail:a,extras:i,phone:s,locations:l,copy:t,vat:Number(e&&e.dataset.vat)||20,checkoutPath:gt((()=>{try{return new URL(e&&e.dataset.checkoutUrl||"/buy-your-vos",window.location.href).pathname}catch{return"/buy-your-vos"}})()),checkoutUrl:e&&e.dataset.checkoutUrl||"/buy-your-vos",termsUrl:e&&e.dataset.termsUrl||"",mailFaqUrl:e&&e.dataset.mailFaqUrl||"",workerUrl:(e&&e.dataset.workerUrl||"").replace(/\/$/,"")}}const X=()=>(yt||(yt=os()),yt),Zt="wsVosCatalogue";let _t=[];const en=e=>{if(!e)return!1;const n=X();let t=!1;return[["packages",n.packages],["mail",n.mail],["extras",n.extras],["phone",n.phone]].forEach(([o,a])=>{const i=e[o];i&&a.forEach(s=>{const l=i[s.key];l&&("number"==typeof l.annual&&l.annual!==100*s.price_annual&&(s.price_annual=l.annual/100,t=!0),"number"==typeof l.monthly&&l.monthly!==100*s.price_monthly&&(s.price_monthly=l.monthly/100,t=!0),"packages"===o&&null===l.monthly&&(s.annual_only=!0),"packages"===o&&Array.isArray(l.mail)&&(t=t||l.mail.join()!==s.mail_keys.join(),s.mail_keys=l.mail,s.mail_options=l.mail.length>0),"packages"===o&&Xt.includes(l.intercom)&&l.intercom!==s.intercom&&(s.intercom=l.intercom,t=!0),l.sku&&(s.sku=l.sku))})}),t},rs=async()=>{const{workerUrl:e}=X();if(!e)return;const n=(()=>{try{const e=JSON.parse(sessionStorage.getItem(Zt)||"null");if(e&&Date.now()-e.at<3e5)return e.value}catch{}return null})();if(n)return en(n),void _t.forEach(t=>t());try{const t=await fetch(`${e}/api/catalog`);if(!t.ok)throw new Error("catalog unavailable");const o=await t.json();try{sessionStorage.setItem(Zt,JSON.stringify({at:Date.now(),value:o}))}catch{}en(o),_t.forEach(a=>a())}catch{}},tn=e=>{_t.push(e)},bt=e=>Object.fromEntries(Pe.map(n=>[n,e[n]??null])),nn=()=>{try{const e=JSON.parse(localStorage.getItem(ht)||"null");if(e&&"object"==typeof e)return{location:null,package:null,term:"annual",mail:"scan",intercom:null,phone:null,...bt(e)}}catch{}return{location:null,package:null,term:"annual",mail:"scan",intercom:null,phone:null}},Be=e=>{try{localStorage.setItem(ht,JSON.stringify({...bt(e),updatedAt:Date.now()}))}catch{}},Qe=()=>{try{localStorage.removeItem(ht)}catch{}},on=e=>{const n=new URLSearchParams(e),t={};return Pe.forEach(o=>{n.get(o)&&(t[o]=n.get(o))}),t},an=e=>{const n=new URLSearchParams;return Pe.forEach(t=>{e[t]&&n.set(t,e[t])}),n.toString()},Ke=(e,n)=>e.find(t=>t.key===n)||null,ue=e=>X().locations.find(n=>n.id===e.location)||null,ce=e=>Ke(X().packages,e.package),sn=e=>Ke(X().mail,e.mail),vt=e=>Ke(X().phone,e.phone),Xe=()=>Ke(X().extras,"intercom"),rn=e=>{if(!e||!e.mail_options)return[];const n=X().mail;return e.mail_keys&&e.mail_keys.length?n.filter(t=>e.mail_keys.includes(t.key)):n},Re=e=>{const n=ce(e),t=ue(e);return n&&t&&t.intercom&&Xe()&&("optional"===n.intercom||"included"===n.intercom)?n.intercom:null},ln=e=>{const n=Re(e);return"included"===n||"optional"===n&&!!e.intercom},_e=(e,n)=>"monthly"===n?e.price_monthly||0:e.price_annual||0,ae=e=>`£${Number.isInteger(e)?e.toLocaleString("en-GB"):e.toFixed(2)}`,St=e=>{const n=ce(e);if(!n)return[];const t=n.annual_only?"annual":e.term,o=[{label:`${n.title} (${"monthly"===t?"monthly":"annual"})`,amount:_e(n,t)}];if(n.mail_options){const i=sn(e);i&&o.push({label:i.title,amount:_e(i,t),included:0===_e(i,t)})}if(ln(e)){const i=Xe(),s="included"===Re(e)?0:_e(i,t);o.push({label:i.title,amount:s,included:0===s})}const a=vt(e);return a&&o.push({label:a.title,amount:_e(a,t)}),o},Fe=e=>{const n=X().vat/100,t=St(e).reduce((a,i)=>a+i.amount,0),o=Math.round(t*n*100)/100;return{sub:t,vat:o,total:Math.round(100*(t+o))/100}},cn=e=>!(!ue(e)||!ce(e)),Ee=(e,n)=>String(e??"").replace(/\{(\w+)\}/g,(t,o)=>void 0===n[o]?t:n[o]);let R={location:null,package:null,term:"annual",mail:"scan",intercom:null,phone:null};let ee={tip:null,breakdown:!1,changeLoc:!1,addLoc:!1,confirmReset:!1,touched:{}},re=null,se=null,De=null,Ze=null,kt=null;const $t=()=>"monthly"===R.term?"/mo":"/yr",un=e=>e&&e.price_monthly?12*e.price_monthly-e.price_annual:0,Et=()=>{const e=ce(R);return(()=>{const e=ue(R);return e?e.terms:["monthly","annual"]})().includes("monthly")&&!(e&&e.annual_only)},dn=e=>{const n=X().termsUrl;return n?e.replace("T&amp;Cs",`<a href="${x(n)}" target="_blank" rel="noopener">T&amp;Cs</a>`):e},Ue=e=>String(e??"").split("\n").map(n=>
1n.trim()).filter(Boolean).map(n=>`<p>${x(n)}</p>`).join(""),pn=(e,n,t)=>{if(!n||!t)return"";const o=ee.tip===e;return`<div class="VosFaq__item">\n    <button type="button" class="VosFaq__q" data-tip="${x(e)}" data-fkey="tip-${x(e)}" aria-expanded="${o}" aria-controls="vostip-${x(e)}">${ge_info}<span>${x(n)}</span></button>\n    <div class="VosFaq__a" id="vostip-${x(e)}" ${o?"":"hidden"}>${Ue(t)}</div>\n  </div>`},He=({group:e,id:n,name:t,priceHtml:o,sub:a,tags:i="",checked:s,tip:l,features:c,kind:r="radio",fixed:u=!1})=>{const m=ee.tip===n,h=!!l;return`<li class="VosOpt ${"check"===r?"VosOpt--check":""} ${s?"is-checked":""} ${u?"is-fixed":""}">\n    <div class="VosOpt__main">\n      <label class="VosOpt__row">\n        <input class="visually-hidden" type="${"check"===r?"checkbox":"radio"}" name="${e}" value="${x(n)}" data-fkey="${e}-${x(n)}" ${s?"checked":""} ${u?"disabled":""}>\n        <span class="VosOpt__name">${x(t)}${i}${a?`<span class="VosOpt__sub">${x(a)}</span>`:""}</span>\n        <span class="VosOpt__price">${o}</span>\n        ${h?'<span class="VosOpt__gap" aria-hidden="true"></span>':""}\n        <span class="VosOpt__ctrl">${ge_tickInk}</span>\n      </label>\n      ${h?((e,n,t)=>`<button type="button" class="VosTip" data-tip="${x(e)}" data-fkey="tip-${x(e)}" aria-expanded="${t}" aria-controls="vostip-${x(e)}" aria-label="About ${x(n)}">${ge_info}</button>`)(n,t,m):""}\n    </div>\n    ${h?((e,n,t,o)=>`<div class="VosOpt__tip" id="vostip-${x(e)}" ${o?"":"hidden"}>${Ue(n)}${t&&t.length?`<ul>${t.map(a=>`<li>${x(a)}</li>`).join("")}</ul>`:""}</div>`)(n,l,c,m):""}\n  </li>`},pe=()=>{const e=document.activeElement,n=e&&se.contains(e)?e.getAttribute("data-fkey"):null,t=n&&"number"==typeof e.selectionStart?[e.selectionStart,e.selectionEnd]:null,o=se.querySelector(".VosPanel__body"),a=o?o.scrollTop:0;se.innerHTML=`${(()=>{const e=X().copy,n=ue(R),t=ce(R);let o="";t&&t.annual_only?o=Ee(e.annual_only_note,{package:t.title}):n&&!n.terms.includes("monthly")&&(o=e.annual_centre_note);const a=t?un(t):Math.max(0,...X().packages.map(un)),i=a>0?Ee(e.term_annual_note,{saving:ae(a)}):e.term_annual_note_plain;if(!n||ee.changeLoc)return`<header class="VosPanel__head VosPanel__head--picking">\n      <button type="button" class="VosPanel__close" data-act="close" aria-label="Close">${ge_close}</button>\n      <h2 class="VosPanel__title" id="vospanel-title">${x(e.location_placeholder)}</h2>\n      <div class="VosSelect">\n        <label class="visually-hidden" for="vos-loc">${x(e.location_title)}</label>\n        <select id="vos-loc" data-act="loc" data-fkey="loc" required>\n          <option value="" ${R.location?"":"selected"} disabled>${x(e.location_prompt)}</option>\n          ${X().locations.map(c=>`<option value="${x(c.id)}" ${c.id===R.location?"selected":""}>${x(c.label)}</option>`).join("")}\n        </select>\n      </div>\n      ${e.location_hint?`<p class="VosPanel__pickhint">${x(e.location_hint)}</p>`:""}\n    </header>`;const l=n.image?`<span class="VosPanel__thumb"><img src="${x(n.image)}" alt="" width="64" height="64" loading="lazy" decoding="async"></span>`:"";return`<header class="VosPanel__head">\n    <button type="button" class="VosPanel__close" data-act="close" aria-label="Close">${ge_close}</button>\n    <div class="VosPanel__place">\n      ${l}\n      <p class="VosPanel__eyebrow">${x(e.eyebrow)}</p>\n      <h2 class="VosPanel__title" id="vospanel-title">${x(n.label)}</h2>\n      <p class="VosPanel__changerow"><button type="button" class="VosPanel__changeloc" data-act="changeloc" data-fkey="changeloc">${x(e.change_location)}</button>${e.add_location_label?`<button type="button" class="VosPanel__changeloc" data-act="addloc" data-fkey="addloc" aria-expanded="${ee.addLoc}" aria-controls="vospanel-addloc">${x(e.add_location_label)}</button>`:""}</p>\n      ${e.add_location_label?`<div class="VosPanel__addloc" id="vospanel-addloc" ${ee.addLoc?"":"hidden"}>\n        <h3>${x(e.add_location_title)}</h3>\n        ${String(e.add_location_text||"").split("\n").filter(c=>c.trim()).map(c=>`<p>${x(c.trim())}</p>`).join("")}\n      </div>`:""}\n    </div>\n    <div class="VosTerms" role="group" aria-label="Billing term">\n      <button type="button" data-act="term" data-term="annual" data-fkey="term-annual" aria-pressed="${"annual"===R.term}">${x(e.term_annual)}<small>${x(i)}</small></button>\n      <button type="button" data-act="term" data-term="monthly" data-fkey="term-monthly" aria-pressed="${"monthly"===R.term}" ${Et()?"":"disabled"}>${x(e.term_monthly)}<small>${x(Et()?e.term_monthly_note:e.term_monthly_unavailable)}</small></button>\n    </div>\n    ${o?`<p class="VosPanel__termnote">${x(o)}</p>`:""}\n  </header>`})()}<div class="VosPanel__body">${(()=>{const e=X().copy,n=!ue(R);return`<section class="VosSection ${n?"is-locked":""}" ${n?"inert":""} aria-labelledby="vos-s-pkg">\n    <div class="VosSection__head"><h3 class="VosSection__title" id="vos-s-pkg">${x(e.packages_title)}</h3><span class="VosSection__hint">${x(e.packages_hint)}</span></div>\n    <ul class="VosOpts" role="radiogroup" aria-labelledby="vos-s-pkg">\n      ${X().packages.map(t=>{const a="monthly"!==R.term||t.annual_only?`${ae(t.price_annual)}<small>/yr</small>`:`${ae(t.price_monthly)}<small>/mo</small>
1`,i=[t.popular?`<span class="VosTag">${x(e.popular_tag)}</span>`:"","monthly"===R.term&&t.annual_only?`<span class="VosTag VosTag--quiet">${x(e.annual_only_tag)}</span>`:""].join("");return He({group:"pkg",id:t.key,name:t.title,priceHtml:a,tags:i,sub:t.summary,checked:R.package===t.key,tip:t.tip,features:t.features})}).join("")}\n    </ul>\n  </section>`})()}${(()=>{const e=X().copy,n=ce(R),t=n?rn(n):X().mail;if(!t.length)return"";const o=!n||!ue(R);return`<section class="VosSection ${o?"is-locked":""}" ${o?"inert":""} aria-labelledby="vos-s-mail">\n    <div class="VosSection__head"><h3 class="VosSection__title" id="vos-s-mail">${x(e.mail_title)}</h3><span class="VosSection__hint">${dn(x(e.mail_hint))}</span></div>\n    <ul class="VosOpts" role="radiogroup" aria-labelledby="vos-s-mail">\n      ${t.map(a=>{const i=_e(a,R.term),s=i>0?`+${ae(i)}<small>${$t()}</small>`:x(e.mail_included),l=a.recommended?`<span class="VosTag">${x(e.recommended_tag)}</span>`:"";return He({group:"mail",id:a.key,name:a.title,priceHtml:s,tags:l,sub:a.summary,checked:R.mail===a.key,tip:a.tip})}).join("")}\n    </ul>\n    ${e.mail_note?`<div class="VosSection__note">${Ue(e.mail_note)}</div>`:""}\n    ${X().mailFaqUrl&&e.mail_faq_link?`<p class="VosSection__more"><a href="${x(X().mailFaqUrl)}" target="_blank" rel="noopener">${x(e.mail_faq_link)}</a></p>`:""}\n  </section>`})()}${(()=>{const e=X().copy,n=Re(R),t=Xe();if(!n||!t)return"";const o="included"===n,a=_e(t,R.term);return`<section class="VosSection" aria-labelledby="vos-s-extras">\n    <div class="VosSection__head"><h3 class="VosSection__title" id="vos-s-extras">${x(e.extras_title)}</h3>${o?"":`<span class="VosSection__hint">${x(e.extras_hint)}</span>`}</div>\n    <ul class="VosOpts">\n      ${He({group:"extra",id:t.key,name:t.title,sub:t.summary,priceHtml:o?x(e.extras_included):`+${ae(a)}<small>${$t()}</small>`,checked:o||!!R.intercom,fixed:o,tip:t.tip,kind:"check"})}\n    </ul>\n  </section>`})()}${(()=>{const e=X().copy,t=!ce(R)||!ue(R),o="none"===R.phone,a=vt(R),i=Math.min(...X().phone.map(s=>s.price_monthly||1/0));return`<section class="VosSection ${t?"is-locked":""}" ${t?"inert":""} aria-labelledby="vos-s-phone">\n    <div class="VosSection__head"><h3 class="VosSection__title" id="vos-s-phone">${x(e.phone_title)}</h3><span class="VosSection__hint">${x(e.phone_hint)}</span></div>\n    <ul class="VosOpts" role="radiogroup" aria-labelledby="vos-s-phone">\n      ${X().phone.map(s=>He({group:"phone",id:s.key,name:s.title,tags:s.popular?`<span class="VosTag">${x(e.popular_tag)}</span>`:"",sub:s.includes,priceHtml:`+${ae(_e(s,R.term))}<small>${$t()}</small>`,checked:R.phone===s.key,tip:s.tip,features:s.features})).join("")}\n      ${He({group:"phone",id:"none",name:e.phone_none_label,sub:e.phone_none_sub,priceHtml:"",checked:o})}\n    </ul>\n    ${o&&e.phone_none_text?`<div class="VosNudge"><span class="VosNudge__tick" aria-hidden="true">${ge_tick}</span><div>${Ue(Ee(e.phone_none_text,{price:Number.isFinite(i)?ae(i):""}))}</div></div>`:""}\n    ${a&&e.phone_after_title?`<div class="VosNudge VosNudge--done"><span class="VosNudge__tick" aria-hidden="true">${ge_tick}</span><div><strong>${x(e.phone_after_title)}</strong>${Ue(e.phone_after_text)}</div></div>`:""}\n    <div class="VosFaq">${pn("faq-why",e.phone_why_q,e.phone_why_a)}${pn("faq-port",e.phone_port_q,e.phone_port_a)}</div>\n  </section>`})()}<p class="VosPanel__fine">${x(X().copy.fine_print)}</p></div>${(()=>{const e=X().copy,n=Fe(R),t=cn(R),o=St(R);return`<footer class="VosPanel__foot">\n    ${ee.breakdown&&t?`<div class="VosBreak" id="vos-break">\n      ${o.map(a=>`<div class="VosBreak__row"><span>${x(a.label)}</span><span>${a.included?x(e.mail_included):ae(a.amount)}</span></div>`).join("")}\n      <div class="VosBreak__row"><span>${x(Ee(e.breakdown_vat,{rate:X().vat}))}</span><span>${ae(n.vat)}</span></div>\n      <div class="VosBreak__row VosBreak__row--total"><span>${x(e.total_label)}</span><span>${ae(n.total)}</span></div>\n      <p class="VosBreak__then">${x(Ee(e.breakdown_then,{total:ae(n.total),per_long:"monthly"===R.term?"per month":"per year"}))}${"monthly"===R.term?` ${x(e.monthly_terms_note)}`:""}</p>\n    </div>`:""}\n    <div class="VosTotal">
1\n      <span class="VosTotal__label">${x(e.total_label)}</span>\n      <span class="VosTotal__amount ${t?"":"is-empty"}" aria-live="polite">${t?ae(n.total):"£—"}</span>\n      <button type="button" class="VosTotal__toggle" data-act="breakdown" data-fkey="breakdown" aria-expanded="${ee.breakdown}" aria-controls="vos-break" ${t?"":"hidden"}>${x(ee.breakdown?e.hide_breakdown:e.show_breakdown)}</button>\n      <span class="VosTotal__vat">${x(t?Ee(e.vat_note,{vat:ae(n.vat)}):e.total_empty_hint)}</span>\n    </div>\n    <button type="button" class="VosBtn VosBtn--green VosBtn--lg VosPanel__cta" data-act="continue" data-fkey="continue" aria-disabled="${!t}">${x(e.continue)}</button>\n    <div class="VosPanel__ctarow">\n      <span>${x(e.continue_note)}</span>\n      ${ee.confirmReset?`<span class="VosConfirm" role="group" aria-labelledby="vos-reset-q"><span class="VosConfirm__q" id="vos-reset-q">${x(e.start_over_confirm)}</span><button type="button" class="VosConfirm__yes" data-act="reset-yes" data-fkey="reset-yes">${x(e.start_over_yes)}</button><button type="button" class="VosConfirm__no" data-act="reset-no" data-fkey="reset-no">${x(e.start_over_no)}</button></span>`:`<button type="button" class="VosPanel__reset" data-act="reset" data-fkey="reset" aria-label="${x(e.start_over_aria)}">${ge_reset}${x(e.start_over)}</button>`}\n    </div>\n  </footer>`})()}<div class="VosToast" role="status" aria-live="assertive" data-toast></div>`,De=se.querySelector("[data-toast]");const i=se.querySelector(".VosPanel__body");if(i&&(i.scrollTop=a),n){const s=se.querySelector(`[data-fkey="${n}"]`);if(s&&(s.focus({preventScroll:!0}),t&&"function"==typeof s.setSelectionRange))try{s.setSelectionRange(t[0],t[1])}catch{}}};let fn;const Lt=e=>{De&&(De.textContent=e,De.classList.add("is-on"),clearTimeout(fn),fn=setTimeout(()=>De.classList.remove("is-on"),2600))},et=()=>{const e=ce(R);e&&e.annual_only&&(R.term="annual"),!Et()&&"monthly"===R.term&&(R.term="annual");const n=e?rn(e):X().mail,t=n[0]||X().mail[0];t&&!n.some(o=>o.key===R.mail)&&(R.mail=t.key),"optional"!==Re(R)&&(R.intercom=null)},Le=e=>{Object.assign(R,e),et(),Be(R),pe()};let mn;const Ct=e=>{clearTimeout(mn),mn=setTimeout(()=>{const n=se&&se.querySelector(".VosPanel__body"),t=n&&n.querySelector(`#${e}`),o=t&&t.closest(".VosSection");if(!o)return;const a=o.nextElementSibling&&o.nextElementSibling.matches(".VosSection")?o.nextElementSibling:o.querySelector(".VosNudge");if(!a)return;const i=!window.matchMedia("(prefers-reduced-motion: reduce)").matches,s=n.getBoundingClientRect(),l=a.getBoundingClientRect();if(a.matches(".VosSection")){const c=l.top-s.top-12;c>24&&n.scrollBy({top:c,behavior:i?"smooth":"auto"})}else l.bottom>s.bottom&&n.scrollBy({top:l.bottom-s.bottom+16,behavior:i?"smooth":"auto"})},250)},At=(e,n)=>{const t=!n&&!ee.touched[e];return ee.touched[e]=!0,t&&("phone"===e||!R.phone)},bs=e=>{const n=e.target.closest("[data-act], [data-tip], input");if(!n)return;if(n.matches("[data-tip]"))return ee.tip=ee.tip===n.dataset.tip?null:n.dataset.tip,void pe();if(n.matches('input[name="pkg"]')){const o=At("pkg",!!R.package);return Le({package:n.value}),void(o&&Ct("vos-s-pkg"))}if(n.matches('input[name="mail"]')){const o=At("mail",!1);return Le({mail:n.value}),void(o&&Ct("vos-s-mail"))}if(n.matches('input[name="extra"]'))return Le({intercom:n.checked?"1":null});if(n.matches('input[name="phone"]')){const o=At("phone",!!R.phone);return Le({phone:n.value}),void(o&&Ct("vos-s-phone"))}const t=n.dataset.act;if(ee.confirmReset&&"reset-yes"!==t&&"reset-no"!==t&&(ee.confirmReset=!1),"close"===t)tt();else if("reset"===t){ee.confirmReset=!0,pe();const o=se.querySelector('[data-act="reset-no"]');o&&o.focus()}else if("reset-no"===t){ee.confirmReset=!1,pe();const o=se.querySelector('[data-act="reset"]');o&&o.focus()}else if("reset-yes"===t&&gt(window.location.pathname)===X().checkoutPath)Qe(),window.location.href=window.location.pathname;else if("reset-yes"===t){Qe(),R={location:null,package:null,term:"annual",mail:"scan",intercom:null,phone:null},ee={tip:null,breakdown:!1,changeLoc:!1,addLoc:!1,confirmReset:!1,touched:{}},et(),Be(R),pe();const o=se.querySelector("#vos-loc");o&&o.focus()}else if("term"===t)n.disabled||Le({term:n.dataset.term});else if("addloc"===t)ee.addLoc=!ee.addLoc,pe();else if("changeloc"===t){ee.changeLoc=!0,pe();const o=se.querySelector("#vos-loc");o&&o.focus()}else if("breakdown"===t)ee.breakdown=!ee.breakdown,pe();else if("continue"===t){const o=X().copy;if(!ue(R)){Lt(o.need_location);const a=se.querySelector("#vos-loc");return void(a&&a.focus())}if(!ce(R)){Lt(o.need_package);const a=se.querySelector('input[name="pkg"]');return void(a&&a.focus())}if(!R.phone){Lt(o.need_phone);const a=se.querySelector('input[name="phone"]');return void(a&&(a.closest(".VosSection").scrollIntoView({block:"start",behavior:"smooth"}),a.focus({preventScroll:!0})))}
1Be(R),kt?(kt(bt(R)),tt()):window.location.href=`${X().checkoutUrl}?${an(R)}`}},vs=e=>{e.target.matches("#vos-loc")&&(ee.changeLoc=!1,Le({location:e.target.value}))},xt=(e={},n)=>{re||(re=document.createElement("dialog"),re.className="VosPanel",re.setAttribute("aria-labelledby","vospanel-title"),se=document.createElement("div"),se.className="VosPanel__inner",re.appendChild(se),document.body.appendChild(re),se.addEventListener("click",bs),se.addEventListener("change",vs),re.addEventListener("click",e=>{e.target===re&&tt()}),re.addEventListener("cancel",e=>{e.preventDefault(),tt()})),Ze=n||document.activeElement,R={...nn(),...Object.fromEntries(Object.entries(e).filter(([o,a])=>Pe.includes(o)&&a))},e.package&&!e.location&&(R.location=null),ee={tip:null,breakdown:!1,changeLoc:!1,addLoc:!1,confirmReset:!1,touched:{}},et(),Be(R),pe(),document.body.classList.add("has-vos-panel"),re.showModal(),setTimeout(()=>re.classList.add("is-open"),20);const t=se.querySelector(R.location?".VosPanel__close":"#vos-loc");t&&t.focus({preventScroll:!0})},tt=()=>{if(!re||!re.open)return;const e=()=>{re.close(),document.body.classList.remove("has-vos-panel"),Ze&&Ze.focus&&Ze.focus()};re.classList.remove("is-open"),window.matchMedia("(prefers-reduced-motion: reduce)").matches?e():re.addEventListener("transitionend",e,{once:!0})},Es=e=>{if(e.defaultPrevented||0!==e.button||e.metaKey||e.ctrlKey||e.shiftKey||e.altKey)return;const n=e.target.closest("[data-vos-buy], a[href]");!n||n.closest(".VosPanel")||!n.hasAttribute("data-vos-buy")&&!(e=>{const n=e.getAttribute("href");if(!n||n.startsWith("#"))return!1;try{const t=new URL(n,window.location.href);return t.origin===window.location.origin&&gt(t.pathname)===X().checkoutPath}catch{return!1}})(n)||"off"!==n.dataset.vosBuy&&(e.preventDefault(),xt((e=>{const n={location:e.dataset.location||null,package:e.dataset.package||null,term:e.dataset.term||null},t=e.getAttribute&&e.getAttribute("href");if(t)try{const o=new URL(t,window.location.href),a=on(o.search);Pe.forEach(i=>{a[i]&&!n[i]&&(n[i]=a[i])}),a.mail&&(n.mail=a.mail),a.phone&&(n.phone=a.phone)}catch{}return n})(n),n))},C=e=>String(e??"").replace(/[&<>"']/g,n=>({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"}[n])),hn='<svg viewBox="0 0 16 16" aria-hidden="true"><path d="M3 8.5l3 3 7-7" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"/></svg>',Ce='<svg viewBox="0 0 16 16" aria-hidden="true" focusable="false"><path d="M8 1.6l6.4 11.2H1.6L8 1.6z" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linejoin="round"/><path d="M8 6.2v3.1" stroke="currentColor" stroke-width="1.6" stroke-linecap="round"/><circle cx="8" cy="11.3" r="0.9" fill="currentColor"/></svg>',yn=/^[^@\s]+@[^@\s]+\.[^@\s]+$/;function xs(e){const n=X(),t=function(e){const n={...Vs},t=e.querySelector("[data-vos-order-copy]");if(!t)return n;let o=null;try{o=JSON.parse(t.textContent||"null")}catch{return n}return o&&Object.values(o).forEach(a=>{!a||"object"!=typeof a||Object.entries(a).forEach(([i,s])=>{null!=s&&""!==String(s).trim()&&(n[i]=s)})}),n}(e),o=(e.dataset.worker||n.workerUrl||"").replace(/\/$/,""),a=e.querySelector("[data-vos-order-main]"),i=e.querySelector("[data-vos-order-aside]"),s=e.querySelector("[data-vos-order-bar]");if(!a||!i)return;let l={...nn(),...on(window.location.search)};Be(l);const c=()=>{const d=an(l);window.history.replaceState(null,"",`${window.location.pathname}${d?`?${d}`:""}`)};c();const r={first:"",last:"",email:"",phone:"",inc:null,manualName:"",consent:!1,company:null,manual:!1,tried:!1,paid:!1,barOpen:!1,confirmRestart:!1},u={query:"",loading:!1,results:null,note:null,open:!1};let m=null,h=!1,E="details",y=null,f=null;const g=()=>{const d={};return r.first.trim()||(d.first=t.err_first),r.last.trim()||(d.last=t.err_last),yn.test(r.email)||(d.email=t.err_email),r.phone.replace(/\D/g,"").length<10&&(d.phone=t.err_phone),r.inc||(d.inc=t.err_inc),"yes"===r.inc&&!r.manual&&!r.company&&(d.company=t.err_company),("yes"===r.inc&&r.manual||r.inc&&"yes"!==r.inc)&&!r.manualName.trim()&&(d.manualName=t.err_business_name),r.consent||(d.consent=t.err_consent),d},S='<span class="VosField__req" aria-hidden="true">*</span>',b=(d,w,$,N={})=>{const j=r.tried&&g()[d];return`<div class="VosField ${N.full?"VosField--full":""} ${N.msg2?"VosField--msg2":""} ${j?"is-invalid":""}">\n      <label for="vos-f-${d}">${C(w)}${S}</label>\n      <input id="vos-f-${d}" name="${d}" type="${$}" value="${C(r[d])}" aria-required="true" autocomplete="${N.auto||"off"}" ${N.inputmode?`inputmode="${N.inputmode}"`:""} ${j?`aria-describedby="vos-e-${d}" aria-invalid="true"`:""}>\n      ${j?`<span class="VosField__err VosField__slot" id="vos-e-${d}">${Ce}${C(j)}</span>`:N.hint?`<span class="VosField__hint VosField__slot">${C(N.hint)}</span>`:""}\n    </div>`};let k=!1;const P=(d,w,$)=>`<button type="button" class="VosChip" data-chip="${d}" data-val="${w}" aria-pressed="${r[d]===w}">${hn}${C($)}</button>`;let T=null;const B=()=>
1{if("details"!==E)return;const d=document.activeElement,w=d&&a.contains(d)?d.getAttribute("name"):null,$=w&&"number"==typeof d.selectionStart?[d.selectionStart,d.selectionEnd]:null,N=Fe(l),j=(()=>{const d=[],w=ce(l),$=sn(l),N=vt(l);w&&w.mail_options&&$&&$.followup&&d.push($.followup);const j=Xe();return ln(l)&&j&&j.followup&&d.push(j.followup),N&&N.followup&&d.push(N.followup),N&&t.followup_number&&d.push(t.followup_number),t.followup_names&&d.push(t.followup_names),t.followup_id&&d.push(t.followup_id),d})(),Y=r.tried?Object.entries(g()):[],V={inc:"chQuery",company:"chQuery"},q=Y.length?`<div class="VosErrors" role="alert" tabindex="-1" data-error-summary>\n          <p class="VosErrors__title">${Ce}${C(t.errors_title)}</p>\n          <ul>${Y.map(([J,ne])=>`<li><button type="button" data-err-jump="${C(V[J]||J)}">${C(ne)}</button></li>`).join("")}</ul>\n        </div>`:"";if(a.innerHTML=`\n      ${q}\n      <section class="VosPanelCard" aria-labelledby="vos-h-you">\n        <div class="VosPanelCard__head"><h2 id="vos-h-you">${C(t.details_title)}</h2></div>\n        <div class="VosFields VosFields--2">\n          ${b("first",t.label_first,"text",{auto:"given-name"})}\n          ${b("last",t.label_last,"text",{auto:"family-name"})}\n          ${b("email",t.label_email,"email",{auto:"email",full:!0,hint:t.hint_email})}\n          ${b("phone",t.label_phone,"tel",{auto:"tel",inputmode:"tel",full:!0})}\n        </div>\n      </section>\n      ${(()=>{const d=r.tried?g():{};let w="";if("yes"!==r.inc||r.manual){if(r.inc){const $="yes"===r.inc?t.hint_legal_name:"no"===r.inc?t.hint_not_incorporated:t.hint_sole_trader;w=`<div class="VosFields">${b("manualName","yes"===r.inc?t.label_legal_name:t.label_trading_name,"text",{hint:$,auto:"organization",full:!0,msg2:"yes"!==r.inc})}\n        ${"yes"===r.inc?`<div><button type="button" class="VosBtn VosBtn--text" data-act="ch-back">${C(t.ch_back)}</button></div>`:""}</div>`}}else w=r.company?`<div class="VosChPick"><div><strong>${C(r.company.companyName)}</strong><small>
1Company no. ${C(r.company.companyNumber)} · ${C(r.company.companyStatus)}</small>${r.company.address?`<small>${C(r.company.address)}</small>`:""}</div><button type="button" data-act="ch-clear">${C(t.change_label)}</button></div>`:`<div class="VosField VosField--msg2 ${d.company?"is-invalid":""}">\n            <label for="vos-f-ch">${C(t.ch_label)}${S}</label>\n            <div class="VosCh" data-ch-box>\n              <input id="vos-f-ch" name="chQuery" type="search" aria-required="true" value="${C(u.query)}" placeholder="${C(t.ch_placeholder)}" autocomplete="off" role="combobox" aria-autocomplete="list" aria-expanded="${u.open}" aria-controls="vos-ch-list">\n            </div>\n            ${d.company?`<span class="VosField__err VosField__slot">${Ce}${C(d.company)}</span>`:`<span class="VosField__hint VosField__slot">${C(t.ch_hint)}</span>`}\n          </div>`;return`<section class="VosPanelCard" aria-labelledby="vos-h-biz">\n      <div class="VosPanelCard__head"><h2 id="vos-h-biz">${C(t.business_title)}</h2></div>\n      <div class="VosQRow VosQRow--reserve ${d.inc?"is-invalid":""}">\n        <p class="VosQRow__q" id="vos-q-inc">${C(t.inc_question)}</p>\n        ${t.inc_tip_q&&t.inc_tip_a?`<div class="VosFaq VosFaq--flush"><div class="VosFaq__item">\n          <button type="button" class="VosFaq__q" data-act="inc-tip" aria-expanded="${k}" aria-controls="vos-inc-tip"><svg viewBox="0 0 20 20" aria-hidden="true"><circle cx="10" cy="10" r="8.25" fill="none" stroke="currentColor" stroke-width="1.5"/><path d="M10 9v5" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"/><circle cx="10" cy="6.2" r="1.1" fill="currentColor"/></svg><span>${C(t.inc_tip_q)}</span></button>\n          <div class="VosFaq__a" id="vos-inc-tip" ${k?"":"hidden"}><p>${C(t.inc_tip_a)}</p></div>\n        </div></div>`:""}\n        <div class="VosChips" role="group" aria-labelledby="vos-q-inc">${P("inc","yes",t.inc_yes)}${P("inc","sole",t.inc_sole)}${P("inc","no",t.inc_no)}</div>\n        ${d.inc?`<span class="VosField__err VosField__slot">${Ce}${C(d.inc)}</span>`:""}\n      </div>\n      ${w?`<div class="VosQRow">${w}</div>`:""}\n    </section>`})()}\n      ${j.length?`<section class="VosPanelCard" aria-labelledby="vos-h-later">\n        <div class="VosPanelCard__head"><h2 id="vos-h-later">${C(t.later_title)}</h2></div>\n        <div class="VosLater"><p>${C(t.later_intro)}</p>\n          <ul>${j.map(J=>`<li>${C(J)}</li>`).join("")}</ul></div>\n      </section>`:""}\n      <section class="VosPanelCard" aria-labelledby="vos-h-pay">\n        <div class="VosPanelCard__head"><h2 id="vos-h-pay">${C(t.payment_title)}</h2></div>\n        <p class="VosPanelCard__lede">${C(t.payment_intro)}</p>\n        ${r.tried&&g().consent?`<p class="VosField__err">${Ce}${C(g().consent)}</p>`:""}\n        <div class="VosConsentBox ${r.tried&&g().consent?"is-invalid":""}">\n          <label class="VosConsent"><input type="checkbox" name="consent" ${r.consent?"checked":""}><span>${t.consent_text}</span></label>\n        </div>\n        ${T?`<div class="VosErrors VosErrors--inline" role="alert"><p class="VosErrors__title">${Ce}${C(T)}</p></div>`:""}\n        <button type="button" class="VosBtn VosBtn--green VosBtn--lg VosPay" data-act="pay">${C(t.pay_label)} · ${ae(N.total)}</button>\n        <p class="VosPay__note">${C(t.pay_note)}</p>\n      </section>`,w){const J=a.querySelector(`[name="${w}"]`);if(J&&(J.focus({preventScroll:!0}),$&&"function"==typeof J.setSelectionRange))try{J.setSelectionRange($[0],$[1])}catch{}}I()},F=(d="aside")=>{const w=ue(l),$=ce(l),N=Fe(l),j=!r.paid,Y=w.image?`<span class="VosSum__thumb"><img src="${C(w.image)}" alt="" width="44" height="44" loading="lazy" decoding="async"></span>`:"";return`<div class="VosSum">\n      <div class="VosSum__head"><h2>${C(t.summary_title)}</h2>${j?`<span class="VosSum__links">${t.add_location_label?`<button type="button" class="VosSum__change" data-act="add-loc" aria-expanded="${!!r.addLocOpen}" aria-controls="vos-addloc-${d}">${C(t.add_location_label)}</button>`:""}<button type="button" class="VosSum__change" data-act="change">${C(t.change_label)}</button></span>`:""}</div>\n      ${j&&t.add_location_label?`<div class="VosSum__note" id="vos-addloc-${d}" ${r.addLocOpen?"":"hidden"}>\n        <h3>${C(t.add_location_title)}</h3>\n        ${String(t.add_location_text||"").split("\n").filter(V=>V.trim()).map(V=>`<p>${C(V.trim())}</p>`).join("")}\n      </div>`:""}\n      <div class="VosSum__place">${Y}<div>\n        <p class="VosSum__loc">${C(w.label)}</p>\n        <p class="VosSum__pkg">${C($.title)} · ${"monthly"===l.term?C(t.term_monthly):C(t.term_annual)}</p>\n      </div></div>\n      <div class="VosSum__lines">\n        ${St(l).map(V=>`<div class="VosSum__line"><span>${C(V.label)}</span><span>${V.included?C(n.copy.mail_included):ae(V.amount)}</span></div>`).join("")}\n        <div class="VosSum__line VosSum__line--muted"><span>VAT (${n.vat}%)</span><span>${ae(N.vat)}</span></div>\n        <div class="VosSum__line VosSum__line--total"><span>${C(n.copy.total_label)}</span><span>${ae(N.total)}</span></div>\n      </div>\n      <p class="VosSum__then">${dn(C("monthly"===l.term?t.then_monthly:t.then_annual)).replace("{total}",ae(N.total))}</p>\n      ${j?`<div class="VosSum__acts">\n        <button type="button" class="VosBtn VosBtn--light VosBtn--block" data-act="copy">${C(t.copy_link)}</button>\n        ${r.confirmRestart?`<span class="VosConfirm VosConfirm--dark" role="group" aria-labelledby="vos-restart-q"><span class="VosConfirm__q" id="vos-restart-q">${C(t.start_again_confirm)}</span><button type="button" class="VosConfirm__yes" data-act="restart-yes">${C(t.start_again_yes)}</button><button type="button" class="VosConfirm__no" data-act="restart-no">${C(t.start_again_no)}</button></span>`:`<button type="button" class="VosSum__restart" data-act="restart">${C(t.start_again)}</button>`}\n      </div>`:""}\n    </div>`},Q=()=>{const d=ue(l),w=ce(l);if(!d||!w)return i.innerHTML=`<div class="VosSum"><div class="VosSum__head"><h2>${C(t.summary_title)}</h2></div><p class="VosSum__empty">${C(t.summary_empty)}</p><button type="button" class="VosBtn VosBtn--green VosBtn--block" style="margin-top:1rem" data-vos-buy>${C(t.summary_empty_cta)}</button></div>`,void(s&&(s.hidden=!0));if(i.innerHTML=F(),!s||(s.hidden=r.paid,r.paid))return;const $=Fe(l);s.innerHTML=`<button type="button" class="VosSumBar__btn" data-act="sumbar" aria-expanded="${r.barOpen}" aria-controls="vos-sumbar-body">
1\n        <span><strong>${C(w.title)} at ${C(d.building||d.label)}</strong><small>${C(d.city||"")}${d.city?" · ":""}${"monthly"===l.term?C(t.term_monthly):C(t.term_annual)}</small></span>\n        <span class="VosSumBar__amount">${ae($.total)}</span>\n        <svg class="VosSumBar__chev" viewBox="0 0 20 20" aria-hidden="true"><path d="M4 7l6 6 6-6" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"/></svg>\n      </button>\n      <div class="VosSumBar__body" id="vos-sumbar-body" ${r.barOpen?"":"hidden"}>${r.barOpen?F("bar"):""}</div>`},A=()=>{B(),Q()};function I(){const d=a.querySelector("[data-ch-box]");if(!d)return;const w=d.querySelector(".VosCh__list");w&&w.remove();const $=d.querySelector("input"),N=u.open&&(u.loading||u.results||u.note);if($&&$.setAttribute("aria-expanded",String(!!N)),!N)return;const j=u.results||[],Y=document.createElement("ul");Y.className="VosCh__list",Y.id="vos-ch-list",Y.setAttribute("role","listbox"),Y.innerHTML=`${u.loading?`<li class="VosCh__note">${C(t.ch_loading)}</li>`:""}${u.note&&!u.loading?`<li class="VosCh__note">${C(u.note)}</li>`:""}${j.map(V=>`<li><button type="button" data-ch="${C(V.companyNumber)}"><strong>${C(V.companyName)}</strong><small>${C(V.companyNumber)}${V.address?` · ${C(V.address)}`:""}</small></button></li>`).join("")}<li class="VosCh__action"><button type="button" data-act="manual"><strong>${C(t.ch_manual)}</strong></button></li>`,d.appendChild(Y)}const U=ot(async d=>{m&&m.abort(),m=new AbortController;try{const w=await fetch(`${o}/api/company-search?q=${encodeURIComponent(d)}`,{signal:m.signal}),$=await w.json();if(!w.ok)throw new Error($.error||"search failed");if(d!==u.query.trim())return;u.loading=!1,u.results=$.results||[],u.note=u.results.length?null:t.ch_none,I()}catch(w){if("AbortError"===w.name||d!==u.query.trim())return;u.loading=!1,u.results=[],u.note=t.ch_error,I()}},400);const H=async()=>{const d=a.querySelector('[data-act="pay"]');d&&(d.disabled=!0,d.textContent=t.payment_loading);try{const w=await fetch(`${o}/api/vos-checkout`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({basket:{package:l.package,term:l.term,mail:l.mail,intercom:"optional"===Re(l)&&!!l.intercom,phone:"none"===l.phone?null:l.phone},customer:{email:r.email.trim(),name:`${r.first} ${r.last}`.trim(),phone:r.phone.trim()},company:{incorporated:r.inc,source:r.company?"companies_house":"manual",name:r.company?r.company.companyName:r.manualName.trim(),number:r.company?r.company.companyNumber:null,sicCodes:r.company?(r.company.sicCodes||[]).join("|"):null,address:r.company&&r.company.address||null},location:(()=>{const d=ue(l)||{};return{id:l.location,label:d.label||null,building:d.building||null,city:d.city||null,address:d.address||null,postcode:d.postcode||null}})(),resumeUrl:window.location.href})}),$=await w.json();if(!w.ok)throw new Error($.error||"checkout failed");const N=await new Promise((d,w)=>{if(window.Stripe)return d(window.Stripe);const $=document.querySelector("script[data-stripe-js]");if($)return $.addEventListener("load",()=>d(window.Stripe)),void $.addEventListener("error",()=>w(new Error("Stripe.js failed to load")));const N=document.createElement("script");N.src="https://js.stripe.com/v3/",N.async=!0,N.dataset.stripeJs="true",N.onload=()=>d(window.Stripe),N.onerror=()=>w(new Error("Stripe.js failed to load")),document.head.appendChild(N)});E="payment";const j=(d=>(!d.automaticTax&&Fe(l).vat>0&&console.warn(`[VosOrder] Stripe Tax is off: Checkout is charging the ex-VAT ${ae(d.subtotal/100)}.`),a.innerHTML=`\n      <section class="VosPanelCard" aria-labelledby="vos-h-pay">\n        <div class="VosPanelCard__head">\n          <h2 id="vos-h-pay">${C(t.payment_title)}</h2>\n          <button type="button" class="VosBtn VosBtn--text" data-act="back-to-details">${C(t.back_to_details)}</button>\n        </div>\n        <p class="VosPanelCard__hint">${C(t.payment_intro)}</p>\n        <div class="VosStripeFrame"><div class="VosStripe" data-vos-stripe-mount></div></div>\n      </section>`,a.querySelector("[data-vos-stripe-mount]")))($);f={id:$.sessionId},y=await N($.publishableKey).initEmbeddedCheckout({clientSecret:$.clientSecret,onComplete:()=>z($.sessionId)}),y.mount(j),a.scrollIntoView({block:"start",behavior:"smooth"})}catch{E="details",T=`${t.payment_error}`,A();const $=a.querySelector(".VosPay__error");$&&$.scrollIntoView({block:"center",behavior:"smooth"})}},z=async d=>{if(y){try{y.destroy()}catch{}y=null}try{const w=await fetch(`${o}
1/api/session?id=${encodeURIComponent(d)}`);f=w.ok?await w.json():{sessionId:d}}catch{f={sessionId:d}}E="done",r.paid=!0,a.innerHTML=(()=>{const d=ue(l),w=ce(l),$=f&&f.amountTotal?f.amountTotal/100:null;return`<div class="VosSuccess"><span class="VosSuccess__tick">${hn}</span>\n      <h2>${C(t.success_title).replace("{first}",C(r.first)).replace("{building}",C(d?d.building||d.label:""))}</h2>\n      <p>${C(t.success_text).replace("{email}",C(r.email))}</p>\n      ${$?`<p class="VosSuccess__paid">${ae($)} paid${w?` for ${C(w.title)}`:""}</p>`:""}</div>`})(),Q(),Qe(),window.scrollTo({top:0,behavior:"smooth"})};e.addEventListener("input",d=>{const w=d.target.name;if(w){if("chQuery"===w){u.query=d.target.value;const $=u.query.trim();return $.length<2?(m&&m.abort(),u.open=!1,u.loading=!1,u.results=null,u.note=null):(u.open=!0,u.loading=!0,u.results=null,u.note=null,U($)),void I()}if(w in r&&(r[w]=d.target.value,r.tried&&!g()[w])){const $=d.target.closest(".VosField"),N=$&&$.querySelector(".VosField__err");if(N){$.classList.remove("is-invalid");const j=(d=>"email"===d?t.hint_email:"manualName"===d?"yes"===r.inc?t.hint_legal_name:"no"===r.inc?t.hint_not_incorporated:t.hint_sole_trader:null)(w);if(j){const Y=document.createElement("span");Y.className="VosField__hint VosField__slot",Y.textContent=j,N.replaceWith(Y)}else N.remove()}}}}),e.addEventListener("blur",d=>{"email"===d.target.name&&(()=>{const d=e.dataset.portalId,w=e.dataset.captureForm;if("true"!==e.dataset.capture||!d||!w||h||!yn.test(r.email))return;h=!0;const $=[{name:"email",value:r.email},{name:"firstname",value:r.first},{name:"lastname",value:r.last},{name:"phone",value:r.phone}].filter(N=>N.value);fetch(`https://api.hsforms.com/submissions/v3/integration/submit/${d}/${w}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({fields:$,context:{pageUri:window.location.href,pageName:document.title}})}).catch(()=>{h=!1})})()},!0),e.addEventListener("change",d=>{"consent"===d.target.name&&(r.consent=d.target.checked)}),e.addEventListener("click",async d=>{const w=d.target.closest("[data-err-jump]");if(w){const V=w.dataset.errJump,q=a.querySelector(`[name="${V}"]`)||a.querySelector('.VosChip, [name="consent"]');return void(q&&(q.scrollIntoView({block:"center",behavior:"smooth"}),q.focus({preventScroll:!0})))}const $=d.target.closest("[data-chip]");if($)return r[$.dataset.chip]=$.dataset.val,r.company=null,r.manual=!1,u.open=!1,u.results=null,void B();const N=d.target.closest("[data-ch]");if(N)return void async function(d){const w=(u.results||[]).find($=>$.companyNumber===d);u.open=!1,u.loading=!0,u.results=null,r.company=w?{companyName:w.companyName,companyNumber:w.companyNumber,companyStatus:w.status||"active",sicCodes:w.sicCodes||[],address:w.address||""}:null,B();try{const $=await fetch(`${o}/api/company?number=${encodeURIComponent(d)}`),N=await $.json();if(!$.ok)throw new Error(N.error||"lookup failed");const j=N.registeredOfficeAddress||{};r.company={companyName:N.companyName,companyNumber:N.companyNumber,companyStatus:N.status||"active",sicCodes:N.sicCodes||[],address:[j.addressLine1,j.addressLine2,j.locality,j.postalCode].filter(Boolean).join(", ")}}catch{}u.loading=!1,B()}(N.dataset.ch);u.open&&!d.target.closest("[data-ch-box]")&&(u.open=!1,I());const j=d.target.closest("[data-act]");if(!j)return;const Y=j.dataset.act;if("inc-tip"===Y){k=!k,B();const V=a.querySelector('[data-act="inc-tip"]');return void(V&&V.focus({preventScroll:!0}))}if("manual"===Y){r.manual=!0,u.open=!1,B();const V=a.querySelector('[name="manualName"]');V&&V.focus()}else if("ch-back"===Y){r.manual=!1,B();const V=a.querySelector('[name="chQuery"]');V&&V.focus()}else if("ch-clear"===Y){r.company=null,u.query="",B();const V=a.querySelector('[name="chQuery"]');V&&V.focus()}else if("change"===Y)xt(l);else if("add-loc"===Y){const V=!(!s||!s.contains(j));r.addLocOpen=!r.addLocOpen,Q();const q=(V?s:i).querySelector('[data-act="add-loc"]');q&&q.focus({preventScroll:!0})}else if("sumbar"===Y){r.barOpen=!r.barOpen,Q();const V=s&&s.querySelector('[data-act="sumbar"]');V&&V.focus()}else if("copy"===Y)try{await navigator.clipboard.writeText(window.location.href),j.textContent=t.copy_done}catch{j.textContent=window.location.href}else if("restart"===Y||"restart-no"===Y){r.confirmRestart="restart"===Y,Q();const V=e.querySelector("restart"===Y?'[data-act="restart-no"]':'[data-act="restart"]');V&&V.focus()}else if("restart-yes"===Y){if(y){try{y.destroy()}catch{}y=null}Qe(),window.location.href=window.location.pathname}else if("pay"===Y){if(r.tried=!0,T=null,0!==Object.keys(g()).length){A();const V=a.querySelector("[data-error-summary]");return void(V&&(V.scrollIntoView({block:"center",behavior:"smooth"}),V.focus({preventScroll:!0})))}H()}
1else"back-to-details"===Y&&(()=>{if(y){try{y.destroy()}catch{}y=null}E="details",A();const d=a.querySelector('[data-act="pay"]');d&&d.focus({preventScroll:!0})})()}),e.addEventListener("keydown",d=>{"Escape"===d.key&&r.addLocOpen&&(r.addLocOpen=!1,Q()),"Escape"===d.key&&u.open&&(u.open=!1,I())}),(e=>{kt=e})(d=>{l={...d},c(),A()}),tn(()=>{"details"===E&&A()}),A(),cn(l)||xt(l)}const Vs={details_title:"Your details",label_first:"First name",label_last:"Last name",label_email:"Email",label_phone:"Phone",hint_email:"We’ll send your order confirmation and VAT invoice here.",business_title:"Your business",inc_question:"Is your business already incorporated?",inc_tip_q:"What does incorporation mean?",inc_tip_a:"Incorporation means officially registering your business as a limited company with Companies House. This creates a separate legal entity for your business, helping to keep your personal finances separate from the company’s finances.",inc_yes:"Yes",inc_no:"Not yet",inc_sole:"No",ch_label:"Find your company",ch_placeholder:"Company name or number",ch_hint:"Search Companies House to find your registered company details without entering them manually.",ch_loading:"Searching Companies House...",ch_none:"We couldn’t find an active company. Check your details or enter them manually.",ch_error:"Companies House search is unavailable right now. Please enter your details manually.",ch_manual:"Can’t find it? Enter details manually",ch_back:"Search Companies House",label_legal_name:"Legal business name",label_trading_name:"Business or trading name",hint_legal_name:"Enter the exact name registered at Companies House.",hint_not_incorporated:"Not registered yet? You can use your trading name, and our team can help you explore company formation options separately.",hint_sole_trader:"Enter the trading name you’d like to use for your mail.",later_title:"Next steps",later_intro:"Some details can be confirmed after you’ve placed your order. We’ll email you with any information we need to get your services set up.",followup_number:"Your existing number preferences, if applicable",followup_names:"Additional names for receiving mail",followup_id:"Identity verification for the account holder",payment_title:"Payment",payment_intro:"Your payment is processed securely through Stripe. We don’t see or store your full card details.",back_to_details:"Back to your details",payment_error:"We couldn’t start the payment just now. Please try again, or call us on 01727 260 177 and we’ll help you.",payment_loading:"Preparing secure payment...",consent_text:'I agree to The Workstation’s <a href="/virtual-offices/terms-and-conditions" target="_blank" rel="noopener">Virtual Office terms and conditions</a> and understand that identity verification is required before the address can be used. We’ll email you about your order; you can opt out of marketing at any time.',pay_label:"Continue to payment",pay_note:"Secure payment by Stripe. Your payment will be processed when you confirm.",summary_title:"Your order",add_location_label:"Add location",add_location_title:"Purchasing services for more than one location?",add_location_text:"Please complete a separate checkout for each location. Once your first purchase is complete, you may return to choose your next location.",summary_empty:"Nothing chosen yet.",summary_empty_cta:"Choose your Virtual Office",change_label:"Change",copy_link:"Copy link to this order",copy_done:"Link copied",start_again:"Start again",start_again_confirm:"Clear your order and details?",start_again_yes:"Yes, start again",start_again_no:"Cancel",term_annual:"Annual",term_monthly:"Monthly",then_annual:"Then {total} inc VAT per year. T&Cs apply to mail options.",then_monthly:"Then {total} inc VAT per month. 3-month minimum and one month’s notice. T&Cs apply to mail options.",success_title:"Thanks, {first}. Your Virtual Office at {building} is being set up.",success_text:"We’ve emailed your confirmation and VAT invoice to {email}. We’ll be in touch by email with any remaining details, including the identity check and information needed to set up your services.",errors_title:"Check your details",err_first:"Enter your first name",err_last:"Enter your last name",err_email:"Enter a valid email address",err_phone:"Enter a phone number we can reach you on",err_inc:"Tell us whether your business is incorporated",err_company:"Find your company or enter it manually",err_business_name:"Enter your business name",err_consent:"Please accept the terms to continue"};document.addEventListener("DOMContentLoaded",()=>{try{(()=>{const e=document.querySelectorAll(".AccordionItem");0!==e.length&&e.forEach(Vn)})(),(()=>{const e=document.querySelectorAll("[data-amenities-gallery]");0!==e.length&&e.forEach(ho)})(),(()=>{const e=document.querySelectorAll(".BlogFinder");0!==e.length&&e.forEach(jt)})(),(()=>{const e=document.querySelectorAll("[data-carousel]");0!==e.length&&e.forEach(Lo)})(),(()=>{const e=document.querySelectorAll("[data-comparison-table]");0!==e.length&&e.forEach(Vo)})(),(()=>{const e=document.querySelectorAll("[data-footer-locations]");0!==e.length&&e.forEach(qo)})(),(()=>
1{const e=document.querySelectorAll("[data-cookie-settings]");if(0===e.length)return;const n=()=>!(!document.getElementById("hs-eu-cookie-confirmation")&&!window._hsp||(e.forEach(a=>a.hidden=!1),0));if(e.forEach(a=>a.addEventListener("click",()=>{(window._hsp=window._hsp||[]).push(["showBanner"])})),n())return;let t=0;const o=setInterval(()=>{(n()||++t>20)&&clearInterval(o)},500)})(),(()=>{const e=document.querySelectorAll("form.NameCheck[data-check-url]");0!==e.length&&e.forEach(Fo)})(),(()=>{const e=document.querySelectorAll(".Hero");0!==e.length&&e.forEach(Yt)})(),(()=>{const e=document.querySelectorAll(".HeroLocation");0!==e.length&&e.forEach(n=>{jt(n),Yt(n)})})(),(()=>{const e=document.querySelectorAll("[data-locations-map]");0!==e.length&&e.forEach(Zo)})(),(()=>{const e=document.querySelectorAll("[data-payments]");0!==e.length&&e.forEach(aa)})(),(()=>{const e=document.querySelectorAll("[data-payments-embedded]");0!==e.length&&e.forEach(da)})(),(()=>{const e=document.querySelectorAll("[data-pricing-cards]");0!==e.length&&e.forEach(fa)})(),va(),(()=>{document.querySelectorAll("[data-video-shell]").forEach(Sa);const e=document.querySelectorAll("[data-social-cards]");0!==e.length&&e.forEach(ka)})(),(()=>{const e=document.querySelectorAll(".StatItem");0!==e.length&&e.forEach(xa)})(),(()=>{const e=document.querySelectorAll("[data-tabs]");0!==e.length&&e.forEach(qa)})(),(()=>{const e=document.querySelectorAll(".TeamMember__toggle");0!==e.length&&e.forEach(Ia)})(),(()=>{const e=document.querySelectorAll("[data-text-map]");0!==e.length&&e.forEach(Fa)})(),(()=>{const e=document.querySelectorAll("a[data-tour-button]");0!==e.length&&(typeof HTMLDialogElement>"u"||e.forEach(n=>{n.addEventListener("click",t=>{t.preventDefault(),ja(n)})}))})(),za(),document.addEventListener("click",Es),tn(()=>{re&&re.open&&(et(),pe())}),rs(),(()=>{const e=document.querySelectorAll("[data-vos-order]");0!==e.length&&e.forEach(xs)})()}catch(e){console.error("Error initialising components:",e)}})}();
2//# sourceURL=https://146942113.fs1.hubspotusercontent-eu1.net/hubfs/146942113/hub_generated/template_assets/1/452059607247/1790689372592/template_index.js

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.