PageSourceSearch

https://www.outdoornativitysets.com/

html outdoornativitysets.com collected 2026-09-26 03:57:12 UTC 419,641 bytes, 7,054 lines download raw bytes

1<!doctype html>
2<html lang="en">
3<head >
4    <meta charset="utf-8"/>
4<script type="text/javascript">(window.NREUM||(NREUM={})).init={ajax:{deny_list:["bam.nr-data.net"]}};(window.NREUM||(NREUM={})).loader_config={licenseKey:"fcf28e5364",applicationID:"95730697",browserID:"95730795"};;/*! For license information please see nr-loader-rum-1.322.0.min.js.LICENSE.txt */
5(()=>{var e={8122(e,t,r){"use strict";r.d(t,{a:()=>i});var n=r(944);function i(e,t){try{if(!e||"object"!=typeof e)return(0,n.R)(3);if(!t||"object"!=typeof t)return(0,n.R)(4);const r=Object.create(Object.getPrototypeOf(t),Object.getOwnPropertyDescriptors(t)),a=0===Object.keys(r).length?e:r;for(let s in a)if(void 0!==e[s])try{if(null===e[s]){r[s]=null;continue}Array.isArray(e[s])&&Array.isArray(t[s])?r[s]=Array.from(new Set([...e[s],...t[s]])):e[s]instanceof Map||e[s]instanceof Set||e[s]instanceof Date||e[s]instanceof RegExp?r[s]=e[s]:"object"==typeof e[s]&&null!==t[s]&&"object"==typeof t[s]?r[s]=i(e[s],t[s]):r[s]=e[s]}catch(e){r[s]||(0,n.R)(1,e)}return r}catch(e){(0,n.R)(2,e)}}},2555(e,t,r){"use strict";r.d(t,{f:()=>s});var n=r(384),i=r(8122);const a={beacon:n.NT.beacon,errorBeacon:n.NT.errorBeacon,licenseKey:void 0,applicationID:void 0,sa:void 0,queueTime:void 0,applicationTime:void 0,ttGuid:void 0,user:void 0,account:void 0,product:void 0,extra:void 0,jsAttributes:{},userAttributes:void 0,atts:void 0,transactionName:void 0,tNamePlain:void 0};function s(e){try{return!!e.licenseKey&&!!e.errorBeacon&&!!e.applicationID}catch(e){return!1}}r.d(t,["D",0,e=>(0,i.a)(e,a)])},7699(e,t,r){"use strict";var n=r(860);const i={[n.K7.logging]:!0,[n.K7.genericEvents]:!0,[n.K7.jserrors]:!0,[n.K7.ajax]:!0};r.d(t,["It",0,1e6,"KC",0,i,"qh",0,"SESSION_ERROR"])},9324(e,t,r){"use strict";r.d(t,["xv",0,"1.322.0"])},981(e,t,r){"use strict";r.d(t,["R",0,{AJAX:"AjaxRequest",PA:"PageAction",UA:"UserAction",BP:"BrowserPerformance",WS:"WebSocket",SPV:"SecurityPolicyViolation",JSE:"JavaScriptError",LOG:"Log",PVE:"PageView",PVT:"PageViewTiming",SR:"SessionReplay",ST:"SessionTrace",BI:"BrowserInteraction"}])},6154(e,t,r){"use strict";var n=r(1863);const i="undefined"!=typeof window&&!!window.document,a="undefined"!=typeof WorkerGlobalScope&&("undefined"!=typeof self&&self instanceof WorkerGlobalScope&&self.navigator instanceof WorkerNavigator||"undefined"!=typeof globalThis&&globalThis instanceof WorkerGlobalScope&&globalThis.navigator instanceof WorkerNavigator),s=i?window:"undefined"!=typeof WorkerGlobalScope&&("undefined"!=typeof self&&self instanceof WorkerGlobalScope&&self||"undefined"!=typeof globalThis&&globalThis instanceof WorkerGlobalScope&&globalThis),o=Boolean("hidden"===s?.document?.visibilityState),c=""+s?.location,u=/iPad|iPhone|iPod/.test(s.navigator?.userAgent),d=u&&"undefined"==typeof SharedWorker,l=((()=>{const e=s.navigator?.userAgent?.match(/Firefox[/\s](\d+\.\d+)/);Array.isArray(e)&&e.length>=2&&e[1]})(),Date.now()-(0,n.t)());r.d(t,["OF",0,u,"RI",0,i,"WN",0,l,"bv",0,a,"gm",0,s,"m",0,c,"mw",0,o,"sb",0,d,"zk",0,()=>{const e=s?.performance?.getEntriesByType?.("navigation")?.[0];if(e&&e.responseStart>0&&e.responseStart<s.performance.now())return e}])},3241(e,t,r){"use strict";r.d(t,{W:()=>i});var n=r(6154);function i(e={}){try{n.gm.dispatchEvent(new CustomEvent("newrelic",{detail:e}))}catch(e){}}},1687(e,t,r){"use strict";r.d(t,{Ak:()=>o,Ze:()=>u,x3:()=>c});var n=r(3241),i=r(3606),a=r(860),s=r(2646);function o(e,t){if(!e)return;const r={staged:!1,priority:a.P3[t]||0};e.runtime.drainRegistry.get(t)||e.runtime.drainRegistry.set(t,r)}function c(e,t){if(!e)return;const r=e.runtime.drainRegistry;r&&(r.get(t)&&r.delete(t),l(e,t,!1),r.size&&d(e))}function u(e,t="feature",r=!1){if(e){if(!e.runtime.drainRegistry.get(t)||r)return l(e,t);e.runtime.drainRegistry.get(t).staged=!0,d(e)}}function d(e){if(!e)return;const t=Array.from(e.runtime.drainRegistry);t.every(([e,t])=>t.staged)&&(t.sort((e,t)=>e[1].priority-t[1].priority),t.forEach(([t])=>{e.runtime.drainRegistry.delete(t),l(e,t)}))}function l(e,t,r=!0){if(!e)return;const a=e.ee,o=i.i.handlers;if(a&&!a.aborted&&a.backlog&&o){if((0,n.W)({type:"lifecycle",name:"drain",feature:t}),r){const e=a.backlog[t],r=o[t];if(r){for(let t=0;e&&t<e.length;++t)f(e[t],r);Object.entries(r).forEach(([e,t])=>{Object.values(t||{}
5).forEach(t=>{t[0]?.on&&t[0].context()instanceof s.y&&!t[0].listeners(e).includes(t[1])&&t[0].on(e,t[1])})})}}a.isolatedBacklog||delete o[t],a.backlog[t]=null,a.emit("drain-"+t,[])}}function f(e,t){var r=e[1];Object.values(t[r]||{}).forEach(t=>{var r=e[0];if(t[0]===r){var n=t[1],i=e[3],a=e[2];n.apply(i,a)}})}},7836(e,t,r){"use strict";var n=r(384),i=r(8990),a=r(2646),s=r(5607);const o="nr@context:".concat(s.W),c=function e(t,r){var n={},s={},d={},l=!1;try{l=16===r.length&&u.initializedAgents?.[r]?.runtime.isolatedBacklog}catch(e){}var f={on:p,addEventListener:p,removeEventListener:function(e,t){var r=n[e];if(!r)return;for(var i=0;i<r.length;i++)r[i]===t&&r.splice(i,1)},emit:function(e,r,n,i,a){!1!==a&&(a=!0);if(c.aborted&&!i)return;t&&a&&t.emit(e,r,n);var o=g(n);m(e).forEach(e=>{e.apply(o,r)});var u=v()[s[e]];u&&u.push([f,e,r,o]);return o},get:h,listeners:m,context:g,buffer:function(e,t){const r=v();if(t=t||"feature",f.aborted)return;Object.entries(e||{}).forEach(([e,n])=>{s[n]=t,t in r||(r[t]=[])})},abort:function(){f._aborted=!0,Object.keys(f.backlog).forEach(e=>{delete f.backlog[e]})},isBuffering:function(e){return!!v()[s[e]]},debugId:r,backlog:l?{}:t&&"object"==typeof t.backlog?t.backlog:{},isolatedBacklog:l};return Object.defineProperty(f,"aborted",{get:()=>{let e=f._aborted||!1;return e||(t&&(e=t.aborted),e)}}),f;function g(e){return e&&e instanceof a.y?e:e?(0,i.I)(e,o,()=>new a.y(o)):new a.y(o)}function p(e,t){n[e]=m(e).concat(t)}function m(e){return n[e]||[]}function h(t){return d[t]=d[t]||e(f,t)}function v(){return f.backlog}}(void 0,"globalEE"),u=(0,n.Zm)();u.ee||(u.ee=c),r.d(t,["P",0,o,"ee",0,c])},2646(e,t,r){"use strict";r.d(t,{y:()=>n});class n{constructor(e){this.contextId=e}}},9908(e,t,r){"use strict";r.d(t,{d:()=>n,p:()=>i});var n=r(7836).ee.get("handle");function i(e,t,r,i,a){a?(a.buffer([e],i),a.emit(e,t,r)):(n.buffer([e],i),n.emit(e,t,r))}},3606(e,t,r){"use strict";r.d(t,{i:()=>a});var n=r(9908);a.on=s;var i=a.handlers={};function a(e,t,r,a){s(a||n.d,i,e,t,r)}function s(e,t,r,i,a){a||(a="feature"),e||(e=n.d);var s=t[a]=t[a]||{};(s[r]=s[r]||[]).push([e,i])}},3878(e,t,r){"use strict";function n(e,t){return{capture:e,passive:!1,signal:t}}function i(e,t,r=!1,i){window.addEventListener(e,t,n(r,i))}function a(e,t,r=!1,i){document.addEventListener(e,t,n(r,i))}r.d(t,{DD:()=>a,jT:()=>n,sp:()=>i})},5607(e,t,r){"use strict";const n=(0,r(9566).bz)();r.d(t,["W",0,n])},9566(e,t,r){"use strict";r.d(t,{LA:()=>s,bz:()=>a});var n=r(6154);function i(e,t){return e?15&e[t]:16*Math.random()|0}function a(){const e=n.gm?.crypto||n.gm?.msCrypto;let t,r=0;return e&&e.getRandomValues&&(t=e.getRandomValues(new Uint8Array(30))),"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".split("").map(e=>"x"===e?i(t,r++).toString(16):"y"===e?(3&i()|8).toString(16):e).join("")}function s(e){const t=n.gm?.crypto||n.gm?.msCrypto;let r,a=0;t&&t.getRandomValues&&(r=t.getRandomValues(new Uint8Array(e)));const s=[];for(var o=0;o<e;o++)s.push(i(r,a++).toString(16));return s.join("")}},2614(e,t,r){"use strict";r.d(t,["BB",0,18e5,"Wt",0,"NRBA_SESSION::","iL",0,{SAME_TAB:"same-tab",CROSS_TAB:"cross-tab"},"tS",0,{STARTED:"session-started",PAUSE:"session-pause",RESET:"session-reset",RESUME:"session-resume",UPDATE:"session-update"},"wk",0,144e5])},1863(e,t,r){"use strict";function n(){return Math.floor(performance.now())}r.d(t,{t:()=>n})},944(e,t,r){"use strict";r.d(t,{R:()=>i});var n=r(3241);function i(e,t){"function"==typeof console.debug&&(console.debug("New Relic Warning: https://github.com/newrelic/newrelic-browser-agent/blob/main/docs/warning-codes.md#".concat(e),t),(0,n.W)({drained:null,type:"data",name:"warn",feature:"warn",data:{code:e,secondary:t}}))}},8990(e,t,r){"use strict";r.d(t,{I:()=>i});var n=Object.prototype.hasOwnProperty;function i(e,t,r){if(n.call(e,t))return e[t];var i=r();if(Object.defineProperty&&Object.keys)try{return Object.defineProperty(e,t,{value:i,writable:!0,enumerable:!1}),i}catch(e){}return e[t]=i,i}},6389(e,t,r){"use strict";function n(e,t=500,r={}){const n=r?.leading||!1;let i;return(...r)=>{n&&void 0===i&&(e.apply(this,r),i=setTimeout(()=>{i=clearTimeout(i)},t)),n||(clearTimeout(i),i=setTimeout(()=>{e.apply(this,r)},t))}}function i(e){let t=!1;return(...r)=>{t||(t=!0,e.apply(this,r))}}r.d(t,{J:()=>i,s:()=>n})},1910(e,t,r){"use strict";r.d(t,{i:()=>a});var n=r(944);const i=new Map;function a(...e){return e.every(e=>{if(i.has(e))return i.get(e);const t="function"==typeof e?e.toString():"",r=t.includes("[native code]"),a=t.includes("nrWrapper");return r||a||(0,n.R)(64,e?.name||t),i.set(e,r),r})}},5289(e,t,r){"use strict";r.d(t,{GG:()=>s,Qr:()=>c,sB:()=>o});var n=r(3878),i=r(6389);function a(){return"undefined"==typeof document||"complete"===document.readyState}function s(e,t){if(a())return e();const r=(0,i.J)(e),s=setInterval(()=>
5{a()&&(clearInterval(s),r())},500);(0,n.sp)("load",r,t)}function o(e){if(a())return e();(0,n.DD)("DOMContentLoaded",e)}function c(e){if(a())return e();(0,n.sp)("popstate",e)}},384(e,t,r){"use strict";r.d(t,{Zm:()=>c,bQ:()=>d,dV:()=>u,pV:()=>l});var n=r(6154),i=r(1863),a=r(944),s=r(1910);const o={beacon:"bam.nr-data.net",errorBeacon:"bam.nr-data.net"};function c(){return n.gm.NREUM||(n.gm.NREUM={}),void 0===n.gm.newrelic&&(n.gm.newrelic=n.gm.NREUM),n.gm.NREUM}function u(){let e=c();return e.o||(e.o={ST:n.gm.setTimeout,SI:n.gm.setImmediate||n.gm.setInterval,CT:n.gm.clearTimeout,XHR:n.gm.XMLHttpRequest,REQ:n.gm.Request,EV:n.gm.Event,PR:n.gm.Promise,MO:n.gm.MutationObserver,FETCH:n.gm.fetch,WS:n.gm.WebSocket},(0,s.i)(...Object.values(e.o))),e}function d(e,t){let r=c();r.initializedAgents??={},t.initializedAt={ms:(0,i.t)(),date:new Date},r.initializedAgents[e]=t,2===Object.keys(r.initializedAgents).length&&(0,a.R)(69)}function l(){return function(){let e=c();const t=e.info||{};e.info={beacon:o.beacon,errorBeacon:o.errorBeacon,...t}}(),function(){let e=c();const t=e.init||{};e.init={...t}}(),u(),function(){let e=c();const t=e.loader_config||{};e.loader_config={...t}}(),c()}r.d(t,["NT",0,o])},2843(e,t,r){"use strict";r.d(t,{G:()=>a,u:()=>i});var n=r(3878);function i(e,t=!1,r,i){(0,n.DD)("visibilitychange",function(){if(t)return void("hidden"===document.visibilityState&&e());e(document.visibilityState)},r,i)}function a(e,t,r){(0,n.sp)("pagehide",e,t,r)}},9300(e,t,r){"use strict";r(860).K7.ajax;r.d(t,["mo",0,{NONE:"none",FAILURES:"failures",ALL:"all"}])},3969(e,t,r){"use strict";const n=r(860).K7.metrics;r.d(t,["TZ",0,n,"XG",0,"storeEventMetrics","xV",0,"storeSupportabilityMetrics"])},6630(e,t,r){"use strict";const n=r(860).K7.pageViewEvent;r.d(t,["T",0,n])},782(e,t,r){"use strict";const n=r(860).K7.pageViewTiming;r.d(t,["T",0,n])},4234(e,t,r){"use strict";r.d(t,{W:()=>i});var n=r(1687);class i{constructor(e,t){this.agentRef=e,this.ee=e?.ee,this.featureName=t,this.blocked=!1}deregisterDrain(){(0,n.x3)(this.agentRef,this.featureName)}}},7767(e,t,r){"use strict";var n=r(6154);r.d(t,["V",0,e=>n.RI&&!0===e?.privacy.cookies_enabled])},8362(e,t,r){"use strict";r.d(t,{d:()=>a});var n=r(9566),i=r(1741);class a extends i.W{agentIdentifier=(0,n.LA)(16)}},1741(e,t,r){"use strict";r.d(t,{W:()=>a});var n=r(944),i=r(4261);class a{#e(e,...t){if(this[e]!==a.prototype[e])return this[e](...t);(0,n.R)(35,e)}addPageAction(e,t){return this.#e(i.hG,e,t)}register(e){return this.#e(i.eY,e)}recordCustomEvent(e,t){return this.#e(i.fF,e,t)}setPageViewName(e,t){return this.#e(i.Fw,e,t)}setCustomAttribute(e,t,r){return this.#e(i.cD,e,t,r)}noticeError(e,t){return this.#e(i.o5,e,t)}setUserId(e,t=!1){return this.#e(i.Dl,e,t)}setApplicationVersion(e){return this.#e(i.nb,e)}setErrorHandler(e){return this.#e(i.bt,e)}addRelease(e,t){return this.#e(i.k6,e,t)}log(e,t){return this.#e("log",e,t)}start(){return this.#e("start")}finished(e){return this.#e(i.BL,e)}recordReplay(){return this.#e(i.CH)}pauseReplay(){return this.#e(i.Tb)}addToTrace(e){return this.#e(i.U2,e)}setCurrentRouteName(e){return this.#e(i.PA,e)}interaction(e){return this.#e(i.dT,e)}wrapLogger(e,t,r){return this.#e(i.Wb,e,t,r)}measure(e,t){return this.#e(i.V1,e,t)}consent(e){return this.#e(i.Pv,e)}}},4261(e,t,r){"use strict";r.d(t,["BL",0,"finished","CH",0,"recordReplay","Dl",0,"setUserId","Fw",0,"setPageViewName","PA",0,"setCurrentRouteName","Pv",0,"consent","Tb",0,"pauseReplay","U2",0,"addToTrace","V1",0,"measure","Wb",0,"wrapLogger","bt",0,"setErrorHandler","cD",0,"setCustomAttribute","dT",0,"interaction","eY",0,"register","fF",0,"recordCustomEvent","hG",0,"addPageAction","k6",0,"addRelease","nb",0,"setApplicationVersion","o5",0,"noticeError"])},1738(e,t,r){"use strict";r.d(t,{U:()=>l,Y:()=>d});var n=r(3241),i=r(9908),a=r(1863),s=r(944),o=r(3969),c=r(8362),u=r(860);function d(e,t,r,a){const d=a||r;!d||d[e]&&d[e]!==c.d.prototype[e]||(d[e]=function(){(0,i.p)(o.xV,["API/"+e+"/called"],void 0,u.K7.metrics,r.ee),(0,n.W)({drained:!!r.runtime?.activatedFeatures,type:"data",name:"api",feature:"api-"+e,data:{}});try{return t.apply(this,arguments)}catch(e){(0,s.R)(23,e)}})}function l(e,t,r,n,s){const o=e.info;null===r?delete o.jsAttributes[t]:o.jsAttributes[t]=r,(s||null===r)&&(0,i.p)("api-"+n,[(0,a.t)(),t,r],void 0,"session",e.ee)}},8374(e,t,r){r.nc=(()=>{try{return document?.currentScript?.nonce}catch(e){}return""})()},860(e,t,r){"use strict";const n="events",i="jserrors",a="browser/blobs",s="browser/logs",o={ajax:"ajax",genericEvents:"generic_events",jserrors:i,logging:"logging",metrics:"metrics",pageAction:"page_action",pageViewEvent:"page_view_event",pageViewTiming:"page_view_timing",sessionReplay:"session_replay",sessionTrace:"session_trace",softNav:"soft_navigations"},c={[o.pageViewEvent]:1,[o.pageViewTiming]:2,[o.metrics]:3,[o.jserrors]:4,[o.softNav]:5,[o.ajax]:6,[o.sessionTrace]:7,[o.sessionReplay]:8,[o.logging]:9,[o.genericEvents]:10},u={[o.pageViewEvent]:"rum",[o.pageViewTiming]:n,[o.ajax]:n,[o.softNav]:n,[o.metrics]:i,[o.jserrors]:i,[o.sessionTrace]:a,[o.sessionReplay]:a,[o.logging]:s,[o.genericEvents]:"ins"};r.d(t,["$J",0,u,"K7",0,o,"P3",0,c,"XX",0,i,"Yy",0,s,"df",0,a,"hg",0,"connect"])}};const t={};function r(n){const i=t[n];if(void 0!==i)return i.exports;const a=t[n]={exports:{}};return e[n](a,a.exports,r),a.exports}r.m=e,r.d=(e,t)=>{if(Array.isArray(t))for(var n=0;n<t.length;){var i=t[n++],a=t[n++];r.o(e,i)?0===a&&n++:0===a?Object.defineProperty(e,i,{enumerable:!0,value:t[n++]}):Object.defineProperty(e,i,{enumerable:!0,get:a})}else for(var i in t)r.o(t,i)&&!r.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce((t,n)=>(r.f[n](e,t),t),[])),r.u=e=>"nr-rum-1.322.0.min.js",r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{const e={},t="NRBA-1.322.0.PROD:";r.l=(n,i,a,s)=>{if(e[n])return void e[n].push(i);let o,c;if(void 0!==a){const e=document.getElementsByTagName("script");for(var u=0;u<e.length;u++){const r=e[u];if(r.getAttribute("src")==n||r.getAttribute("data-webpack")==t+a){o=r;break}}}if(!o){c=!0;var d={296:"sha512-/59P7qAoMYQDJAZerTRPChdYcdrlcoEAw2TwA1wz6Y0/XLmt3sblL
5I5JCXAuxG0YxsW7iqJzgrcO7NJWO58EfQ=="};o=document.createElement("script"),o.charset="utf-8",r.nc&&o.setAttribute("nonce",r.nc),o.setAttribute("data-webpack",t+a),o.src=n,0!==o.src.indexOf(window.location.origin+"/")&&(o.crossOrigin="anonymous"),d[s]&&(o.integrity=d[s])}e[n]=[i];const l=(t,r)=>{o.onerror=o.onload=null,clearTimeout(f);const i=e[n];if(delete e[n],o.parentNode?.removeChild(o),i?.forEach(e=>e(r)),t)return t(r)},f=setTimeout(l.bind(null,void 0,{type:"timeout",target:o}),12e4);o.onerror=l.bind(null,o.onerror),o.onload=l.bind(null,o.onload),c&&document.head.appendChild(o)}})(),r.r=e=>{Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="https://js-agent.newrelic.com/",(()=>{const e={374:0,840:0};r.f.j=(t,n)=>{let i=r.o(e,t)?e[t]:void 0;if(0!==i)if(i)n.push(i[2]);else{const a=new Promise((r,n)=>i=e[t]=[r,n]);n.push(i[2]=a);const s=r.p+r.u(t),o=new Error,c=n=>{if(r.o(e,t)&&(i=e[t],0!==i&&(e[t]=void 0),i)){const e=n&&("load"===n.type?"missing":n.type),r=n&&n.target&&n.target.src;o.message="Loading chunk "+t+" failed: ("+e+": "+r+")",o.name="ChunkLoadError",o.type=e,o.request=r,i[1](o)}};r.l(s,c,"chunk-"+t,t)}};const t=(t,n)=>{let[i,a,s]=n;var o,c,u=0;if(i.some(t=>0!==e[t])){for(o in a)r.o(a,o)&&(r.m[o]=a[o]);if(s)s(r)}for(t&&t(n);u<i.length;u++)c=i[u],r.o(e,c)&&e[c]&&e[c][0](),e[c]=0},n=self["webpackChunk:NRBA-1.322.0.PROD"]=self["webpackChunk:NRBA-1.322.0.PROD"]||[];n.forEach(t.bind(null,0)),n.push=t.bind(null,n.push.bind(n))})(),(()=>{"use strict";r(8374);var e=r(8362),t=r(860);const n=Object.values(t.K7);var i=r(384),a=r(1741);var s=r(2555),o=r(981);t.K7.genericEvents,o.R.PA,o.R.UA,o.R.BP;const c={RESOURCES:"experimental.resources",REGISTER:"register"};var u=r(9300);const d=e=>{if(!e||"string"!=typeof e)return!1;try{document.createDocumentFragment().querySelector(e)}catch{return!1}return!0};var l=r(2614),f=r(944),g=r(8122);const p="[data-nr-mask]",m=e=>(0,g.a)(e,(()=>{const e={feature_flags:[],experimental:{register:!1,resources:!1,iframe_bridge:!1,iframe_domains:[]},mask_selector:"*",block_selector:"[data-nr-block]",mask_input_options:{color:!1,date:!1,"datetime-local":!1,email:!1,month:!1,number:!1,range:!1,search:!1,tel:!1,text:!1,time:!1,url:!1,week:!1,textarea:!1,select:!1,password:!0}};return{ajax:{deny_list:void 0,block_internal:!0,enabled:!0,autoStart:!0,capture_payloads:u.mo.NONE},api:{register:{get enabled(){return e.feature_flags.includes(c.REGISTER)||e.experimental.register},set enabled(t){e.experimental.register=t},duplicate_data_to_container:!1,get allow_iframe_bridge(){return e.feature_flags.includes(c.IFRAME_BRIDGE)||e.experimental.iframe_bridge},set allow_iframe_bridge(t){e.experimental.iframe_bridge=t},get iframe_domains(){return e.experimental.iframe_domains},set iframe_domains(t){Array.isArray(t)?e.experimental.iframe_domains=t:(0,f.R)(1,t)}}},browser_consent_mode:{enabled:!1},distributed_tracing:{enabled:void 0,exclude_newrelic_header:void 0,cors_use_newrelic_header:void 0,cors_use_tracecontext_headers:void 0,allowed_origins:void 0},get feature_flags(){return e.feature_flags},set feature_flags(t){e.feature_flags=t},generic_events:{enabled:!0,autoStart:!0},harvest:{interval:30},jserrors:{enabled:!0,autoStart:!0},logging:{enabled:!0,autoStart:!0},metrics:{enabled:!0,autoStart:!0},obfuscate:void 0,page_action:{enabled:!0},page_view_event:{enabled:!0,autoStart:!0},page_view_timing:{enabled:!0,autoStart:!0},performance:{capture_marks:!1,capture_measures:!1,capture_detail:!0,resources:{get enabled(){return e.feature_flags.includes(c.RESOURCES)||e.experimental.resources},set enabled(t){e.experimental.resources=t},asset_types:[],first_party_domains:[],ignore_newrelic:!0}},privacy:{cookies_enabled:!0},proxy:{assets:void 0,beacon:void 0},session:{expiresMs:l.wk,inactiveMs:l.BB},session_replay:{autoStart:!0,enabled:!1,preload:!1,sampling_rate:10,error_sampling_rate:100,collect_fonts:!1,inline_images:!1,fix_stylesheets:!0,mask_all_inputs:!0,get mask_text_selector(){return e.mask_selector},set mask_text_selector(t){d(t)?e.mask_selector="".concat(t,",").concat(p):""===t||null===t?e.mask_selector=p:(0,f.R)(5,t)},get block_class(){return"nr-block"},get ignore_class(){return"nr-ignore"},get mask_text_class(){return"nr-mask"},get block_selector(){return e.block_selector},set block_selector(t){d(t)?e.block_selector+=",".concat(t):""!==t&&(0,f.R)(6,t)},get mask_input_options(){return e.mask_input_options},set mask_input_options(t){t&&"object"==typeof t?e.mask_input_options={...t,password:!0}:(0,f.R)(7,t)}},session_trace:{enabled:!0,autoStart:!0},soft_navigations:{enabled:!0,autoStart:!0},ssl:void 0,user_actions:{enabled:!0,elementAttributes:["id","className","tagName","type"]},web_sockets:{enabled:!1}}})());var h=r(6154),v=r(9324);let b=0;const y={buildEnv:"PROD",distMethod:"CDN",version:v.xv,originTime:h.WN},_={consented:!1},w={activatedFeatures:void 0,appMetadata:{},configured:!1,get consented(){return this.session?.state?.consent||_.consented},set consented(e){_.consented=e}
5,customTransaction:void 0,denyList:[],disabled:!1,drainRegistry:new Map,connector:void 0,harvester:void 0,v2Target:void 0,isolatedBacklog:!1,isRecording:!1,loaderType:void 0,maxBytes:3e4,obfuscator:void 0,onerror:void 0,ptid:void 0,releaseIds:{},session:void 0,timeKeeper:void 0,registeredEntities:[],jsAttributesMetadata:{bytes:0},get harvestCount(){return++b},listeningForIframeMessages:!1},R="BA";var A=r(7836),x=r(3241);const E={accountID:void 0,trustKey:void 0,agentID:void 0,licenseKey:void 0,applicationID:void 0,xpid:void 0};var S=r(9908);const k="newrelic-iframe-";function T(e,t={},n,o){let{init:c,info:u,loader_config:d,runtime:l={},exposed:f=!0}=t;if(!u){const e=(0,i.pV)();c=e.init,u=e.info,d=e.loader_config}var p;e.init=m(c||{}),e.loader_config=(p=d||{},(0,g.a)(p,E)),u.jsAttributes??={},h.bv&&(u.jsAttributes.isWorker=!0),e.info=(0,s.D)(u);const v=e.init;e.runtime??=(e=>{const t=(0,g.a)(e,w),r=Object.keys(y).reduce((e,t)=>(e[t]={value:y[t],writable:!1,configurable:!0,enumerable:!0},e),{});return Object.defineProperties(t,r)})(l),e.runtime.v2Target??={type:R,instance:e.agentIdentifier,get id(){return e.runtime.appMetadata?.agents?.[0]?.entityGuid},get attributes(){return{"entity.guid":this.id,appId:e.info.applicationID}}},v.proxy.assets&&(e=>{const t=e.startsWith("http");e+="/",r.p=t?e:"https://"+e})(v.proxy.assets),e.runtime.configured||(Object.defineProperty(e,"beacons",{get:()=>[e.info.beacon,e.info.errorBeacon,e.init.proxy.assets,e.init.proxy.beacon].filter(Boolean)}),Object.defineProperty(e.runtime,"denyList",{get:()=>[...e.init.ajax.deny_list||[],...e.init.ajax.block_internal?e.beacons:[]]}),e.runtime.ptid=e.agentIdentifier,function(e){const t=(0,i.pV)();Object.getOwnPropertyNames(a.W.prototype).forEach(r=>{const n=a.W.prototype[r];if("function"!=typeof n||"constructor"===n)return;let i=t[r];e[r]&&!1!==e.exposed&&"micro-agent"!==e.runtime?.loaderType&&(t[r]=(...t)=>{const n=e[r](...t);return i?i(...t):n})})}(e),e.runtime.loaderType=n,e.ee=A.ee.get(e.agentIdentifier),e.exposed=f,(0,x.W)({drained:!!e.runtime.activatedFeatures,type:"lifecycle",name:"initialize",feature:void 0,data:e.config}),e.init.api.register.allow_iframe_bridge&&h.gm.addEventListener("message",t=>{"string"==typeof t.data?.type&&t.data.type.startsWith(k)&&(0,S.p)("iframe-message",[t],void 0,"IFRAME",e.ee)}),e.runtime.configured=!0)}var j=r(1863),P=r(4261),N=r(1738);
5var O=r(1687),M=r(4234),I=r(5289),D=r(7767);function V(e){return!!(0,i.dV)().o.MO&&(0,D.V)(e)&&!0===e?.session_trace.enabled}var W=r(6389),B=r(7699);const C=new WeakSet,K=new WeakMap;class U extends M.W{constructor(e,t){super(e,t),this.abortHandler=void 0,this.featAggregate=void 0,this.loadedSuccessfully=void 0,this.onAggregateImported=new Promise(e=>{this.loadedSuccessfully=e}),this.deferred=Promise.resolve(),!1===e.init[this.featureName].autoStart?this.deferred=new Promise((t,r)=>{this.ee.on("manual-start-all",(0,W.J)(()=>{(0,O.Ak)(e,this.featureName),t()}))}):(0,O.Ak)(e,t)}importAggregator(e,t,n={}){if(this.featAggregate)return;const i=async()=>{if(await this.deferred,this.#t(e),!(0,s.f)(e.info))return(0,f.R)(43),e.ee.abort(),void this.loadedSuccessfully(!1);try{await async function(e,t,n){if(K.has(e))return K.get(e);const i=(async()=>{if((0,D.V)(e.init))try{const{setupAgentSession:t}=await r.e(296).then(r.bind(r,1768));t(e)}catch(e){(0,f.R)(20,e),t.emit("internal-error",[e]),(0,S.p)(B.qh,[e],void 0,n,t)}if(e.init.api.register.allow_iframe_bridge)try{const{setupIframeMFEMessageListener:t}=await Promise.resolve().then(function(){const e=new Error("Cannot find module '../../loaders/configure/iframe-message-handler'");throw e.code="MODULE_NOT_FOUND",e});t(e)}catch(e){(0,f.R)(23,e)}const[{Connector:i},{Harvester:a}]=await Promise.all([r.e(296).then(r.bind(r,6589)),r.e(296).then(r.bind(r,5237))]);e.runtime.connector=new i(e),e.runtime.harvester=new a(e);const s=Object.values(e.features).filter(t=>e.runtime.drainRegistry.has(t.featureName));Promise.all(s.map(e=>e.onAggregateImported)).then(()=>e.runtime.harvester.startTimer())})();K.set(e,i),await i}(e,this.ee,this.featureName)}catch(e){return(0,f.R)(79,e),this.ee.abort(),void this.loadedSuccessfully(!1)}try{if(!this.#r(this.featureName,e.runtime.session,e.init))return this.abortHandler?.(),(0,O.Ze)(this.agentRef,this.featureName),void this.loadedSuccessfully(!1);const{Aggregate:r}=await t();this.featAggregate=new r(e,n),e.runtime.harvester.initializedAggregates.push(this.featAggregate),this.loadedSuccessfully(!0)}catch(e){(0,f.R)(34,e),this.abortHandler?.(),(0,O.Ze)(this.agentRef,this.featureName,!0),this.loadedSuccessfully(!1)}};h.RI?(0,I.GG)(()=>i(),!0):i()}#r(e,r,n){if(this.blocked)return!1;switch(e){case t.K7.sessionReplay:return V(n)&&!!r;case t.K7.sessionTrace:return!!r;default:return!0}}#t(e){if(!C.has(e)&&(C.add(e),!(0,s.f)(e.info))){const t=(0,i.pV)();let r={...t.info?.jsAttributes};try{r={...r,...e.info?.jsAttributes}}catch(e){}T(e,{...t,info:{...t.info,jsAttributes:r},runtime:e.runtime},e.runtime.loaderType)}}}var L=r(6630);class F extends U{static featureName=L.T;constructor(e){var t;super(e,L.T),this.setupInspectionEvents(),t=e,(0,N.Y)(P.Fw,function(e,r){"string"==typeof e&&("/"!==e.charAt(0)&&(e="/"+e),t.runtime.customTransaction=(r||"http://custom.transaction")+e,(0,S.p)("api-"+P.Fw,[(0,j.t)()],void 0,void 0,t.ee))},t),this.importAggregator(e,()=>e.init.feature_flags.includes("rum_v2")?r.e(296).then(r.bind(r,908)):r.e(296).then(r.bind(r,7927)))}setupInspectionEvents(){const e=(e,t)=>{e&&(0,x.W)({timeStamp:e.timeStamp,loaded:"complete"===e.target.readyState,type:"window",name:t,data:e.target.location+""})};(0,I.sB)(t=>{e(t,"DOMContentLoaded")}),(0,I.GG)(t=>{e(t,"load")}),(0,I.Qr)(t=>{e(t,"navigate")}),this.ee.on(l.tS.UPDATE,(e,t)=>{(0,x.W)({type:"lifecycle",name:"session",data:t})})}}class G extends e.d{constructor(e){var t;(super(),h.gm)?(this.features={},(0,i.bQ)(this.agentIdentifier,this),this.desiredFeatures=new Set(e.features||[]),this.desiredFeatures.add(F),T(this,e,e.loaderType||"agent"),t=this,(0,N.Y)(P.cD,function(e,r,n=!1){if("string"==typeof e){if(["string","number","boolean"].includes(typeof r)||null===r)return(0,N.U)(t,e,r,P.cD,n);(0,f.R)(40,typeof r)}else(0,f.R)(39,typeof e)},t),function(e){(0,N.Y)(P.Dl,function(t,r=!1){if("string"!=typeof t&&null!==t)return void(0,f.R)(41,typeof t);const n=e.info.jsAttributes["enduser.id"];r&&null!=n&&n!==t?(0,S.p)("api-setUserIdAndResetSession",[t],void 0,"session",e.ee):(0,N.U)(e,"enduser.id",t,P.Dl,!0)},e)}(this),function(e){(0,N.Y)(P.nb,function(t){if("string"==typeof t||null===t)return(0,N.U)(e,"application.version",t,P.nb,!1);(0,f.R)(42,typeof t)},e)}(this),function(e){(0,N.Y)("start",function(){e.ee.emit("manual-start-all")},e)}(this),function(e){(0,N.Y)(P.Pv,function(t=!0){if("boolean"==typeof t){if((0,S.p)("api-"+P.Pv,[t],void 0,"session",e.ee),e.runtime.consented=t,t){const t=e.features.page_view_event;t.onAggregateImported.then(e=>{const r=t.featAggregate;e&&!r.sentRum&&r.sendRum?.()})}}else(0,f.R)(65,typeof t)},e)}(this),this.run()):(0,f.R)(21)}get config(){return{info:this.info,init:this.init,loader_config:this.loader_config,runtime:this.runtime}}get api(){return this}run(){try{const e=function(e){const t={};
5return n.forEach(r=>{t[r]=!!e[r]?.enabled}),t}(this.init),r=[...this.desiredFeatures],i=this.init.feature_flags.includes("rum_v2");r.sort((e,r)=>t.P3[e.featureName]-t.P3[r.featureName]),r.forEach(r=>{if(!e[r.featureName]&&(i||r.featureName!==t.K7.pageViewEvent))return;const n=function(e){switch(e){case t.K7.ajax:return[t.K7.jserrors];case t.K7.sessionTrace:return[t.K7.ajax,t.K7.pageViewEvent];case t.K7.sessionReplay:return[t.K7.sessionTrace];case t.K7.pageViewTiming:return[t.K7.pageViewEvent];default:return[]}}(r.featureName).filter(e=>!(e in this.features));n.length>0&&(0,f.R)(36,{targetFeature:r.featureName,missingDependencies:n}),this.features[r.featureName]=new r(this)})}catch(e){(0,f.R)(22,e);for(const e in this.features)this.features[e].abortHandler?.();const t=(0,i.Zm)();delete t.initializedAgents[this.agentIdentifier]?.features,delete this.sharedAggregator;return t.ee.get(this.agentIdentifier).abort(),!1}}}var H=r(2843),z=r(782);class Y extends U{static featureName=z.T;constructor(e){super(e,z.T),h.RI&&((0,H.u)(()=>(0,S.p)("docHidden",[(0,j.t)()],void 0,z.T,this.ee),!0),(0,H.G)(()=>(0,S.p)("winPagehide",[(0,j.t)()],void 0,z.T,this.ee)),this.importAggregator(e,()=>r.e(296).then(r.bind(r,9981))))}}var Z=r(3969);class q extends U{static featureName=Z.TZ;constructor(e){super(e,Z.TZ),this.importAggregator(e,()=>r.e(296).then(r.bind(r,9623)))}}new G({features:[F,Y,q],loaderType:"lite"})})()})();</script>
5
6<meta name="title" content="Outdoor Nativity Sets | American Made, Outdoor Nativity Displays"/>
7<meta name="description" content="American Made Outdoor Nativity Sets. Made from marine grade plastic to last for years. Get your Christmas Nativity Set for the holidays."/>
8<meta name="robots" content="INDEX,FOLLOW"/>
9<meta name="viewport" content="width=device-width, initial-scale=1"/>
10<title>Outdoor Nativity Sets | American Made, Outdoor Nativity Displays</title>
11<link  rel="stylesheet" type="text/css"  media="all" href="https://www.outdoornativitysets.com/static/version1789694905/frontend/Kadro/outdoor_nativity_sets_hyva/en_US/css/styles.css" />
12<link  rel="stylesheet" type="text/css"  defer="defer" href="https://www.outdoornativitysets.com/static/version1789694905/frontend/Kadro/outdoor_nativity_sets_hyva/en_US/Hyva_PayPalBraintree/css/apple-pay-and-google-pay.min.css" />
13<!--[if IE 11]>
14<script  type="text/javascript"  src="https://www.outdoornativitysets.com/static/version1789694905/frontend/Kadro/outdoor_nativity_sets_hyva/en_US/Klevu_Search/js/klevu/ieUrlPolyfill.js"></script>
14
15<![endif]-->
16<link  rel="icon" type="image/x-icon" href="https://www.outdoornativitysets.com/media/favicon/stores/7/favicon.ico" />
17<link  rel="shortcut icon" type="image/x-icon" href="https://www.outdoornativitysets.com/media/favicon/stores/7/favicon.ico" />
18<!-- Theme Scope: Store View -->
19
20<meta name="google-site-verification" content="vOwkjKpVFyjunryPd9BEx-gKNdTYiHNioB3dgP_dxSA" />
21
22<meta name="google-site-verification" content="9NXTtV4JwQL9qo00pyt29yiR95F8CKdYxC5OIpSUnuM" />
23
24<!-- Osano -->
25<script src="https://cmp.osano.com/8ejcWpwXQJ/ba349da9-d966-4213-b936-8868b41d98eb/osano.js"></script>
25
26
27<!-- ContactForm -->
28<script type='text/javascript'>
29    document.addEventListener('DOMContentLoaded', function (event) {
30
31        var openBtn = document.querySelector('.openZendeskHelpButton');
32        var block = document.querySelector('#mobile-contact-block');
33        if(!openBtn) {
34            return;
35        }
36        openBtn.addEventListener("click", function(){
37            if(typeof block !== 'undefined' && block) {
38                block.style.display = "block";
39            }
40        });
41
42        var closeBtn = document.querySelector('#contact-popup-close');
43        if(!closeBtn) {
44            return;
45        }
46        closeBtn.addEventListener("click", function(){
47            if(typeof block !== 'undefined' && block) {
48                block.style.display = "none";
49            }
50        });
51
52       var openLink = document.querySelector('#openZendeskHelpLink');
53       if(!openLink) {
54         return;
55      }
56       openLink.addEventListener("click", function() {
57          openBtn.click();
58       });
59    });
60</script>
60
61
62<!-- Misc -->
63<script type="text/javascript">
64	// Init toggle function
65	if (typeof window.toggleIdVis == 'undefined' 
66		|| window.toggleIdVis == null 
67		|| typeof window.toggleIdVis !== 'function'
68	)  {
69		window.toggleIdVis = function(id) {
70			let elem = document.getElementById(id);
71			if(!elem) {
72				return;
73			}
74			if ( elem.style.display == '' || elem.style.display == 'block' ) { 
75				elem.style.display = 'none';
76			} else {
77				elem.style.display = 'block';
78			}
79		}
80	}
81</script>
81
82
83<!-- UserWay -->
84<script defer src="https://cdn.userway.org/widget.js" data-account="4DTlzP3DEx"></script>
vendor: 2 bytes, line 84
84
85<script type="text/javascript">
86document.addEventListener("DOMContentLoaded", function(event) {
87    // Prevent Userway from interfering with focus on search input on mobile when suggestions are loaded as the user types
88    const observer = new MutationObserver((mutationList) => {
89        for (const mutation of mutationList) {
90            if (mutation.type === 'childList' && mutation.addedNodes.length > 0) {
91                var klevuContainers = [].slice.call(mutation.addedNodes).filter(function(e) {
92                    return e.tagName === 'DIV' && e.classList.contains('klevuWrap')
93                });
94                for (const container of klevuContainers) {
95                    for (const klevuLink of Array.from(container.querySelectorAll('a'))) {
96                        klevuLink.dataset.uwRmIgnore = "";
97                    }
98                }
99            }
100        }
101    });
102    observer.observe(document.querySelector('body'), { subtree: true, childList: true });
103});
104</script>
104
105            
106    <link rel="preconnect" href="https&#x3A;&#x2F;&#x2F;statsjs.klevu.com" crossorigin="anonymous"/>    <link rel="preconnect" href="https&#x3A;&#x2F;&#x2F;js.klevu.com" crossorigin="anonymous"/>
107<script nonce="OGtld3o0NWc5cnNreXdxc2dxbzd1N3R0ZnVkbmxzeno=">
108    window.YIREO_GOOGLETAGMANAGER2_ENABLED = true;
109    (function (events) {
110        const initYireoGoogleTagManager2 = function () {
111            events.forEach(function (eventType) {
112                window.removeEventListener(eventType, initYireoGoogleTagManager2);
113            });
114
115                        (function (w, d, s, l, i) {
116                w[l] = w[l] || [];
117                w[l].push({'gtm.start': new Date().getTime(), event: 'gtm.js'});
118                var f = d.getElementsByTagName(s)[0],
119                    j = d.createElement(s),
120                    dl = l != 'dataLayer' ? '&l=' + l : '';
121                j.async = true;
122                j.src = 'https://www.googletagmanager.com' + '/gtm.js?id=' + i + dl;
123                f.parentNode.insertBefore(j, f);
124            })(window, document, 'script', 'dataLayer', 'GTM-NS6TFXL');
125                    };
126
127        events.forEach(function (eventType) {
128            window.addEventListener(eventType, initYireoGoogleTagManager2, {once: true, passive: true})
129        });
130    })(['load', 'keydown', 'mouseover', 'scroll', 'touchstart', 'wheel']);
131
132    </script>
vendor: 1 bytes, line 132
132
133<script>
134    var BASE_URL = 'https://www.outdoornativitysets.com/';
135    var THEME_PATH = 'https://www.outdoornativitysets.com/static/version1789694905/frontend/Kadro/outdoor_nativity_sets_hyva/en_US';
136    var COOKIE_CONFIG = {
137        "expires": null,
138        "path": "\u002F",
139        "domain": ".www.outdoornativitysets.com",
140        "secure": true,
141        "lifetime": "7884000",
142        "cookie_restriction_enabled": false    };
143    var CURRENT_STORE_CODE = 'ons_site_eng';
144    var CURRENT_WEBSITE_ID = '7';
145
146    window.hyva = window.hyva || {}
147
148    window.cookie_consent_groups = window.cookie_consent_groups || {}
149    window.cookie_consent_groups['necessary'] = true;
150
151    window.cookie_consent_config = window.cookie_consent_config || {};
152    window.cookie_consent_config['necessary'] = [].concat(
153        window.cookie_consent_config['necessary'] || [],
154        [
155            'user_allowed_save_cookie',
156            'form_key',
157            'mage-messages',
158            'private_content_version',
159            'mage-cache-sessid',
160            'last_visited_store',
161            'section_data_ids'
162        ]
163    );
164</script>
vendor: 1 bytes, line 164
164
165<script>
166    'use strict';
167    (function( hyva, undefined ) {
168
169        function lifetimeToExpires(options, defaults) {
170
171            const lifetime = options.lifetime || defaults.lifetime;
172
173            if (lifetime) {
174                const date = new Date;
175                date.setTime(date.getTime() + lifetime * 1000);
176                return date;
177            }
178
179            return null;
180        }
181
182        function generateRandomString() {
183
184            const allowedCharacters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
185                length = 16;
186
187            let formKey = '',
188                charactersLength = allowedCharacters.length;
189
190            for (let i = 0; i < length; i++) {
191                formKey += allowedCharacters[Math.round(Math.random() * (charactersLength - 1))]
192            }
193
194            return formKey;
195        }
196
197        const sessionCookieMarker = {noLifetime: true}
198
199        const cookieTempStorage = {};
200
201        const internalCookie = {
202            get(name) {
203                const v = document.cookie.match('(^|;) ?' + name + '=([^;]*)(;|$)');
204                return v ? v[2] : null;
205            },
206            set(name, value, days, skipSetDomain) {
207                let expires,
208                    path,
209                    domain,
210                    secure,
211                    samesite;
212
213                const defaultCookieConfig = {
214                    expires: null,
215                    path: '/',
216                    domain: null,
217                    secure: false,
218                    lifetime: null,
219                    samesite: 'lax'
220                };
221
222                const cookieConfig = window.COOKIE_CONFIG || {};
223
224                expires = days && days !== sessionCookieMarker
225                    ? lifetimeToExpires({lifetime: 24 * 60 * 60 * days, expires: null}, defaultCookieConfig)
226                    : lifetimeToExpires(window.COOKIE_CONFIG, defaultCookieConfig) || defaultCookieConfig.expires;
227
228                path = cookieConfig.path || defaultCookieConfig.path;
229                domain = !skipSetDomain && (cookieConfig.domain || defaultCookieConfig.domain);
230                secure = cookieConfig.secure || defaultCookieConfig.secure;
231                samesite = cookieConfig.samesite || defaultCookieConfig.samesite;
232
233                document.cookie = name + "=" + encodeURIComponent(value) +
234                    (expires && days !== sessionCookieMarker ? '; expires=' + expires.toGMTString() : '') +
235                    (path ? '; path=' + path : '') +
236                    (domain ? '; domain=' + domain : '') +
237                    (secure ? '; secure' : '') +
238                    (samesite ? '; samesite=' + samesite : 'lax');
239            },
240            isWebsiteAllowedToSaveCookie() {
241                const allowedCookies = this.get('user_allowed_save_cookie');
242                if (allowedCookies) {
243                    const allowedWebsites = JSON.parse(unescape(allowedCookies));
244
245                    return allowedWebsites[CURRENT_WEBSITE_ID] === 1;
246                }
247                return false;
248            },
249            getGroupByCookieName(name) {
250                const cookieConsentConfig = window.cookie_consent_config || {};
251                let group = null;
252                for (let prop in cookieConsentConfig) {
253                    if (!cookieConsentConfig.hasOwnProperty(prop)) continue;
254                    if (cookieConsentConfig[prop].includes(name)) {
255                        group = prop;
256                        break;
257                    }
258                }
259                return group;
260            },
261            isCookieAllowed(name) {
262                const cookieGroup = this.getGroupByCookieName(name);
263                return cookieGroup
264                    ? window.cookie_consent_groups[cookieGroup]
265                    : this.isWebsiteAllowedToSaveCookie();
266            },
267            saveTempStorageCookies() {
268                for (const [name, data] of Object.entries(cookieTempStorage)) {
269                    if (this.isCookieAllowed(name)) {
270                        this.set(name, data['value'], data['days'], data['skipSetDomain']);
271                        delete cookieTempStorage[name];
272                    }
273                }
274            }
275        };
276
277        hyva.getCookie = (name) => {
278            const cookieConfig = window.COOKIE_CONFIG || {};
279
280            if (cookieConfig.cookie_restriction_enabled && ! internalCookie.isCookieAllowed(name)) {
281                return cookieTempStorage[name] ? cookieTempStorage[name]['value'] : null;
282            }
283
284            return internalCookie.get(name);
285        }
286
287        hyva.setCookie = (name, value, days, skipSetDomain) => {
288            const cookieConfig = window.COOKIE_CONFIG || {};
289
290            if (cookieConfig.cookie_restriction_enabled && ! internalCookie.isCookieAllowed(name)) {
291                cookieTempStorage[name] = {value, days, skipSetDomain};
292                return;
293            }
294            return internalCookie.set(name, value, days, skipSetDomain);
295        }
296
297
298        hyva.setSessionCookie = (name, value, skipSetDomain) => {
299            return hyva.setCookie(name, value, sessionCookieMarker, skipSetDomain)
300        }
301
302        hyva.getBrowserStorage = () => {
303            const browserStorage = window.localStorage || window.sessionStorage;
304            if (!browserStorage) {
305                console.warn('Browser Storage is unavailable');
306                return false;
307            }
308            try {
309                browserStorage.setItem('storage_test', '1');
310                browserStorage.removeItem('storage_test');
311            } catch (error) {
312                console.warn('Browser Storage is not accessible', error);
313                return false;
314            }
315            return browserStorage;
316        }
317
318        hyva.postForm = (postParams) => {
319            const form = document.createElement("form");
320
321            let data = postParams.data;
322
323            if (! postParams.skipUenc && ! data.uenc) {
324                data.uenc = btoa(window.location.href);
325            }
326            form.method = "POST";
327            form.action = postParams.action;
328
329            Object.keys(postParams.data).map(key => {
330                const field = document.createElement("input");
331                field.type = 'hidden'
332                field.value = postParams.data[key];
333                field.name = key;
334                form.appendChild(field);
335            });
336
337            const form_key = document.createElement("input");
338            form_key.type = 'hidden';
339            form_key.value = hyva.getFormKey();
340            form_key.name="form_key";
341            form.appendChild(form_key);
342
343            document.body.appendChild(form);
344
345            form.submit();
346        }
347
348        hyva.getFormKey = function () {
349            let formKey = hyva.getCookie('form_key');
350
351            if (!formKey) {
352                formKey = generateRandomString();
353                hyva.setCookie('form_key', formKey);
354            }
355
356            return formKey;
357        }
358
359        hyva.formatPrice = (value, showSign, options = {}) => {
360            const groupSeparator = options.groupSeparator;
361            const decimalSeparator = options.decimalSeparator
362            delete options.groupSeparator;
363            delete options.decimalSeparator;
364            const formatter = new Intl.NumberFormat(
365                'en\u002DUS',
366                Object.assign({
367                    style: 'currency',
368                    currency: 'USD',
369                    signDisplay: showSign ? 'always' : 'auto'
370                }, options)
371            );
372            return (typeof Intl.NumberFormat.prototype.formatToParts === 'function') ?
373                formatter.formatToParts(value).map(({type, value}) => {
374                    switch (type) {
375                        case 'currency':
376                            return '\u0024' || value;
377                        case 'minusSign':
378                            return '- ';
379                        case 'plusSign':
380                            return '+ ';
381                        case 'group':
382                            return groupSeparator !== undefined ? groupSeparator : value;
383                        case 'decimal':
384                            return decimalSeparator !== undefined ? decimalSeparator : value;
385                        default :
386                            return value;
387                    }
388                }).reduce((string, part) => string + part) :
389                formatter.format(value);
390        }
391
392        const formatStr = function (str, nStart) {
393            const args = Array.from(arguments).slice(2);
394
395            return str.replace(/(%+)([0-9]+)/g, (m, p, n) => {
396                const idx = parseInt(n) - nStart;
397
398                if (args[idx] === null || args[idx] === void 0) {
399                    return m;
400                }
401                return p.length % 2
402                    ? p.slice(0, -1).replace('%%', '%') + args[idx]
403                    : p.replace('%%', '%') + n;
404            })
405        }
406
407        hyva.str = function (string) {
408            const args = Array.from(arguments);
409            args.splice(1, 0, 1);
410
411            return formatStr.apply(undefined, args);
412        }
413
414        hyva.strf = function () {
415            const args = Array.from(arguments);
416            args.splice(1, 0, 0);
417
418            return formatStr.apply(undefined, args);
419        }
420
421        /**
422         * Take a html string as `content` parameter and
423         * extract an element from the DOM to replace in
424         * the current page under the same selector,
425         * defined by `targetSelector`
426         */
427        hyva.replaceDomElement = (targetSelector, content) => {
428            // Parse the content and extract the DOM node using the `targetSelector`
429            const parser = new DOMParser();
430            const doc = parser.parseFromString(content, 'text/html');
431            const contentNode = doc.querySelector(targetSelector);
432
433            // Bail if content or target can't be found
434            if (!contentNode || !document.querySelector(targetSelector)) {
435                return;
436            }
437
438                        hyva.activateScripts(contentNode);
439            
440            // Replace the old DOM node with the new content
441            document.querySelector(targetSelector).replaceWith(contentNode);
442
443            // Reload customerSectionData and display cookie-messages if present
444            window.dispatchEvent(new CustomEvent("reload-customer-section-data"));
445            hyva.initMessages();
446        }
447
448        hyva.removeScripts = (contentNode) => {
449            const scripts = contentNode.getElementsByTagName('script');
450            for (let i = 0; i < scripts.length; i++) {
451                scripts[i].parentNode.removeChild(scripts[i]);
452            }
453            const templates = contentNode.getElementsByTagName('template');
454            for (let i = 0; i < templates.length; i++) {
455                const container = document.createElement('div');
456                container.innerHTML = templates[i].innerHTML;
457                hyva.removeScripts(container);
458                templates[i].innerHTML = container.innerHTML;
459            }
460        }
461
462        hyva.activateScripts = (contentNode) => {
463            // Create new array from HTMLCollection to avoid mutation of collection while manipulating the DOM.
464            const scripts = Array.from(contentNode.getElementsByTagName('script'));
465
466            // Iterate over all script tags to duplicate+inject each into the head
467            for (const original of scripts) {
468                const script = document.createElement('script');
469                original.type && (script.type = original.type);
470                script.innerHTML = original.innerHTML;
471
472                // Remove the original (non-executing) script from the contentNode
473                original.parentNode.removeChild(original)
474
475                // Add script to head
476                document.head.appendChild(script);
477            }
478
479            return contentNode;
480        }
481
482        const replace = {['+']: '-', ['/']: '_', ['=']: ','};
483        hyva.getUenc = () => btoa(window.location.href).replace(/[+/=]/g, match => replace[match]);
484
485        let currentTrap;
486
487        const focusableElements = (rootElement) => {
488            const selector = 'button, [href], input, select, textarea, details, [tabindex]:not([tabindex="-1"]';
489            return Array.from(rootElement.querySelectorAll(selector))
490                .filter(el => {
491                    return el.style.display !== 'none'
492                        && !el.disabled
493                        && el.tabIndex !== -1
494                        && (el.offsetWidth || el.offsetHeight || el.getClientRects().length)
495                })
496        }
497
498        const focusTrap = (e) => {
499            const isTabPressed = e.key === 'Tab' || e.keyCode === 9;
500            if (!isTabPressed) return;
501
502            const focusable = focusableElements(currentTrap)
503            const firstFocusableElement = focusable[0]
504            const lastFocusableElement = focusable[focusable.length - 1]
505
506            e.shiftKey
507                ? document.activeElement === firstFocusableElement && (lastFocusableElement.focus(), e.preventDefault())
508                : document.activeElement === lastFocusableElement && (firstFocusableElement.focus(), e.preventDefault())
509        };
510
511        hyva.releaseFocus = (rootElement) => {
512            if (currentTrap && (!rootElement || rootElement === currentTrap)) {
513                currentTrap.removeEventListener('keydown', focusTrap)
514                currentTrap = null
515            }
516        }
517        hyva.trapFocus = (rootElement) => {
518            if (!rootElement) return;
519            hyva.releaseFocus()
520            currentTrap = rootElement
521            rootElement.addEventListener('keydown', focusTrap)
522            const firstElement = focusableElements(rootElement)[0]
523            firstElement && firstElement.focus()
524        }
525
526        hyva.safeParseNumber = (rawValue) => {
527            const number = rawValue ? parseFloat(rawValue) : null;
528
529            return Array.isArray(number) || isNaN(number) ? rawValue : number;
530        }
531
532        const toCamelCase = s => s.split('_').map(word => word.charAt(0).toUpperCase() + word.slice(1)).join('');
533        hyva.createBooleanObject = (name, value = false, additionalMethods = {}) => {
534
535            const camelCase = toCamelCase(name);
536            const key = '__hyva_bool_' + name
537
538            return new Proxy(Object.assign(
539                additionalMethods,
540                {
541                    [key]: !!value,
542                    [name]() {return !!this[key]},
543                    ['!' + name]() {return !this[key]}, // @deprecated This does not work with non-CSP Alpine
544                    ['not' + camelCase]() {return !this[key]},
545                    ['toggle' + camelCase]() {this[key] = !this[key]},
546                    [`set${camelCase}True`]() {this[key] = true},
547                    [`set${camelCase}False`]() {this[key] = false},
548                }
549            ), {
550                set(target, prop, value) {
551                    return prop === name
552                        ? (target[key] = !!value)
553                        : Reflect.set(...arguments);
554                }
555            })
556        }
557
558                hyva.alpineInitialized = (fn) => window.addEventListener('alpine:initialized', fn, {once: true})
559        window.addEventListener('alpine:init', () => Alpine.data('{}', () => ({})), {once: true});
560                window.addEventListener('user-allowed-save-cookie', () => internalCookie.saveTempStorageCookies())
561
562    }( window.hyva = window.hyva || {} ));
563</script>
vendor: 1 bytes, line 563
563
564<script>
565    if (!window.IntersectionObserver) {
566        window.IntersectionObserver = function (callback) {
567            this.observe = el => el && callback(this.takeRecords());
568            this.takeRecords = () => [{isIntersecting: true, intersectionRatio: 1}];
569            this.disconnect = () => {};
570            this.unobserve = () => {};
571        }
572    }
573</script>
573
574
575<script type="text&#x2F;javascript">
576window.addEventListener('klevu_script_loaded', function() {
577
578    var nowUnixtime = parseInt(Date.now() / 1000);
579
580    function klevufejs_getCookie(name) {
581        if (typeof (name) === "undefined") {
582            name = "klv_mage";
583        }
584        var c = "",
585            ca = document.cookie.split(';');
586
587        for (var i = 0; i < ca.length; i++) {
588            c = ca[i];
589            if (typeof c !== "string") {
590                continue;
591            }
592            var cookiePair = c.split("=");
593
594            if (name === cookiePair[0].trim()) {
595                try {
596                    return JSON.parse(decodeURIComponent(cookiePair[1]));
597                } catch (err) {
598                    // this is fine, data will be regenerated
599                }
600            }
601        }
602        return {
603            expire_sections: {}
604        };
605    }
606
607    document.addEventListener('klevu.customerData.loaded', function (e) {
608    var klevufejs_cookie = klevufejs_getCookie();
609    klevufejs_cookie.expire_sections.customerData = nowUnixtime + 600;
610
611    document.cookie = "klv_mage=" + JSON.stringify(klevufejs_cookie)
612        + "; expires=" + new Date((nowUnixtime + 7884000) * 1000).toUTCString()
613        + "; path=/"
614        + "; samesite=strict";
615    });
616
617    var klevufejs_cookie = klevufejs_getCookie();
618    var klevuData = {
619        ...{
620            customerData: {
621                revalidate_after: -1
622            }
623        },
624        ...JSON.parse(window.localStorage.getItem('klv_mage') || '{}')
625    };
626
627    const klevuCustomerDataLoadedEvent = document.createEvent('CustomEvent');
628    klevuCustomerDataLoadedEvent.initEvent('klevu.customerData.loaded', false, true);
629    const klevuCustomerDataLoadErrorEvent = document.createEvent('CustomEvent');
630    klevuCustomerDataLoadErrorEvent.initEvent('klevu.customerData.loadError', false, true);
631
632    if (typeof klevufejs_cookie.expire_sections !== "object"
633        || (klevufejs_cookie.expire_sections.customerData || -1) < nowUnixtime
634        || klevuData.customerData.revalidate_after < nowUnixtime
635        ) {
636            var xhttp = new XMLHttpRequest();
637            xhttp.onerror = function (request) {
638                document.dispatchEvent(klevuCustomerDataLoadErrorEvent);
639            };
640            xhttp.ontimeout = function (request) {
641                this.onerror(request);
642            };
643            xhttp.onload = function (request) {
644                if (this.status >= 400 || this.timeout) {
645                    this.onerror(request);
646                    return;
647                }
648                var klevuData = JSON.parse(window.localStorage.getItem('klv_mage') || '{}');
649                klevuData.customerData = JSON.parse(this.response);
650                window.localStorage.setItem('klv_mage', JSON.stringify(klevuData));
651                document.dispatchEvent(klevuCustomerDataLoadedEvent);
652            };
653        // TI-956 - Patch to use async request instead of synchronous
654        xhttp.open('GET', 'https://www.outdoornativitysets.com/rest/V1/klevu/customerData', true);
655        xhttp.send();
656    } else {
657        document.dispatchEvent(klevuCustomerDataLoadedEvent);
658    }
659});</script>
659</head>
660<body id="html-body" class="cms-home cms-index-index page-layout-1column">
vendor: 68 bytes, lines 660-661
660
661<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
661GTM-NS6TFXL
vendor: 88 bytes, lines 661-663
661" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
662
663    
663<noscript>
664        <section class="message global noscript border-b-2 border-blue-500 bg-blue-50 shadow-none m-0 px-0 rounded-none font-normal">
665            <div class="container text-center">
666                <p>
667                    <strong>JavaScript seems to be disabled in your browser.</strong>
668                    <span>
669                        For the best experience on our site, be sure to turn on Javascript in your browser.                    </span>
670                </p>
671            </div>
672        </section>
673    </noscript>
674
675
676<script>
677    document.body.addEventListener('touchstart', () => {}, {passive: true})
678</script>
vendor: 1 bytes, line 678
678
679<script nonce="OGtld3o0NWc5cnNreXdxc2dxbzd1N3R0ZnVkbmxzeno=">
680    function yireoGoogleTagManager2Pusher(eventData, message, callback) {
681        window.YIREO_GOOGLETAGMANAGER2_PAST_EVENTS = window.YIREO_GOOGLETAGMANAGER2_PAST_EVENTS || [];
682
683        function doCallback(cb) {
684            if (undefined === cb) {
685                return;
686            }
687
688            cb();
689        }
690
691        
692        const copyEventData = Object.assign({}, eventData);
693        let metaData = {};
694        if (copyEventData.meta) {
695            metaData = copyEventData.meta;
696            delete copyEventData.meta;
697        }
698
699        const eventHash = btoa(encodeURIComponent(JSON.stringify(copyEventData)));
700        if (window.YIREO_GOOGLETAGMANAGER2_PAST_EVENTS.includes(eventHash)) {
701            yireoGoogleTagManager2Logger('Warning: Event already triggered', eventData);
702            doCallback(callback);
703            return;
704        }
705
706        if (metaData && metaData.allowed_pages && metaData.allowed_pages.length > 0
707            && false === metaData.allowed_pages.some(page => window.location.pathname.includes(page))) {
708            yireoGoogleTagManager2Logger('Warning: Skipping event, not in allowed pages', window.location.pathname, eventData);
709            doCallback(callback);
710            return;
711        }
712
713        if (!message) {
714            message = 'push (unknown) [unknown]';
715        }
716
717        yireoGoogleTagManager2Logger(message, eventData);
718        window.dataLayer = window.dataLayer || [];
719
720        if (eventData.ecommerce) {
721            window.dataLayer.push({ecommerce: null});
722        }
723
724        try {
725            window.dataLayer.push(eventData);
726            window.YIREO_GOOGLETAGMANAGER2_PAST_EVENTS.push(eventHash);
727        } catch(error) {
728            doCallback(callback);
729        }
730
731        doCallback(callback);
732    }
733</script>
vendor: 1 bytes, line 733
733
734<script nonce="OGtld3o0NWc5cnNreXdxc2dxbzd1N3R0ZnVkbmxzeno=">
735    function yireoGoogleTagManager2Logger(...args) {
736        const debug = window.YIREO_GOOGLETAGMANAGER2_DEBUG || false;
737        if (false === debug) {
738            return;
739        }
740
741        var color = 'gray';
742        if (args[0].toLowerCase().startsWith('push')) {
743            color = 'green';
744        }
745
746        if (args[0].toLowerCase().startsWith('warning')) {
747            color = 'orange';
748        }
749
750        var css = 'color:white; background-color:' + color + '; padding:1px;'
751        console.log('%cYireo_GoogleTagManager2', css, ...args);
752    }
753</script>
753
754<div class="page-wrapper"><header class="page-header z-10"><div class="mobile-contact-message"><style>
755@media only screen and (max-width: 768px) {
756    .ppage-header .logo img { height: 45px !important; width: 100% !important; }
757   .page-layout-checkout .logo img { height: 45px !important; width: 100% !important; }
758}
759</style></div><a class="action skip sr-only focus:not-sr-only focus:absolute focus:z-40 focus:bg-white
760   contentarea"
761   href="#contentarea">
762    <span>
763        Skip to Content    </span>
764</a>
765<div class="klevu-overlay" style="display: none;">
766    <!-- intentionally empty -->
767</div>
768<div id="utility-navigation" class="navigation"><div class="utility-navigation-wrapper"><!-- Block: utility_nav -->
769
770<style>
771.bg-header { background-color: #ffffff; }
772#search-content { display: none !important; }
773#header .text-white { color: #111; }
774
775.product-info-main .mfg_link { display: none; }
776.product-info .slider-item-info .btn { margin: 0 auto; }
777
778@media only screen and (min-width: 767px) {
779  .kadro-navigation { display: none !important; }
780}
781@media only screen and (max-width: 767px) {
782  .search-wrapper { display: none !important; }
783}
784</style>
785
786<!-- CMS Content Page -->
787<style>
788.cms-page-view .column.main .scalemedia {
789    position: relative;
790    height: 0;
791    overflow: hidden;
792    padding-bottom: 56.25%;
793}
794.cms-page-view .column.main .scalemedia iframe {
795    position: absolute;
796    left: 0;
797    top: 0;
798    height: 100%;
799    width: 100%;
800</style>
801
802<!-- PDP Bundles -->
803<style>
804@media (min-width: 768px) {
805  .page-product-bundle .product-options-bottom .card { margin: 30px 0 30px 0; padding: 0 30px 0 30px; }
806}
807.page-product-bundle .product-options-bottom .card { margin: 20px 0 20px 0; padding: 0; }
808.page-product-bundle .product-options-bottom .fieldset-bundle-options>div:first-of-type { border-top-width: 1px; }
809fieldset.fieldset-bundle-options { margin-off: 30px 30px 20px 30px; }
810fieldset.fieldset-bundle-options .border-container.swatch { border: 0; }
811fieldset.fieldset-bundle-options > div:not(.swatch)  { border: 1px solid rgb(209, 213, 219); padding: 0; box-shadow: 0 2px 4px #efefef; }
812fieldset.fieldset-bundle-options > div:not(.swatch)  > div { padding-left: 20px; padding-right: 20px; }
813.catalog-product-view .fieldset .field { padding-left: 0 !important; }
814fieldset.fieldset-bundle-options .border-container { margin-bottom: 2rem; }
815fieldset.fieldset-bundle-options > div:not(.swatch) > label  { background-color: #f7f7f7; padding: 8px; text-transform: uppercase; font-weight: normal; border-color: rgb(209, 213, 219); border-width: 0 0 1px 0; }
816.catalog-product-view fieldset .field.choice .form-checkbox { height: 1.5rem; width: 1.5rem; }
817.catalog-product-view fieldset .field.choice .radio { height: 1.5rem; width: 1.5rem; }
818
819.page-product-bundle .product-options-bottom .fieldset-bundle-options .retail-price-container { font-size: 1.3rem; }
820.page-product-bundle .product-options-bottom .fieldset-bundle-options .retail-price-container .price-wrapper { font-size: 1.3rem; }
821
822#bundleSummary .title { display: none; }
823#bundleSummary .price-box { display: none; }
824
825
826</style>
827
828<!-- Mini Cart Customizations -->
829<style>
830span[x-html="item.product_sku"] {
831    display: none;
832}
833
834div[x-data="{ currentQty: item.qty, isPromoProduct: item.promo_product }"] {
835    display: none;
836}
837</style>
838
839<!-- Turno CSS Customizations -->
840<style>
841  .tt-c-product-about { display: none !important; }
842  #tt-teaser .TTteaser__rating span { font-size: 16px; }
843</style>
844
845
846<!-- Klevu Search CSS -->
847<style>
848.search-index-index .page-title { display: none; }
849</style>
850
851<!-- Klevu Filter CSS -->
852<style>
853.mfg_link { font-size: 17px; color: #454749; text-transform: uppercase; font-weight: bold; }
854.product-info-main .page-title-container { margin-top: .5rem; }
855
856@media screen and (max-width: 800px) {
857
858.product.attribute.sku {
859    display: none;
860}
861
862.product-info-main #gallery {
863  padding-top: 0 !important;
864}
865.product-info-main #gallery {
866  padding-top: 0 !important;
867  width: 90%;
868  margin: 0 auto;
869}
870.js_thumbs_slide {
871  width: 58px;
872}
873#thumbs {
874  min-height: 78px !important;
875  margin-bottom: 10px;
876}
877.product-info-main .price-info-container {
878  margin-bottom: 1rem;
879  --tw-border-opacity: 1;
880  border-bottom: 0;
881  border-style: solid;
882}
883.product-info-main .price-info-container > .stock {
884  float: none;
885  margin-bottom: 1rem;
886  display: block;
887  text-align: left;
888  margin-top: 10px;
889}
890.catalog-product-view .price-info-container > .stock {
891  width: 100%;
892}
893.lead-time {
894  border: 1px solid #ccc;
895  border-radius: 3px;
896  padding: 10px 15px;
897}
898.lead-time div {
899  display: inline-block;
900}
901.product-info-main .price-info-container > .stock a {
902  display: block;
903}
904#tt-teaser span {
905    display: none;
906}
907.TTteaser__read-comments, .TTteaser__read-reviews, .TTteaser__write-review {
908    font-size: 1.3rem;
909}
910#review-tab-label,
911#qa-tab-label {
912    text-transform: uppercase;
913    font-weight: 300;
914}
915#qa-review div.product.data.items {
916    margin: 0 0px 20px;
917}
918#product-accordion .accordion-section-header svg {
919    float: right;
920    display: inline-block;
921    position: absolute;
922    right: 12px;
923    width: 20px;
924    height: 20px;
925}
926#qa-review .product.data.items>.data.item.title>.switch>svg {
927    right: 12px;
928    width: 20px;
929    height: 20px;
930}
931#qa-review .product.data.items>.data.item.title {
932    background: #f7f7f7;
933}
934  
935}
936 
937
938
939
940.product-info-main .border-solid.border-b.border-b-gray-300 {
941    border: 0;
942}
943#review-tab-label, #qa-tab-label {
944        text-transform: uppercase;
945        font-weight: 300;
946        color: rgb(75 85 99 / var(--tw-text-opacity));
947    }
948.product.attribute.sku {
949    margin-top: 5px;
950}
951.product-info-main .price-info-container>.stock,
952.TTteaser__read-comments, .TTteaser__read-reviews, .TTteaser__write-review,
953.product.attribute.sku,
954.product.attribute.product-teaser p,
955#product-accordion .accordion-section-content ul:not(.list)>li,
956span.tt-c-answer__best-answer-text,
957.boatout_free_ship,
958.product-attr-show-block-attention {
959    font-size: 16px;
960}
961.tt-c-question__title {
962    font-size: 18px;
963}
964#product-accordion .accordion-section-header.active,
965#product-accordion .accordion-section-header:hover,
966#product-accordion .accordion-section-header {
967    background-color: #f7f7f7;
968    border-radius: 0;
969    border-left: 0;
970    border-right: 0;
971}
972#product-accordion .accordion-section-header svg {
973    float: right;
974    display: inline-block;
975    position: absolute;
976    right: 12px;
977    width: 20px;
978    height: 20px;
979}
980#product-accordion .accordion-section-header h2 {
981    text-transform: uppercase;
982    font-weight: 300;
983}
984#product-accordion {
985    margin-bottom: 0 !important;
986    position: relative;
987}
988#product-accordion .accordion-section-header svg {
989    float: right;
990}
991.tt-c-review__heading-text {
992    font-size: 1.4rem !important;
993    line-height: 1.1;
994    font-weight: 600 !important;
995}
996.tt-c-reviews-toolbar .tt-o-button {
997    display: none;
998}
999.product.attribute.product-teaser p {
1000  line-height: 25px;
1001}
1002#product-accordion .accordion-section-content .importantNote {
1003  padding: 10px 20px;
1004  margin-top: 20px;
1005  font-size: 16px;
1006}
1007.tt-o-icon--star--full {
1008    fill: #f8b900!important;
1009}
1010.tt-c-callout-comment__text::after {
1011  bottom: -1.8rem;
1012}
1013.tt-c-callout-comment__text {
1014  border-radius: 5px;
1015}
1016.tt-l-grid__header.tt-c-reviews-summary__grid-header {
1017  display: none;
1018}
1019.tt-c-reviews-summary__rating-number {
1020  font-size: 4.4rem;
1021}
1022.tt-o-icon--xl {
1023  width: 2.5rem;
1024  height: 2.5rem;
1025}
1026.tt-o-icon--lg {
1027  width: 1.5rem;
1028  height: 1.5rem;
1029}
1030.tt-o-badge {
1031  display: inline-flex;
1032  align-items: center;
1033  padding: .3rem .8rem;
1034  background-color: #eee;
1035  border-radius: 2rem;
1036  font-size: .9rem;
1037  font-weight: 400;
1038  text-transform: uppercase;
1039  letter-spacing: .08rem;
1040  line-height: normal;
1041  color: #111;
1042  vertical-align: middle;
1043  border: 1px solid #ccc;
1044}
1045.tt-c-review-toolbar.tt-u-mb--xs {
1046  display: none;
1047}
1048.tt-c-question__title {
1049 font-size: 1.5rem;
1050 line-height: 1.3;
1051}
1052.tt-c-answer--best .tt-c-answer__text {
1053  font-size: 1.3rem;
1054  line-height: 1.4;
1055}
1056.price-info-container {
1057    margin-top: 1rem;
1058  }
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072.actions-toolbar .towishlist { display: none; }
1073
1074
1075.slick-prev, .slick-next { z-index: 100 !important; }
1076.kuContainer .kuResults ul .klevuProduct .kuProdWrap footer .kuProdSwatchSlider { margin-top: 0 !important; }
1077.kuContainer .kuResults ul .klevuProduct .kuProdWrap footer .kuProdSwatchSlider .plp-swatch-slider-container .plp-color-option-swatch > * { border: 1px solid #999; }
1078.kuProdAdditionalData .action.tocart.primary  { font-size: 1.2rem; }
1079
1080.kuFilterBox .kuFilterNames ul li a { font-size: 15px; line-height: 120%; }
1081.kuFilterBox { margin-bottom: 20px; }
1082.kuLandingResultsViewSwitchContainer { display: none; }
1083.kuSearchResultsPageContainer .kuPagination a { font-size: 17px; }
1084.noUi-horizontal .noUi-handle-upper .noUi-tooltip { bottom: -40px; }
1085.noUi-horizontal .noUi-handle-lower .noUi-tooltip { bottom: -40px; }
1086#kuFilterOpener { padding: 10px 15px; }
1087body .page-wrapper .klevuLanding.kuSearchResultsPageContainer [data-container-id=ku_landing_main_container] .kuContainer .kuResults ul .klevuProduct .kuProdWrap .kuProdTop .klevuImgWrap img { margin: 1rem .75rem; }
1088body .page-wrapper .klevuLanding.kuSearchResultsPageContainer [data-container-id=ku_landing_main_container] .kuContainer .kuResults ul .klevuProduct .kuProdWrap .kuProdTop .klevuImgWrap { padding-bottom: 100%; }
1089
1090#product-accordion { margin-bottom: 0 !important; }
1091#product-accordion .accordion-section-content ul:not(.list) { line-height: 20px; margin-bottom: 12px; padding-inline-start: 20px; }
1092#product-accordion .accordion-section-content ul:not(.list)>li { line-height: 20px; margin-bottom: 12px; padding-inline-start: 0; }
1093#product-accordion .accordion-section-content { padding: 0 !important; }
1094
1095@media (min-width: 1000px) {
1096  .catalog-category-view #maincontent > .category-cms div[data-content-type="row"] > div { margin: 0 auto; max-width: 1000px; background-color: #efefef; padding: 0 100px; }
1097 }
1098
1099.catalog-product-view-expert-advice .article-body div[data-content-type="row"]:nth-child(2)  { line-height: 0; }
1100.catalog-product-view-expert-advice .article-body div[data-content-type="row"]:nth-child(n+3) > div { margin: 0 auto; max-width: 1000px; background-color: #efefef; padding: 0 100px; }
1101.catalog-product-view-expert-advice .article-body div[data-content-type="row"]:last-child > div { max-width: 1280px;
1101 padding: 0 30px !important; background-color: inherit !important; }
1102
1103.catalog-product-view-expert-advice .article-body a { color: #0057bf; }
1104.catalog-product-view-expert-advice .article-body a:hover { text-decoration: underline; color: #111; }
1105.catalog-product-view-expert-advice  h1 { font-size: 48px !important; }
1106.catalog-product-view-expert-advice .article-body h2 { font-size: 32px; }
1107.catalog-product-view-expert-advice .article-body h3 { font-size: 24px; }
1108.catalog-product-view-expert-advice .article-body h4 { font-size: 1.4rem; font-weight: bold; }
1109
1110.catalog-product-view-expert-advice .article-quote { line-height: 1.3; font-size: 24px; border-left: 3px solid #00263d; padding-left: 13px; margin: 15px 0 24px 50px; }
1111
1112.catalog-product-view-expert-advice .article-toc, .catalog-category-view .article-toc { border: 1px solid #111; background-color: #fff; padding: 15px !important; margin: 15px 0; }
1113.catalog-product-view-expert-advice .article-toc li, .catalog-category-view .article-toc  li { list-style: none; }
1114.catalog-product-view-expert-advice .article-toc li a:hover, .catalog-category-view .article-toc  li a:hover { text-decoration: underline; }
1115.catalog-product-view-expert-advice .article-toc h2, .catalog-category-view .article-toc  h2 { margin-top: 0; }
1116
1117.catalog-product-view-expert-advice .article-toc .level1 { font-weight: bold; }
1118.catalog-product-view-expert-advice .article-toc .level2, .catalog-category-view .article-toc .level2 { padding-left: 2rem; }
1119.catalog-product-view-expert-advice .article-toc .level3, .catalog-category-view .article-toc .level3 { padding-left: 4rem; }
1120
1121.learn-slider:before { content: ''; display: none; }
1122
1123@media (max-width: 1000px) {
1124  .catalog-product-view-expert-advice  h1 { font-size: 30px !important; }
1125  .catalog-product-view-expert-advice .article-body div[data-content-type="row"]:nth-child(n+3) > div { max-width: none; background-color: #efefef; padding: 0 15px !important; }
1126  .catalog-product-view-expert-advice .article-info { font-size: 13px; }
1127}
1128
1129@media only screen and (max-width: 767px) {
1130  .catalog-product-view .column.main>div:not(.custom-html-full-container) { padding: 0; }
1131  .page-header .nav-toggle { top: -5px; }
1132  .logo-container img { height: 45px !important; width: 100% !important; }
1133}
1134
1135@media (min-width: 768px) {
1136    .kadro-navigation {
1137        margin-left: 0;
1138        max-width: 765px;
1139    }
1140  .logo-container img { margin-right: 4rem; }    
1141}
1142
1143@media (max-width: 769px) {
1144  .page-layout-1column.page-with-filter .column.main { padding-top: 0; }
1145  .kuMobileDeviceEnabled .kuContainer { padding-left: 0; padding-right: 0; }
1146  .kuSearchResultsPageContainer .kuFilters { padding-left: 0; padding-right: 0; }
1147
1148  .kuContainer { padding-left: 0; }
1149  .catalog-category-view.page-layout-site-width-grid-no-left-col .column.main { padding: 0 !important; }
1150  .catalog-product-view-expert-advice .page-main { padding: 0 !important; }
1151}
1152</style>
1153
1154<!-- CSS Modifiers -->
1155<style>
1156/*html { font-size: 75.5%; }*/
1157
1158.mfp-title { color: #111; font-size: 1.1rem; }
1159.mfp-bottom-bar { left: auto; margin-top: -65px; }
1160img.mfp-img { padding: 25px 0 60px;  }
1161
1162.braintree-paypal-logo.oneclick-container { display: none; }
1163
1164.category-view .slick-slider .slick-slide .product-item-details .product-item-actions { display: none; }
1165.slick-slider .product-item-info { padding-left: 10px; padding-right: 10px; }
1166.slick-slider .product-item-info  .product-item-name { height: 3.4rem; overflow: hidden; }
1167.slick-dots li button { background-color: #ccc; }
1168
1169.catalog-product-view #maincontent .product-info-main .product-add-form .box-tocart .fieldset .actions { width: 70%; margin-left: 10px; }
1170
1171@media only screen and (max-width: 900px) {
1172  .kuProdBottom .kuPrice { font-size: inherit; }
1173}
1174@media (max-width: 768px) {
1175  .klevuAutoSuggestionsWrap.klevuAutosuggestions li { border: 1px solid #ddd; margin: 5px; text-align: center; }
1176}
1177
1178.kuSearchPersonalizationsContainer [ku-container] a, [ku-container] p, [ku-container] div, [ku-container] ul li { font-size: 1.4rem; }
1179.kuSearchPersonalizationsContainer  .klevuAutoSuggestionsWrap, .kuPopularSearchesBlock  { margin-bottom: 2rem !important; }
1180.kuSearchPersonalizationsContainer  .klevuSuggestionHeading { padding: 0; }
1181.kuSearchPersonalizationsContainer  .klevuHeadingText { margin-bottom: .5rem; }
1182.kuSearchResultsPageContainer .kuResults ul li .kuName { font-size:12px; }
1183.kuSearchResultsPageContainer .kuResults ul li .kuName a { font-size: 12px !important; }
1184body .klevuLanding .kuName .width-height, body .klevuLanding .kuName .width-height { font-size: 12px; }
1185.klevuNoResultsRecs-itemPrice .kuSalePrice, .productQuick-Price .kuSalePrice, .kuPrice .kuSalePrice { font-size: 14px; }
1186.klevuAutoSuggestionsWrap ul li a { line-height: inherit; }
1187
1188body .kuQuickResultsListContainer .klevuProduct .klevuQuickProductName { font-size: 1.4rem !important; }
1189.klevuResultsBlock .klevuQuickSearchResults ul li a.klevuQuickProductInnerBlock { padding: 0; }
1190
1191.klevuProduct.kuQSMenuItem.kuSlide:hover { background-color: #f5f5f5; }
1192.kuQuickResultsListContainer .klevuProduct .klevuQuickProductName { font-size: 1.4rem !important; }
1193
1194.klevuQuickProductDescBlock { height: 45px; overflow: hidden; }
1195
1196#klevuCategoryArea ul > li:nth-child(3) ~ li, .klevuAutoSuggestionsWrap ul > li:nth-child(3) ~ li { display: none; }
1197
1198.kuSearchResultsPageContainer .kuResults ul li .kuName a { font-size: 1.4rem; }
1199
1200.subcats { width: 140px; height: 150px; }
1201.subcats span { font-size: inherit; display: block; }
1202
1203.catalog-product-view #maincontent .product-info-main .page-title { font-size: 2rem; }
1204
1205@media (min-width: 767px) {
1206  .subcats { width: 140px; height: 150px; }
1207  .product-item .product-reviews-summary .reviews-actions { font-size: 1.2rem; }
1208  h1 { 2.8rem; }
1209  .catalog-product-view .column.main>div:not(.custom-html-full-container) { padding-left: 0; padding-right: 0; }
1210}
1211
1212.catalog-product-view .column.main .custom-html-full-container { margin-left: 0; margin-right: 0 }
1213
1214.cart-summary #block-shipping { display: none; }
1215
1216.catalog-product-view   .orig-price-box .price-label { display: inline; font-weight: normal; color: #b54626 !important; font-size: 1.5rem; }
1217.catalog-product-view   .orig-price-box .price-label:before { font-size: 1.7rem; content: '\f218  '; font-family: 'FontAwesome'; }
1218.catalog-product-view   .orig-price-box .price-value { display: inline; font-weight: 700; color: rgba(8,108,162,.7) !important; font-size: 1.7rem !important; text-decoration: line-through; }
1219
1220.catalog-product-view   .item.product.product-item { margin-left: 0 !important; }
1221.catalog-product-view   .fieldset .field { padding-left: 1rem; }
1222.catalog-product-view   .product.pricing { display: none; }
1223
1224.catalog-category-view.page-layout-site-width-grid .columns { padding-left: 0; padding-right: 0; }
1225
1226.product-add-form .fieldset>.field>.label { font-weight: 700; }
1227
1228#product-config-calculator-container+.product-options-wrapper .field .label { min-width: 9.5em; }
1229
1230@media (max-width: 767px) {
1231  .catalog-category-view.page-layout-site-width-grid .column { padding-left: 0; padding-right: 0; }
1232 #product-config-calculator-container+.product-options-wrapper .field { display: inline-block; margin: 0 0 1.5rem !important; }
1233 #product-config-calculator-container+.product-options-wrapper .field .control { display: inline-block; max-width: 160px; }
1234 .sidebar.sidebar-main { position: static !important; }
1235
1236
1237}
1238@media (min-width: 767px) {
1239  #product-config-calculator-container+.product-options-wrapper .field { width: 49% !important; display: inline-block; margin: 0 0 1.5rem !important; }
1240  #product-config-calculator-container+.product-options-wrapper .field .control { display: block; width: 80%; }
1241}
1242
1243.tt-o-pagination__next .tt-o-icon, .tt-o-pagination__back .tt-o-icon { height: 2rem !important; width: 2rem !important; }
1244.TTteaser__icon--empty { stroke: #ffcd3a; }
1245
1246.columns .column.main { padding-bottom: 10px !important; }
1247.page-header .block-search .control { background-color: #00263d; }
1248.catalog-product-view-expert-advice .tt-c-ask__label-text { display: none; }
1249.catalog-category-view.page-layout-category-learn.page-products .column.main { padding: 0 20px; }
1250
1251.cart.table-wrapper .actions-toolbar { padding-bottom: 25px; }
1252
1253.product-social-links { display: none; }
1254
1255.mageplaza-fbt-content ol, .mageplaza-fbt-content ul { padding-left: 0; }
1256.mageplaza-fbt-checkbox-label strong { display: none; }
1257.mageplaza-frequently-bought-together-block hr { display: none; }
1258#block-mageplaza-fbt-heading { font-weight: 600; }
1259
1260.tt-c-gallery__heading { font-weight: 600; text-align: left; }
1261#tt-chatter-heading { font-weight: 600; text-align: left; }
1262#qa-review .title { font-weight: 600; text-align: left; }
1263.catalog-product-view.catalog-product-view-expert-advice #tt-instant-answers-widget { margin-bottom: 2rem; }
1264
1265@media (max-width: 768px) {
1266  .tt-c-reviews-summary__expander, .tt-c-reviews-list-utilities, .tt-c-ratings-breakdown { display: none; }
1267  .tt-c-reviews-summary__write-review.tt-u-mb--xl { margin-bottom: 0; }
1268}
1269
1270.pagebuilder-column .widget-product-grid .product-item .product-item-actions .actions-secondary { display: none !important; }
1271.product-item-details .product-item-actions .actions-secondary { display: none !important; }
1272.product.actions.product-item-actions { text-align: center; }
1273
1274.block.crosssell .product-item .price-final_price { text-align: center; }
1275.block.crosssell .tocart { padding: 8px 6px; }
1276.block.crosssell .products-grid .product-item, .block.crosssell .products-crosssell.products-grid .product-item { width: 24%; padding-left: 10px; }
1277.block.crosssell .product-reviews-summary { display: none;  }
1278.products-crosssell .product-item-name { height: 4.3rem !important; overflow-y: hidden; }
1279
1280@media (max-width: 768px) {
1281  .block.crosssell { display: none; }
1282}
1283
1284.block.block-banners { margin-bottom: 0 !important; }
1285
1286.swatch-option-tooltip {
1287    max-width: 0px !important;
1288    max-height: 0px !important;
1289    overflow:hidden;
1290    min-height: 0px !important;
1291    min-width: 0px !important; border:none !important;
1292    background:transparent !important;
1293}
1294
1295.swatch-option.text {  font-weight: 400;  font-size: 17px; padding: 12px 20px; margin-right: 10px;  margin-top: 4px; }
1296.swatch-option.disabled:after { background: linear-gradient(to left top,rgba(255,255,255,0) 0%,rgba(255,255,255,0) 42%,#fff 43%,#fff 46%,#999 47%,#999 53%,#fff 54%,#fff 57%,rgba(255,255,255,0) 58%,rgba(255,255,255,0) 100%); }
1297
1298.swatch-attribute-selected-option { font-size: 17px; }
1299.swatch-attribute-label { font-weight: 700; font-size: 17px; }
1300
1301@media (min-width: 769px) {
1302  .page-layout-1column.page-with-filter .column.main { padding-top: 0; }
1303}
1304</style>
1305
1306<div class="navbar-container">
1307<ul class="nav navbar-nav"><li class="dropdown"><a href="/about-us" target="" data-toggle="">ABOUT US</a><ul class="dropdown-menu"><li><a href="/about-us" target="">Our Story</a></li><li><a href="/testimonials" target="">
1307Customer Testimonials</a></li></ul></li><li class="no-dropdown"><a href="/photo-gallery" target="" data-toggle="">PHOTO GALLERY</a></li><li class="dropdown"><a href="/contact-us" data-toggle="">QUESTIONS</a><ul class="dropdown-menu"><li><a href="/assembly-videos" target="">Videos</a></li><li><a href="/instructions" target="">Instructions</a></li></ul></li></ul>
1308</div><div class="social-nav"><style>
1309#utility-navigation .social-links { display: none; }
1310.footer.content .free-shipping-nav { display: none; }
1311.page-footer .social-links { text-align: center; }
1312.page-footer .social-links .top-social { display: inline-block; margin: 0 10px; }
1313</style>
1314<div class="free-shipping-nav">
1315  <div class="hidden-sm" style="font-weight: normal; padding: 0px 15px 0px 5px; line-height: 42px;"><I class="fa fa-truck" style="color:#333;"></I> <a href="/shipping-policy">Free Shipping</a> on orders over $150!</div>
1316  <div class="visible-sm" style="font-weight: normal; padding: 0px 5px 0px 2px; font-size: 10px; line-height: 42px;"><I class="fa fa-truck" style="color:#333;"></I> <a href="/shipping-policy">Free Shipping</a> on orders over $150!</div>
1317</div>
1318
1319<div class="social-links">
1320<div class="social-nav"> 
1321
1322		
1323	<div class="f-right top-social"><a href="https://www.facebook.com/OutdoorNativitySets" target="_blank"><span class="fa fa-facebook"> </span></a></div>  	
1324	
1325	<div class="f-right top-social"><a href="https://www.pinterest.com/OutdoorNativity" target="_blank"><span class="fa fa-pinterest"> </span></a></div>  
1326	
1327
1328</div>
1329</div></div><div class="utility-buttons">
1330<script>
1331    function initHeader () {
1332        return {
1333            searchOpen: false,
1334            cart: {},
1335            isCartOpen: false,
1336            getData(data) {
1337                if (data.cart) { this.cart = data.cart }
1338            },
1339            isCartEmpty() {
1340                return !this.cart.summary_count
1341            },
1342            toggleCart(event) {
1343                if (event.detail && event.detail.isOpen !== undefined) {
1344                    this.isCartOpen = event.detail.isOpen
1345                    if (!this.isCartOpen && this.$refs && this.$refs.cartButton) {
1346                        this.$refs.cartButton.focus()
1347                    }
1348                } else {
1349                                        this.isCartOpen = true
1350                }
1351            }
1352        }
1353    }
1354</script>
1354
1355<!--Cart Icon-->
1356<div class="minicart-wrapper" x-data="initHeader()"
1357     @private-content-loaded.window="getData(event.detail.data)">
1358    <button
1359    id="menu-cart-icon"
1360    class="relative inline-block outline-offset-2"
1361    x-ref="cartButton"
1362    :aria-disabled="isCartEmpty()"
1363    :aria-label="`
1364                    Toggle&#x20;minicart,
1365                    ${isCartEmpty()
1366                        ? 'Cart&#x20;is&#x20;empty'
1367                        : cart.summary_count > 1
1368                            ? hyva.str('&#x25;1&#x20;items', cart.summary_count)
1369                            : hyva.str('&#x25;1&#x20;item', cart.summary_count)
1370                    }`"
1371            @click.prevent.stop="() => {
1372                        $dispatch('toggle-cart', { isOpen: true })
1373                    }"
1374        @toggle-cart.window="toggleCart($event)"
1375        :aria-expanded="isCartOpen"
1376        aria-haspopup="dialog"
1377    >
1378
1379    <span class="text-lightgray">MY&#x20;CART</span>
1380    <span
1381        class="text-lightgray"
1382        x-text="'(' + cart.summary_count +')'"
1383        x-show="!isCartEmpty()"
1384        aria-hidden="true"
1385    ></span>
1386            </button>
1387    </div>
1388<div class="my-account-link"><a href="https://www.outdoornativitysets.com/customer/account/" > <span class="fa fa-user "></span><span class="my-account-link-text">Account</span></a></div></div></div></div>
1389  
1390    
1390<script type="application/javascript" async
1391            src="https://static.klaviyo.com/onsite/js/Tz4weC/klaviyo.js"></script>
1391
1392
1393    <div x-data="initKlaviyoCustomerTracking()"
1394         @private-content-loaded.window="sendCustomerDataToKlaviyo(event.detail.data)"></div>
1395    
1395<script>
1396        !function(){if(!window.klaviyo){window._klOnsite=window._klOnsite||[];try{window.klaviyo=new Proxy({},{get:function(n,i){return"push"===i?function(){var n;(n=window._klOnsite).push.apply(n,arguments)}:function(){for(var n=arguments.length,o=new Array(n),w=0;w<n;w++)o[w]=arguments[w];var t="function"==typeof o[o.length-1]?o.pop():void 0,e=new Promise((function(n){window._klOnsite.push([i].concat(o,[function(i){t&&t(i),n(i)}]))}));return e}}})}catch(n){window.klaviyo=window.klaviyo||[],window.klaviyo.push=function(){var n;(n=window._klOnsite).push.apply(n,arguments)}}}}();
1397
1398        function initKlaviyoCustomerTracking() {
1399            return {
1400                sendCustomerDataToKlaviyo(data) {
1401                    window.klaviyo = window.klaviyo || [];
1402                    const customer = data.customer;
1403
1404                    window.klaviyo.isIdentified().then((identified)=> {
1405                        if(customer && customer.email && !identified) {
1406                            window.klaviyo.identify({
1407                                '$email': customer.email,
1408                                '$first_name': customer.firstname ? customer.firstname : '',
1409                                '$last_name':  customer.lastname ? customer.lastname : ''
1410                            });
1411                        }
1412                    });
1413                }
1414            }
1415        }
1416    </script>
vendor: 1 bytes, line 1416
1416
1417<script>
1418    function initHeader () {
1419        return {
1420            searchOpen: false,
1421            isMobile: false,
1422            cart: {},
1423            isCartOpen: false,
1424            lastY: window.scrollY,
1425            checkMobile() {
1426                this.isMobile = window.innerWidth < 768
1427            },
1428            getData(data) {
1429                if (data.cart) { this.cart = data.cart }
1430            },
1431            isCartEmpty() {
1432                return !this.cart.summary_count
1433            },
1434            toggleCart(event) {
1435                if (event.detail && event.detail.isOpen !== undefined) {
1436                    this.isCartOpen = event.detail.isOpen
1437                    if (!this.isCartOpen && this.$refs && this.$refs.cartButton) {
1438                        this.$refs.cartButton.focus()
1439                    }
1440                } else {
1441                                        this.isCartOpen = true
1442                }
1443            },
1444            setStickyHeader() {
1445                const header = event.currentTarget.document.querySelector('.page-header');
1446                if(header) {
1447                    (window.scrollY <= this.lastY) ? header.classList.add('sticky-header') :  header.classList.remove('sticky-header');
1448                    this.lastY = window.scrollY;
1449                }
1450            }
1451        }
1452    }
1453
1454    function initCompareHeader() {
1455        return {
1456            compareProducts: null,
1457            itemCount: 0,
1458            receiveCompareData(data) {
1459                if (data['compare-products']) {
1460                    this.compareProducts = data['compare-products'];
1461                    this.itemCount = this.compareProducts.count;
1462                }
1463            }
1464        }
1465    }
1466
1467</script>
1467
1468<div id="header"
1469     class="z-30 w-full border-b shadow bg-header border-container-lighter max-md:pb-5"
1470     x-data="initHeader()"
1471     @private-content-loaded.window="getData(event.detail.data)"
1472     @scroll.window="setStickyHeader()"
1473>
1474    <div class="max-w-content flex flex-wrap lg:flex-nowrap items-center justify-between w-full px-6 py-0 mx-auto mt-0 pt-4">
1475
1476        <div class="md:hidden hidden-lg hidden-md nav-toggle"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="text-white" width="32" height="32" role="img">
1477  <path stroke-linecap="round" stroke-linejoin="round" d="M4 6h16M4 12h16M4 18h16"/>
1478<title>menu</title></svg>
1479</div>
1480        <!--Logo-->
1481        <div class="logo-container order-1 md:mr-6 md:mb-4 max-md:max-w-180 min-w-180">
1482            <div class="order-1 sm:order-2 lg:order-1 w-full pb-2 sm:w-auto sm:pb-0">
1483    <a
1484        class="flex items-center justify-center text-xl font-medium tracking-wide text-gray-800
1485            no-underline hover:no-underline font-title"
1486        href="https://www.outdoornativitysets.com/"
1487        aria-label="Go&#x20;to&#x20;Home&#x20;page"
1488    >
1489        <img
1490            src="https://www.outdoornativitysets.com/media/logo/stores/7/outdoor-nativity-sets-logo.png"
1491            alt="OutdoorNativitySets"
1492            width="203"            height="60"            loading="eager"
1493        />
1494            </a>
1495</div>
1496        </div>
1497
1498        <div class="site-nav flex md:flex-1 flex-col order-2 md:w-2/3">
1499            <!--Main Navigation-->
1500            
1501<script>
1502    function initMenuSections() {
1503        return {
1504            openedIndex: 'menu',
1505            isLoggedIn: false,
1506            setIsLoggedIn: function(data) {
1507                this.isLoggedIn = typeof data.customer.fullname !== 'undefined';
1508            }
1509        }
1510    }
1511
1512    function initKadroMegaMenu() {
1513        return {
1514            toggle:".nav-toggle",
1515            mediaBreakpoint: "768px",
1516            expandBehavior: false,
1517            showImagesMobile: false,
1518            showCmsBlockMobile: false,
1519            mediaQuery: window.matchMedia(`(max-width: 767px)`) ,
1520            mobileNav: document.querySelector("div.sections.nav-sections"),
1521            nav: document.querySelector(".kadro-navigation"),
1522            checkElemType(elem, type) {
1523              const nodeName = elem.nodeName.toLowerCase();
1524              return nodeName === type;
1525            },
1526            childArrayOfType(elem, type) {
1527                var self = this;
1528                return Array.from(elem.children).filter(function (child) {
1529                    return self.checkElemType(child, type);
1530                });
1531            },
1532            childArrayOfClass(elem, className) {
1533                return Array.from(elem.children).filter(function (child) {
1534                    return child.classList.contains(className);
1535                });
1536            },
1537            emptyElement(elem) {
1538                while (elem.lastChild) {
1539                    elem.removeChild(elem.lastChild);
1540                }
1541            },
1542            getAllParents(elem, selector) {
1543                let current = elem,
1544                    list    = [];
1545                while(current.parentElement != null )
1546                {
1547                    if(current.parentElement.matches(selector)) list.push(current.parentElement);
1548                    current = current.parentElement;
1549                }
1550                return list;
1551            },
1552            mediaCheck(mQ) {
1553                if(mQ.matches) {
1554                   this.mobileMenu();
1555                } else {
1556                    this.desktopMenu();
1557                }
1558            },
1559            setMediaQuery() {
1560                var self = this;
1561                self.boundToggle = this.toggleAction.bind(this);
1562                self.mediaCheck(this.mediaQuery);
1563                this.mediaQuery.addEventListener( 'change', self.mediaCheck.bind(self), self.mediaQuery);
1564            },
1565            toggleAction(event) {
1566                event.preventDefault();
1567                this.expandBehavior ? this.mobileNav.classList.add('slide') : '';
1568                this.mobileNav.classList.toggle("mobile");
1569
1570                this.mobileNav.style.maxHeight = window.innerHeight + 'px';
1571
1572                document.querySelector('html').classList.toggle("nav-open");
1573
1574                // removes images from mobile menu
1575                if(!this.showImagesMobile) {
1576                    document.querySelectorAll(".image").forEach(function (elem) {
1577                        elem.classList.toggle('menu-hidden');
1578                    });
1579                }
1580
1581                // removes cms blocks from mobile menu
1582                if(!this.showCmsBlockMobile) {
1583                    document.querySelectorAll(".cmsBlock").forEach(function (elem) {
1584                        elem.classList.add('menu-hidden');
1585                    });
1586                }
1587
1588            },
1589            mobileMenu() {
1590
1591                //search close button hidden on BO
1592                // const pageWrapper = document.querySelector('.page-wrapper');
1593                // const searchCloseBtn = document.querySelector('.search-close-button');
1594                // searchCloseBtn.parentElement.removeChild(searchCloseBtn);
1595                // pageWrapper.prepend(searchCloseBtn);
1596
1597                this.mobileNav.parentElement.style.maxHeight = window.innerHeight + 'px';
1598                const self = this;
1599
1600                // opens & closes mobile menu when hamburger is clicked
1601                document.querySelector(this.toggle).addEventListener('click', self.boundToggle);
1602
1603                // expands submenus when parent item is clicked
1604                document.querySelectorAll(".parent").forEach(function (elem) {
1605                    const childUl = self.childArrayOfType(elem, 'ul');
1606                    if (childUl.length > 0) {
1607                        const anchorChildren = self.childArrayOfType(elem, 'a');
1608                        anchorChildren.forEach(function(elem) {
1609                            elem.classList.add('arrow');
1610                            elem.addEventListener('click', function(event) {
1611                                event.stopPropagation();
1612                                if (event.target.tagName.toLowerCase() == "span"
1613                                    && this.href != window.location.href
1614                                    && this.href != "") {
1615                                    window.location.href = this.href;
1616                                } else {
1617                                    event.preventDefault();
1618                                    var $submenu = elem;
1619                                    if($submenu.closest("li").classList.contains("parent")) {
1620                                        if ($submenu.closest("li").classList.contains("expanded")) {
1621                                            if (self.expandBehavior) {
1622                                                const subMenuChildren = self.childArrayOfClass($submenu.parentElement, 'submenu');
1623                                                subMenuChildren.forEach(function(elem){
1624                                                    elem.animate(
1625                                                        {
1626                                                            left: 100 + '%'
1627                                                        },
1628                                                        {
1629                                                            duration: 300
1630                                                        }
1631                                                    );
1632                                                    var $selectedItem = $submenu.parent.closest("li");
1633                                                    var selectedItemLevel = $selectedItem.dataset.level;
1634                                                    $selectedItem.closest('.expanded.slide').classList.remove('child-expand');
1635                                                    $selectedItem.closest('ul').querySelectorAll('li.' + selectedItemLevel).forEach(
1636                                                        function (elem)
1637                                                        {
1638                                                            elem.classList.remove('hide');
1639                                                        }
1640                                                    )
1641                                                    $selectedItem.classList.toggle("expanded");
1642                                                    $selectedItem.classList.toggle("slide");
1643                                                });
1644                                            } else {
1645                                                $submenu.closest("li").classList.toggle("expanded");
1646                                                $submenu.parentElement.querySelectorAll('.submenu').forEach(function(elem) {
1647                                                    elem.classList.toggle("dropdown");
1648                                                });
1649
1650                                                //Closes children that have been opened
1651                                                const siblings = self.childArrayOfClass($submenu.parentElement, 'submenu');
1652                                                siblings.forEach(function(sibling) {
1653                                                    sibling.querySelectorAll('.expanded').forEach(function(elem){
1654                                                        elem.classList.remove('expanded');
1655                                                        self.childArrayOfClass('submenu').forEach(function(childElem){
1656                                                            childElem.classList.remove('dropdown');
1657                                                        });
1658                                                    });
1659                                                });
1660                                                //translated from this jquery $submenu.siblings('.submenu').find('.expanded').removeClass('expanded').children('.submenu').classList.remove('dropdown');
1661                                            }
1662                                        } else {
1663                                            if (self.expandBehavior) {
1664                                                var $selectedItem = $submenu.closest("li");
1665                                                var selectedItemLevel = $selectedItem.dataset.level;
1666                                                self.getAllParents($selectedItem, 'ul').forEach(
1667                                                    function(parentElem) {
1668                                                        parentElem.querySelectorAll('li.' + selectedItemLevel).forEach(
1669                                                            function(selectedItem) {
1670                                                                selectedItem.classList.toggle('hide');
1671                                                            });
1672                                                    }
1673                                                );
1674                                                $selectedItem.classList.toggle("hide");
1675                                                $selectedItem.classList.toggle("slide");
1676                                                $selectedItem.classList.toggle("expanded ");
1677
1678                                                self.getAllParents($selectedItem,'.expanded.slide').classList.add('child-expand');
1679                                                self.childArrayOfClass($submenu.parentElement,'submenu').forEach(function(sub)
1680                                                    {
1681                                                        sub.animate({
1682                                                            left: 0
1683                                                        }, {duration: 300});
1684                                                });
1685                                            } else {
1686                                                $submenu.parentElement.classList.toggle("expanded");
1687                                                self.childArrayOfClass($submenu.parentElement,'submenu').forEach(function(sub){ sub.classList.toggle("dropdown"); });
1688                                            }
1689                                        }
1690                                    } else {
1691                                        $submenu.parentElement.classList.toggle("expanded");
1692                                    }
1693                                }
1694                            })
1695                        });
1696                    }
1697                });
1698
1699                document.querySelectorAll('.slide-title').forEach(function(elem) {
1700                    elem.addEventListener('click', function(e) {
1701                        self.childArrayOfType(this.closest('.submenu').closest('li'),'a').forEach(function(anchor) {
1702                            anchor.click();
1703                        });
1704                    });
1705                });
1706            },
1707            desktopMenu() {
1708
1709                //completely hidden on BO
1710                // const navSections = document.querySelector('.sections.nav-sections');
1711                // const searchCloseBtn = document.querySelector('.search-close-button');
1712                // searchCloseBtn.parentElement.removeChild(searchCloseBtn);
1713                // navSections.parentElement.insertBefore(searchCloseBtn, navSections);
1714                var self = this;
1715
1716                document.querySelector(this.toggle).removeEventListener('click', self.boundToggle );
1717
1718                this.mobileNav.classList.remove("mobile");
1719                document.querySelector('html').classList.remove("nav-open");
1720
1721                // $('.arrow').unbind(); // Removes click event to prevent event from being fired multiple times when window is resized repeatedly //TODO figure out how to refactor in pure js
1722               // document.querySelector(this.toggle).removeEventListener('click', this.toggleAction); //todo fix for mobile
1723
1724                // un-removes images for desktop
1725                document.querySelectorAll(".image").forEach(function (elem) {
1726                    elem.classList.remove('menu-hidden');
1727                });
1728
1729                // un-removes ms blocks for desktop
1730                document.querySelectorAll(".cmsBlock").forEach(function (elem) {
1731                    elem.classList.remove('menu-hidden');
1732                });
1733
1734                //Special on hover delay openning of submenus
1735                var $topmenu = document.querySelector('.kadro-navigation .shop-dropdown');
1736                var $submenu = document.querySelectorAll('.shop-dropdown > ul > li ');
1737                var topMenuOpenClass = 'shop-dropdown-open';
1738                var subMenuOpenClass = 'submenu-open';
1739                const submenuContainer = document.querySelector('.submenu-container');
1740
1741
1742                var delay = 300;
1743                var timerTop;
1744                var timerSub;
1745                var activeSub = false;
1746
1747                $topmenu.addEventListener( 'mouseover', function() {
1748                    clearTimeout(timerTop);
1749                    document.querySelector(".page-header").classList.add('fixed-header-on-hover')
1750                    $topmenu.classList.add(topMenuOpenClass);
1751
1752                    //Set max height for menu to not exceed height of viewport
1753                    const totalMaxHeight = (window.innerHeight - document.querySelector(".page-header").clientHeight) * 0.9;
1754                    const dropdownUl = document.querySelector('.shop-dropdown > ul');
1755                    dropdownUl.style.maxHeight =  totalMaxHeight + 'px';
1756
1757                    //Set submenu height to match
1758                    document.querySelector('.submenu-container').style.height =  dropdownUl.clientHeight + 'px';
1759
1760                    //Show first menu open
1761                    if(!activeSub) {
1762                        const firstChildSubmenu = dropdownUl.querySelector('li:first-child').querySelector('.submenu').cloneNode(true);
1763                        document.querySelector('.submenu-container').append(firstChildSubmenu);
1764                    }
1765                });
1766                $topmenu.addEventListener( 'mouseout', function() {
1767                    clearTimeout(timerTop);
1768                    timerTop = setTimeout(function() {
1769                        $topmenu.classList.remove(topMenuOpenClass);
1770                        document.querySelector(".page-header").classList.remove('fixed-header-on-hover');
1771                        const open = document.querySelector('.' + subMenuOpenClass);
1772                        if(open) open.classList.remove(subMenuOpenClass);
1773                        //reset menu
1774                        const submenuContainer = document.querySelector('.submenu-container');
1775                        self.emptyElement(submenuContainer);
1776                        activeSub = false;
1777                    }, delay);
1778                });
1779
1780                $submenu.forEach(function (sub)
1781                { sub.addEventListener( 'mouseover', function(e) {
1782                    var $thisSubmenu = this;
1783                    if (!activeSub) { //no menus open
1784                        //reset menu
1785                        self.emptyElement(submenuContainer);
1786                        const $subMenuClone = $thisSubmenu.querySelector('.submenu').cloneNode(true);
1787                        document.querySelector('.submenu-container').append($subMenuClone);
1788                        activeSub = true;
1789                    } else { //at least one menu open
1790                        clearTimeout(timerSub);
1791                        timerSub = setTimeout(function() { //hold for time
1792                            self.emptyElement(submenuContainer);
1793                            const $subMenuClone = $thisSubmenu.querySelector('.submenu').cloneNode(true);
1794                            document.querySelector('.submenu-container').append($subMenuClone);
1795                            activeSub = true;
1796                        }, delay);
1797                    }
1798                });
1799                });
1800
1801                $submenu.forEach(function (sub)
1802                { sub.addEventListener( 'mouseout', function(e) {
1803                    var $thisSubmenu = this;
1804                    clearTimeout(timerSub);
1805                    timerSub = setTimeout(function() { //hold for time
1806                        if (e.relatedTarget && !e.relatedTarget.closest('.submenu-container')) {
1807                            self.emptyElement(submenuContainer);
1808                            $thisSubmenu.classList.toggle(subMenuOpenClass);
1809                            activeSub = false;
1810                        }
1811                    }, delay);
1812                });
1813                });
1814
1815            }
1816        }
1817    }
1818
1819</script>
1819
1820
1821
1822    <div class="sections nav-sections order-3 h-full" x-data="initMenuSections()" @private-content-loaded.window="setIsLoggedIn($event.detail.data)">
1823        <div class="clearfix">
1824            <div class="section-item-title nav-sections-item-title md:hidden" :class="{ 'active': openedIndex === 'menu' }" @click="openedIndex = 'menu'">
1825                <a class="nav-sections-item-switch" href="#store.menu">Menu</a>
1826            </div>
1827
1828            <div class="section-item-title nav-sections-item-title md:hidden" :class="{ 'active': openedIndex === 'account' }" @click="openedIndex = 'account'">
1829                <a class="nav-sections-item-switch" href="#store.links">Account</a>
1830            </div>
1831        </div>
1832
1833        <div class="section-item-content nav-sections-item-content" x-show="openedIndex === 'menu'">
1834            <nav class="kadro-navigation" role="navigation" >
1835                <ul x-data="initKadroMegaMenu()">
1836                    <li @private-content-loaded.window="setMediaQuery()" data-level="level0" class="nav-item level0 level-top shop-dropdown">
1837                        <a class="level-top hover:decoration-white hover:underline hover:decoration-solid" tabindex="-1"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="inline text-white" width="20" height="20" role="img">
1838  <path stroke-linecap="round" stroke-linejoin="round" d="M4 6h16M4 12h16M4 18h16"/>
1839<title>menu</title></svg>
1840<span>Shop</span></a>
1841                        <ul><li data-level="level0"class="nav-item level0   level-top "><a href="/nativity-sets" class="level-top"   tabindex="-1"><span>Nativity Sets</span><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="chevron" width="20" height="20" role="img">
1842  <path stroke-linecap="round" stroke-linejoin="round" d="M19 9l-7 7-7-7"/>
1843<title>chevron-down</title></svg>
1844</a></li></ul>
1845                        <div class="submenu-container"></div>
1846                    </li>
1847                                    </ul>
1848            </nav>
1849        </div>
1850
1851        <div class="section-item-content nav-sections-item-content md:hidden" x-show="openedIndex === 'account'">
1852            <ul class="header links">
1853                <li class="link wishlist" x-show="isLoggedIn">
1854                    <a href="https://www.outdoornativitysets.com/wishlist/">Wishlist</a>
1855                </li>
1856                <li class="link authorization-link" x-show="isLoggedIn">
1857                    <a href="https://www.outdoornativitysets.com/customer/account/logout/">Sign Out</a>
1858                </li>
1859                <li class="link authorization-link" x-show="!isLoggedIn">
1860                    <a href="https://www.outdoornativitysets.com/customer/account/login/">Sign In</a>
1861                </li>
1862                <li class="link create-account" x-show="!isLoggedIn">
1863                    <a href="https://www.outdoornativitysets.com/customer/account/create/">Create an Account</a>
1864                </li>
1865            </ul>
1866        </div>
1867    </div>
1868
1869
1870
1871            <div class="flex items-center justify-between max-md:justify-end gap-2 md:gap-1 order-2 md:-mr-1">
1872
1873                <!--Search-->
1874                <div  class="search-wrapper md:relative md:w-3/4">
1875                    <div class="z-10 rounded-lg shadow-sm bg-container-lighter border-container-lighter"
1876                         id="search-content"
1877                         x-cloak
1878                         @resize.debounce.100.window="checkMobile()"
1879                         x-init="checkMobile()"
1880                         x-show="searchOpen || !isMobile"
1881                         @keydown.escape="
1882            $refs.searchButton.focus();
1883         "
1884                    >
1885                        
1885<script>
1886    'use strict';
1887
1888    function initMiniSearch() {
1889        return {
1890            minSearchLength: 1,
1891                        suggestions: [],
1892            suggest() {
1893                const search = this.$refs.searchInput;
1894                if (search.value.length >= this.minSearchLength) {
1895                    search.setCustomValidity('');
1896                    search.reportValidity();
1897                    this.fetchSuggestions(search.value);
1898                } else {
1899                    this.suggestions = [];
1900                }
1901            },
1902            fetchSuggestions(term) {
1903                fetch(
1904                    window.BASE_URL + 'search/ajax/suggest?' + new URLSearchParams({q: term}),
1905                    {
1906                        headers: {
1907                            'X-Requested-With': 'XMLHttpRequest'
1908                        }
1909                    }
1910                )
1911                .then(response => response.json())
1912                .then(result => this.suggestions = result);
1913            },
1914                        search(term) {
1915                const search = this.$refs.searchInput;
1916                term = term || search.value;
1917                if (term.length < this.minSearchLength) {
1918                    search.setCustomValidity('Minimum\u0020Search\u0020query\u0020length\u0020is\u00201');
1919                    search.reportValidity();
1920                } else {
1921                    search.setCustomValidity('');
1922                    search.value = term;
1923                    this.$refs.form.submit();
1924                }
1925            },
1926            focusElement(element) {
1927                if (element && element.nodeName === "DIV") {
1928                    element.focus();
1929                    return true;
1930                } else {
1931                    return false;
1932                }
1933            }
1934        }
1935    }
1936</script>
1936
1937<div class="container py-2 mx-auto text-black" x-data="initMiniSearch()">
1938    <search title="Store" role="search">
1939        <form
1940            id="search_mini_form"
1941            class="form minisearch flex"
1942            action="https://www.outdoornativitysets.com/catalogsearch/result/"
1943            method="get"
1944            @submit.prevent="search()"
1945            x-ref="form"
1946        >
1947            <label class="sr-only" for="search">
1948                Search            </label>
1949            <input
1950                id="search"
1951                x-ref="searchInput"
1952                type="search"
1953                autocomplete="off"
1954                name="q"
1955                value=""
1956                placeholder="Search&#x20;entire&#x20;store&#x20;here..."
1957                maxlength="128"
1958                class="w-full text-lg lg:text-xl text-grey-800 focus:border-transparent focus:outline-none rounded-l"
1959                @search-open.window.debounce.10="$el.focus(); $el.select()"
1960                                    @focus.once="suggest"
1961                    @input.debounce.300="suggest"
1962                    @keydown.arrow-down.prevent="focusElement($root.querySelector('[tabindex]'))"
1963                            >
1964            <button
1965                type="submit"
1966                class="action search btn btn-primary rounded-l-none rounded-r shrink-0 p-3 shadow-none"
1967                title="Search"
1968                aria-label="Search"
1969            >
1970                <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="20" height="20" aria-hidden="true">
1971  <path stroke-linecap="round" stroke-linejoin="round" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"/>
1972</svg>
1973            </button>
1974        </form>
1975    </search>
1976            <template x-if="suggestions.length > 0">
1977            <nav
1978                aria-label="Search&#x20;Suggestions"
1979                class="flex flex-col mt-1 text-grey-800 gap-1"
1980            >
1981                <template x-for="suggestion in suggestions">
1982                    <button
1983                        type="button"
1984                        class="flex justify-between p-2 bg-container-lighter even:bg-container border border-container hover:bg-container-darker"
1985                        @click="search(suggestion.title)"
1986                        @keydown.enter="search(suggestion.title)"
1987                        @keydown.arrow-up.prevent="focusElement($event.target.previousElementSibling) || $refs.searchInput.focus()"
1988                        @keydown.arrow-down.prevent="focusElement($event.target.nextElementSibling)"
1989                    >
1990                        <span x-text="suggestion.title"></span>
1991                        <span x-text="suggestion.num_results"></span>
1992                    </button>
1993                </template>
1994            </nav>
1995        </template>
1996    </div>
1997
1998                    </div>
1999                    <button
2000                        id="menu-search-icon"
2001                        class="rounded p-1 outline-offset-2 md:right-1.5 max-md:left-[-2.5rem] max-md:top-1 md:absolute md:bottom-1/4 relative"
2002                        aria-label="Toggle&#x20;search&#x20;form"
2003                        aria-haspopup="true"
2004                        @click.prevent="
2005                            searchOpen = !searchOpen;
2006                            $dispatch('search-open');
2007                            "
2008                        :aria-expanded="searchOpen"
2009                        x-ref="searchButton"
2010                    >
2011                        <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="search-toggle-icon text-white max-md:stroke-3" width="24" height="24" aria-hidden="true">
2012  <path stroke-linecap="round" stroke-linejoin="round" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"/>
2013</svg>
2014                        <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="search-close-icon text-primary max-md:stroke-3" width="24" height="24" aria-hidden="true">
2015  <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/>
2016</svg>
2017                    </button>
2018                </div>
2019
2020
2021
2022                <style>
2023input[type=text], input[type=password], input[type=url], input[type=tel], input[type=search], input[type=number], input[type=datetime], input[type=email], select { font-size: 16px; }
2024
2025.page-header .contact-message { margin: 0; }
2026
2027@media only screen and (max-width: 767px) {
2028  .page-header .contact-message div { text-align: center !important; margin: 1rem 0 !important; } 
2029  .page-header .header.content .contact-message { margin: 0 !important; }
2030}
2031</style>
2032<div class="hidden-xs contact-message row">
2033<div class="col-sm-2 hidden-xs" style="padding: 0; width: auto;"><i class="fa fa-mobile fa-lg" style="color: #a32c28; font-size: 55px;"></i></div>
2034<div class="col-sm-10 col-xs-6"><span style="font-weight: bold;" class="hidden-xs">NEED HELP?</span> <a style="color: #005581; text-decoration: none;" href="tel:+1855553-4946">(855)-553-4946</a></div>
2035<div class="col-sm-10 col-xs-6"><a href="https://www.outdoornativitysets.com/contact-us"><u>See our holiday hours</u></div>
2036</div>
2037                <!-- Additional Header Elements -->
2038                
2039
2040            </div>
2041        </div>
2042
2043    </div>
2044
2045    <div x-show="searchOpen && isMobile" class="invisible md:hidden py-5 text-lg" style="display:none;">search</div>
2046
2047    <!--Cart Drawer-->
2048    
2048<script>
2049    function initCartDrawer() {
2050        return {
2051            open: false,
2052            isLoading: false,
2053            canCheckout: false,
2054            cart: {},
2055            maxItemsToDisplay: 10,
2056            itemsCount: 0,
2057            qtyCount: 0,
2058            getData(data) {
2059                if (data.cart) {
2060                    this.cart = data.cart;
2061                    this.itemsCount = data.cart.items && data.cart.items.length || 0;
2062                    this.qtyCount = data.cart.summary_count || 0;
2063                    this.setCartItems();
2064                    this.canCheckout = data.cart.possible_onepage_checkout;
2065                }
2066                this.isLoading = false;
2067            },
2068            cartItems: [],
2069            getItemCountTitle() {
2070                return hyva.strf('\u00250\u0020of\u0020\u00251\u0020products\u0020in\u0020cart\u0020displayed', this.maxItemsToDisplay, this.itemsCount)
2071            },
2072            setCartItems() {
2073                this.cartItems = this.cart.items && this.cart.items.sort((a, b) => b.item_id - a.item_id) || [];
2074
2075                if (this.maxItemsToDisplay > 0) {
2076                    this.cartItems = this.cartItems.slice(0, parseInt(this.maxItemsToDisplay, 10));
2077                }
2078            },
2079            buildExtraParamStr(params) {
2080                let i, extraParamStr = '', keys = Object.keys(params);
2081                for(i = 0; i < keys.length; i++) {
2082                    extraParamStr += `&${keys[i]}=${params[keys[i]]}`;
2083                }
2084                return extraParamStr;
2085            },
2086            updateCart(url, params){
2087                this.isLoading = true;
2088
2089                const formKey = hyva.getFormKey();
2090
2091                const paramStr = this.buildExtraParamStr(params);
2092
2093                return fetch(url, {
2094                    "headers": {
2095                        "content-type": "application/x-www-form-urlencoded; charset=UTF-8",
2096                    },
2097                    "body": "form_key=" + formKey + paramStr,
2098                    "method": "POST",
2099                    "mode": "cors",
2100                    "credentials": "include"
2101                });
2102            },
2103            updateQtyOnItemInCart(itemId, qty) {
2104                this.updateCart(
2105                    BASE_URL + 'checkout/sidebar/updateItemQty/',
2106                    {'item_id': itemId, 'item_qty': qty }
2107                ).then(response => {
2108                    if (response.redirected) {
2109                        window.location.href = response.url;
2110                    } else if (response.ok) {
2111                        return response.json();
2112                    } else {
2113                        window.dispatchMessages && window.dispatchMessages([{
2114                            type: 'warning',
2115                            text: 'Could\u0020not\u0020update\u0020item\u0020qty.'
2116                        }]);
2117                        this.isLoading = false;
2118                    }
2119                }).then(result => {
2120                    window.dispatchMessages && window.dispatchMessages([{
2121                        type: result.success ? 'success' : 'error',
2122                        text: result.success
2123                            ? 'You\u0020updated\u0020the\u0020Qty\u0020of\u0020this\u0020item.'
2124                            : result.error_message
2125                    }], result.success ? 5000 : 0)
2126                    window.dispatchEvent(new CustomEvent('reload-customer-section-data'));
2127                });
2128            },
2129            deleteItemFromCart(itemId) {
2130                this.updateCart(
2131                    BASE_URL + 'checkout/sidebar/removeItem/',
2132                    {'item_id': itemId }
2133                ).then(response => {
2134                    if (response.redirected) {
2135                        window.location.href = response.url;
2136                    } else if (response.ok) {
2137                        return response.json();
2138                    } else {
2139                        window.dispatchMessages && window.dispatchMessages([{
2140                            type: 'warning',
2141                            text: 'Could\u0020not\u0020remove\u0020item\u0020from\u0020quote.'
2142                        }]);
2143                        this.isLoading = false;
2144                    }
2145                }).then(result => {
2146                    window.dispatchMessages && window.dispatchMessages([{
2147                        type: result.success ? 'success' : 'error',
2148                        text: result.success
2149                            ? 'You\u0020removed\u0020the\u0020item.'
2150                            : result.error_message
2151                    }], result.success ? 5000 : 0)
2152                    window.dispatchEvent(new CustomEvent('reload-customer-section-data'));
2153                });
2154            },
2155            scrollLock(use = true) {
2156                document.body.style.overflow = use ? "hidden" : "";
2157            },
2158            toggleCartDrawer(event) {
2159                if (event.detail && event.detail.isOpen !== undefined) {
2160                    if (event.detail.isOpen) {
2161                        this.openCartDrawer();
2162                    } else {
2163                        this.open = false;
2164                        this.scrollLock(false);
2165                        this.$refs && this.$refs.cartDialogContent && hyva.releaseFocus(this.$refs.cartDialogContent);
2166                    }
2167                } else {
2168                                        this.openCartDrawer()
2169                }
2170            },
2171            openCartDrawer() {
2172                this.open = true;
2173                this.scrollLock(true);
2174                this.$nextTick(() => {
2175                    this.$refs && this.$refs.cartDialogContent && hyva.trapFocus(this.$refs.cartDialogContent)
2176                })
2177            },
2178            closeCartDrawer() {
2179                this.$dispatch('toggle-cart', { isOpen: false })
2180            },
2181            getSectionDataExtraActions() {
2182                if (!this.cart.extra_actions) {
2183                    return '';
2184                }
2185
2186                const contentNode = document.createElement('div');
2187                contentNode.innerHTML = this.cart.extra_actions;
2188
2189                hyva.activateScripts(contentNode);
2190
2191                return contentNode.innerHTML;
2192            }
2193        }
2194    }
2195</script>
2195
2196<section x-cloak
2197         x-show="cart"
2198         id="cart-drawer"
2199         x-data="initCartDrawer()"
2200         @private-content-loaded.window="getData($event.detail.data)"
2201         @toggle-cart.window="toggleCartDrawer($event)"
2202         @keydown.escape="closeCartDrawer"
2203>
2204    <div role="dialog"
2205         aria-labelledby="cart-drawer-title"
2206         aria-modal="true"
2207         :aria-hidden="!open"
2208         class="fixed inset-y-0 right-0 z-30 flex max-w-full">
2209        <div class="backdrop"
2210             x-show="open"
2211             x-transition:enter="ease-in-out duration-500"
2212             x-transition:enter-start="opacity-0"
2213             x-transition:enter-end="opacity-100"
2214             x-transition:leave="ease-in-out duration-500"
2215             x-transition:leave-start="opacity-100"
2216             x-transition:leave-end="opacity-0"
2217             role="button"
2218             @click="closeCartDrawer"
2219             aria-label="Close&#x20;minicart"></div>
2220        <div class="relative w-screen max-w-lg shadow-2xl"
2221             x-show="open"
2222             x-transition:enter="transform transition ease-in-out duration-500 sm:duration-700"
2223             x-transition:enter-start="translate-x-full"
2224             x-transition:enter-end="translate-x-0"
2225             x-transition:leave="transform transition ease-in-out duration-500 sm:duration-700"
2226             x-transition:leave-start="translate-x-0"
2227             x-transition:leave-end="translate-x-full"
2228             x-ref="cartDialogContent"
2229             role="region"
2230             :tabindex="open ? 0 : -1"
2231             aria-label="My&#x20;Cart"
2232
2233        >
2234            <div class="flex flex-col h-full max-h-screen bg-white shadow-xl">
2235                
2235<script>
2236    function initializeOpenCartEvent(event) {
2237        let oldCart = event.detail.data.oldCart;
2238        let newCart = event.detail.data.privateData.cart;
2239
2240        if(
2241            (!oldCart && newCart) ||
2242            (newCart && (oldCart.summary_count < newCart.summary_count))
2243        ) {
2244            window.dispatchEvent(new CustomEvent('toggle-cart', {detail: {isOpen: true}}));
2245        }
2246    }
2247
2248    window.addEventListener('cart-change', initializeOpenCartEvent)
2249
2250</script>
2250
2251
2252                <header class="relative px-4 py-6 sm:px-6">
2253                    <p id="cart-drawer-title" class="text-lg font-medium leading-7 text-gray-900">
2254                        <span class="items-total text-xs"
2255                              x-show="maxItemsToDisplay && maxItemsToDisplay < itemsCount"
2256                              x-text="getItemCountTitle()">
2257                        </span>
2258                    </p>
2259                </header>
2260
2261                <template x-if="itemsCount">
2262                    <div>
2263                        
2264                        <div class="minicart-summary relative grid gap-6 sm:gap-8 py-3 px-9 bg-white">
2265                            <div class="minicart-details flex">
2266                                <div class="items-total p-3 w-1/2">
2267                                    <span class="count font-bold" x-text="qtyCount"></span>
2268                                    <template x-if="itemsCount > 1">
2269                                        <span>Items in Cart</span>
2270                                    </template>
2271                                    <template x-if="itemsCount == 1">
2272                                        <span>Item in Cart</span>
2273                                    </template>
2274                                </div>
2275                                <div class="minicart-subtotal text-right w-1/2 p-3 space-x-4 transition duration-150 ease-in-out rounded-lg hover:bg-gray-100">
2276                                    <p>Cart Subtotal: <span x-html="cart.subtotal" class="font-bold"></span></p>
2277                                </div>
2278                            </div>
2279
2280                            <template x-if="canCheckout">
2281                                <div class="minicart-actions w-full space-x-4 transition duration-150 ease-in-out font-semibold text-xl hover:bg-gray-100">
2282                                    <a @click.prevent.stop="closeCartDrawer; $dispatch('toggle-authentication',
2283                                    {url: 'https://www.outdoornativitysets.com/checkout/'});"
2284                                       href="https://www.outdoornativitysets.com/checkout/"
2285                                       class="inline-flex p-6 rounded-md w-full leading-8 justify-center btn-primary"
2286                                    >
2287                                        Go to Checkout                                    </a>
2288                                </div>
2289                            </template>
2290                            <div class="minicart-actions" x-html="getSectionDataExtraActions()"></div>
2291                                                    </div>
2292                    </div>
2293                </template>
2294
2295                <!--    custom kadro block -->
2296                <div id="minicart-promo-block">
2297                                    </div>
2298
2299                
2300                <template x-if="!itemsCount">
2301                    <div class="relative px-4 py-6 bg-white border-bs sm:px-6 border-container font-bold">
2302                        You have no items in your shopping cart.                    </div>
2303                </template>
2304
2305                <template x-if="itemsCount">
2306                    <div class="relative gap-6 sm:gap-8 px-1 py-3 sm:px-3 bg-white border-b border-container overflow-y-auto overscroll-y-contain">
2307                        <template x-for="item in cartItems">
2308                            <div class="flex items-start p-3 space-x-4 transition border-t duration-150 ease-in-out rounded-lg hover:bg-gray-100"
2309                                 x-data = "{ currentQty: item.qty }">
2310                                <a :href="item.product_url"
2311                                   class="w-1/4"
2312                                   :aria-label="hyva.strf('Product\u0020\u0022\u00250\u0022', item.product_name)"
2313                                >
2314                                    <img
2315                                        :src="item.product_image.src"
2316                                        :width="item.product_image.width"
2317                                        :height="item.product_image.height"
2318                                        loading="lazy"
2319                                        alt=""
2320                                    />
2321                                </a>
2322                                <div class="w-3/4 space-y-2">
2323                                    <div>
2324                                        <template x-if="item.promo_product || item.promo_product_free_product">
2325                                            <div>
2326                                                <span class="leading-none text-lg">
2327                                                    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="inline" width="18" height="18" role="img">
2328  <path fill-rule="evenodd" d="M5 5a3 3 0 015-2.236A3 3 0 0114.83 6H16a2 2 0 110 4h-5V9a1 1 0 10-2 0v1H4a2 2 0 110-4h1.17C5.06 5.687 5 5.35 5 5zm4 1V5a1 1 0 10-1 1h1zm3 0a1 1 0 10-1-1v1h1z" clip-rule="evenodd"/>
2329  <path d="M9 11H3v5a2 2 0 002 2h4v-7zM11 18h4a2 2 0 002-2v-5h-6v7z"/>
2330<title>gift</title></svg>
2331                                                </span>
2332                                                <span>
2333                                                    FREE GIFT                                                </span>
2334                                            </div>
2335                                        </template>
2336                                        <a :href="item.product_url" class="text-xl">
2337                                            <span x-html="item.product_name"></span>
2338                                        </a>
2339                                        <template x-if="!(item.promo_product || item.promo_product_free_product)">
2340                                            <p
2341                                                class="text-sm"
2342                                                :class="{'hidden': item.product_type === 'bundle'}"
2343                                            >
2344                                                <span x-html="item.product_sku"></span>
2345                                            </p>
2346                                        </template>
2347                                    </div>
2348                                    <template x-if="item.options.length > 0">
2349                                        <div class="item-options-container" x-data="{ opened: false }">
2350                                            <span class="toggle cursor-pointer" @click="opened = !opened">
2351                                                See Details                                                 <template x-if="opened">
2352                                                    <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="w-6 h-6 inline text-[#8f8f8f]" width="32" height="32" role="img">
2353  <path stroke-linecap="round" stroke-linejoin="round" d="M5 15l7-7 7 7"/>
2354<title>chevron-up</title></svg>
2355                                                </template>
2356                                                <template x-if="!opened">
2357                                                    <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="w-6 h-6 inline text-[#8f8f8f]" width="32" height="32" role="img">
2358  <path stroke-linecap="round" stroke-linejoin="round" d="M19 9l-7 7-7-7"/>
2359<title>chevron-down</title></svg>
2360                                                </template>
2361                                            </span>
2362                                            <template x-if="opened">
2363                                                <div class="item-options-wrapper mb-[20px]">
2364                                                    <template x-for="option in item.options">
2365                                                        <div class="pt-2">
2366                                                            <p class="font-semibold inline mr-[10px]" x-text="option.label + ':'"></p>
2367                                                            <p class="text-secondary inline" x-html="option.value"></p>
2368                                                        </div>
2369                                                    </template>
2370                                                </div>
2371                                            </template>
2372                                        </div>
2373                                    </template>
2374                                    <p>
2375                                        <span x-html="item.product_price"></span>
2376                                        <template x-if="item.promo_product || item.promo_product_free_product">
2377                                            <span class="line-through pl-4 inline-block" x-html="item.promo_original_price"></span>
2378                                        </template>
2379                                                                                <template x-if="item.upsell_original_price > item.product_price_value">
2380                                            <span class="line-through pl-4 inline-block" x-html="hyva.formatPrice(item.upsell_original_price)"></span>
2381                                        </template>
2382                                    </p>
2383                                    <div itemclass="pt-4" class="flex flex-wrap justify-between">
2384                                        <template x-if="!(item.promo_product || item.promo_product_free_product)">
2385                                            <div class="w-3/4 flex gap-4 justify-right items-center">
2386                                                <label class="w-1/6 inline-flex" for="'qty-input-' + item.product_sku">
2387                                                    <span>Qty:</span>
2388                                                </label>
2389
2390                                                    <input class="inline-flex w-2/6 leading-normal" type="text" :name="'qty-input-' + item.product_sku" id="'qty-input-' + item.product_sku" x-model="currentQty" :value="item.qty"/>
2391                                                    <button class="py-1 inline-flex w-3/6 justify-center rounded-md bg-new-blue text-white font-semibold" :class="currentQty != item.qty ? '' : 'invisible'" @click="updateQtyOnItemInCart(item.item_id, currentQty)">Update</button>
2392
2393                                            </div>
2394                                        </template>
2395                                        <template x-if="!(item.promo_product || item.promo_product_free_product)">
2396                                            <div class="w-1/4 flex justify-right items-center">
2397                                                <button type="button"
2398                                                        class="inline-flex p-1 w-1/2"
2399                                                        @click="deleteItemFromCart(item.item_id)"
2400                                                        :aria-label="hyva.strf('Remove\u0020product\u0020\u0022\u00250\u0022\u0020from\u0020cart', item.product_name)"
2401                                                >
2402                                                    <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="20" height="20" aria-hidden="true">
2403  <path stroke-linecap="round" stroke-linejoin="round" d="M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16"/>
2404</svg>
2405                                                </button>
2406                                            </div>
2407                                        </template>
2408                                    </div>
2409
2410                                </div>
2411                            </div>
2412                        </template>
2413                    </div>
2414                </template>
2415
2416                <template x-if="itemsCount">
2417                    <div class="p-4 text-center">
2418                        <a href="https://www.outdoornativitysets.com/checkout/cart/"
2419                        >
2420                            View and Edit Cart                        </a>
2421                    </div>
2422                </template>
2423
2424                
2424<script>
2425    function prepareMollieApplePayMinicart() {
2426        const objectToFormData = (object, prefix = null, formDataObject = null) => {
2427            const formData = formDataObject || new FormData();
2428            Object.keys(object).forEach(key => {
2429                const value = object[key];
2430                const name = prefix ? `${prefix}[${key}]` : key;
2431                if (value instanceof Object) {
2432                    objectToFormData(value, name, formData);
2433                } else {
2434                    formData.append(name, value);
2435                }
2436            });
2437
2438            return new URLSearchParams(formData).toString();
2439        };
2440
2441        return {
2442            totalAmount: 0,
2443
2444            init: () => {
2445                // Normally we would use private-content-loaded to get this information, but this component is
2446                // rendered after this event has been dispatched. So get the information from the browser storage.
2447                const browserStorage = hyva.getBrowserStorage();
2448                if (browserStorage) {
2449                    const cacheStorage = browserStorage.getItem('mage-cache-storage');
2450                    const cart = JSON.parse(cacheStorage).cart;
2451
2452                    this.totalAmount = cart.subtotalAmount;
2453                }
2454
2455                window.addEventListener('private-content-loaded', event => {
2456                    this.totalAmount = event.detail.data.cart.subtotalAmount
2457                })
2458            },
2459
2460            pay: () => {
2461                // The $block total is more reliable as it holds shipping costs and discounts, but due to some setups
2462                // it is sometimes empty. In that case, use the totalAmount from the browser storage.
2463                // The correct total amount is retrieved and set during the shipping step.
2464                const amount = "" || this.totalAmount;
2465                let countryCode, postalCode, shippingMethods, selectedShippingMethod, quoteTotals;
2466
2467                const request = {
2468                    countryCode: "US",
2469                    currencyCode: "USD",
2470                    supportedNetworks: ["amex","masterCard","visa","maestro","vPay"],
2471                    merchantCapabilities: ['supports3DS'],
2472                    total: {
2473                        label: "English\u0020\u0028ONS\u0029",
2474                        amount: amount
2475                    },
2476                    shippingType: 'shipping',
2477                    requiredBillingContactFields: [
2478                        'postalAddress',
2479                        'name',
2480                        'email',
2481                        'phone'
2482                    ],
2483                    requiredShippingContactFields: [
2484                        'postalAddress',
2485                        'name',
2486                        'email',
2487                        'phone'
2488                    ]
2489                }
2490
2491                let session = new ApplePaySession(3, request);
2492
2493                const getTotal = () => {
2494                    let totals = [...quoteTotals];
2495                    let total = totals.pop();
2496
2497                    total.label = "English\u0020\u0028ONS\u0029";
2498
2499                    return total;
2500                };
2501
2502                const getLineItems = () => {
2503                    let totals = [...quoteTotals];
2504                    totals.pop();
2505
2506                    return totals;
2507                };
2508
2509                const handleAjaxError = (message) => {
2510                    session.abort();
2511
2512                    dispatchMessages([
2513                        {
2514                            text: message,
2515                            type: 'error'
2516                        }
2517                    ]);
2518                };
2519
2520                session.onpaymentmethodselected = () => {
2521                    session.completePaymentMethodSelection(getTotal(), []);
2522                };
2523
2524                session.onshippingcontactselected = (event) => {
2525                    countryCode = event.shippingContact.countryCode;
2526                    postalCode = event.shippingContact.postalCode;
2527
2528                    fetch(`${BASE_URL}mollie/applePay/shippingMethods?form_key=${hyva.getFormKey()}`, {
2529                        method: 'POST',
2530                        headers: {
2531                            'content-type': 'application/x-www-form-urlencoded; charset=UTF-8',
2532                        },
2533                        body: 'countryCode=' + event.shippingContact.countryCode +
2534                            '&postalCode=' + event.shippingContact.postalCode
2535                    })
2536                        .then(response => {
2537                            if (!response.ok) {
2538                                throw new Error('Network response was not ok');
2539                            }
2540                            return response.json();
2541                        })
2542                        .then(result => {
2543                            shippingMethods = result.shipping_methods;
2544                            selectedShippingMethod = result.shipping_methods[0];
2545                            quoteTotals = result.totals;
2546
2547                            session.completeShippingContactSelection(
2548                                ApplePaySession.STATUS_SUCCESS,
2549                                result.shipping_methods,
2550                                getTotal(),
2551                                getLineItems()
2552                            );
2553                        })
2554                        .catch(error => handleAjaxError(error));
2555                };
2556
2557                session.onshippingmethodselected = (event) => {
2558                    selectedShippingMethod = event.shippingMethod;
2559
2560                    fetch(`${BASE_URL}mollie/applePay/shippingMethods?form_key=${hyva.getFormKey()}`, {
2561                        method: 'POST',
2562                        headers: {
2563                            'content-type': 'application/x-www-form-urlencoded; charset=UTF-8',
2564                        },
2565                        body: objectToFormData({
2566                            shippingMethod: selectedShippingMethod,
2567                            countryCode: countryCode,
2568                            postalCode: postalCode
2569                        })
2570                    })
2571                        .then(response => {
2572                            if (!response.ok) {
2573                                throw new Error('Network response was not ok');
2574                            }
2575                            return response.json();
2576                        })
2577                        .then(result => {
2578                            quoteTotals = result.totals;
2579
2580                            session.completeShippingMethodSelection(
2581                                ApplePaySession.STATUS_SUCCESS,
2582                                getTotal(),
2583                                getLineItems()
2584                            );
2585                        })
2586                        .catch(error => handleAjaxError(error));
2587                };
2588
2589                session.onpaymentauthorized = (event) => {
2590                    fetch(`${BASE_URL}mollie/applePay/placeOrder?form_key=${hyva.getFormKey()}`, {
2591                        method: 'POST',
2592                        headers: {
2593                            'content-type': 'application/x-www-form-urlencoded; charset=UTF-8',
2594                        },
2595                        body: objectToFormData({
2596                            shippingMethod: selectedShippingMethod,
2597                            billingAddress: event.payment.billingContact,
2598                            shippingAddress: event.payment.shippingContact,
2599                            applePayPaymentToken: JSON.stringify(event.payment.token)
2600                        })
2601                    })
2602                        .then(response => {
2603                            if (!response.ok) {
2604                                throw new Error('Network response was not ok');
2605                            }
2606                            return response.json();
2607                        })
2608                        .then(result => {
2609                            if (!session) {
2610                                console.warn('Payment canceled');
2611                                return;
2612                            }
2613
2614                            if (result.error) {
2615                                handleAjaxError(result.error_message);
2616                                return;
2617                            }
2618
2619                            if (!result.url) {
2620                                handleAjaxError('Something went wrong, please try again later.');
2621                                return;
2622                            }
2623
2624                            session.completePayment(ApplePaySession.STATUS_SUCCESS);
2625
2626                            window.dispatchEvent(new CustomEvent("reload-customer-section-data"));
2627
2628                            setTimeout(() => {
2629                                location.href = result.url;
2630                            }, 1000);
2631                        })
2632                        .catch(error => handleAjaxError(error));
2633                };
2634
2635                session.onvalidatemerchant = (event) => {
2636                    fetch(
2637                        `${BASE_URL}mollie/checkout/applePayValidation?form_key=${hyva.getFormKey()}`,
2638                        {
2639                            method: 'POST',
2640                            headers: {
2641                                'content-type': 'application/x-www-form-urlencoded; charset=UTF-8',
2642                            },
2643                            body: objectToFormData({validationURL: event.validationURL}),
2644                        }
2645                    )
2646                        .then((response) => {
2647                            if (!response.ok) {
2648                                throw new Error('Merchant validation failed');
2649                            }
2650
2651                            return response.json()
2652                        })
2653                        .then((result) => session.completeMerchantValidation(result))
2654                        .catch(error => handleAjaxError(error));
2655                };
2656
2657                session.oncancel = () => {
2658                    session = null;
2659                }
2660
2661                session.begin();
2662            }
2663        }
2664    }
2665
2666    window.addEventListener(
2667        'alpine:init',
2668        () => Alpine.data('prepareMollieApplePayMinicart', prepareMollieApplePayMinicart),
2669        {once: true}
2670    )
2671</script>
2671
2672            </div>
2673
2674            <button
2675                type="button"
2676                @click="closeCartDrawer"
2677                aria-label="Close&#x20;minicart"
2678                class="absolute top-0 right-2 p-4 mt-2 text-gray-300 transition-colors hover:text-black"
2679            >
2680                <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="24" height="24" aria-hidden="true">
2681  <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/>
2682</svg>
2683            </button>
2684        </div>
2685        <div
2686    class="z-50 fixed inset-0 grid place-items-center bg-white/70 text-primary"
2687    x-cloak
2688    x-show="isLoading"
2689    x-transition.opacity.duration.200ms
2690>
2691    <div class="flex gap-10 items-center p-4">
2692        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 57 57" width="57" height="57" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true">
2693    <style>
2694        @keyframes spinner-ball-triangle1 {
2695            0% { transform: translate(0%, 0%); }
2696            33% { transform: translate(38%, -79%); }
2697            66% { transform: translate(77%, 0%); }
2698            100% { transform: translate(0%, 0%); }
2699        }
2700
2701        @keyframes spinner-ball-triangle2 {
2702            0% { transform: translate(0%, 0%); }
2703            33% { transform: translate(38%, 79%); }
2704            66% { transform: translate(-38%, 79%); }
2705            100% { transform: translate(0%, 0%); }
2706        }
2707
2708        @keyframes spinner-ball-triangle3 {
2709            0% { transform: translate(0%, 0%); }
2710            33% { transform: translate(-77%, 0%); }
2711            66% { transform: translate(-38%, -79%); }
2712            100% { transform: translate(0%, 0%); }
2713        }
2714    </style>
2715    <circle cx="5" cy="50" r="5" style="animation: spinner-ball-triangle1 2.2s linear infinite"/>
2716    <circle cx="27" cy="5" r="5" style="animation: spinner-ball-triangle2 2.2s linear infinite"/>
2717    <circle cx="49" cy="50" r="5" style="animation: spinner-ball-triangle3 2.2s linear infinite"/>
2718</svg>
2719        <span class="text-xl select-none">
2720            Loading...        </span>
2721    </div>
2722</div>
2723    </div>
2724
2725</section>
2726
2727    <!--Authentication Pop-Up-->
2728    
2728<script>
2729    function initAuthentication() {
2730        return {
2731            open: false,
2732            close() {
2733                this.open = false;
2734            },
2735            forceAuthentication: false,
2736            checkoutUrl: 'https://www.outdoornativitysets.com/checkout/index/',
2737            errors: 0,
2738            hasCaptchaToken: 0,
2739            displayErrorMessage: false,
2740            errorMessages: [],
2741            setErrorMessages(message) {
2742                this.errorMessages = [message];
2743                this.displayErrorMessage = true;
2744            },
2745            submitForm() {
2746                // Do not rename $form, the variable is expected to be declared in the recaptcha output
2747                const $form = document.querySelector('#login-form');
2748                    if (!this.hasCaptchaToken) {
2749        this.errors = 1;
2750
2751
2752        const executeGreCaptcha = () => {
2753            grecaptcha.ready(() => {
2754                grecaptcha.execute(
2755                    '6Lf7qRkjAAAAAP0lyuri41_9EGRTkVEkzoJvVxbE',
2756                    {action: 'submit'}
2757                ).then((token) => {
2758                    const tokenElement = $form['g\u002Drecaptcha\u002Dresponse'];
2759
2760                    if (tokenElement && token && token.length > 0) {
2761                        $form['g\u002Drecaptcha\u002Dresponse'].value = token;
2762                        this.errors = 0;
2763                        this.hasCaptchaToken = 1;
2764                        (this.submitForm || $form.submit).call(this);
2765                    } else {
2766                        this.errors = 1;
2767                        const error = tokenElement
2768                            ? 'ReCaptcha\u0020validation\u0020failed,\u0020please\u0020try\u0020again'
2769                            : 'ReCaptcha\u0020token\u0020element\u0020is\u0020missing.\u0020Please\u0020refresh\u0020the\u0020page\u0020and\u0020trying\u0020again.';
2770                        if (this.setErrorMessages) {
2771                            this.setErrorMessages([error])
2772                            this.displayErrorMessage = true;
2773                        } else {
2774                            window.dispatchMessages && window.dispatchMessages([{type: "error", text: error}], 5000);
2775                        }
2776                    }
2777                }).catch(exception => {
2778                    console.error(exception || `An unknown error occurred during ReCaptcha validation. Are the tokens and the domain correctly set up in the Google console?`)
2779                });
2780            })
2781        }
2782
2783        if (window.grecaptcha) {
2784            executeGreCaptcha();
2785        } else {
2786            const recaptchaUrl = "https://www.google.com/recaptcha/api.js?render=6Lf7qRkjAAAAAP0lyuri41_9EGRTkVEkzoJvVxbE";
2787            const script = document.createElement('script');
2788            script.setAttribute('type', 'text/javascript');
2789            script.setAttribute('src', recaptchaUrl);
2790            document.head.appendChild(script);
2791
2792            script.addEventListener("load", executeGreCaptcha, false);
2793        }
2794    }
2795
2796                if (this.errors === 0) {
2797                    this.dispatchLoginRequest($form);
2798                }
2799            },
2800            onPrivateContentLoaded() {
2801                const data = this.$event.detail.data;
2802                const isLoggedIn = data.customer && data.customer.firstname;
2803                if (data.cart && !isLoggedIn) {
2804                    this.forceAuthentication = !data.cart.isGuestCheckoutAllowed;
2805                }
2806            },
2807            redirectIfAuthenticated() {
2808                const event = this.$event;
2809                this.open = this.forceAuthentication;
2810
2811                if (event.detail && event.detail.url) {
2812                    this.checkoutUrl = event.detail.url;
2813                }
2814                if (!this.forceAuthentication) {
2815                    window.location.href = this.checkoutUrl;
2816                }
2817            },
2818            resetErrors() {
2819                this.errors = 0;
2820            },
2821            dispatchLoginRequest(form) {
2822                this.isLoading = true;
2823                const username = this.$refs['customer-email'].value;
2824                const password = this.$refs['customer-password'].value;
2825                const formKey = hyva.getFormKey();
2826                const bodyFields = {
2827                    'username': username,
2828                    'password': password,
2829                    'formKey': formKey
2830                };
2831                                const fieldName = 'g\u002Drecaptcha\u002Dresponse';
2832                const recaptchaField = fieldName && form[fieldName];
2833                if (recaptchaField) {
2834                    bodyFields[fieldName] = recaptchaField.value;
2835                }
2836                fetch('https://www.outdoornativitysets.com/customer/ajax/login/', {
2837                        method: 'POST',
2838                        headers: {
2839                            'Content-Type': 'application/json',
2840                            'X-Requested-With': 'XMLHttpRequest'
2841                        },
2842                        body: JSON.stringify(bodyFields)
2843                    }
2844                ).then(response => {
2845                        return response.json()
2846                    }
2847                ).then(data => {
2848                    this.isLoading = false;
2849                    if (data.errors) {
2850                        this.setErrorMessages(data.message);
2851                        this.errors = 1;
2852                        this.hasCaptchaToken = 0;
2853                    } else {
2854                        window.location.href = this.checkoutUrl;
2855                    }
2856                });
2857            }
2858        }
2859    }
2860
2861    window.addEventListener('alpine:init', () => Alpine.data('initAuthentication', initAuthentication), {once: true})
2862</script>
2862
2863<section id="authentication-popup"
2864         x-data="initAuthentication"
2865         @private-content-loaded.window="onPrivateContentLoaded"
2866         @toggle-authentication.window="redirectIfAuthenticated"
2867         @keydown.window.escape="close"
2868>
2869    <div
2870        class="backdrop"
2871        aria-hidden="true"
2872        x-cloak
2873        x-show="open"
2874        x-transition:enter="ease-in-out duration-500"
2875        x-transition:enter-start="opacity-0"
2876        x-transition:enter-end="opacity-100"
2877        x-transition:leave="ease-in-out duration-500"
2878        x-transition:leave-start="opacity-100"
2879        x-transition:leave-end="opacity-0"
2880        @click="close"
2881    ></div>
2882    <div role="dialog"
2883         aria-modal="true"
2884         @click.outside="close"
2885         class="inset-y-0 right-0 z-30 flex max-w-full fixed"
2886         x-cloak
2887         x-show="open"
2888    >
2889        <div class="relative w-screen max-w-md pt-16 bg-container-lighter"
2890             x-show="open"
2891             x-cloak
2892             x-transition:enter="transform transition ease-in-out duration-500 sm:duration-700"
2893             x-transition:enter-start="translate-x-full"
2894             x-transition:enter-end="translate-x-0"
2895             x-transition:leave="transform transition ease-in-out duration-500 sm:duration-700"
2896             x-transition:leave-start="translate-x-0"
2897             x-transition:leave-end="translate-x-full"
2898        >
2899            <div
2900                x-show="open"
2901                x-cloak
2902                x-transition:enter="ease-in-out duration-500"
2903                x-transition:enter-start="opacity-0"
2904                x-transition:enter-end="opacity-100"
2905                x-transition:leave="ease-in-out duration-500"
2906                x-transition:leave-start="opacity-100"
2907                x-transition:leave-end="opacity-0" class="absolute top-0 right-2 flex p-2 mt-2">
2908                <button
2909                    type="button"
2910                    @click="close"
2911                    aria-label="Close&#x20;panel"
2912                    class="p-2 text-gray-300 transition duration-150 ease-in-out hover:text-black"
2913                >
2914                    <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="24" height="24" aria-hidden="true">
2915  <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/>
2916</svg>
2917                </button>
2918            </div>
2919            <template x-if="open">
2920                <div class="flex flex-col h-full py-6 space-y-6 bg-white shadow-xl overflow-y-auto">
2921                    <div class="mx-4">
2922                        <div class="message error mb-0" x-show="errors" x-cloak>
2923                            <template x-for="(message, index) in errorMessages" :key="index">
2924                                <div>
2925                                    <template x-if="message">
2926                                        <span x-html="message"></span>
2927                                    </template>
2928                                </div>
2929                            </template>
2930                        </div>
2931                    </div>
2932                    <div class="block-customer-login bg-container border border-container mx-4 p-4 shadow-sm">
2933                        <p id="authenticate-customer-login" class="text-lg leading-7 text-gray-900">
2934                            <strong class="font-medium">Checkout using your account</strong>
2935                        </p>
2936
2937                        <form class="form form-login"
2938                              method="post"
2939                              @submit.prevent="submitForm"
2940                              id="login-form"
2941                        >
2942                            <div class="control">
2943    <input type="hidden"
2944           value=""
2945           name="g-recaptcha-response"
2946    />
2947</div>
2948                            <div class="fieldset login">
2949                                <div class="field email required">
2950                                    <label class="label" for="form-login-username" form="login-form" >
2951                                        <span>Email Address</span>
2952                                    </label>
2953                                    <div class="control">
2954                                        <input name="username"
2955                                               id="form-login-username"
2956                                               x-ref="customer-email"
2957                                               @change="resetErrors"
2958                                               type="email"
2959                                               required
2960                                               autocomplete="off"
2961                                               class="form-input"
2962                                        >
2963                                    </div>
2964                                </div>
2965                                <div class="field password required">
2966                                    <label for="form-login-password" class="label" form="login-form">
2967                                        <span>Password</span>
2968                                    </label>
2969                                    <div class="control">
2970                                        <input name="password"
2971                                               id="form-login-password"
2972                                               type="password"
2973                                               class="form-input"
2974                                               required
2975                                               x-ref="customer-password"
2976                                               autocomplete="off"
2977                                               @change="resetErrors"
2978                                        >
2979                                    </div>
2980                                </div>
2981
2982                                <input name="context" type="hidden" value="checkout" />
2983                                <div class="actions-toolbar pt-6 pb-2">
2984                                    <button type="submit"                                            class="inline-flex btn btn-primary disabled:opacity-75"
2985                                    >
2986                                        Sign In                                    </button>
2987                                    <a href="https://www.outdoornativitysets.com/customer/account/forgotpassword/"
2988                                    >
2989                                        Forgot Your Password?                                    </a>
2990                                </div>
2991
2992                            </div>
2993                        </form>
2994                    </div>
2995                    <div class="mx-4">
2996                        <p class="my-4 text-sm text-gray-900">
2997    This form is protected by reCAPTCHA.</p>
2998                    </div>
2999                    <div class="block-new-customer bg-container border border-container mx-4 p-4 shadow-sm">
3000                        <p id="authenticate-new-customer" class="text-lg mb-2 leading-7 text-gray-900">
3001                            <strong class="font-medium">Checkout as a new customer</strong>
3002                        </p>
3003
3004                        <div class="block-content">
3005                            <p class="mb-1">
3006                                Creating an account has many benefits:                            </p>
3007                            <ul class="list-disc pl-5">
3008                                <li> See order and shipping status</li>
3009                                <li> Track order history</li>
3010                                <li> Check out faster</li>
3011                            </ul>
3012                            <div class="actions-toolbar mt-6 mb-2">
3013                                <a href="https://www.outdoornativitysets.com/customer/account/create/"
3014                                   class="inline-flex btn btn-primary">
3015                                    Create an Account                                </a>
3016                            </div>
3017                        </div>
3018                    </div>
3019                </div>
3020            </template>
3021        </div>
3022    </div>
3023</section>
3024</div>
3025
3026
3027<script>
3028    function initProPage() {
3029        return {
3030            visible: false,
3031            initHtml: function(data, elem) {
3032                if(data.company
3033                    && data.company.has_customer_company
3034                    && data.company.pro_page_link
3035                ) {
3036                    const link = elem.querySelector('a');
3037                    if(link) {
3038                        link.setAttribute('href', this.prepareLink(data.company.pro_page_link));
3039                        this.visible = true;
3040                    } else {
3041                        console.debug('company block missing anchor tag')
3042                    }
3043
3044                }
3045            },
3046            prepareLink: function(link) {
3047                return link.charAt(0) !== '/' ? ('/' + link) : link;
3048            }
3049        }
3050    }
3051</script>
3051
3052
3053
3054</header><main id="maincontent" class="page-main"><div id="contentarea" tabindex="-1"></div>
3055<div class="page messages">
3055<script>
3056        function initMessages() {
3057        "use strict";
3058        return {
3059            messages: window.mageMessages || [],
3060            isEmpty() {
3061                return this.messages.reduce(
3062                    function (isEmpty, message) {
3063                        return isEmpty && message === undefined
3064                    }, true
3065                )
3066            },
3067            hasMessages() {
3068                return !this.isEmpty();
3069            },
3070            hasMessage() {
3071                return !!this.message;
3072            },
3073            removeMessage() {
3074                this.messages[this.index] = undefined;
3075            },
3076            addMessages(messages, hideAfter) {
3077                messages.map((message) => {
3078                    this.messages = this.messages.concat(message);
3079                    if (hideAfter === undefined && message.type === 'success' && window.defaultSuccessMessageTimeout) {
3080                        hideAfter = window.defaultSuccessMessageTimeout;
3081                    }
3082                    if (hideAfter) {
3083                        this.setHideTimeOut(this.messages.length -1, hideAfter);
3084                    }
3085                });
3086            },
3087            setHideTimeOut(messageIndex, hideAfter) {
3088                setTimeout((messageIndex) => {
3089                    this.messages[messageIndex] = undefined;
3090                }, hideAfter, messageIndex);
3091            },
3092            eventListeners: {
3093                ['@messages-loaded.window'](event) {
3094                    this.addMessages(event.detail.messages, event.detail.hideAfter)
3095                },
3096                ['@private-content-loaded.window'](event) {
3097                    const data = event.detail.data;
3098                    if (
3099                        data.messages &&
3100                        data.messages.messages &&
3101                        data.messages.messages.length
3102                    ) {
3103                        this.addMessages(data.messages.messages);
3104                    }
3105                },
3106                ['@clear-messages.window']() {
3107                    this.messages = [];
3108                }
3109            },
3110            getMessageUiId() {
3111                return 'message-' + this.message.type;
3112            }
3113        }
3114    }
3115
3116    window.addEventListener('alpine:init', () => Alpine.data('initMessages', initMessages), {once: true})
3117</script>
3117
3118<section id="messages"
3119         x-data="initMessages"
3120         x-bind="eventListeners"
3121         aria-live="assertive"
3122         role="alert"
3123>
3124    <template x-if="hasMessages">
3125        <div class="w-full">
3126            <div class="messages container mx-auto py-3">
3127                <template x-for="(message, index) in messages" :key="index">
3128                    <div>
3129                        <template x-if="hasMessage">
3130                            <div class="message"
3131                                 :class="message.type"
3132                                 :ui-id="getMessageUiId"
3133                            >
3134                                <span x-html="message.text"></span>
3135                                <button
3136                                    type="button"
3137                                    class="text-gray-600 hover:text-black"
3138                                    aria-label="Close message"
3139                                    @click.prevent="removeMessage"
3140                                >
3141                                    <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="stroke-current" width="18" height="18" aria-hidden="true">
3142  <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/>
3143</svg>
3144                                </button>
3145                            </div>
3146                        </template>
3147                    </div>
3148                </template>
3149            </div>
3150        </div>
3151    </template>
3152</section>
3153</div><div class="columns"><div class="column main">
3153<script>
3154    window.boldFlowConfig = {
3155        shopId: "3e913d263509257ceef6952f2d5307bf",
3156        apiUrl: "https://api.boldcommerce.com/",
3157        meta: {
3158            isEnabled: "1"
3159        },
3160        continueUrl: "https://www.outdoornativitysets.com/",
3161        checkoutUrl: "https://www.outdoornativitysets.com/checkout/",
3162        contactUsUrl: "https://www.outdoornativitysets.com/contact/",
3163        headerColor: "#FFFFFF",
3164        logoData: {"src":"https:\/\/www.outdoornativitysets.com\/media\/logo\/stores\/7\/outdoor-nativity-sets-logo.png","alt":"OutdoorNativitySets","width":203,"height":60},
3165        loaderIcon: "https://www.outdoornativitysets.com/static/version1789694905/frontend/Kadro/outdoor_nativity_sets_hyva/en_US/images/loader-2.gif",
3166    };
3167</script>
3167
3168
3169<script type="text/x-magento-init">
3170    {
3171                    "[href='https://www.outdoornativitysets.com/checkout']": {
3172                    "proceedToMetaCheckout":{"checkoutUrl":"https://www.outdoornativitysets.com/checkout/"}
3173                },                    "[href='https://www.outdoornativitysets.com/checkout/']": {
3174                    "proceedToMetaCheckout":{"checkoutUrl":"https://www.outdoornativitysets.com/checkout/"}
3175                }        }
3176</script>
3176
3177<style>#html-body [data-pb-style=U2FQ6LH]{display:none}#html-body [data-pb-style=ANKFK3V],#html-body [data-pb-style=Y73XUE0]{display:flex;flex-direction:column;background-repeat:no-repeat;background-attachment:scroll}#html-body [data-pb-style=Y73XUE0]{justify-content:center;background-position:center top;background-size:contain;text-align:center}#html-body [data-pb-style=ANKFK3V]{justify-content:flex-start;background-position:left top;background-size:cover;border-style:none;border-width:1px;border-radius:0;margin:0;padding:5px 15px 0}#html-body [data-pb-style=Y9GW7C5]{text-align:center;display:none}#html-body [data-pb-style=S4JQ1VY]{display:none}#html-body [data-pb-style=FA81E79]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}#html-body [data-pb-style=CSA0QJ4]{width:100%;border-width:1px;border-color:#cecece;display:inline-block}#html-body [data-pb-style=Y53BV2S]{display:none}#html-body [data-pb-style=N5ENCQ6]{width:100%;border-width:1px;border-color:#cecece;display:inline-block}#html-body [data-pb-style=E9BPNCV]{display:none}</style><div data-content-type="html" data-appearance="default" data-element="main" data-decoded="true"><!-- Page Specific Styles-->
3178<style>
3179.breadcrumbs { display: none; }
3180/* … all your existing CSS … */
3181
3182.tin_pinboard {
3183  padding-bottom: 30px;
3184  off-border-top: 1px solid #ddd;
3185  margin: 0 auto;
3186  max-width: 1200px;
3187}
3188
3189/* Kill the header search bar on this page */
3190.block-search,
3191#search_mini_form {
3192  display: none !important;
3193}
3194</style>
3195</div><div data-content-type="html" data-appearance="default" data-element="main" data-decoded="true"><!-- Container Top -->
3196<div id="home">
3197  <div class="container-fluid home-container">
3198
3199
3200</div><div data-content-type="html" data-appearance="default" data-element="main" data-pb-style="U2FQ6LH" data-decoded="true"><!-- Hero -->
3201<div id="home-hero">
3202        <div class="visible-xs" style="line-height: 0;"><a href="/nativity-sets"><img class="full-hero-disable" src="https://outdoornativitysets.s3.amazonaws.com/images/home-hero-mobile-22.jpg" alt=""></a></div>
3203        <div class="hidden-xs"><a href="/nativity-sets"><img class="full-hero-disable" src="https://outdoornativitysets.s3.amazonaws.com/images/home-hero-desktop-22.jpg" alt=""></a></div>
3204</div>
3205
3206</div><div data-content-type="row" data-appearance="full-bleed" data-enable-parallax="0" data-parallax-speed="0.5" data-background-images='{\"desktop_image\":\"https://www.outdoornativitysets.com/media/wysiwyg/Outdoor_Nativity_Hero_-_Desktop_1.jpg\",\"mobile_image\":\"https://www.outdoornativitysets.com/media/wysiwyg/Outdoor_Nativity_Hero_-_Mobile_1.jpg\"}' data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-background-lazy-load="false" data-element="main" data-pb-style="Y73XUE0" class="background-image-6ab6e354b9458"><div data-content-type="html" data-appearance="default" data-element="main" data-decoded="true"><!-- American-Made Hero (mobile perfect, desktop pushed far left) -->
3207<style>
3208  #holiday-hero{
3209    background-color:#730402;
3210    background-image:url("https://www.outdoornativitysets.com/media/wysiwyg/outdoor-nativity-sets/page-content/home/hero-american-made-mobile.jpg.jpg");
3211    background-size:cover;
3212    background-position:center bottom;
3213    background-repeat:no-repeat;
3214    color:#fff;
3215  }
3216
3217  /* Mobile-first */
3218  #holiday-hero .hero-inner{
3219    max-width:1280px;
3220    margin:0 auto;
3221    min-height:560px;
3222    padding:56px 18px 28px;
3223    display:flex; align-items:flex-start; justify-content:flex-start;
3224  }
3225  #holiday-hero .copy{ width:100%; max-width:360px; margin:0 auto; text-align:center; }
3226
3227  .headline{ font-family:'Montserrat',sans-serif; font-weight:800; font-size:25px; line-height:1.2; margin:0 0 10px; }
3228  .subhead{  font-family:'Montserrat',sans-serif; font-size:20px; line-height:1.5; margin:0 0 12px; }
3229  .desktop-only{ display:none; }
3230
3231  .cta{
3232    display:inline-block; margin-top:14px; padding:12px 22px;
3233    background:#f0cf58; color:#1b1b1b; font-weight:800; text-decoration:none;
3234    border-radius:0; box-shadow:none;
3235  }
3236
3237  /* ===== Desktop ===== */
3238  @media (min-width:992px){
3239    #holiday-hero{
3240      background-image:url("https://www.outdoornativitysets.com/media/wysiwyg/outdoor-nativity-sets/page-content/home/hero-american-made-desktop.jpg.jpg");
3241      background-position:center center;
3242    }
3243
3244    /* make the inner wrapper full-bleed and push content far left with viewport padding */
3245    #holiday-hero .hero-inner{
3246      max-width:none !important;        /* stop centering constraint */
3247      margin:0 !important;
3248      min-height:640px;
3249      padding-left:clamp(64px, 12vw, 220px) !important;  /* << move into left negative space */
3250      padding-right:40px !important;
3251      padding-top:120px; padding-bottom:96px;
3252      align-items:flex-start; justify-content:flex-start;
3253      text-align:left;
3254    }
3255
3256    #holiday-hero .copy{
3257      max-width:560px; width:560px;
3258      margin:0 !important;             /* kill any residual margins */
3259      text-align:left !important;
3260    }
3261
3262    .headline{ font-size:30px; line-height:1.15; margin-bottom:10px; }
3263    .subhead{  font-size:20px; }
3264    .desktop-only{ display:block; }
3265  }
3266</style>
3267
3268<section id="holiday-hero" class="row print-visible">
3269  <div class="hero-inner">
3270    <div class="copy">
3271      <h1 class="headline">American-Made<br>Nativity Sets</h1>
3272      <p class="subhead">
3273        Celebrating the birth of <strong>Jesus Christ</strong> with quality craftsmanship,
3274        proudly <strong>built in Florida</strong>.
3275      </p>
3276      <!-- Desktop only -->
3277      <p class="subhead desktop-only">Trusted by families who believe in faith, tradition, and American values.</p>
3278      <a class="cta" href="https://www.outdoornativitysets.com/nativity-sets">Shop Now</a>
3279    </div>
3280  </div>
3281</section>
3282</div></div><div data-content-type="row" data-appearance="full-width" data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="main" data-pb-style="ANKFK3V"><div class="row-full-width-inner" data-element="inner"><div data-content-type="products" data-appearance="grid" data-element="main" data-pb-style="Y9GW7C5">        <div class="block widget block-products-list grid">
3283                <div class="block-content">
3284            <div class="mx-auto grid gap-4 sm:grid-cols-2 lg:grid-cols-4">
3285                                    
3286<form method="post" action="https://www.outdoornativitysets.com/checkout/cart/add/uenc/%25uenc%25/product/29661/" class="item product product-item product_addtocart_form card card-interactive flex flex-col w-full  ">
3287    <input name="form_key" type="hidden" value="tDBO7PyoUTlaVbs9">    <input type="hidden" name="product" value="29661">
3288    <input type="hidden" name="product_sku" value="202632-30001-BP">
3289        
3290                
3291                <a href="https://www.outdoornativitysets.com/holy-night-outdoor-nativity-set" title="Holy Night Outdoor Nativity Set" class="product photo product-item-photo block mx-auto mb-3 " tabindex="-1">
3292            <img class="hover:shadow-sm object-contain product-image-photo" x-data="" @update-gallery-29661.window="$root.src = $event.detail" src="https://www.outdoornativitysets.com/media/catalog/product/2/0/202632-30001_1.jpg?quality=80&amp;bg-color=255,255,255&amp;fit=bounds&amp;height=240&amp;width=240&amp;canvas=240:240" loading="lazy" width="240" height="240" alt="Holy Night Outdoor Nativity Set" title="Holy Night Outdoor Nativity Set">
3293        </a>
3294        <div class="product-info flex flex-col grow">
3295                        <div class="mt-2 mb-1 items-center h-14 overflow-hidden	justify-center text-primary font-normal text-base text-left leading-tight">
3296                <a class="product-item-link" href="https://www.outdoornativitysets.com/holy-night-outdoor-nativity-set" :id="`slide-desc-29661-${$id('slider-id')}`">
3297                    Holy Night Outdoor Nativity Set                </a>
3298            </div>
3299
3300                            <div class="py-1 ">
3301                    <div class="product-reviews-summary short flex">
3302            <span class="tt-review-avg">4.9</span>
3303        <div x-data="initRating296616ab689c664efe()" x-defer="intersect" @keyup.enter="scrollToRatings()" @click="scrollToRatings()" class="rating-summary flex items-center" :class="{'cursor-pointer' : reviewsSection}" :tabindex="reviewsSection ? '0' : '-1'" :aria-label="reviewsSection
3304            ? 'Holy\u0020Night\u0020Outdoor\u0020Nativity\u0020Set\u0020rating.\u00205\u0020out\u0020of\u00205\u0020stars.\u0020Click\u0020to\u0020go\u0020to\u0020reviews.'
3305            : 'Holy\u0020Night\u0020Outdoor\u0020Nativity\u0020Set\u0020rating.\u00205\u0020out\u0020of\u00205\u0020stars'
3306        " :role="reviewsSection ? 'button' : 'img'">
3307                                                <svg class="TTteaser__icon--full w-6 h-6" role="presentation" viewbox="-2 0 28 24">
3308                    <path d="M12 18.66l-7.44 4.35 1.98-8.16L0 9.36l8.62-.7L12 .99l3.38 7.67 8.62.7-6.54 5.49 1.98 8.16L12 18.66z" xmlns="http://www.w3.org/2000/svg"></path>
3309                </svg>
3310                                            <svg class="TTteaser__icon--full w-6 h-6" role="presentation" viewbox="-2 0 28 24">
3311                    <path d="M12 18.66l-7.44 4.35 1.98-8.16L0 9.36l8.62-.7L12 .99l3.38 7.67 8.62.7-6.54 5.49 1.98 8.16L12 18.66z" xmlns="http://www.w3.org/2000/svg"></path>
3312                </svg>
3313                                            <svg class="TTteaser__icon--full w-6 h-6" role="presentation" viewbox="-2 0 28 24">
3314                    <path d="M12 18.66l-7.44 4.35 1.98-8.16L0 9.36l8.62-.7L12 .99l3.38 7.67 8.62.7-6.54 5.49 1.98 8.16L12 18.66z" xmlns="http://www.w3.org/2000/svg"></path>
3315                </svg>
3316                                            <svg class="TTteaser__icon--full w-6 h-6" role="presentation" viewbox="-2 0 28 24">
3317                    <path d="M12 18.66l-7.44 4.35 1.98-8.16L0 9.36l8.62-.7L12 .99l3.38 7.67 8.62.7-6.54 5.49 1.98 8.16L12 18.66z" xmlns="http://www.w3.org/2000/svg"></path>
3318                </svg>
3319                                            <svg class="TTteaser__icon--full w-6 h-6" role="presentation" viewbox="-2 0 28 24">
3320                    <path d="M12 18.66l-7.44 4.35 1.98-8.16L0 9.36l8.62-.7L12 .99l3.38 7.67 8.62.7-6.54 5.49 1.98 8.16L12 18.66z" xmlns="http://www.w3.org/2000/svg"></path>
3321                </svg>
3322                                                                
3323            </div>
3324
3325            <a class="action view text-sm" href="https://www.outdoornativitysets.com/holy-night-outdoor-nativity-set#reviews">(564)
3326        </a>
3327    </div>
3328
3329    
3329<script>
3330        'use strict';
3331
3332        function initRating296616ab689c664efe() {
3333            return {
3334                reviewsSection: document.getElementById('customer-review-list')
3335                    || document.getElementById('customer-reviews')
3336                    || document.getElementById('review-form'),
3337                scrollToRatings() {
3338                    let scrollTimeout = null
3339
3340                    if (!this.reviewsSection) {
3341                        return
3342                    }
3343
3344                    addEventListener('scroll', () => {
3345                        clearTimeout(scrollTimeout);
3346
3347                        scrollTimeout = setTimeout(() => {
3348                            if (this.reviewsSection) {
3349                                this.reviewsSection.focus()
3350                            }
3351                        }, 50);
3352                    }, { once: true });
3353
3354                    this.reviewsSection.scrollIntoView({behavior: 'smooth'})
3355                }
3356            }
3357        }
3358    </script>
3358
3359                </div>
3360            
3361                                        
3362            
3363                            <span class="sr-only">
3364                The price depends on the options chosen on the product page            </span>
3365            
3366                            <div class="pt-1 text-gray-900" x-data="initPriceBox()" x-defer="intersect" @update-prices-29661.window="updatePrice($event.detail);">
3367                    <div class="price-box price-final_price" data-role="priceBox" data-product-id="29661" data-price-box="product-id-29661" x-data="initPrice29661()" x-bind="eventListeners">            <p class="bundle-price" x-show="calculatedFinalPriceWithCustomOptions &gt; 0">
3368            
3369
3370	<span class="price-container price-final_price tax weee">
3371	    	    <span id="bundle-price-29661" data-price-amount="199.99" data-price-type="" class="price-wrapper ">
3372	        <span class="price">$199.99</span>	    </span>
3373	    	    	</span>
3374
3375                    </p>
3376        <p class="regular-price" x-show="calculatedFinalRegularPriceWithCustomOptions &gt; calculatedFinalPriceWithCustomOptions">
3377            
3378
3379	<span class="price-container price-final_price tax weee">
3380	    	    <span id="regular-price-29661" data-price-amount="199.99" data-price-type="" class="price-wrapper ">
3381	        <span class="price">$199.99</span>	    </span>
3382	    	    	</span>
3383
3384                    </p>
3385    
3386<script>
3387    const bundlePrice = document.getElementById('bundle-price-29661');
3388    if(bundlePrice) {
3389            bundlePrice.setAttribute('x-html', 'hyva.formatPrice(parseFloat(calculatedFinalPriceWithCustomOptions))');
3390    }
3391    const regularPrice = document.getElementById('regular-price-29661');
3392    if(regularPrice) {
3393        regularPrice.setAttribute('x-html', 'hyva.formatPrice(parseFloat(calculatedFinalRegularPriceWithCustomOptions))');
3394    }
3395    const bundleItemRegularPrices = JSON.parse('{"15130":"199.990000","15217":"99.990000","15337":"99.000000"}');
3396</script>
3396
3397</div>                </div>
3398            
3399                            <div class="slider-item-info mt-auto pt-3 flex flex-wrap items-center gap-y-4 gap-x-2
3400                ">
3401                                                                        <a href="https://www.outdoornativitysets.com/holy-night-outdoor-nativity-set" class="w-auto btn btn-primary justify-center text-sm mr-auto" title="Configure %1 on the product page" aria-label="Configure Holy Night Outdoor Nativity Set on the product page">
3402                                <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke-width="2" stroke="currentColor" width="24" height="24" aria-hidden="true">
3403  <path stroke-linecap="round" stroke-linejoin="round" d="M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z"></path>
3404</svg>
3405                                <span class="ml-2 inline md:ml-0 md:hidden lg:ml-2 lg:inline">
3406                            Configure                        </span>
3407                            </a>
3408                        
3409                                    </div>
3410            
3411                    </div>
3412        </form>
3413                                    
3414<form method="post" action="https://www.outdoornativitysets.com/checkout/cart/add/uenc/%25uenc%25/product/29658/" class="item product product-item product_addtocart_form card card-interactive flex flex-col w-full  ">
3415    <input name="form_key" type="hidden" value="tDBO7PyoUTlaVbs9">    <input type="hidden" name="product" value="29658">
3416    <input type="hidden" name="product_sku" value="202632-30050-BP">
3417        
3418                
3419                <a href="https://www.outdoornativitysets.com/holy-family-outdoor-nativity-set" title="Holy Family Outdoor Nativity Set" class="product photo product-item-photo block mx-auto mb-3 " tabindex="-1">
3420            <img class="hover:shadow-sm object-contain product-image-photo" x-data="" @update-gallery-29658.window="$root.src = $event.detail" src="https://www.outdoornativitysets.com/media/catalog/product/2/0/202632-30050_zm_1.jpg?quality=80&amp;bg-color=255,255,255&amp;fit=bounds&amp;height=240&amp;width=240&amp;canvas=240:240" loading="lazy" width="240" height="240" alt="Holy Family Outdoor Nativity Set" title="Holy Family Outdoor Nativity Set">
3421        </a>
3422        <div class="product-info flex flex-col grow">
3423                        <div class="mt-2 mb-1 items-center h-14 overflow-hidden	justify-center text-primary font-normal text-base text-left leading-tight">
3424                <a class="product-item-link" href="https://www.outdoornativitysets.com/holy-family-outdoor-nativity-set" :id="`slide-desc-29658-${$id('slider-id')}`">
3425                    Holy Family Outdoor Nativity Set                </a>
3426            </div>
3427
3428                            <div class="py-1 ">
3429                    <div class="product-reviews-summary short flex">
3430            <span class="tt-review-avg">4.8</span>
3431        <div x-data="initRating296586ab689c6705cb()" x-defer="intersect" @keyup.enter="scrollToRatings()" @click="scrollToRatings()" class="rating-summary flex items-center" :class="{'cursor-pointer' : reviewsSection}" :tabindex="reviewsSection ? '0' : '-1'" :aria-label="reviewsSection
3432            ? 'Holy\u0020Family\u0020Outdoor\u0020Nativity\u0020Set\u0020rating.\u00205\u0020out\u0020of\u00205\u0020stars.\u0020Click\u0020to\u0020go\u0020to\u0020reviews.'
3433            : 'Holy\u0020Family\u0020Outdoor\u0020Nativity\u0020Set\u0020rating.\u00205\u0020out\u0020of\u00205\u0020stars'
3434        " :role="reviewsSection ? 'button' : 'img'">
3435                                                <svg class="TTteaser__icon--full w-6 h-6" role="presentation" viewbox="-2 0 28 24">
3436                    <path d="M12 18.66l-7.44 4.35 1.98-8.16L0 9.36l8.62-.7L12 .99l3.38 7.67 8.62.7-6.54 5.49 1.98 8.16L12 18.66z" xmlns="http://www.w3.org/2000/svg"></path>
3437                </svg>
3438                                            <svg class="TTteaser__icon--full w-6 h-6" role="presentation" viewbox="-2 0 28 24">
3439                    <path d="M12 18.66l-7.44 4.35 1.98-8.16L0 9.36l8.62-.7L12 .99l3.38 7.67 8.62.7-6.54 5.49 1.98 8.16L12 18.66z" xmlns="http://www.w3.org/2000/svg"></path>
3440                </svg>
3441                                            <svg class="TTteaser__icon--full w-6 h-6" role="presentation" viewbox="-2 0 28 24">
3442                    <path d="M12 18.66l-7.44 4.35 1.98-8.16L0 9.36l8.62-.7L12 .99l3.38 7.67 8.62.7-6.54 5.49 1.98 8.16L12 18.66z" xmlns="http://www.w3.org/2000/svg"></path>
3443                </svg>
3444                                            <svg class="TTteaser__icon--full w-6 h-6" role="presentation" viewbox="-2 0 28 24">
3445                    <path d="M12 18.66l-7.44 4.35 1.98-8.16L0 9.36l8.62-.7L12 .99l3.38 7.67 8.62.7-6.54 5.49 1.98 8.16L12 18.66z" xmlns="http://www.w3.org/2000/svg"></path>
3446                </svg>
3447                                            <svg class="TTteaser__icon--full w-6 h-6" role="presentation" viewbox="-2 0 28 24">
3448                    <path d="M12 18.66l-7.44 4.35 1.98-8.16L0 9.36l8.62-.7L12 .99l3.38 7.67 8.62.7-6.54 5.49 1.98 8.16L12 18.66z" xmlns="http://www.w3.org/2000/svg"></path>
3449                </svg>
3450                                                                
3451            </div>
3452
3453            <a class="action view text-sm" href="https://www.outdoornativitysets.com/holy-family-outdoor-nativity-set#reviews">(462)
3454        </a>
3455    </div>
3456
3457    
3457<script>
3458        'use strict';
3459
3460        function initRating296586ab689c6705cb() {
3461            return {
3462                reviewsSection: document.getElementById('customer-review-list')
3463                    || document.getElementById('customer-reviews')
3464                    || document.getElementById('review-form'),
3465                scrollToRatings() {
3466                    let scrollTimeout = null
3467
3468                    if (!this.reviewsSection) {
3469                        return
3470                    }
3471
3472                    addEventListener('scroll', () => {
3473                        clearTimeout(scrollTimeout);
3474
3475                        scrollTimeout = setTimeout(() => {
3476                            if (this.reviewsSection) {
3477                                this.reviewsSection.focus()
3478                            }
3479                        }, 50);
3480                    }, { once: true });
3481
3482                    this.reviewsSection.scrollIntoView({behavior: 'smooth'})
3483                }
3484            }
3485        }
3486    </script>
3486
3487                </div>
3488            
3489                                        
3490            
3491                            <span class="sr-only">
3492                The price depends on the options chosen on the product page            </span>
3493            
3494                            <div class="pt-1 text-gray-900" x-data="initPriceBox()" x-defer="intersect" @update-prices-29658.window="updatePrice($event.detail);">
3495                    <div class="price-box price-final_price" data-role="priceBox" data-product-id="29658" data-price-box="product-id-29658" x-data="initPrice29658()" x-bind="eventListeners">            <p class="bundle-price" x-show="calculatedFinalPriceWithCustomOptions &gt; 0">
3496            
3497
3498	<span class="price-container price-final_price tax weee">
3499	    	    <span id="bundle-price-29658" data-price-amount="134.99" data-price-type="" class="price-wrapper ">
3500	        <span class="price">$134.99</span>	    </span>
3501	    	    	</span>
3502
3503                    </p>
3504        <p class="regular-price" x-show="calculatedFinalRegularPriceWithCustomOptions &gt; calculatedFinalPriceWithCustomOptions">
3505            
3506
3507	<span class="price-container price-final_price tax weee">
3508	    	    <span id="regular-price-29658" data-price-amount="134.99" data-price-type="" class="price-wrapper ">
3509	        <span class="price">$134.99</span>	    </span>
3510	    	    	</span>
3511
3512                    </p>
3513    
3514<script>
3515    const bundlePrice = document.getElementById('bundle-price-29658');
3516    if(bundlePrice) {
3517            bundlePrice.setAttribute('x-html', 'hyva.formatPrice(parseFloat(calculatedFinalPriceWithCustomOptions))');
3518    }
3519    const regularPrice = document.getElementById('regular-price-29658');
3520    if(regularPrice) {
3521        regularPrice.setAttribute('x-html', 'hyva.formatPrice(parseFloat(calculatedFinalRegularPriceWithCustomOptions))');
3522    }
3523    const bundleItemRegularPrices = JSON.parse('{"15133":"134.990000","15217":"99.990000"}');
3524</script>
3524
3525</div>                </div>
3526            
3527                            <div class="slider-item-info mt-auto pt-3 flex flex-wrap items-center gap-y-4 gap-x-2
3528                ">
3529                                                                        <a href="https://www.outdoornativitysets.com/holy-family-outdoor-nativity-set" class="w-auto btn btn-primary justify-center text-sm mr-auto" title="Configure %1 on the product page" aria-label="Configure Holy Family Outdoor Nativity Set on the product page">
3530                                <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke-width="2" stroke="currentColor" width="24" height="24" aria-hidden="true">
3531  <path stroke-linecap="round" stroke-linejoin="round" d="M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z"></path>
3532</svg>
3533                                <span class="ml-2 inline md:ml-0 md:hidden lg:ml-2 lg:inline">
3534                            Configure                        </span>
3535                            </a>
3536                        
3537                                    </div>
3538            
3539                    </div>
3540        </form>
3541                                    
3542<form method="post" action="https://www.outdoornativitysets.com/checkout/cart/add/uenc/%25uenc%25/product/15217/" class="item product product-item product_addtocart_form card card-interactive flex flex-col w-full  ">
3543    <input name="form_key" type="hidden" value="tDBO7PyoUTlaVbs9">    <input type="hidden" name="product" value="15217">
3544    <input type="hidden" name="product_sku" value="202632-30005">
3545        
3546                
3547                <a href="https://www.outdoornativitysets.com/two-piece-nativity-angel-figures" title="Nativity Angel 2 Piece Set" class="product photo product-item-photo block mx-auto mb-3 " tabindex="-1">
3548            <img class="hover:shadow-sm object-contain product-image-photo" x-data="" @update-gallery-15217.window="$root.src = $event.detail" src="https://www.outdoornativitysets.com/media/catalog/product/2/0/202632-30005_main.jpg?quality=80&amp;bg-color=255,255,255&amp;fit=bounds&amp;height=240&amp;width=240&amp;canvas=240:240" loading="lazy" width="240" height="240" alt="Nativity Angel 2 Piece Set" title="Nativity Angel 2 Piece Set">
3549        </a>
3550        <div class="product-info flex flex-col grow">
3551                        <div class="mt-2 mb-1 items-center h-14 overflow-hidden	justify-center text-primary font-normal text-base text-left leading-tight">
3552                <a class="product-item-link" href="https://www.outdoornativitysets.com/two-piece-nativity-angel-figures" :id="`slide-desc-15217-${$id('slider-id')}`">
3553                    Nativity Angel 2 Piece Set                </a>
3554            </div>
3555
3556                            <div class="py-1 ">
3557                    <div class="product-reviews-summary short flex">
3558            <span class="tt-review-avg">4.9</span>
3559        <div x-data="initRating152176ab689c67546b()" x-defer="intersect" @keyup.enter="scrollToRatings()" @click="scrollToRatings()" class="rating-summary flex items-center" :class="{'cursor-pointer' : reviewsSection}" :tabindex="reviewsSection ? '0' : '-1'" :aria-label="reviewsSection
3560            ? 'Nativity\u0020Angel\u00202\u0020Piece\u0020Set\u0020rating.\u00205\u0020out\u0020of\u00205\u0020stars.\u0020Click\u0020to\u0020go\u0020to\u0020reviews.'
3561            : 'Nativity\u0020Angel\u00202\u0020Piece\u0020Set\u0020rating.\u00205\u0020out\u0020of\u00205\u0020stars'
3562        " :role="reviewsSection ? 'button' : 'img'">
3563                                                <svg class="TTteaser__icon--full w-6 h-6" role="presentation" viewbox="-2 0 28 24">
3564                    <path d="M12 18.66l-7.44 4.35 1.98-8.16L0 9.36l8.62-.7L12 .99l3.38 7.67 8.62.7-6.54 5.49 1.98 8.16L12 18.66z" xmlns="http://www.w3.org/2000/svg"></path>
3565                </svg>
3566                                            <svg class="TTteaser__icon--full w-6 h-6" role="presentation" viewbox="-2 0 28 24">
3567                    <path d="M12 18.66l-7.44 4.35 1.98-8.16L0 9.36l8.62-.7L12 .99l3.38 7.67 8.62.7-6.54 5.49 1.98 8.16L12 18.66z" xmlns="http://www.w3.org/2000/svg"></path>
3568                </svg>
3569                                            <svg class="TTteaser__icon--full w-6 h-6" role="presentation" viewbox="-2 0 28 24">
3570                    <path d="M12 18.66l-7.44 4.35 1.98-8.16L0 9.36l8.62-.7L12 .99l3.38 7.67 8.62.7-6.54 5.49 1.98 8.16L12 18.66z" xmlns="http://www.w3.org/2000/svg"></path>
3571                </svg>
3572                                            <svg class="TTteaser__icon--full w-6 h-6" role="presentation" viewbox="-2 0 28 24">
3573                    <path d="M12 18.66l-7.44 4.35 1.98-8.16L0 9.36l8.62-.7L12 .99l3.38 7.67 8.62.7-6.54 5.49 1.98 8.16L12 18.66z" xmlns="http://www.w3.org/2000/svg"></path>
3574                </svg>
3575                                            <svg class="TTteaser__icon--full w-6 h-6" role="presentation" viewbox="-2 0 28 24">
3576                    <path d="M12 18.66l-7.44 4.35 1.98-8.16L0 9.36l8.62-.7L12 .99l3.38 7.67 8.62.7-6.54 5.49 1.98 8.16L12 18.66z" xmlns="http://www.w3.org/2000/svg"></path>
3577                </svg>
3578                                                                
3579            </div>
3580
3581            <a class="action view text-sm" href="https://www.outdoornativitysets.com/two-piece-nativity-angel-figures#reviews">(220)
3582        </a>
3583    </div>
3584
3585    
3585<script>
3586        'use strict';
3587
3588        function initRating152176ab689c67546b() {
3589            return {
3590                reviewsSection: document.getElementById('customer-review-list')
3591                    || document.getElementById('customer-reviews')
3592                    || document.getElementById('review-form'),
3593                scrollToRatings() {
3594                    let scrollTimeout = null
3595
3596                    if (!this.reviewsSection) {
3597                        return
3598                    }
3599
3600                    addEventListener('scroll', () => {
3601                        clearTimeout(scrollTimeout);
3602
3603                        scrollTimeout = setTimeout(() => {
3604                            if (this.reviewsSection) {
3605                                this.reviewsSection.focus()
3606                            }
3607                        }, 50);
3608                    }, { once: true });
3609
3610                    this.reviewsSection.scrollIntoView({behavior: 'smooth'})
3611                }
3612            }
3613        }
3614    </script>
3614
3615                </div>
3616            
3617                                        
3618            
3619            
3620                            <div class="pt-1 text-gray-900" x-data="initPriceBox()" x-defer="intersect" @update-prices-15217.window="updatePrice($event.detail);">
3621                    <div class="price-box price-final_price" data-role="priceBox" data-product-id="15217" data-price-box="product-id-15217">
3622    
3623
3624	<span class="price-container price-final_price tax weee">
3625	    	    <span id="product-price-15217" data-price-amount="99.99" data-price-type="finalPrice" class="price-wrapper ">
3626	        <span class="price">$99.99</span>	    </span>
3627	    	    	</span>
3628
3629
3630</div>                </div>
3631            
3632                            <div class="slider-item-info mt-auto pt-3 flex flex-wrap items-center gap-y-4 gap-x-2
3633                ">
3634                                                                        <button class="w-auto btn btn-primary justify-center text-sm mr-auto" title="Add to Cart Nativity Angel 2 Piece Set" aria-label="Add to Cart Nativity Angel 2 Piece Set" data-addto="cart">
3635                                <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke-width="2" stroke="currentColor" width="24" height="24" aria-hidden="true">
3636  <path stroke-linecap="round" stroke-linejoin="round" d="M3 3h2l.4 2M7 13h10l4-8H5.4M7 13L5.4 5M7 13l-2.293 2.293c-.63.63-.184 1.707.707 1.707H17m0 0a2 2 0 100 4 2 2 0 000-4zm-8 2a2 2 0 11-4 0 2 2 0 014 0z"></path>
3637</svg>
3638                                <span class="ml-2 inline md:ml-0 md:hidden lg:ml-2 lg:inline">
3639                            Add to Cart                        </span>
3640                            </button>
3641                        
3642                                    </div>
3643            
3644                    </div>
3645        </form>
3646                            </div>
3647                    </div>
3648    </div>
3649</div><div data-content-type="html" data-appearance="default" data-element="main" data-decoded="true"><!-- Best Sellers Header -->
3650<style>
3651  .block-products-list .product-info .py-1 { margin: 0 auto; }
3652
3653  #best-sellers-header {
3654    background-color: #ffffff;       /* white background */
3655    text-align: center;
3656    padding-top: 50px;             /* vertical spacing */
3657  }
3658
3659  #best-sellers-header h2 {
3660    font-family: 'Montserrat', sans-serif;
3661    font-size: 2.8rem;              /* large headline */
3662    font-weight: 800;
3663    color: #730402;                 /* maroon text */
3664    margin: 0;
3665    letter-spacing: 1px;
3666  }
3667
3668  @media (max-width: 767px) {
3669    #best-sellers-header {
3670      padding: 35px 15px;
3671    }
3672    #best-sellers-header h2 {
3673      font-size: 2rem;
3674    }
3675  }
3676</style>
3677
3678<section id="best-sellers-header" class="row print-visible">
3679  <h2>Best Sellers</h2>
3680</section>
3681
3682</div><div data-content-type="html" data-appearance="default" data-element="main" data-pb-style="S4JQ1VY" data-decoded="true"><!-- ONS Best Sellers (HTML-only, Mobile 2x2, Ratings before stars) -->
3683<link href="https://fonts.googleapis.com/css2?family=Montserrat:wght@400;600;800&display=swap" rel="stylesheet">
3684
3685<style>
3686  :root{
3687    --ons-red:#8B2C23;
3688    --ons-ink:#2B2B2B;
3689    --ons-muted:#EDEDED;
3690    --ons-star:#F4B400;
3691    --radius:12px;
3692  }
3693  .ons-best{font-family:Montserrat,system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif;color:var(--ons-ink);margin:40px 0}
3694  .ons-best h2{color:var(--ons-red);font-weight:800;text-align:center;margin:0 0 20px;font-size:34px;letter-spacing:.5px}
3695
3696  .ons-grid{display:grid;gap:20px;grid-template-columns:repeat(4,minmax(0,1fr))}
3697  .ons-card{background:#fff;border:1px solid var(--ons-muted);border-radius:var(--radius);overflow:hidden;display:flex;flex-direction:column}
3698  .ons-imgwrap{background:#fafafa}
3699  .ons-imgwrap img{display:block;width:100%;height:auto}
3700
3701  .ons-body{padding:14px 16px;display:flex;flex-direction:column;gap:8px;flex:1}
3702  .ons-title{font-weight:600;font-size:16px;line-height:1.3;margin:0}
3703  .ons-title a{color:var(--ons-ink);text-decoration:none}
3704
3705  .ons-reviews{display:flex;align-items:center;gap:8px;font-size:14px}
3706  .ons-rating{font-weight:700}
3707  .ons-stars{color:var(--ons-star);letter-spacing:1px}
3708  .ons-count a{color:#0A66C2;text-decoration:none}
3709
3710  .ons-price{font-weight:800;font-size:18px}
3711  .ons-btn{margin-top:auto;display:inline-flex;justify-content:center;align-items:center;padding:10px 14px;border-radius:10px;background:var(--ons-red);color:#fff;text-decoration:none;font-weight:700}
3712
3713  @media (max-width:767px){ .ons-grid{grid-template-columns:repeat(2,minmax(0,1fr))} .ons-best h2{font-size:28px} }
3714  @media (min-width:768px) and (max-width:1024px){ .ons-grid{grid-template-columns:repeat(3,minmax(0,1fr))} }
3715</style>
3716
3717<section class="ons-best" aria-labelledby="ons-best-sellers">
3718
3719  <div class="ons-grid">
3720
3721    <!-- 1) Holy Night Outdoor Nativity Set -->
3722    <article class="ons-card">
3723      <a class="ons-imgwrap" href="https://www.outdoornativitysets.com/holy-night-outdoor-nativity-set">
3724        <img alt="Holy Night Outdoor Nativity Set"
3725             src="https://www.outdoornativitysets.com/media/wysiwyg/outdoor-nativity-sets/page-content/home/holy-family-outdoor-nativity.jpg">
3726      </a>
3727      <div class="ons-body">
3728        <h3 class="ons-title">
3729          <a href="https://www.outdoornativitysets.com/holy-night-outdoor-nativity-set">Holy Night Outdoor Nativity Set</a>
3730        </h3>
3731
3732        <div class="ons-reviews" aria-label="Rating 4.9 out of 5 from 541 reviews">
3733          <span class="ons-rating">4.9</span>
3734          <span class="ons-stars" aria-hidden="true">★★★★★</span>
3735          <span class="ons-count"><a href="https://www.outdoornativitysets.com/holy-night-outdoor-nativity-set#reviews">(541)</a></span>
3736        </div>
3737
3738        <div class="ons-price">$199.99</div>
3739        <a class="ons-btn" href="https://www.outdoornativitysets.com/holy-night-outdoor-nativity-set">Shop Now</a>
3740      </div>
3741    </article>
3742
3743    <!-- 2) Holy Family Outdoor Nativity Set -->
3744    <article class="ons-card">
3745      <a class="ons-imgwrap" href="https://www.outdoornativitysets.com/holy-family-outdoor-nativity-set">
3746        <img alt="Holy Family Outdoor Nativity Set"
3747             src="https://www.outdoornativitysets.com/media/wysiwyg/outdoor-nativity-sets/page-content/home/holy-night-outdoor-nativity.jpg">
3748      </a>
3749      <div class="ons-body">
3750        <h3 class="ons-title">
3751          <a href="https://www.outdoornativitysets.com/holy-family-outdoor-nativity-set">Holy Family Outdoor Nativity Set</a>
3752        </h3>
3753
3754        <div class="ons-reviews" aria-label="Rating 4.8 out of 5 from 441 reviews">
3755          <span class="ons-rating">4.8</span>
3756          <span class="ons-stars" aria-hidden="true">★★★★★</span>
3757          <span class="ons-count"><a href="https://www.outdoornativitysets.com/holy-family-outdoor-nativity-set#reviews">(441)</a></span>
3758        </div>
3759
3760        <div class="ons-price">$134.99</div>
3761        <a class="ons-btn" href="https://www.outdoornativitysets.com/holy-family-outdoor-nativity-set">Shop Now</a>
3762      </div>
3763    </article>
3764
3765    <!-- 3) Two-Piece Nativity Angel Figures -->
3766    <article class="ons-card">
3767      <a class="ons-imgwrap" href="https://www.outdoornativitysets.com/two-piece-nativity-angel-figures">
3768        <img alt="Two-Piece Nativity Angel Figures"
3769             src="https://www.outdoornativitysets.com/media/wysiwyg/outdoor-nativity-sets/page-content/home/nativity-angel-2pc.jpg">
3770      </a>
3771      <div class="ons-body">
3772        <h3 class="ons-title">
3773          <a href="https://www.outdoornativitysets.com/two-piece-nativity-angel-figures">Nativity Angel 2 Piece Set</a>
3774        </h3>
3775
3776        <div class="ons-reviews" aria-label="Rating 4.9 out of 5 from 195 reviews">
3777          <span class="ons-rating">4.9</span>
3778          <span class="ons-stars" aria-hidden="true">★★★★★</span>
3779          <span class="ons-count"><a href="https://www.outdoornativitysets.com/two-piece-nativity-angel-figures#reviews">(195)</a></span>
3780        </div>
3781
3782        <div class="ons-price">$99.99</div>
3783        <a class="ons-btn" href="https://www.outdoornativitysets.com/two-piece-nativity-angel-figures">Shop Now</a>
3784      </div>
3785    </article>
3786
3787  </div>
3788</section>
3789</div><div data-content-type="html" data-appearance="default" data-element="main" data-decoded="true"><!-- ONS Best Sellers (HTML-only, Mobile 2x2, Ratings before stars) -->
3790<link href="https://fonts.googleapis.com/css2?family=Montserrat:wght@400;600;800&display=swap" rel="stylesheet">
3791
3792<style>
3793  :root{
3794    --ons-red:#8B2C23;
3795    --ons-ink:#2B2B2B;
3796    --ons-muted:#EDEDED;
3797    --ons-star:#F4B400;
3798    --radius:12px;
3799  }
3800  .ons-best{font-family:Montserrat,system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif;color:var(--ons-ink);margin:40px 0}
3801  .ons-best h2{color:var(--ons-red);font-weight:800;text-align:center;margin:0 0 20px;font-size:34px;letter-spacing:.5px}
3802
3803  /* UPDATED FOR 3 ITEMS ON DESKTOP */
3804  .ons-grid{
3805    display:grid;
3806    gap:20px;
3807    grid-template-columns:repeat(3,minmax(0,1fr));
3808    justify-content:center;
3809  }
3810
3811  .ons-card{background:#fff;border:1px solid var(--ons-muted);border-radius:var(--radius);overflow:hidden;display:flex;flex-direction:column}
3812  .ons-imgwrap{background:#fafafa}
3813  .ons-imgwrap img{display:block;width:100%;height:auto}
3814
3815  .ons-body{padding:14px 16px;display:flex;flex-direction:column;gap:8px;flex:1}
3816  .ons-title{font-weight:600;font-size:16px;line-height:1.3;margin:0}
3817  .ons-title a{color:var(--ons-ink);text-decoration:none}
3818
3819  .ons-reviews{display:flex;align-items:center;gap:8px;font-size:14px}
3820  .ons-rating{font-weight:700}
3821  .ons-stars{color:var(--ons-star);letter-spacing:1px}
3822  .ons-count a{color:#0A66C2;text-decoration:none}
3823
3824  .ons-price{font-weight:800;font-size:18px}
3825  .ons-btn{margin-top:auto;display:inline-flex;justify-content:center;align-items:center;padding:10px 14px;border-radius:10px;background:var(--ons-red);color:#fff;text-decoration:none;font-weight:700}
3826
3827  @media (max-width:767px){ 
3828    .ons-grid{grid-template-columns:repeat(2,minmax(0,1fr))} 
3829    .ons-best h2{font-size:28px} 
3830  }
3831
3832  @media (min-width:768px) and (max-width:1024px){ 
3833    .ons-grid{grid-template-columns:repeat(3,minmax(0,1fr))} 
3834  }
3835</style>
3836
3837<section class="ons-best" aria-labelledby="ons-best-sellers">
3838
3839  <div class="ons-grid">
3840
3841    <!-- 1) Holy Night Outdoor Nativity Set -->
3842    <article class="ons-card">
3843      <a class="ons-imgwrap" href="https://www.outdoornativitysets.com/holy-night-outdoor-nativity-set">
3844        <img alt="Holy Night Outdoor Nativity Set"
3845             src="https://www.outdoornativitysets.com/media/wysiwyg/outdoor-nativity-sets/page-content/home/holy-family-outdoor-nativity.jpg">
3846      </a>
3847      <div class="ons-body">
3848        <h3 class="ons-title">
3849          <a href="https://www.outdoornativitysets.com/holy-night-outdoor-nativity-set">Holy Night Outdoor Nativity Set</a>
3850        </h3>
3851
3852        <div class="ons-reviews" aria-label="Rating 4.9 out of 5 from 541 reviews">
3853          <span class="ons-rating">4.9</span>
3854          <span class="ons-stars" aria-hidden="true">★★★★★</span>
3855          <span class="ons-count"><a href="https://www.outdoornativitysets.com/holy-night-outdoor-nativity-set#reviews">(541)</a></span>
3856        </div>
3857
3858        <div class="ons-price">$199.99</div>
3859        <a class="ons-btn" href="https://www.outdoornativitysets.com/holy-night-outdoor-nativity-set">Shop Now</a>
3860      </div>
3861    </article>
3862
3863    <!-- 2) Holy Family Outdoor Nativity Set -->
3864    <article class="ons-card">
3865      <a class="ons-imgwrap" href="https://www.outdoornativitysets.com/holy-family-outdoor-nativity-set">
3866        <img alt="Holy Family Outdoor Nativity Set"
3867             src="https://www.outdoornativitysets.com/media/wysiwyg/outdoor-nativity-sets/page-content/home/holy-night-outdoor-nativity.jpg">
3868      </a>
3869      <div class="ons-body">
3870        <h3 class="ons-title">
3871          <a href="https://www.outdoornativitysets.com/holy-family-outdoor-nativity-set">Holy Family Outdoor Nativity Set</a>
3872        </h3>
3873
3874        <div class="ons-reviews" aria-label="Rating 4.8 out of 5 from 441 reviews">
3875          <span class="ons-rating">4.8</span>
3876          <span class="ons-stars" aria-hidden="true">★★★★★</span>
3877          <span class="ons-count"><a href="https://www.outdoornativitysets.com/holy-family-outdoor-nativity-set#reviews">(441)</a></span>
3878        </div>
3879
3880        <div class="ons-price">$134.99</div>
3881        <a class="ons-btn" href="https://www.outdoornativitysets.com/holy-family-outdoor-nativity-set">Shop Now</a>
3882      </div>
3883    </article>
3884
3885    <!-- 3) Two-Piece Nativity Angel Figures -->
3886    <article class="ons-card">
3887      <a class="ons-imgwrap" href="https://www.outdoornativitysets.com/two-piece-nativity-angel-figures">
3888        <img alt="Two-Piece Nativity Angel Figures"
3889             src="https://www.outdoornativitysets.com/media/wysiwyg/outdoor-nativity-sets/page-content/home/nativity-angel-2pc.jpg">
3890      </a>
3891      <div class="ons-body">
3892        <h3 class="ons-title">
3893          <a href="https://www.outdoornativitysets.com/two-piece-nativity-angel-figures">Nativity Angel 2 Piece Set</a>
3894        </h3>
3895
3896        <div class="ons-reviews" aria-label="Rating 4.9 out of 5 from 195 reviews">
3897          <span class="ons-rating">4.9</span>
3898          <span class="ons-stars" aria-hidden="true">★★★★★</span>
3899          <span class="ons-count"><a href="https://www.outdoornativitysets.com/two-piece-nativity-angel-figures#reviews">(195)</a></span>
3900        </div>
3901
3902        <div class="ons-price">$99.99</div>
3903        <a class="ons-btn" href="https://www.outdoornativitysets.com/two-piece-nativity-angel-figures">Shop Now</a>
3904      </div>
3905    </article>
3906
3907  </div>
3908</section>
3909</div></div></div><div data-content-type="row" data-appearance="contained" data-element="main"><div data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-background-lazy-load="" data-element="inner" data-pb-style="FA81E79"><div data-content-type="divider" data-appearance="default" data-element="main"><hr data-element="line" data-pb-style="CSA0QJ4"></div><div data-content-type="html" data-appearance="default" data-element="main" data-pb-style="Y53BV2S" data-decoded="true"><div class="col-sm-12 text-center">
3910  <div style="display: flex; justify-content: center; flex-wrap: wrap; gap: 40px;">
3911
3912    <div style="text-align: center;">
3913      <img src="https://www.outdoornativitysets.com/media/wysiwyg/outdoor-nativity-sets/page-content/home/shipping_icon.png" alt="Free, Fast Shipping">
3914      <div class="h4">Free &amp; Fast<br>Shipping</div>
3915    </div>
3916
3917    <div style="text-align: center;">
3918      <img src="https://www.outdoornativitysets.com/media/wysiwyg/outdoor-nativity-sets/page-content/home/america_icon.png" alt="Made In America">
3919      <div class="h4">Proudly made<br>in the USA</div>
3920    </div>
3921
3922    <div style="text-align: center;">
3923      <img src="https://www.outdoornativitysets.com/media/wysiwyg/outdoor-nativity-sets/page-content/home/weatherproof_icon.png" alt="Proven, Durable Material">
3924      <div class="h4">Strong, Proven<br>Material</div>
3925    </div>
3926
3927    <div style="text-align: center;">
3928      <img src="https://www.outdoornativitysets.com/media/wysiwyg/outdoor-nativity-sets/product-content/satisfaction-icon.png" alt="Satisfaction Guarantee">
3929      <div class="h4">100% Satisfaction<br>Guarantee</div>
3930    </div>
3931
3932  </div>
3933</div>
3934</div><div data-content-type="html" data-appearance="default" data-element="main" data-decoded="true"><!-- Desktop Visible Icon Area -->
3935
3936<div class="hidden-xs" style="display: flex; padding-bottom: 2rem; padding-top: 1rem; text-align: center; max-width:1200px;">
3937
3938
3939  <div class="contentPopupHandler" id="popupShipping" style="width:25%;">
3940    <div>
3941      <div><img src="https://www.outdoornativitysets.com/media/wysiwyg/outdoor-nativity-sets/product-content/shipping_icon.png" alt="Free Shipping" style="max-height:60px; margin: 0 auto;" ​/></div>
3942      <div style="line-height: 20px; padding-top: 5px;">Free & Fast Shipping <sup><i class="fa fa-plus-square-o"></i></sup></div>
3943    </div>
3944  </div>
3945
3946
3947  <div class="contentPopupHandler" id="popupAboutUs" style="width:25%;">
3948    <div>
3949      <div><img src="https://www.outdoornativitysets.com/media/wysiwyg/outdoor-nativity-sets/product-content/america_icon.png" alt="Made in the USA" style="max-height:60px; margin: 0 auto;" /></div>
3950       <div style="line-height: 20px; padding-left: 10px; padding-top: 5px;">Proudly made <br/> in the USA <sup><i class="fa fa-plus-square-o"></i></sup></div>
3951    </div>
3952  </div>
3953
3954
3955  <div class="contentPopupHandler" id="popupStrongMaterial" style="width:25%;">
3956    <div>
3957      <div><img src="https://www.outdoornativitysets.com/media/wysiwyg/outdoor-nativity-sets/product-content/durable_water_icon.png" alt="Strong Material" style="max-height:60px; margin: 0 auto;" ​/></div>
3958      <div style="line-height: 20px; padding-left: 10px; padding-top: 5px;">Strong, Proven Material <sup><i class="fa fa-plus-square-o"></i></sup></div>
3959    </div>
3960  </div>
3961
3962
3963  <div class="contentPopupHandler" id="popupSatisfactionGuarantee" style="width:25%;">
3964    <div>
3965      <div><img src="https://www.outdoornativitysets.com/media/wysiwyg/outdoor-nativity-sets/product-content/satisfaction-icon.png" alt="Satisfaction Guarantee" style="max-height:60px; margin: 0 auto;" /></div>
3966       <div style="line-height: 20px; padding-left: 10px; padding-top: 5px;">100% Satisfaction Guarantee <sup><i class="fa fa-plus-square-o"></i></sup></div>
3967    </div>
3968  </div>
3969  
3970  
3971</div>
3972
3973
3974
3975<!-- Desktop Popup Content -->
3976
3977
3978  <div id="popupShippingContent" title="Free Shipping" style="display:none;">
3979    <p><img src="https://www.outdoornativitysets.com/media/wysiwyg/outdoor-nativity-sets/misc/ship-pop-up-2021.jpg" alt="Free Shipping" /></p>
3980  </div>
3981  
3982  <div id="popupAboutUsContent" title="Made in the USA" style="display:none;">
3983    <div class="youtube-video-place embed-responsive" data-yt-url="https://www.youtube.com/embed/L3Hm2FDPs5g?showinfo=0&rel=0&autoplay=1&mute=0"><img src="https://www.outdoornativitysets.com/media/wysiwyg/outdoor-nativity-sets/product-content/aboutus-video-placeholder1.jpg" alt="" style="cursor: pointer;" async class="play-youtube-video"/></div>
3984  </div>
3985
3986  <div id="popupStrongMaterialContent" title="Strong Material" style="display:none;">
3987    <p><img src="https://www.outdoornativitysets.com/media/wysiwyg/outdoor-nativity-sets/product-content/Durable-Material.jpg" alt="Durable Material" /></p>
3988  </div>
3989
3990  <div id="popupSatisfactionGuaranteeContent" title="Satisfaction Guarantee" style="display:none;">
3991    <p><img src="https://www.outdoornativitysets.com/media/wysiwyg/outdoor-nativity-sets/product-content/Hapiness-Guarantee.jpg" alt="Happiness Guarantee" /></p>
3992  </div>
3993
3994
3995<!-- Mobile Visible Icon Area -->
3996
3997
3998
3999<div class="visible-xs" style="display: flex; padding-bottom: 2rem; padding-top: 1rem;">
4000  <div style="display: inline-block; width:49%;" class="showDiv" show="popupShippingInline">
4001    <div style="display:flex;">
4002      <div style="display: inline-block;"><img src="https://www.outdoornativitysets.com/media/wysiwyg/outdoor-nativity-sets/product-content/shipping_icon.png" alt="Free Shipping" style="float: left; max-height:60px;" ​/></div>
4003      <div style="display: inline-block; line-height: 20px; padding-left: 10px; padding-top: 10px;">Free Fast Shipping <sup><i class="fa fa-plus-square-o"></i></sup></div>
4004    </div>
4005  </div>
4006  
4007
4008  
4009  <div style="display: inline-block; width:49%;" class="showDiv" show="popupAboutUsInline">
4010    <div style="display:flex;">
4011      <div style="display: inline-block;"><img src="https://www.outdoornativitysets.com/media/wysiwyg/outdoor-nativity-sets/product-content/america_icon.png" alt="Made in the USA" style="float: left; max-height:60px;" /></div>
4012       <div style="display: inline-block; line-height: 20px; padding-left: 10px; ">Proudly made in the USA <sup><i class="fa fa-plus-square-o"></i></sup></div>
4013    </div>
4014  </div>
4015</div>
4016
4017
4018
4019<div class="visible-xs" style="display: flex; padding-bottom: 2rem;">
4020  <div style="display: inline-block; width:49%;" class="showDiv" show="popupStrongMaterialInline">
4021    <div style="display:flex;">
4022      <div style="display: inline-block;"><img src="https://www.outdoornativitysets.com/media/wysiwyg/outdoor-nativity-sets/product-content/durable_water_icon.png" alt="Strong Proven Material" style="float: left; max-height:60px;" ​/></div>
4023      <div style="display: inline-block; line-height: 20px; padding-left: 10px; ">Strong, Proven Material <sup><i class="fa fa-plus-square-o"></i></sup></div>
4024    </div>
4025  </div>
4026  
4027 
4028  
4029  <div style="display: inline-block; width:49%;" class="showDiv" show="popupSatisfactionGuaranteeInline">
4030    <div style="display:flex;">
4031      <div style="display: inline-block;"><img src="https://www.outdoornativitysets.com/media/wysiwyg/outdoor-nativity-sets/product-content/satisfaction-icon.png" alt="Satisfaction Guarantee" style="float: left; max-height:60px;" /></div>
4032       <div style="display: inline-block; line-height: 20px; padding-left: 10px;">Satisfaction Guarantee <sup><i class="fa fa-plus-square-o"></i></sup></div>
4033    </div>
4034  </div>
4035</div>
4036
4037
4038
4039  <!-- Mobile Popup Content -->
4040
4041
4042  <div id="popupShippingInline" title="Free Shipping" style="display:none;">
4043    <div><img src="https://www.outdoornativitysets.com/media/wysiwyg/outdoor-nativity-sets/misc/ship-pop-up-2021.jpg" alt="Free Shipping" /></div>
4044  </div>
4045  
4046  
4047  <div id="popupAboutUsInline" title="Made in the USA" style="display:none;">
4048    <div class="scalemedia"><div class="youtube-video-place embed-responsive" data-yt-url="https://www.youtube.com/embed/L3Hm2FDPs5g?showinfo=0&rel=0&autoplay=1&mute=0"><img src="https://www.outdoornativitysets.com/media/wysiwyg/outdoor-nativity-sets/product-content/aboutus-video-placeholder.jpg" alt="" style="cursor: pointer;" async class="play-youtube-video"/></div></div>
4049  </div>
4050
4051  <div id="popupStrongMaterialInline" title="Strong Material" style="display:none;">
4052    <div><img src="https://www.outdoornativitysets.com/media/wysiwyg/outdoor-nativity-sets/product-content/Durable-Material-Mobile.jpg" alt="Strong Material" /></div>
4053  </div>
4054  
4055    <div id="popupSatisfactionGuaranteeInline" title="Satisfaction Guarantee" style="display:none;">
4056    <div><img src="https://www.outdoornativitysets.com/media/wysiwyg/outdoor-nativity-sets/product-content/Hapiness-Guarantee-Mobile.jpg" alt="Hapiness Guarantee" /></div>
4057  </div>
4058</div><div data-content-type="divider" data-appearance="default" data-element="main"><hr data-element="line" data-pb-style="N5ENCQ6"></div></div></div><div data-content-type="html" data-appearance="default" data-element="main" data-pb-style="E9BPNCV" data-decoded="true"><style>
4059.breadcrumbs { display: none; }
4060.full-hero { margin-left: -50vw; margin-right: -50vw; left: 50%; max-width: 100vw; position: relative; right: 50%; width: 100%; }
4061
4062@media only screen and (max-width: 767px) {
4063  #cta .intro span { display: none; }
4064  #about-us p span { display: none; }
4065  #testimonial p { font-size: 1.4rem; }
4066  #video-hero { display: none; }
4067}
4068
4069#maincontent { padding: 0 !important; max-width: none !important; }
4070
4071.nav-sections { margin-bottom: 0 !important; }
4072
4073#home .h2 { font-weight: 600;  line-height: 1.3; font-size: 2.0rem; margin-top: 2rem; margin-bottom: 1rem; }
4074#home .h3 { font-weight: 600;  line-height: 1.1; font-size: 1.8rem; margin-top: 2rem; margin-bottom: 1rem; }
4075#home .h4 { line-height: 1.1; font-size: 1.4rem; font-weight: bold; }
4076#home .buttonlink a { padding: 12px 24px; background-color: #a32c28; color: #ffffff; font-size: 1.8rem;  }
4077
4078#cta { margin-bottom: 2rem; }
4079#cta .intro { font-size: 2rem; }
4080#cta .h2 { margin-top: .5rem; margin-bottom: .5rem; color: #343434; font-weight: 500; font-size: 2.3rem; }
4081#cta .h4 { font-weight: normal; font-size: 1.6rem;  }
4082#cta p { line-height: normal; }
4083#cta a { color: #a32c28;  }
4084#cta.row img { width: 80px; }
4085#cta .buttonlink { padding: 12px 24px; background-color: #a32c28; color: #ffffff; font-size: 2.2rem;  }
4086#cta .buttonlink a { color: #fff; background-color: transparent; padding: 0;  }
4087
4088#best-sellers { margin-bottom: 2rem; padding-bottom: 2rem; }
4089#best-sellers .title { color: #a32c28; text-align: center; margin: 2rem 0; }
4090#best-sellers span { color: #a32c28; }
4091#best-sellers a { }
4092#best-sellers img { border: solid #ddd 1px; }
4093
4094#figures { padding-bottom: 2rem; }
4095#figures span { color: #a32c28; }
4096#figures a {  }
4097#figures img { border: solid #ddd 1px; }
4098
4099#video-hero { display: none; visibility: hidden; font-size: 0; line-height: 0; margin-0; }
4100
4101#customer-gallery { margin-bottom: 2rem; padding-bottom: 2rem; }
4102#customer-gallery .title { text-align: center; margin: 2rem 0; }
4103#customer-gallery .subtitle { text-align: center; color: #a32c28; margin-top: -2rem; margin-bottom: 1rem; }
4104#customer-gallery .text-center div { margin-bottom: 15px; }
4105</style>
4106<div>
4107<div>
4108<div class="container-fluid home-container">
4109<div id="home-hero">
4110<div class="visible-xs" style="line-height: 0;"><a href="/nativity-sets"><img class="full-hero-disable" src="https://outdoornativitysets.s3.amazonaws.com/images/home-hero-mobile-22.jpg" alt=""></a></div>
4111<div class="hidden-xs"><a href="/nativity-sets"><img class="full-hero-disable" src="https://outdoornativitysets.s3.amazonaws.com/images/home-hero-desktop-22.jpg" alt=""></a></div>
4112</div>
4113<div id="cta" class="row print-visible">
4114<div class="page-main" style="margin-top: 0; padding-top: 0 !important;">
4115<div class="col-xs-12 text-center visible-xs" style="background-color: #f3f3f3; padding: 1rem 0;">
4116<div class="h2">DISPLAY THE TRUE<br>MEANING OF CHRISTMAS</div>
4117<div style="display: inline-block;">
4118<div class="buttonlink" style="margin: 1rem 0;"><a href="/nativity-sets/">Find Your Nativity Set</a></div>
4119</div>
4120</div>
4121<div class="col-sm-2 col-xs-6 text-center">
4122<div style="padding: 20px 0 20px 20px;"><img src="https://www.outdoornativitysets.com/media/wysiwyg/outdoor-nativity-sets/page-content/home/shipping_icon.png" alt="Free, Fast Shipping">
4123<div class="h4">Free &amp; Fast<br>Shipping</div>
4124</div>
4125</div>
4126<div class="col-sm-2 col-xs-6 text-center">
4127<div style="padding: 20px 20px 20px 0;"><img src="https://www.outdoornativitysets.com/media/wysiwyg/outdoor-nativity-sets/page-content/home/america_icon.png" alt="Made In America">
4128<div class="h4">Proudly made<br>in the USA</div>
4129</div>
4130</div>
4131<div class="col-sm-4 text-center hidden-xs">
4132<div style="margin-top: 3rem;">
4133<div class="buttonlink"><a href="/nativity-sets/">Find Your Nativity Set</a></div>
4134</div>
4135</div>
4136<div class="col-sm-2 col-xs-6 text-center">
4137<div style="padding: 20px 0 20px 20px;"><img src="https://outdoornativitysets.s3.amazonaws.com/images/durable_water_icon.png" alt="Proven, Durable Material">
4138<div class="h4">Strong, Proven<br>Material</div>
4139</div>
4140</div>
4141<div class="col-sm-2 col-xs-6 text-center">
4142<div style="padding: 20px 20px 20px 0;"><img src="https://www.outdoornativitysets.com/media/wysiwyg/outdoor-nativity-sets/product-content/satisfaction-icon.png" alt="Satisfaction Guarantee">
4143<div class="h4">100% Satisfaction<br>Guarantee</div>
4144</div>
4145</div>
4146</div>
4147</div>
4148<div id="best-sellers" class="row print-visible" style="background-color: #f3f3f3;">
4149<div class="page-main">
4150<div class="h2 title"><strong>Best Selling</strong> Nativity Sets</div>
4151<div class="col-sm-4 col-xs-12 text-center" style="margin-bottom: 2rem;">
4152<div><a href="/holy-night-outdoor-nativity-set"><img src="https://outdoornativitysets.s3.amazonaws.com/images/30001-HP.jpg" alt="Holy Night Nativity Set"></a></div>
4153<div class="h4"><a href="/holy-night-outdoor-nativity-set">Holy Night Nativity Set</a></div>
4154$199.99</div>
4155<div class="col-sm-4 col-xs-12 text-center" style="margin-bottom: 2rem;">
4156<div><a href="/joy-nativity-yard-sign"><img src="https://outdoornativitysets.s3.amazonaws.com/images/30040-HP.jpg" alt="Holy Family Nativity Set"></a></div>
4157<div class="h4"><a href="/joy-nativity-yard-sign">Joy Nativity Set</a></div>
4158$189.99</div>
4159<div class="col-sm-4 col-xs-12 text-center" style="margin-bottom: 2rem;">
4160<div><a href="/holy-family-outdoor-nativity-set"><img src="https://outdoornativitysets.s3.amazonaws.com/images/30050-HP.jpg" alt="Joy  Nativity Set"></a></div>
4161<div class="h4"><a href="/holy-family-outdoor-nativity-set">Holy Family Set</a></div>
4162$149.99</div>
4163<div class="col-xs-12 buttonlink" style="text-align: right; padding-top: 1rem;"><a href="/nativity-sets/">Shop All &gt;</a></div>
4164</div>
4165</div>
4166</div>
4167</div>
4168</div>
4169<style>
4170  .tt-c-comments-pin .tt-c-comments-pin__cta { display: none; }
4171  .tt-w-comments-pinboard-teaser__promo-cta { color: #fff !important; }
4172  .tt-w-comments-pinboard-teaser__promo-credit { display: none; }
4173
4174#tt-comments-pinboard-teaser-widget {
4175  padding: 0 30px;
4176  width: 100%;
4177  display: flex;
4178}
4179
4180.tin_pinboard {
4181  padding-bottom: 30px;
4182  off-border-top: 1px solid #ddd;
4183  margin: 0 auto;
4184  max-width: 1200px;
4185}
4186</style>
4187<div id="home">
4188<div class="container-fluid home-container">
4189<div class="tin_pinboard">
4190<div class="col-xs-12">
4191<div class="h2 title" style="text-align: center; margin: 2rem 0;"><strong>Trending</strong> Products</div>
4192</div>
4193<div id="tt-comments-pinboard-teaser-widget"></div>
4194</div>
4195<div id="testimonial" class="row hidden-xs">
4196<div class="col-sm-6 col-xs-12"><img src="https://www.outdoornativitysets.com/media/wysiwyg/outdoor-nativity-sets/page-content/home/testimonial.jpg" alt="Customer Scene" loading="lazy"></div>
4197<div class="col-sm-6 col-xs-12">
4198<div style="max-width: 600px; color: #a32c28; font-size: 125%;">
4199<p>It has been 8 years now, and they still look as good as when I got them. I look forward to putting this in the front yard every year. And when I’m done, I just stand back and take it all in, and it gives me such a sense of peace. And a reminder of what Christmas is all about." – <em style="color: #111;">LZ Dottie</em></p>
4200</div>
4201</div>
4202</div>
4203<div id="about-us" class="row hidden-xs" style="margin-bottom: 2rem;">
4204<div class="page-main">
4205<div class="col-sm-6 col-xs-12">
4206<div class="h2"><strong>About</strong> Us</div>
4207<p style="color: #a32c28;"><strong><em>Born during the recession, our Nativity Sets helped save jobs during a challenging economic time and continue to be a tremendous blessing by offsetting the seasonality of our primary business of marine manufacturing.</em></strong></p>
4208<p>Our parent company Teak Isle Mfg, a 35 year supplier to the marine industry, was faced with cutting its workforce during the holidays. The hard fact was that fewer people were buying boats and the holiday months were going to be extremely slow. While brainstorming ways to keep our employees working, we remembered years back cutting Nativity Sets for a local Christmas tree farm. We decided to revisit the design to make it extra-durable and easily disassemble for compact storage and shipping. We not only saved jobs that year, but also created jobs moving forward thanks to our loyal customers!</p>
4209<div class="buttonlink" style="text-align: right;"><a href="/about-us">Read More &gt;</a></div>
4210</div>
4211<div class="col-sm-6 hidden-xs"><img src="https://www.outdoornativitysets.com/media/wysiwyg/outdoor-nativity-sets/page-content/home/about-us.jpg" alt="Packing Nativities" loading="lazy"></div>
4212</div>
4213</div>
4214<div id="fullsets" class="row" style="background-color: #f3f3f3;">
4215<div class="hidden-xs"><img class="full-hero" src="https://www.outdoornativitysets.com/media/wysiwyg/outdoor-nativity-sets/page-content/home/figures-hero.jpg" alt="" loading="lazy"></div>
4216<div class="hidden-sm hidden-md hidden-lg"><img class="full-hero" src="https://www.outdoornativitysets.com/media/wysiwyg/outdoor-nativity-sets/page-content/home/figures-hero-mobile.jpg" alt="" loading="lazy"></div>
4217</div>
4218<div id="figures" class="row print-visible" style="background-color: #f3f3f3; text-align: center;">
4219<div class="page-main">
4220<div class="col-sm-4 col-xs-12" style="margin-bottom: 2rem;">
4221<div><a href="/two-piece-nativity-angel-figures"><img src="https://www.outdoornativitysets.com/media/wysiwyg/outdoor-nativity-sets/page-content/home/ons-angels.jpg" alt="Angels"></a></div>
4222<div class="h4"><a href="/two-piece-nativity-angel-figures">Angels</a></div>
4223$93.99</div>
4224<div class="col-sm-4 col-xs-12" style="margin-bottom: 2rem;">
4225<div><a href="/three-wise-men-nativity-figures"><img src="https://www.outdoornativitysets.com/media/wysiwyg/outdoor-nativity-sets/page-content/home/ons-wise-men.jpg" alt="Wise Men"></a></div>
4226<div class="h4"><a href="/three-wise-men-nativity-figures">Wise Men</a></div>
4227$119.99</div>
4228<div class="col-sm-4 col-xs-12" style="margin-bottom: 2rem;">
4229<div><a href="/nativity-shepherd-with-sheep"><img src="https://www.outdoornativitysets.com/media/wysiwyg/outdoor-nativity-sets/page-content/home/ons-shepherd.jpg" alt="Shepherd"></a></div>
4230<div class="h4"><a href="/nativity-shepherd-with-sheep">Shepherd</a></div>
4231$114.99</div>
4232<div class="col-xs-12 buttonlink" style="text-align: right; padding-top: 1rem;"><a href="/nativity-figures">Shop All &gt;</a></div>
4233</div>
4234</div>
4235<div id="customer-gallery" class="row print-visible" style="background-color: #f3f3f3;">
4236<div class="page-main-off">
4237<div class="h2 title"><strong>Customer</strong> Photos</div>
4238<div class="col-sm-4 col-xs-6 text-center">
4239<div><a class="imagePopupHandler" href="https://www.outdoornativitysets.com/media/wysiwyg/outdoor-nativity-sets/customer-gallery/nativity-gallery-1_zm.jpg"><img class="imagebox" src="https://www.outdoornativitysets.com/media/wysiwyg/outdoor-nativity-sets/customer-gallery/nativity-gallery-1_th.jpg" alt="Holy Family OutdoorNativitySet" loading="lazy"></a></div>
4240</div>
4241<div class="col-sm-4 col-xs-6 text-center">
4242<div><a class="imagePopupHandler" href="https://www.outdoornativitysets.com/media/wysiwyg/outdoor-nativity-sets/customer-gallery/nativity-gallery-2_zm.jpg"><img class="imagebox" src="https://www.outdoornativitysets.com/media/wysiwyg/outdoor-nativity-sets/customer-gallery/nativity-gallery-2_th.jpg" alt="Holy Night OutdoorNativitySet" loading="lazy"></a></div>
4243</div>
4244<div class="col-sm-4 col-xs-6 text-center">
4245<div><a class="imagePopupHandler" href="https://www.outdoornativitysets.com/media/wysiwyg/outdoor-nativity-sets/customer-gallery/nativity-gallery-3_zm.
4245jpg"><img class="imagebox" src="https://www.outdoornativitysets.com/media/wysiwyg/outdoor-nativity-sets/customer-gallery/nativity-gallery-3_th.jpg" alt="Holy Family OutdoorNativitySet in snow" loading="lazy"></a></div>
4246</div>
4247<div class="col-sm-4 col-xs-6 text-center">
4248<div><a class="imagePopupHandler" href="https://www.outdoornativitysets.com/media/wysiwyg/outdoor-nativity-sets/customer-gallery/nativity-gallery-4_zm.jpg"><img class="imagebox" src="https://www.outdoornativitysets.com/media/wysiwyg/outdoor-nativity-sets/customer-gallery/nativity-gallery-4_th.jpg" alt="Complete Holy Family OutdoorNativitySet" loading="lazy"></a></div>
4249</div>
4250<div class="col-sm-4 col-xs-6 text-center">
4251<div><a class="imagePopupHandler" href="https://www.outdoornativitysets.com/media/wysiwyg/outdoor-nativity-sets/customer-gallery/nativity-gallery-5_zm.jpg"><img class="imagebox" src="https://www.outdoornativitysets.com/media/wysiwyg/outdoor-nativity-sets/customer-gallery/nativity-gallery-5_th.jpg" alt="Holy Family OutdoorNativitySet with Angels" loading="lazy"></a></div>
4252</div>
4253<div class="col-sm-4 col-xs-6 text-center">
4254<div><a class="imagePopupHandler" href="https://www.outdoornativitysets.com/media/wysiwyg/outdoor-nativity-sets/customer-gallery/nativity-gallery-6_zm.jpg"><img class="imagebox" src="https://www.outdoornativitysets.com/media/wysiwyg/outdoor-nativity-sets/customer-gallery/nativity-gallery-6_th.jpg" alt="Joy OutdoorNativitySet" loading="lazy"></a></div>
4255</div>
4256</div>
4257</div>
4258</div>
4259</div></div><div data-content-type="html" data-appearance="default" data-element="main" data-decoded="true"><!-- ======================= -->
4260<!-- Testimonial (polished)  -->
4261<!-- ======================= -->
4262<style>
4263  /* Shared utilities for these sections */
4264  .ons-section-spacing { margin: 60px 0; }
4265  .ons-img { width:100%; height:auto; display:block; border-radius:4px; }
4266  .imagebox { margin: 0 auto; }
4267
4268  /* Testimonial */
4269  #testimonial.ons-row {
4270    display:flex; align-items:center; flex-wrap:wrap;
4271  }
4272  #testimonial .quote-wrap{
4273    max-width:560px; padding:24px; color:#7a1f1b; line-height:1.7;
4274  }
4275  #testimonial .quote{
4276    font-size:1.45rem; margin:0;
4277  }
4278  #testimonial .signature{
4279    margin-top:.6rem; color:#111; font-style:italic; text-align:right;
4280  }
4281
4282  /* About Us */
4283  #about-us.ons-row {
4284    display:flex; align-items:center; flex-wrap:wrap;
4285  }
4286  #about-us .about-copy{
4287    max-width:640px; margin:0 auto; /* centers copy block against image */
4288  }
4289  #about-us .about-intro{
4290    color:#a32c28; font-weight:700; font-style:italic;
4291  }
4292  #about-us .about-btn{ text-align:right; }
4293
4294  /* Responsive tweaks */
4295  @media (max-width: 991px){
4296    #testimonial .quote{ font-size:1.25rem; }
4297    #testimonial .quote-wrap{ padding:16px; text-align:center; }
4298    #testimonial .signature{ text-align:center; }
4299
4300    #about-us .about-copy{ max-width:720px; text-align:center; }
4301    #about-us .about-btn{ text-align:center; }
4302  }
4303  @media (max-width: 575px){
4304    #testimonial .quote{ font-size:1.15rem; }
4305  }
4306</style>
4307
4308<!-- Testimonial -->
4309<div id="testimonial" class="row hidden-xs ons-row ons-section-spacing">
4310  <!-- Left: Image -->
4311  <div class="col-sm-6 col-xs-12">
4312    <img src="https://www.outdoornativitysets.com/media/wysiwyg/outdoor-nativity-sets/page-content/home/testimonial.jpg"
4313         alt="Customer Scene" loading="lazy" class="ons-img">
4314  </div>
4315
4316  <!-- Right: Quote (centered vs image) -->
4317  <div class="col-sm-6 col-xs-12" style="display:flex; align-items:center; justify-content:center;">
4318    <div class="quote-wrap">
4319      <p class="quote">
4320        “It has been 8 years now, and they still look as good as when I got them. I look forward to
4321        putting this in the front yard every year. And when I’m done, I just stand back and take it all in,
4322        and it gives me such a sense of peace. And a reminder of what Christmas is all about.”
4323      </p>
4324      <p class="signature">– LZ Dottie</p>
4325    </div>
4326  </div>
4327</div>
4328
4329<!-- About Us -->
4330<div id="about-us" class="row hidden-xs ons-row" style="margin-bottom: 2rem;">
4331  <div class="page-main" style="width:100%;">
4332    <div id="about-us" class="ons-row">
4333      <!-- Left: Copy (centered against image) -->
4334      <div class="col-sm-6 col-xs-12" style="display:flex; align-items:center;">
4335        <div class="about-copy">
4336          <div class="h2" style="margin-bottom:.5rem;"><strong>About</strong> Us</div>
4337          <p class="about-intro">
4338            Born during the recession, our Nativity Sets helped save jobs during a challenging
4339            economic time and continue to be a tremendous blessing by offsetting the
4340            seasonality of our primary business of marine manufacturing.
4341          </p>
4342          <p>
4343            Our parent company Teak Isle Mfg, a 35 year supplier to the marine industry, was faced
4344            with cutting its workforce during the holidays. The hard fact was that fewer people were
4345            buying boats and the holiday months were going to be extremely slow. While brainstorming
4346            ways to keep our employees working, we remembered years back cutting Nativity Sets for a
4347            local Christmas tree farm. We decided to revisit the design to make it extra-durable and
4348            easily disassemble for compact storage and shipping. We not only saved jobs that year,
4349            but also created jobs moving forward thanks to our loyal customers!
4350          </p>
4351          <div class="about-btn"><a href="/about-us">Read More &gt;</a></div>
4352        </div>
4353      </div>
4354
4355      <!-- Right: Image -->
4356      <div class="col-sm-6 hidden-xs">
4357        <img src="https://www.outdoornativitysets.com/media/wysiwyg/outdoor-nativity-sets/page-content/home/about-us.jpg"
4358             alt="Packing Nativities" loading="lazy" class="ons-img">
4359      </div>
4360    </div>
4361  </div>
4362</div>
4363
4364<!-- Customer Photos (unchanged) -->
4365<div id="customer-gallery" class="row print-visible" style="background-color: #f3f3f3;">
4366  <div class="h2 title" style="font-size: 2.8rem; font-weight: 800;color: #730402; margin: 0; letter-spacing: 1px;"><strong>Customer</strong> Photos</div>
4367  <div class="col-sm-4 col-xs-6 text-center">
4368    <div><a class="imagePopupHandler" href="https://www.outdoornativitysets.com/media/wysiwyg/outdoor-nativity-sets/customer-gallery/nativity-gallery-1_zm.jpg"><img class="imagebox" src="https://www.outdoornativitysets.com/media/wysiwyg/outdoor-nativity-sets/customer-gallery/nativity-gallery-1_th.jpg" alt="Holy Family OutdoorNativitySet" loading="lazy"></a></div>
4369  </div>
4370  <div class="col-sm-4 col-xs-6 text-center">
4371    <div><a class="imagePopupHandler" href="https://www.outdoornativitysets.com/media/wysiwyg/outdoor-nativity-sets/customer-gallery/nativity-gallery-2_zm.jpg"><img class="imagebox" src="https://www.outdoornativitysets.com/media/wysiwyg/outdoor-nativity-sets/customer-gallery/nativity-gallery-2_th.jpg" alt="Holy Night OutdoorNativitySet" loading="lazy"></a></div>
4372  </div>
4373  <div class="col-sm-4 col-xs-6 text-center">
4374    <div><a class="imagePopupHandler" href="https://www.outdoornativitysets.com/media/wysiwyg/outdoor-nativity-sets/customer-gallery/nativity-gallery-3_zm.
4374jpg"><img class="imagebox" src="https://www.outdoornativitysets.com/media/wysiwyg/outdoor-nativity-sets/customer-gallery/nativity-gallery-3_th.jpg" alt="Holy Family OutdoorNativitySet in snow" loading="lazy"></a></div>
4375  </div>
4376  <div class="col-sm-4 col-xs-6 text-center">
4377    <div><a class="imagePopupHandler" href="https://www.outdoornativitysets.com/media/wysiwyg/outdoor-nativity-sets/customer-gallery/Holy_Family_with_Angels1.jpg"><img class="imagebox" src="https://www.outdoornativitysets.com/media/wysiwyg/outdoor-nativity-sets/customer-gallery/Holy_Family_with_Angels_mb.jpg" alt="Complete Holy Family OutdoorNativitySet" loading="lazy"></a></div>
4378  </div>
4379  <div class="col-sm-4 col-xs-6 text-center">
4380    <div><a class="imagePopupHandler" href="https://www.outdoornativitysets.com/media/wysiwyg/outdoor-nativity-sets/customer-gallery/nativity-gallery-5_zm.jpg"><img class="imagebox" src="https://www.outdoornativitysets.com/media/wysiwyg/outdoor-nativity-sets/customer-gallery/nativity-gallery-5_th.jpg" alt="Holy Family OutdoorNativitySet with Angels" loading="lazy"></a></div>
4381  </div>
4382  <div class="col-sm-4 col-xs-6 text-center">
4383    <div><a class="imagePopupHandler" href="https://www.outdoornativitysets.com/media/wysiwyg/outdoor-nativity-sets/customer-gallery/Brenda_Peeler.jpg"><img class="imagebox" src="https://www.outdoornativitysets.com/media/wysiwyg/outdoor-nativity-sets/customer-gallery/Brenda_Peeler_mb.jpg" alt="Joy OutdoorNativitySet" loading="lazy"></a></div>
4384  </div>
4385</div>
4386</div><div data-content-type="html" data-appearance="default" data-element="main" data-decoded="true"><!-- Container Bottom -->
4387  </div>
4388</div>
4389</div><style type="text/css">.background-image-6ab6e354b9458 {background-image: url(https://www.outdoornativitysets.com/media/wysiwyg/Outdoor_Nativity_Hero_-_Desktop_1.jpg);}@media only screen and (max-width: 768px) and (min-width: 640px) {.background-image-6ab6e354b9458 {background-image: url(https://www.outdoornativitysets.com/media/wysiwyg/Outdoor_Nativity_Hero_-_Mobile_1.jpg);}}@media only screen and (max-width: 640px) {.background-image-6ab6e354b9458 {background-image: url(https://www.outdoornativitysets.com/media/wysiwyg/Outdoor_Nativity_Hero_-_Mobile_1.jpg);}}</style></div></div>
4389<script>
4390    function initFooter () {
4391        return {
4392            cart: {},
4393            isCartOpen: false,
4394            getData(data) {
4395                if (data.cart) { this.cart = data.cart }
4396            },
4397            isCartEmpty() {
4398                return !this.cart.summary_count
4399            },
4400            toggleCart(event) {
4401                if (event.detail && event.detail.isOpen !== undefined) {
4402                    this.isCartOpen = event.detail.isOpen
4403                    if (!this.isCartOpen && this.$refs && this.$refs.cartButton) {
4404                        this.$refs.cartButton.focus()
4405                    }
4406                } else {
4407                                        this.isCartOpen = true
4408                }
4409            }
4410        }
4411    }
4412</script>
4412
4413<div class="sticky-footer fixed bottom-0 left-0 right-0 bg-new-blue md:hidden z-9 flex items-center"
4414     x-data="initFooter()"
4415     @private-content-loaded.window="getData(event.detail.data)"
4416>
4417    <a class="telephone block w-1/3 p-4 float-left text-left pl-8" href="tel://8666337961">
4418        <span class="text-[0] block">Call</span>
4419        <div class="phone-inner text-white">
4420            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" width="30" height="30" aria-hidden="true">
4421  <path d="M2 3a1 1 0 011-1h2.153a1 1 0 01.986.836l.74 4.435a1 1 0 01-.54 1.06l-1.548.773a11.037 11.037 0 006.105 6.105l.774-1.548a1 1 0 011.059-.54l4.435.74a1 1 0 01.836.986V17a1 1 0 01-1 1h-2C7.82 18 2 12.18 2 5V3z"/>
4422</svg>
4423        </div>
4424    </a>
4425    <a class="minicart action showcart block float-left w-1/3 p-4 text-center"
4426       href="https://www.outdoornativitysets.com/checkout/cart/"
4427       x-ref="cartButton"
4428       @click.prevent.stop="() => {
4429                        $dispatch('toggle-cart', { isOpen: !isCartOpen })
4430                    }"
4431       @toggle-cart.window="toggleCart($event)"
4432       :aria-expanded="isCartOpen"
4433       aria-haspopup="dialog"
4434    >
4435        <div class="minicart-inner text-white flex justify-center items-center text-2.5xl">
4436            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" width="32" height="32" aria-hidden="true">
4437  <path d="M3 1a1 1 0 000 2h1.22l.305 1.222a.997.997 0 00.01.042l1.358 5.43-.893.892C3.74 11.846 4.632 14 6.414 14H15a1 1 0 000-2H6.414l1-1H14a1 1 0 00.894-.553l3-6A1 1 0 0017 3H6.28l-.31-1.243A1 1 0 005 1H3zM16 16.5a1.5 1.5 0 11-3 0 1.5 1.5 0 013 0zM6.5 18a1.5 1.5 0 100-3 1.5 1.5 0 000 3z"/>
4438</svg>
4439            <span class="text hidden">My Cart</span>
4440            <span class="counter qty">
4441            <span>(</span>
4442            <span class="counter-number"
4443                  x-text="isCartEmpty() ? 0 : cart.summary_count"
4444            ></span>
4445            <span>)</span>
4446        </span>
4447        </div>
4448    </a>
4449    <a href="#" class="openZendeskHelpButton help block float-left w-1/3 p-4 text-right pr-8">
4450        <span class="text-[0] block">Help</span>
4451        <div class="help-inner text-white float-right">
4452            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" width="36" height="36" aria-hidden="true">
4453  <path fill-rule="evenodd" d="M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-3a1 1 0 00-.867.5 1 1 0 11-1.731-1A3 3 0 0113 8a3.001 3.001 0 01-2 2.83V11a1 1 0 11-2 0v-1a1 1 0 011-1 1 1 0 100-2zm0 8a1 1 0 100-2 1 1 0 000 2z" clip-rule="evenodd"/>
4454</svg>
4455        </div>
4456    </a>
4457
4458
4459    
4459<script type="text/javascript">
4460        document.addEventListener('DOMContentLoaded', function() {
4461            // lifts up the regular page footer the height of the sticky footer so all footer content is visible.
4462            var stickyFooterHeight = document.querySelector('.sticky-footer').clientHeight ;
4463
4464            document.querySelector('.page-wrapper').style['margin-bottom'] = stickyFooterHeight + 'px';
4465        });
4466    </script>
4466
4467</div>
4468</main><footer class="page-footer"><div class="footer content">    <!-- Block: footer_content -->
4469<style>
4470.page-footer {
4471    padding-bottom: 0 !important;
4472    background: #111;
4473}
4474.page-footer .copyright { background-color: #111; }
4475.page-footer .footer-row a {
4476    color: #fff;
4477}
4478.page-layout-checkout .footer-lite { display: none; }
4479
4480.contactfooter_row {
4481  display: flex;
4482  padding-top: 30px;
4483}
4484.contactfooter_column {
4485    flex: 50%;
4486    padding: 3%;
4487    border-radius: 8px;
4488    min-height: 300px;
4489    margin: 3% 1.5%;
4490}
4491.contactfooter_column h2 {
4492    margin-top: 0;
4493    font-size: 23px;
4494    margin-bottom: 6px !important;
4495}
4496.contactfooter_column p span {
4497    font-size: 13px;
4498}
4499.page-footer .block.newsletter .content p {
4500    color: white;
4501}
4502#Footer_email_signup button#btnsubmit {
4503    background-color: white;
4504    color: #a32c28;
4505    height: 32px;
4506}
4507.page-footer .block.newsletter input[type="email"] {
4508    border: 1px solid #fff;
4509    color: #a32c28;
4510    border-radius: 4px;
4511    background: white;
4512}
4513.page-footer .fa-pinterest,
4514.page-footer .fa-facebook  {
4515    color: #fff;
4516}
4517.page-footer { padding-bottom: 0 !important; }
4518.page-footer .footer-links>div { width: 33%; }
4519.footer.content { border-top: 0; padding-top: 0; }
4520.footer.content .h3 { color: #fff; border-bottom: 1px solid #fff; padding-bottom: .5rem; font-weight: 600; line-height: 1.1; font-size: 1.8rem; margin-bottom: 1rem; display: block; }
4521.page-footer .footer.content .social-links { clear: both; }
4522
4523@media (max-width: 768px), print {
4524  .footer.content .h3 { margin-top: 2rem; }
4525  .page-footer .footer-links>div { padding: 0; }
4526}
4527</style>
4528
4529<div class="footer-lite hidden-xs">
4530<div class="contactfooter_row">
4531  <div class="contactfooter_column" style="background-color:#fff;">
4532    <h2>Send us a Message</h2>
4533    <p>After hours or prefer to schedule a call? No problem.
4534Send us a message and we’ll jump right on it.</p>
4535<iframe class="contactForm" src="" data-srcuri="https://contact.outdoornativitysets.com/?FormKey=ons&type=zdonly" title="OutdoorNativitySets Contact Form" width="100%" height="420px" frameborder="0"></iframe>
4536  </div>
4537  <div class="contactfooter_column" style="background-color: #999; background-image: url('https://www.outdoornativitysets.com/media//wysiwyg/outdoor-nativity-sets/page-content/contact/footer_contact_bg_ons.jpg'); background-position: center center;background-size: cover;background-blend-mode: multiply;">
4538    <h2 style="color: white;">How can we help?</h2>
4539    <p style="color: white;line-height: 24px;">Let us help bring your family the peace and joy that comes with the Christmas season.<br>
4540<a style="font-size: 17px;color: white;margin-top: 15px;font-weight: bold;display: block;" href="tel:+1-855-553-4946">(855)-553-4946</a>
4541<span><a href="https://www.outdoornativitysets.com/contact-us" target="_blank" rel="noopener">
4542  <u>See our holiday hours</u>
4543</a>
4544</span></p>
4545  </div>
4546</div>
4547</div>
4548
4549<div class="footer-lite">
4550  
4551</div>
4552<div class="footer-links footer-lite">
4553  <div id="footer-row-1" class="footer-row">
4554<div class="h3">Account</div>
4555<div class="col-sm-12 col-xs-6 no-pad"><a href="/customer/account/create">REGISTER</a></div>
4556<div class="col-sm-12 col-xs-6 no-pad"><a href="/customer/account/login">LOGIN</a></div>
4557<div class="col-sm-12 col-xs-6 no-pad"><a href="/sales/order/history">ORDER HISTORY</a></div>
4558</div><div id="footer-row-2" class="footer-row">
4559<div class="h3">Company</div>
4560<div class="col-sm-12 col-xs-6 no-pad"><a href="/about-us">ABOUT US</a></div>
4561<div class="col-sm-12 col-xs-6 no-pad"><a href="/testimonials">TESTIMONIALS</a></div>
4562<div class="col-sm-12 col-xs-6 no-pad"><a href="/contact-us">CONTACT US</a></div>
4563<div class="col-sm-12 col-xs-6 no-pad"><a id="accessibilityWidget" tabindex="0" onclick="javascript:void(0);" style="cursor:pointer;">ACCESSIBILITY MENU</a></div>
4564<div class="col-sm-12 col-xs-6 no-pad"><a href="#" onclick="Osano.cm.showDrawer('osano-cm-dom-info-dialog-open')">COOKIE PREFERENCES</a></div>
4565</div><div id="footer-row-3" class="footer-row">
4566<div class="h3">Services</div>
4567<div class="col-sm-12 col-xs-6 no-pad"><a href="/shipping-policy">SHIPPING POLICY</a></div>
4568<div class="col-sm-12 col-xs-6 no-pad"><a href="/return-policy">RETURN POLICY</a></div>
4569<div class="col-sm-12 col-xs-6 no-pad"><a href="/privacy-policy">PRIVACY POLICY</a></div>
4570<div class="col-sm-12 col-xs-6 no-pad"><a href="/terms-of-use">TERMS OF USE</a></div>
4571</div>
4572</div>
4573<style>
4574#utility-navigation .social-links { display: none; }
4575.footer.content .free-shipping-nav { display: none; }
4576.page-footer .social-links { text-align: center; }
4577.page-footer .social-links .top-social { display: inline-block; margin: 0 10px; }
4578</style>
4579<div class="free-shipping-nav">
4580  <div class="hidden-sm" style="font-weight: normal; padding: 0px 15px 0px 5px; line-height: 42px;"><I class="fa fa-truck" style="color:#333;"></I> <a href="/shipping-policy">Free Shipping</a> on orders over $150!</div>
4581  <div class="visible-sm" style="font-weight: normal; padding: 0px 5px 0px 2px; font-size: 10px; line-height: 42px;"><I class="fa fa-truck" style="color:#333;"></I> <a href="/shipping-policy">Free Shipping</a> on orders over $150!</div>
4582</div>
4583
4584<div class="social-links">
4585<div class="social-nav"> 
4586
4587		
4588	<div class="f-right top-social"><a href="https://www.facebook.com/OutdoorNativitySets" target="_blank"><span class="fa fa-facebook"> </span></a></div>  	
4589	
4590	<div class="f-right top-social"><a href="https://www.pinterest.com/OutdoorNativity" target="_blank"><span class="fa fa-pinterest"> </span></a></div>  
4591	
4592
4593</div>
4594</div>
4595
4596<div style="display: block; clear: both; padding-top: 2rem;">
4597<div style="text-align: center; color:white;">Display the <i>True Meaning of Christmas</i></div>
4598<div style="text-align: center;"><img src="https://www.outdoornativitysets.com/media/wysiwyg/outdoor-nativity-sets/icons/made-in-the-usa-icon-white.png" alt="Made in the USA" style="max-width: 220px; margin-bottom: 25px; display:inline-block;" loading="lazy"/></div>
4599</div>            <small class="copyright text-sm text-gray-800 sm:ml-6 sm:mt-0 mt-4">
4600    <span>Copyright © 2026 OutdoorNativitySets. All rights reserved.</span>
4601</small>
4602</div></footer>
4603    
4603<script async type="text/javascript" src="https://dguqe.outdoornativitysets.com/load"></script>
4603
4604    
4604<script>
4605        /**
4606         * **********
4607         * **********
4608         * Always duplicate edits made in app/code/Kadro/BlotoutEdgetag/view/frontend/web/js/
4609         * with the applicable files in   app/design/frontend/Kadro/boat_outfitters_hyva/Kadro_BlotoutEdgetag/templates
4610         * (The Boat Outfitters Hyva theme files are there)
4611         * **********
4612         * **********
4613         */
4614
4615        const edgeUrl = "https://dguqe.outdoornativitysets.com";
4616        const checkoutUrl = "https://www.outdoornativitysets.com/checkout";
4617        const truIdCookieUrl = "https://www.outdoornativitysets.com/blotoutedgetag/index/cookie";
4618        const footerEmailButton = document.querySelector('form#Footer_email_signup button#btnsubmit');
4619        let cart = null;
4620
4621        /**
4622         * sends a POST request to the server, which sets the tru id cookie
4623         */
4624        function requestTruIdCookie() {
4625            fetch(
4626                truIdCookieUrl,
4627                {
4628                    method: 'POST',
4629                    headers: {
4630                        'X-Requested-With': 'XMLHttpRequest',
4631                    }
4632                }
4633            ).then(response => {
4634                if (!response.ok) {
4635                    console.error("[Blotout] An error occurred when setting truid cookie.");
4636                }
4637            }).catch(err => console.error('[Blotout] TruID cookie request failed:', err));
4638        }
4639
4640        /**
4641         * set up a handler on click of the footer newsletter email form
4642         */
4643        function initFooterEmail() {
4644            if (!footerEmailButton) {
4645                return;
4646            }
4647
4648            footerEmailButton.addEventListener('click', function() {
4649                const userEmailInput = document.querySelector('form#Footer_email_signup input#Footer_id_email');
4650                const userEmail = userEmailInput ? userEmailInput.value : '';
4651                if (userEmail !== '') {
4652                    edgetag('user', 'email', userEmail);
4653                }
4654            });
4655        }
4656
4657        /**
4658         * set up a handler to listen for when the Klaviyo HTTP request is made
4659         */
4660        function initKlaviyoEmail() {
4661            const originalOpen = XMLHttpRequest.prototype.open;
4662            const originalSend = XMLHttpRequest.prototype.send;
4663
4664            XMLHttpRequest.prototype.open = function(method, url, async, user, password) {
4665                this._method = method;
4666                this._url = url;
4667                return originalOpen.call(this, method, url, async, user, password);
4668            };
4669
4670            XMLHttpRequest.prototype.send = function(body) {
4671                const url = this._url || '';
4672                console.log(`[Blotout] [KlaviyoHook] XMLHttpRequest sent to URL: ${url}`);
4673                // Only continue if this is a Klaviyo Subscriptions request
4674                if (this._method === 'POST' && url.includes('klaviyo.com/client/subscriptions/')) {
4675                    console.log(`[Blotout] [KlaviyoHook] This is a Klaviyo request`);
4676                    if (typeof body === 'string') {
4677                        console.log(`[Blotout] [KlaviyoHook] Format is approved`);
4678                        try {
4679                            const json = JSON.parse(body);
4680                            const email = json?.data?.attributes?.profile?.data?.attributes?.email;
4681                            console.log(`[Blotout] [KlaviyoHook] email: ${email}`);
4682                            if (email && !klaviyoEdgetagEmailSent) {
4683                                edgetag('user', 'email', email);
4684                                edgetag('tag', 'Lead');
4685                                klaviyoEdgetagEmailSent = true;
4686                                console.log(`[Blotout] [KlaviyoHook] tagged email: ${email}`);
4687                            }
4688                        } catch (err) {
4689                            console.warn('[Blotout] [KlaviyoHook] couldn\'t parse body, skipping tag', err);
4690                        }
4691                    }
4692                }
4693
4694                try {
4695                    return originalSend.call(this, body);
4696                } catch (err) {
4697                    console.error('[Blotout] [KlaviyoHook] Error sending data to blotout:', err);
4698                }
4699            };
4700        }
4701
4702        let klaviyoEdgetagEmailSent = false;
4703
4704        function escapeCategoryString(category) {
4705            return category.trim().replace(/[^a-zA-Z0-9 ]/g, '');
4706        }
4707
4708        function buildProductCategoryData() {
4709            // Fire ViewContent tag to send product info to Edgetag
4710            const productCategoryArray = document.querySelectorAll('nav.breadcrumbs ol.items li');
4711            let transformedProductCategoryArray = [];
4712            for (let i = 1; i < productCategoryArray.length; i++) {
4713                transformedProductCategoryArray.push(escapeCategoryString(productCategoryArray[i].innerText));
4714            }
4715            return transformedProductCategoryArray.join(', ');
4716        }
4717
4718        /**
4719         * fires edge tag containing product data
4720         * @param oldCart
4721         * @param newCart
4722         */
4723        function addToCartEdgeTag(newCart, oldCart) {
4724            // find the item that changed or appeared
4725            const newItem = newCart.items.filter(item => !oldCart.items.includes(item))[0];
4726            if (!newItem) return;
4727
4728            // locate that item in the old cart
4729            let oldItem = oldCart.items.find(item => item.item_id === newItem.item_id);
4730            // subtract the qtys, should they exist, to get the qty added
4731            let qtyAdded = newItem.qty - (oldItem?.qty || 0);
4732
4733            if (qtyAdded > 0) {
4734                // no other way to grab category info, so getting from breadcrumbs
4735                const product_category = buildProductCategoryData();
4736
4737                // trigger edgetag using item data
4738                edgetag('tag', 'AddToCart', {
4739                    currency: 'USD',
4740                    value: newItem.product_price_value * qtyAdded,
4741                    contents: [{
4742                        id: newItem.parent_product_sku,
4743                        variantId: newItem.product_type === 'configurable' ? newItem.product_sku : '',
4744                        quantity: qtyAdded,
4745                        item_price: newItem.product_price_value,
4746                        title: newItem.product_name.replace(/&quot;/g, '"'),
4747                        category: product_category,
4748                        url: newItem.product_url,
4749                        image: newItem.product_image.src
4750                    }],
4751                    checkoutUrl: checkoutUrl
4752                });
4753            }
4754        }
4755
4756        /**
4757         * sets up a handler for on click of add to cart. Compares cart state before and after and fires based on the diff
4758         */
4759        function cartChangeCheck(event) {
4760            const oldCart = event.detail.data.oldCart;
4761            const newCart = event.detail.data.privateData.cart;
4762
4763            if (newCart && (!oldCart.items || oldCart.summary_count !== newCart.summary_count)) {
4764                addToCartEdgeTag(newCart, oldCart);
4765            }
4766        }
4767
4768        /**
4769         * prepares a listener for the Attentive marketing popup, and captures info from it
4770         */
4771        function initAttentivePopup() {
4772            window.addEventListener('message', event => {
4773                if (event.origin !== 'https://creatives.attn.tv' || !event.data?.__attentive) return;
4774                try {
4775                    const data = event.data.__attentive;
4776                    if (!data.action?.includes('LEAD')) return;
4777
4778                    const user = {};
4779                    if (data.email) user.email = data.email;
4780
4781                    let user_telephone = data.phone || '';
4782                    // Properly format the number (if it's not already):
4783                    //  -- proper E.164 format (e.g. 7045551212), plus a prepended "+1" (assumes US telephone numbers) --
4784                    if (!/^\+1\d{10}$/.test(user_telephone)) {
4785                        user_telephone = '+1' + user_telephone.replace(/[^0-9]/g, '');
4786                    }
4787                    if (user_telephone) user.phone = user_telephone;
4788
4789                    if (user.email || user.phone) {
4790                        edgetag('data', user);
4791                        edgetag('tag', 'Lead');
4792                    }
4793                } catch (e) {
4794                    console.error('[Edgetag]', e);
4795                }
4796            }, { once: true });
4797        }
4798
4799        function initializeBlotout() {
4800            edgetag('tag', 'PageView');
4801            initFooterEmail();
4802            initAttentivePopup();
4803            // Do not initiate Klaviyo in checkout, but DO allow it in the cart
4804            if (!window.location.pathname.includes('/checkout/') || window.location.pathname.includes('/checkout/cart')) {
4805                initKlaviyoEmail();
4806            }
4807            window.dispatchEvent(new CustomEvent('blotout-initialized'));
4808        }
4809
4810        // initialize before document ready
4811        window.edgetag = window.edgetag || function() {(edgetag.stubs = edgetag.stubs || []).push(arguments)};
4812        edgetag('init', {
4813            edgeURL: edgeUrl,
4814            disableConsentCheck: true
4815        });
4816
4817        // POST to magento to set up cookie
4818        requestTruIdCookie();
4819
4820        window.addEventListener('cart-change', cartChangeCheck);
4821        hyva.alpineInitialized(initializeBlotout);
4822    </script>
4822
4823<span style="display:none;">
4824    <span id="klevu_sessionId"></span>
4825    <span id="klevu_loginCustomerGroup"></span>
4826    <span id="klevu_loginCustomerEmail"></span>
4827    <span id="klevu_shopperIP"></span>
4828</span>
4829
4830<script type="text&#x2F;javascript">
4831
4832    var updateKlevuSessionDataElementsFromLocalStorage = function() {
4833        var klevuLocalStorage = JSON.parse(window.localStorage.getItem(
4834            'klv_mage'
4835        ) || '{}');
4836        var klevuMagentoCustomerDataKey = 'customerData';
4837        var klevuLocalStorageCustomerData = klevuLocalStorage.hasOwnProperty(klevuMagentoCustomerDataKey)
4838            ? klevuLocalStorage[klevuMagentoCustomerDataKey]
4839            : {};
4840        document.getElementById('klevu_sessionId').innerText = klevuLocalStorageCustomerData.hasOwnProperty('session_id')
4841            ? klevuLocalStorageCustomerData.session_id
4842            : '';
4843        document.getElementById('klevu_loginCustomerGroup').innerText = klevuLocalStorageCustomerData.hasOwnProperty('customer_group_id')
4844            ? klevuLocalStorageCustomerData.customer_group_id
4845            : '';
4846        document.getElementById('klevu_loginCustomerEmail').innerText = klevuLocalStorageCustomerData.hasOwnProperty('id_code')
4847            ? klevuLocalStorageCustomerData.id_code
4848            : '';
4849        document.getElementById('klevu_shopperIP').innerText = klevuLocalStorageCustomerData.hasOwnProperty('shopper_ip')
4850            ? klevuLocalStorageCustomerData.shopper_ip
4851            : '';
4852    };
4853    updateKlevuSessionDataElementsFromLocalStorage();
4854
4855    document.addEventListener(
4856        'klevu.customerData.loaded',
4857        updateKlevuSessionDataElementsFromLocalStorage
4858    );
4859    </script>
4859<div style="display: none;" id="attentiveMagentoPage"></div>
4860<script type="text/javascript">
4861    document.addEventListener("DOMContentLoaded", function () {
4862        'use strict';
4863
4864        let categoryHoverImageUrl = "https://www.outdoornativitysets.com/categoryhoverimage/image/image/";
4865
4866        const klevuQuickSearchBlockSelector = '#maincontent .klevuQuickSearchingArea .klevuProduct:not([hover-events-added])';
4867        const magentoProductBlockSelector = '#maincontent .product-items .product-item:not([hover-events-added])';
4868        const klevuProductBlockSelector = '#maincontent .kuResultsListing .klevuProduct .klevuImgWrap:not([hover-events-added])';
4869
4870        async function createHoverImage(productId, originalImage) {
4871            const response = await fetch(categoryHoverImageUrl + '?' + new URLSearchParams({
4872                product_id: productId
4873            }));
4874
4875            if (response.ok) {
4876                const responseData = await response.json();
4877                if (responseData.success) {
4878                    const hoverImage = document.createElement('img');
4879                    hoverImage.classList.add('hover-image');
4880                    hoverImage.style.opacity = 0;
4881                    hoverImage.style.transition = 'opacity 0.5s';
4882                    hoverImage.src = responseData.image_src;
4883
4884                    originalImage.insertAdjacentElement('afterend', hoverImage);
4885
4886                    showHoverImage(hoverImage);
4887                    return;
4888                }
4889            }
4890
4891            originalImage.setAttribute("no-category-hover", true);
4892        }
4893
4894        function showHoverImage(hoverImage) {
4895            if (hoverImage) {
4896                hoverImage.style.opacity = 1;
4897            }
4898        }
4899        function hideHoverImage(hoverImage) {
4900            if (hoverImage) {
4901                hoverImage.style.opacity = 0;
4902            }
4903        }
4904
4905        function initMouseEvents() {
4906            // handlers for quicksearch area
4907            document.querySelectorAll(klevuQuickSearchBlockSelector).forEach(item => {
4908                item.setAttribute('hover-events-added', true);
4909
4910                item.addEventListener('mouseenter', function (e) {
4911                    const originalImage = e.target.querySelector('.klevuQuickImgWrap img');
4912                    const hoverImage = e.target.querySelector('img.hover-image');
4913                    if (!originalImage.getAttribute('no-category-hover')) {
4914                        if (!hoverImage) {
4915                            const productIds = e.target.querySelector('a').getAttribute("data-id").split("-");
4916                            createHoverImage(productIds[0], originalImage);
4917                        } else {
4918                            showHoverImage(hoverImage);
4919                        }
4920                    }
4921                });
4922
4923                item.addEventListener('mouseleave', function (e) {
4924                    let hoverImage = e.target.querySelector('img.hover-image');
4925                    const that = this;
4926                    if (!hoverImage) {
4927                        setTimeout(function () {
4928                            hoverImage = that.querySelector('img.hover-image');
4929                            hideHoverImage(hoverImage);
4930                        }, 1000);
4931                    } else {
4932                        hideHoverImage(hoverImage);
4933                    }
4934                });
4935            });
4936
4937
4938            // handlers for product sliders area
4939            document.querySelectorAll(magentoProductBlockSelector).forEach(item => {
4940                item.setAttribute('hover-events-added', true);
4941
4942                item.addEventListener('mouseenter', function (e) {
4943                    const originalImage = e.target.querySelector('img.product-image-photo');
4944                    const hoverImage = e.target.querySelector('img.hover-image');
4945                    if (!originalImage.getAttribute('no-category-hover')) {
4946                        if (!hoverImage && !originalImage.getAttribute('no-category-hover')) {
4947                            const productIdInput = e.target.querySelector('input[name="product"]');
4948                            if (productIdInput && productIdInput.value) {
4949                                createHoverImage(productIdInput.value, originalImage);
4950                            } else {
4951                                originalImage.setAttribute("no-category-hover", true);
4952                            }
4953                        } else {
4954                            showHoverImage(hoverImage);
4955                        }
4956                    }
4957                });
4958
4959                item.addEventListener('mouseleave', function (e) {
4960                    let hoverImage = e.target.querySelector('img.hover-image');
4961                    const that = this
4962                    if (!hoverImage) {
4963                        setTimeout(function () {
4964                            hoverImage = that.querySelector('img.hover-image');
4965                            hideHoverImage(hoverImage);
4966                        }, 1000);
4967                    } else {
4968                        hideHoverImage(hoverImage);
4969                    }
4970                });
4971            });
4972
4973
4974            // handler for klevu products grid area
4975            document.querySelectorAll(klevuProductBlockSelector).forEach(item => {
4976                item.setAttribute('hover-events-added', true);
4977
4978                item.addEventListener('mouseenter', function (e) {
4979                    const originalImage = e.target.querySelector('img.kuProdImg');
4980                    const hoverImage = e.target.querySelector('img.hover-image');
4981                    if (!originalImage.getAttribute('no-category-hover')) {
4982                        if (!hoverImage && !originalImage.getAttribute('no-category-hover')) {
4983                            const productIds = e.target.querySelector('.klevuProductClick').getAttribute("data-id").split("-");
4984                            createHoverImage(productIds[0], originalImage);
4985                        } else {
4986                            showHoverImage(hoverImage);
4987                        }
4988                    }
4989                });
4990
4991                item.addEventListener('mouseleave', function (e) {
4992                    let hoverImage = e.target.querySelector('img.hover-image');
4993                    const that = this;
4994                    if (!hoverImage) {
4995                        setTimeout(function () {
4996                            hoverImage = that.querySelector('img.hover-image');
4997                            hideHoverImage(hoverImage);
4998                        }, 1000);
4999                    } else {
5000                        hideHoverImage(hoverImage);
5001                    }
5002                });
5003            });
5004        }
5005
5006        document.addEventListener("klevuLoaded", function () {
5007            initMouseEvents();
5008        });
5009    });
5010</script>
5010
5011
5012
5013<script type="text&#x2F;javascript">
5014    var klevu_cmsSearchEnabled = false;
5015</script>
5015
5016
5017
5018<script>
5019    (() => {
5020        function src_default(Alpine) {
5021            Alpine.directive("intersect", Alpine.skipDuringClone((el, { value, expression, modifiers }, { evaluateLater, cleanup }) => {
5022                let evaluate = evaluateLater(expression);
5023                let options = {
5024                    rootMargin: getRootMargin(modifiers),
5025                    threshold: getThreshold(modifiers)
5026                };
5027                let observer = new IntersectionObserver((entries) => {
5028                    entries.forEach((entry) => {
5029                        if (entry.isIntersecting === (value === "leave"))
5030                            return;
5031                        evaluate();
5032                        modifiers.includes("once") && observer.disconnect();
5033                    });
5034                }, options);
5035                observer.observe(el);
5036                cleanup(() => {
5037                    observer.disconnect();
5038                });
5039            }));
5040        }
5041        function getThreshold(modifiers) {
5042            if (modifiers.includes("full"))
5043                return 0.99;
5044            if (modifiers.includes("half"))
5045                return 0.5;
5046            if (!modifiers.includes("threshold"))
5047                return 0;
5048            let threshold = modifiers[modifiers.indexOf("threshold") + 1];
5049            if (threshold === "100")
5050                return 1;
5051            if (threshold === "0")
5052                return 0;
5053            return Number(`.${threshold}`);
5054        }
5055        function getLengthValue(rawValue) {
5056            let match = rawValue.match(/^(-?[0-9]+)(px|%)?$/);
5057            return match ? match[1] + (match[2] || "px") : void 0;
5058        }
5059        function getRootMargin(modifiers) {
5060            const key = "margin";
5061            const fallback = "0px 0px 0px 0px";
5062            const index = modifiers.indexOf(key);
5063            if (index === -1)
5064                return fallback;
5065            let values = [];
5066            for (let i = 1; i < 5; i++) {
5067                values.push(getLengthValue(modifiers[index + i] || ""));
5068            }
5069            values = values.filter((v) => v !== void 0);
5070            return values.length ? values.join(" ").trim() : fallback;
5071        }
5072
5073        document.addEventListener("alpine:init", () => {
5074            window.Alpine.plugin(src_default);
5075        });
5076    })();
5077</script>
vendor: 1 bytes, line 5077
5077
5078<script>
5079    for (const [selector, deferUntil] of Object.entries({".product-slider section[x-data]":"intersect",".product-info [x-data]":"intersect","#filters-content [x-data]":"intersect","#review_form":"intersect","section[x-data^=initRecentlyViewedProductsComponent]":"intersect","div[x-data^=initBundleOptions]":"intersect","#product_addtocart_form [x-data]":"intersect","#notice-cookie-block":"idle"})) {
5080        document.querySelectorAll(selector).forEach(el => el.setAttribute('x-defer', `${deferUntil}`));
5081    }
5082</script>
vendor: 1 bytes, line 5082
5082
5083<script>
5084    (function () {
5085        "use strict";
5086
5087        const hasAlpine = new Promise(resolve => {
5088            window.addEventListener('alpine:initialized', resolve, {once: true, passive: true});
5089        });
5090
5091        const hasInteract = new Promise(resolve => {
5092            (events => {
5093                const onInteract = () => {
5094                    resolve();
5095                    events.forEach(type => window.removeEventListener(type, onInteract));
5096                }
5097                events.forEach(type => window.addEventListener(type, onInteract, {once: true, passive: true}))
5098            })(['touchstart', 'mouseover', 'wheel', 'scroll', 'keydown'])
5099        });
5100
5101        const onIntersect = (el) => {
5102            return new Promise(resolve => {
5103                const observer = new IntersectionObserver(entries => {
5104                    for (const entry of entries) {
5105                        if (entry.isIntersecting) {
5106                            observer.disconnect()
5107                            resolve();
5108                        }
5109                    }
5110                }, {});
5111                observer.observe(el);
5112            });
5113        }
5114
5115        function runComponent(el) {
5116            hasAlpine.then(() => {
5117                el.removeAttribute('x-ignore');
5118                queueMicrotask(() => Alpine.initTree(el));
5119            });
5120        }
5121
5122        function initDeferredComponents() {
5123            document.querySelectorAll('[x-data][x-defer]').forEach(el => {
5124                el.setAttribute('x-ignore', '');
5125                const deferUntil = (el.getAttribute('x-defer') || '').trim();
5126                switch (deferUntil) {
5127                    case 'interact':
5128                        hasInteract.then(() => runComponent(el));
5129                        break;
5130                    case 'intersect':
5131                        onIntersect(el).then(() => runComponent(el))
5132                        break;
5133                    case 'idle':
5134                        window.requestIdleCallback
5135                            ? window.requestIdleCallback(() => runComponent(el), {timeout: 4000})
5136                            : setTimeout(() => runComponent(el), 4000);
5137                        break;
5138                    case 'eager':
5139                        runComponent(el);
5140                        break;
5141                    default:
5142                        if (deferUntil.startsWith('event:') && deferUntil.length > 6) {
5143                            window.addEventListener(deferUntil.substring(6), () => runComponent(el), {once: true, passive: true});
5144                        }
5145                }
5146            });
5147        }
5148
5149        window.addEventListener('alpine:init', initDeferredComponents, {once: true, passive: true});
5150    })()
5151</script>
5151
5152
5153<script type="module"
5154        src="https://www.outdoornativitysets.com/static/version1789694905/frontend/Kadro/outdoor_nativity_sets_hyva/en_US/Hyva_Theme/js/alpine3.min.js"
5155        defer
5156        crossorigin
5157></script>
vendor: 1 bytes, line 5157
5157
5158<script>
5159    'use strict';
5160    function dispatchMessages(messages, hideAfter) {
5161        const messagesEvent = new CustomEvent("messages-loaded", {
5162            detail: {
5163                messages: messages,
5164                hideAfter: hideAfter
5165            }
5166        });
5167        window.dispatchEvent(messagesEvent);
5168    }
5169
5170    if (typeof hyva === 'undefined' || (!hyva.getBrowserStorage || !hyva.getCookie || !hyva.setCookie)) {
5171        console.warn("Hyvä helpers are not loaded yet. Make sure they are included before this script");
5172    }
5173
5174    (function( hyva, undefined ) {
5175
5176        hyva.initFormKey = () => {
5177            const inputSelector = 'input[name="form_key"]',
5178                formKey = hyva.getFormKey();
5179
5180            Array.from(document.querySelectorAll(inputSelector)).map(function (input) {
5181                input.value = formKey
5182            });
5183        }
5184
5185        hyva.initMessages = () => {
5186            try {
5187                const messages = hyva.getCookie('mage-messages');
5188                window.mageMessages = messages ? JSON.parse(decodeURIComponent(messages).replace(/\+/g, ' ')) : [];
5189
5190                dispatchMessages(window.mageMessages);
5191
5192                                // empty `mage-messages` cookie
5193                const skipSetDomain = true;
5194                hyva.setCookie('mage-messages','', -1, skipSetDomain);
5195
5196            } catch (error) {
5197                console.warn('Error parsing Cookie Messages:', error);
5198            }
5199        }
5200
5201        window.addEventListener('DOMContentLoaded', hyva.initFormKey);
5202        hyva.alpineInitialized(hyva.initMessages)
5203
5204    }( window.hyva = window.hyva || {} ));
5205</script>
vendor: 1 bytes, line 5205
5205
5206<script>
5207    'use strict';
5208    {
5209        const private_content_key = 'mage-cache-storage';
5210        const private_content_expire_key = 'mage-cache-timeout';
5211        const private_content_version_key = 'private_content_version';
5212        const section_data_ids_key = 'section_data_ids';
5213        const mage_cache_session_id_key = 'mage-cache-sessid';
5214        const last_visited_store_key = 'last_visited_store';
5215
5216        const ttl = 3600;
5217
5218        if (typeof hyva === 'undefined' || (!hyva.getBrowserStorage || !hyva.getCookie || !hyva.setCookie)) {
5219            console.warn("Hyvä helpers are not loaded yet. Make sure they are included before this script");
5220        }
5221
5222        function loadSectionData () {
5223            const browserStorage = hyva.getBrowserStorage();
5224            if (!browserStorage) {
5225                typeof window.dispatchMessages !== "undefined" && window.dispatchMessages(
5226                    [{
5227                        type: "warning",
5228                        text: "Please enable LocalStorage in your browser."
5229                    }]
5230                );
5231                return;
5232            }
5233            try {
5234                let isInvalid = false;
5235
5236                if (hyva.getCookie(last_visited_store_key) !== CURRENT_STORE_CODE) {
5237                    isInvalid = true;
5238                }
5239                hyva.setCookie(last_visited_store_key, CURRENT_STORE_CODE, false, false);
5240
5241                if (!hyva.getCookie(mage_cache_session_id_key)) {
5242                    isInvalid = true;
5243                    browserStorage.removeItem(private_content_key);
5244                    const skipSetDomain = true;
5245                    const days = false;
5246                    hyva.setCookie(mage_cache_session_id_key, true, days, skipSetDomain)
5247                }
5248
5249                const cookieVersion = hyva.getCookie(private_content_version_key);
5250                const storageVersion = browserStorage.getItem(private_content_version_key);
5251
5252                if (cookieVersion && !storageVersion || cookieVersion !== storageVersion) {
5253                    isInvalid = true;
5254                }
5255
5256                const privateContentExpires = browserStorage.getItem(private_content_expire_key);
5257                if (privateContentExpires && new Date(privateContentExpires) < new Date()) {
5258                    browserStorage.removeItem(private_content_key);
5259                }
5260
5261                if (isInvalid && cookieVersion) {
5262                    fetchPrivateContent([]);
5263                } else if (cookieVersion && storageVersion && cookieVersion === storageVersion) {
5264                    const privateContent = JSON.parse(browserStorage.getItem(private_content_key));
5265                    if (
5266                        privateContent &&
5267                        privateContentExpires &&
5268                        privateContent.cart &&
5269                        privateContent.customer
5270                    ) {
5271                        dispatchPrivateContent(privateContent);
5272                    } else {
5273                        fetchPrivateContent([]);
5274                    }
5275                } else {
5276                    if (document.getElementById('default-section-data')) {
5277                        const privateContent = JSON.parse(document.getElementById('default-section-data').innerText.trim());
5278                        dispatchPrivateContent(privateContent);
5279                    } else {
5280                        dispatchPrivateContent({});
5281                    }
5282                }
5283
5284            } catch (error) {
5285                console.warn('Error retrieving Private Content:', error);
5286            }
5287        }
5288
5289        hyva.alpineInitialized(loadSectionData)
5290        window.addEventListener('reload-customer-section-data', loadSectionData);
5291
5292        window.processSectionDataBeforeDispatch = window.processSectionDataBeforeDispatch || (data => data);
5293
5294        function dispatchPrivateContent(data) {
5295
5296            const privateContentEvent = new CustomEvent("private-content-loaded", {
5297                detail: {
5298                    data: window.processSectionDataBeforeDispatch(data)
5299                }
5300            });
5301            window.dispatchEvent(privateContentEvent);
5302        }
5303
5304        function fetchPrivateContent(sections) {
5305            fetch(`${BASE_URL}customer/section/load/?sections=${encodeURIComponent(sections.join(','))}`, {
5306                method: 'GET',
5307                headers: {
5308                    'Content-Type': 'application/json',
5309                    'X-Requested-With': 'XMLHttpRequest'
5310                }
5311            })
5312                .then(response => response.ok && response.json())
5313                .then(
5314                    data => {
5315                        if (data) {
5316                            try {
5317                                const browserStorage = hyva.getBrowserStorage();
5318
5319                                // merge new data preserving non-invalidated sections
5320                                const oldSectionData = JSON.parse(browserStorage.getItem(private_content_key) || '{}') || {};
5321
5322                                if ((! data.cart || ! data.cart.cartId) && oldSectionData['checkout-data']) {
5323                                    delete oldSectionData['checkout-data'];
5324                                }
5325                                const newSectionData = Object.assign(oldSectionData, data);
5326
5327                                dispatchPrivateContent(newSectionData);
5328
5329                                // don't persist messages, they've been dispatched already
5330                                if (newSectionData.messages && newSectionData.messages.messages ) {
5331                                    newSectionData.messages.messages = [];
5332                                }
5333
5334                                browserStorage.setItem(private_content_key, JSON.stringify(newSectionData));
5335
5336                                const expiresAt = new Date(Date.now() + (ttl * 1000)).toISOString();
5337                                browserStorage.setItem(private_content_expire_key, expiresAt);
5338
5339                                const newCookieVersion = hyva.getCookie(private_content_version_key);
5340                                browserStorage.setItem(private_content_version_key, newCookieVersion);
5341
5342                                // We don't need the section_data_ids in Hyvä, but we store them for compatibility
5343                                // with Luma Fallback. Otherwise, not all sections are loaded in Luma Checkout
5344                                hyva.setCookie(
5345                                    section_data_ids_key,
5346                                    JSON.stringify(
5347                                        Object.keys(data).reduce((sectionDataIds, sectionKey) => {
5348                                            sectionDataIds[sectionKey] = data[sectionKey]['data_id'];
5349                                            return sectionDataIds;
5350                                        }, {})
5351                                    ),
5352                                    false,
5353                                    true
5354                                );
5355                            } catch (error) {
5356                                console.warn("Couldn't store privateContent", error);
5357                            }
5358                        }
5359                    }
5360                );
5361        }
5362    }
5363</script>
vendor: 1 bytes, line 5363
5363
5364<script>
5365    (() => {
5366        document.addEventListener('submit', event => event.target.action = event.target.action.replace('%25uenc%25', hyva.getUenc()));
5367    })()
5368</script>
vendor: 1 bytes, line 5368
5368
5369<script>
5370    (events => {
5371        const dispatchUserInteractionEvent = () => {
5372            events.forEach(type => window.removeEventListener(type, dispatchUserInteractionEvent))
5373            window.dispatchEvent(new Event('init-external-scripts'))
5374        };
5375        events.forEach(type => window.addEventListener(type, dispatchUserInteractionEvent, {once: true, passive: true}))
5376    })(['touchstart', 'mousemove', 'wheel', 'scroll', 'keydown'])
5377</script>
vendor: 1 bytes, line 5377
5377
5378<script>
5379    function initWishlist() {
5380        return {
5381            addToWishlist(productId) {
5382                const formKey = hyva.getFormKey();
5383                const postUrl = BASE_URL + 'wishlist/index/add/';
5384
5385                fetch(postUrl, {
5386                    "headers": {
5387                        "content-type": "application/x-www-form-urlencoded; charset=UTF-8",
5388                    },
5389                    "body": "form_key=" + formKey + "&product=" + productId + "&uenc=" + hyva.getUenc(),
5390                    "method": "POST",
5391                    "mode": "cors",
5392                    "credentials": "include"
5393                }).then(function (response) {
5394                    if (response.redirected) {
5395                        window.location.href = response.url;
5396                    } else if (response.ok) {
5397                        return response.json();
5398                    } else {
5399                        typeof window.dispatchMessages !== "undefined" && window.dispatchMessages(
5400                            [{
5401                                type: "warning",
5402                                text: "Could\u0020not\u0020add\u0020item\u0020to\u0020wishlist."
5403                            }], 5000
5404                        );
5405                    }
5406                }).then(function (response) {
5407                    if (!response) { return }
5408                    typeof window.dispatchMessages !== "undefined" && window.dispatchMessages(
5409                        [{
5410                            type: (response.success) ? "success" : "error",
5411                            text: (response.success)
5412                                ? "Product\u0020has\u0020been\u0020added\u0020to\u0020your\u0020Wish\u0020List."
5413                                : response.error_message
5414                        }], 5000
5415                    );
5416                    const reloadCustomerDataEvent = new CustomEvent("reload-customer-section-data");
5417                    window.dispatchEvent(reloadCustomerDataEvent);
5418                }).catch(function (error) {
5419                    typeof window.dispatchMessages !== "undefined" && window.dispatchMessages(
5420                        [{
5421                            type: "error",
5422                            text: error
5423                        }], 5000
5424                    );
5425                });
5426            }
5427        }
5428    }
5429</script>
vendor: 1 bytes, line 5429
5429
5430<script>
5431    function initCompareOnProductList() {
5432        return {
5433            addToCompare(productId) {
5434                const formKey = hyva.getFormKey();
5435                const postUrl = BASE_URL + 'catalog/product_compare/add/';
5436
5437                fetch(postUrl, {
5438                    "headers": {
5439                        "content-type": "application/x-www-form-urlencoded; charset=UTF-8",
5440                    },
5441                    "body": "form_key=" + formKey + "&product=" + productId + "&uenc=" + hyva.getUenc(),
5442                    "method": "POST",
5443                    "mode": "cors",
5444                    "credentials": "include"
5445                }).then(function (response) {
5446                    if (response.redirected) {
5447                        window.location.href = response.url;
5448                    }
5449                }).catch(function (error) {
5450                    typeof window.dispatchMessages !== "undefined" && window.dispatchMessages(
5451                        [{
5452                            type: "error",
5453                            text: error
5454                        }], 5000
5455                    );
5456                });
5457            }
5458        };
5459    }
5460</script>
5460
5461<!-- Account type: 'Google Tag Manager' is not supported  -->
5462<script>
5463    function initConfigurableOptions(productId, optionConfig, cascadingOptions = false) {
5464
5465        function findPathParam(key) {
5466                        const baseUrl = (BASE_URL.substring(0, 2) === '//' ? 'http:' : '') + BASE_URL;
5467            const baseUrlParts = (new URL(baseUrl)).pathname.replace(/\/$/, '').split('/');
5468            const pathParts = window.location.pathname.split('/').slice(baseUrlParts.length + 3);
5469            for (let i = 0; i < pathParts.length; i += 2) {
5470                if (pathParts[i] === key && pathParts.length > i) {
5471                    return pathParts[i + 1];
5472                }
5473            }
5474        }
5475
5476        return {
5477            optionConfig,
5478            productId,
5479            cascadingOptions,
5480            itemId: (new URLSearchParams(window.location.search)).get('id') || findPathParam('id'),
5481            allowedAttributeOptions: [],
5482            selectedValues: [],
5483            init() {
5484                this.findAllowedAttributeOptions();
5485                this.$nextTick(() => {
5486                    if (typeof this.optionConfig.defaultValues === 'object') {
5487                        for (const [attributeId, value] of Object.entries(this.optionConfig.defaultValues)) {
5488                            this.changeOption(attributeId, value + '');
5489                        }
5490                    }
5491                });
5492
5493                // Set up child settings if cascading options
5494                if (this.cascadingOptions) {
5495                    this.setChildSettings();
5496                }
5497
5498                // When pivot options are updated, trigger event to be listened to
5499                this.$watch('allowedAttributeOptions', value => this.optionsUpdated());
5500            },
5501            optionsUpdated() {
5502                window.dispatchEvent(
5503                    new CustomEvent(
5504                        'configurableUpdated',
5505                        {
5506                            detail: ''
5507                        }
5508                    )
5509                );
5510            },
5511            /**
5512             * Set each option's child settings, and next/prev option setting. Fill (initialize)
5513             * an option's list of selections as needed or disable an option's setting.
5514             * @private
5515             */
5516            setChildSettings: function () {
5517                const allAttributes = this.optionConfig.attributes;
5518                const allAttributesSorted = Object.values(allAttributes).sort((a,b)=>{
5519                        return a.position - b.position
5520                    }
5521                );
5522
5523                let childSettings = [],
5524                    settings = allAttributesSorted,
5525                    index = settings.length,
5526                    option;
5527
5528                while (index--) {
5529                    option = settings[index];
5530
5531                    if (index) {
5532                        option.disabled = true;
5533                    } else {
5534                        option.disabled = false;
5535                    }
5536
5537                    option.childSettings = childSettings.slice();
5538                    option.prevSetting = settings[index - 1];
5539                    option.nextSetting = settings[index + 1];
5540
5541                    childSettings.push(option);
5542                }
5543            },
5544            /**
5545             * For a given option element, reset all of its selectable options. Clear any selected
5546             * index, disable the option choice, and reset the option's state if necessary.
5547             * @private
5548             * @param {*} element - The element associated with a configurable option.
5549             */
5550            resetChildren: function (element) {
5551                if (element.childSettings) {
5552                    let self = this;
5553
5554                    element.childSettings.forEach(function (set) {
5555                        set.disabled = true;
5556
5557                        if (typeof self.selectedValues[set.id] !== 'undefined') {
5558                            self.changeOption(set.id, '');
5559                        }
5560                    });
5561                }
5562            },
5563            /**
5564             * Based on current allowed attributes, remove any currently selected attributes that are considered invali
5564d
5565             * @param selectedValues
5566             */
5567            unsetInvalidOptions: function(selectedValues) {
5568                let allowedAttributeOptions = this.calculateAllowedAttributeOptions(selectedValues);
5569                let allAttributes = Object.values(this.optionConfig.attributes);
5570
5571                allAttributes.forEach(attribute => {
5572                    if (typeof selectedValues[attribute.id] !== 'undefined' &&
5573                        typeof allowedAttributeOptions[attribute.id] !== 'undefined') {
5574                        let selectedOptionId = selectedValues[attribute.id];
5575                        let selectedOption = allowedAttributeOptions[attribute.id].find(function(option) {
5576                            return option.id === selectedOptionId;
5577                        });
5578
5579                        if (typeof selectedOption === 'undefined') {
5580                            this.changeOption(attribute.id, '');
5581                        }
5582                    }
5583                });
5584            },
5585            getAttributeDisabled: function(attributeId) {
5586                let attribute = this.optionConfig.attributes[attributeId];
5587                if (typeof attribute !== 'undefined' && typeof attribute.disabled !== 'undefined') {
5588                    return attribute.disabled;
5589                } else {
5590                    return false;
5591                }
5592            },
5593            findSimpleIndex() {
5594                                this.productIndex = this.calculateSimpleIndexForPartialSelection(this.selectedValues);
5595            },
5596            calculateSimpleIndexForPartialSelection(selectedValues) {
5597                if (selectedValues.length === 0) return 0;
5598                let productIndexIds = Object.keys(this.optionConfig.index);
5599                Object.keys(this.optionConfig.attributes).forEach((attribute) => {
5600                                        const productsWithAttributeMatch = selectedValues[attribute]
5601                        ? productIndexIds.filter((productIndex) => {
5602                            return this.optionConfig.index[productIndex][attribute] === this.selectedValues[attribute]
5603                        })
5604                        : [];
5605
5606                                        productIndexIds = productsWithAttributeMatch.length ? productsWithAttributeMatch : productIndexIds
5607                })
5608
5609                return productIndexIds[0];
5610            },
5611            calculateSimpleIndexForFullSelection(selectedValues) {
5612                const productIndexes = this.optionConfig.index;
5613                return Object.keys(productIndexes).find(productIndex => {
5614                    const productCandidateOptions = productIndexes[productIndex];
5615
5616                    for (const productOption in productCandidateOptions) {
5617                        if (
5618                            ! selectedValues[productOption] ||
5619                            selectedValues[productOption] !== productCandidateOptions[productOption]
5620                        ) {
5621                            return false;
5622                        }
5623                    }
5624                    return productIndex;
5625                });
5626            },
5627            productIndex: 0,
5628            findAllowedAttributeOptions() {
5629                                this.allowedAttributeOptions = this.calculateAllowedAttributeOptions(this.selectedValues);
5630            },
5631            calculateAllowedAttributeOptions(selectedValues) {
5632                const allAttributes = this.optionConfig.attributes;
5633                const allAttributesSorted = Object.values(allAttributes).sort((a,b) => {
5634                    return a.position - b.position
5635                });
5636
5637                const newAllowedAttributeOptions = [];
5638
5639                allAttributesSorted.forEach(attribute => {
5640                    let selectionWithoutAttr = selectedValues;
5641
5642                    // If using cascading options, limit available options in cascading order
5643                    if (this.cascadingOptions) {
5644                        let curAttribute = attribute;
5645
5646                        // Remove current attribute and each of its children from selection, such that only the parent options are factored 
5646into available product options
5647                        while (typeof curAttribute !== 'undefined') {
5648                            selectionWithoutAttr = this.removeAttrFromSelection(selectionWithoutAttr, curAttribute.id);
5649                            curAttribute = curAttribute.nextSetting;
5650                        }
5651                    } else {
5652                        selectionWithoutAttr = this.removeAttrFromSelection(selectedValues, attribute.id);
5653                    }
5654
5655                    selectionWithoutAttr = Object.assign({}, selectionWithoutAttr);
5656                    const availableIndexes = this.calculateAvailableProductIndexes(selectionWithoutAttr);
5657                    newAllowedAttributeOptions[attribute.id] = allAttributes[attribute.id].options.filter(option => {
5658                        return !!option.products.find(product => {
5659                            return availableIndexes.includes(product);
5660                        })
5661                    });
5662                });
5663                return newAllowedAttributeOptions;
5664            },
5665            calculateAvailableProductIndexes(selectedOptions) {
5666                if (Object.keys(selectedOptions).length === 0) {
5667                                        if (Object.values(this.optionConfig.salable || {}).length) {
5668                                                return [].concat.apply([], [].concat.apply([], Object.values(this.optionConfig.salable).map(Object.values))).filter((x, i, a) => a.indexOf(x) === i)
5669                    }
5670                                        return Object.keys(this.optionConfig.index);
5671                }
5672
5673                                const selectedIds = Object.keys(selectedOptions);
5674                if (Object.values(this.optionConfig.salable || {}).length) {
5675                                        const selectedOptionIndexes = selectedIds.map(attrId => {
5676                        const optionValue = selectedOptions[attrId];
5677                        return this.optionConfig.salable[attrId] && this.optionConfig.salable[attrId][optionValue] || []
5678                    })
5679                                        return selectedOptionIndexes.reduce((acc, optionIndexes) => {
5680                        return acc.filter(index => optionIndexes.includes(index));
5681                    });
5682                } else {
5683                                        const productIndexes = this.optionConfig.index;
5684                    return Object.keys(productIndexes).filter(index => {
5685                                                for (const attrId of selectedIds) {
5686                            if (productIndexes[index][attrId] !== `${selectedOptions[attrId]}`) return false
5687                        }
5688                        return true
5689                    });
5690                }
5691            },
5692            findAttributeByOptionId(optionId) {
5693                for (const attributeId in this.optionConfig.attributes) {
5694                    const attributeOptions = this.optionConfig.attributes[attributeId].options || [];
5695                    if (attributeOptions.find(option => option.id === optionId)) {
5696                        return attributeId;
5697                    }
5698                }
5699            },
5700            getAllowedAttributeOptions(attributeId) {
5701                return this.allowedAttributeOptions[attributeId] || []
5702            },
5703            getProductIdsForOption(option) {
5704                const attributeId = this.findAttributeByOptionId(option.id);
5705                const allOptions = this.optionConfig.attributes[attributeId];
5706                const opt = (allOptions && allOptions.options || []).find(o => o.id === option.id);
5707                return opt && opt.products
5708                    ? opt.products
5709                    : [];
5710            },
5711            findProductIdsForPartialSelection(optionSelection) {
5712                const candidateProducts = Object.values(optionSelection).reduce((candidates, optionId) => {
5713                    const newCandidates = this.getProductIdsForOption({id: optionId});
5714                    return candidates === null
5715                        ? newCandidates
5716                        : candidates.filter(productId => newCandidates.includes(productId));
5717                }, null);
5718                return candidateProducts || [];
5719            },
5720            findCheapestProductForPartialSelection(optionSelection) {
5721                const candidateProducts = this.findProductIdsForPartialSelection(optionSelection);
5722                return candidateProducts.reduce((cheapest, simpleIdx) => {
5723                    // in the first iteration we start with simpleIdx as the currently cheapest product
5724                    if (! this.optionConfig.optionPrices[cheapest]) return simpleIdx;
5725                    const knownCheapestPrice = this.optionConfig.optionPrices[cheapest].finalPrice.amount;
5726                    return knownCheapestPrice > this.optionConfig.optionPrices[simpleIdx].finalPrice.amount
5727                        ? simpleIdx
5728                        : cheapest;
5729                }, 0)
5730            },
5731            findProductIdToUseForOptionPrice(option) {
5732                // try to find a product for a complete selection
5733                const attributeId = this.findAttributeByOptionId(option.id);
5734                const optionSelection = Object.assign({}, this.selectedValues, {[attributeId]: option.id});
5735                const matchingSimpleIndex = this.calculateSimpleIndexForFullSelection(optionSelection);
5736                // if there is no complete selection, use the cheapest product for the option
5737                return matchingSimpleIndex || this.findCheapestProductForPartialSelection(optionSelection);
5738            },
5739            getAttributeOptionLabel(option) {
5740                // Overrides original to exclude the price change from the option labels
5741                return option.label;
5742            },
5743            getOptionPriceAdjustmentBasePrice() {
5744                if (this.optionConfig.optionPrices[this.productIndex]) {
5745                    return this.optionConfig.optionPrices[this.productIndex].finalPrice.amount
5746                }
5747                const cheapestForSelection = this.findCheapestProductForPartialSelection(this.selectedValues);
5748                return this.optionConfig.optionPrices[cheapestForSelection]
5749                    ? this.optionConfig.optionPrices[cheapestForSelection].finalPrice.amount
5750                    : this.optionConfig.prices.finalPrice.amount; // default price if no option selection
5751            },
5752            clearOptionIfActive(optionId, value) {
5753                if (this.selectedValues[optionId] === value) {
5754                    this.blurLabel()
5755                    this.changeOption(optionId, '')
5756                }
5757            },
5758            removeAttrFromSelection(selectedValues, attributeId) {
5759                                attributeId = parseInt(attributeId);
5760                return selectedValues.reduce((newSelection, val, attr) => {
5761                    if (attr !== attributeId) {
5762                        newSelection[attr] = val;
5763                    }
5764                    return newSelection;
5765                }, []);
5766            },
5767            changeOption(attributeId, value) {
5768                if (value === '') {
5769                    this.selectedValues = this.removeAttrFromSelection(this.selectedValues, attributeId)
5770                } else if (value && this.getAllowedAttributeOptions(attributeId).find(option => option.id === value)) {
5771                                        this.selectedValues[attributeId] = value;
5772                }
5773                this.findSimpleIndex();
5774                this.findAllowedAttributeOptions();
5775                this.updatePrices();
5776                this.updateGallery();
5777
5778                // If using cascading options, reset options or enable options depending on what is selected
5779                if (this.cascadingOptions) {
5780                    let element = this.optionConfig.attributes[attributeId];
5781                    if (value && element.nextSetting) {
5782                        element.nextSetting.disabled = false;
5783                    } else if (!value) {
5784                        this.resetChildren(element);
5785                    }
5786
5787                    // Remove any invalid options depending on what was selected
5788                    this.unsetInvalidOptions(this.selectedValues);
5789                }
5790
5791                window.dispatchEvent(
5792                    new CustomEvent(
5793                        'configurable-selection-changed',
5794                        {
5795                            detail: {
5796                                productId: this.productId,
5797                                optionId: attributeId,
5798                                value: value,
5799                                productIndex: this.productIndex,
5800                                selectedValues: this.selectedValues,
5801                                candidates: this.findProductIdsForPartialSelection(this.selectedValues),
5802                            }
5803                        }
5804                    )
5805                );
5806
5807                // Add new custom events when option selected is changed
5808                let productSelected = typeof this.calculateSimpleIndexF
5808orFullSelection(this.selectedValues) !== 'undefined';
5809                let sku = productSelected ? this.optionConfig.skus[this.productIndex] : this.optionConfig.parentSku;
5810                window.dispatchEvent(
5811                    new CustomEvent(
5812                        "update-sku-" + this.productId,
5813                        {
5814                            detail: sku
5815                        }
5816                    )
5817                );
5818
5819                if (productSelected) {
5820                    window.dispatchEvent(
5821                        new CustomEvent(
5822                            "update-attention-" + this.productId,
5823                            {
5824                                detail: this.optionConfig.attention[this.productIndex]
5825                            }
5826                        )
5827                    );
5828                }
5829
5830                let stock = productSelected ? this.optionConfig.stock[this.productIndex] : this.optionConfig.stock['cp-avail'];
5831                window.dispatchEvent(
5832                    new CustomEvent(
5833                        "update-stock-" + this.productId,
5834                        {
5835                            detail: stock
5836                        }
5837                    )
5838                );
5839            },
5840            calculateIsMinimalPrice() {
5841                return (
5842                    this.selectedValues.filter(value => !!value).length <
5843                    Object.keys(this.optionConfig.attributes).length
5844                );
5845            },
5846            updatePrices() {
5847                const value = this.productIndex ?
5848                    this.optionConfig.optionPrices[this.productIndex] :
5849                    this.optionConfig.prices;
5850                window.dispatchEvent(
5851                    new CustomEvent(
5852                        "update-prices-" + this.productId,
5853                        {
5854                            detail: Object.assign(
5855                                value,
5856                                { isMinimalPrice: this.calculateIsMinimalPrice() }
5857                            )
5858                        }
5859                    )
5860                );
5861            },
5862            updateGallery () {
5863                if (this.productIndex) {
5864                    const images = this.optionConfig.images[this.productIndex];
5865                    images && window.dispatchEvent(new CustomEvent(
5866                        "update-gallery",
5867                        { detail: {
5868                                "images": this.sortImagesByPosition(images),
5869                                "productId": this.productId
5870                            }
5871                        }
5872                    ));
5873                } else {
5874                    window.dispatchEvent(new CustomEvent("reset-gallery", {
5875                        detail: { "productId": this.productId }
5876                    }));
5877                }
5878            },
5879            sortImagesByPosition(images) {
5880                return images.sort((x, y) => {
5881                    return x.position === y.position ? 0 : (parseInt(x.position) > parseInt(y.position) ? 1 : -1)
5882                });
5883            },
5884            onGetCartData(data) {
5885                            },
5886            preselectCartItems(data) {
5887                // pre-select options based on cart data for current (quote) itemId
5888                const cart = data && data.cart;
5889                if (cart && cart.items) {
5890                    const cartItem = cart.items.find((item) => {
5891                        return (
5892                            item.item_id === this.itemId
5893                            && item.product_id === this.productId
5894                        )
5895                    });
5896                    if (cartItem && cartItem.options && cartItem.options.length) {
5897                        cartItem.options.map(option => {
5898                            this.changeOption(option.option_id, option.option_value);
5899                        })
5900                    }
5901                }
5902            },
5903            preselectQuerystringItems() {
5904                // pre-select option like ?size=167
5905                const urlQueryParams = new URLSearchParams(window.location.search.replace('?',''));
5906                this.preselectItemsBasedOnLocation(attribute => urlQueryParams.get(attribute.code));
5907            },
5908            preselectLocationHashItems() {
5909                // pre-select option like #144=167
5910                const urlHashParams = new URLSearchParams(window.location.hash.replace('#',''));
5911                this.preselectItemsBasedOnLocation(attribute => urlHashParams.get(attribute.id));
5912            },
5913            preselectItemsBasedOnLocation(getLocationValue) {
5914                Object.values(this.optionConfig.attributes).map(attribute => {
5915                    this.changeOption(attribute.id, getLocationValue(attribute))
5916                });
5917            }
5918        }
5919    }
5920
5921</script>
vendor: 1 bytes, line 5921
5921
5922<script>
5923    function initSwatchOptions(swatchConfig) {
5924        return {
5925            swatchConfig,
5926            getAttributeSwatchData(attributeId) {
5927                const swatchConfig = Object.assign({}, this.swatchConfig[attributeId]);
5928                swatchConfig['details'] = JSON.parse(swatchConfig['additional_data']);
5929
5930                return swatchConfig;
5931            },
5932            getAllAttributeOptions(attributeId) {
5933                return (
5934                    this.optionConfig.attributes[attributeId] &&
5935                    this.optionConfig.attributes[attributeId].options
5936                ) || []
5937            },
5938            optionIsActive(attributeId, optionId) {
5939                // return true if a product with this option is in stock
5940                return !!this.getAllowedAttributeOptions(attributeId).find(
5941                    option => option.id === optionId
5942                )
5943            },
5944            optionIsEnabled(attributeId, optionId) {
5945                // return true if a product with this option is enabled
5946                for (const productId in this.optionConfig.index) {
5947                    if (this.optionConfig.index[productId][attributeId] === optionId) {
5948                        return true;
5949                    }
5950                }
5951                return false;
5952            },
5953            mapSwatchTypeNumberToTypeCode(typeNumber) {
5954                switch ("" + typeNumber) {
5955                    case "1":
5956                        return "color"
5957                    case "2":
5958                        return "image"
5959                    case "3":
5960                        return "empty"
5961                    case "0":
5962                    default:
5963                        return "text"
5964                }
5965            },
5966            getTypeOfFirstOption(attributeId) {
5967                for (const optionId in this.swatchConfig[attributeId]) {
5968                    const option = this.swatchConfig[attributeId][optionId];
5969                    if (typeof option.type !== 'undefined') {
5970                        return this.mapSwatchTypeNumberToTypeCode(option.type);
5971                    }
5972                }
5973            },
5974            getVisualSwatchType(attributeId, targetOptionId) {
5975                // If a type configuration is present for the given option id, use it
5976                const config = this.swatchConfig[attributeId];
5977                if (config[targetOptionId] && typeof config[targetOptionId].type !== 'undefined') {
5978                    return this.mapSwatchTypeNumberToTypeCode(config[targetOptionId].type);
5979                }
5980
5981                // Otherwise - if no config is present for the target option - use the type of the first option
5982                // with a type property from the attribute, thus assuming its the same type as the target option.
5983                // (This edge case condition can occur on single swatch products if some options are not salable)
5984                return this.getTypeOfFirstOption(attributeId);
5985            },
5986            getSwatchType(attributeId, optionId) {
5987                // Deserialize the attribute details the first time they are used
5988                if (this.swatchConfig[attributeId] && ! this.swatchConfig[attributeId].details) {
5989                    this.swatchConfig[attributeId] = this.getAttributeSwatchData(attributeId);
5990                }
5991                const type =  this.swatchConfig[attributeId] &&
5992                    this.swatchConfig[attributeId].details &&
5993                    this.swatchConfig[attributeId].details.swatch_input_type ||
5994                    "empty";
5995                return type === 'visual' ? this.getVisualSwatchType(attributeId, optionId) : type;
5996            },
5997            isTextSwatch(attributeId, optionId) {
5998                return this.getSwatchType(attributeId, optionId) === 'text';
5999            },
6000            isVisualSwatch(attributeId, optionId) {
6001                const type = this.getSwatchType(attributeId, optionId);
6002
6003                return ['image', 'color'].includes(type);
6004            },
6005            getSwatchBackgroundStyle(attributeId, optionId) {
6006                const config = this.getSwatchConfig(attributeId, optionId);
6007                const type = this.getSwatchType(attributeId, optionId);
6008
6009                if (type === "color") {
6010                    return 'background-color:' + config.value;
6011                } else if (type === "image") {
6012                    return "background: #ffffff url('" + config.value + "') no-repeat center";
6013                } else {
6014                    return '';
6015                }
6016            },
6017            getSwatchText(attributeId, optionId) {
6018                const config = this.getSwatchConfig(attributeId, optionId);
6019                return config.label || config.value || this.getOptionLabelFromOptionConfig(attributeId, optionId);
6020            },
6021            getSelectedSwatchText(attributeId, optionId) {
6022                let tooltipText = this.isTooltipVisible() && this.activeTooltipItem.attribute == attributeId ? this.getTooltipLabel() : '';
6023                return tooltipText || this.getSwatchText(attributeId, optionId);
6024            },
6025            getOptionLabelFromOptionConfig(attributeId, optionId) {
6026                // Fallback if no value is present in swatchConfig data
6027                // Reference issue https://gitlab.hyva.io/hyva-themes/magento2-default-theme/-/issues/190
6028                const option = this.getAllAttributeOptions(attributeId).filter(option => option.id === optionId);
6029                return option && option[0] && option[0].label ||'';
6030            },
6031            getSwatchConfig(attributeId, optionId) {
6032                return this.swatchConfig[attributeId] && this.swatchConfig[attributeId][optionId]
6033                    ? this.swatchConfig[attributeId][optionId]
6034                    : false;
6035            },
6036            activeTooltipItem: false,
6037            tooltipPositionElement: false,
6038            isTooltipVisible() {
6039                return this.activeTooltipItem &&
6040                    this.getSwatchConfig(
6041                        this.activeTooltipItem.attribute,
6042                        this.activeTooltipItem.item
6043                    );
6044            },
6045            isFirstItemCol() {
6046                return this.activeTooltipItem.index === 0;
6047            },
6048            getTooltipImageStyle(attributeId, optionId) {
6049                const config = this.getSwatchConfig(attributeId, optionId);
6050                const type = this.getSwatchType(attributeId, optionId);
6051
6052                if (type === "color") {
6053                    return 'background-color:' + config.value + '; width: 110px; height: 90px;';
6054                } else if (type === "image") {
6055                    return "background: #ffffff url('" + config.thumb +
6056                        "') center center no-repeat; width: 110px; height: 90px;";
6057                } else {
6058                    return 'display:none';
6059                }
6060            },
6061            getTooltipPosition() {
6062                return this.tooltipPositionElement ?
6063                    `top: ${this.tooltipPositionElement.offsetTop}px;` +
6064                    `left: ${
6065                        this.tooltipPositionElement.offsetLeft - (
6066                            this.tooltipPositionElement.closest('.snap') &&
6067                            this.tooltipPositionElement.closest('.snap').scrollLeft ||
6068                            0
6069                        )
6070                    }px;` : ''
6071            },
6072            getTooltipLabel() {
6073                return this.getSwatchConfig(this.activeTooltipItem.attribute, this.activeTooltipItem.item).label
6074            },
6075            focusedLabel: false,
6076            focusLabel(optionId) {
6077                this.focusedLabel = optionId;
6078            },
6079            blurLabel() {
6080                this.focusedLabel = false;
6081            },
6082            showSwatches: false,
6083            initShowSwatchesIntersect() {
6084                if ('IntersectionObserver' in window && !window.scrollY) {
6085                    let io = new IntersectionObserver(
6086                        entries => {
6087                            entries.map(entry => {
6088                                if (entry.isIntersecting) {
6089                                    this.showSwatches = true;
6090                                    io.unobserve(this.$root);
6091                                }
6092                            })
6093                        }
6094                    );
6095                    io.observe(this.$root);
6096                } else {
6097                    this.showSwatches = true
6098                }
6099            }
6100        }
6101    }
6102</script>
vendor: 1 bytes, line 6102
6102
6103<script>
6104    'use strict';
6105
6106    const grecaptchaV2LoadCallbacks = [];
6107
6108    function executeRecaptchaLoadCallbacks () {
6109        while (window.grecaptcha && grecaptchaV2LoadCallbacks.length > 0) {
6110            const callback = grecaptchaV2LoadCallbacks.pop();
6111            typeof callback === 'string' ? window[callback]() : callback();
6112        }
6113    }
6114
6115    (function() {
6116        const loadRecaptchaScript = (event) => {
6117
6118            if (window.grecaptcha || !event.target.form) {
6119                return;
6120            }
6121
6122            const url = 'https://www.google.com/recaptcha/api.js?onload=executeRecaptchaLoadCallbacks';
6123            const siteKey = '6Lf7qRkjAAAAAP0lyuri41_9EGRTkVEkzoJvVxbE';
6124            const script = document.createElement('script');
6125            script.type = 'text/javascript';
6126            script.src = siteKey ? `${url}&render=${siteKey}` : `${url}&render=explicit`;
6127            script.async = true;
6128            document.head.appendChild(script);
6129
6130            script.addEventListener('load', () => {
6131                Array.from(document.querySelectorAll('button[data-recaptcha-btn]:disabled')).forEach(btn => btn.removeAttribute('disabled'));
6132            });
6133        }
6134
6135        window.forceLoadRecaptchaScript = (form) => {
6136            loadRecaptchaScript({target: {form: form || 'dummy'}});
6137            executeRecaptchaLoadCallbacks();
6138        };
6139
6140        document.body.addEventListener('input', loadRecaptchaScript, { once: true });
6141        document.body.addEventListener('focus', loadRecaptchaScript, { once: true });
6142
6143    }());
6144
6145</script>
vendor: 1 bytes, line 6145
6145
6146<script>
6147    'use strict';
6148
6149    (function () {
6150        const modals = [];
6151        const excludedFromFocusTrapping = new Set();
6152
6153        function trapFocusInNextModalWithOverlay() {
6154            for (let idx = modals.length -1; idx >= 0; idx--) {
6155                const nextOnStack = modals[idx];
6156                const nextDialogElement = nextOnStack.instance.$refs[nextOnStack.name];
6157                if (! isOverlayDisabled(nextDialogElement)) {
6158                    hyva.trapFocus(nextDialogElement);
6159                    break;
6160                }
6161            }
6162        }
6163
6164        function focusables(dialogElement) {
6165            const selector = 'button, [href], input, textarea, select, details, [tabindex]:not([tabindex="-1"])';
6166            return Array.from(dialogElement.querySelectorAll(selector))
6167                .filter(el => !el.hasAttribute('disabled'));
6168        }
6169
6170        function firstVisible(elements) {
6171            const a = Array.from(elements);
6172            for (let i = 0; i < a.length; i++) {
6173                if (a[i].offsetWidth || a[i].offsetHeight || a[i].getClientRects().length) return a[i];
6174            }
6175            return null;
6176        }
6177
6178        function isInViewport(element) {
6179            const rect = element && element.getBoundingClientRect();
6180            return rect &&
6181                rect.top >= 0 &&
6182                rect.left >= 0 &&
6183                rect.right <= window.innerWidth &&
6184                rect.bottom <= window.innerHeight;
6185        }
6186
6187        function setFocusAfterTransition(dialogElement, duration) {
6188                        const nested = Array.from(dialogElement.querySelectorAll('[role="dialog"]'));
6189            const candidates = Array.from(dialogElement.querySelectorAll('[x-focus-first]'));
6190            next: for (let candidate of candidates) {
6191                for (let child of nested) {
6192                    if (child.contains(candidate)) continue next;
6193                }
6194                setTimeout(() => candidate.focus(), 50);
6195                break;
6196            }
6197            window.setTimeout(() => {
6198                const focusElement = firstVisible(dialogElement.querySelectorAll('[x-focus-first]')) ||
6199                    focusables(dialogElement)[0] ||
6200                    null;
6201                focusElement && isInViewport(focusElement) && focusElement.focus();
6202            }, Math.max(1, duration));
6203        }
6204
6205        function determineTrigger($refs, dialog, trigger) {
6206                        if (typeof trigger === 'undefined' && typeof dialog === 'object' && dialog.target instanceof HTMLElement) {
6207                return dialog.target;
6208            }
6209                        if (typeof dialog === 'string' && typeof trigger === 'object' && trigger.target instanceof HTMLElement) {
6210                return trigger.target;
6211            }
6212                        if (typeof trigger === 'string') {
6213                try {
6214                    return $refs[trigger] || document.querySelector(trigger)
6215                } catch (e) {}
6216            }
6217                        if (trigger instanceof Element) {
6218                return trigger;
6219            }
6220
6221                        return null;
6222        }
6223
6224        function isOverlayDisabled(dialog) {
6225            return dialog && dialog.hasAttribute('x-no-overlay')
6226        }
6227
6228        function areRemainingModalsWithoutOverlay(modals)
6229        {
6230            const overflowDisabled = modals.map(modal => modal.instance.$refs[modal.name]).filter(isOverlayDisabled);
6231
6232            return overflowDisabled.length === modals.length;
6233        }
6234
6235        window.hyva.modal = function(options = {}) {
6236                        if (this.$el && this.$el.dataset && this.$el.dataset.options) {
6237                try {
6238                    options = Object.assign(options, JSON.parse(this.$el.dataset.options || '{}'));
6239                } catch (e) {
6240                    throw new Error('Cannot read the dialog options from the data-options attribute: not valid JSON');
6241                }
6242            }
6243
6244            const config = Object.assign({
6245                dialog: 'dialog',                 duration: 300,                 transitionEnter: 'transition ease-out duration-300',
6246                transitionEnterStart: 'opacity-0',
6247                transitionEnterEnd: 'opacity-100',
6248                transitionLeave: 'transition ease-in duration-300',
6249                transitionLeaveStart: 'opacity-100',
6250                transitionLeaveEnd: 'opacity-0',
6251            }, options);
6252            let lastHide = 0;
6253
6254            return {
6255                opened: {},
6256                show(dialog, trigger) {
6257                    const focusTargetAfterHide = determineTrigger(this.$refs, dialog, trigger);
6258                    const name = typeof dialog === 'string' ? dialog : config.dialog;
6259                    const dialogElement = this.$refs[name];
6260                    if (! dialogElement) {
6261                                                return;
6262                    }
6263                    const useOverlay = ! dialogElement.hasAttribute('x-no-overlay');
6264
6265                    dialogElement.scrollTop = 0;
6266
6267                                        if (this.opened[name]) {
6268                        return;
6269                    }
6270
6271                    if (focusTargetAfterHide) {
6272                        focusTargetAfterHide.setAttribute('aria-expanded', 'true');
6273                    }
6274
6275                    this.opened[name] = true;
6276                    useOverlay && this.$nextTick(() => hyva.trapFocus(dialogElement));
6277                    setFocusAfterTransition(dialogElement, config.duration);
6278
6279                    const frame = {name, instance: this, focusTarget: focu
6279sTargetAfterHide, time: Date.now()};
6280
6281                    modals.push(frame);
6282                    if (useOverlay) {
6283                        document.body.classList.add('overflow-hidden');
6284                    }
6285                    return new Promise(resolve => frame.resolve = resolve);
6286                },
6287                cancel() {
6288                    this.hide(false);
6289                },
6290                ok() {
6291                    this.hide(true);
6292                },
6293                hide(value) {
6294                                        if (Date.now() - lastHide < config.duration) {
6295                        return;
6296                    }
6297                    lastHide = Date.now();
6298
6299                    const modal = modals.pop() || {};
6300                    if (! modal.instance) {
6301                        return;
6302                    }
6303
6304                    const name = modal.name;
6305                    this.opened[name] = false;
6306                    hyva.releaseFocus(modal.instance.$refs[modal.name])
6307                    trapFocusInNextModalWithOverlay();
6308
6309                    const nextFocusAfterHide = modal.focusTarget;
6310                    nextFocusAfterHide && setTimeout(() => {
6311                        nextFocusAfterHide.setAttribute('aria-expanded', 'false');
6312                        nextFocusAfterHide.focus()
6313                    }, config.duration);
6314
6315                    if (modals.length === 0 || areRemainingModalsWithoutOverlay(modals)) {
6316                        document.body.classList.remove('overflow-hidden');
6317                    }
6318
6319                    modal.resolve(value);
6320                },
6321                overlay(dialog) {
6322                    dialog = this.$el.dataset.dialogRefName || dialog;
6323                    const name = typeof dialog === 'string' ? dialog : config.dialog;
6324                    return {
6325                        ['x-show']() {
6326                            return this.opened[name]
6327                        },
6328                        ['x-transition:enter']: config.transitionEnter,
6329                        ['x-transition:enter-start']: config.transitionEnterStart,
6330                        ['x-transition:enter-end']: config.transitionEnterEnd,
6331                        ['x-transition:leave']: config.transitionLeave,
6332                        ['x-transition:leave-start']: config.transitionLeaveStart,
6333                        ['x-transition:leave-end']: config.transitionLeaveEnd,
6334                        ['@hyva-modal-show.window'](event) {
6335                            event.detail && event.detail.dialog === name && this.show(name, event.detail.focusAfterHide)
6336                        }
6337                    };
6338                },
6339                showDialogOnInit() {
6340                    const parent = this.$el.closest('[data-dialog-ref-name]');
6341                    if (parent && parent.dataset.dialogRefName) {
6342                        this.$dispatch('hyva-modal-show', {dialog: parent.dataset.dialogRefName})
6343                    }
6344                }
6345            };
6346        }
6347
6348        window.hyva.modal.peek = () => modals.length > 0 && modals[modals.length -1]
6349
6350        window.hyva.modal.pop = function () {
6351            if (modals.length > 0) {
6352                const modal = modals[modals.length -1];
6353                modal.instance.hide();
6354            }
6355        }
6356
6357        window.hyva.modal.excludeSelectorsFromFocusTrap = function (selectors) {
6358            typeof selectors === 'string' || selectors instanceof String
6359                ? excludedFromFocusTrapping.add(selectors)
6360                : selectors.map(selector => excludedFromFocusTrapping.add(selector));
6361        }
6362
6363        window.hyva.modal.eventListeners = {
6364            keydown: event => {
6365                if (event.key === 'Escape') {
6366                    window.hyva.modal.pop();
6367                }
6368            },
6369                        click: event => {
6370                if (modals.length > 0) {
6371                    const modal = modals[modals.length -1];
6372                    const dialog = modal.instance.$refs[modal.name];
6373                    if (modal.time + 50 < Date.now() && // if last click processing is more than 50ms ago
6374                        ! isOverlayDisabled(dialog) && // if dialog has overlay
6375                        ! dialog.contains(event.target)) { // if click is outside of dialog
6376                        modal.instance.hide();
6377                    }
6378                }
6379            }
6380        };
6381
6382        document.addEventListener('keydown', window.hyva.modal.eventListeners.keydown);
6383
6384        document.addEventListener('click', window.hyva.modal.eventListeners.click);
6385    })();
6386    window.addEventListener('alpine:init', () => {
6387        Alpine.data('hyvaModal', window.hyva.modal);
6388    }, {once: true});
6389</script>
6389
6390<div id="mobile-contact-block"><div class="contact-popup">
6391   <div class="contact-toolbar">
6392      <button id="contact-popup-close">
6393      </button>
6394      <span>Contact Us</span>
6395   </div>
6396   <iframe id="MobileContactPopup" src="" data-srcuri="https://contact.outdoornativitysets.com/?FormKey=ons&type=zdonly" title="OutdoorNativitySets Contact Form" width="100%" height="400px" frameborder="1"></iframe>
6397</div>
6398
6399<style>
6400   #mobile-contact-block {
6401      position: fixed;
6402      top: 30px !important;
6403      bottom: 30px !important;
6404      right: 30px !important;
6405      bottom: 30px !important;
6406      background-color: white;
6407      z-index: 999999;
6408      margin: 16px;
6409      border-radius: 10px;
6410      transition: all linear .3s;
6411   }
6412
6413   .contact-popup {
6414      border-radius: 10px;
6415      box-shadow: rgba(0, 0, 0, 0.2) 0px 0px 6px 0px;
6416   }
6417
6418   .contact-toolbar {
6419      border-radius: 10px 10px 0 0;
6420      background-color: #a32c28;
6421      width: 100%;
6422      display: flex;
6423      justify-content: center;
6424      padding: .75rem 0;
6425      position: relative;
6426   }
6427
6428   .contact-toolbar span {
6429      color: white;
6430      font-weight: 700;
6431   }
6432
6433   #contact-popup-close {
6434      border-bottom: 0px solid white;
6435      min-width: 10px;
6436      min-height: 10px;
6437      position: absolute;
6438      right: 0;
6439      top: 0;
6440      border-radius: 0;
6441      padding: 0;
6442      height: 50%;
6443      margin-top: 2px;
6444      margin-right: 3rem;
6445   }
6446  #contact-popup-close::before { content: 'X'; color: #fff; }
6447
6448   #contact-popup-close:hover {
6449      background: #a32c28 !important;
6450   }
6451
6452   #launcher,
6453   #webWidget {
6454       display: none;
6455   }
6456
6457    @media (max-width: 768px) {
6458
6459         #mobile-contact-block {
6460         top: 0;
6461         left: 0;
6462         margin: 0;
6463         border-radius: 0;
6464      }
6465
6466      .contact-toolbar {
6467         border-radius: 0 0 0 0;
6468         padding: 1.5rem 0;
6469      }
6470   }
6471
6472</style></div>
6473<script>
6474    // Functionality directly ported from original uiComponent, with minor modifications to work with Alpine
6475    function initBraintreePayPalExpress(clientToken, currency)
6476    {
6477        return {
6478            clientToken: clientToken,
6479            currency: currency,
6480            cart: null,
6481            customer: null,
6482            isGuestCheckoutAllowed: null,
6483            init()
6484            {
6485                // don't do anything
6486            },
6487            custom_init()
6488            {
6489                
6490                // called by nextTick
6491                this.loadScript('https://js.braintreegateway.com/web/3.88.1/js/client.min.js', function() {
6492                    this.setupButton(this.$root);
6493                }.bind(this));
6494            },
6495            receiveCustomerData(event)
6496            {
6497                if(event.detail && event.detail.data){
6498                    this.cart = event.detail.data.cart;
6499                    if(this.cart){
6500                        this.isGuestCheckoutAllowed = this.cart.isGuestCheckoutAllowed;
6501                    }
6502                    this.customer = event.detail.data.customer;
6503                }
6504            },
6505            loadScript(url, callback)
6506            {
6507                const script = document.createElement('script');
6508                script.type = 'text/javascript';
6509                script.src = url;
6510                script.addEventListener('load', callback);
6511                document.head.appendChild(script);
6512            },
6513            buildForm(actionUrl, fields)
6514            {
6515                const form = document.createElement('form');
6516                form.action = actionUrl;
6517                form.method = 'POST';
6518                form.hidden = true;
6519                form.enctype = 'application/x-www-form-urlencoded';
6520
6521                Object.entries(fields).forEach(field => {
6522                    const [key, value] = field;
6523                    let fieldElement;
6524
6525                    fieldElement = document.createElement('input');
6526                    fieldElement.type = 'hidden';
6527                    fieldElement.name = key;
6528                    fieldElement.value = value;
6529                    form.appendChild(fieldElement);
6530                });
6531
6532                document.body.appendChild(form);
6533                form.submit();
6534            },
6535            payPalButton(element, paypalCheckoutInstance)
6536            {
6537                let self = this,
6538                    style = {
6539                        color: element.dataset.color,
6540                        shape: element.dataset.shape,
6541                        size: element.dataset.size,
6542                    };
6543
6544                if (element.dataset.fundingicons) {
6545                    style.fundingicons = element.dataset.fundingicons;
6546                }
6547
6548                // Render
6549                let paypalActions;
6550                let button = paypal.Buttons({
6551                    fundingSource: element.dataset.funding,
6552                    style: style,
6553
6554                    createOrder: function ()
6555                    {
6556                        return paypalCheckoutInstance.createPayment({
6557                            amount: element.dataset.amount,
6558                            locale: element.dataset.locale,
6559                            currency: element.dataset.currency,
6560                            flow: 'checkout',
6561                            enableShippingAddress: true,
6562                            displayName: element.dataset.displayname,
6563                        });
6564                    },
6565
6566                    validate: function(actions)
6567                    {
6568                        if (!self.customer.firstname && !self.isGuestCheckoutAllowed) {
6569                            actions.disable();
6570                        }
6571
6572                        paypalActions = actions;
6573                    },
6574
6575                    onCancel: function (data)
6576                    {
6577                        console.warn('paypalCheckout\u0020has\u0020been\u0020cancelled', data);
6578                    },
6579
6580                    onError: function (err)
6581                    {
6582                        console.error('paypalCheckout\u0020button\u0020render\u0020error', err);
6583                    },
6584
6585                    onClick: function(data)
6586                    {
6587                        if (!self.customer.firstname && !self.isGuestCheckoutAllowed) {
6588                            alert('To\u0020check\u0020out,\u0020please\u0020sign\u0020in\u0020with\u0020your\u0020email\u0020address.');
6589                        }
6590                    },
6591
6592                    onApprove: function (data1)
6593                    {
6594                        return paypalCheckoutInstance.tokenizePayment(data1, function(err, payload) {
6595                            // Map the shipping address correctly
6596                            var address = payload.details.shippingAddress,
6597                                recipientFirstName,
6598                                recipientLastName;
6599
6600                            if (typeof address.recipientName !== 'undefined') {
6601                                var recipientName = address.recipientName.split(" ");
6602
6603                                recipientFirstName = recipientName[0].replace(/'/g, "&apos;");
6604                                recipientLastName = recipientName[1].replace(/'/g, "&apos;");
6605                            } else {
6606                                recipientFirstName = payload.details.firstName.replace(/'/g, "&apos;");
6607                                recipientLastName = payload.details.lastName.replace(/'/g, "&apos;");
6608                            }
6609
6610                            payload.details.shippingAddress = {
6611                                streetAddress: typeof address.line2 !== 'undefined'
6612                                    ? address.line1.replace(/'/g, '&apos;') + ' ' + address.line2.replace(/'/g, '&apos;')
6613                                    : address.line1.replace(/'/g, '&apos;'),
6614                                locality: address.city.replace(/'/g, '&apos;'),
6615                                postalCode: address.postalCode,
6616                                countryCodeAlpha2: address.countryCode,
6617                                email: payload.details.email.replace(/'/g, '&apos;'),
6618                                recipientFirstName: recipientFirstName,
6619                                recipientLastName: recipientLastName,
6620                                telephone: typeof payload.details.phone !== 'undefined'
6621                                    ? payload.details.phone
6622                                    : '',
6623                                region: typeof address.state !== 'undefined'
6624                                    ? address.state.replace(/'/g, '&apos;')
6625                                    : '',
6626                            };
6627
6628                            if(element.dataset.location === 'productpage') {
6629                                var form = document.getElementById('product_addtocart_form');
6630
6631                                if (!form.checkValidity()) {
6632                                    return false;
6633                                }
6634
6635                                payload.additionalData = form.serialize();
6636                            }
6637
6638                            var actionSuccess = element.dataset.actionsuccess;
6639
6640                            self.buildForm(
6641                                actionSuccess,
6642                                {
6643                                    result: JSON.stringify(payload),
6644                                    form_key: hyva.getFormKey(),
6645                                }
6646                            );
6647                        });
6648                    }
6649                });
6650
6651                if (!button.isEligible()) {
6652                    element.parentNode.remove();
6653
6654                    return;
6655                }
6656
6657                // Clear element content prior to render to prevent duplicated buttons
6658                element.innerHTML = '';
6659                button.render(element);
6660            },
6661            renderpayPalMessages()
6662            {
6663                document.querySelectorAll('.action-braintree-paypal-message').forEach((container) => {
6664                    paypal.Messages({
6665                        amount: container.dataset['pp-amount'],
6666                        pageType: container.dataset['pp-type'],
6667                        style: {
6668                            layout: 'text',
6669                        },
6670                    }).render('#' + container.id);
6671                })
6672            },
6673            loadBraintreeSDK(token, currency, button)
6674            {
6675                let self = this;
6676
6677                if(!self.customer) {
6678                    const browserStorage = hyva.getBrowserStorage();
6679                    self.customer = {}; self.customer.firstname = browserStorage.getItem('paypal-customer-name');
6680                    self.isGuestCheckoutAllowed = browserStorage.getItem('paypal-guest-allowed');
6681                }
6682
6683                braintree.client.create({
6684                    authorization: token
6685                }, (clientErr, clientInstance) => {
6686                    if (clientErr) {
6687                        return console.error('paypalCheckout\u0020error', clientErr);
6688                    }
6689
6690                    self.loadScript('https://js.braintreegateway.com/web/3.88.1/js/data-collector.min.js', () => {
6691                        braintree.dataCollector.create({
6692                            client: clientInstance,
6693                            paypal: true
6694                        }, (err, dataCollectorinstance) => {
6695                            if (err) {
6696                                return console.error(err);
6697                            }
6698                        });
6699                    });
6700
6701                    self.loadScript('https://js.braintreegateway.com/web/3.88.1/js/paypal-checkout.min.js', () => {
6702                        braintree.paypalCheckout.create({
6703                            client: clientInstance
6704                        }, (err, paypalCheckoutInstance) => {
6705                            if (typeof paypal !== 'undefined' ) {
6706                                self.payPalButton(button, paypalCheckoutInstance);
6707                                self.renderpayPalMessages();
6708                            } else {
6709                                paypalCheckoutInstance.loadPayPalSDK({
6710                                    components: 'buttons,messages,funding-eligibility',
6711                                    currency: currency,
6712                                }, () => {
6713                                    self.payPalButton(button, paypalCheckoutInstance);
6714                                    self.renderpayPalMessages();
6715                                });
6716                            }
6717                        });
6718                    });
6719                });
6720            },
6721            setupButton(button)
6722            {
6723                this.loadBraintreeSDK(this.clientToken, this.currency, button);
6724            },
6725        }
6726    }
6727</script>
6727
6728
6729<script>
6730    function receiveCustomerSpecificPaypalData(event) {
6731        let browserStorage = hyva.getBrowserStorage();
6732        if(event.detail && event.detail.data){
6733            if(event.detail.data.cart){
6734                browserStorage.setItem('paypal-guest-allowed', event.detail.data.cart.isGuestCheckoutAllowed);
6735            }
6736            if(event.detail.data.customer) {
6737                browserStorage.setItem('paypal-customer-name', event.detail.data.customer.firstname);
6738            }
6739        }
6740    }
6741
6742    window.addEventListener('private-content-loaded', receiveCustomerSpecificPaypalData);
6743
6744</script>
vendor: 1 bytes, line 6744
6744
6745<script type="text/json" id="default-section-data">
6746    {"messages":[],"customer":[],"compare-products":[],"last-ordered-items":[],"requisition":[],"cart":[],"directory-data":{"AD":{"name":"Andorra"},"AE":{"name":"United Arab Emirates"},"AF":{"name":"Afghanistan"},"AG":{"name":"Antigua & Barbuda"},"AI":{"name":"Anguilla"},"AL":{"name":"Albania","regions":{"715":{"code":"AL-01","name":"Berat"},"718":{"code":"AL-09","name":"Dib\u00ebr"},"721":{"code":"AL-02","name":"Durr\u00ebs"},"724":{"code":"AL-03","name":"Elbasan"},"727":{"code":"AL-04","name":"Fier"},"730":{"code":"AL-05","name":"Gjirokast\u00ebr"},"733":{"code":"AL-06","name":"Kor\u00e7\u00eb"},"736":{"code":"AL-07","name":"Kuk\u00ebs"},"739":{"code":"AL-08","name":"Lezh\u00eb"},"742":{"code":"AL-10","name":"Shkod\u00ebr"},"745":{"code":"AL-11","name":"Tiran\u00eb"},"748":{"code":"AL-12","name":"Vlor\u00eb"}}},"AM":{"name":"Armenia"},"AO":{"name":"Angola"},"AQ":{"name":"Antarctica"},"AR":{"name":"Argentina","regions":{"754":{"code":"AR-B","name":"Buenos Aires"},"757":{"code":"AR-K","name":"Catamarca"},"760":{"code":"AR-H","name":"Chaco"},"763":{"code":"AR-U","name":"Chubut"},"751":{"code":"AR-C","name":"Ciudad Aut\u00f3noma de Buenos Aires"},"766":{"code":"AR-X","name":"C\u00f3rdoba"},"769":{"code":"AR-W","name":"Corrientes"},"772":{"code":"AR-E","name":"Entre R\u00edos"},"775":{"code":"AR-P","name":"Formosa"},"778":{"code":"AR-Y","name":"Jujuy"},"781":{"code":"AR-L","name":"La Pampa"},"784":{"code":"AR-F","name":"La Rioja"},"787":{"code":"AR-M","name":"Mendoza"},"790":{"code":"AR-N","name":"Misiones"},"793":{"code":"AR-Q","name":"Neuqu\u00e9n"},"796":{"code":"AR-R","name":"R\u00edo Negro"},"799":{"code":"AR-A","name":"Salta"},"802":{"code":"AR-J","name":"San Juan"},"805":{"code":"AR-D","name":"San Luis"},"808":{"code":"AR-Z","name":"Santa Cruz"},"811":{"code":"AR-S","name":"Santa Fe"},"814":{"code":"AR-G","name":"Santiago del Estero"},"817":{"code":"AR-V","name":"Tierra del Fuego"},"820":{"code":"AR-T","name":"Tucum\u00e1n"}}},"AS":{"name":"American Samoa"},"AT":{"name":"Austria","regions":{"102":{"code":"BL","name":"Burgenland"},"99":{"code":"KN","name":"K\u00e4rnten"},"96":{"code":"NO","name":"Nieder\u00f6sterreich"},"97":{"code":"OO","name":"Ober\u00f6sterreich"},"98":{"code":"SB","name":"Salzburg"},"100":{"code":"ST","name":"Steiermark"},"101":{"code":"TI","name":"Tirol"},"103":{"code":"VB","name":"Vorarlberg"},"95":{"code":"WI","name":"Wien"}}},"AU":{"name":"Australia","regions":{"692":{"code":"ACT","name":"Australian Capital Territory"},"695":{"code":"NSW","name":"New South Wales"},"713":{"code":"NT","name":"Northern Territory"},"701":{"code":"QLD","name":"Queensland"},"704":{"code":"SA","name":"South Australia"},"707":{"code":"TAS","name":"Tasmania"},"698":{"code":"VIC","name":"Victoria"},"710":{"code":"WA","name":"Western Australia"}}},"AW":{"name":"Aruba"},"AX":{"name":"\u00c5land Islands"},"AZ":{"name":"Azerbaijan"},"BA":{"name":"Bosnia & Herzegovina"},"BB":{"name":"Barbados"},"BD":{"name":"Bangladesh"},"BE":{"name":"Belgium","regions":{"844":{"code":"VAN","name":"Antwerpen"},"847":{"code":"WBR","name":"Brabant wallon"},"850":{"code":"BRU","name":"Brussels-Capital Region"},"853":{"code":"WHT","name":"Hainaut"},"859":{"code":"WLG","name":"Li\u00e8ge"},"856":{"code":"VLI","name":"Limburg"},"862":{"code":"WLX","name":"Luxembourg"},"865":{"code":"WNA","name":"Namur"},"868":{"code":"VOV","name":"Oost-Vlaanderen"},"871":{"code":"VBR","name":"Vlaams-Brabant"},"874":{"code":"VWV","name":"West-Vlaanderen"}}},"BF":{"name":"Burkina Faso"},"BG":{"name":"Bulgaria","regions":{"904":{"code":"BG-01","name":"Blagoevgrad"},"907":{"code":"BG-02","name":"Burgas"},"925":{"code":"BG-08","name":"Dobrich"},"922":{"code":"BG-07","name":"Gabrovo"},"979":{"code":"BG-26","name":"Haskovo"},"928":{"code":"BG-09","name":"Kardzhali"},"931":{"code":"BG-10","name":"Kyustendil"},"934":{"code":"BG-11","name":"Lovech"},"937":{"code":"BG-12","name":"Montana"},"940":{"code":"BG-13","name":"Pazardzhik"},"943":{"code":"BG-14","name":"Pernik"},"946":{"code":"BG-15","name":"Pleven"},"949":{"code":"BG-16","name":"Plovdiv"},"952":{"code":"BG-17","name":"Razgrad"},"955":{"code":"BG-18","name":"Ruse"},"982":{"code":"BG-27","name":"Shumen"},"958":{"code":"BG-19","name":"Silistra"},"961":{"code":"BG-20","name":"Sliven"},"964":{"code":"BG-21","name":"Smolyan"},"967":{"code":"BG-22","name":"Sofia City"},"970":{"code":"BG-23","name":"Sofia Province"},"973":{"code":"BG-24","name":"Stara Zagora"},"976":{"code":"BG-25","name":"Targovishte"},"910":{"code":"BG-03","name":"Varna"},"913":{"code":"BG-04","name":"Veliko Tarnovo"},"916":{"code":"BG-05","name":"Vidin"},"919":{"code":"BG-06","name":"Vratsa"},"985":{"code":"BG-28","name":"Yambol"}}},"BH":{"name":"Bahrain"},"BI":{"name":"Burundi"},"BJ":{"name":"Benin"},"BL":{"name":"St. Barth\u00e9lemy"},"BM":{"name":"Bermuda"},"BN":{"name":"Brunei"}
6746,"BO":{"name":"Bolivia","regions":{"880":{"code":"BO-H","name":"Chuquisaca"},"877":{"code":"BO-C","name":"Cochabamba"},"883":{"code":"BO-B","name":"El Beni"},"886":{"code":"BO-L","name":"La Paz"},"889":{"code":"BO-O","name":"Oruro"},"892":{"code":"BO-N","name":"Pando"},"895":{"code":"BO-P","name":"Potos\u00ed"},"898":{"code":"BO-S","name":"Santa Cruz"},"901":{"code":"BO-T","name":"Tarija"}}},"BR":{"name":"Brazil","regions":{"485":{"code":"AC","name":"Acre"},"486":{"code":"AL","name":"Alagoas"},"487":{"code":"AP","name":"Amap\u00e1"},"488":{"code":"AM","name":"Amazonas"},"489":{"code":"BA","name":"Bahia"},"490":{"code":"CE","name":"Cear\u00e1"},"511":{"code":"DF","name":"Distrito Federal"},"491":{"code":"ES","name":"Esp\u00edrito Santo"},"492":{"code":"GO","name":"Goi\u00e1s"},"493":{"code":"MA","name":"Maranh\u00e3o"},"494":{"code":"MT","name":"Mato Grosso"},"495":{"code":"MS","name":"Mato Grosso do Sul"},"496":{"code":"MG","name":"Minas Gerais"},"497":{"code":"PA","name":"Par\u00e1"},"498":{"code":"PB","name":"Para\u00edba"},"499":{"code":"PR","name":"Paran\u00e1"},"500":{"code":"PE","name":"Pernambuco"},"501":{"code":"PI","name":"Piau\u00ed"},"502":{"code":"RJ","name":"Rio de Janeiro"},"503":{"code":"RN","name":"Rio Grande do Norte"},"504":{"code":"RS","name":"Rio Grande do Sul"},"505":{"code":"RO","name":"Rond\u00f4nia"},"506":{"code":"RR","name":"Roraima"},"507":{"code":"SC","name":"Santa Catarina"},"508":{"code":"SP","name":"S\u00e3o Paulo"},"509":{"code":"SE","name":"Sergipe"},"510":{"code":"TO","name":"Tocantins"}}},"BS":{"name":"Bahamas"},"BT":{"name":"Bhutan"},"BV":{"name":"Bouvet Island"},"BW":{"name":"Botswana"},"BY":{"name":"Belarus","regions":{"823":{"code":"BY-BR","name":"Bresckaja voblas\u0107"},"826":{"code":"BY-HO","name":"Homie\u013askaja voblas\u0107"},"829":{"code":"BY-HM","name":"Horad Minsk"},"832":{"code":"BY-HR","name":"Hrodzienskaja voblas\u0107"},"835":{"code":"BY-MA","name":"Mahilio\u016dskaja voblas\u0107"},"838":{"code":"BY-MI","name":"Minskaja voblas\u0107"},"841":{"code":"BY-VI","name":"Viciebskaja voblas\u0107"}}},"BZ":{"name":"Belize"},"CA":{"name":"Canada","regions":{"66":{"code":"AB","name":"Alberta"},"67":{"code":"BC","name":"British Columbia"},"68":{"code":"MB","name":"Manitoba"},"70":{"code":"NB","name":"New Brunswick"},"69":{"code":"NL","name":"Newfoundland and Labrador"},"72":{"code":"NT","name":"Northwest Territories"},"71":{"code":"NS","name":"Nova Scotia"},"73":{"code":"NU","name":"Nunavut"},"74":{"code":"ON","name":"Ontario"},"75":{"code":"PE","name":"Prince Edward Island"},"76":{"code":"QC","name":"Quebec"},"77":{"code":"SK","name":"Saskatchewan"},"78":{"code":"YT","name":"Yukon Territory"}}},"CC":{"name":"Cocos (Keeling) Islands"},"CD":{"name":"Congo - Kinshasa"},"CF":{"name":"Central African Republic"},"CG":{"name":"Congo - Brazzaville"},"CH":{"name":"Switzerland","regions":{"104":{"code":"AG","name":"Aargau"},"106":{"code":"AR","name":"Appenzell Ausserrhoden"},"105":{"code":"AI","name":"Appenzell Innerrhoden"},"108":{"code":"BL","name":"Basel-Landschaft"},"109":{"code":"BS","name":"Basel-Stadt"},"107":{"code":"BE","name":"Bern"},"110":{"code":"FR","name":"Friburg"},"111":{"code":"GE","name":"Geneva"},"112":{"code":"GL","name":"Glarus"},"113":{"code":"GR","name":"Graub\u00fcnden"},"114":{"code":"JU","name":"Jura"},"115":{"code":"LU","name":"Lucerne"},"116":{"code":"NE","name":"Neuch\u00e2tel"},"117":{"code":"NW","name":"Nidwalden"},"118":{"code":"OW","name":"Obwalden"},"120":{"code":"SH","name":"Schaffhausen"},"122":{"code":"SZ","name":"Schwyz"},"121":{"code":"SO","name":"Solothurn"},"119":{"code":"SG","name":"St. Gallen"},"123":{"code":"TG","name":"Thurgau"},"124":{"code":"TI","name":"Ticino"},"125":{"code":"UR","name":"Uri"},"126":{"code":"VD","name":"Vaud"},"127":{"code":"VS","name":"Wallis"},"128":{"code":"ZG","name":"Zug"},"129":{"code":"ZH","name":"Z\u00fcrich"}}},"CI":{"name":"C\u00f4te d\u2019Ivoire"},"CK":{"name":"Cook Islands"},"CL":{"name":"Chile","regions":{"988":{"code":"CL-AI","name":"Ais\u00e9n del General Carlos Iba\u00f1ez del Campo"},"991":{"code":"CL-AN","name":"Antofagasta"},"994":{"code":"CL-AP","name":"Arica y Parinacota"},"1000":{"code":"CL-AT","name":"Atacama"},"1003":{"code":"CL-BI","name":"Biob\u00edo"},"1006":{"code":"CL-CO","name":"Coquimbo"},"997":{"code":"CL-AR","name":"La Araucan\u00eda"},"1009":{"code":"CL-LI","name":"Libertador General Bernardo O'Higgins"}
6746,"1012":{"code":"CL-LL","name":"Los Lagos"},"1015":{"code":"CL-LR","name":"Los R\u00edos"},"1018":{"code":"CL-MA","name":"Magallanes"},"1021":{"code":"CL-ML","name":"Maule"},"1024":{"code":"CL-NB","name":"\u00d1uble"},"1027":{"code":"CL-RM","name":"Regi\u00f3n Metropolitana de Santiago"},"1030":{"code":"CL-TA","name":"Tarapac\u00e1"},"1033":{"code":"CL-VS","name":"Valpara\u00edso"}}},"CM":{"name":"Cameroon"},"CN":{"name":"China","regions":{"1036":{"code":"CN-AH","name":"Anhui Sheng"},"1039":{"code":"CN-BJ","name":"Beijing Shi"},"1042":{"code":"CN-CQ","name":"Chongqing Shi"},"1045":{"code":"CN-FJ","name":"Fujian Sheng"},"1048":{"code":"CN-GS","name":"Gansu Sheng"},"1051":{"code":"CN-GD","name":"Guangdong Sheng"},"1054":{"code":"CN-GX","name":"Guangxi Zhuangzu Zizhiqu"},"1057":{"code":"CN-GZ","name":"Guizhou Sheng"},"1060":{"code":"CN-HI","name":"Hainan Sheng"},"1063":{"code":"CN-HE","name":"Hebei Sheng"},"1066":{"code":"CN-HL","name":"Heilongjiang Sheng"},"1069":{"code":"CN-HA","name":"Henan Sheng"},"1072":{"code":"CN-HK","name":"Hong Kong SAR"},"1075":{"code":"CN-HB","name":"Hubei Sheng"},"1078":{"code":"CN-HN","name":"Hunan Sheng"},"1081":{"code":"CN-JS","name":"Jiangsu Sheng"},"1084":{"code":"CN-JX","name":"Jiangxi Sheng"},"1087":{"code":"CN-JL","name":"Jilin Sheng"},"1090":{"code":"CN-LN","name":"Liaoning Sheng"},"1093":{"code":"CN-MO","name":"Macao SAR"},"1096":{"code":"CN-NM","name":"Nei Mongol Zizhiqu"},"1099":{"code":"CN-NX","name":"Ningxia Huizi Zizhiqu"},"1102":{"code":"CN-QH","name":"Qinghai Sheng"},"1105":{"code":"CN-SN","name":"Shaanxi Sheng"},"1108":{"code":"CN-SD","name":"Shandong Sheng"},"1111":{"code":"CN-SH","name":"Shanghai Shi"},"1114":{"code":"CN-SX","name":"Shanxi Sheng"},"1117":{"code":"CN-SC","name":"Sichuan Sheng"},"1120":{"code":"CN-TW","name":"Taiwan Sheng"},"1123":{"code":"CN-TJ","name":"Tianjin Shi"},"1126":{"code":"CN-XJ","name":"Xinjiang Uygur Zizhiqu"},"1129":{"code":"CN-XZ","name":"Xizang Zizhiqu"},"1132":{"code":"CN-YN","name":"Yunnan Sheng"},"1135":{"code":"CN-ZJ","name":"Zhejiang Sheng"}}},"CO":{"name":"Colombia","regions":{"1138":{"code":"CO-AMA","name":"Amazonas"},"1141":{"code":"CO-ANT","name":"Antioquia"},"1144":{"code":"CO-ARA","name":"Arauca"},"1147":{"code":"CO-ATL","name":"Atl\u00e1ntico"},"1150":{"code":"CO-BOL","name":"Bol\u00edvar"},"1153":{"code":"CO-BOY","name":"Boyac\u00e1"},"1156":{"code":"CO-CAL","name":"Caldas"},"1159":{"code":"CO-CAQ","name":"Caquet\u00e1"},"1162":{"code":"CO-CAS","name":"Casanare"},"1165":{"code":"CO-CAU","name":"Cauca"},"1168":{"code":"CO-CES","name":"Cesar"},"1171":{"code":"CO-CHO","name":"Choc\u00f3"},"1174":{"code":"CO-COR","name":"C\u00f3rdoba"},"1177":{"code":"CO-CUN","name":"Cundinamarca"},"1180":{"code":"CO-GUA","name":"Guain\u00eda"},"1183":{"code":"CO-GUV","name":"Guaviare"},"1186":{"code":"CO-HUL","name":"Huila"},"1189":{"code":"CO-LAG","name":"La Guajira"},"1192":{"code":"CO-MAG","name":"Magdalena"},"1195":{"code":"CO-MET","name":"Meta"},"1198":{"code":"CO-NAR","name":"Nari\u00f1o"},"1201":{"code":"CO-NSA","name":"Norte de Santander"},"1204":{"code":"CO-PUT","name":"Putumayo"},"1207":{"code":"CO-QUI","name":"Quind\u00edo"},"1210":{"code":"CO-RIS","name":"Risaralda"},"1213":{"code":"CO-SAP","name":"San Andr\u00e9s y Providencia"},"1216":{"code":"CO-SAN","name":"Santander"},"1219":{"code":"CO-SUC","name":"Sucre"},"1222":{"code":"CO-TOL","name":"Tolima"},"1225":{"code":"CO-VAC","name":"Valle del Cauca"},"1228":{"code":"CO-VAU","name":"Vaup\u00e9s"},"1231":{"code":"CO-VID","name":"Vichada"}}},"CR":{"name":"Costa Rica"},"CU":{"name":"Cuba"},"CV":{"name":"Cape Verde"},"CX":{"name":"Christmas Island"},"CY":{"name":"Cyprus"},"CZ":{"name":"Czechia"},"DE":{"name":"Germany","regions":{"80":{"code":"BAW","name":"Baden-W\u00fcrttemberg"},"81":{"code":"BAY","name":"Bayern"},"82":{"code":"BER","name":"Berlin"},"83":{"code":"BRG","name":"Brandenburg"},"84":{"code":"BRE","name":"Bremen"},"85":{"code":"HAM","name":"Hamburg"},"86":{"code":"HES","name":"Hessen"},"87":{"code":"MEC","name":"Mecklenburg-Vorpommern"},"79":{"code":"NDS","name":"Niedersachsen"},"88":{"code":"NRW","name":"Nordrhein-Westfalen"},"89":{"code":"RHE","name":"Rheinland-Pfalz"},"90":{"code":"SAR","name":"Saarland"},"91":{"code":"SAS","name":"Sachsen"},"92":{"code":"SAC","name":"Sachsen-Anhalt"},"93":{"code":"SCN","name":"Schleswig-Holstein"},"94":{"code":"THE","name":"Th\u00fcringen"}}},"DJ":{"name":"Djibouti"},"DK":{"name":"Denmark","regions":{"1234":{"code":"DK-84","name":"Hovedstaden"},"1237":{"code":"DK-82","name":"Midtjylland"},"1240":{"code":"DK-81","name":"Nordjylland"},"1243":{"code":"DK-85","name":"Sj\u00e6lland"},"1246":{"code":"DK-83","name":"Syddanmark"}}},"DM":{"name":"Dominica"}
6746,"DO":{"name":"Dominican Republic"},"DZ":{"name":"Algeria"},"EC":{"name":"Ecuador","regions":{"1249":{"code":"EC-A","name":"Azuay"},"1252":{"code":"EC-B","name":"Bol\u00edvar"},"1255":{"code":"EC-F","name":"Ca\u00f1ar"},"1258":{"code":"EC-C","name":"Carchi"},"1261":{"code":"EC-H","name":"Chimborazo"},"1264":{"code":"EC-X","name":"Cotopaxi"},"1267":{"code":"EC-O","name":"El Oro"},"1270":{"code":"EC-E","name":"Esmeraldas"},"1273":{"code":"EC-W","name":"Gal\u00e1pagos"},"1276":{"code":"EC-G","name":"Guayas"},"1279":{"code":"EC-I","name":"Imbabura"},"1282":{"code":"EC-L","name":"Loja"},"1285":{"code":"EC-R","name":"Los R\u00edos"},"1288":{"code":"EC-M","name":"Manab\u00ed"},"1291":{"code":"EC-S","name":"Morona Santiago"},"1294":{"code":"EC-N","name":"Napo"},"1297":{"code":"EC-D","name":"Orellana"},"1300":{"code":"EC-Y","name":"Pastaza"},"1303":{"code":"EC-P","name":"Pichincha"},"1306":{"code":"EC-SE","name":"Santa Elena"},"1309":{"code":"EC-SD","name":"Santo Domingo de los Ts\u00e1chilas"},"1312":{"code":"EC-U","name":"Sucumb\u00edos"},"1315":{"code":"EC-T","name":"Tungurahua"},"1318":{"code":"EC-Z","name":"Zamora Chinchipe"}}},"EE":{"name":"Estonia","regions":{"340":{"code":"EE-37","name":"Harjumaa"},"341":{"code":"EE-39","name":"Hiiumaa"},"342":{"code":"EE-44","name":"Ida-Virumaa"},"344":{"code":"EE-51","name":"J\u00e4rvamaa"},"343":{"code":"EE-49","name":"J\u00f5gevamaa"},"346":{"code":"EE-59","name":"L\u00e4\u00e4ne-Virumaa"},"345":{"code":"EE-57","name":"L\u00e4\u00e4nemaa"},"348":{"code":"EE-67","name":"P\u00e4rnumaa"},"347":{"code":"EE-65","name":"P\u00f5lvamaa"},"349":{"code":"EE-70","name":"Raplamaa"},"350":{"code":"EE-74","name":"Saaremaa"},"351":{"code":"EE-78","name":"Tartumaa"},"352":{"code":"EE-82","name":"Valgamaa"},"353":{"code":"EE-84","name":"Viljandimaa"},"354":{"code":"EE-86","name":"V\u00f5rumaa"}}},"EG":{"name":"Egypt"},"EH":{"name":"Western Sahara"},"ER":{"name":"Eritrea"},"ES":{"name":"Spain","regions":{"130":{"code":"A Coru\u0441a","name":"A Coru\u00f1a"},"131":{"code":"Alava","name":"Alava"},"132":{"code":"Albacete","name":"Albacete"},"133":{"code":"Alicante","name":"Alicante"},"134":{"code":"Almeria","name":"Almeria"},"135":{"code":"Asturias","name":"Asturias"},"136":{"code":"Avila","name":"Avila"},"137":{"code":"Badajoz","name":"Badajoz"},"138":{"code":"Baleares","name":"Baleares"},"139":{"code":"Barcelona","name":"Barcelona"},"140":{"code":"Burgos","name":"Burgos"},"141":{"code":"Caceres","name":"Caceres"},"142":{"code":"Cadiz","name":"Cadiz"},"143":{"code":"Cantabria","name":"Cantabria"},"144":{"code":"Castellon","name":"Castellon"},"145":{"code":"Ceuta","name":"Ceuta"},"146":{"code":"Ciudad Real","name":"Ciudad Real"},"147":{"code":"Cordoba","name":"Cordoba"},"148":{"code":"Cuenca","name":"Cuenca"},"149":{"code":"Girona","name":"Girona"},"150":{"code":"Granada","name":"Granada"},"151":{"code":"Guadalajara","name":"Guadalajara"},"152":{"code":"Guipuzcoa","name":"Guipuzcoa"},"153":{"code":"Huelva","name":"Huelva"},"154":{"code":"Huesca","name":"Huesca"},"155":{"code":"Jaen","name":"Jaen"},"156":{"code":"La Rioja","name":"La Rioja"},"157":{"code":"Las Palmas","name":"Las Palmas"},"158":{"code":"Leon","name":"Leon"},"159":{"code":"Lleida","name":"Lleida"},"160":{"code":"Lugo","name":"Lugo"},"161":{"code":"Madrid","name":"Madrid"},"162":{"code":"Malaga","name":"Malaga"},"163":{"code":"Melilla","name":"Melilla"},"164":{"code":"Murcia","name":"Murcia"},"165":{"code":"Navarra","name":"Navarra"},"166":{"code":"Ourense","name":"Ourense"},"167":{"code":"Palencia","name":"Palencia"},"168":{"code":"Pontevedra","name":"Pontevedra"},"169":{"code":"Salamanca","name":"Salamanca"},"170":{"code":"Santa Cruz de Tenerife","name":"Santa Cruz de Tenerife"},"171":{"code":"Segovia","name":"Segovia"},"172":{"code":"Sevilla","name":"Sevilla"},"173":{"code":"Soria","name":"Soria"},"174":{"code":"Tarragona","name":"Tarragona"},"175":{"code":"Teruel","name":"Teruel"},"176":{"code":"Toledo","name":"Toledo"},"177":{"code":"Valencia","name":"Valencia"},"178":{"code":"Valladolid","name":"Valladolid"},"179":{"code":"Vizcaya","name":"Vizcaya"},"180":{"code":"Zamora","name":"Zamora"},"181":{"code":"Zaragoza","name":"Zaragoza"}}},"ET":{"name":"Ethiopia"},"FI":{"name":"Finland","regions":{"339":{"code":"Ahvenanmaa","name":"Ahvenanmaa"},"333":{"code":"Etel\u00e4-Karjala","name":"Etel\u00e4-Karjala"},"326":{"code":"Etel\u00e4-Pohjanmaa","name":"Etel\u00e4-Pohjanmaa"},"325":{"code":"Etel\u00e4-Savo","name":"Etel\u00e4-Savo"},"337":{"code":"It\u00e4-Uusimaa","name":"It\u00e4-Uusimaa"},"322":{"code":"Kainuu","name":"Kainuu"},"335":{"code":"Kanta-H\u00e4me","name":"Kanta-H\u00e4me"},"330":{"code":"Keski-Pohjanmaa","name":"Keski-Pohjanmaa"},"331":{"code":"Keski-Suomi","name":"Keski-Suomi"},"338":{"code":"Kymenlaakso","name":"Kymenlaakso"},"320":{"code":"Lappi","name":"Lappi"},"334":{"code":"P\u00e4ij\u00e4t-H\u00e4me","name":"P\u00e4ij\u00e4t-H\u00e4me"},"328":{"code":"Pirkanmaa","name":"Pirkanmaa"},"327":{"code":"Pohjanmaa","name":"Pohjanmaa"},"323":{"code":"Pohjois-Karjala","name":"Pohjois-Karjala"},"321":{"code":"Pohjois-Pohjanmaa","name":"Pohjois-Pohjanmaa"},"324":{"code":"Pohjois-Savo","name":"Pohjois-Savo"},"329":{"code":"Satakunta","name":"Satakunta"},"336":{"code":"Uusimaa","name":"Uusimaa"},"332":{"code":"Varsinais-Suomi","name":"Varsinais-Suomi"}}},"FJ":{"name":"Fiji"},"FK":{"name":"Falkland Islands"},"FM":{"name":"Micronesia"},"FO":{"name":"Faroe Islands"},"FR":{"name":"France","regions":{"182":{"code":"1","name":"Ain"},"183":{"code":"2","name":"Aisne"},"184":{"code":"3","name":"Allier"}
6746,"185":{"code":"4","name":"Alpes-de-Haute-Provence"},"187":{"code":"6","name":"Alpes-Maritimes"},"188":{"code":"7","name":"Ard\u00e8che"},"189":{"code":"8","name":"Ardennes"},"190":{"code":"9","name":"Ari\u00e8ge"},"191":{"code":"10","name":"Aube"},"192":{"code":"11","name":"Aude"},"193":{"code":"12","name":"Aveyron"},"249":{"code":"67","name":"Bas-Rhin"},"194":{"code":"13","name":"Bouches-du-Rh\u00f4ne"},"195":{"code":"14","name":"Calvados"},"196":{"code":"15","name":"Cantal"},"197":{"code":"16","name":"Charente"},"198":{"code":"17","name":"Charente-Maritime"},"199":{"code":"18","name":"Cher"},"200":{"code":"19","name":"Corr\u00e8ze"},"201":{"code":"2A","name":"Corse-du-Sud"},"203":{"code":"21","name":"C\u00f4te-d'Or"},"204":{"code":"22","name":"C\u00f4tes-d'Armor"},"205":{"code":"23","name":"Creuse"},"261":{"code":"79","name":"Deux-S\u00e8vres"},"206":{"code":"24","name":"Dordogne"},"207":{"code":"25","name":"Doubs"},"208":{"code":"26","name":"Dr\u00f4me"},"273":{"code":"91","name":"Essonne"},"209":{"code":"27","name":"Eure"},"210":{"code":"28","name":"Eure-et-Loir"},"211":{"code":"29","name":"Finist\u00e8re"},"212":{"code":"30","name":"Gard"},"214":{"code":"32","name":"Gers"},"215":{"code":"33","name":"Gironde"},"250":{"code":"68","name":"Haut-Rhin"},"202":{"code":"2B","name":"Haute-Corse"},"213":{"code":"31","name":"Haute-Garonne"},"225":{"code":"43","name":"Haute-Loire"},"234":{"code":"52","name":"Haute-Marne"},"252":{"code":"70","name":"Haute-Sa\u00f4ne"},"256":{"code":"74","name":"Haute-Savoie"},"269":{"code":"87","name":"Haute-Vienne"},"186":{"code":"5","name":"Hautes-Alpes"},"247":{"code":"65","name":"Hautes-Pyr\u00e9n\u00e9es"},"274":{"code":"92","name":"Hauts-de-Seine"},"216":{"code":"34","name":"H\u00e9rault"},"217":{"code":"35","name":"Ille-et-Vilaine"},"218":{"code":"36","name":"Indre"},"219":{"code":"37","name":"Indre-et-Loire"},"220":{"code":"38","name":"Is\u00e8re"},"221":{"code":"39","name":"Jura"},"222":{"code":"40","name":"Landes"},"223":{"code":"41","name":"Loir-et-Cher"},"224":{"code":"42","name":"Loire"},"226":{"code":"44","name":"Loire-Atlantique"},"227":{"code":"45","name":"Loiret"},"228":{"code":"46","name":"Lot"},"229":{"code":"47","name":"Lot-et-Garonne"},"230":{"code":"48","name":"Loz\u00e8re"},"231":{"code":"49","name":"Maine-et-Loire"},"232":{"code":"50","name":"Manche"},"233":{"code":"51","name":"Marne"},"235":{"code":"53","name":"Mayenne"},"236":{"code":"54","name":"Meurthe-et-Moselle"},"237":{"code":"55","name":"Meuse"},"238":{"code":"56","name":"Morbihan"},"239":{"code":"57","name":"Moselle"},"240":{"code":"58","name":"Ni\u00e8vre"},"241":{"code":"59","name":"Nord"},"242":{"code":"60","name":"Oise"},"243":{"code":"61","name":"Orne"},"257":{"code":"75","name":"Paris"},"244":{"code":"62","name":"Pas-de-Calais"},"245":{"code":"63","name":"Puy-de-D\u00f4me"},"246":{"code":"64","name":"Pyr\u00e9n\u00e9es-Atlantiques"},"248":{"code":"66","name":"Pyr\u00e9n\u00e9es-Orientales"},"251":{"code":"69","name":"Rh\u00f4ne"},"253":{"code":"71","name":"Sa\u00f4ne-et-Loire"},"254":{"code":"72","name":"Sarthe"},"255":{"code":"73","name":"Savoie"},"259":{"code":"77","name":"Seine-et-Marne"},"258":{"code":"76","name":"Seine-Maritime"},"275":{"code":"93","name":"Seine-Saint-Denis"},"262":{"code":"80","name":"Somme"},"263":{"code":"81","name":"Tarn"},"264":{"code":"82","name":"Tarn-et-Garonne"},"272":{"code":"90","name":"Territoire-de-Belfort"},"277":{"code":"95","name":"Val-d'Oise"},"276":{"code":"94","name":"Val-de-Marne"},"265":{"code":"83","name":"Var"},"266":{"code":"84","name":"Vaucluse"},"267":{"code":"85","name":"Vend\u00e9e"},"268":{"code":"86","name":"Vienne"},"270":{"code":"88","name":"Vosges"},"271":{"code":"89","name":"Yonne"},"260":{"code":"78","name":"Yvelines"}}},"GA":{"name":"Gabon"},"GB":{"name":"United Kingdom"},"GD":{"name":"Grenada"},"GE":{"name":"Georgia"},"GF":{"name":"French Guiana"},"GG":{"name":"Guernsey"},"GH":{"name":"Ghana"},"GI":{"name":"Gibraltar"},"GL":{"name":"Greenland"},"GM":{"name":"Gambia"},"GN":{"name":"Guinea"},"GP":{"name":"Guadeloupe"},"GQ":{"name":"Equatorial Guinea"},"GR":{"name":"Greece","regions":{"1360":{"code":"GR-69","name":"\u00c1gion \u00d3ros"},"1321":{"code":"GR-A","name":"Anatolik\u00ed Makedon\u00eda kai Thr\u00e1ki"},"1324":{"code":"GR-I","name":"Attik\u00ed"},"1327":{"code":"GR-G","name":"Dytik\u00ed Ell\u00e1da"},"1330":{"code":"GR-C","name":"Dytik\u00ed Makedon\u00eda"},"1333":{"code":"GR-F","name":"Ion\u00eda N\u00edsia"},"1336":{"code":"GR-D","name":"\u00cdpeiros"},"1339":{"code":"GR-B","name":"Kentrik\u00ed Makedon\u00eda"},"1342":{"code":"GR-M","name":"Kr\u00edti"},"1345":{"code":"GR-L","name":"N\u00f3tio Aiga\u00edo"},"1348":{"code":"GR-J","name":"Pelop\u00f3nnisos"},"1351":{"code":"GR-H","name":"Stere\u00e1 Ell\u00e1da"}
6746,"1354":{"code":"GR-E","name":"Thessal\u00eda"},"1357":{"code":"GR-K","name":"V\u00f3reio Aiga\u00edo"}}},"GS":{"name":"South Georgia & South Sandwich Islands"},"GT":{"name":"Guatemala"},"GU":{"name":"Guam"},"GW":{"name":"Guinea-Bissau"},"GY":{"name":"Guyana","regions":{"1363":{"code":"GY-BA","name":"Barima-Waini"},"1366":{"code":"GY-CU","name":"Cuyuni-Mazaruni"},"1369":{"code":"GY-DE","name":"Demerara-Mahaica"},"1372":{"code":"GY-EB","name":"East Berbice-Corentyne"},"1375":{"code":"GY-ES","name":"Essequibo Islands-West Demerara"},"1378":{"code":"GY-MA","name":"Mahaica-Berbice"},"1381":{"code":"GY-PM","name":"Pomeroon-Supenaam"},"1384":{"code":"GY-PT","name":"Potaro-Siparuni"},"1387":{"code":"GY-UD","name":"Upper Demerara-Berbice"},"1390":{"code":"GY-UT","name":"Upper Takutu-Upper Essequibo"}}},"HK":{"name":"Hong Kong SAR China"},"HM":{"name":"Heard & McDonald Islands"},"HN":{"name":"Honduras"},"HR":{"name":"Croatia","regions":{"535":{"code":"HR-07","name":"Bjelovarsko-bilogorska \u017eupanija"},"550":{"code":"HR-12","name":"Brodsko-posavska \u017eupanija"},"571":{"code":"HR-19","name":"Dubrova\u010dko-neretvanska \u017eupanija"},"577":{"code":"HR-21","name":"Grad Zagreb"},"568":{"code":"HR-18","name":"Istarska \u017eupanija"},"526":{"code":"HR-04","name":"Karlova\u010dka \u017eupanija"},"532":{"code":"HR-06","name":"Koprivni\u010dko-kri\u017eeva\u010dka \u017eupanija"},"520":{"code":"HR-02","name":"Krapinsko-zagorska \u017eupanija"},"541":{"code":"HR-09","name":"Li\u010dko-senjska \u017eupanija"},"574":{"code":"HR-20","name":"Me\u0111imurska \u017eupanija"},"556":{"code":"HR-14","name":"Osje\u010dko-baranjska \u017eupanija"},"547":{"code":"HR-11","name":"Po\u017ee\u0161ko-slavonska \u017eupanija"},"538":{"code":"HR-08","name":"Primorsko-goranska \u017eupanija"},"559":{"code":"HR-15","name":"\u0160ibensko-kninska \u017eupanija"},"523":{"code":"HR-03","name":"Sisa\u010dko-moslava\u010dka \u017eupanija"},"565":{"code":"HR-17","name":"Splitsko-dalmatinska \u017eupanija"},"529":{"code":"HR-05","name":"Vara\u017edinska \u017eupanija"},"544":{"code":"HR-10","name":"Viroviti\u010dko-podravska \u017eupanija"},"562":{"code":"HR-16","name":"Vukovarsko-srijemska \u017eupanija"},"553":{"code":"HR-13","name":"Zadarska \u017eupanija"},"517":{"code":"HR-01","name":"Zagreba\u010dka \u017eupanija"}}},"HT":{"name":"Haiti"},"HU":{"name":"Hungary"},"ID":{"name":"Indonesia"},"IE":{"name":"Ireland"},"IL":{"name":"Israel"},"IM":{"name":"Isle of Man"},"IN":{"name":"India","regions":{"582":{"code":"AN","name":"Andaman and Nicobar Islands"},"585":{"code":"AP","name":"Andhra Pradesh"},"588":{"code":"AR","name":"Arunachal Pradesh"},"591":{"code":"AS","name":"Assam"},"594":{"code":"BR","name":"Bihar"},"597":{"code":"CH","name":"Chandigarh"},"600":{"code":"CT","name":"Chhattisgarh"},"603":{"code":"DN","name":"Dadra and Nagar Haveli"},"606":{"code":"DD","name":"Daman and Diu"},"609":{"code":"DL","name":"Delhi"},"612":{"code":"GA","name":"Goa"},"615":{"code":"GJ","name":"Gujarat"},"618":{"code":"HR","name":"Haryana"},"621":{"code":"HP","name":"Himachal Pradesh"},"624":{"code":"JK","name":"Jammu and Kashmir"},"627":{"code":"JH","name":"Jharkhand"},"630":{"code":"KA","name":"Karnataka"},"633":{"code":"KL","name":"Kerala"},"636":{"code":"LD","name":"Lakshadweep"},"639":{"code":"MP","name":"Madhya Pradesh"},"642":{"code":"MH","name":"Maharashtra"},"645":{"code":"MN","name":"Manipur"},"648":{"code":"ML","name":"Meghalaya"},"651":{"code":"MZ","name":"Mizoram"},"654":{"code":"NL","name":"Nagaland"},"657":{"code":"OR","name":"Odisha"},"660":{"code":"PY","name":"Puducherry"},"663":{"code":"PB","name":"Punjab"},"666":{"code":"RJ","name":"Rajasthan"},"669":{"code":"SK","name":"Sikkim"},"672":{"code":"TN","name":"Tamil Nadu"},"675":{"code":"TG","name":"Telangana"},"678":{"code":"TR","name":"Tripura"},"681":{"code":"UP","name":"Uttar Pradesh"},"684":{"code":"UT","name":"Uttarakhand"},"687":{"code":"WB","name":"West Bengal"}}},"IO":{"name":"British Indian Ocean Territory"},"IQ":{"name":"Iraq"},"IR":{"name":"Iran"},"IS":{"name":"Iceland","regions":{"1411":{"code":"IS-07","name":"Austurland"},"1393":{"code":"IS-01","name":"H\u00f6fu\u00f0borgarsv\u00e6\u00f0i"},"1408":{"code":"IS-06","name":"Nor\u00f0urland eystra"},"1405":{"code":"IS-05","name":"Nor\u00f0urland vestra"},"1414":{"code":"IS-08","name":"Su\u00f0urland"},"1396":{"code":"IS-02","name":"Su\u00f0urnes"},"1402":{"code":"IS-04","name":"Vestfir\u00f0ir"},"1399":{"code":"IS-03","name":"Vesturland"}}},"IT":{"name":"Italy","regions":{"1417":{"code":"AG","name":"Agrigento"},"1420":{"code":"AL","name":"Alessandria"},"1423":{"code":"AN","name":"Ancona"},"1426":{"code":"AO","name":"Aosta"},"1432":{"code":"AR","name":"Arezzo"},"1435":{"code":"AP","name":"Ascoli-Piceno"},"1438":{"code":"AT","name":"Asti"},"1441":{"code":"AV","name":"Avellino"},"1444":{"code":"BA","name":"Bari"},"1447":{"code":"BT","name":"Barletta-Andria-Trani"},"1450":{"code":"BL","name":"Belluno"},"1453":{"code":"BN","name":"Benevento"},"1456":{"code":"BG","name":"Bergamo"},"1459":{"code":"BI","name":"Biella"},"1462":{"code":"BO","name":"Bologna"},"1465":{"code":"BZ","name":"Bolzano"},"1468":{"code":"BS","name":"Brescia"},"1471":{"code":"BR","name":"Brindisi"},"1474":{"code":"CA","name":"Cagliari"},"1477":{"code":"CL","name":"Caltanissetta"},"1480":{"code":"CB","name":"Campobasso"},"1483":{"code":"CI","name":"Carbonia Iglesias"},"1486":{"code":"CE","name":"Caserta"},"1489":{"code":"CT","name":"Catania"},"1492":{"code":"CZ","name":"Catanzaro"},"1495":{"code":"CH","name":"Chieti"},"1498":{"code":"CO","name":"Como"},"1501":{"code":"CS","name":"Cosenza"},"1504":{"code":"CR","name":"Cremona"},"1507":{"code":"KR","name":"Crotone"},"1510":{"code":"CN","name":"Cuneo"},"1513":{"code":"EN","name":"Enna"},"1516":{"code":"FM","name":"Fermo"},"1519":{"code":"FE","name":"Ferrara"},"1522":{"code":"FI","name":"Firenze"},"1525":{"code":"FG","name":"Foggia"},"1528":{"code":"FC","name":"Forli-Cesena"},"1531":{"code":"FR","name":"Frosinone"},"1534":{"code":"GE","name":"Genova"},"1537":{"code":"GO","name":"Gorizia"},"1540":{"code":"GR","name":"Grosseto"},"1543":{"code":"IM","name":"Imperia"},"1546":{"code":"IS","name":"Isernia"},"1429":{"code":"AQ","name":"L'Aquila"},"1549":{"code":"SP","name":"La-Spezia"},"1552":{"code":"LT","name":"Latina"},"1555":{"code":"LE","name":"Lecce"},"1558":{"code":"LC","name":"Lecco"},"1561":{"code":"LI","name":"Livorno"},"1564":{"code":"LO","name":"Lodi"},"1567":{"code":"LU","name":"Lucca"},"1570":{"code":"MC","name":"Macerata"},"1573":{"code":"MN","name":"Mantova"},"1576":{"code":"MS","name":"Massa-Carrara"}
6746,"1579":{"code":"MT","name":"Matera"},"1582":{"code":"VS","name":"Medio Campidano"},"1585":{"code":"ME","name":"Messina"},"1588":{"code":"MI","name":"Milano"},"1591":{"code":"MO","name":"Modena"},"1594":{"code":"MB","name":"Monza-Brianza"},"1597":{"code":"NA","name":"Napoli"},"1600":{"code":"NO","name":"Novara"},"1603":{"code":"NU","name":"Nuoro"},"1606":{"code":"OG","name":"Ogliastra"},"1609":{"code":"OT","name":"Olbia Tempio"},"1612":{"code":"OR","name":"Oristano"},"1615":{"code":"PD","name":"Padova"},"1618":{"code":"PA","name":"Palermo"},"1621":{"code":"PR","name":"Parma"},"1624":{"code":"PV","name":"Pavia"},"1627":{"code":"PG","name":"Perugia"},"1630":{"code":"PU","name":"Pesaro-Urbino"},"1633":{"code":"PE","name":"Pescara"},"1636":{"code":"PC","name":"Piacenza"},"1639":{"code":"PI","name":"Pisa"},"1642":{"code":"PT","name":"Pistoia"},"1645":{"code":"PN","name":"Pordenone"},"1648":{"code":"PZ","name":"Potenza"},"1651":{"code":"PO","name":"Prato"},"1654":{"code":"RG","name":"Ragusa"},"1657":{"code":"RA","name":"Ravenna"},"1660":{"code":"RC","name":"Reggio-Calabria"},"1663":{"code":"RE","name":"Reggio-Emilia"},"1666":{"code":"RI","name":"Rieti"},"1669":{"code":"RN","name":"Rimini"},"1672":{"code":"RM","name":"Roma"},"1675":{"code":"RO","name":"Rovigo"},"1678":{"code":"SA","name":"Salerno"},"1681":{"code":"SS","name":"Sassari"},"1684":{"code":"SV","name":"Savona"},"1687":{"code":"SI","name":"Siena"},"1690":{"code":"SR","name":"Siracusa"},"1693":{"code":"SO","name":"Sondrio"},"1696":{"code":"TA","name":"Taranto"},"1699":{"code":"TE","name":"Teramo"},"1702":{"code":"TR","name":"Terni"},"1705":{"code":"TO","name":"Torino"},"1708":{"code":"TP","name":"Trapani"},"1711":{"code":"TN","name":"Trento"},"1714":{"code":"TV","name":"Treviso"},"1717":{"code":"TS","name":"Trieste"},"1720":{"code":"UD","name":"Udine"},"1723":{"code":"VA","name":"Varese"},"1726":{"code":"VE","name":"Venezia"},"1729":{"code":"VB","name":"Verbania"},"1732":{"code":"VC","name":"Vercelli"},"1735":{"code":"VR","name":"Verona"},"1738":{"code":"VV","name":"Vibo-Valentia"},"1741":{"code":"VI","name":"Vicenza"},"1744":{"code":"VT","name":"Viterbo"}}},"JE":{"name":"Jersey"},"JM":{"name":"Jamaica"},"JO":{"name":"Jordan"},"JP":{"name":"Japan"},"KE":{"name":"Kenya"},"KG":{"name":"Kyrgyzstan"},"KH":{"name":"Cambodia"},"KI":{"name":"Kiribati"},"KM":{"name":"Comoros"},"KN":{"name":"St. Kitts & Nevis"},"KP":{"name":"North Korea"},"KR":{"name":"South Korea"},"KW":{"name":"Kuwait"},"KY":{"name":"Cayman Islands"},"KZ":{"name":"Kazakhstan"},"LA":{"name":"Laos"},"LB":{"name":"Lebanon"},"LC":{"name":"St. Lucia"},"LI":{"name":"Liechtenstein"},"LK":{"name":"Sri Lanka"},"LR":{"name":"Liberia"},"LS":{"name":"Lesotho"},"LT":{"name":"Lithuania","regions":{"475":{"code":"LT-AL","name":"Alytaus Apskritis"},"476":{"code":"LT-KU","name":"Kauno Apskritis"},"477":{"code":"LT-KL","name":"Klaip\u0117dos Apskritis"},"478":{"code":"LT-MR","name":"Marijampol\u0117s Apskritis"},"479":{"code":"LT-PN","name":"Panev\u0117\u017eio Apskritis"},"480":{"code":"LT-SA","name":"\u0160iauli\u0173 Apskritis"},"481":{"code":"LT-TA","name":"Taurag\u0117s Apskritis"},"482":{"code":"LT-TE","name":"Tel\u0161i\u0173 Apskritis"},"483":{"code":"LT-UT","name":"Utenos Apskritis"},"484":{"code":"LT-VL","name":"Vilniaus Apskritis"}}},"LU":{"name":"Luxembourg"},"LV":{"name":"Latvia","regions":{"471":{"code":"\u0100da\u017eu novads","name":"\u0100da\u017eu novads"},"366":{"code":"Aglonas novads","name":"Aglonas novads"},"367":{"code":"LV-AI","name":"Aizkraukles novads"},"368":{"code":"Aizputes novads","name":"Aizputes novads"},"369":{"code":"Akn\u012bstes novads","name":"Akn\u012bstes novads"},"370":{"code":"Alojas novads","name":"Alojas novads"},"371":{"code":"Alsungas novads","name":"Alsungas novads"},"372":{"code":"LV-AL","name":"Al\u016bksnes novads"},"373":{"code":"Amatas novads","name":"Amatas novads"},"374":{"code":"Apes novads","name":"Apes novads"},"375":{"code":"Auces novads","name":"Auces novads"},"376":{"code":"Bab\u012btes novads","name":"Bab\u012btes novads"},"377":{"code":"Baldones novads","name":"Baldones novads"},"378":{"code":"Baltinavas novads","name":"Baltinavas novads"},"379":{"code":"LV-BL","name":"Balvu novads"},"380":{"code":"LV-BU","name":"Bauskas novads"},"381":{"code":"Bever\u012bnas novads","name":"Bever\u012bnas novads"},"382":{"code":"Broc\u0113nu novads","name":"Broc\u0113nu novads"},"383":{"code":"Burtnieku novads","name":"Burtnieku novads"},"384":{"code":"Carnikavas novads","name":"Carnikavas novads"},"387":{"code":"LV-CE","name":"C\u0113su novads"},"385":{"code":"Cesvaines novads","name":"Cesvaines novads"},"386":{"code":"Ciblas novads","name":"Ciblas novads"},"388":{"code":"Dagdas novads","name":"Dagdas novads"},"355":{"code":"LV-DGV","name":"Daugavpils"},"389":{"code":"LV-DA","name":"Daugavpils novads"},"390":{"code":"LV-DO","name":"Dobeles novads"},"391":{"code":"Dundagas novads","name":"Dundagas novads"},"392":{"code":"Durbes novads","name":"Durbes novads"},"393":{"code":"Engures novads","name":"Engures novads"},"472":{"code":"\u0112rg\u013cu novads","name":"\u0112rg\u013cu novads"},"394":{"code":"Garkalnes novads","name":"Garkalnes novads"},"395":{"code":"Grobi\u0146as novads","name":"Grobi\u0146as novads"},"396":{"code":"LV-GU","name":"Gulbenes novads"},"397":{"code":"Iecavas novads","name":"Iecavas novads"},"398":{"code":"Ik\u0161\u0137iles novads","name":"Ik\u0161\u0137iles novads"},"399":{"code":"Il\u016bkstes novads","name":"Il\u016bkstes novads"},"400":{"code":"In\u010dukalna novads","name":"In\u010dukalna novads"},"401":{"code":"Jaunjelgavas novads","name":"Jaunjelgavas novads"},"402":{"code":"Jaunpiebalgas novads","name":"Jaunpiebalgas novads"},"403":{"code":"Jaunpils novads","name":"Jaunpils novads"},"357":{"code":"J\u0113kabpils","name":"J\u0113kabpils"},"405":{"code":"LV-JK","name":"J\u0113kabpils novads"},"356":{"code":"LV-JEL","name":"Jelgava"}
6746,"404":{"code":"LV-JL","name":"Jelgavas novads"},"358":{"code":"LV-JUR","name":"J\u016brmala"},"406":{"code":"Kandavas novads","name":"Kandavas novads"},"412":{"code":"K\u0101rsavas novads","name":"K\u0101rsavas novads"},"473":{"code":"\u0136eguma novads","name":"\u0136eguma novads"},"474":{"code":"\u0136ekavas novads","name":"\u0136ekavas novads"},"407":{"code":"Kokneses novads","name":"Kokneses novads"},"410":{"code":"LV-KR","name":"Kr\u0101slavas novads"},"408":{"code":"Krimuldas novads","name":"Krimuldas novads"},"409":{"code":"Krustpils novads","name":"Krustpils novads"},"411":{"code":"LV-KU","name":"Kuld\u012bgas novads"},"413":{"code":"Lielv\u0101rdes novads","name":"Lielv\u0101rdes novads"},"359":{"code":"LV-LPX","name":"Liep\u0101ja"},"360":{"code":"LV-LE","name":"Liep\u0101jas novads"},"417":{"code":"L\u012bgatnes novads","name":"L\u012bgatnes novads"},"414":{"code":"LV-LM","name":"Limba\u017eu novads"},"418":{"code":"L\u012bv\u0101nu novads","name":"L\u012bv\u0101nu novads"},"415":{"code":"Lub\u0101nas novads","name":"Lub\u0101nas novads"},"416":{"code":"LV-LU","name":"Ludzas novads"},"419":{"code":"LV-MA","name":"Madonas novads"},"421":{"code":"M\u0101lpils novads","name":"M\u0101lpils novads"},"422":{"code":"M\u0101rupes novads","name":"M\u0101rupes novads"},"420":{"code":"Mazsalacas novads","name":"Mazsalacas novads"},"423":{"code":"Nauk\u0161\u0113nu novads","name":"Nauk\u0161\u0113nu novads"},"424":{"code":"Neretas novads","name":"Neretas novads"},"425":{"code":"N\u012bcas novads","name":"N\u012bcas novads"},"426":{"code":"LV-OG","name":"Ogres novads"},"427":{"code":"Olaines novads","name":"Olaines novads"},"428":{"code":"Ozolnieku novads","name":"Ozolnieku novads"},"432":{"code":"P\u0101rgaujas novads","name":"P\u0101rgaujas novads"},"433":{"code":"P\u0101vilostas novads","name":"P\u0101vilostas novads"},"434":{"code":"P\u013cavi\u0146u novads","name":"P\u013cavi\u0146u novads"},"429":{"code":"LV-PR","name":"Prei\u013cu novads"},"430":{"code":"Priekules novads","name":"Priekules novads"},"431":{"code":"Prieku\u013cu novads","name":"Prieku\u013cu novads"},"435":{"code":"Raunas novads","name":"Raunas novads"},"361":{"code":"LV-REZ","name":"R\u0113zekne"},"442":{"code":"LV-RE","name":"R\u0113zeknes novads"},"436":{"code":"Riebi\u0146u novads","name":"Riebi\u0146u novads"},"362":{"code":"LV-RIX","name":"R\u012bga"},"363":{"code":"LV-RI","name":"R\u012bgas novads"},"437":{"code":"Rojas novads","name":"Rojas novads"},"438":{"code":"Ropa\u017eu novads","name":"Ropa\u017eu novads"},"439":{"code":"Rucavas novads","name":"Rucavas novads"},"440":{"code":"Rug\u0101ju novads","name":"Rug\u0101ju novads"},"443":{"code":"R\u016bjienas novads","name":"R\u016bjienas novads"},"441":{"code":"Rund\u0101les novads","name":"Rund\u0101les novads"},"444":{"code":"Salacgr\u012bvas novads","name":"Salacgr\u012bvas novads"},"445":{"code":"Salas novads","name":"Salas novads"},"446":{"code":"Salaspils novads","name":"Salaspils novads"},"447":{"code":"LV-SA","name":"Saldus novads"},"448":{"code":"Saulkrastu novads","name":"Saulkrastu novads"},"455":{"code":"S\u0113jas novads","name":"S\u0113jas novads"},"449":{"code":"Siguldas novads","name":"Siguldas novads"},"451":{"code":"Skr\u012bveru novads","name":"Skr\u012bveru novads"},"450":{"code":"Skrundas novads","name":"Skrundas novads"},"452":{"code":"Smiltenes novads","name":"Smiltenes novads"},"453":{"code":"Stopi\u0146u novads","name":"Stopi\u0146u novads"},"454":{"code":"Stren\u010du novads","name":"Stren\u010du novads"},"456":{"code":"LV-TA","name":"Talsu novads"},"458":{"code":"T\u0113rvetes novads","name":"T\u0113rvetes novads"},"457":{"code":"LV-TU","name":"Tukuma novads"},"459":{"code":"Vai\u0146odes novads","name":"Vai\u0146odes novads"},"460":{"code":"LV-VK","name":"Valkas novads"},"364":{"code":"Valmiera","name":"Valmiera"},"461":{"code":"LV-VM","name":"Valmieras novads"},"462":{"code":"Varak\u013c\u0101nu novads","name":"Varak\u013c\u0101nu novads"},"469":{"code":"V\u0101rkavas novads","name":"V\u0101rkavas novads"},"463":{"code":"Vecpiebalgas novads","name":"Vecpiebalgas novads"},"464":{"code":"Vecumnieku novads","name":"Vecumnieku novads"},"365":{"code":"LV-VEN","name":"Ventspils"},"465":{"code":"LV-VE","name":"Ventspils novads"},"466":{"code":"Vies\u012btes novads","name":"Vies\u012btes novads"},"467":{"code":"Vi\u013cakas novads","name":"Vi\u013cakas novads"},"468":{"code":"Vi\u013c\u0101nu novads","name":"Vi\u013c\u0101nu novads"},"470":{"code":"Zilupes novads","name":"Zilupes novads"}}},"LY":{"name":"Libya"},"MA":{"name":"Morocco"},"MC":{"name":"Monaco"},"MD":{"name":"Moldova"},"ME":{"name":"Montenegro"},"MF":{"name":"St. Martin"},"MG":{"name":"Madagascar"},"MH":{"name":"Marshall Islands"},"MK":{"name":"North Macedonia"},"ML":{"name":"Mali"},"MM":{"name":"Myanmar (Burma)"},"MN":{"name":"Mongolia"}
6746,"MO":{"name":"Macao SAR China"},"MP":{"name":"Northern Mariana Islands"},"MQ":{"name":"Martinique"},"MR":{"name":"Mauritania"},"MS":{"name":"Montserrat"},"MT":{"name":"Malta"},"MU":{"name":"Mauritius"},"MV":{"name":"Maldives"},"MW":{"name":"Malawi"},"MX":{"name":"Mexico","regions":{"1747":{"code":"AGU","name":"Aguascalientes"},"1750":{"code":"BCN","name":"Baja California"},"1753":{"code":"BCS","name":"Baja California Sur"},"1756":{"code":"CAM","name":"Campeche"},"1759":{"code":"CHP","name":"Chiapas"},"1762":{"code":"CHH","name":"Chihuahua"},"1765":{"code":"CMX","name":"Ciudad de M\u00e9xico"},"1768":{"code":"COA","name":"Coahuila"},"1771":{"code":"COL","name":"Colima"},"1774":{"code":"DUR","name":"Durango"},"1777":{"code":"MEX","name":"Estado de M\u00e9xico"},"1780":{"code":"GUA","name":"Guanajuato"},"1783":{"code":"GRO","name":"Guerrero"},"1786":{"code":"HID","name":"Hidalgo"},"1789":{"code":"JAL","name":"Jalisco"},"1792":{"code":"MIC","name":"Michoac\u00e1n"},"1795":{"code":"MOR","name":"Morelos"},"1798":{"code":"NAY","name":"Nayarit"},"1801":{"code":"NLE","name":"Nuevo Le\u00f3n"},"1804":{"code":"OAX","name":"Oaxaca"},"1807":{"code":"PUE","name":"Puebla"},"1810":{"code":"QUE","name":"Quer\u00e9taro"},"1813":{"code":"ROO","name":"Quintana Roo"},"1816":{"code":"SLP","name":"San Luis Potos\u00ed"},"1819":{"code":"SIN","name":"Sinaloa"},"1822":{"code":"SON","name":"Sonora"},"1825":{"code":"TAB","name":"Tabasco"},"1828":{"code":"TAM","name":"Tamaulipas"},"1831":{"code":"TLA","name":"Tlaxcala"},"1834":{"code":"VER","name":"Veracruz"},"1837":{"code":"YUC","name":"Yucat\u00e1n"},"1840":{"code":"ZAC","name":"Zacatecas"}}},"MY":{"name":"Malaysia"},"MZ":{"name":"Mozambique"},"NA":{"name":"Namibia"},"NC":{"name":"New Caledonia"},"NE":{"name":"Niger"},"NF":{"name":"Norfolk Island"},"NG":{"name":"Nigeria"},"NI":{"name":"Nicaragua"},"NL":{"name":"Netherlands"},"NO":{"name":"Norway"},"NP":{"name":"Nepal"},"NR":{"name":"Nauru"},"NU":{"name":"Niue"},"NZ":{"name":"New Zealand"},"OM":{"name":"Oman"},"PA":{"name":"Panama"},"PE":{"name":"Peru","regions":{"1900":{"code":"PE-AMA","name":"Amazonas"},"1903":{"code":"PE-ANC","name":"Ancash"},"1906":{"code":"PE-APU","name":"Apur\u00edmac"},"1909":{"code":"PE-ARE","name":"Arequipa"},"1912":{"code":"PE-AYA","name":"Ayacucho"},"1915":{"code":"PE-CAJ","name":"Cajamarca"},"1918":{"code":"PE-CUS","name":"Cusco"},"1921":{"code":"PE-CAL","name":"El Callao"},"1924":{"code":"PE-HUV","name":"Huancavelica"},"1927":{"code":"PE-HUC","name":"Hu\u00e1nuco"},"1930":{"code":"PE-ICA","name":"Ica"},"1933":{"code":"PE-JUN","name":"Jun\u00edn"},"1936":{"code":"PE-LAL","name":"La Libertad"},"1939":{"code":"PE-LAM","name":"Lambayeque"},"1942":{"code":"PE-LIM","name":"Lima"},"1945":{"code":"PE-LOR","name":"Loreto"},"1948":{"code":"PE-MDD","name":"Madre de Dios"},"1951":{"code":"PE-MOQ","name":"Moquegua"},"1897":{"code":"PE-LMA","name":"Municipalidad Metropolitana de Lima"},"1954":{"code":"PE-PAS","name":"Pasco"}
6746,"1957":{"code":"PE-PIU","name":"Piura"},"1960":{"code":"PE-PUN","name":"Puno"},"1963":{"code":"PE-SAM","name":"San Mart\u00edn"},"1966":{"code":"PE-TAC","name":"Tacna"},"1969":{"code":"PE-TUM","name":"Tumbes"},"1972":{"code":"PE-UCA","name":"Ucayali"}}},"PF":{"name":"French Polynesia"},"PG":{"name":"Papua New Guinea"},"PH":{"name":"Philippines"},"PK":{"name":"Pakistan"},"PL":{"name":"Poland","regions":{"1975":{"code":"PL-02","name":"dolno\u015bl\u0105skie"},"1978":{"code":"PL-04","name":"kujawsko-pomorskie"},"1981":{"code":"PL-06","name":"lubelskie"},"1984":{"code":"PL-08","name":"lubuskie"},"1993":{"code":"PL-14","name":"mazowieckie"},"1990":{"code":"PL-12","name":"ma\u0142opolskie"},"1996":{"code":"PL-16","name":"opolskie"},"1999":{"code":"PL-18","name":"podkarpackie"},"2002":{"code":"PL-20","name":"podlaskie"},"2005":{"code":"PL-22","name":"pomorskie"},"2008":{"code":"PL-24","name":"\u015bl\u0105skie"},"2011":{"code":"PL-26","name":"\u015bwi\u0119tokrzyskie"},"2014":{"code":"PL-28","name":"warmi\u0144sko-mazurskie"},"2017":{"code":"PL-30","name":"wielkopolskie"},"2020":{"code":"PL-32","name":"zachodniopomorskie"},"1987":{"code":"PL-10","name":"\u0142\u00f3dzkie"}}},"PM":{"name":"St. Pierre & Miquelon"},"PN":{"name":"Pitcairn Islands"},"PS":{"name":"Palestinian Territories"},"PT":{"name":"Portugal","regions":{"2023":{"code":"PT-01","name":"Aveiro"},"2026":{"code":"PT-02","name":"Beja"},"2029":{"code":"PT-03","name":"Braga"},"2032":{"code":"PT-04","name":"Bragan\u00e7a"},"2035":{"code":"PT-05","name":"Castelo Branco"},"2038":{"code":"PT-06","name":"Coimbra"},"2041":{"code":"PT-07","name":"\u00c9vora"},"2044":{"code":"PT-08","name":"Faro"},"2047":{"code":"PT-09","name":"Guarda"},"2050":{"code":"PT-10","name":"Leiria"},"2053":{"code":"PT-11","name":"Lisboa"},"2056":{"code":"PT-12","name":"Portalegre"},"2059":{"code":"PT-13","name":"Porto"},"2080":{"code":"PT-30","name":"Regi\u00e3o Aut\u00f3noma da Madeira"},"2077":{"code":"PT-20","name":"Regi\u00e3o Aut\u00f3noma dos A\u00e7ores"},"2062":{"code":"PT-14","name":"Santar\u00e9m"},"2065":{"code":"PT-15","name":"Set\u00fabal"},"2068":{"code":"PT-16","name":"Viana do Castelo"},"2071":{"code":"PT-17","name":"Vila Real"},"2074":{"code":"PT-18","name":"Viseu"}}},"PW":{"name":"Palau"},"PY":{"name":"Paraguay","regions":{"1846":{"code":"PY-16","name":"Alto Paraguay"},"1849":{"code":"PY-10","name":"Alto Paran\u00e1"},"1852":{"code":"PY-13","name":"Amambay"},"1843":{"code":"PY-ASU","name":"Asunci\u00f3n"},"1855":{"code":"PY-19","name":"Boquer\u00f3n"},"1858":{"code":"PY-5","name":"Caaguaz\u00fa"},"1861":{"code":"PY-6","name":"Caazap\u00e1"},"1864":{"code":"PY-14","name":"Canindey\u00fa"},"1867":{"code":"PY-11","name":"Central"},"1870":{"code":"PY-1","name":"Concepci\u00f3n"},"1873":{"code":"PY-3","name":"Cordillera"},"1876":{"code":"PY-4","name":"Guair\u00e1"},"1879":{"code":"PY-7","name":"Itap\u00faa"},"1882":{"code":"PY-8","name":"Misiones"},"1885":{"code":"PY-12","name":"\u00d1eembuc\u00fa"},"1888":{"code":"PY-9","name":"Paraguar\u00ed"},"1891":{"code":"PY-15","name":"Presidente Hayes"},"1894":{"code":"PY-2","name":"San Pedro"}}},"QA":{"name":"Qatar"},"RE":{"name":"R\u00e9union"},"RO":{"name":"Romania","regions":{"278":{"code":"AB","name":"Alba"},"279":{"code":"AR","name":"Arad"},"280":{"code":"AG","name":"Arge\u015f"},"281":{"code":"BC","name":"Bac\u0103u"},"282":{"code":"BH","name":"Bihor"},"283":{"code":"BN","name":"Bistri\u0163a-N\u0103s\u0103ud"},"284":{"code":"BT","name":"Boto\u015fani"},"286":{"code":"BR","name":"Br\u0103ila"},"285":{"code":"BV","name":"Bra\u015fov"},"287":{"code":"B","name":"Bucure\u015fti"},"288":{"code":"BZ","name":"Buz\u0103u"},"290":{"code":"CL","name":"C\u0103l\u0103ra\u015fi"},"289":{"code":"CS","name":"Cara\u015f-Severin"},"291":{"code":"CJ","name":"Cluj"},"292":{"code":"CT","name":"Constan\u0163a"},"293":{"code":"CV","name":"Covasna"},"294":{"code":"DB","name":"D\u00e2mbovi\u0163a"},"295":{"code":"DJ","name":"Dolj"},"296":{"code":"GL","name":"Gala\u0163i"},"297":{"code":"GR","name":"Giurgiu"},"298":{"code":"GJ","name":"Gorj"},"299":{"code":"HR","name":"Harghita"},"300":{"code":"HD","name":"Hunedoara"},"301":{"code":"IL","name":"Ialomi\u0163a"},"302":{"code":"IS","name":"Ia\u015fi"},"303":{"code":"IF","name":"Ilfov"},"304":{"code":"MM","name":"Maramure\u015f"},"305":{"code":"MH","name":"Mehedin\u0163i"},"306":{"code":"MS","name":"Mure\u015f"},"307":{"code":"NT","name":"Neam\u0163"},"308":{"code":"OT","name":"Olt"},"309":{"code":"PH","name":"Prahova"},"311":{"code":"SJ","name":"S\u0103laj"},"310":{"code":"SM","name":"Satu-Mare"},"312":{"code":"SB","name":"Sibiu"},"313":{"code":"SV","name":"Suceava"},"314":{"code":"TR","name":"Teleorman"},"315":{"code":"TM","name":"Timi\u015f"},"316":{"code":"TL","name":"Tulcea"},"318":{"code":"VL","name":"V\u00e2lcea"},"317":{"code":"VS","name":"Vaslui"},"319":{"code":"VN","name":"Vrancea"}}},"RS":{"name":"Serbia"},"RU":{"name":"Russia"},"RW":{"name":"Rwanda"},"SA":{"name":"Saudi Arabia"},"SB":{"name":"Solomon Islands"},"SC":{"name":"Seychelles"},"SD":{"name":"Sudan"},"SE":{"name":"Sweden","regions":{"2113":{"code":"SE-K","name":"Blekinge l\u00e4n"}
6746,"2116":{"code":"SE-W","name":"Dalarnas l\u00e4n"},"2122":{"code":"SE-X","name":"G\u00e4vleborgs l\u00e4n"},"2119":{"code":"SE-I","name":"Gotlands l\u00e4n"},"2125":{"code":"SE-N","name":"Hallands l\u00e4n"},"2128":{"code":"SE-Z","name":"J\u00e4mtlands l\u00e4n"},"2131":{"code":"SE-F","name":"J\u00f6nk\u00f6pings l\u00e4n"},"2134":{"code":"SE-H","name":"Kalmar l\u00e4n"},"2137":{"code":"SE-G","name":"Kronobergs l\u00e4n"},"2140":{"code":"SE-BD","name":"Norrbottens l\u00e4n"},"2170":{"code":"SE-T","name":"\u00d6rebro l\u00e4n"},"2173":{"code":"SE-E","name":"\u00d6sterg\u00f6tlands l\u00e4n"},"2143":{"code":"SE-M","name":"Sk\u00e5ne l\u00e4n"},"2149":{"code":"SE-D","name":"S\u00f6dermanlands l\u00e4n"},"2146":{"code":"SE-AB","name":"Stockholms l\u00e4n"},"2152":{"code":"SE-C","name":"Uppsala l\u00e4n"},"2155":{"code":"SE-S","name":"V\u00e4rmlands l\u00e4n"},"2158":{"code":"SE-AC","name":"V\u00e4sterbottens l\u00e4n"},"2161":{"code":"SE-Y","name":"V\u00e4sternorrlands l\u00e4n"},"2164":{"code":"SE-U","name":"V\u00e4stmanlands l\u00e4n"},"2167":{"code":"SE-O","name":"V\u00e4stra G\u00f6talands l\u00e4n"}}},"SG":{"name":"Singapore"},"SH":{"name":"St. Helena"},"SI":{"name":"Slovenia"},"SJ":{"name":"Svalbard & Jan Mayen"},"SK":{"name":"Slovakia"},"SL":{"name":"Sierra Leone"},"SM":{"name":"San Marino"},"SN":{"name":"Senegal"},"SO":{"name":"Somalia"},"SR":{"name":"Suriname","regions":{"2083":{"code":"SR-BR","name":"Brokopondo"},"2086":{"code":"SR-CM","name":"Commewijne"},"2089":{"code":"SR-CR","name":"Coronie"},"2092":{"code":"SR-MA","name":"Marowijne"},"2095":{"code":"SR-NI","name":"Nickerie"},"2098":{"code":"SR-PR","name":"Para"},"2101":{"code":"SR-PM","name":"Paramaribo"},"2104":{"code":"SR-SA","name":"Saramacca"},"2107":{"code":"SR-SI","name":"Sipaliwini"},"2110":{"code":"SR-WA","name":"Wanica"}}},"ST":{"name":"S\u00e3o Tom\u00e9 & Pr\u00edncipe"},"SV":{"name":"El Salvador"},"SY":{"name":"Syria"},"SZ":{"name":"Eswatini"},"TC":{"name":"Turks & Caicos Islands"},"TD":{"name":"Chad"},"TF":{"name":"French Southern Territories"},"TG":{"name":"Togo"},"TH":{"name":"Thailand"},"TJ":{"name":"Tajikistan"},"TK":{"name":"Tokelau"},"TL":{"name":"Timor-Leste"},"TM":{"name":"Turkmenistan"},"TN":{"name":"Tunisia"},"TO":{"name":"Tonga"},"TR":{"name":"Turkey"},"TT":{"name":"Trinidad & Tobago"},"TV":{"name":"Tuvalu"},"TW":{"name":"Taiwan, Province of China"},"TZ":{"name":"Tanzania"},"UA":{"name":"Ukraine"},"UG":{"name":"Uganda"},"UM":{"name":"U.S. Outlying Islands"},"US":{"name":"United States","regions":{"1":{"code":"AL","name":"Alabama"},"2":{"code":"AK","name":"Alaska"},"3":{"code":"AS","name":"American Samoa"},"4":{"code":"AZ","name":"Arizona"},"5":{"code":"AR","name":"Arkansas"},"6":{"code":"AE","name":"Armed Forces Africa"},"7":{"code":"AA","name":"Armed Forces Americas"},"8":{"code":"AE","name":"Armed Forces Canada"},"9":{"code":"AE","name":"Armed Forces Europe"},"10":{"code":"AE","name":"Armed Forces Middle East"},"11":{"code":"AP","name":"Armed Forces Pacific"},"12":{"code":"CA","name":"California"},"13":{"code":"CO","name":"Colorado"},"14":{"code":"CT","name":"Connecticut"},"15":{"code":"DE","name":"Delaware"},"16":{"code":"DC","name":"District of Columbia"},"17":{"code":"FM","name":"Federated States Of Micronesia"},"18":{"code":"FL","name":"Florida"},"19":{"code":"GA","name":"Georgia"},"20":{"code":"GU","name":"Guam"},"21":{"code":"HI","name":"Hawaii"},"22":{"code":"ID","name":"Idaho"},"23":{"code":"IL","name":"Illinois"},"24":{"code":"IN","name":"Indiana"},"25":{"code":"IA","name":"Iowa"},"26":{"code":"KS","name":"Kansas"},"27":{"code":"KY","name":"Kentucky"},"28":{"code":"LA","name":"Louisiana"},"29":{"code":"ME","name":"Maine"},"30":{"code":"MH","name":"Marshall Islands"},"31":{"code":"MD","name":"Maryland"},"32":{"code":"MA","name":"Massachusetts"},"33":{"code":"MI","name":"Michigan"},"34":{"code":"MN","name":"Minnesota"},"35":{"code":"MS","name":"Mississippi"},"36":{"code":"MO","name":"Missouri"},"37":{"code":"MT","name":"Montana"},"38":{"code":"NE","name":"Nebraska"},"39":{"code":"NV","name":"Nevada"},"40":{"code":"NH","name":"New Hampshire"},"41":{"code":"NJ","name":"New Jersey"},"42":{"code":"NM","name":"New Mexico"},"43":{"code":"NY","name":"New York"},"44":{"code":"NC","name":"North Carolina"},"45":{"code":"ND","name":"North Dakota"},"46":{"code":"MP","name":"Northern Mariana Islands"},"47":{"code":"OH","name":"Ohio"},"48":{"code":"OK","name":"Oklahoma"},"49":{"code":"OR","name":"Oregon"},"50":{"code":"PW","name":"Palau"},"51":{"code":"PA","name":"Pennsylvania"},"52":{"code":"PR","name":"Puerto Rico"},"53":{"code":"RI","name":"Rhode Island"},"54":{"code":"SC","name":"South Carolina"},"55":{"code":"SD","name":"South Dakota"},"56":{"code":"TN","name":"Tennessee"},"57":{"code":"TX","name":"Texas"}
6746,"58":{"code":"UT","name":"Utah"},"59":{"code":"VT","name":"Vermont"},"60":{"code":"VI","name":"Virgin Islands"},"61":{"code":"VA","name":"Virginia"},"62":{"code":"WA","name":"Washington"},"63":{"code":"WV","name":"West Virginia"},"64":{"code":"WI","name":"Wisconsin"},"65":{"code":"WY","name":"Wyoming"}}},"UY":{"name":"Uruguay","regions":{"2176":{"code":"UY-AR","name":"Artigas"},"2179":{"code":"UY-CA","name":"Canelones"},"2182":{"code":"UY-CL","name":"Cerro Largo"},"2185":{"code":"UY-CO","name":"Colonia"},"2188":{"code":"UY-DU","name":"Durazno"},"2191":{"code":"UY-FS","name":"Flores"},"2194":{"code":"UY-FD","name":"Florida"},"2197":{"code":"UY-LA","name":"Lavalleja"},"2200":{"code":"UY-MA","name":"Maldonado"},"2203":{"code":"UY-MO","name":"Montevideo"},"2206":{"code":"UY-PA","name":"Paysandu"},"2209":{"code":"UY-RN","name":"R\u00edo Negro"},"2212":{"code":"UY-RV","name":"Rivera"},"2215":{"code":"UY-RO","name":"Rocha"},"2218":{"code":"UY-SA","name":"Salto"},"2221":{"code":"UY-SJ","name":"San Jos\u00e9"},"2224":{"code":"UY-SO","name":"Soriano"},"2227":{"code":"UY-TA","name":"Tacuaremb\u00f3"},"2230":{"code":"UY-TT","name":"Treinta y Tres"}}},"UZ":{"name":"Uzbekistan"},"VA":{"name":"Vatican City"},"VC":{"name":"St. Vincent & Grenadines"},"VE":{"name":"Venezuela","regions":{"2239":{"code":"VE-Z","name":"Amazonas"},"2242":{"code":"VE-B","name":"Anzo\u00e1tegui"},"2245":{"code":"VE-C","name":"Apure"},"2248":{"code":"VE-D","name":"Aragua"},"2251":{"code":"VE-E","name":"Barinas"},"2254":{"code":"VE-F","name":"Bol\u00edvar"},"2257":{"code":"VE-G","name":"Carabobo"},"2260":{"code":"VE-H","name":"Cojedes"},"2263":{"code":"VE-Y","name":"Delta Amacuro"},"2233":{"code":"VE-W","name":"Dependencias Federales"},"2236":{"code":"VE-A","name":"Distrito Capital"},"2266":{"code":"VE-I","name":"Falc\u00f3n"},"2269":{"code":"VE-J","name":"Gu\u00e1rico"},"2272":{"code":"VE-K","name":"Lara"},"2275":{"code":"VE-L","name":"M\u00e9rida"},"2278":{"code":"VE-M","name":"Miranda"},"2281":{"code":"VE-N","name":"Monagas"},"2284":{"code":"VE-O","name":"Nueva Esparta"},"2287":{"code":"VE-P","name":"Portuguesa"},"2290":{"code":"VE-R","name":"Sucre"},"2293":{"code":"VE-S","name":"T\u00e1chira"},"2296":{"code":"VE-T","name":"Trujillo"},"2299":{"code":"VE-X","name":"Vargas"},"2302":{"code":"VE-U","name":"Yaracuy"},"2305":{"code":"VE-V","name":"Zulia"}}},"VG":{"name":"British Virgin Islands"},"VI":{"name":"U.S. Virgin Islands"},"VN":{"name":"Vietnam"},"VU":{"name":"Vanuatu"},"WF":{"name":"Wallis & Futuna"},"WS":{"name":"Samoa"},"YE":{"name":"Yemen"},"YT":{"name":"Mayotte"},"ZA":{"name":"South Africa"},"ZM":{"name":"Zambia"},"ZW":{"name":"Zimbabwe"},"data_id":1790370644},"captcha":[],"wishlist":{"items":[]},"company":[],"company_authorization":[],"purchase_order":[],"negotiable_quote":[],"loggedAsCustomer":[],"multiplewishlist":[],"persistent":[],"review":[],"apptrian_facebook_pixel_matching_section":[],"side-by-side":[],"bold_checkout_meta":[],"hyva_checkout":[],"gtm-checkout":[],"recently_viewed_product":[],"recently_compared_product":[],"product_data_storage":[],"paypal-billing-agreement":[]}</script>
vendor: 1 bytes, line 6746
6746
6747<script>
6748    function initContentPopup() {
6749        return {
6750            init(parentIdentifier = '') {
6751                // If parent identifier is sent in, only look for children with class "contentPopupHandler" to initialize
6752                let contentPopupTriggers = parentIdentifier ? document.querySelectorAll(parentIdentifier + ' .contentPopupHandler') : document.getElementsByClassName('contentPopupHandler');
6753
6754                // Handle image popups as well
6755                let imagePopupTriggers = parentIdentifier ? document.querySelectorAll(parentIdentifier + ' .imagePopupHandler') : document.getElementsByClassName('imagePopupHandler');
6756                contentPopupTriggers =  Array.from(contentPopupTriggers).concat(Array.from(imagePopupTriggers));
6757
6758                Array.from(contentPopupTriggers).forEach((element) => {
6759                    let popupClickHandler = function(event) {
6760                        event.preventDefault();
6761                        event.stopPropagation();
6762
6763                        // Find corresponding element with same ID but "Content" appended to use for modal content
6764                        let id = element.id;
6765                        let popupContent = document.getElementById(id + 'Content');
6766
6767                        // For image popups use child HTML as content, since this will be the img tag
6768                        if (element.classList.contains('imagePopupHandler')) {
6769                            popupContent = element.cloneNode(true);
6770                            let imgLink = popupContent.href;
6771                            let imgElement = popupContent.querySelector('img');
6772
6773                            // if image doesnt exist yet, clear out content and create image
6774                            if(!imgElement) {
6775                                popupContent.innerHTML = '';
6776                                imgElement = document.createElement('img');
6777                                popupContent.appendChild(imgElement);
6778                            }
6779                            // Set src of child img tag to be href of target tag if present, as this will be the full size image to show in the popup
6780                            if (imgLink) {
6781                                imgElement.src = imgLink;
6782                                imgElement.style.maxHeight = '800px';
6783                            }
6784                        }
6785
6786                        if (popupContent) {
6787                            document.getElementById('contentPopupModal').innerHTML = popupContent.innerHTML;
6788
6789                            // Not able to directly trigger modal show from here, so trigger click on hidden button to open the modal
6790                            document.getElementById('contentPopupTrigger').dispatchEvent(new Event('click'));
6791                        }
6792                    };
6793
6794                    if(!element.getAttribute('initialized')) {
6795                        element.addEventListener('click', popupClickHandler);
6796                        element.setAttribute('initialized', 'true');
6797                    }
6798
6799                });
6800            }
6801        }
6802    }
6803</script>
6803
6804<div x-data="Object.assign({}, hyva.modal(), initContentPopup())"
6805     x-init="init()"
6806>
6807    <button @click="show('dialog', this.$event || $event)" type="button" id="contentPopupTrigger" class="btn mt-40 hidden" aria-haspopup="dialog">
6808        Show    </button>
6809    <div x-cloak    data-dialog-ref-name="dialog"
6810    x-bind="overlay"
6811    class="fixed inset-0 bg-black bg-opacity-50 z-50">
6812    <div class="fixed flex justify-center items-center text-left z-40 inset-0">
6813        <div x-ref="dialog" role="dialog" aria-modal="true"
6814                                                     aria-labelledby="content-popup-modal-label"
6815                         class="inline-block bg-white shadow-xl rounded-lg p-10 max-h-screen overflow-auto overscroll-y-contain">
6816            <label id="content-popup-modal-label" class="text-[0]"><?= $escaper->escapeHtml(__("Modal content")) ?></label><div id="contentPopupModal"></div>        </div>
6817    </div>
6818    </div>
6819</div>
6820<script type="text/javascript">
6821    document.addEventListener('DOMContentLoaded', function() {
6822        let aosNodes = document.querySelectorAll("[data-aos]");
6823        let aosList = [];
6824
6825        aosNodes.forEach(function(aosNode) {
6826            let aosEntry = {};
6827            aosNode.classList.add("aos-init");
6828
6829            aosEntry.node = aosNode;
6830            aosEntry.position = getPosition(aosNode);
6831            aosList.push(aosEntry);
6832        });
6833
6834        window.addEventListener("resize", function() {
6835            // Recalculate positions on resize
6836            aosList.forEach(function(aosEntry) {
6837                aosEntry.position = getPosition(aosEntry.node);
6838            });
6839        });
6840
6841        window.addEventListener("scroll", function() {
6842            animateScroll(aosList);
6843        });
6844
6845        function animateScroll(elements) {
6846            let pageYOffset = window.pageYOffset;
6847            let innerHeight = window.innerHeight;
6848
6849            elements.forEach(function(element) {
6850                let totalHeight = pageYOffset + innerHeight;
6851                totalHeight > element.position ? element.node.classList.add("aos-animate") : element.node.classList.remove("aos-animate");
6852            });
6853        }
6854
6855        function getPosition(element) {
6856            let innerHeight = window.innerHeight;
6857            let anchorPlacement = element.getAttribute("data-aos-anchor-placement");
6858            let top = getTop(element);
6859
6860            switch (anchorPlacement) {
6861                case "top-bottom":
6862                    break;
6863                case "center-bottom":
6864                    top += element.offsetHeight / 2;
6865                    break;
6866                case "bottom-bottom":
6867                    top += element.offsetHeight;
6868                    break;
6869                case "top-center":
6870                    top += innerHeight / 2;
6871                    break;
6872                case "bottom-center":
6873                    top += innerHeight / 2 + element.offsetHeight;
6874                    break;
6875                case "center-center":
6876                    top += innerHeight / 2 + element.offsetHeight / 2;
6877                    break;
6878                case "top-top":
6879                    top += innerHeight;
6880                    break;
6881                case "bottom-top":
6882                    top += element.offsetHeight + innerHeight;
6883                    break;
6884                case "center-top":
6885                    top += element.offsetHeight / 2 + innerHeight
6886            }
6887
6888            return top;
6889        }
6890
6891        function getTop(element) {
6892            let top = 0
6893
6894            while (element && !isNaN(element.offsetLeft) && !isNaN(element.offsetTop)) {
6895                top += element.offsetTop - ("BODY" != element.tagName ? element.scrollTop : 0);
6896                element = element.offsetParent;
6897            }
6898
6899            return top;
6900        }
6901    });
6902</script>
vendor: 1 bytes, line 6902
6902
6903<script>
6904
6905    function dispatchOldCart(event) {
6906        let storage = hyva.getBrowserStorage();
6907        let oldCart = storage.getItem('old-cart')
6908            ? JSON.parse(storage.getItem('old-cart'))
6909            : {items: []};
6910        let newCart = event.detail.data.cart ?? {};
6911        window.dispatchEvent(new CustomEvent('cart-change', {
6912            detail:
6913                {
6914                    data: {
6915                        oldCart: oldCart,
6916                        privateData: event.detail.data
6917                    }
6918                }
6919            })
6920        );
6921        storage.setItem('old-cart', JSON.stringify(newCart));
6922    }
6923
6924    window.addEventListener('private-content-loaded', dispatchOldCart)
6925</script>
6925
6926</div><div id="show-result" data-bind="scope:'showResult'" style="display: none;">
6927    <!-- ko template: getTemplate() --><!-- /ko -->
6928    
6928<script type="text/x-magento-init">
6929    {
6930        "#show-result": {
6931            "Magento_Ui/js/core/app": {
6932               "components": {
6933                    "showResult": {
6934                        "component": "Bold_CheckoutMeta/js/model/order-result"
6935                    }
6936                }
6937            }
6938        }
6939    }
6940    </script>
6940
6941</div>
6942<script nonce="OGtld3o0NWc5cnNreXdxc2dxbzd1N3R0ZnVkbmxzeno=">
6943
6944    yireoGoogleTagManager2Pusher({"version":"3.10.0","page_type":"cms\/index\/index","page_path":"https:\/\/www.outdoornativitysets.com\/","page_title":"Outdoor Nativity Sets | American Made, Outdoor Nativity Displays","virtual_page":"","breadcrumb":[],"user":{"has_transacted":false}}, 'push (initial page) [data-layer.phtml]');
6945    </script>
vendor: 1 bytes, line 6945
6945
6946<script nonce="OGtld3o0NWc5cnNreXdxc2dxbzd1N3R0ZnVkbmxzeno=">
6947    function yireoGoogleTagManager2FindParentElementWithName(element, parentTagName) {
6948        if (!element.parentElement) {
6949            return null;
6950        }
6951
6952        if (element.parentElement.tagName.toLowerCase() === parentTagName) {
6953            return element.parentElement;
6954        }
6955
6956        return yireoGoogleTagManager2FindParentElementWithName(element.parentElement, parentTagName);
6957    }
6958
6959    const products = document.querySelectorAll('.products a.product');
6960    if (products && products.length > 0) {
6961        products.forEach(function(product) {
6962            product.addEventListener('click', function(event, s) {
6963                let parentElement = yireoGoogleTagManager2FindParentElementWithName(event.target, 'form');
6964                const inputElement = parentElement.querySelector('input[name="product"]');
6965                const productId = inputElement.value;
6966                const productData = window['YIREO_GOOGLETAGMANAGER2_PRODUCT_DATA_ID_' + productId] || {};
6967                productData.item_id = productId;
6968
6969                const eventData = {
6970                    'event': 'select_item',
6971                    'ecommerce': {
6972                        'items': [productData]
6973                    }
6974                }
6975
6976                yireoGoogleTagManager2Pusher(eventData, 'push (page event "select_item") [script-product-clicks.phtml]');
6977
6978                if (window['YIREO_GOOGLETAGMANAGER2_DEBUG_CLICKS'] && confirm("Press to continue with redirect") === false) {
6979                    event.preventDefault();
6980                }
6981            });
6982        })
6983    }
6984</script>
vendor: 1 bytes, line 6984
6984
6985<script nonce="OGtld3o0NWc5cnNreXdxc2dxbzd1N3R0ZnVkbmxzeno=">
6986    window.addEventListener('private-content-loaded', function(event) {
6987        window.dataLayer = window.dataLayer || [];
6988
6989        var isEmpty = function (variable) {
6990            if (typeof variable === 'undefined') {
6991                return true;
6992            }
6993
6994            if (Array.isArray(variable) && variable.length === 0) {
6995                return true;
6996            }
6997
6998            return typeof variable === 'object' && Object.keys(variable).length === 0;
6999        }
7000
7001        var getSectionNames = function () {
7002            return ['cart', 'customer'];
7003        }
7004
7005        getSectionNames().forEach(function (sectionName) {
7006            if (!event.detail.data[sectionName].gtm) {
7007                return;
7008            }
7009
7010            const attributes = event.detail.data[sectionName].gtm;
7011            if (!Object.keys(attributes).length > 0) {
7012                return;
7013            }
7014
7015            yireoGoogleTagManager2Pusher(attributes, 'push (attributes) [script-additions.phtml]');
7016        });
7017
7018        let attributes = {};
7019        getSectionNames().forEach(function (sectionName) {
7020            if (!event.detail.data[sectionName].gtm_events) {
7021                return;
7022            }
7023
7024            const gtmEvents = event.detail.data[sectionName].gtm_events;
7025            for (const [eventId, eventData] of Object.entries(gtmEvents)) {
7026                yireoGoogleTagManager2Logger('found event in section "' + sectionName + '"', eventData);
7027
7028                const metaData = eventData.meta;
7029                yireoGoogleTagManager2Pusher(eventData, 'push (customerData "' + sectionName + '"  event "' + eventId + '")');
7030
7031                if (!metaData || metaData.cacheable !== true) {
7032                    yireoGoogleTagManager2Logger('removing event "' + eventId + '" from section "' + sectionName + '"')
7033
7034                    let mageCacheStorage = event.detail.data;
7035
7036                    if (mageCacheStorage !== null
7037                        && typeof mageCacheStorage[sectionName] !== 'undefined'
7038                        && typeof mageCacheStorage[sectionName].gtm_events !== 'undefined'
7039                        && eventId in mageCacheStorage[sectionName].gtm_events) {
7040                        delete mageCacheStorage[sectionName].gtm_events[eventId];
7041                    }
7042
7043                    window.localStorage.setItem('mage-cache-storage', JSON.stringify(mageCacheStorage));
7044                }
7045            }
7046        });
7047
7048        if (false === isEmpty(attributes)) {
7049            yireoGoogleTagManager2Pusher(attributes, 'dataLayer (initial js) [script-additions.phtml]');
7050        }
7051    });
7052</script>
vendor: 1 bytes, line 7052
7052
7053<script type="text/javascript">window.NREUM||(NREUM={});NREUM.info={"beacon":"bam.nr-data.net","licenseKey":"fcf28e5364","applicationID":"95730697","transactionName":"YFEAYkBRWEdZUkFaDVkbI1VGWVlaF1JYQE1eWgZTSh9fWlxUTQ==","queueTime":0,"applicationTime":395,"atts":"TBYDFAhLS0k=","errorBeacon":"bam.nr-data.net","agent":""}</script>
7053</body>
7054</html>

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.