1<!DOCTYPE html> 2 3<html lang="en-US" prefix="og: https://ogp.me/ns#"> 4 5<head><meta charset="UTF-8">
5<script type="968bfde1705c18b9099319f7-text/javascript">if(navigator.userAgent.match(/MSIE|Internet Explorer/i)||navigator.userAgent.match(/Trident\/7\..*?rv:11/i)){var href=document.location.href;if(!href.match(/[?&]nowprocket/)){if(href.indexOf("?")==-1){if(href.indexOf("#")==-1){document.location.href=href+"?nowprocket=1"}else{document.location.href=href.replace("#","?nowprocket=1#")}}else{if(href.indexOf("#")==-1){document.location.href=href+"&nowprocket=1"}else{document.location.href=href.replace("#","&nowprocket=1#")}}}}</script>
5<script type="968bfde1705c18b9099319f7-text/javascript">(()=>{class RocketLazyLoadScripts{constructor(){this.v="2.0.5",this.userEvents=["keydown","keyup","mousedown","mouseup","mousemove","mouseover","mouseout","touchmove","touchstart","touchend","touchcancel","wheel","click","dblclick","input"],this.attributeEvents=["onblur","onclick","oncontextmenu","ondblclick","onfocus","onmousedown","onmouseenter","onmouseleave","onmousemove","onmouseout","onmouseover","onmouseup","onmousewheel","onscroll","onsubmit"]}async t(){this.i(),this.o(),/iP(ad|hone)/.test(navigator.userAgent)&&this.h(),this.u(),this.l(this),this.m(),this.k(this),this.p(this),this._(),await Promise.all([this.R(),this.L()]),this.lastBreath=Date.now(),this.S(this),this.P(),this.D(),this.O(),this.M(),await this.C(this.delayedScripts.normal),await this.C(this.delayedScripts.defer),await this.C(this.delayedScripts.async),await this.T(),await this.F(),await this.j(),await this.A(),window.dispatchEvent(new Event("rocket-allScriptsLoaded")),this.everythingLoaded=!0,this.lastTouchEnd&&await new Promise(t=>setTimeout(t,500-Date.now()+this.lastTouchEnd)),this.I(),this.H(),this.U(),this.W()}i(){this.CSPIssue=sessionStorage.getItem("rocketCSPIssue"),document.addEventListener("securitypolicyviolation",t=>{this.CSPIssue||"script-src-elem"!==t.violatedDirective||"data"!==t.blockedURI||(this.CSPIssue=!0,sessionStorage.setItem("rocketCSPIssue",!0))},{isRocket:!0})}o(){window.addEventListener("pageshow",t=>{this.persisted=t.persisted,this.realWindowLoadedFired=!0},{isRocket:!0}),window.addEventListener("pagehide",()=>{this.onFirstUserAction=null},{isRocket:!0})}h(){let t;function e(e){t=e}window.addEventListener("touchstart",e,{isRocket:!0}),window.addEventListener("touchend",function i(o){o.changedTouches[0]&&t.changedTouches[0]&&Math.abs(o.changedTouches[0].pageX-t.changedTouches[0].pageX)<10&&Math.abs(o.changedTouches[0].pageY-t.changedTouches[0].pageY)<10&&o.timeStamp-t.timeStamp<200&&(window.removeEventListener("touchstart",e,{isRocket:!0}),window.removeEventListener("touchend",i,{isRocket:!0}),"INPUT"===o.target.tagName&&"text"===o.target.type||(o.target.dispatchEvent(new TouchEvent("touchend",{target:o.target,bubbles:!0})),o.target.dispatchEvent(new MouseEvent("mouseover",{target:o.target,bubbles:!0})),o.target.dispatchEvent(new PointerEvent("click",{target:o.target,bubbles:!0,cancelable:!0,detail:1,clientX:o.changedTouches[0].clientX,clientY:o.changedTouches[0].clientY})),event.preventDefault()))},{isRocket:!0})}q(t){this.userActionTriggered||("mousemove"!==t.type||this.firstMousemoveIgnored?"keyup"===t.type||"mouseover"===t.type||"mouseout"===t.type||(this.userActionTriggered=!0,this.onFirstUserAction&&this.onFirstUserAction()):this.firstMousemoveIgnored=!0),"click"===t.type&&t.preventDefault(),t.stopPropagation(),t.stopImmediatePropagation(),"touchstart"===this.lastEvent&&"touchend"===t.type&&(this.lastTouchEnd=Date.now()),"click"===t.type&&(this.lastTouchEnd=0),this.lastEvent=t.type,t.composedPath&&t.composedPath()[0].getRootNode()instanceof ShadowRoot&&(t.rocketTarget=t.composedPath()[0]),this.savedUserEvents.push(t)}u(){this.savedUserEvents=[],this.userEventHandler=this.q.bind(this),this.userEvents.forEach(t=>window.addEventListener(t,this.userEventHandler,{passive:!1,isRocket:!0})),document.addEventListener("visibilitychange",this.userEventHandler,{isRocket:!0})}U(){this.userEvents.forEach(t=>window.removeEventListener(t,this.userEventHandler,{passive:!1,isRocket:!0})),document.removeEventListener("visibilitychange",this.userEventHandler,{isRocket:!0}),this.savedUserEvents.forEach(t=>{(t.rocketTarget||t.target).dispatchEvent(new window[t.constructor.name](t.type,t))})}m(){const t="return false",e=Array.from(this.attributeEvents,t=>"data-rocket-"+t),i="["+this.attributeEvents.join("],[")+"]",o="[data-rocket-"+this.attributeEvents.join("],[data-rocket-")+"]",s=(e,i,o)=>{o&&o!==t&&(e.setAttribute("data-rocket-"+i,o),e["rocket"+i]=new Function("event",o),e.setAttribute(i,t))};new MutationObserver(t=>{for(const n of t)"attributes"===n.type&&(n.attributeName.startsWith("data-rocket-")||this.everythingLoaded?n.attributeName.startsWith("data-rocket-")&&this.everythingLoaded&&this.N(n.target,n.attributeName.substring(12)):s(n.target,n.attributeName,n.target.getAttribute(n.attributeName))),"childList"===n.type&&n.addedNodes.forEac
5h(t=>{if(t.nodeType===Node.ELEMENT_NODE)if(this.everythingLoaded)for(const i of[t,...t.querySelectorAll(o)])for(const t of i.getAttributeNames())e.includes(t)&&this.N(i,t.substring(12));else for(const e of[t,...t.querySelectorAll(i)])for(const t of e.getAttributeNames())this.attributeEvents.includes(t)&&s(e,t,e.getAttribute(t))})}).observe(document,{subtree:!0,childList:!0,attributeFilter:[...this.attributeEvents,...e]})}I(){this.attributeEvents.forEach(t=>{document.querySelectorAll("[data-rocket-"+t+"]").forEach(e=>{this.N(e,t)})})}N(t,e){const i=t.getAttribute("data-rocket-"+e);i&&(t.setAttribute(e,i),t.removeAttribute("data-rocket-"+e))}k(t){Object.defineProperty(HTMLElement.prototype,"onclick",{get(){return this.rocketonclick||null},set(e){this.rocketonclick=e,this.setAttribute(t.everythingLoaded?"onclick":"data-rocket-onclick","this.rocketonclick(event)")}})}S(t){function e(e,i){let o=e[i];e[i]=null,Object.defineProperty(e,i,{get:()=>o,set(s){t.everythingLoaded?o=s:e["rocket"+i]=o=s}})}e(document,"onreadystatechange"),e(window,"onload"),e(window,"onpageshow");try{Object.defineProperty(document,"readyState",{get:()=>t.rocketReadyState,set(e){t.rocketReadyState=e},configurable:!0}),document.readyState="loading"}catch(t){console.log("WPRocket DJE readyState conflict, bypassing")}}l(t){this.originalAddEventListener=EventTarget.prototype.addEventListener,this.originalRemoveEventListener=EventTarget.prototype.removeEventListener,this.savedEventListeners=[],EventTarget.prototype.addEventListener=function(e,i,o){o&&o.isRocket||!t.B(e,this)&&!t.userEvents.includes(e)||t.B(e,this)&&!t.userActionTriggered||e.startsWith("rocket-")||t.everythingLoaded?t.originalAddEventListener.call(this,e,i,o):(t.savedEventListeners.push({target:this,remove:!1,type:e,func:i,options:o}),"mouseenter"!==e&&"mouseleave"!==e||t.originalAddEventListener.call(this,e,t.savedUserEvents.push,o))},EventTarget.prototype.removeEventListener=function(e,i,o){o&&o.isRocket||!t.B(e,this)&&!t.userEvents.includes(e)||t.B(e,this)&&!t.userActionTriggered||e.startsWith("rocket-")||t.everythingLoaded?t.originalRemoveEventListener.call(this,e,i,o):t.savedEventListeners.push({target:this,remove:!0,type:e,func:i,options:o})}}J(t,e){this.savedEventListeners=this.savedEventListeners.filter(i=>{let o=i.type,s=i.target||window;return e!==o||t!==s||(this.B(o,s)&&(i.type="rocket-"+o),this.$(i),!1)})}H(){EventTarget.prototype.addEventListener=this.originalAddEventListener,EventTarget.prototype.removeEventListener=this.originalRemoveEventListener,this.savedEventListeners.forEach(t=>this.$(t))}$(t){t.remove?this.originalRemoveEventListener.call(t.target,t.type,t.func,t.options):this.originalAddEventListener.call(t.target,t.type,t.func,t.options)}p(t){let e;function i(e){return t.everythingLoaded?e:e.split(" ").map(t=>"load"===t||t.startsWith("load.")?"rocket-jquery-load":t).join(" ")}function o(o){function s(e){const s=o.fn[e];o.fn[e]=o.fn.init.prototype[e]=function(){return this[0]===window&&t.userActionTriggered&&("string"==typeof arguments[0]||arguments[0]instanceof String?arguments[0]=i(arguments[0]):"object"==typeof arguments[0]&&Object.keys(arguments[0]).forEach(t=>{const e=arguments[0][t];delete arguments[0][t],arguments[0][i(t)]=e})),s.apply(this,arguments),this}}if(o&&o.fn&&!t.allJQueries.includes(o)){const e={DOMContentLoaded:[],"rocket-DOMContentLoaded":[]};for(const t in e)document.addEventListener(t,()=>{e[t].forEach(t=>t())},{isRocket:!0});o.fn.ready=o.fn.init.prototype.ready=function(i){function s(){parseInt(o.fn.jquery)>2?setTimeout(()=>i.bind(document)(o)):i.bind(document)(o)}return"function"==typeof i&&(t.realDomReadyFired?!t.userActionTriggered||t.fauxDomReadyFired?s():e["rocket-DOMContentLoaded"].push(s):e.DOMContentLoaded.push(s)),this},s("on"),s("one"),s("off"),t.allJQueries.push(o)}e=o}t.allJQueries=[],o(window.jQuery),Object.defineProperty(window,"jQuery",{get:()=>e,set(t){o(t)}})}P(){const t=new Map;document.write=document.writeln=function(e){const i=document.currentScript,o=document.createRange(),s=i.parentElement;let n=t.get(i);void 0===n&&(n=i.nextSibling,t.set(i,n));const c=document.createDocumentFragment();o.setStart(c,0),c.appendChild(o.createContextualFragment(e)),s.insertBefore(c,n)}}async R(){return new Promise(t=>{this.userActionTriggered?t():this.onFirstUserAction=t})}async L(){return new Promise(t=>{document.addEventListener("DOMContentLoaded",()=>{this.realDomReadyFired=!0,t()},{isRocket:!0})})}async j(){return this.realWindowLoadedFired?Promise.resolve():new Promise(t=>{window.addEventListener("load",t,{isRocket:!0})})}M(){this.pendingScripts=[];this.scriptsMutationObserver=new MutationObserver(t=>
5{for(const e of t)e.addedNodes.forEach(t=>{"SCRIPT"!==t.tagName||!t.src||t.noModule||t.isWPRocket||this.pendingScripts.push({script:t,promise:new Promise(e=>{const i=()=>{const i=this.pendingScripts.findIndex(e=>e.script===t);i>=0&&this.pendingScripts.splice(i,1),e()};t.addEventListener("load",i,{isRocket:!0}),t.addEventListener("error",i,{isRocket:!0}),setTimeout(i,1e3)})})})}),this.scriptsMutationObserver.observe(document,{childList:!0,subtree:!0})}async F(){await this.X(),this.pendingScripts.length?(await this.pendingScripts[0].promise,await this.F()):this.scriptsMutationObserver.disconnect()}D(){this.delayedScripts={normal:[],async:[],defer:[]},document.querySelectorAll("script[type$=rocketlazyloadscript]").forEach(t=>{t.hasAttribute("data-rocket-src")?t.hasAttribute("async")&&!1!==t.async?this.delayedScripts.async.push(t):t.hasAttribute("defer")&&!1!==t.defer||"module"===t.getAttribute("data-rocket-type")?this.delayedScripts.defer.push(t):this.delayedScripts.normal.push(t):this.delayedScripts.normal.push(t)})}async _(){await this.L();let t=[];document.querySelectorAll("script[type$=rocketlazyloadscript][data-rocket-src]").forEach(e=>{let i=e.getAttribute("data-rocket-src");if(i&&!i.startsWith("data:")){i.startsWith("//")&&(i=location.protocol+i);try{const o=new URL(i).origin;o!==location.origin&&t.push({src:o,crossOrigin:e.crossOrigin||"module"===e.getAttribute("data-rocket-type")})}catch(t){}}}),t=[...new Map(t.map(t=>[JSON.stringify(t),t])).values()],this.Y(t,"preconnect")}
5async G(t){if(await this.K(),!0!==t.noModule||!("noModule"in HTMLScriptElement.prototype))return new Promise(e=>{let i;function o(){(i||t).setAttribute("data-rocket-status","executed"),e()}try{if(navigator.userAgent.includes("Firefox/")||""===navigator.vendor||this.CSPIssue)i=document.createElement("script"),[...t.attributes].forEach(t=>{let e=t.nodeName;"type"!==e&&("data-rocket-type"===e&&(e="type"),"data-rocket-src"===e&&(e="src"),i.setAttribute(e,t.nodeValue))}),t.text&&(i.text=t.text),t.nonce&&(i.nonce=t.nonce),i.hasAttribute("src")?(i.addEventListener("load",o,{isRocket:!0}),i.addEventListener("error",()=>{i.setAttribute("data-rocket-status","failed-network"),e()},{isRocket:!0}),setTimeout(()=>{i.isConnected||e()},1)):(i.text=t.text,o()),i.isWPRocket=!0,t.parentNode.replaceChild(i,t);else{const i=t.getAttribute("data-rocket-type"),s=t.getAttribute("data-rocket-src");i?(t.type=i,t.removeAttribute("data-rocket-type")):t.removeAttribute("type"),t.addEventListener("load",o,{isRocket:!0}),t.addEventListener("error",i=>{this.CSPIssue&&i.target.src.startsWith("data:")?(console.log("WPRocket: CSP fallback activated"),t.removeAttribute("src"),this.G(t).then(e)):(t.setAttribute("data-rocket-status","failed-network"),e())},{isRocket:!0}),s?(t.fetchPriority="high",t.removeAttribute("data-rocket-src"),t.src=s):t.src="data:text/javascript;base64,"+window.btoa(unescape(encodeURIComponent(t.text)))}}catch(i){t.setAttribute("data-rocket-status","failed-transform"),e()}});t.setAttribute("data-rocket-status","skipped")}async C(t){const e=t.shift();return e?(e.isConnected&&await this.G(e),this.C(t)):Promise.resolve()}O(){this.Y([...this.delayedScripts.normal,...this.delayedScripts.defer,...this.delayedScripts.async],"preload")}Y(t,e){this.trash=this.trash||[];let i=!0;var o=document.createDocumentFragment();t.forEach(t=>{const s=t.getAttribute&&t.getAttribute("data-rocket-src")||t.src;if(s&&!s.startsWith("data:")){const n=document.createElement("link");n.href=s,n.rel=e,"preconnect"!==e&&(n.as="script",n.fetchPriority=i?"high":"low"),t.getAttribute&&"module"===t.getAttribute("data-rocket-type")&&(n.crossOrigin=!0),t.crossOrigin&&(n.crossOrigin=t.crossOrigin),t.integrity&&(n.integrity=t.integrity),t.nonce&&(n.nonce=t.nonce),o.appendChild(n),this.trash.push(n),i=!1}}),document.head.appendChild(o)}W(){this.trash.forEach(t=>t.remove())}async T(){try{document.readyState="interactive"}catch(t){}this.fauxDomReadyFired=!0;try{await this.K(),this.J(document,"readystatechange"),document.dispatchEvent(new Event("rocket-readystatechange")),await this.K(),document.rocketonreadystatechange&&document.rocketonreadystatechange(),await this.K(),this.J(document,"DOMContentLoaded"),document.dispatchEvent(new Event("rocket-DOMContentLoaded")),await this.K(),this.J(window,"DOMContentLoaded"),window.dispatchEvent(new Event("rocket-DOMContentLoaded"))}catch(t){console.error(t)}}async A(){try{document.readyState="complete"}catch(t){}try{await this.K(),this.J(document,"readystatechange"),document.dispatchEvent(new Event("rocket-readystatechange")),await this.K(),document.rocketonreadystatechange&&document.rocketonreadystatechange(),await this.K(),this.J(window,"load"),window.dispatchEvent(new Event("rocket-load")),await this.K(),window.rocketonload&&window.rocketonload(),await this.K(),this.allJQueries.forEach(t=>t(window).trigger("rocket-jquery-load")),await this.K(),this.J(window,"pageshow");const t=new Event("rocket-pageshow");t.persisted=this.persisted,window.dispatchEvent(t),await this.K(),window.rocketonpageshow&&window.rocketonpageshow({persisted:this.persisted})}catch(t){console.error(t)}}async K(){Date.now()-this.lastBreath>45&&(await this.X(),this.lastBreath=Date.now())}async X(){return document.hidden?new Promise(t=>setTimeout(t)):new Promise(t=>requestAnimationFrame(t))}B(t,e=window){return e===document&&"readystatechange"===t||(e===document&&"DOMContentLoaded"===t||(e===window&&"DOMContentLoaded"===t||(e===window&&"load"===t||e===window&&"pageshow"===t)))}static run(){(new RocketLazyLoadScripts).t()}}RocketLazyLoadScripts.run()})(); 6</script>
6 7 8 9 10 11<meta name="viewport" content="width=device-width, initial-scale=1"> 12 13<link rel="profile" href="https://gmpg.org/xfn/11"> 14 15<link rel="pingback" href="https://jackkeller.com/xmlrpc.php"> 16
17<script type="text/rocketlazyloadscript">window._wca = window._wca || [];</script>
17 18 19<!-- Search Engine Optimization by Rank Math PRO - https://rankmath.com/ --> 20<title>Tax Record Search | List On MLS & REALTOR.com+ From $75.</title> 21 22<link data-rocket-prefetch href="https://stats.wp.com" rel="dns-prefetch"> 23<link data-rocket-preload as="style" href="https://fonts.googleapis.com/css?family=Lato%3A300%2C400%2C700%2C400italic%7CMontserrat%3A700%7CHomemade%20Apple%7COpen%20Sans%3A400%2C300%2C300italic%2C400italic%2C600italic%2C600%2C700%2C700italic%2C800%2C800italic&display=swap" rel="preload">
vendor: 137 bytes, lines 23-24
23 24<script src="/cdn-cgi/scripts/7d0fa10a/cloudflare-static/rocket-loader.min.js" data-cf-settings="968bfde1705c18b9099319f7-|49"></script>
24<style type="text/css">@font-face {font-family:'Lato';font-style:normal;font-weight:300;src:url(/cf-fonts/s/lato/5.2.7/latin/300/normal.woff2);unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;font-display:swap;}@font-face {font-family:'Lato';font-style:normal;font-weight:300;src:url(/cf-fonts/s/lato/5.2.7/latin-ext/300/normal.woff2);unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;font-display:swap;}@font-face {font-family:'Lato';font-style:normal;font-weight:400;src:url(/cf-fonts/s/lato/5.2.7/latin/400/normal.woff2);unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;font-display:swap;}@font-face {font-family:'Lato';font-style:normal;font-weight:400;src:url(/cf-fonts/s/lato/5.2.7/latin-ext/400/normal.woff2);unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;font-display:swap;}@font-face {font-family:'Lato';font-style:normal;font-weight:700;src:url(/cf-fonts/s/lato/5.2.7/latin/700/normal.woff2);unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;font-display:swap;}@font-face {font-family:'Lato';font-style:normal;font-weight:700;src:url(/cf-fonts/s/lato/5.2.7/latin-ext/700/normal.woff2);unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;font-display:swap;}@font-face {font-family:'Lato';font-style:italic;font-weight:400;src:url(/cf-fonts/s/lato/5.2.7/latin/400/italic.woff2);unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;font-display:swap;}@font-face {font-family:'Lato';font-style:italic;font-weight:400;src:url(/cf-fonts/s/lato/5.2.7/latin-ext/400/italic.woff2);unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;font-display:swap;}@font-face {font-family:'Montserrat';font-style:normal;font-weight:700;src:url(/cf-fonts/s/montserrat/5.2.8/cyrillic/700/normal.woff2);unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;font-display:swap;}@font-face {font-family:'Montserrat';font-style:normal;font-weight:700;src:url(/cf-fonts/s/montserrat/5.2.8/latin/700/normal.woff2);unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;font-display:swap;}@font-face {font-family:'Montserrat';font-style:normal;font-weight:700;src:url(/cf-fonts/s/montserrat/5.2.8/latin-ext/700/normal.woff2);unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;font-display:swap;}@font-face {font-family:'Montserrat';font-style:normal;font-weight:700;src:url(/cf-fonts/s/montserrat/5.2.8/vietnamese/700/normal.woff2);unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;font-display:swap;}@font-face {font-family:'Montserrat';font-style:normal;font-weight:700;src:url(/cf-fonts/s/montserrat/5.2.8/cyrillic-ext/700/normal.woff2);unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;font-display:swap;}@font-face {font-family:'Homemade Apple';font-style:normal;font-weight:400;src:url(/cf-fonts/s/homemade-apple/5.2.8/latin/400/normal.woff2);
24unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;font-display:swap;}@font-face {font-family:'Open Sans';font-style:normal;font-weight:400;src:url(/cf-fonts/s/open-sans/5.2.7/latin-ext/400/normal.woff2);unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;font-display:swap;}@font-face {font-family:'Open Sans';font-style:normal;font-weight:400;src:url(/cf-fonts/s/open-sans/5.2.7/math/400/normal.woff2);unicode-range:U+0302-0303,U+0305,U+0307-0308,U+0310,U+0312,U+0315,U+031A,U+0326-0327,U+032C,U+032F-0330,U+0332-0333,U+0338,U+033A,U+0346,U+034D,U+0391-03A1,U+03A3-03A9,U+03B1-03C9,U+03D1,U+03D5-03D6,U+03F0-03F1,U+03F4-03F5,U+2016-2017,U+2034-2038,U+203C,U+2040,U+2043,U+2047,U+2050,U+2057,U+205F,U+2070-2071,U+2074-208E,U+2090-209C,U+20D0-20DC,U+20E1,U+20E5-20EF,U+2100-2112,U+2114-2115,U+2117-2121,U+2123-214F,U+2190,U+2192,U+2194-21AE,U+21B0-21E5,U+21F1-21F2,U+21F4-2211,U+2213-2214,U+2216-22FF,U+2308-230B,U+2310,U+2319,U+231C-2321,U+2336-237A,U+237C,U+2395,U+239B-23B7,U+23D0,U+23DC-23E1,U+2474-2475,U+25AF,U+25B3,U+25B7,U+25BD,U+25C1,U+25CA,U+25CC,U+25FB,U+266D-266F,U+27C0-27FF,U+2900-2AFF,U+2B0E-2B11,U+2B30-2B4C,U+2BFE,U+3030,U+FF5B,U+FF5D,U+1D400-1D7FF,U+1EE00-1EEFF;font-display:swap;}@font-face {font-family:'Open Sans';font-style:normal;font-weight:400;src:url(/cf-fonts/s/open-sans/5.2.7/cyrillic/400/normal.woff2);unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;font-display:swap;}@font-face {font-family:'Open Sans';font-style:normal;font-weight:400;src:url(/cf-fonts/s/open-sans/5.2.7/latin/400/normal.woff2);unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;font-display:swap;}@font-face {font-family:'Open Sans';font-style:normal;font-weight:400;src:url(/cf-fonts/s/open-sans/5.2.7/symbols/400/normal.woff2);unicode-range:U+0001-000C,U+000E-001F,U+007F-009F,U+20DD-20E0,U+20E2-20E4,U+2150-218F,U+2190,U+2192,U+2194-2199,U+21AF,U+21E6-21F0,U+21F3,U+2218-2219,U+2299,U+22C4-22C6,U+2300-243F,U+2440-244A,U+2460-24FF,U+25A0-27BF,U+2800-28FF,U+2921-2922,U+2981,U+29BF,U+29EB,U+2B00-2BFF,U+4DC0-4DFF,U+FFF9-FFFB,U+10140-1018E,U+10190-1019C,U+101A0,U+101D0-101FD,U+102E0-102FB,U+10E60-10E7E,U+1D2C0-1D2D3,U+1D2E0-1D37F,U+1F000-1F0FF,U+1F100-1F1AD,U+1F1E6-1F1FF,U+1F30D-1F30F,U+1F315,U+1F31C,U+1F31E,U+1F320-1F32C,U+1F336,U+1F378,U+1F37D,U+1F382,U+1F393-1F39F,U+1F3A7-1F3A8,U+1F3AC-1F3AF,U+1F3C2,U+1F3C4-1F3C6,U+1F3CA-1F3CE,U+1F3D4-1F3E0,U+1F3ED,U+1F3F1-1F3F3,U+1F3F5-1F3F7,U+1F408,U+1F415,U+1F41F,U+1F426,U+1F43F,U+1F441-1F442,U+1F444,U+1F446-1F449,U+1F44C-1F44E,U+1F453,U+1F46A,U+1F47D,U+1F4A3,U+1F4B0,U+1F4B3,U+1F4B9,U+1F4BB,U+1F4BF,U+1F4C8-1F4CB,U+1F4D6,U+1F4DA,U+1F4DF,U+1F4E3-1F4E6,U+1F4EA-1F4ED,U+1F4F7,U+1F4F9-1F4FB,U+1F4FD-1F4FE,U+1F503,U+1F507-1F50B,U+1F50D,U+1F512-1F513,U+1F53E-1F54A,U+1F54F-1F5FA,U+1F610,U+1F650-1F67F,U+1F687,U+1F68D,U+1F691,U+1F694,U+1F698,U+1F6AD,U+1F6B2,U+1F6B9-1F6BA,U+1F6BC,U+1F6C6-1F6CF,U+1F6D3-1F6D7,U+1F6E0-1F6EA,U+1F6F0-1F6F3,U+1F6F7-1F6FC,U+1F700-1F7FF,U+1F800-1F80B,U+1F810-1F847,U+1F850-1F859,U+1F860-1F887,U+1F890-1F8AD,U+1F8B0-1F8BB,U+1F8C0-1F8C1,U+1F900-1F90B,U+1F93B,U+1F946,U+1F984,U+1F996,U+1F9E9,U+1FA00-1FA6F,U+1FA70-1FA7C,U+1FA80-1FA89,U+1FA8F-1FAC6,U+1FACE-1FADC,U+1FADF-1FAE9,U+1FAF0-1FAF8,U+1FB00-1FBFF;font-display:swap;}@font-face {font-family:'Open Sans';font-style:normal;font-weight:400;src:url(/cf-fonts/s/open-sans/5.2.7/cyrillic-ext/400/normal.woff2);unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;font-display:swap;}@font-face {font-family:'Open Sans';font-style:normal;font-weight:400;src:url(/cf-fonts/s/open-sans/5.2.7/vietnamese/400/normal.woff2);unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;font-display:swap;}@font-face {font-family:'Open Sans';font-style:normal;font-weight:400;src:url(/cf-fonts/s/open-sans/5.2.7/hebrew/400/normal.woff2);
24unicode-range:U+0307-0308,U+0590-05FF,U+200C-2010,U+20AA,U+25CC,U+FB1D-FB4F;font-display:swap;}@font-face {font-family:'Open Sans';font-style:normal;font-weight:400;src:url(/cf-fonts/s/open-sans/5.2.7/greek/400/normal.woff2);unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF;font-display:swap;}@font-face {font-family:'Open Sans';font-style:normal;font-weight:400;src:url(/cf-fonts/s/open-sans/5.2.7/greek-ext/400/normal.woff2);unicode-range:U+1F00-1FFF;font-display:swap;}@font-face {font-family:'Open Sans';font-style:normal;font-weight:300;src:url(/cf-fonts/s/open-sans/5.2.7/latin/300/normal.woff2);unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;font-display:swap;}@font-face {font-family:'Open Sans';font-style:normal;font-weight:300;src:url(/cf-fonts/s/open-sans/5.2.7/hebrew/300/normal.woff2);unicode-range:U+0307-0308,U+0590-05FF,U+200C-2010,U+20AA,U+25CC,U+FB1D-FB4F;font-display:swap;}@font-face {font-family:'Open Sans';font-style:normal;font-weight:300;src:url(/cf-fonts/s/open-sans/5.2.7/latin-ext/300/normal.woff2);unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;font-display:swap;}@font-face {font-family:'Open Sans';font-style:normal;font-weight:300;src:url(/cf-fonts/s/open-sans/5.2.7/greek-ext/300/normal.woff2);unicode-range:U+1F00-1FFF;font-display:swap;}@font-face {font-family:'Open Sans';font-style:normal;font-weight:300;src:url(/cf-fonts/s/open-sans/5.2.7/cyrillic-ext/300/normal.woff2);unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;font-display:swap;}@font-face {font-family:'Open Sans';font-style:normal;font-weight:300;src:url(/cf-fonts/s/open-sans/5.2.7/math/300/normal.woff2);unicode-range:U+0302-0303,U+0305,U+0307-0308,U+0310,U+0312,U+0315,U+031A,U+0326-0327,U+032C,U+032F-0330,U+0332-0333,U+0338,U+033A,U+0346,U+034D,U+0391-03A1,U+03A3-03A9,U+03B1-03C9,U+03D1,U+03D5-03D6,U+03F0-03F1,U+03F4-03F5,U+2016-2017,U+2034-2038,U+203C,U+2040,U+2043,U+2047,U+2050,U+2057,U+205F,U+2070-2071,U+2074-208E,U+2090-209C,U+20D0-20DC,U+20E1,U+20E5-20EF,U+2100-2112,U+2114-2115,U+2117-2121,U+2123-214F,U+2190,U+2192,U+2194-21AE,U+21B0-21E5,U+21F1-21F2,U+21F4-2211,U+2213-2214,U+2216-22FF,U+2308-230B,U+2310,U+2319,U+231C-2321,U+2336-237A,U+237C,U+2395,U+239B-23B7,U+23D0,U+23DC-23E1,U+2474-2475,U+25AF,U+25B3,U+25B7,U+25BD,U+25C1,U+25CA,U+25CC,U+25FB,U+266D-266F,U+27C0-27FF,U+2900-2AFF,U+2B0E-2B11,U+2B30-2B4C,U+2BFE,U+3030,U+FF5B,U+FF5D,U+1D400-1D7FF,U+1EE00-1EEFF;font-display:swap;}@font-face {font-family:'Open Sans';font-style:normal;font-weight:300;src:url(/cf-fonts/s/open-sans/5.2.7/vietnamese/300/normal.woff2);unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;font-display:swap;}@font-face {font-family:'Open Sans';font-style:normal;font-weight:300;src:url(/cf-fonts/s/open-sans/5.2.7/greek/300/normal.woff2);unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF;font-display:swap;}@font-face {font-family:'Open Sans';font-style:normal;font-weight:300;src:url(/cf-fonts/s/open-sans/5.2.7/symbols/300/normal.woff2);unicode-range:U+0001-000C,U+000E-001F,U+007F-009F,U+20DD-20E0,U+20E2-20E4,U+2150-218F,U+2190,U+2192,U+2194-2199,U+21AF,U+21E6-21F0,U+21F3,U+2218-2219,U+2299,U+22C4-22C6,U+2300-243F,U+2440-244A,U+2460-24FF,U+25A0-27BF,U+2800-28FF,U+2921-2922,U+2981,U+29BF,U+29EB,U+2B00-2BFF,U+4DC0-4DFF,U+FFF9-FFFB,U+10140-1018E,U+10190-1019C,U+101A0,U+101D0-101FD,U+102E0-102FB,U+10E60-10E7E,U+1D2C0-1D2D3,U+1D2E0-1D37F,U+1F000-1F0FF,U+1F100-1F1AD,U+1F1E6-1F1FF,U+1F30D-1F30F,U+1F315,U+1F31C,U+1F31E,U+1F320-1F32C,U+1F336,U+1F378,U+1F37D,U+1F382,U+1F393-1F39F,U+1F3A7-1F3A8,U+1F3AC-1F3AF,U+1F3C2,U+1F3C4-1F3C6,U+1F3CA-1F3CE,U+1F3D4-1F3E0,U+1F3ED,U+1F3F1-1F3F3,U+1F3F5-1F3F7,U+1F408,U+1F415,U+1F41F,U+1F426,U+1F43F,U+1F441-1F442,U+1F444,U+1F446-1F449,U+1F44C-1F44E,U+1F453,U+1F46A,U+1F47D,U+1F4A3,U+1F4B0,U+1F4B3,U+1F4B9,U+1F4BB,U+1F4BF,U+1F4C8-1F4CB,U+1F4D6,U+1F4DA,U+1F4DF,U+1F4E3-1F4E6,U+1F4EA-1F4ED,U+1F4F7,U+1F4F9-1F4FB,U+1F4FD-1F4FE,U+1F503,U+1F507-1F50B,U+1F50D,U+1F512-1F513,U+1F53E-1F54A,U+1F54F-1F5FA,U+1F610,U+1F650-1F67F,U+1F687,U+1F68D,U+1F691,U+1F694,U+1F698,U+1F6AD,U+1F6B2,U+1F6B9-1F6BA,U+1F6BC,U+1F6C6-1F6CF,U+1F6D3-1F6D7,U+1F6E0-1F6EA,U+1F6F0-1F6F3,U+1F6F7-1F6FC,U+1F700-1F7FF,U+1F800-1F80B,U+1F810-1F847,U+1F850-1F859,U+1F860-1F887,U+1F890-1F8AD,U+1F8B0-1F8BB,U+1F8C0-1F8C1,U+1F900-1F90B,U+1F93B,U+1F946,U+1F984,U+1F996,U+1F9E9,U+1FA00-1FA6F,U+1FA70-1FA7C,U+1FA80-1FA89,U+1FA8F-1FAC6,U+1FACE-1FADC,U+1FADF-1FAE9,U+1FAF0-1FAF8,U+1FB00-1FBFF;font-display:swap;}@font-face {font-family:'Open Sans';font-style:normal;font-weight:300;src:url(/cf-fonts/s/open-sans/5.2.7/cyrillic/300/normal.woff2);
24unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;font-display:swap;}@font-face {font-family:'Open Sans';font-style:italic;font-weight:300;src:url(/cf-fonts/s/open-sans/5.2.7/greek-ext/300/italic.woff2);unicode-range:U+1F00-1FFF;font-display:swap;}@font-face {font-family:'Open Sans';font-style:italic;font-weight:300;src:url(/cf-fonts/s/open-sans/5.2.7/hebrew/300/italic.woff2);unicode-range:U+0307-0308,U+0590-05FF,U+200C-2010,U+20AA,U+25CC,U+FB1D-FB4F;font-display:swap;}@font-face {font-family:'Open Sans';font-style:italic;font-weight:300;src:url(/cf-fonts/s/open-sans/5.2.7/greek/300/italic.woff2);unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF;font-display:swap;}@font-face {font-family:'Open Sans';font-style:italic;font-weight:300;src:url(/cf-fonts/s/open-sans/5.2.7/symbols/300/italic.woff2);unicode-range:U+0001-000C,U+000E-001F,U+007F-009F,U+20DD-20E0,U+20E2-20E4,U+2150-218F,U+2190,U+2192,U+2194-2199,U+21AF,U+21E6-21F0,U+21F3,U+2218-2219,U+2299,U+22C4-22C6,U+2300-243F,U+2440-244A,U+2460-24FF,U+25A0-27BF,U+2800-28FF,U+2921-2922,U+2981,U+29BF,U+29EB,U+2B00-2BFF,U+4DC0-4DFF,U+FFF9-FFFB,U+10140-1018E,U+10190-1019C,U+101A0,U+101D0-101FD,U+102E0-102FB,U+10E60-10E7E,U+1D2C0-1D2D3,U+1D2E0-1D37F,U+1F000-1F0FF,U+1F100-1F1AD,U+1F1E6-1F1FF,U+1F30D-1F30F,U+1F315,U+1F31C,U+1F31E,U+1F320-1F32C,U+1F336,U+1F378,U+1F37D,U+1F382,U+1F393-1F39F,U+1F3A7-1F3A8,U+1F3AC-1F3AF,U+1F3C2,U+1F3C4-1F3C6,U+1F3CA-1F3CE,U+1F3D4-1F3E0,U+1F3ED,U+1F3F1-1F3F3,U+1F3F5-1F3F7,U+1F408,U+1F415,U+1F41F,U+1F426,U+1F43F,U+1F441-1F442,U+1F444,U+1F446-1F449,U+1F44C-1F44E,U+1F453,U+1F46A,U+1F47D,U+1F4A3,U+1F4B0,U+1F4B3,U+1F4B9,U+1F4BB,U+1F4BF,U+1F4C8-1F4CB,U+1F4D6,U+1F4DA,U+1F4DF,U+1F4E3-1F4E6,U+1F4EA-1F4ED,U+1F4F7,U+1F4F9-1F4FB,U+1F4FD-1F4FE,U+1F503,U+1F507-1F50B,U+1F50D,U+1F512-1F513,U+1F53E-1F54A,U+1F54F-1F5FA,U+1F610,U+1F650-1F67F,U+1F687,U+1F68D,U+1F691,U+1F694,U+1F698,U+1F6AD,U+1F6B2,U+1F6B9-1F6BA,U+1F6BC,U+1F6C6-1F6CF,U+1F6D3-1F6D7,U+1F6E0-1F6EA,U+1F6F0-1F6F3,U+1F6F7-1F6FC,U+1F700-1F7FF,U+1F800-1F80B,U+1F810-1F847,U+1F850-1F859,U+1F860-1F887,U+1F890-1F8AD,U+1F8B0-1F8BB,U+1F8C0-1F8C1,U+1F900-1F90B,U+1F93B,U+1F946,U+1F984,U+1F996,U+1F9E9,U+1FA00-1FA6F,U+1FA70-1FA7C,U+1FA80-1FA89,U+1FA8F-1FAC6,U+1FACE-1FADC,U+1FADF-1FAE9,U+1FAF0-1FAF8,U+1FB00-1FBFF;font-display:swap;}@font-face {font-family:'Open Sans';font-style:italic;font-weight:300;src:url(/cf-fonts/s/open-sans/5.2.7/cyrillic/300/italic.woff2);unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;font-display:swap;}@font-face {font-family:'Open Sans';font-style:italic;font-weight:300;src:url(/cf-fonts/s/open-sans/5.2.7/math/300/italic.woff2);unicode-range:U+0302-0303,U+0305,U+0307-0308,U+0310,U+0312,U+0315,U+031A,U+0326-0327,U+032C,U+032F-0330,U+0332-0333,U+0338,U+033A,U+0346,U+034D,U+0391-03A1,U+03A3-03A9,U+03B1-03C9,U+03D1,U+03D5-03D6,U+03F0-03F1,U+03F4-03F5,U+2016-2017,U+2034-2038,U+203C,U+2040,U+2043,U+2047,U+2050,U+2057,U+205F,U+2070-2071,U+2074-208E,U+2090-209C,U+20D0-20DC,U+20E1,U+20E5-20EF,U+2100-2112,U+2114-2115,U+2117-2121,U+2123-214F,U+2190,U+2192,U+2194-21AE,U+21B0-21E5,U+21F1-21F2,U+21F4-2211,U+2213-2214,U+2216-22FF,U+2308-230B,U+2310,U+2319,U+231C-2321,U+2336-237A,U+237C,U+2395,U+239B-23B7,U+23D0,U+23DC-23E1,U+2474-2475,U+25AF,U+25B3,U+25B7,U+25BD,U+25C1,U+25CA,U+25CC,U+25FB,U+266D-266F,U+27C0-27FF,U+2900-2AFF,U+2B0E-2B11,U+2B30-2B4C,U+2BFE,U+3030,U+FF5B,U+FF5D,U+1D400-1D7FF,U+1EE00-1EEFF;font-display:swap;}@font-face {font-family:'Open Sans';font-style:italic;font-weight:300;src:url(/cf-fonts/s/open-sans/5.2.7/latin/300/italic.woff2);unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;font-display:swap;}@font-face {font-family:'Open Sans';font-style:italic;font-weight:300;src:url(/cf-fonts/s/open-sans/5.2.7/latin-ext/300/italic.woff2);unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;font-display:swap;}@font-face {font-family:'Open Sans';font-style:italic;font-weight:300;src:url(/cf-fonts/s/open-sans/5.2.7/vietnamese/300/italic.woff2);
24unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;font-display:swap;}@font-face {font-family:'Open Sans';font-style:italic;font-weight:300;src:url(/cf-fonts/s/open-sans/5.2.7/cyrillic-ext/300/italic.woff2);unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;font-display:swap;}@font-face {font-family:'Open Sans';font-style:italic;font-weight:400;src:url(/cf-fonts/s/open-sans/5.2.7/vietnamese/400/italic.woff2);unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;font-display:swap;}@font-face {font-family:'Open Sans';font-style:italic;font-weight:400;src:url(/cf-fonts/s/open-sans/5.2.7/cyrillic-ext/400/italic.woff2);unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;font-display:swap;}@font-face {font-family:'Open Sans';font-style:italic;font-weight:400;src:url(/cf-fonts/s/open-sans/5.2.7/greek-ext/400/italic.woff2);unicode-range:U+1F00-1FFF;font-display:swap;}@font-face {font-family:'Open Sans';font-style:italic;font-weight:400;src:url(/cf-fonts/s/open-sans/5.2.7/cyrillic/400/italic.woff2);unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;font-display:swap;}@font-face {font-family:'Open Sans';font-style:italic;font-weight:400;src:url(/cf-fonts/s/open-sans/5.2.7/latin/400/italic.woff2);unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;font-display:swap;}@font-face {font-family:'Open Sans';font-style:italic;font-weight:400;src:url(/cf-fonts/s/open-sans/5.2.7/symbols/400/italic.woff2);unicode-range:U+0001-000C,U+000E-001F,U+007F-009F,U+20DD-20E0,U+20E2-20E4,U+2150-218F,U+2190,U+2192,U+2194-2199,U+21AF,U+21E6-21F0,U+21F3,U+2218-2219,U+2299,U+22C4-22C6,U+2300-243F,U+2440-244A,U+2460-24FF,U+25A0-27BF,U+2800-28FF,U+2921-2922,U+2981,U+29BF,U+29EB,U+2B00-2BFF,U+4DC0-4DFF,U+FFF9-FFFB,U+10140-1018E,U+10190-1019C,U+101A0,U+101D0-101FD,U+102E0-102FB,U+10E60-10E7E,U+1D2C0-1D2D3,U+1D2E0-1D37F,U+1F000-1F0FF,U+1F100-1F1AD,U+1F1E6-1F1FF,U+1F30D-1F30F,U+1F315,U+1F31C,U+1F31E,U+1F320-1F32C,U+1F336,U+1F378,U+1F37D,U+1F382,U+1F393-1F39F,U+1F3A7-1F3A8,U+1F3AC-1F3AF,U+1F3C2,U+1F3C4-1F3C6,U+1F3CA-1F3CE,U+1F3D4-1F3E0,U+1F3ED,U+1F3F1-1F3F3,U+1F3F5-1F3F7,U+1F408,U+1F415,U+1F41F,U+1F426,U+1F43F,U+1F441-1F442,U+1F444,U+1F446-1F449,U+1F44C-1F44E,U+1F453,U+1F46A,U+1F47D,U+1F4A3,U+1F4B0,U+1F4B3,U+1F4B9,U+1F4BB,U+1F4BF,U+1F4C8-1F4CB,U+1F4D6,U+1F4DA,U+1F4DF,U+1F4E3-1F4E6,U+1F4EA-1F4ED,U+1F4F7,U+1F4F9-1F4FB,U+1F4FD-1F4FE,U+1F503,U+1F507-1F50B,U+1F50D,U+1F512-1F513,U+1F53E-1F54A,U+1F54F-1F5FA,U+1F610,U+1F650-1F67F,U+1F687,U+1F68D,U+1F691,U+1F694,U+1F698,U+1F6AD,U+1F6B2,U+1F6B9-1F6BA,U+1F6BC,U+1F6C6-1F6CF,U+1F6D3-1F6D7,U+1F6E0-1F6EA,U+1F6F0-1F6F3,U+1F6F7-1F6FC,U+1F700-1F7FF,U+1F800-1F80B,U+1F810-1F847,U+1F850-1F859,U+1F860-1F887,U+1F890-1F8AD,U+1F8B0-1F8BB,U+1F8C0-1F8C1,U+1F900-1F90B,U+1F93B,U+1F946,U+1F984,U+1F996,U+1F9E9,U+1FA00-1FA6F,U+1FA70-1FA7C,U+1FA80-1FA89,U+1FA8F-1FAC6,U+1FACE-1FADC,U+1FADF-1FAE9,U+1FAF0-1FAF8,U+1FB00-1FBFF;font-display:swap;}@font-face {font-family:'Open Sans';font-style:italic;font-weight:400;src:url(/cf-fonts/s/open-sans/5.2.7/math/400/italic.woff2);unicode-range:U+0302-0303,U+0305,U+0307-0308,U+0310,U+0312,U+0315,U+031A,U+0326-0327,U+032C,U+032F-0330,U+0332-0333,U+0338,U+033A,U+0346,U+034D,U+0391-03A1,U+03A3-03A9,U+03B1-03C9,U+03D1,U+03D5-03D6,U+03F0-03F1,U+03F4-03F5,U+2016-2017,U+2034-2038,U+203C,U+2040,U+2043,U+2047,U+2050,U+2057,U+205F,U+2070-2071,U+2074-208E,U+2090-209C,U+20D0-20DC,U+20E1,U+20E5-20EF,U+2100-2112,U+2114-2115,U+2117-2121,U+2123-214F,U+2190,U+2192,U+2194-21AE,U+21B0-21E5,U+21F1-21F2,U+21F4-2211,U+2213-2214,U+2216-22FF,U+2308-230B,U+2310,U+2319,U+231C-2321,U+2336-237A,U+237C,U+2395,U+239B-23B7,U+23D0,U+23DC-23E1,U+2474-2475,U+25AF,U+25B3,U+25B7,U+25BD,U+25C1,U+25CA,U+25CC,U+25FB,U+266D-266F,U+27C0-27FF,U+2900-2AFF,U+2B0E-2B11,U+2B30-2B4C,U+2BFE,U+3030,U+FF5B,U+FF5D,U+1D400-1D7FF,U+1EE00-1EEFF;font-display:swap;}@font-face {font-family:'Open Sans';font-style:italic;font-weight:400;src:url(/cf-fonts/s/open-sans/5.2.7/hebrew/400/italic.woff2);
24unicode-range:U+0307-0308,U+0590-05FF,U+200C-2010,U+20AA,U+25CC,U+FB1D-FB4F;font-display:swap;}@font-face {font-family:'Open Sans';font-style:italic;font-weight:400;src:url(/cf-fonts/s/open-sans/5.2.7/latin-ext/400/italic.woff2);unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;font-display:swap;}@font-face {font-family:'Open Sans';font-style:italic;font-weight:400;src:url(/cf-fonts/s/open-sans/5.2.7/greek/400/italic.woff2);unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF;font-display:swap;}@font-face {font-family:'Open Sans';font-style:italic;font-weight:600;src:url(/cf-fonts/s/open-sans/5.2.7/math/600/italic.woff2);unicode-range:U+0302-0303,U+0305,U+0307-0308,U+0310,U+0312,U+0315,U+031A,U+0326-0327,U+032C,U+032F-0330,U+0332-0333,U+0338,U+033A,U+0346,U+034D,U+0391-03A1,U+03A3-03A9,U+03B1-03C9,U+03D1,U+03D5-03D6,U+03F0-03F1,U+03F4-03F5,U+2016-2017,U+2034-2038,U+203C,U+2040,U+2043,U+2047,U+2050,U+2057,U+205F,U+2070-2071,U+2074-208E,U+2090-209C,U+20D0-20DC,U+20E1,U+20E5-20EF,U+2100-2112,U+2114-2115,U+2117-2121,U+2123-214F,U+2190,U+2192,U+2194-21AE,U+21B0-21E5,U+21F1-21F2,U+21F4-2211,U+2213-2214,U+2216-22FF,U+2308-230B,U+2310,U+2319,U+231C-2321,U+2336-237A,U+237C,U+2395,U+239B-23B7,U+23D0,U+23DC-23E1,U+2474-2475,U+25AF,U+25B3,U+25B7,U+25BD,U+25C1,U+25CA,U+25CC,U+25FB,U+266D-266F,U+27C0-27FF,U+2900-2AFF,U+2B0E-2B11,U+2B30-2B4C,U+2BFE,U+3030,U+FF5B,U+FF5D,U+1D400-1D7FF,U+1EE00-1EEFF;font-display:swap;}@font-face {font-family:'Open Sans';font-style:italic;font-weight:600;src:url(/cf-fonts/s/open-sans/5.2.7/cyrillic-ext/600/italic.woff2);unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;font-display:swap;}@font-face {font-family:'Open Sans';font-style:italic;font-weight:600;src:url(/cf-fonts/s/open-sans/5.2.7/latin/600/italic.woff2);unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;font-display:swap;}@font-face {font-family:'Open Sans';font-style:italic;font-weight:600;src:url(/cf-fonts/s/open-sans/5.2.7/cyrillic/600/italic.woff2);unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;font-display:swap;}@font-face {font-family:'Open Sans';font-style:italic;font-weight:600;src:url(/cf-fonts/s/open-sans/5.2.7/greek/600/italic.woff2);unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF;font-display:swap;}@font-face {font-family:'Open Sans';font-style:italic;font-weight:600;src:url(/cf-fonts/s/open-sans/5.2.7/latin-ext/600/italic.woff2);unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;font-display:swap;}@font-face {font-family:'Open Sans';font-style:italic;font-weight:600;src:url(/cf-fonts/s/open-sans/5.2.7/symbols/600/italic.woff2);unicode-range:U+0001-000C,U+000E-001F,U+007F-009F,U+20DD-20E0,U+20E2-20E4,U+2150-218F,U+2190,U+2192,U+2194-2199,U+21AF,U+21E6-21F0,U+21F3,U+2218-2219,U+2299,U+22C4-22C6,U+2300-243F,U+2440-244A,U+2460-24FF,U+25A0-27BF,U+2800-28FF,U+2921-2922,U+2981,U+29BF,U+29EB,U+2B00-2BFF,U+4DC0-4DFF,U+FFF9-FFFB,U+10140-1018E,U+10190-1019C,U+101A0,U+101D0-101FD,U+102E0-102FB,U+10E60-10E7E,U+1D2C0-1D2D3,U+1D2E0-1D37F,U+1F000-1F0FF,U+1F100-1F1AD,U+1F1E6-1F1FF,U+1F30D-1F30F,U+1F315,U+1F31C,U+1F31E,U+1F320-1F32C,U+1F336,U+1F378,U+1F37D,U+1F382,U+1F393-1F39F,U+1F3A7-1F3A8,U+1F3AC-1F3AF,U+1F3C2,U+1F3C4-1F3C6,U+1F3CA-1F3CE,U+1F3D4-1F3E0,U+1F3ED,U+1F3F1-1F3F3,U+1F3F5-1F3F7,U+1F408,U+1F415,U+1F41F,U+1F426,U+1F43F,U+1F441-1F442,U+1F444,U+1F446-1F449,U+1F44C-1F44E,U+1F453,U+1F46A,U+1F47D,U+1F4A3,U+1F4B0,U+1F4B3,U+1F4B9,U+1F4BB,U+1F4BF,U+1F4C8-1F4CB,U+1F4D6,U+1F4DA,U+1F4DF,U+1F4E3-1F4E6,U+1F4EA-1F4ED,U+1F4F7,U+1F4F9-1F4FB,U+1F4FD-1F4FE,U+1F503,U+1F507-1F50B,U+1F50D,U+1F512-1F513,U+1F53E-1F54A,U+1F54F-1F5FA,U+1F610,U+1F650-1F67F,U+1F687,U+1F68D,U+1F691,U+1F694,U+1F698,U+1F6AD,U+1F6B2,U+1F6B9-1F6BA,U+1F6BC,U+1F6C6-1F6CF,U+1F6D3-1F6D7,U+1F6E0-1F6EA,U+1F6F0-1F6F3,U+1F6F7-1F6FC,U+1F700-1F7FF,U+1F800-1F80B,U+1F810-1F847,U+1F850-1F859,U+1F860-1F887,U+1F890-1F8AD,U+1F8B0-1F8BB,U+1F8C0-1F8C1,U+1F900-1F90B,U+1F93B,U+1F946,U+1F984,U+1F996,U+1F9E9,U+1FA00-1FA6F,U+1FA70-1FA7C,U+1FA80-1FA89,U+1FA8F-1FAC6,U+1FACE-1FADC,U+1FADF-1FAE9,U+1FAF0-1FAF8,U+1FB00-1FBFF;font-display:swap;}@font-face {font-family:'Open Sans';font-style:italic;font-weight:600;src:url(/cf-fonts/s/open-sans/5.2.7/vietnamese/600/italic.woff2);
24unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;font-display:swap;}@font-face {font-family:'Open Sans';font-style:italic;font-weight:600;src:url(/cf-fonts/s/open-sans/5.2.7/hebrew/600/italic.woff2);unicode-range:U+0307-0308,U+0590-05FF,U+200C-2010,U+20AA,U+25CC,U+FB1D-FB4F;font-display:swap;}@font-face {font-family:'Open Sans';font-style:italic;font-weight:600;src:url(/cf-fonts/s/open-sans/5.2.7/greek-ext/600/italic.woff2);unicode-range:U+1F00-1FFF;font-display:swap;}@font-face {font-family:'Open Sans';font-style:normal;font-weight:600;src:url(/cf-fonts/s/open-sans/5.2.7/math/600/normal.woff2);unicode-range:U+0302-0303,U+0305,U+0307-0308,U+0310,U+0312,U+0315,U+031A,U+0326-0327,U+032C,U+032F-0330,U+0332-0333,U+0338,U+033A,U+0346,U+034D,U+0391-03A1,U+03A3-03A9,U+03B1-03C9,U+03D1,U+03D5-03D6,U+03F0-03F1,U+03F4-03F5,U+2016-2017,U+2034-2038,U+203C,U+2040,U+2043,U+2047,U+2050,U+2057,U+205F,U+2070-2071,U+2074-208E,U+2090-209C,U+20D0-20DC,U+20E1,U+20E5-20EF,U+2100-2112,U+2114-2115,U+2117-2121,U+2123-214F,U+2190,U+2192,U+2194-21AE,U+21B0-21E5,U+21F1-21F2,U+21F4-2211,U+2213-2214,U+2216-22FF,U+2308-230B,U+2310,U+2319,U+231C-2321,U+2336-237A,U+237C,U+2395,U+239B-23B7,U+23D0,U+23DC-23E1,U+2474-2475,U+25AF,U+25B3,U+25B7,U+25BD,U+25C1,U+25CA,U+25CC,U+25FB,U+266D-266F,U+27C0-27FF,U+2900-2AFF,U+2B0E-2B11,U+2B30-2B4C,U+2BFE,U+3030,U+FF5B,U+FF5D,U+1D400-1D7FF,U+1EE00-1EEFF;font-display:swap;}@font-face {font-family:'Open Sans';font-style:normal;font-weight:600;src:url(/cf-fonts/s/open-sans/5.2.7/symbols/600/normal.woff2);unicode-range:U+0001-000C,U+000E-001F,U+007F-009F,U+20DD-20E0,U+20E2-20E4,U+2150-218F,U+2190,U+2192,U+2194-2199,U+21AF,U+21E6-21F0,U+21F3,U+2218-2219,U+2299,U+22C4-22C6,U+2300-243F,U+2440-244A,U+2460-24FF,U+25A0-27BF,U+2800-28FF,U+2921-2922,U+2981,U+29BF,U+29EB,U+2B00-2BFF,U+4DC0-4DFF,U+FFF9-FFFB,U+10140-1018E,U+10190-1019C,U+101A0,U+101D0-101FD,U+102E0-102FB,U+10E60-10E7E,U+1D2C0-1D2D3,U+1D2E0-1D37F,U+1F000-1F0FF,U+1F100-1F1AD,U+1F1E6-1F1FF,U+1F30D-1F30F,U+1F315,U+1F31C,U+1F31E,U+1F320-1F32C,U+1F336,U+1F378,U+1F37D,U+1F382,U+1F393-1F39F,U+1F3A7-1F3A8,U+1F3AC-1F3AF,U+1F3C2,U+1F3C4-1F3C6,U+1F3CA-1F3CE,U+1F3D4-1F3E0,U+1F3ED,U+1F3F1-1F3F3,U+1F3F5-1F3F7,U+1F408,U+1F415,U+1F41F,U+1F426,U+1F43F,U+1F441-1F442,U+1F444,U+1F446-1F449,U+1F44C-1F44E,U+1F453,U+1F46A,U+1F47D,U+1F4A3,U+1F4B0,U+1F4B3,U+1F4B9,U+1F4BB,U+1F4BF,U+1F4C8-1F4CB,U+1F4D6,U+1F4DA,U+1F4DF,U+1F4E3-1F4E6,U+1F4EA-1F4ED,U+1F4F7,U+1F4F9-1F4FB,U+1F4FD-1F4FE,U+1F503,U+1F507-1F50B,U+1F50D,U+1F512-1F513,U+1F53E-1F54A,U+1F54F-1F5FA,U+1F610,U+1F650-1F67F,U+1F687,U+1F68D,U+1F691,U+1F694,U+1F698,U+1F6AD,U+1F6B2,U+1F6B9-1F6BA,U+1F6BC,U+1F6C6-1F6CF,U+1F6D3-1F6D7,U+1F6E0-1F6EA,U+1F6F0-1F6F3,U+1F6F7-1F6FC,U+1F700-1F7FF,U+1F800-1F80B,U+1F810-1F847,U+1F850-1F859,U+1F860-1F887,U+1F890-1F8AD,U+1F8B0-1F8BB,U+1F8C0-1F8C1,U+1F900-1F90B,U+1F93B,U+1F946,U+1F984,U+1F996,U+1F9E9,U+1FA00-1FA6F,U+1FA70-1FA7C,U+1FA80-1FA89,U+1FA8F-1FAC6,U+1FACE-1FADC,U+1FADF-1FAE9,U+1FAF0-1FAF8,U+1FB00-1FBFF;font-display:swap;}@font-face {font-family:'Open Sans';font-style:normal;font-weight:600;src:url(/cf-fonts/s/open-sans/5.2.7/greek/600/normal.woff2);unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF;font-display:swap;}@font-face {font-family:'Open Sans';font-style:normal;font-weight:600;src:url(/cf-fonts/s/open-sans/5.2.7/greek-ext/600/normal.woff2);unicode-range:U+1F00-1FFF;font-display:swap;}@font-face {font-family:'Open Sans';font-style:normal;font-weight:600;src:url(/cf-fonts/s/open-sans/5.2.7/hebrew/600/normal.woff2);unicode-range:U+0307-0308,U+0590-05FF,U+200C-2010,U+20AA,U+25CC,U+FB1D-FB4F;font-display:swap;}@font-face {font-family:'Open Sans';font-style:normal;font-weight:600;src:url(/cf-fonts/s/open-sans/5.2.7/vietnamese/600/normal.woff2);unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;font-display:swap;}@font-face {font-family:'Open Sans';font-style:normal;font-weight:600;src:url(/cf-fonts/s/open-sans/5.2.7/latin-ext/600/normal.woff2);
24unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;font-display:swap;}@font-face {font-family:'Open Sans';font-style:normal;font-weight:600;src:url(/cf-fonts/s/open-sans/5.2.7/cyrillic/600/normal.woff2);unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;font-display:swap;}@font-face {font-family:'Open Sans';font-style:normal;font-weight:600;src:url(/cf-fonts/s/open-sans/5.2.7/latin/600/normal.woff2);unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;font-display:swap;}@font-face {font-family:'Open Sans';font-style:normal;font-weight:600;src:url(/cf-fonts/s/open-sans/5.2.7/cyrillic-ext/600/normal.woff2);unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;font-display:swap;}@font-face {font-family:'Open Sans';font-style:normal;font-weight:700;src:url(/cf-fonts/s/open-sans/5.2.7/greek/700/normal.woff2);unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF;font-display:swap;}@font-face {font-family:'Open Sans';font-style:normal;font-weight:700;src:url(/cf-fonts/s/open-sans/5.2.7/cyrillic-ext/700/normal.woff2);unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;font-display:swap;}@font-face {font-family:'Open Sans';font-style:normal;font-weight:700;src:url(/cf-fonts/s/open-sans/5.2.7/cyrillic/700/normal.woff2);unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;font-display:swap;}@font-face {font-family:'Open Sans';font-style:normal;font-weight:700;src:url(/cf-fonts/s/open-sans/5.2.7/latin/700/normal.woff2);unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;font-display:swap;}@font-face {font-family:'Open Sans';font-style:normal;font-weight:700;src:url(/cf-fonts/s/open-sans/5.2.7/math/700/normal.woff2);unicode-range:U+0302-0303,U+0305,U+0307-0308,U+0310,U+0312,U+0315,U+031A,U+0326-0327,U+032C,U+032F-0330,U+0332-0333,U+0338,U+033A,U+0346,U+034D,U+0391-03A1,U+03A3-03A9,U+03B1-03C9,U+03D1,U+03D5-03D6,U+03F0-03F1,U+03F4-03F5,U+2016-2017,U+2034-2038,U+203C,U+2040,U+2043,U+2047,U+2050,U+2057,U+205F,U+2070-2071,U+2074-208E,U+2090-209C,U+20D0-20DC,U+20E1,U+20E5-20EF,U+2100-2112,U+2114-2115,U+2117-2121,U+2123-214F,U+2190,U+2192,U+2194-21AE,U+21B0-21E5,U+21F1-21F2,U+21F4-2211,U+2213-2214,U+2216-22FF,U+2308-230B,U+2310,U+2319,U+231C-2321,U+2336-237A,U+237C,U+2395,U+239B-23B7,U+23D0,U+23DC-23E1,U+2474-2475,U+25AF,U+25B3,U+25B7,U+25BD,U+25C1,U+25CA,U+25CC,U+25FB,U+266D-266F,U+27C0-27FF,U+2900-2AFF,U+2B0E-2B11,U+2B30-2B4C,U+2BFE,U+3030,U+FF5B,U+FF5D,U+1D400-1D7FF,U+1EE00-1EEFF;font-display:swap;}@font-face {font-family:'Open Sans';font-style:normal;font-weight:700;src:url(/cf-fonts/s/open-sans/5.2.7/symbols/700/normal.woff2);unicode-range:U+0001-000C,U+000E-001F,U+007F-009F,U+20DD-20E0,U+20E2-20E4,U+2150-218F,U+2190,U+2192,U+2194-2199,U+21AF,U+21E6-21F0,U+21F3,U+2218-2219,U+2299,U+22C4-22C6,U+2300-243F,U+2440-244A,U+2460-24FF,U+25A0-27BF,U+2800-28FF,U+2921-2922,U+2981,U+29BF,U+29EB,U+2B00-2BFF,U+4DC0-4DFF,U+FFF9-FFFB,U+10140-1018E,U+10190-1019C,U+101A0,U+101D0-101FD,U+102E0-102FB,U+10E60-10E7E,U+1D2C0-1D2D3,U+1D2E0-1D37F,U+1F000-1F0FF,U+1F100-1F1AD,U+1F1E6-1F1FF,U+1F30D-1F30F,U+1F315,U+1F31C,U+1F31E,U+1F320-1F32C,U+1F336,U+1F378,U+1F37D,U+1F382,U+1F393-1F39F,U+1F3A7-1F3A8,U+1F3AC-1F3AF,U+1F3C2,U+1F3C4-1F3C6,U+1F3CA-1F3CE,U+1F3D4-1F3E0,U+1F3ED,U+1F3F1-1F3F3,U+1F3F5-1F3F7,U+1F408,U+1F415,U+1F41F,U+1F426,U+1F43F,U+1F441-1F442,U+1F444,U+1F446-1F449,U+1F44C-1F44E,U+1F453,U+1F46A,U+1F47D,U+1F4A3,U+1F4B0,U+1F4B3,U+1F4B9,U+1F4BB,U+1F4BF,U+1F4C8-1F4CB,U+1F4D6,U+1F4DA,U+1F4DF,U+1F4E3-1F4E6,U+1F4EA-1F4ED,U+1F4F7,U+1F4F9-1F4FB,U+1F4FD-1F4FE,U+1F503,U+1F507-1F50B,U+1F50D,U+1F512-1F513,U+1F53E-1F54A,U+1F54F-1F5FA,U+1F610,U+1F650-1F67F,U+1F687,U+1F68D,U+1F691,U+1F694,U+1F698,U+1F6AD,U+1F6B2,U+1F6B9-1F6BA,U+1F6BC,U+1F6C6-1F6CF,U+1F6D3-1F6D7,U+1F6E0-1F6EA,U+1F6F0-1F6F3,U+1F6F7-1F6FC,U+1F700-1F7FF,U+1F800-1F80B,U+1F810-1F847,U+1F850-1F859,U+1F860-1F887,U+1F890-1F8AD,U+1F8B0-1F8BB,U+1F8C0-1F8C1,U+1F900-1F90B,U+1F93B,U+1F946,U+1F984,U+1F996,U+1F9E9,U+1FA00-1FA6F,U+1FA70-1FA7C,U+1FA80-1FA89,U+1FA8F-1FAC6,U+1FACE-1FADC,U+1FADF-1FAE9,U+1FAF0-1FAF8,U+1FB00-1FBFF;font-display:swap;}@font-face {font-family:'Open Sans';font-style:normal;font-weight:700;src:url(/cf-fonts/s/open-sans/5.2.7/vietnamese/700/normal.woff2);
24unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;font-display:swap;}@font-face {font-family:'Open Sans';font-style:normal;font-weight:700;src:url(/cf-fonts/s/open-sans/5.2.7/hebrew/700/normal.woff2);unicode-range:U+0307-0308,U+0590-05FF,U+200C-2010,U+20AA,U+25CC,U+FB1D-FB4F;font-display:swap;}@font-face {font-family:'Open Sans';font-style:normal;font-weight:700;src:url(/cf-fonts/s/open-sans/5.2.7/latin-ext/700/normal.woff2);unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;font-display:swap;}@font-face {font-family:'Open Sans';font-style:normal;font-weight:700;src:url(/cf-fonts/s/open-sans/5.2.7/greek-ext/700/normal.woff2);unicode-range:U+1F00-1FFF;font-display:swap;}@font-face {font-family:'Open Sans';font-style:italic;font-weight:700;src:url(/cf-fonts/s/open-sans/5.2.7/latin-ext/700/italic.woff2);unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;font-display:swap;}@font-face {font-family:'Open Sans';font-style:italic;font-weight:700;src:url(/cf-fonts/s/open-sans/5.2.7/cyrillic-ext/700/italic.woff2);unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;font-display:swap;}@font-face {font-family:'Open Sans';font-style:italic;font-weight:700;src:url(/cf-fonts/s/open-sans/5.2.7/symbols/700/italic.woff2);unicode-range:U+0001-000C,U+000E-001F,U+007F-009F,U+20DD-20E0,U+20E2-20E4,U+2150-218F,U+2190,U+2192,U+2194-2199,U+21AF,U+21E6-21F0,U+21F3,U+2218-2219,U+2299,U+22C4-22C6,U+2300-243F,U+2440-244A,U+2460-24FF,U+25A0-27BF,U+2800-28FF,U+2921-2922,U+2981,U+29BF,U+29EB,U+2B00-2BFF,U+4DC0-4DFF,U+FFF9-FFFB,U+10140-1018E,U+10190-1019C,U+101A0,U+101D0-101FD,U+102E0-102FB,U+10E60-10E7E,U+1D2C0-1D2D3,U+1D2E0-1D37F,U+1F000-1F0FF,U+1F100-1F1AD,U+1F1E6-1F1FF,U+1F30D-1F30F,U+1F315,U+1F31C,U+1F31E,U+1F320-1F32C,U+1F336,U+1F378,U+1F37D,U+1F382,U+1F393-1F39F,U+1F3A7-1F3A8,U+1F3AC-1F3AF,U+1F3C2,U+1F3C4-1F3C6,U+1F3CA-1F3CE,U+1F3D4-1F3E0,U+1F3ED,U+1F3F1-1F3F3,U+1F3F5-1F3F7,U+1F408,U+1F415,U+1F41F,U+1F426,U+1F43F,U+1F441-1F442,U+1F444,U+1F446-1F449,U+1F44C-1F44E,U+1F453,U+1F46A,U+1F47D,U+1F4A3,U+1F4B0,U+1F4B3,U+1F4B9,U+1F4BB,U+1F4BF,U+1F4C8-1F4CB,U+1F4D6,U+1F4DA,U+1F4DF,U+1F4E3-1F4E6,U+1F4EA-1F4ED,U+1F4F7,U+1F4F9-1F4FB,U+1F4FD-1F4FE,U+1F503,U+1F507-1F50B,U+1F50D,U+1F512-1F513,U+1F53E-1F54A,U+1F54F-1F5FA,U+1F610,U+1F650-1F67F,U+1F687,U+1F68D,U+1F691,U+1F694,U+1F698,U+1F6AD,U+1F6B2,U+1F6B9-1F6BA,U+1F6BC,U+1F6C6-1F6CF,U+1F6D3-1F6D7,U+1F6E0-1F6EA,U+1F6F0-1F6F3,U+1F6F7-1F6FC,U+1F700-1F7FF,U+1F800-1F80B,U+1F810-1F847,U+1F850-1F859,U+1F860-1F887,U+1F890-1F8AD,U+1F8B0-1F8BB,U+1F8C0-1F8C1,U+1F900-1F90B,U+1F93B,U+1F946,U+1F984,U+1F996,U+1F9E9,U+1FA00-1FA6F,U+1FA70-1FA7C,U+1FA80-1FA89,U+1FA8F-1FAC6,U+1FACE-1FADC,U+1FADF-1FAE9,U+1FAF0-1FAF8,U+1FB00-1FBFF;font-display:swap;}@font-face {font-family:'Open Sans';font-style:italic;font-weight:700;src:url(/cf-fonts/s/open-sans/5.2.7/cyrillic/700/italic.woff2);unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;font-display:swap;}@font-face {font-family:'Open Sans';font-style:italic;font-weight:700;src:url(/cf-fonts/s/open-sans/5.2.7/hebrew/700/italic.woff2);unicode-range:U+0307-0308,U+0590-05FF,U+200C-2010,U+20AA,U+25CC,U+FB1D-FB4F;font-display:swap;}@font-face {font-family:'Open Sans';font-style:italic;font-weight:700;src:url(/cf-fonts/s/open-sans/5.2.7/vietnamese/700/italic.woff2);unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;font-display:swap;}@font-face {font-family:'Open Sans';font-style:italic;font-weight:700;src:url(/cf-fonts/s/open-sans/5.2.7/latin/700/italic.woff2);unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;font-display:swap;}@font-face {font-family:'Open Sans';font-style:italic;font-weight:700;src:url(/cf-fonts/s/open-sans/5.2.7/greek/700/italic.woff2);
24unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF;font-display:swap;}@font-face {font-family:'Open Sans';font-style:italic;font-weight:700;src:url(/cf-fonts/s/open-sans/5.2.7/math/700/italic.woff2);unicode-range:U+0302-0303,U+0305,U+0307-0308,U+0310,U+0312,U+0315,U+031A,U+0326-0327,U+032C,U+032F-0330,U+0332-0333,U+0338,U+033A,U+0346,U+034D,U+0391-03A1,U+03A3-03A9,U+03B1-03C9,U+03D1,U+03D5-03D6,U+03F0-03F1,U+03F4-03F5,U+2016-2017,U+2034-2038,U+203C,U+2040,U+2043,U+2047,U+2050,U+2057,U+205F,U+2070-2071,U+2074-208E,U+2090-209C,U+20D0-20DC,U+20E1,U+20E5-20EF,U+2100-2112,U+2114-2115,U+2117-2121,U+2123-214F,U+2190,U+2192,U+2194-21AE,U+21B0-21E5,U+21F1-21F2,U+21F4-2211,U+2213-2214,U+2216-22FF,U+2308-230B,U+2310,U+2319,U+231C-2321,U+2336-237A,U+237C,U+2395,U+239B-23B7,U+23D0,U+23DC-23E1,U+2474-2475,U+25AF,U+25B3,U+25B7,U+25BD,U+25C1,U+25CA,U+25CC,U+25FB,U+266D-266F,U+27C0-27FF,U+2900-2AFF,U+2B0E-2B11,U+2B30-2B4C,U+2BFE,U+3030,U+FF5B,U+FF5D,U+1D400-1D7FF,U+1EE00-1EEFF;font-display:swap;}@font-face {font-family:'Open Sans';font-style:italic;font-weight:700;src:url(/cf-fonts/s/open-sans/5.2.7/greek-ext/700/italic.woff2);unicode-range:U+1F00-1FFF;font-display:swap;}@font-face {font-family:'Open Sans';font-style:normal;font-weight:800;src:url(/cf-fonts/s/open-sans/5.2.7/greek/800/normal.woff2);unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF;font-display:swap;}@font-face {font-family:'Open Sans';font-style:normal;font-weight:800;src:url(/cf-fonts/s/open-sans/5.2.7/cyrillic-ext/800/normal.woff2);unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;font-display:swap;}@font-face {font-family:'Open Sans';font-style:normal;font-weight:800;src:url(/cf-fonts/s/open-sans/5.2.7/hebrew/800/normal.woff2);unicode-range:U+0307-0308,U+0590-05FF,U+200C-2010,U+20AA,U+25CC,U+FB1D-FB4F;font-display:swap;}@font-face {font-family:'Open Sans';font-style:normal;font-weight:800;src:url(/cf-fonts/s/open-sans/5.2.7/symbols/800/normal.woff2);unicode-range:U+0001-000C,U+000E-001F,U+007F-009F,U+20DD-20E0,U+20E2-20E4,U+2150-218F,U+2190,U+2192,U+2194-2199,U+21AF,U+21E6-21F0,U+21F3,U+2218-2219,U+2299,U+22C4-22C6,U+2300-243F,U+2440-244A,U+2460-24FF,U+25A0-27BF,U+2800-28FF,U+2921-2922,U+2981,U+29BF,U+29EB,U+2B00-2BFF,U+4DC0-4DFF,U+FFF9-FFFB,U+10140-1018E,U+10190-1019C,U+101A0,U+101D0-101FD,U+102E0-102FB,U+10E60-10E7E,U+1D2C0-1D2D3,U+1D2E0-1D37F,U+1F000-1F0FF,U+1F100-1F1AD,U+1F1E6-1F1FF,U+1F30D-1F30F,U+1F315,U+1F31C,U+1F31E,U+1F320-1F32C,U+1F336,U+1F378,U+1F37D,U+1F382,U+1F393-1F39F,U+1F3A7-1F3A8,U+1F3AC-1F3AF,U+1F3C2,U+1F3C4-1F3C6,U+1F3CA-1F3CE,U+1F3D4-1F3E0,U+1F3ED,U+1F3F1-1F3F3,U+1F3F5-1F3F7,U+1F408,U+1F415,U+1F41F,U+1F426,U+1F43F,U+1F441-1F442,U+1F444,U+1F446-1F449,U+1F44C-1F44E,U+1F453,U+1F46A,U+1F47D,U+1F4A3,U+1F4B0,U+1F4B3,U+1F4B9,U+1F4BB,U+1F4BF,U+1F4C8-1F4CB,U+1F4D6,U+1F4DA,U+1F4DF,U+1F4E3-1F4E6,U+1F4EA-1F4ED,U+1F4F7,U+1F4F9-1F4FB,U+1F4FD-1F4FE,U+1F503,U+1F507-1F50B,U+1F50D,U+1F512-1F513,U+1F53E-1F54A,U+1F54F-1F5FA,U+1F610,U+1F650-1F67F,U+1F687,U+1F68D,U+1F691,U+1F694,U+1F698,U+1F6AD,U+1F6B2,U+1F6B9-1F6BA,U+1F6BC,U+1F6C6-1F6CF,U+1F6D3-1F6D7,U+1F6E0-1F6EA,U+1F6F0-1F6F3,U+1F6F7-1F6FC,U+1F700-1F7FF,U+1F800-1F80B,U+1F810-1F847,U+1F850-1F859,U+1F860-1F887,U+1F890-1F8AD,U+1F8B0-1F8BB,U+1F8C0-1F8C1,U+1F900-1F90B,U+1F93B,U+1F946,U+1F984,U+1F996,U+1F9E9,U+1FA00-1FA6F,U+1FA70-1FA7C,U+1FA80-1FA89,U+1FA8F-1FAC6,U+1FACE-1FADC,U+1FADF-1FAE9,U+1FAF0-1FAF8,U+1FB00-1FBFF;font-display:swap;}@font-face {font-family:'Open Sans';font-style:normal;font-weight:800;src:url(/cf-fonts/s/open-sans/5.2.7/cyrillic/800/normal.woff2);unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;font-display:swap;}@font-face {font-family:'Open Sans';font-style:normal;font-weight:800;src:url(/cf-fonts/s/open-sans/5.2.7/greek-ext/800/normal.woff2);unicode-range:U+1F00-1FFF;font-display:swap;}@font-face {font-family:'Open Sans';font-style:normal;font-weight:800;src:url(/cf-fonts/s/open-sans/5.2.7/math/800/normal.woff2);unicode-range:U+0302-0303,U+0305,U+0307-0308,U+0310,U+0312,U+0315,U+031A,U+0326-0327,U+032C,U+032F-0330,U+0332-0333,U+0338,U+033A,U+0346,U+034D,U+0391-03A1,U+03A3-03A9,U+03B1-03C9,U+03D1,U+03D5-03D6,U+03F0-03F1,U+03F4-03F5,U+2016-2017,U+2034-2
24038,U+203C,U+2040,U+2043,U+2047,U+2050,U+2057,U+205F,U+2070-2071,U+2074-208E,U+2090-209C,U+20D0-20DC,U+20E1,U+20E5-20EF,U+2100-2112,U+2114-2115,U+2117-2121,U+2123-214F,U+2190,U+2192,U+2194-21AE,U+21B0-21E5,U+21F1-21F2,U+21F4-2211,U+2213-2214,U+2216-22FF,U+2308-230B,U+2310,U+2319,U+231C-2321,U+2336-237A,U+237C,U+2395,U+239B-23B7,U+23D0,U+23DC-23E1,U+2474-2475,U+25AF,U+25B3,U+25B7,U+25BD,U+25C1,U+25CA,U+25CC,U+25FB,U+266D-266F,U+27C0-27FF,U+2900-2AFF,U+2B0E-2B11,U+2B30-2B4C,U+2BFE,U+3030,U+FF5B,U+FF5D,U+1D400-1D7FF,U+1EE00-1EEFF;font-display:swap;}@font-face {font-family:'Open Sans';font-style:normal;font-weight:800;src:url(/cf-fonts/s/open-sans/5.2.7/vietnamese/800/normal.woff2);unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;font-display:swap;}@font-face {font-family:'Open Sans';font-style:normal;font-weight:800;src:url(/cf-fonts/s/open-sans/5.2.7/latin-ext/800/normal.woff2);unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;font-display:swap;}@font-face {font-family:'Open Sans';font-style:normal;font-weight:800;src:url(/cf-fonts/s/open-sans/5.2.7/latin/800/normal.woff2);unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;font-display:swap;}@font-face {font-family:'Open Sans';font-style:italic;font-weight:800;src:url(/cf-fonts/s/open-sans/5.2.7/latin-ext/800/italic.woff2);unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;font-display:swap;}@font-face {font-family:'Open Sans';font-style:italic;font-weight:800;src:url(/cf-fonts/s/open-sans/5.2.7/cyrillic/800/italic.woff2);unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;font-display:swap;}@font-face {font-family:'Open Sans';font-style:italic;font-weight:800;src:url(/cf-fonts/s/open-sans/5.2.7/cyrillic-ext/800/italic.woff2);unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;font-display:swap;}@font-face {font-family:'Open Sans';font-style:italic;font-weight:800;src:url(/cf-fonts/s/open-sans/5.2.7/symbols/800/italic.woff2);unicode-range:U+0001-000C,U+000E-001F,U+007F-009F,U+20DD-20E0,U+20E2-20E4,U+2150-218F,U+2190,U+2192,U+2194-2199,U+21AF,U+21E6-21F0,U+21F3,U+2218-2219,U+2299,U+22C4-22C6,U+2300-243F,U+2440-244A,U+2460-24FF,U+25A0-27BF,U+2800-28FF,U+2921-2922,U+2981,U+29BF,U+29EB,U+2B00-2BFF,U+4DC0-4DFF,U+FFF9-FFFB,U+10140-1018E,U+10190-1019C,U+101A0,U+101D0-101FD,U+102E0-102FB,U+10E60-10E7E,U+1D2C0-1D2D3,U+1D2E0-1D37F,U+1F000-1F0FF,U+1F100-1F1AD,U+1F1E6-1F1FF,U+1F30D-1F30F,U+1F315,U+1F31C,U+1F31E,U+1F320-1F32C,U+1F336,U+1F378,U+1F37D,U+1F382,U+1F393-1F39F,U+1F3A7-1F3A8,U+1F3AC-1F3AF,U+1F3C2,U+1F3C4-1F3C6,U+1F3CA-1F3CE,U+1F3D4-1F3E0,U+1F3ED,U+1F3F1-1F3F3,U+1F3F5-1F3F7,U+1F408,U+1F415,U+1F41F,U+1F426,U+1F43F,U+1F441-1F442,U+1F444,U+1F446-1F449,U+1F44C-1F44E,U+1F453,U+1F46A,U+1F47D,U+1F4A3,U+1F4B0,U+1F4B3,U+1F4B9,U+1F4BB,U+1F4BF,U+1F4C8-1F4CB,U+1F4D6,U+1F4DA,U+1F4DF,U+1F4E3-1F4E6,U+1F4EA-1F4ED,U+1F4F7,U+1F4F9-1F4FB,U+1F4FD-1F4FE,U+1F503,U+1F507-1F50B,U+1F50D,U+1F512-1F513,U+1F53E-1F54A,U+1F54F-1F5FA,U+1F610,U+1F650-1F67F,U+1F687,U+1F68D,U+1F691,U+1F694,U+1F698,U+1F6AD,U+1F6B2,U+1F6B9-1F6BA,U+1F6BC,U+1F6C6-1F6CF,U+1F6D3-1F6D7,U+1F6E0-1F6EA,U+1F6F0-1F6F3,U+1F6F7-1F6FC,U+1F700-1F7FF,U+1F800-1F80B,U+1F810-1F847,U+1F850-1F859,U+1F860-1F887,U+1F890-1F8AD,U+1F8B0-1F8BB,U+1F8C0-1F8C1,U+1F900-1F90B,U+1F93B,U+1F946,U+1F984,U+1F996,U+1F9E9,U+1FA00-1FA6F,U+1FA70-1FA7C,U+1FA80-1FA89,U+1FA8F-1FAC6,U+1FACE-1FADC,U+1FADF-1FAE9,U+1FAF0-1FAF8,U+1FB00-1FBFF;font-display:swap;}@font-face {font-family:'Open Sans';font-style:italic;font-weight:800;src:url(/cf-fonts/s/open-sans/5.2.7/math/800/italic.woff2);unicode-range:U+0302-0303,U+0305,U+0307-0308,U+0310,U+0312,U+0315,U+031A,U+0326-0327,U+032C,U+032F-0330,U+0332-0333,U+0338,U+033A,U+0346,U+034D,U+0391-03A1,U+03A3-03A9,U+03B1-03C9,U+03D1,U+03D5-03D6,U+03F0-03F1,U+03F4-03F5,U+2016-2017,U+2034-2
24038,U+203C,U+2040,U+2043,U+2047,U+2050,U+2057,U+205F,U+2070-2071,U+2074-208E,U+2090-209C,U+20D0-20DC,U+20E1,U+20E5-20EF,U+2100-2112,U+2114-2115,U+2117-2121,U+2123-214F,U+2190,U+2192,U+2194-21AE,U+21B0-21E5,U+21F1-21F2,U+21F4-2211,U+2213-2214,U+2216-22FF,U+2308-230B,U+2310,U+2319,U+231C-2321,U+2336-237A,U+237C,U+2395,U+239B-23B7,U+23D0,U+23DC-23E1,U+2474-2475,U+25AF,U+25B3,U+25B7,U+25BD,U+25C1,U+25CA,U+25CC,U+25FB,U+266D-266F,U+27C0-27FF,U+2900-2AFF,U+2B0E-2B11,U+2B30-2B4C,U+2BFE,U+3030,U+FF5B,U+FF5D,U+1D400-1D7FF,U+1EE00-1EEFF;font-display:swap;}@font-face {font-family:'Open Sans';font-style:italic;font-weight:800;src:url(/cf-fonts/s/open-sans/5.2.7/hebrew/800/italic.woff2);unicode-range:U+0307-0308,U+0590-05FF,U+200C-2010,U+20AA,U+25CC,U+FB1D-FB4F;font-display:swap;}@font-face {font-family:'Open Sans';font-style:italic;font-weight:800;src:url(/cf-fonts/s/open-sans/5.2.7/latin/800/italic.woff2);unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;font-display:swap;}@font-face {font-family:'Open Sans';font-style:italic;font-weight:800;src:url(/cf-fonts/s/open-sans/5.2.7/greek-ext/800/italic.woff2);unicode-range:U+1F00-1FFF;font-display:swap;}@font-face {font-family:'Open Sans';font-style:italic;font-weight:800;src:url(/cf-fonts/s/open-sans/5.2.7/vietnamese/800/italic.woff2);unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;font-display:swap;}@font-face {font-family:'Open Sans';font-style:italic;font-weight:800;src:url(/cf-fonts/s/open-sans/5.2.7/greek/800/italic.woff2);unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF;font-display:swap;}</style> 25<style id="wpr-usedcss">.wpautoterms-footer{background-color:#545454;text-align:center}.wpautoterms-footer a{color:#000;font-family:Arial,sans-serif;font-size:12px}.wpautoterms-footer .separator{color:#009;font-family:Arial,sans-serif;font-size:12px}img:is([sizes=auto i],[sizes^="auto," i]){contain-intrinsic-size:3000px 1500px}@font-face{font-display:swap;font-family:dashicons;src:url("https://jackkeller.com/wp-includes/fonts/dashicons.eot?99ac726223c749443b642ce33df8b800");src:url("https://jackkeller.com/wp-includes/fonts/dashicons.eot?99ac726223c749443b642ce33df8b800#iefix") format("embedded-opentype"),url("data:application/x-font-woff;charset=utf-8;base64,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") format("woff"),url("https://jackkeller.com/wp-includes/fonts/dashicons.ttf?99ac726223c749443b642ce33df8b800") format("truetype");font-weight:400;font-style:normal}.dashicons{font-family:dashicons;display:inline-block;line-height:1;font-weight:400;font-style:normal;text-decoration:inherit;text-transform:none;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;width:20px;height:20px;font-size:20px;vertical-align:top;text-align:center;transition:color .1s ease-in}.dashicons-admin-customizer:before{content:"\f540"}.dashicons-admin-home:before{content:"\f102"}.dashicons-admin-multisite:before{content:"\f541"}.dashicons-admin-tools:before{content:"\f107"}.dashicons-admin-users:before{content:"\f110"}.dashicons-awards:before{content:"\f313"}.dashicons-clock:before{content:"\f469"}.dashicons-edit:before{content:"\f464"}.dashicons-feedback:before{content:"\f175"}.dashicons-format-chat:before{content:"\f125"}.dashicons-images-alt2:before{content:"\f233"}.dashicons-location-alt:before{content:"\f231"}.dashicons-phone:before{content:"\f525"}.dashicons-search:before{content:"\f179"}.dashicons-testimonial:before{content:"\f473"}.dashicons-thumbs-up:before{content:"\f529"}.dashicons-tickets-alt:before{content:"\f524"}.dashicons-update:before{content:"\f463"}.dashicons-upload:before{content:"\f317"}.dashicons-welcome-learn-more:before{content:"\f118"}.dashicons-format-links:before{content:"\f103"}[class*=el-icon-]{font-family:Elusive-Icons;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.el-icon-shopping-cart-sign:before{content:"\e63e"}.el-icon-return-key:before{content:"\e64c"}.el-icon-hourglass:before{content:"\e6a1"}.el-icon-adjust-alt:before{content:"\e726"}.fa{font-family:var(--fa-style-family,"Font Awesome 6 Free");font-weight:var(--fa-style,900)}.fa,.fab,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:var(--fa-display,inline-block);font-style:normal;font-variant:normal;line-height:1;text-rendering:auto}.fa-newspaper:before{content:"\f1ea"}.fa-question:before{content:"\3f"}.fa-ticket-alt:before{content:"\f3ff"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}:root{--fa-font-brands:normal 400 1em/1 "Font Awesome 6 Brands"}@font-face{font-family:"Font Awesome 6 Brands";font-style:normal;font-weight:400;font-display:swap;src:url(https://jackkeller.com/wp-content/plugins/menu-icons/css/fontawesome/webfonts/fa-brands-400.woff2) format("woff2"),url(https://jackkeller.com/wp-content/plugins/menu-icons/css/fontawesome/webfonts/fa-brands-400.ttf) format("truetype")}.fab{font-family:"Font Awesome 6 Brands";font-weight:400}.fa-accessible-icon:before{content:"\f368"}:root{--fa-font-regular:normal 400 1em/1 "Font Awesome 6 Free"}.far{font-family:"Font Awesome 6 Free";font-weight:400}:root{--fa-font-solid:normal 900 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:900;font-display:swap;src:url(https://jackkeller.com/wp-content/plugins/menu-icons/css/fontawesome/webfonts/fa-solid-900.woff2) format("woff2"),url(https://jackkeller.com/wp-content/plugins/menu-icons/css/fontawesome/webfonts/fa-solid-900.ttf) format("truetype")}.fas{font-family:"Font Awesome 6 Free";font-weight:900}@font-face{font-family:"Font Awesome 5 Brands";font-display:swap;font-weight:400;src:url(https://jackkeller.com/wp-content/plugins/menu-icons/css/fontawesome/webfonts/fa-brands-400.woff2) format("woff2"),url(https://jackkeller.com/wp-content/plugins/menu-icons/css/fontawesome/webfonts/fa-brands-400.ttf) format("truetype")}@font-face{font-family:"Font Awesome 5 Free";font-display:swap;font-weight:900;src:url(https://jackkeller.com/wp-content/plugins/menu-icons/css/fontawesome/webfonts/fa-solid-900.woff2) format("woff2"),url(https://jackkeller.com/wp-content/plugins/menu-icons/css/fontawesome/webfonts/fa-solid-900.ttf) format("truetype")}
25@font-face{font-family:FontAwesome;font-display:swap;src:url(https://jackkeller.com/wp-content/plugins/menu-icons/css/fontawesome/webfonts/fa-solid-900.woff2) format("woff2"),url(https://jackkeller.com/wp-content/plugins/menu-icons/css/fontawesome/webfonts/fa-solid-900.ttf) format("truetype")}@font-face{font-family:FontAwesome;font-display:swap;src:url(https://jackkeller.com/wp-content/plugins/menu-icons/css/fontawesome/webfonts/fa-brands-400.woff2) format("woff2"),url(https://jackkeller.com/wp-content/plugins/menu-icons/css/fontawesome/webfonts/fa-brands-400.ttf) format("truetype")}@font-face{font-family:FontAwesome;font-display:swap;src:url(https://jackkeller.com/wp-content/plugins/menu-icons/css/fontawesome/webfonts/fa-v4compatibility.woff2) format("woff2"),url(https://jackkeller.com/wp-content/plugins/menu-icons/css/fontawesome/webfonts/fa-v4compatibility.ttf) format("truetype");unicode-range:u+f041,u+f047,u+f065-f066,u+f07d-f07e,u+f080,u+f08b,u+f08e,u+f090,u+f09a,u+f0ac,u+f0ae,u+f0b2,u+f0d0,u+f0d6,u+f0e4,u+f0ec,u+f10a-f10b,u+f123,u+f13e,u+f148-f149,u+f14c,u+f156,u+f15e,u+f160-f161,u+f163,u+f175-f178,u+f195,u+f1f8,u+f219,u+f27a}@font-face{font-display:swap;font-family:foundation-icons;src:url(https://jackkeller.com/wp-content/plugins/menu-icons/vendor/codeinwp/icon-picker/css/types/foundation-icons.eot);src:url(https://jackkeller.com/wp-content/plugins/menu-icons/vendor/codeinwp/icon-picker/css/types/foundation-icons.eot?#iefix) format("embedded-opentype"),url(https://jackkeller.com/wp-content/plugins/menu-icons/vendor/codeinwp/icon-picker/css/types/foundation-icons.woff) format("woff"),url(https://jackkeller.com/wp-content/plugins/menu-icons/vendor/codeinwp/icon-picker/css/types/foundation-icons.ttf) format("truetype"),url(https://jackkeller.com/wp-content/plugins/menu-icons/vendor/codeinwp/icon-picker/css/types/foundation-icons.svg#fontcustom) format("svg");font-weight:400;font-style:normal}.fi-dollar-bill:before,.fi-dollar:before,.fi-megaphone:before,.fi-pricetag-multiple:before,.fi-shopping-cart:before,.fi-torsos-female-male:before,.fi-universal-access:before{font-family:foundation-icons;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;display:inline-block;text-decoration:inherit}.fi-dollar-bill:before{content:"\f141"}.fi-dollar:before{content:"\f142"}.fi-megaphone:before{content:"\f173"}.fi-pricetag-multiple:before{content:"\f19e"}.fi-shopping-cart:before{content:"\f1b1"}.fi-torsos-female-male:before{content:"\f201"}.fi-universal-access:before{content:"\f208"}@font-face{font-display:swap;font-family:Genericons;src:url("data:application/x-font-woff;charset=utf-8;base64,d09GRgABAAAAADakAA0AAAAAVqwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAA2iAAAABoAAAAcdeu6KE9TLzIAAAGgAAAARQAAAGBkLHXFY21hcAAAAogAAACWAAABsqlys6FjdnQgAAADIAAAAAQAAAAEAEQFEWdhc3AAADaAAAAACAAAAAj//wADZ2x5ZgAABFQAAC7AAABIkKrsSc5oZWFkAAABMAAAAC8AAAA2C2BCV2hoZWEAAAFgAAAAHQAAACQQuAgGaG10eAAAAegAAACfAAABOFjwU3Jsb2NhAAADJAAAATAAAAEwy4vdrm1heHAAAAGAAAAAIAAAACAA6QEZbmFtZQAAMxQAAAE5AAACN1KGf59wb3N0AAA0UAAAAjAAAAXo9iKXv3jaY2BkYGAAYqUtWvLx/DZfGbg5GEDgkmLVWhj9/ycDAwcbWJyDgQlEAQABJgkgAHjaY2BkYOBgAIIdHAz/fwLZbAyMDKiAFQBE7gLWAAAAAAEAAACXAOgAEAAAAAAAAgAAAAEAAQAAAEAALgAAAAB42mNgYf/MOIGBlYGB1Zh1JgMDoxyEZr7OkMYkxMDAxMDKzAADjAIMCBCQ5prC0MCg8FWcA8TdwQFVg6REgYERAPvTCMQAAAB42i1PsRXCUAg8SAprl7FN4QZqb2WZGRjAIVLrHj4be4ews7OJHAd54cMBd+Af7JHmt3RPYAOHAYFweFhmYE4jlj+uVb8nshCzd/qVeNUCLysG8lgwrojfSW/pcTK6o7rWX82En6HJwIEv+wbi28IwpndxRu/JaJGStHRDq5EB+OKCNumZLlSVl2TnOFVtl9nR5t7woR0QzVT+D7cKLeIAeNpjYGBgZoBgGQZGBhBYA+QxgvksDBOAtAIQsoDoj5yfOD9JflL7zPGF84vkF80vll88v0R+yfxS9lX8/3+wCoZPDJ8EPil8ZvjC8EXgi8IXgy8OXwK+JHwp+Mrw////x/wsfHx8HHxMvJo8Rjw6PGo8CjxSPCI8fDwc3PVQ2/ECRjYGuDJGJiDBhK4A4pXhDABtHClYAAAARAURAAAALAAsACwALABaAIQAzADyAQABHAFGAZQBzgIIArIDTAOkA+AEEgTCBRYFYgW+BjAGwgbkByQHSAeCB+AI2Ao4CowLGgvQDBwM6g08DX4Nug4kDkYOYg6ADsoO7A8yD4gP8hAwEGYQpBDuEUgRshHUEfYSQBJeEnoSlhLEEtwTIBNYE6oT6hQaFC4UShSQFJ4UtBTyFSAVjBW4FegV+hYUFiwWQBZWFmQWchaIFuYXFhdUF4gXyhgEGCwYThh8GNYZEhlCGVgZZhl8GZIZoBnQGhIaShp8GtIa6Br+GzAbVBt+G8Ib/Bw6HGgciBy8HOwdHh1WHXAdmB3eHvYfIB8uHzofSB9WH6of4CA4IMghACFCIcQh4CIGIjoiSCJ8IpYiyCLmIxAjWiPwJCQkS
25Hja1Xx5YFTVvf/53nUm++zJJJnMkpkJJJkss5GFMIQ9w04IS0BZRSJLMIIo1l4XFETQFkVFBKwVrbuWpRaXPOtalZaCPKu1D2yf28NX21qfQubk9z3nzoSAS//+Mbn3nnvuuWc/n+/n+z3fCxHIaEKEJfJMIhKVhJ4GUtP8jCqRz+ufVuQ/NT8jChgkT4ssWmbRz6gK9DU/Ayw+bPKY/B6TZ7TgpuVwN71Unnnm0dHS24QQRSACUYis8XyzST6xEAch4LF5ZJsnKkc9NsDDj2ETXgUikT4iaClNJEBSGoZIP74qa+l//YRfKB5EAEyj4g/ztWBZbslcIEjucqHATOpjkYBXsYo18DNYeOQI3UMvonuOHIHXj+/YcXyHSs7FLGQp+o7sYA8IFq+BpmqKhtk6SDEZinWVWfMsHlLfIkRCgjdPsLpAtMlRUu8CmzVP8HlDEInJmkC+wcbihT54cN/6cePW79Mv/f1E+MUT2zvCM68cOWt7Rwc2pk8TNQ3IWW0gEbuI3yxI7KW9HdtnjbxyZrhj+xPbWX0EYhjcf9h3Jg9gldjBfhLm1af1ERF7BTAEmoxngQDeU35mB/YPsDiFtU0gxChgX2tn8S6FP3zG38O+zMWEVkU1yaYQRCMxt13WblvTT9bcdgpaTsnahlcqUp9owt0Vr2zYc+oUHwN8S2FjwMYV62PNA5+pPhaFc0EP4JhuPr2la4eQCVCsNRvnLac3A9nRNShIBFZPXpciEmHjareZsEbRWNTEBhVvHDasmyniwP7HJ+4AhlsgbmOP7PUsWVA8DFmHuzoSa3avSXR09XZ0HaZfHa7raOARKjm8kWoLdwfuamwHbcqaNVOo1t54V2D3QtA2nsQL1TYePrwRtMTaWUWYhvI0gGlYz5FeldWtgPiwvfW8bpVgAk/cwxqtR/hwhHxeVq9YWNG6duzo0miCHtBgy55TlN/jbYIHFGwyi6IJ6NVO7RG0c7c7ugBDRITMuMlYqovNAFYeuNg4BWPRSBCDBRhsEaKRQJCl5mOvSfmxpqbY3GQSCmYvXjy7s6bVP2WcjI/P4iEUxG7ddWt0brKrC5/P+Yz2fTans2bNjWMvPTwOi8B2Vhtw5pEr+cpyCWabVVAkVQngpGDFtChYcIsQCIYgT1ADQUUNifmQB7g4HIrN6pIdiponhCAYkoJDMd7ucEkOlxK32q0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") format("woff"),url(https://jackkeller.com/wp-content/plugins/menu-icons/vendor/codeinwp/icon-picker/css/types/Genericons.ttf) format("truetype"),url(https://jackkeller.com/wp-content/plugins/menu-icons/vendor/codeinwp/icon-picker/css/types/Genericons.svg#Genericons) format("svg");font-weight:400;font-style:normal}.genericon{font-size:16px;vertical-align:top;text-align:center;-moz-transition:color .1s ease-in 0;-webkit-transition:color .1s ease-in 0;display:inline-block;font-family:Genericons;font-style:normal;font-weight:400;font-variant:normal;line-height:1;text-decoration:inherit;text-transform:none;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;speak:none}.genericon-help:before{content:"\f457"}.genericon-send-to-tablet:before{content:"\f454"}.genericon-show:before{content:"\f403"}.menu-item i._mi,.menu-item img._mi{display:inline-block;vertical-align:middle}.menu-item i._mi{width:auto;height:auto;margin-top:-.265em;font-size:1.2em;line-height:1}.menu-item i._before{margin-right:.25em}.menu-item img._before{margin-right:.5em}.menu-item i.elusive{margin-top:-.3em}:root{--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color);--wp-editor-canvas-background:#ddd;--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,160.5;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}:root{--wp--preset--font-size--normal:16px;
25--wp--preset--font-size--huge:42px}.screen-reader-text{word-wrap:normal!important;border:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;word-break:normal!important}.screen-reader-text:focus{background-color:#ddd;clip-path:none;color:#444;display:block;font-size:1em;height:auto;left:5px;line-height:normal;padding:15px 23px 14px;text-decoration:none;top:5px;width:auto;z-index:100000}html :where(.has-border-color){border-style:solid}html :where([style^=border-color],[style*=";border-color"],[style*="; border-color"]){border-style:solid}html :where([style^=border-top-color],[style*=";border-top-color"],[style*="; border-top-color"]){border-top-style:solid}html :where([style^=border-right-color],[style*=";border-right-color"],[style*="; border-right-color"]){border-right-style:solid}html :where([style^=border-bottom-color],[style*=";border-bottom-color"],[style*="; border-bottom-color"]){border-bottom-style:solid}html :where([style^=border-left-color],[style*=";border-left-color"],[style*="; border-left-color"]){border-left-style:solid}html :where([style^=border-width],[style*=";border-width"],[style*="; border-width"]){border-style:solid}html :where([style^=border-top-width],[style*=";border-top-width"],[style*="; border-top-width"]){border-top-style:solid}html :where([style^=border-right-width],[style*=";border-right-width"],[style*="; border-right-width"]){border-right-style:solid}html :where([style^=border-bottom-width],[style*=";border-bottom-width"],[style*="; border-bottom-width"]){border-bottom-style:solid}html :where([style^=border-left-width],[style*=";border-left-width"],[style*="; border-left-width"]){border-left-style:solid}html :where(img[class*=wp-image-]){height:auto;max-width:100%}:where(figure){margin:0 0 1em}html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:var(--wp-admin--admin-bar--height,0px)}@media screen and (max-width:600px){html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:0px}}:root{--wp--preset--aspect-ratio--square:1;--wp--preset--aspect-ratio--4-3:4/3;--wp--preset--aspect-ratio--3-4:3/4;--wp--preset--aspect-ratio--3-2:3/2;--wp--preset--aspect-ratio--2-3:2/3;--wp--preset--aspect-ratio--16-9:16/9;--wp--preset--aspect-ratio--9-16:9/16;--wp--preset--color--black:#000000;--wp--preset--color--cyan-bluish-gray:#abb8c3;--wp--preset--color--white:#ffffff;--wp--preset--color--pale-pink:#f78da7;--wp--preset--color--vivid-red:#cf2e2e;--wp--preset--color--luminous-vivid-orange:#ff6900;--wp--preset--color--luminous-vivid-amber:#fcb900;--wp--preset--color--light-green-cyan:#7bdcb5;--wp--preset--color--vivid-green-cyan:#00d084;--wp--preset--color--pale-cyan-blue:#8ed1fc;
25--wp--preset--color--vivid-cyan-blue:#0693e3;--wp--preset--color--vivid-purple:#9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple:linear-gradient(135deg,rgb(6, 147, 227) 0%,rgb(155, 81, 224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan:linear-gradient(135deg,rgb(122, 220, 180) 0%,rgb(0, 208, 130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange:linear-gradient(135deg,rgb(252, 185, 0) 0%,rgb(255, 105, 0) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red:linear-gradient(135deg,rgb(255, 105, 0) 0%,rgb(207, 46, 46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray:linear-gradient(135deg,rgb(238, 238, 238) 0%,rgb(169, 184, 195) 100%);--wp--preset--gradient--cool-to-warm-spectrum:linear-gradient(135deg,rgb(74, 234, 220) 0%,rgb(151, 120, 209) 20%,rgb(207, 42, 186) 40%,rgb(238, 44, 130) 60%,rgb(251, 105, 98) 80%,rgb(254, 248, 76) 100%);--wp--preset--gradient--blush-light-purple:linear-gradient(135deg,rgb(255, 206, 236) 0%,rgb(152, 150, 240) 100%);--wp--preset--gradient--blush-bordeaux:linear-gradient(135deg,rgb(254, 205, 165) 0%,rgb(254, 45, 45) 50%,rgb(107, 0, 62) 100%);--wp--preset--gradient--luminous-dusk:linear-gradient(135deg,rgb(255, 203, 112) 0%,rgb(199, 81, 192) 50%,rgb(65, 88, 208) 100%);--wp--preset--gradient--pale-ocean:linear-gradient(135deg,rgb(255, 245, 203) 0%,rgb(182, 227, 212) 50%,rgb(51, 167, 181) 100%);--wp--preset--gradient--electric-grass:linear-gradient(135deg,rgb(202, 248, 128) 0%,rgb(113, 206, 126) 100%);--wp--preset--gradient--midnight:linear-gradient(135deg,rgb(2, 3, 129) 0%,rgb(40, 116, 252) 100%);--wp--preset--font-size--small:13px;--wp--preset--font-size--medium:20px;--wp--preset--font-size--large:36px;--wp--preset--font-size--x-large:42px;--wp--preset--spacing--20:0.44rem;--wp--preset--spacing--30:0.67rem;--wp--preset--spacing--40:1rem;--wp--preset--spacing--50:1.5rem;--wp--preset--spacing--60:2.25rem;--wp--preset--spacing--70:3.38rem;--wp--preset--spacing--80:5.06rem;--wp--preset--shadow--natural:6px 6px 9px rgba(0, 0, 0, .2);--wp--preset--shadow--deep:12px 12px 50px rgba(0, 0, 0, .4);--wp--preset--shadow--sharp:6px 6px 0px rgba(0, 0, 0, .2);--wp--preset--shadow--outlined:6px 6px 0px -3px rgb(255, 255, 255),6px 6px rgb(0, 0, 0);--wp--preset--shadow--crisp:6px 6px 0px rgb(0, 0, 0)}:where(body){margin:0}:where(.is-layout-flex){gap:.5em}:where(.is-layout-grid){gap:.5em}body{padding-top:0;padding-right:0;padding-bottom:0;padding-left:0}:root :where(.wp-element-button,.wp-block-button__link){background-color:#32373c;border-width:0;color:#fff;font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;padding-top:calc(.667em + 2px);padding-right:calc(1.333em + 2px);
25padding-bottom:calc(.667em + 2px);padding-left:calc(1.333em + 2px);text-decoration:none;text-transform:inherit}.wpautoterms-footer{display:block;width:100%;position:relative;z-index:10000002}.wpautoterms-footer a:hover{text-decoration:underline}#wpautoterms-bottom-static-container{width:100%;position:relative;z-index:10000002}@media (max-width:768px){li.obfx-hide-mobile-socials{display:none}}.woocommerce div.product div.images{float:left;width:48%}.woocommerce div.product div.images.woocommerce-product-gallery .flex-viewport{touch-action:pan-y pinch-zoom}.woocommerce div.product div.thumbnails::after,.woocommerce div.product div.thumbnails::before{content:" ";display:table}.woocommerce div.product div.thumbnails::after{clear:both}.woocommerce div.product div.thumbnails a{float:left;width:30.75%;margin-right:3.8%;margin-bottom:1em}.woocommerce div.product div.thumbnails a.last{margin-right:0}.woocommerce div.product div.thumbnails a.first{clear:both}.woocommerce div.product div.thumbnails.columns-1 a{width:100%;margin-right:0;float:none}.woocommerce div.product div.thumbnails.columns-2 a{width:48%}.woocommerce div.product div.thumbnails.columns-4 a{width:22.05%}.woocommerce div.product div.thumbnails.columns-5 a{width:16.9%}.woocommerce div.product div.summary{float:right;width:48%;clear:none}.woocommerce div.product .woocommerce-tabs{clear:both}.woocommerce div.product .woocommerce-tabs ul.tabs::after,.woocommerce div.product .woocommerce-tabs ul.tabs::before{content:" ";display:table}.woocommerce div.product .woocommerce-tabs ul.tabs::after{clear:both}.woocommerce div.product .woocommerce-tabs ul.tabs li{display:inline-block}.woocommerce div.product #reviews .comment::after,.woocommerce div.product #reviews .comment::before{content:" ";display:table}.woocommerce div.product #reviews .comment::after{clear:both}.woocommerce div.product #reviews .comment img{float:right;height:auto}:root{--woocommerce:#720eec;--wc-green:#007518;--wc-red:#a00;--wc-orange:#ffba00;--wc-blue:#2ea2cc;--wc-primary:#720eec;--wc-primary-text:#fcfbfe;--wc-secondary:#e9e6ed;--wc-secondary-text:#515151;--wc-highlight:#958e09;--wc-highligh-text:white;--wc-content-bg:#fff;--wc-subtext:#767676;--wc-form-border-color:rgba(32, 7, 7, .8);--wc-form-border-radius:4px;--wc-form-border-width:1px;--wc-destructive:#cc1818;--wc-card-border-radius:8px}@keyframes spin{100%{transform:rotate(360deg)}}.woocommerce form .form-row.woocommerce-invalid .select2-container:not(.select2-container--open) .select2-selection{border-color:var(--wc-red)}.woocommerce form .form-row.woocommerce-validated .select2-container:not(.select2-container--open) .select2-selection{border-color:var(--wc-green)}:where(.woocommerce) .select2-container{width:100%}:where(.woocommerce) .select2-container .select2-selection--single{height:auto}:where(.woocommerce) .select2-container .select2-selection--single .select2-selection__rendered{padding:.5em;line-height:normal;box-sizing:border-box;color:var(--wc-form-color-text,#444);font-weight:400}:where(.woocommerce) .select2-container .select2-selection--single .select2-selection__placeholder{color:var(--wc-form-color-text,#444)}:where(.woocommerce) .select2-container .select2-selection--single .select2-selection__arrow{position:absolute;top:2px;right:.5em;height:100%;width:16px}:where(.woocommerce) .select2-container .select2-selection--single .select2-selection__arrow b{border:none;display:block;background:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJmZWF0aGVyIGZlYXRoZXItY2hldnJvbi1kb3duIj48cG9seWxpbmUgcG9pbnRzPSI2IDkgMTIgMTUgMTggOSI+PC9wb2x5bGluZT48L3N2Zz4=) no-repeat;background-size:16px;width:16px;height:16px;position:absolute;top:50%;left:0;margin:-8px 0 0}:where(.woocommerce) .select2-container .select2-dropdown,:where(.woocommerce) .select2-container .select2-selection{background-color:var(--wc-form-color-background,#fff);border:var(--wc-form-border-width,1px) solid var(--wc-form-border-color,#aaa
25);border-radius:var(--wc-form-border-radius,4px)}:where(.woocommerce) .select2-container.select2-container--open .select2-dropdown--above{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}:where(.woocommerce) .select2-container.select2-container--open .select2-dropdown--below{border-top:none;border-top-left-radius:0;border-top-right-radius:0}:where(.woocommerce) .select2-results__options{list-style:none;margin:0;padding:0}:where(.woocommerce) .select2-results__option{margin:0}.screen-reader-text{clip:rect(1px,1px,1px,1px);height:1px;overflow:hidden;position:absolute!important;width:1px;word-wrap:normal!important}.woocommerce div.product{margin-bottom:0;position:relative}.woocommerce div.product .product_title{clear:none;margin-top:0;padding:0}.woocommerce div.product p.price ins,.woocommerce div.product span.price ins{background:inherit;font-weight:700;display:inline-block}.woocommerce div.product p.price del,.woocommerce div.product span.price del{opacity:.7;display:inline-block}.woocommerce div.product p.stock{font-size:.92em}.woocommerce div.product .woocommerce-product-rating{margin-bottom:1.618em}.woocommerce div.product div.images{margin-bottom:2em}.woocommerce div.product div.images img{display:block;width:100%;height:auto;box-shadow:none}.woocommerce div.product div.images div.thumbnails{padding-top:1em}.woocommerce div.product div.images.woocommerce-product-gallery{position:relative}.woocommerce div.product div.images .woocommerce-product-gallery__wrapper{transition:all cubic-bezier(.795, -.035, 0, 1) .5s;margin:0;padding:0}.woocommerce div.product div.images .woocommerce-product-gallery__wrapper .zoomImg{background-color:#fff;opacity:0}.woocommerce div.product div.images .woocommerce-product-gallery__image--placeholder{border:1px solid #f2f2f2}.woocommerce div.product div.images .woocommerce-product-gallery__image:nth-child(n+2){width:25%;display:inline-block}.woocommerce div.product div.images .woocommerce-product-gallery__image a{display:block;outline-offset:-2px}.woocommerce div.product div.images .woocommerce-product-gallery__video .wp-post-video{display:block;width:100%;height:auto}.woocommerce div.product div.images .woocommerce-product-gallery__trigger{background:#fff;border:none;box-sizing:content-box;border-radius:100%;cursor:pointer;font-size:2em;height:36px;padding:0;position:absolute;right:.5em;text-indent:-9999px;top:.5em;width:36px;z-index:99}.woocommerce div.product div.images .woocommerce-product-gallery__trigger::before{border:2px solid #000;border-radius:100%;box-sizing:content-box;content:"";display:block;height:10px;left:9px;top:9px;position:absolute;width:10px}.woocommerce div.product div.images .woocommerce-product-gallery__trigger::after{background:#000;border-radius:6px;box-sizing:content-box;content:"";display:block;height:8px;left:22px;position:absolute;top:19px;transform:rotate(-45deg);width:2px}.woocommerce div.product div.images .woocommerce-product-gallery__trigger span[aria-hidden=true]{border:0;clip-path:inset(50%);height:1px;left:50%;margin:-1px;overflow:hidden;position:absolute;top:50%;width:1px}.woocommerce div.product div.images .flex-control-thumbs{overflow:hidden;zoom:1;margin:0;padding:0}.woocommerce div.product div.images .flex-control-thumbs li{width:25%;float:left;margin:0;list-style:none;position:relative}.woocommerce div.product div.images .flex-control-thumbs li .woocommerce-product-gallery__video-thumbnail-preview,.woocommerce div.product div.images .flex-control-thumbs li img{cursor:pointer;opacity:.5;margin:0}.woocommerce div.product div.images .flex-control-thumbs li .woocommerce-product-gallery__video-thumbnail-preview.flex-active,.woocommerce div.product div.images .flex-control-thumbs li .woocommerce-product-gallery__video-thumbnail-preview:hover,.woocommerce div.product div.images .flex-control-thumbs li img.flex-active,.woocommerce div.product div.images .flex-control-thumbs li img:hover{opacity:1}.woocommerce div.product div.images .flex-control-thumbs li.woocommerce-product-gallery__video-thumbnail::before{content:"▶";position:absolute;
25left:50%;top:50%;transform:translate(-50%,-50%);z-index:1;color:#fff;font-size:1.4em;text-shadow:0 0 .25em rgba(0,0,0,.8);pointer-events:none}.woocommerce div.product div.images .flex-control-thumbs li.woocommerce-product-gallery__video-thumbnail img.woocommerce-product-gallery__video-thumbnail-placeholder,.woocommerce div.product div.images .flex-control-thumbs li.woocommerce-product-gallery__video-thumbnail img.woocommerce-product-gallery__video-thumbnail-placeholder.flex-active,.woocommerce div.product div.images .flex-control-thumbs li.woocommerce-product-gallery__video-thumbnail img.woocommerce-product-gallery__video-thumbnail-placeholder:hover{opacity:0}.woocommerce div.product div.images .flex-control-thumbs li.woocommerce-product-gallery__video-thumbnail .woocommerce-product-gallery__video-thumbnail-preview{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;pointer-events:none}.woocommerce div.product div.images .flex-control-thumbs li.woocommerce-product-gallery__video-thumbnail .woocommerce-product-gallery__video-thumbnail-placeholder.flex-active+.woocommerce-product-gallery__video-thumbnail-preview,.woocommerce div.product div.images .flex-control-thumbs li.woocommerce-product-gallery__video-thumbnail:hover .woocommerce-product-gallery__video-thumbnail-preview{opacity:1}.woocommerce div.product .woocommerce-product-gallery--columns-3 .flex-control-thumbs li:nth-child(3n+1){clear:left}.woocommerce div.product .woocommerce-product-gallery--columns-4 .flex-control-thumbs li:nth-child(4n+1){clear:left}.woocommerce div.product .woocommerce-product-gallery--columns-5 .flex-control-thumbs li:nth-child(5n+1){clear:left}.woocommerce div.product div.summary{margin-bottom:2em}.woocommerce div.product div.social{text-align:right;margin:0 0 1em}.woocommerce div.product div.social span{margin:0 0 0 2px}.woocommerce div.product div.social span span{margin:0}.woocommerce div.product div.social span .stButton .chicklets{padding-left:16px;width:0}.woocommerce div.product div.social iframe{float:left;margin-top:3px}.woocommerce div.product .woocommerce-tabs ul.tabs{list-style:none;padding:0 0 0 1em;margin:0 0 1.618em;overflow:hidden;position:relative}.woocommerce div.product .woocommerce-tabs ul.tabs li{border:1px solid #cfc8d8;background-color:#e9e6ed;color:#515151;display:inline-block;position:relative;z-index:0;border-radius:4px 4px 0 0;margin:0 -5px;padding:0 1em}.woocommerce div.product .woocommerce-tabs ul.tabs li a{display:inline-block;padding:.5em 0;font-weight:700;color:#515151;text-decoration:none}.woocommerce div.product .woocommerce-tabs ul.tabs li a:hover{text-decoration:none;color:#6b6b6b}.woocommerce div.product .woocommerce-tabs ul.tabs li.active{background:#fff;color:#515151;z-index:2;border-bottom-color:#fff}.woocommerce div.product .woocommerce-tabs ul.tabs li.active a{color:inherit;text-shadow:inherit}.woocommerce div.product .woocommerce-tabs ul.tabs li.active::before{box-shadow:2px 2px 0 #fff}.woocommerce div.product .woocommerce-tabs ul.tabs li.active::after{box-shadow:-2px 2px 0 #fff}.woocommerce div.product .woocommerce-tabs ul.tabs li::after,.woocommerce div.product .woocommerce-tabs ul.tabs li::before{border:1px solid #cfc8d8;position:absolute;bottom:-1px;width:5px;height:5px;content:" ";box-sizing:border-box}.woocommerce div.product .woocommerce-tabs ul.tabs li::before{left:-5px;border-bottom-right-radius:4px;border-width:0 1px 1px 0;box-shadow:2px 2px 0 #e9e6ed}.woocommerce div.product .woocommerce-tabs ul.tabs li::after{right:-5px;border-bottom-left-radius:4px;border-width:0 0 1px 1px;box-shadow:-2px 2px 0 #e9e6ed}.woocommerce div.product .woocommerce-tabs ul.tabs::before{position:absolute;content:" ";width:100%;bottom:0;left:0;border-bottom:1px solid #cfc8d8;z-index:1}.woocommerce div.product .woocommerce-tabs .panel{margin:0 0 2em;padding:0}.woocommerce div.product p.cart{margin-bottom:2em}.woocommerce div.product p.cart::after,.woocommerce div.product p.cart::before{content:" ";display:table}.woocommerce div.product p.cart::after{clear:both}.woocommerce div.product form.cart{margin-bottom:2em}.woocommerce div.product form.cart::after,.woocommerce div.product form.cart::before{content:" ";display:table}.woocommerce div.product form.cart::after{clear:both}.woocommerce div.product form.cart div.quantity{float:left;margin:0 4px 0 0}.woocommerce div.product form.cart table{border-width:0 0 1px}.woocommerce div.product form.cart table td{padding-left:0}.woocommerce div.product form.cart table div.quantity{float:none;margin:0}.woocommerce div.product form.cart table small.stock{display:block;float:none}.woocommerce div.product form.cart .variations{margin-bottom:1em;border:0;width:100%}.woocommerce div.product form.cart .variations td,.woocommerce div.product form.cart .variations th{border:0;line-height:2em;vertical-align:top}.woocommerce div.product form.cart .variations label{font-weight:700;text-align:left}.woocommerce div.product form.cart .variations select{max-width:100%;min-width:75%;display:inline-block;margin-right:1em;appearance:none;-webkit-appearance:none;-moz-appearance:none;padding-right:3em;background:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJmZWF0aGVyIGZlYXRoZXItY2hldnJvbi1kb3duIj48cG9seWxpbmUgcG9pbnRzPSI2IDkgMTIgMTUgMTggOSI+PC9wb2x5bGluZT48L3N2Zz4=) no-repeat;background-size:16px;-webkit-background-size:16px;background-position:calc(100% - 12px) 50%;-webkit-background-position:calc(100% - 12px) 50%}.woocommerce div.product form.cart .variations td.label{padding-right:1em}.woocommerce div.product form.cart .woocommerce-variation-description p{margin-bottom:1em}.woocommerce div.product form.cart .reset_variations{visibility:hidden;font-size:.83em}.woocommerce div.product form.cart .wc-no-matching-variations{display:none}.woocommerce div.product form.cart .button{vertical-align:middle;float:left}.woocommerce div.product form.cart .group_table td.woocommerce-grouped-product-list-item__label{padding-right:1em;padding-left:1em}.woocommerce div.product form.cart .group_table td{vertical-align:top;padding-bottom:.5em;border:0}.woocommerce div.product form.cart .group_table td:first-child{width:4em;text-align:center}.woocommerce div.product form.cart .group_table .wc-grouped-product-add-to-cart-checkbox{display:inline-block;width:auto;margin:0 auto;transform:scale(1.5,1.5)}:where(body:not(.woocommerce-block-theme-has-button-styles)):where(:not
25(.edit-post-visual-editor)) .woocommerce #respond input#submit,:where(body:not(.woocommerce-block-theme-has-button-styles)):where(:not(.edit-post-visual-editor)) .woocommerce a.button,:where(body:not(.woocommerce-block-theme-has-button-styles)):where(:not(.edit-post-visual-editor)) .woocommerce button.button,:where(body:not(.woocommerce-block-theme-has-button-styles)):where(:not(.edit-post-visual-editor)) .woocommerce input.button{font-size:100%;margin:0;line-height:1;cursor:pointer;position:relative;text-decoration:none;overflow:visible;padding:.618em 1em;font-weight:700;border-radius:3px;left:auto;color:#515151;background-color:#e9e6ed;border:0;display:inline-block;background-image:none;box-shadow:none;text-shadow:none}:where(body:not(.woocommerce-block-theme-has-button-styles)):where(:not(.edit-post-visual-editor)) .woocommerce #respond input#submit.loading,:where(body:not(.woocommerce-block-theme-has-button-styles)):where(:not(.edit-post-visual-editor)) .woocommerce a.button.loading,:where(body:not(.woocommerce-block-theme-has-button-styles)):where(:not(.edit-post-visual-editor)) .w
25oocommerce button.button.loading,:where(body:not(.woocommerce-block-theme-has-button-styles)):where(:not(.edit-post-visual-editor)) .woocommerce input.button.loading{opacity:.25;padding-right:2.618em}:where(body:not(.woocommerce-block-theme-has-button-styles)):where(:not(.edit-post-visual-editor)) .woocommerce #respond input#submit.loading::after,:where(body:not(.woocommerce-block-theme-has-button-styles)):where(:not(.edit-post-visual-editor)) .woocommerce a.button.loading::after,:where(body:not(.woocommerce-block-theme-has-button-styles)):where(:not(.edit-post-visual-editor)) .woocommerce button.button.loading::after,:where(body:not(.woocommerce-block-theme-has-button-styles)):where(:not(.edit-post-visual-editor)) .woocommerce input.button.loading::after{font-family:WooCommerce;content:"\e01c";vertical-align:top;font-weight:400;position:absolute;top:.618em;right:1em;animation:2s linear infinite spin}:where(body:not(.woocommerce-block-theme-has-button-styles)):where(:not(.edit-post-visual-editor)) .woocommerce #respond input#submit.added::after,:where(body:not(.woocommerce-block-theme-has-button-styles)):where(:not(.edit-post-visual-editor)) .w
25oocommerce a.button.added::after,:where(body:not(.woocommerce-block-theme-has-button-styles)):where(:not(.edit-post-visual-editor)) .woocommerce button.button.added::after,:where(body:not(.woocommerce-block-theme-has-button-styles)):where(:not(.edit-post-visual-editor)) .woocommerce input.button.added::after{font-family:WooCommerce;content:"\e017";margin-left:.53em;vertical-align:bottom}:where(body:not(.woocommerce-block-theme-has-button-styles)):where(:not(.edit-post-visual-editor)) .woocommerce #respond input#submit:hover,:where(body:not(.woocommerce-block-theme-has-button-styles)):where(:not(.edit-post-visual-editor)) .woocommerce a.button:hover,:where(body:not(.woocommerce-block-theme-has-button-styles)):where(:not(.edit-post-visual-editor)) .woocommerce button.button:hover,:where(body:not(.woocommerce-block-theme-has-button-styles)):where(:not(.edit-post-visual-editor)) .woocommerce input.button:hover{background-color:#dcd7e2;text-decoration:none;background-image:none;color:#515151}:where(body:not(.woocommerce-block-theme-has-button-styles)):where(:not(.edit-post-visual-editor)) .w
25oocommerce #respond input#submit.alt,:where(body:not(.woocommerce-block-theme-has-button-styles)):where(:not(.edit-post-visual-editor)) .woocommerce a.button.alt,:where(body:not(.woocommerce-block-theme-has-button-styles)):where(:not(.edit-post-visual-editor)) .woocommerce button.button.alt,:where(body:not(.woocommerce-block-theme-has-button-styles)):where(:not(.edit-post-visual-editor)) .woocommerce input.button.alt{background-color:#7f54b3;color:#fff;-webkit-font-smoothing:antialiased}:where(body:not(.woocommerce-block-theme-has-button-styles)):where(:not(.edit-post-visual-editor)) .woocommerce #respond input#submit.alt:hover,:where(body:not(.woocommerce-block-theme-has-button-styles)):where(:not(.edit-post-visual-editor)) .woocommerce a.button.alt:hover,:where(body:not(.woocommerce-block-theme-has-button-styles)):where(:not(.edit-post-visual-editor)) .woocommerce button.button.alt:hover,:where(body:not(.woocommerce-block-theme-has-button-styles)):where(:not(.edit-post-visual-editor)) .woocommerce input.button.alt:hover{background-color:#7249a4;color:#fff}.woocommerce:where(body:not(.woocommerce-block-theme-has-button-styles)) #respond input#submit.alt.disabled,.woocommerce:where(body:not(.woocommerce-block-theme-has-button-styles)) #respond input#submit.alt.disabled:hover,.woocommerce:where(body:not(.woocommerce-block-theme-has-button-styles)) a.button.alt.disabled,.woocommerce:where(body:not(.woocommerce-block-theme-has-button-styles)) a.button.alt.disabled:hover,.woocommerce:where(body:not(.woocommerce-block-theme-has-button-styles)) button.button.alt.disabled,.woocommerce:where(body:not(.woocommerce-block-theme-has-button-styles)) button.button.alt.disabled:hover,.woocommerce:where(body:not(.woocommerce-block-theme-has-button-styles)) input.button.alt.disabled,.woocommerce:where(body:not(.woocommerce-block-theme-has-button-styles)) input.button.alt.disabled:hover,:where(body:not(.woocommerce-block-theme-has-button-styles)):where(:not(.edit-post-visual-editor)) .w
25oocommerce #respond input#submit.alt.disabled,:where(body:not(.woocommerce-block-theme-has-button-styles)):where(:not(.edit-post-visual-editor)) .woocommerce #respond input#submit.alt.disabled:hover,:where(body:not(.woocommerce-block-theme-has-button-styles)):where(:not(.edit-post-visual-editor)) .woocommerce #respond input#submit.alt:disabled,:where(body:not(.woocommerce-block-theme-has-button-styles)):where(:not(.edit-post-visual-editor)) .woocommerce #respond input#submit.alt:disabled:hover,:where(body:not(.woocommerce-block-theme-has-button-styles)):where(:not(.edit-post-visual-editor)) .woocommerce #respond input#submit.alt:disabled[disabled],:where(body:not(.woocommerce-block-theme-has-button-styles)):where(:not(.edit-post-visual-editor)) .woocommerce #respond input#submit.alt:disabled[disabled]:hover,:where(body:not(.woocommerce-block-theme-has-button-styles)):where(:not(.edit-post-visual-editor)) .woocommerce a.button.alt.disabled,:where(body:not(.woocommerce-block-theme-has-button-styles)):where(:not(.edit-post-visual-editor)) .w
25oocommerce a.button.alt.disabled:hover,:where(body:not(.woocommerce-block-theme-has-button-styles)):where(:not(.edit-post-visual-editor)) .woocommerce a.button.alt:disabled,:where(body:not(.woocommerce-block-theme-has-button-styles)):where(:not(.edit-post-visual-editor)) .woocommerce a.button.alt:disabled:hover,:where(body:not(.woocommerce-block-theme-has-button-styles)):where(:not(.edit-post-visual-editor)) .woocommerce a.button.alt:disabled[disabled],:where(body:not(.woocommerce-block-theme-has-button-styles)):where(:not(.edit-post-visual-editor)) .woocommerce a.button.alt:disabled[disabled]:hover,:where(body:not(.woocommerce-block-theme-has-button-styles)):where(:not(.edit-post-visual-editor)) .woocommerce button.button.alt.disabled,:where(body:not(.woocommerce-block-theme-has-button-styles)):where(:not(.edit-post-visual-editor)) .woocommerce button.button.alt.disabled:hover,:where(body:not(.woocommerce-block-theme-has-button-styles)):where(:not(.edit-post-visual-editor)) .woocommerce button.button.alt:disabled,:where(body:not(.woocommerce-block-theme-has-button-styles)):where(:not(.edit-post-visual-editor)) .w
25oocommerce button.button.alt:disabled:hover,:where(body:not(.woocommerce-block-theme-has-button-styles)):where(:not(.edit-post-visual-editor)) .woocommerce button.button.alt:disabled[disabled],:where(body:not(.woocommerce-block-theme-has-button-styles)):where(:not(.edit-post-visual-editor)) .woocommerce button.button.alt:disabled[disabled]:hover,:where(body:not(.woocommerce-block-theme-has-button-styles)):where(:not(.edit-post-visual-editor)) .woocommerce input.button.alt.disabled,:where(body:not(.woocommerce-block-theme-has-button-styles)):where(:not(.edit-post-visual-editor)) .woocommerce input.button.alt.disabled:hover,:where(body:not(.woocommerce-block-theme-has-button-styles)):where(:not(.edit-post-visual-editor)) .woocommerce input.button.alt:disabled,:where(body:not(.woocommerce-block-theme-has-button-styles)):where(:not(.edit-post-visual-editor)) .woocommerce input.button.alt:disabled:hover,:where(body:not(.woocommerce-block-theme-has-button-styles)):where(:not(.edit-post-visual-editor)) .woocommerce input.button.alt:disabled[disabled],:where(body:not(.woocommerce-block-theme-has-button-styles)):where(:not(.edit-post-visual-editor)) .w
25oocommerce input.button.alt:disabled[disabled]:hover{background-color:#7f54b3;color:#fff}.woocommerce:where(body:not(.woocommerce-block-theme-has-button-styles)) #respond input#submit.disabled,.woocommerce:where(body:not(.woocommerce-block-theme-has-button-styles)) a.button.disabled,.woocommerce:where(body:not(.woocommerce-block-theme-has-button-styles)) button.button.disabled,.woocommerce:where(body:not(.woocommerce-block-theme-has-button-styles)) input.button.disabled,:where(body:not(.woocommerce-block-theme-has-button-styles)):where(:not(.edit-post-visual-editor)) .woocommerce #respond input#submit.disabled,:where(body:not(.woocommerce-block-theme-has-button-styles)):where(:not(.edit-post-visual-editor)) .woocommerce #respond input#submit:disabled,:where(body:not(.woocommerce-block-theme-has-button-styles)):where(:not(.edit-post-visual-editor)) .woocommerce #respond input#submit:disabled[disabled],:where(body:not(.woocommerce-block-theme-has-button-styles)):where(:not(.edit-post-visual-editor)) .woocommerce a.button.disabled,:where(body:not(.woocommerce-block-theme-has-button-styles)):where(:not(.edit-post-visual-editor)) .w
25oocommerce a.button:disabled,:where(body:not(.woocommerce-block-theme-has-button-styles)):where(:not(.edit-post-visual-editor)) .woocommerce a.button:disabled[disabled],:where(body:not(.woocommerce-block-theme-has-button-styles)):where(:not(.edit-post-visual-editor)) .woocommerce button.button.disabled,:where(body:not(.woocommerce-block-theme-has-button-styles)):where(:not(.edit-post-visual-editor)) .woocommerce button.button:disabled,:where(body:not(.woocommerce-block-theme-has-button-styles)):where(:not(.edit-post-visual-editor)) .woocommerce button.button:disabled[disabled],:where(body:not(.woocommerce-block-theme-has-button-styles)):where(:not(.edit-post-visual-editor)) .woocommerce input.button.disabled,:where(body:not(.woocommerce-block-theme-has-button-styles)):where(:not(.edit-post-visual-editor)) .woocommerce input.button:disabled,:where(body:not(.woocommerce-block-theme-has-button-styles)):where(:not(.edit-post-visual-editor)) .woocommerce input.button:disabled[disabled]{color:inherit;cursor:not-allowed;opacity:.5;padding:.618em 1em}.woocommerce:where(body:not(.woocommerce-block-theme-has-button-styles)) #respond input#submit.disabled:hover,.woocommerce:where(body:not(.woocommerce-block-theme-has-button-styles)) a.button.disabled:hover,.woocommerce:where(body:not(.woocommerce-block-theme-has-button-styles)) button.button.disabled:hover,.woocommerce:where(body:not(.woocommerce-block-theme-has-button-styles)) input.button.disabled:hover,:where(body:not(.woocommerce-block-theme-has-button-styles)):where(:not(.edit-post-visual-editor)) .w
25oocommerce #respond input#submit.disabled:hover,:where(body:not(.woocommerce-block-theme-has-button-styles)):where(:not(.edit-post-visual-editor)) .woocommerce #respond input#submit:disabled:hover,:where(body:not(.woocommerce-block-theme-has-button-styles)):where(:not(.edit-post-visual-editor)) .woocommerce #respond input#submit:disabled[disabled]:hover,:where(body:not(.woocommerce-block-theme-has-button-styles)):where(:not(.edit-post-visual-editor)) .woocommerce a.button.disabled:hover,:where(body:not(.woocommerce-block-theme-has-button-styles)):where(:not(.edit-post-visual-editor)) .woocommerce a.button:disabled:hover,:where(body:not(.woocommerce-block-theme-has-button-styles)):where(:not(.edit-post-visual-editor)) .woocommerce a.button:disabled[disabled]:hover,:where(body:not(.woocommerce-block-theme-has-button-styles)):where(:not(.edit-post-visual-editor)) .woocommerce button.button.disabled:hover,:where(body:not(.woocommerce-block-theme-has-button-styles)):where(:not(.edit-post-visual-editor)) .woocommerce button.button:disabled:hover,:where(body:not(.woocommerce-block-theme-has-button-styles)):where(:not(.edit-post-visual-editor)) .w
25oocommerce button.button:disabled[disabled]:hover,:where(body:not(.woocommerce-block-theme-has-button-styles)):where(:not(.edit-post-visual-editor)) .woocommerce input.button.disabled:hover,:where(body:not(.woocommerce-block-theme-has-button-styles)):where(:not(.edit-post-visual-editor)) .woocommerce input.button:disabled:hover,:where(body:not(.woocommerce-block-theme-has-button-styles)):where(:not(.edit-post-visual-editor)) .woocommerce input.button:disabled[disabled]:hover{color:inherit;background-color:#e9e6ed}:root{--affwp-creative-preview-width:10rem;--affwp-card-padding:1.5rem}.screen-reader-text{position:absolute;margin:-1px;padding:0;height:1px;width:1px;overflow:hidden;clip:rect(0 0 0 0);border:0;word-wrap:normal!important}@font-face{font-family:Lato;font-style:normal;font-weight:400;src:url(https://jackkeller.com/cf-fonts/s/lato/5.2.7/latin/400/normal.woff2);unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;font-display:swap}@font-face{font-family:Lato;font-style:normal;font-weight:700;src:url(https://jackkeller.com/cf-fonts/s/lato/5.2.7/latin/700/normal.woff2);unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;font-display:swap}@font-face{font-family:Lato;font-style:italic;font-weight:400;src:url(https://jackkeller.com/cf-fonts/s/lato/5.2.7/latin/400/italic.woff2);unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;font-display:swap}@font-face{font-family:Montserrat;font-style:normal;font-weight:700;src:url(https://jackkeller.com/cf-fonts/s/montserrat/5.2.8/latin/700/normal.woff2);unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;font-display:swap}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}[hidden],template{display:none}a{background:0 0}h1{font-size:2em;margin:.67em 0}img{border:0}svg:not(:root){overflow:hidden}code{font-family:monospace,monospace;font-size:1em}button,input,select{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=submit]{-webkit-appearance:button;cursor:pointer}input{line-height:normal}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}@media print{*{text-shadow:none!important;color:#000!important;background:0 0!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}a[href^="#"]:after,a[href^="javascript:"]:after{content:""}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff!important}.navbar{display:none}.label{border:1px solid #000}}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:62.5%;-webkit-tap-highlight-color:transparent}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#428bca;text-decoration:none}a:focus,a:hover{color:#2a6496;text-decoration:underline}a:focus{outline:dotted thin;outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}img{vertical-align:middle}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0}h1,h2,h3{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1,h2,h3{margin-top:20px;margin-bottom:10px}h1{font-size:36px}h2{font-size:30px}p{margin:0 0 10px}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}ul{margin-top:0;margin-bottom:10px}ul ul{margin-bottom:0}dl{margin-top:0;margin-bottom:20px}dt{line-height:1.42857143}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;white-space:nowrap;border-radius:4px}.container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}
25.col-md-3,.col-md-9,.col-sm-4,.col-xs-12{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-12{float:left}.col-xs-12{width:100%}@media (min-width:768px){.col-sm-4{float:left}.col-sm-4{width:33.33333333%}}@media (min-width:992px){.col-md-3,.col-md-9{float:left}.col-md-9{width:75%}.col-md-3{width:25%}}label{display:inline-block;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=search]{-webkit-appearance:none}input[type=date]{line-height:34px}.btn.disabled{cursor:not-allowed;pointer-events:none;opacity:.65;-webkit-box-shadow:none;box-shadow:none}.btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover{background-color:#fff;border-color:#ccc}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover{background-color:#428bca;border-color:#357ebd}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover{background-color:#5bc0de;border-color:#46b8da}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover{background-color:#f0ad4e;border-color:#eea236}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover{background-color:#d9534f;border-color:#d43f3a}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#999}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;background-color:transparent;background-image:none;cursor:not-allowed}.nav>li.disabled>a{color:#999}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#999;text-decoration:none;background-color:transparent;cursor:not-allowed}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}.container>.navbar-header{margin-right:-15px;margin-left:-15px}.navbar-brand{float:left;padding:15px;font-size:18px;line-height:20px;height:50px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}@media (min-width:768px){.navbar{border-radius:4px}.navbar-header{float:left}.container>.navbar-header{margin-right:0;margin-left:0}.navbar>.container .navbar-brand{margin-left:-15px}.navbar-toggle{display:none}}.navbar-toggle{position:relative;float:right;margin-right:15px;padding:9px 10px;margin-top:8px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#999}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{content:"/\00a0";padding:0 5px;color:#ccc}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#999;background-color:#fff;border-color:#ddd;cursor:not-allowed}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#999;background-color:#fff;cursor:not-allowed}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}.label[href]:focus,.label[href]:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.container:after,.container:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before{content:" ";display:table}.container:after,.navbar-header:after,.navbar:after{clear:both}.pull-right{float:right!important}.hidden{display:none!important;visibility:hidden!important}@-ms-viewport{width:device-width}@font-face{font-display:swap;
25font-family:FontAwesome;src:url('https://jackkeller.com/wp-content/themes/zerif-pro/assets/fonts/fontawesome-webfont.eot?v=4.6.3');src:url('https://jackkeller.com/wp-content/themes/zerif-pro/assets/fonts/fontawesome-webfont.eot?#iefix&v=4.6.3') format('embedded-opentype'),url('https://jackkeller.com/wp-content/themes/zerif-pro/assets/fonts/fontawesome-webfont.woff2?v=4.6.3') format('woff2'),url('https://jackkeller.com/wp-content/themes/zerif-pro/assets/fonts/fontawesome-webfont.woff?v=4.6.3') format('woff'),url('https://jackkeller.com/wp-content/themes/zerif-pro/assets/fonts/fontawesome-webfont.ttf?v=4.6.3') format('truetype'),url('https://jackkeller.com/wp-content/themes/zerif-pro/assets/fonts/fontawesome-webfont.svg?v=4.6.3#fontawesomeregular') format('svg');font-weight:400;font-style:normal}.fa{display:inline-block;font:14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.pull-right{float:right}.fa.pull-right{margin-left:.3em}.fa-camera:before{content:"\f030"}.fa-info-circle:before{content:"\f05a"}.fa-facebook:before{content:"\f09a"}.fa-list-ol:before{content:"\f0cb"}.fa-question:before{content:"\f128"}.fa-youtube:before{content:"\f167"}.fa-google:before{content:"\f1a0"}.fa-database:before{content:"\f1c0"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}a,address,body,caption,code,div,dl,dt,em,form,h1,h2,h3,html,iframe,label,li,object,p,span,strong,tr,tt,ul{border:0;font-family:inherit;font-size:16px;font-style:inherit;font-weight:inherit;margin:0;outline:0;padding:0;vertical-align:baseline}html{overflow-y:scroll;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{background:#fff;-ms-word-wrap:break-word;word-wrap:break-word}@supports (-webkit-overflow-scrolling:touch){body.custom-background{background-size:100%!important;background-attachment:scroll!important}}article,aside,footer,header,main,nav{display:block}ul{list-style:none}a:focus{outline:dotted thin}a:active,a:hover{outline:0}a img{border:0}body{font-family:Lato,Helvetica,sans-serif!important;font-size:14px;color:grey;font-weight:400;line-height:25px;text-align:center}@-webkit-viewport{width:device-width}@-moz-viewport{width:device-width}@-o-viewport{width:device-width}@viewport{width:device-width}*,:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}i{vertical-align:middle}ul{padding-left:0!important}::selection{background:#fc6d6d;color:#fff}::-moz-selection{background:#fc6d6d;color:#fff}a{color:#e96656;-webkit-transition:.7s;transition:all .7s}a,a:hover{text-decoration:none}a:hover{color:#cb4332}p{margin:0}body,button,input,select{color:#404040;font-family:sans-serif;font-size:16px;font-size:1.6rem;line-height:1.5}h1,h2,h3{clear:both}p{margin-bottom:1.5em}b,strong{font-weight:700}em,i{font-style:italic}address{margin:0 0 1.5em}code,tt{font:15px Monaco,Consolas,"Andale Mono","DejaVu Sans Mono",monospace;white-space:initial}dl{margin:0 20px}h1,h2,h3{margin:0;padding:0;border:0;font-size:100%;font:inherit;vertical-align:baseline;margin-bottom:10px;display:block;clear:both}h1,h2{font-family:Montserrat,Helvetica,sans-serif;font-weight:700;line-height:35px}h1,h1 span{font-size:30px}h2{font-size:26px}h3{font-size:24px}ul{margin:0 0 1.5em 3em}ul{list-style:disc}li>ul{margin-bottom:0;margin-left:1.5em}dt{font-weight:700}img{height:auto;max-width:100%}.site-main p{margin:0 0 24px}caption{font-weight:400;text-align:left}caption{font-size:16px;margin:20px 0}.red-text{color:#e96656}.green-text{color:#34d293}.blue-text{color:#3ab0e2}button,input,select{font-size:100%;margin:0;vertical-align:baseline}button,input[type=button],input[type=submit]{text-align:center;text-transform:uppercase;padding:13px 35px;border-radius:4px;margin:10px;border:none;background-color:#e96656;box-shadow:none;text-shadow:none;font-weight:400;vertical-align:middle;cursor:pointer;white-space:nowrap;font-size:14px;color:#fff}button:hover,input[type=button]:hover,input[type=submit]:hover{border-color:#ccc #bbb #aaa;box-shadow:inset 0 1px 0 rgba(255,255,255,.8),inset 0 15px 17px rgba(255,255,255,.8),inset 0 -5px 12px rgba(0,0,0,.02)}button:active,button:focus,input[type=button]:active,input[type=button]:focus,input[type=submit]:active,input[type=submit]:focus{border-color:#aaa #bbb #bbb;box-shadow:inset 0 -1px 0 rgba(255,255,255,.5),inset 0 2px 5px rgba(0,0,0,.15)}input[type=search]{-webkit-appearance:textfield;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-decoration{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input[type=email],input[type=password],input[type=search],input[type=text],input[type=url]{color:#a0a0a0;border:1px solid rgba(0,0,0,.1);border-radius:0}input[type=email]:focus,input[type=password]:focus,input[type=search]:focus,input[type=text]:focus,input[type=url]:focus{color:#111}input[type=email],input[type=password],input[type=search],input[type=text],input[type=url]{padding:3px}.entry-content button,.entry-content input[type=button],.entry-content input[type=submit]{padding:13px 35px}.entry-content button:hover,.entry-content input[type=button]:hover,.entry-content input[type=submit]:hover{background:#cb4332}
25input:active,input:focus,input:hover{outline:0!important;outline-color:#e96656!important;-webkit-box-shadow:none!important;box-shadow:none!important}a{color:#4169e1}a:visited{color:purple}a:active,a:focus,a:hover{color:#191970}.navbar.navbar-inverse .primary-menu ul{list-style:none;margin:0;padding-left:0}.navbar.navbar-inverse .primary-menu li{float:left;position:relative}.navbar.navbar-inverse .primary-menu a{display:block;text-decoration:none}.navbar.navbar-inverse .primary-menu ul ul{box-shadow:0 3px 3px rgba(0,0,0,.2);display:none;float:left;left:0;position:absolute;top:1.5em;z-index:99999}.navbar.navbar-inverse .primary-menu ul ul{top:2em}.navbar.navbar-inverse .primary-menu ul ul ul{left:100%;top:0}.navbar.navbar-inverse .primary-menu ul ul a{width:200px}.navbar.navbar-inverse .primary-menu ul li:hover>ul{display:block}.clear:after,.clear:before,.entry-content:after,.entry-content:before,.site-content:after,.site-content:before{content:'';display:table}.clear:after,.entry-content:after,.site-content:after{clear:both}.sidebar-wrap{border-left:1px solid rgba(0,0,0,.05)}.widget .widget-title{color:#404040;text-transform:uppercase;margin-bottom:30px;font-weight:700;font-size:17px;position:relative;text-align:left;margin-top:30px;padding-bottom:5px;float:none}.widget .widget-title:before{position:absolute;margin:auto;z-index:1;content:"";width:35%;height:2px;background:#e96656;bottom:-9px;left:0}.widget select{max-width:100%;width:100%;padding:10px;border:1px solid #e9e9e9}.widget_search .search-submit{display:block;width:46px;height:46px;position:absolute;top:0;right:0;padding:0;margin:0;background:url(https://jackkeller.com/wp-content/themes/zerif-pro/images/search_icon.png) center center no-repeat;text-indent:-9999999px}.widget_search label{margin-bottom:5px;width:100%;position:relative}.widget_search form{position:relative}.widget_search input{width:83%;padding:12px 15% 12px 2%}.widget ul{margin:0;padding:0;display:block}.widget li{list-style:none;margin:15px 0;text-align:left;margin-left:3%;position:relative;padding-left:10px}.widget li:before{content:'';width:4px;height:4px;background:#e9e9e9;float:left;position:absolute;margin-top:11px;left:0}.widget li a{color:grey}.widget li a:hover{color:#404040}.widget-area{float:left;width:100%}.widget-area .widget{clear:both}.container>.navbar-header{margin-right:0;margin-left:0}.hentry{margin:0 0 1.5em}.byline,.updated{display:none}.entry-content{margin:1.5em 0 0}.entry-title{float:none;position:relative}.entry-title:after{position:absolute;margin:auto;z-index:1;content:"";width:10%;height:2px;background:#e96656;bottom:-9px;left:0}.content-area .entry-header{display:inline-block;width:100%}iframe,object{max-width:100%}.focus{padding-top:100px}.status{width:200px;height:200px;position:absolute;left:50%;top:50%;background-image:url(https://jackkeller.com/wp-content/themes/zerif-pro/images/loading.gif);background-repeat:no-repeat;background-position:center;margin:-100px 0 0 -100px}header.header{min-height:76px}.header.header>.navbar{-webkit-box-shadow:0 5px 11px 0 rgba(50,50,50,.08);box-shadow:0 5px 11px 0 rgba(50,50,50,.08)}.navbar{background:#fff;border:0;border-radius:0!important;text-align:left}#main-nav{position:fixed;width:100%;z-index:1000;min-height:75px;margin-bottom:0}.navbar-brand{height:76px;position:relative;line-height:60px;padding:7px 15px;display:inline-block;text-align:center}.navbar-brand>a>img{max-height:62px}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#999;text-decoration:none}.navbar-brand>img{max-height:100%}.navbar-toggle{border:0;background-color:grey;margin-top:23px}.navbar-inverse .navbar-toggle,.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#e96656;opacity:1;box-shadow:none}.navbar-toggle.collapsed{background-color:grey!important}.navbar.navbar-inverse .primary-menu ul>li.current-menu-item.menu-item-home>a:before,.navbar.navbar-inverse .primary-menu ul>li.current_page_item.menu-item-home a:before{content:"";display:none}.focus{padding-bottom:100px;overflow:hidden;background:#fff}.item{width:100%;height:260px;display:block;-webkit-background-size:100%;background-size:100%;position:relative;margin:auto;margin-bottom:30px;z-index:5;-webkit-backface-visibility:hidden;overflow:hidden;border-radius:4px}#footer{background:#272727;line-height:20px}
25.company-details{color:#939393;padding-top:67px;padding-bottom:30px}.company-details a{color:#939393;text-decoration:none}.company-details a:hover{color:#e96656}.company-details .icon-top{font-size:30px;margin-bottom:10px}.copyright{padding-top:72px;padding-bottom:68px;background:#171717}.copyright p{margin-bottom:0;color:#939393}.social{margin:0 0 1.5em!important}.social li{display:inline-block;margin:5px}.social li a{color:#939393;font-size:18px}.social li a:hover{color:#e96656}.footer-box-wrap{float:left;width:100%}.footer-widget-wrap>.container{text-align:center}.footer-widget{float:none;display:inline-block;vertical-align:top}.footer-widget{padding:0 15px}.footer-widget ul{margin-left:0;padding-left:0}.footer-widget li{list-style:none;margin-left:0}.footer-widget-wrap{background:rgba(255,255,255,.05)}.footer-widget-wrap .widget .widget-title{color:#fff!important}.footer-widget-wrap .widget li a{color:#ccc}.footer-widget-wrap .widget li a:hover{color:#fff}.footer-widget-wrap .widget{color:#ccc;padding-bottom:30px}.entry-content ul{clear:left}article.hentry:not(.large-container){float:left;width:100%;padding-top:0;padding-left:0;padding-right:0;margin-bottom:30px;border-bottom:1px solid rgba(0,0,0,.05)}article.sticky{background:#f9f9f9;padding:10px!important}article{text-align:left}.entry-title,.entry-title a,.widget-title,.widget-title a{font-size:20px;line-height:22px;color:#404040}.entry-title a:hover{color:#e96656}.clear{clear:both}.content-left-wrap{padding-top:60px}.sidebar-wrap.content-left-wrap{margin-top:60px;padding-top:0}.entry-title{font-size:20px}.entry-content{line-height:20px}.entry-content p{text-align:justify}.entry-content{margin:1em 0 0}#map{height:500px}:focus{outline:0}.woocommerce div.product p.price{color:#000}.woocommerce div.product .woocommerce-product-rating{float:left;text-align:left;margin-top:30px;margin-bottom:0}.woocommerce div.product form.cart .button{display:inline-block;text-align:center;text-transform:uppercase;padding:13px 35px;border-radius:4px;margin:10px;border:none;background:#e96656;color:#fff;margin-left:0}.woocommerce div.product form.cart .button:hover{background:#bf3928}.woocommerce div.product form.cart{margin-bottom:0}.woocommerce-page .select2-drop{text-align:left}.woocommerce div.product .woocommerce-tabs ul.tabs li:after,.woocommerce div.product .woocommerce-tabs ul.tabs li:before{content:"";display:none}.woocommerce div.product .woocommerce-tabs ul.tabs{overflow:visible}.woocommerce div.product .woocommerce-tabs ul.tabs li.active{border-bottom:2px solid #e96656;margin-bottom:-1px}.woocommerce div.product .woocommerce-tabs ul.tabs li{box-shadow:none}.woocommerce div.product div.thumbnails a{margin-bottom:1em}.woocommerce div.product form.cart label{color:#404040}.woocommerce div.product .related{clear:both}.woocommerce div.product{width:100%;float:left}.woocommerce div.product div.images .woocommerce-product-gallery__image:nth-child(n+2){width:30.75%}.woocommerce div.product div.images .flex-control-thumbs li{padding-top:1em;float:left;width:30.75%}.woocommerce div.product div.images .flex-control-thumbs li{margin-right:3.8%}.woocommerce div.product div.images .flex-control-thumbs li:nth-child(3n){margin:0}.woocommerce div.product form.cart .variations td,.woocommerce div.product form.cart .variations th{vertical-align:inherit}.woocommerce div.product div.images .flex-control-thumbs li:nth-child(4n+1){clear:none}@media (max-width:768px){.page-template-default article.hentry{padding-bottom:30px}.navbar.navbar-inverse .primary-menu .menu-item-has-children>a:after,.navbar.navbar-inverse .primary-menu .sub-menu .menu-item-has-children>a:after{content:'';display:none}}.navbar.navbar-inverse .primary-menu .menu-item-has-children>a:after{content:'\f0d7';
25font-family:FontAwesome;margin:0 0 0 6px;color:inherit}@media (min-width:768px) and (max-width:1024px){footer .footer-box{padding-top:40px}footer .footer-box.copyright{padding-top:72px}.company-details{padding-top:0;padding-bottom:33px}.four-cell.copyright{width:100%}.four-cell{width:33%;float:left}}@media (max-width:992px){#main-nav nav>ul>li{float:none;display:inline-block}.focus{padding-top:60px;padding-bottom:60px}.sidebar-wrap.pull-right{float:none!important}}@media (max-width:767px){#main-nav{overflow:hidden!important}.navbar.navbar-inverse .primary-menu>li a{text-align:left}.navbar.navbar-inverse .primary-menu ul.sub-menu{display:none!important;position:relative;top:0;box-shadow:none;width:100%}.navbar.navbar-inverse .primary-menu ul.sub-menu li{width:100%;float:left}.navbar.navbar-inverse .primary-menu ul.sub-menu li:last-child a{border-bottom:none}.navbar.navbar-inverse .primary-menu ul.sub-menu ul.sub-menu{position:relative;left:0;top:0}#main-nav{overflow:visible}#main-nav,#main-nav.fixed{position:relative}.navbar.navbar-inverse .primary-menu ul.sub-menu li{padding-left:20px}.navbar.navbar-inverse .primary-menu ul.sub-menu li{padding-bottom:0;padding-top:0}.navbar.navbar-inverse .primary-menu ul.sub-menu li{margin-right:0;padding-right:0}.navbar.navbar-inverse .primary-menu>li>a:hover{color:#40404}.header{min-height:inherit;padding-bottom:0!important}.footer-box-wrap .footer-box:first-child{padding-top:40px}.company-details{padding-top:0;padding-bottom:33px}.copyright{width:100%;padding-top:33px;padding-bottom:33px}.four-cell{width:100%;float:left}}@media (max-width:480px){h2{font-size:6.5vw!important}.four-cell{width:100%;float:left}}@media print{body{font-size:11.25pt}a:link:after,a:visited:after{content:""}header.header{min-height:0!important}#main-nav{position:relative}.focus{padding-top:15px}.focus{padding-bottom:0}.company-details{width:33%!important;margin-right:0;margin-left:0;padding-left:0;padding:0 1.5%;float:left}.copyright{width:100%}.content-left-wrap{padding-top:0}}.navbar.navbar-inverse .primary-menu a,.navbar.navbar-inverse .primary-menu>li>a{color:grey}.navbar.navbar-inverse .primary-menu a:hover,.navbar.navbar-inverse .primary-menu>li>a:hover{color:#00c}.screen-reader-text{clip:rect(1px,1px,1px,1px);height:1px;overflow:hidden;position:absolute!important;width:1px}.primary-menu nav{float:right}.primary-menu ul{list-style:none;margin:0}.primary-menu ul li{display:inline-block;position:relative;margin-right:20px;margin-top:20px;float:left}.primary-menu ul li:last-child{margin-right:0}.primary-menu ul li a:focus,.primary-menu ul li:hover>a{color:#e96656}.primary-menu ul li a{text-decoration:none;display:block;color:#404040;line-height:35px}.primary-menu ul li:hover>.sub-menu{left:0;margin:0}.primary-menu ul ul li:hover>.sub-menu{left:200px;top:0}.sub-menu{position:absolute;left:-9999px;top:100%;background:#fff;width:200px;box-shadow:3px 3px 2px rgba(50,50,50,.08);z-index:9999}.primary-menu ul.sub-menu li{display:block;width:100%;float:none;position:relative;list-style:none;padding:10px;margin:0}.primary-menu ul.sub-menu li a{display:block;line-height:initial}.skip-link{display:inline-block;position:absolute;top:1em;left:.5em;overflow:hidden;width:1px;height:1px;clip:rect(0,0,0,0)}.skip-link:focus{width:auto;height:auto;clip:auto;z-index:9999;padding:10px;border:1px solid;background-color:#efefef;color:#176ba1;text-decoration:none;font-weight:700}@media (min-width:768px){.primary-menu{display:block!important}}@media (max-width:767px){.primary-menu{display:none}.primary-menu ul li{width:100%;border-bottom:1px solid #ededed;position:relative;margin:8px 0 0;padding:0 0 8px}.navbar.navbar-inverse .primary-menu ul.sub-menu li a{width:100%;float:left;padding:8px 25px 8px 0}.primary-menu nav{float:none;padding-right:15px;padding-left:15px}.sub-menu{position:relative;display:none;width:100%;box-shadow:none;z-index:initial;right:0}.primary-menu ul.sub-menu li:last-child{border-bottom:none}}#af_tbw_tipping_donation_div .af_tbw_other_options_fixed_wrap .select2-container--default,.af_tbw_other_options_fixed_wrap .select2-container .select2-selection--single,.af_tbw_other_options_fixed_wrap .select2-container--default .select2-selection--single .select2-selection__arrow{height:46px;padding:0!important}.af_tbw_other_options_fixed_wrap .select2-container--default .select2-selection--single .select2-selection__rendered{line-height:46px}.af_tbw_other_options_fixed_wrap .select2-container--default{width:100%!important}.af_tbw_slected_option .select2-container--default{width:100%!important;margin-bottom:14px}.select2-container{box-sizing:border-box;display:inline-block;margin:0;position:relative;vertical-align:middle}.select2-container .select2-selection--single{box-sizing:border-box;
25cursor:pointer;display:block;height:28px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--single .select2-selection__rendered{display:block;padding-left:8px;padding-right:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.select2-container[dir=rtl] .select2-selection--single .select2-selection__rendered{padding-right:8px;padding-left:20px}.select2-container .select2-selection--multiple{box-sizing:border-box;cursor:pointer;display:block;min-height:32px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--multiple .select2-selection__rendered{display:inline-block;overflow:hidden;padding-left:8px;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-search--inline{float:left}.select2-container .select2-search--inline .select2-search__field{box-sizing:border-box;border:none;font-size:100%;margin-top:5px}.select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-dropdown{background-color:#fff;border:1px solid #aaa;border-radius:4px;box-sizing:border-box;display:block;position:absolute;left:-100000px;width:100%;z-index:1051}.select2-results{display:block}.select2-results__options{list-style:none;margin:0;padding:0}.select2-results__option{padding:6px;user-select:none;-webkit-user-select:none}.select2-results__option[aria-selected]{cursor:pointer}.select2-container--open .select2-dropdown{left:0}.select2-container--open .select2-dropdown--above{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--open .select2-dropdown--below{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-search--dropdown{display:block;padding:4px}.select2-search--dropdown .select2-search__field{padding:4px;width:100%;box-sizing:border-box}.select2-search--dropdown .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-search--dropdown.select2-search--hide{display:none}.select2-close-mask{border:0;margin:0;padding:0;display:block;position:fixed;left:0;top:0;min-height:100%;min-width:100%;height:auto;width:auto;opacity:0;z-index:99;background-color:#fff}.select2-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.select2-container--default .select2-selection--single{background-color:#fff;border:1px solid #aaa;border-radius:4px}.select2-container--default .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--default .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:700}.select2-container--default .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--default .select2-selection--single .select2-selection__arrow{height:26px;position:absolute;top:1px;right:1px;width:20px}.select2-container--default .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent;border-style:solid;border-width:5px 4px 0;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--default[dir=rtl] .select2-selection--single .select2-selection__clear{float:left}.select2-container--default[dir=rtl] .select2-selection--single .select2-selection__arrow{left:1px;right:auto}.select2-container--default.select2-container--disabled .select2-selection--single{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear{display:none}.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888;border-width:0 4px 5px}.select2-container--default .select2-selection--multiple{background-color:#fff;border:1px solid #aaa;border-radius:4px;cursor:text}.select2-container--default .select2-selection--multiple .select2-selection__rendered{box-sizing:border-box;list-style:none;margin:0;padding:0 5px;width:100%}.select2-container--default .select2-selection--multiple .select2-selection__placeholder{color:#999;margin-top:5px;float:left}.select2-container--default .select2-selection--multiple .select2-selection__clear{cursor:pointer;float:right;font-weight:700;margin-top:5px;margin-right:10px}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:#999;cursor:pointer;display:inline-block;font-weight:700;margin-right:2px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#333}.select2-container--default[dir=rtl] .select2-selection--multiple .select2-selection__choice,.select2-container--default[dir=rtl] .select2-selection--multiple .select2-selection__placeholder{float:right}.select2-container--default[dir=rtl] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto}.select2-container--default[dir=rtl] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--default.select2-container--focus .select2-selection--multiple{border:1px solid #000;outline:0}.select2-container--default.select2-container--disabled .select2-selection--multiple{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection__choice__remove{display:none}.select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple,.select2-container--default.select2-container--open.select2-container--above .select2-selection--single{border-top-left-radius:0;border-top-right-radius:0}.select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple,.select2-container--default.select2-container--open.select2-container--below .select2-selection--single{border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--default .select2-search--dropdown .select2-search__field{border:1px solid #aaa}.select2-container--default .select2-search--inline .select2-search__field{background:0 0;border:none;outline:0}.select2-container--default .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--default .select2-results__option[role=group]{padding:0}.select2-container--default .select2-results__option[aria-disabled=true]{color:#999}.select2-container--default .select2-results__option[aria-selected=true]{background-color:#ddd}.select2-container--default .select2-results__option .select2-results__option{padding-left:1em}.select2-container--default .select2-results__option .select2-results__option .select2-results__group{padding-left:0}.select2-container--default .select2-results__option .select2-results__option .select2-results__option{margin-left:-1em;padding-left:2em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-2em;padding-left:3em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-3em;padding-left:4em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-4em;padding-left:5em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-5em;padding-left:6em}.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:#5897fb;color:#fff}.select2-container--default .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic .select2-selection--single{background-color:#f6f6f6;border:1px solid #aaa;border-radius:4px;outline:0;background-image:-webkit-linear-gradient(top,#fff 50%,#eee 100%);background-image:-o-linear-gradient(top,#fff 50%,#eee 100%);background-image:linear-gradient(to bottom,#fff 50%,#eee 100%);background-repeat:repeat-x}.select2-container--classic .select2-selection--single:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--classic .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:700;margin-right:10px}.select2-container--classic .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--classic .select2-selection--single .select2-selection__arrow{background-color:#ddd;border:none;border-left:1px solid #aaa;border-top-right-radius:4px;border-bottom-right-radius:4px;
25height:26px;position:absolute;top:1px;right:1px;width:20px;background-image:-webkit-linear-gradient(top,#eee 50%,#ccc 100%);background-image:-o-linear-gradient(top,#eee 50%,#ccc 100%);background-image:linear-gradient(to bottom,#eee 50%,#ccc 100%);background-repeat:repeat-x}.select2-container--classic .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent;border-style:solid;border-width:5px 4px 0;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--classic[dir=rtl] .select2-selection--single .select2-selection__clear{float:left}.select2-container--classic[dir=rtl] .select2-selection--single .select2-selection__arrow{border:none;border-right:1px solid #aaa;border-radius:0;border-top-left-radius:4px;border-bottom-left-radius:4px;left:1px;right:auto}.select2-container--classic.select2-container--open .select2-selection--single{border:1px solid #5897fb}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow{background:0 0;border:none}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888;border-width:0 4px 5px}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single{border-top:none;border-top-left-radius:0;border-top-right-radius:0;background-image:-webkit-linear-gradient(top,#fff 0,#eee 50%);background-image:-o-linear-gradient(top,#fff 0,#eee 50%);background-image:linear-gradient(to bottom,#fff 0,#eee 50%);background-repeat:repeat-x}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0;background-image:-webkit-linear-gradient(top,#eee 50%,#fff 100%);background-image:-o-linear-gradient(top,#eee 50%,#fff 100%);background-image:linear-gradient(to bottom,#eee 50%,#fff 100%);background-repeat:repeat-x}.select2-container--classic .select2-selection--multiple{background-color:#fff;border:1px solid #aaa;border-radius:4px;cursor:text;outline:0}.select2-container--classic .select2-selection--multiple:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--multiple .select2-selection__rendered{list-style:none;margin:0;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__clear{display:none}.select2-container--classic .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove{color:#888;cursor:pointer;display:inline-block;font-weight:700;margin-right:2px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover{color:#555}.select2-container--classic[dir=rtl] .select2-selection--multiple .select2-selection__choice{float:right}.select2-container--classic[dir=rtl] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto}.select2-container--classic[dir=rtl] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--classic.select2-container--open .select2-selection--multiple{border:1px solid #5897fb}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--classic .select2-search--dropdown .select2-search__field{border:1px solid #aaa;outline:0}.select2-container--classic .select2-search--inline .select2-search__field{outline:0}.select2-container--classic .select2-dropdown{background-color:#fff;border:1px solid transparent}.select2-container--classic .select2-dropdown--above{border-bottom:none}.select2-container--classic .select2-dropdown--below{border-top:none}.select2-container--classic .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--classic .select2-results__option[role=group]{padding:0}.select2-container--classic .select2-results__option[aria-disabled=true]{color:grey}.select2-container--classic .select2-results__option--highlighted[aria-selected]{background-color:#3875d7;color:#fff}.select2-container--classic .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic.select2-container--open .select2-dropdown{border-color:#5897fb}:root{--rwp-banner-padding:1rem;--rwp-banner-gap:0.75rem;--rwp-banner-radius:0.5rem;--rwp-banner-icon-size:1.5rem;--rwp-banner-font-size:0.875rem;--rwp-banner-line-height:1.5;--rwp-banner-heading-size:1rem;--rwp-banner-button-bg:var(--color-rwp-brand, #374151);--rwp-banner-button-text:var(--color-rwp-widget-button-text, #ffffff)}:root,rewards-panel{--color-rwp-brand:#000099;--color-rwp-brand-hover:color-mix(in srgb, white 20%, #000099);--color-rwp-brand-foreground:#ffffff;--color-rwp-widget-button-text:#ffffff;--rwp-header-text:#ffffff;--rwp-button-text:#ffffff}:root{--rwp-panel-position:fixed;--rwp-panel-top:auto;--rwp-panel-bottom:96px;--rwp-panel-left:24px;--rwp-panel-right:auto;--rwp-panel-transform-origin:bottom left;--rwp-launcher-position:fixed;--rwp-launcher-bottom:24px;--rwp-launcher-left:24px;--rwp-launcher-right:auto}.site-content{background:#fff}.navbar{background:#fff}.entry-title,.entry-title a,.widget-title,.widget-title a{color:#404040!important}.entry-title:after,.entry-title:before,.navbar.navbar-inverse .primary-menu ul li.current-menu-item>a:before,.widget .widget-title:before{background:#00c!important}.widget .textwidget,.widget p,body,button,input,select{color:#404040}.site-content a,.widget a,.widget li a,article .entry-content a{color:grey}.site-content a:hover,.widget a:hover,.widget li a:hover,article .entry-content a:hover{color:#00c}.focus{background:#fff}#footer{background:#272727}.copyright{background:#171717}
25#footer .company-details,#footer .company-details a,#footer .footer-widget a,#footer .footer-widget p{color:#939393!important}#footer .social li a{color:#00b1dd}#footer .social li a:hover{color:#009}#footer .company-details a:hover,#footer .footer-widget a:hover{color:#00b1dd!important}#footer .footer-widget h1{color:#fff!important}#footer .footer-widget h1:before{background:#009!important}.page button,.post button{background-color:#1e73be!important}.page button:hover,.post button:hover{background-color:#00c!important;box-shadow:none}.page button,.post button{color:#fff!important}body.custom-background{background-image:url("https://jackkeller.com/wp-content/uploads/2026/02/enhance-the-uploaded.png");background-position:center top;background-size:contain;background-repeat:no-repeat;background-attachment:fixed}:root{--primarybtnbg:#1876d6;--primarybtncolor:#fff;--sp-text-color:#000;--sp-site-bg:#fff;--sp-text-dark-bg:#fff;--sp-c-1:#9ca2c0;--formfieldbgcolor:#fff;--formfieldbordercolor:#ddd;--formfieldborderwidth:2px;--formfieldpadding:10px 12px;--bodyfontfamily:inherit;--primarybtnhoverbg:var(--sp-primary-accent);--bodyfontsize:inherit;--sp-primary-accent:#0366d6;--sp-secondary-accent:#0e509a}.entry-title:after{background:#009!important}.navbar-toggle.collapsed{background-color:#009!important}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#009!important}</style><link rel="preload" data-rocket-preload as="image" href="https://jackkeller.com/wp-content/uploads/2025/12/cropped-JKI-no-addr-1975.jpg" fetchpriority="high"> 26<meta name="description" content="Alachua - (352) 374-5230"/> 27<meta name="robots" content="follow, index, max-snippet:-1, max-video-preview:-1, max-image-preview:large"/> 28<link rel="canonical" href="https://jackkeller.com/tax-record-search/" /> 29<meta property="og:locale" content="en_US" /> 30<meta property="og:type" content="article" /> 31<meta property="og:title" content="Tax Record Search | List On MLS & REALTOR.com+ From $75." /> 32<meta property="og:description" content="Alachua - (352) 374-5230" /> 33<meta property="og:url" content="https://jackkeller.com/tax-record-search/" /> 34<meta property="og:site_name" content="List on MLS & REALTOR.com+ from $75." /> 35<meta property="article:publisher" content="https://www.facebook.com/Flat-Fee-MLS-Listings-1624103311168131" /> 36<meta property="og:updated_time" content="2022-09-02T13:35:12-04:00" /> 37<meta property="og:image" content="https://jackkeller.com/wp-content/uploads/2020/07/JKI-WEB.jpg" /> 38<meta property="og:image:secure_url" content="https://jackkeller.com/wp-content/uploads/2020/07/JKI-WEB.jpg" /> 39<meta property="og:image:width" content="475" /> 40<meta property="og:image:height" content="365" /> 41<meta property="og:image:alt" content="JKI WEB" /> 42<meta property="og:image:type" content="image/jpeg" /> 43<meta property="article:published_time" content="2015-12-11T16:55:19-05:00" /> 44<meta property="article:modified_time" content="2022-09-02T13:35:12-04:00" /> 45<meta name="twitter:card" content="summary" /> 46<meta name="twitter:title" content="Tax Record Search | List On MLS & REALTOR.com+ From $75." /> 47<meta name="twitter:description" content="Alachua - (352) 374-5230" /> 48<meta name="twitter:image" content="https://jackkeller.com/wp-content/uploads/2020/07/JKI-WEB.jpg" /> 49<meta name="twitter:label1" content="Time to read" /> 50<meta name="twitter:data1" content="Less than a minute" />
51<script type="application/ld+json" class="rank-math-schema-pro">{"@context":"https://schema.org","@graph":[{"@type":"Place","@id":"https://jackkeller.com/#place","address":{"@type":"PostalAddress","streetAddress":"2440 West Bay Dr","addressLocality":"Largo","addressRegion":"FL","postalCode":"33770","addressCountry":"USA"}},{"@type":["RealEstateAgent","Organization"],"@id":"https://jackkeller.com/#organization","name":"Jack Keller Inc., REALTORS","url":"https://www.jackkeller.com","sameAs":["https://www.facebook.com/Flat-Fee-MLS-Listings-1624103311168131"],"email":"[email protected]","address":{"@type":"PostalAddress","streetAddress":"2440 West Bay Dr","addressLocality":"Largo","addressRegion":"FL","postalCode":"33770","addressCountry":"USA"},"logo":{"@type":"ImageObject","@id":"https://jackkeller.com/#logo","url":"https://jackkeller.com/wp-content/uploads/2015/08/JKI-letter-head2.jpg","contentUrl":"https://jackkeller.com/wp-content/uploads/2015/08/JKI-letter-head2.jpg","caption":"List on MLS & REALTOR.com+ from $75.","inLanguage":"en-US","width":"96","height":"60"},"priceRange":"From $75","openingHours":["Mo,Tu,We,Th,Fr 09:00-17:00"],"location":{"@id":"https://jackkeller.com/#place"},"image":{"@id":"https://jackkeller.com/#logo"},"telephone":"+17275861497"},{"@type":"WebSite","@id":"https://jackkeller.com/#website","url":"https://jackkeller.com","name":"List on MLS & REALTOR.com+ from $75.","alternateName":"List on MLS & REALTOR.com, Zillow, Redfin, Homes.com+ from $75.","publisher":{"@id":"https://jackkeller.com/#organization"},"inLanguage":"en-US"},{"@type":"ImageObject","@id":"https://jackkeller.com/wp-content/uploads/2020/07/JKI-WEB.jpg","url":"https://jackkeller.com/wp-content/uploads/2020/07/JKI-WEB.jpg","width":"475","height":"365","caption":"JKI WEB","inLanguage":"en-US"},{"@type":"BreadcrumbList","@id":"https://jackkeller.com/tax-record-search/#breadcrumb","itemListElement":[{"@type":"ListItem","position":"1","item":{"@id":"https://jackkeller.com","name":"Home"}},{"@type":"ListItem","position":"2","item":{"@id":"https://jackkeller.com/tax-record-search/","name":"Tax Record Search"}}]},{"@type":"WebPage","@id":"https://jackkeller.com/tax-record-search/#webpage","url":"https://jackkeller.com/tax-record-search/","name":"Tax Record Search | List On MLS & REALTOR.com+ From $75.","datePublished":"2015-12-11T16:55:19-05:00","dateModified":"2022-09-02T13:35:12-04:00","isPartOf":{"@id":"https://jackkeller.com/#website"},"primaryImageOfPage":{"@id":"https://jackkeller.com/wp-content/uploads/2020/07/JKI-WEB.jpg"},"inLanguage":"en-US","breadcrumb":{"@id":"https://jackkeller.com/tax-record-search/#breadcrumb"}},{"@type":"Person","@id":"https://jackkeller.com/tax-record-search/#author","name":"jackkellerinc","image":{"@type":"ImageObject","@id":"https://secure.gravatar.com/avatar/33640dfad3ca25fc0a3847ad94015640b6542ac14f344a47260d8c87f358e2b4?s=96&d=mm&r=g","url":"https://secure.gravatar.com/avatar/33640dfad3ca25fc0a3847ad94015640b6542ac14f344a47260d8c87f358e2b4?s=96&d=mm&r=g","caption":"jackkellerinc","inLanguage":"en-US"},"worksFor":{"@id":"https://jackkeller.com/#organization"}},{"@type":"Article","headline":"Tax Record Search | List On MLS & REALTOR.com+ From $75.","keywords":"MLS,multiple,listing,service,flat,fee,low,fee,fsbo,flat,fee,mls,cheap,mls,low,fee,mls,south,florida,florida,fl,fla,for,sale,by,owner,owner,by,owner,listing,for,sale,cheap,central,florida,Pinellas,Hillsborough,Pasco,Polk,Broward,Palm,Beach,Miami-Dade,St,Lucie,Martin,Orange,Seminole,Sarasota,Manatee,Charlotte,Osceola,Lake,Desoto,Sumter,W,Volusia,Counties,tampa,tampa,bay,mls,listings,fee,for,service,real,estate,flat,fee,real,estate,low,fee,real,estate,fee,for,service,real,estate,Pinellas,mls,Hillsborough,mls,Pasco,mls,Polk,mls,Broward,mls,Palm,Beach,mls,Miami-Dade,mls,St,Lucie,mls,Martin,mls,Orange,mls,Seminole,mls,Sarasota,mls,Manatee,mls,Charlotte,mls,Osceola,mls,Lake,mls,Desoto,mls,Sumter,,mls,W,Volusia,Pinellas,Hillsborough,fsbo,Pasco,fsbo,Polk,fsbo,Broward,fsbo,Palm,Beach,fsbo,Miami-Dade,fsbo,St,Lucie,fsbo,Martin,fsbo,Orange,fsbo,Seminole,fsbo,Sarasota,fsbo,Manatee,f
51sbo,Charlotte,fsbo,Osceola,fsbo,Lake,fsbo,Desoto,fsbo,Sumter,fsbo,W,Volusia,fsbo,Counties,Belleair,North Redington Beach,Belleair Beach,Oldsmar,Belleair Bluffs,Pinellas Park,Belleair Shore,Redington Beach,Clearwater,Redington Shores,Dunedin,Safety Harbor,Gulfport,St.Pete Beach,Indian Rocks Beach,St. Petersburg,Indian Shores,Seminole,Kenneth City,South Pasadena,Largo,Tarpon Springs,Madeira Beach,Treasure Island,Apollo Beach,Balm,Bloomingdale,Boyette,Brandon,Carrollwood,Carrollwood Village,Cheval,Citrus Park,Clair-Mel,Dover,East,Lake Egypt,Lake-Leto,FishHawk,Gibsonton,Keystone,Lake Magdalene,Lutz,Mango,Northdale,Orient Park,Palm River-Clair Mel,Pebble Creek,Progress Village,Riverview,Ruskin,SeffnerSun City CenterThonotosassa,Town 'n' Country,University,Valrico,Westchase,Wimauma, Belleair mls,North Redington Beach mls,Belleair Beach mls,Oldsmar mls,Belleair Bluffs mls,Pinellas Park mls,Belleair Shore mls,Redington Beach mls,Clearwater mls,Redington Shores mls,Dunedin mls,Safety Harbor mls,Gulfport mls,St.Pete Beach mls,Indian Rocks Beach mls,St. Petersburg mls,Indian Shores mls,Seminole mls,Kenneth City mls,South Pasadena mls,Largo mls,Tarpon Springs mls,Madeira Beach mls,Treasure Island mls,Apollo Beach mls,Balm mls,Bloomingdale mls,Boyette mls,Brandon mls,Carrollwood mls,Carrollwood Village mls,Cheval mls,Citrus Park mls,Clair-Mel mls,Dover mls,East mls,Lake Egypt mls,Lake-Leto mls,FishHawk mls,Gibsonton mls,Keystone mls,Lake Magdalene mls,Lutz mls,Mango mls,Northdale mls,Orient Park mls,Palm River-Clair Mel mls,Pebble Creek mls,Progress Village mls,Riverview mls,Ruskin mls,Seffner,Sun City Center,Thonotosassa mls,Town 'n' Country mls,University mls,Valrico mls,Westchase mls,Wimauma, Belleair fsbo,North Redington Beach fsbo,Belleair Beach fsbo,Oldsmar fsbo,Belleair Bluffs fsbo,Pinellas Park fsbo,Belleair Shore fsbo,Redington Beach fsbo,Clearwater fsbo,Redington Shores fsbo,Dunedin fsbo,Safety Harbor fsbo,Gulfport fsbo,St.Pete Beach fsbo,Indian Rocks Beach fsbo,St. Petersburg fsbo,Indian Shores fsbo,Seminole fsbo,Kenneth City fsbo,South Pasadena fsbo,Largo fsbo,Tarpon Springs fsbo,Madeira Beach fsbo,Treasure Island fsbo,Apollo Beach fsbo,Balm fsbo,Bloomingdale fsbo,Boyette fsbo,Brandon fsbo,Carrollwood fsbo,Carrollwood Village fsbo,Cheval fsbo,Citrus Park fsbo,Clair-Mel fsbo,Dover fsbo,East fsbo,Lake Egypt fsbo,Lake-Leto fsbo,FishHawk fsbo,Gibsonton fsbo,Keystone fsbo,Lake Magdalene fsbo,Lutz fsbo,Mango fsbo,Northdale fsbo,Orient Park fsbo,Palm River-Clair Mel fsbo,Pebble Creek fsbo,Progress Village fsbo,Riverview fsbo,Ruskin fsbo,Seffner,Sun City Center,Thonotosassa fsbo,Town 'n' Country fsbo,University fsbo,Valrico fsbo,Westchase fsbo,Wimauma","datePublished":"2015-12-11T16:55:19-05:00","dateModified":"2022-09-02T13:35:12-04:00","author":{"@id":"https://jackkeller.com/tax-record-search/#author","name":"jackkellerinc"},"publisher":{"@id":"https://jackkeller.com/#organization"},"description":"Alachua - (352) 374-5230","name":"Tax Record Search | List On MLS & REALTOR.com+ From $75.","@id":"https://jackkeller.com/tax-record-search/#richSnippet","isPartOf":{"@id":"https://jackkeller.com/tax-record-search/#webpage"},"image":{"@id":"https://jackkeller.com/wp-content/uploads/2020/07/JKI-WEB.jpg"},"inLanguage":"en-US","mainEntityOfPage":{"@id":"https://jackkeller.com/tax-record-search/#webpage"}}]}</script>
51 52<!-- /Rank Math WordPress SEO plugin --> 53 54<link rel='dns-prefetch' href='//www.googletagmanager.com' /> 55 56 57<link rel="alternate" type="application/rss+xml" title="List on MLS & REALTOR.com+ from $75. » Feed" href="https://jackkeller.com/feed/" /> 58<link rel="alternate" title="oEmbed (JSON)" type="application/json+oembed" href="https://jackkeller.com/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fjackkeller.com%2Ftax-record-search%2F" /> 59<link rel="alternate" title="oEmbed (XML)" type="text/xml+oembed" href="https://jackkeller.com/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fjackkeller.com%2Ftax-record-search%2F&format=xml" /> 60 <!-- This site uses the Google Analytics by MonsterInsights plugin v11.3.0 - Using Analytics tracking - https://www.monsterinsights.com/ -->
vendor: 104 bytes, lines 60-61
60 61 <script type="text/rocketlazyloadscript" data-rocket-src="//www.googletagmanager.com/gtag/js?id=
61G-VMZCK0DKVX
vendor: 68 bytes, lines 61-62
61" data-cfasync="false" data-wpfc-render="false" async></script> 62
62<script type="text/rocketlazyloadscript" data-cfasync="false" data-wpfc-render="false"> 63 var mi_version = '11.3.0'; 64 var mi_track_user = true; 65 var mi_no_track_reason = ''; 66 var MonsterInsightsDefaultLocations = {"page_location":"https:\/\/jackkeller.com\/tax-record-search\/"}; 67 if ( typeof MonsterInsightsPrivacyGuardFilter === 'function' ) { 68 var MonsterInsightsLocations = (typeof MonsterInsightsExcludeQuery === 'object') ? MonsterInsightsPrivacyGuardFilter( MonsterInsightsExcludeQuery ) : MonsterInsightsPrivacyGuardFilter( MonsterInsightsDefaultLocations ); 69 } else { 70 var MonsterInsightsLocations = (typeof MonsterInsightsExcludeQuery === 'object') ? MonsterInsightsExcludeQuery : MonsterInsightsDefaultLocations; 71 } 72 73 var disableStrs = [ 74 'ga-disable-G-VMZCK0DKVX', 75 ]; 76 77 /* Function to detect opted out users */ 78 function __gtagTrackerIsOptedOut() { 79 for (var index = 0; index < disableStrs.length; index++) { 80 if (document.cookie.indexOf(disableStrs[index] + '=true') > -1) { 81 return true; 82 } 83 } 84 85 return false; 86 } 87 88 /* Disable tracking if the opt-out cookie exists. */ 89 if (__gtagTrackerIsOptedOut()) { 90 for (var index = 0; index < disableStrs.length; index++) { 91 window[disableStrs[index]] = true; 92 } 93 } 94 95 /* Opt-out function */ 96 function __gtagTrackerOptout() { 97 for (var index = 0; index < disableStrs.length; index++) { 98 document.cookie = disableStrs[index] + '=true; expires=Thu, 31 Dec 2099 23:59:59 UTC; path=/'; 99 window[disableStrs[index]] = true; 100 } 101 } 102 103 if ('undefined' === typeof gaOptout) { 104 function gaOptout() { 105 __gtagTrackerOptout(); 106 } 107 } 108 window.dataLayer = window.dataLayer || []; 109 110 window.MonsterInsightsDualTracker = { 111 helpers: {}, 112 trackers: {}, 113 }; 114 if (mi_track_user) { 115 function __gtagDataLayer() { 116 dataLayer.push(arguments); 117 } 118 119 function __gtagTracker(type, name, parameters) { 120 if (!parameters) { 121 parameters = {}; 122 } 123 124 if (parameters.send_to) { 125 __gtagDataLayer.apply(null, arguments); 126 return; 127 } 128 129 if (type === 'event') { 130 parameters.send_to = monsterinsights_frontend.v4_id; 131 var hookName = name; 132 if (typeof parameters['event_category'] !== 'undefined') { 133 hookName = parameters['event_category'] + ':' + name; 134 } 135 136 if (typeof MonsterInsightsDualTracker.trackers[hookName] !== 'undefined') { 137 MonsterInsightsDualTracker.trackers[hookName](parameters); 138 } else { 139 __gtagDataLayer('event', name, parameters); 140 } 141 142 } else { 143 __gtagDataLayer.apply(null, arguments); 144 } 145 } 146 147 __gtagTracker('js', new Date()); 148 __gtagTracker('set', { 149 'developer_id.dZGIzZG': true, 150 }); 151 if ( MonsterInsightsLocations.page_location ) { 152 __gtagTracker('set', MonsterInsightsLocations); 153 } 154 __gtagTracker('config', 'G-VMZCK0DKVX', {"forceSSL":"true","link_attribution":"true"} ); 155 window.gtag = __gtagTracker; (function () { 156 /* https://developers.google.com/analytics/devguides/collection/analyticsjs/ */ 157 /* ga and __gaTracker compatibility shim. */ 158 var noopfn = function () { 159 return null; 160 }; 161 var newtracker = function () { 162 return new Tracker(); 163 }; 164 var Tracker = function () { 165 return null; 166 }; 167 var p = Tracker.prototype; 168 p.get = noopfn; 169 p.set = noopfn; 170 p.send = function () { 171 var args = Array.prototype.slice.call(arguments); 172 args.unshift('send'); 173 __gaTracker.apply(null, args); 174 }; 175 var __gaTracker = function () { 176 var len = arguments.length; 177 if (len === 0) { 178 return; 179 } 180 var f = arguments[len - 1]; 181 if (typeof f !== 'object' || f === null || typeof f.hitCallback !== 'function') { 182 if ('send' === arguments[0]) { 183 var hitConverted, hitObject = false, action; 184 if ('event' === arguments[1]) { 185 if ('undefined' !== typeof arguments[3]) { 186 hitObject = { 187 'eventAction': arguments[3], 188 'eventCategory': arguments[2], 189 'eventLabel': arguments[4], 190 'value': arguments[5] ? arguments[5] : 1, 191 } 192 } 193 } 194 if ('pageview' === arguments[1]) { 195 if ('undefined' !== typeof arguments[2]) { 196 hitObject = { 197 'eventAction': 'page_view', 198 'page_path': arguments[2], 199 } 200 } 201 } 202 if (typeof arguments[2] === 'object') { 203 hitObject = arguments[2]; 204 } 205 if (typeof arguments[5] === 'object') { 206 Object.assign(hitObject, arguments[5]); 207 } 208 if ('undefined' !== typeof arguments[1].hitType) { 209 hitObject = arguments[1]; 210 if ('pageview' === hitObject.hitType) { 211 hitObject.eventAction = 'page_view'; 212 } 213 } 214 if (hitObject) { 215 action = 'timing' === arguments[1].hitType ? 'timing_complete' : hitObject.eventAction;
216 hitConverted = mapArgs(hitObject); 217 __gtagTracker('event', action, hitConverted); 218 } 219 } 220 return; 221 } 222 223 function mapArgs(args) { 224 var arg, hit = {}; 225 var gaMap = { 226 'eventCategory': 'event_category', 227 'eventAction': 'event_action', 228 'eventLabel': 'event_label', 229 'eventValue': 'event_value', 230 'nonInteraction': 'non_interaction', 231 'timingCategory': 'event_category', 232 'timingVar': 'name', 233 'timingValue': 'value', 234 'timingLabel': 'event_label', 235 'page': 'page_path', 236 'location': 'page_location', 237 'title': 'page_title', 238 'referrer' : 'page_referrer', 239 }; 240 for (arg in args) { 241 if (!(!args.hasOwnProperty(arg) || !gaMap.hasOwnProperty(arg))) { 242 hit[gaMap[arg]] = args[arg]; 243 } else { 244 hit[arg] = args[arg]; 245 } 246 } 247 return hit; 248 } 249 250 try { 251 f.hitCallback(); 252 } catch (ex) { 253 } 254 }; 255 __gaTracker.create = newtracker; 256 __gaTracker.getByName = newtracker; 257 __gaTracker.getAll = function () { 258 return []; 259 }; 260 __gaTracker.remove = noopfn; 261 __gaTracker.loaded = true; 262 window['__gaTracker'] = __gaTracker; 263 })(); 264 } else { 265 console.log(""); 266 (function () { 267 function __gtagTracker() { 268 return null; 269 } 270 271 window['__gtagTracker'] = __gtagTracker; 272 window['gtag'] = __gtagTracker; 273 })(); 274 } 275 </script>
275 276 <!-- / Google Analytics by MonsterInsights --> 277 278<style type="text/css" media="all"></style> 279<style id="wp-img-auto-sizes-contain-inline-css"></style> 280 281 282 283 284 285 286<style id="wp-emoji-styles-inline-css"></style> 287<style id="wp-block-library-inline-css"></style> 288<style id="classic-theme-styles-inline-css"></style> 289 290<style id="global-styles-inline-css"></style> 291 292 293 294 295 296 297<style id="woocommerce-layout-inline-css"></style> 298 299 300<style id="woocommerce-inline-inline-css"></style> 301 302 303<style id="jetpack-stats-inline-css"> 304img#wpstats{display:none} 305/*# sourceURL=jetpack-stats-inline-css */ 306</style> 307 308 309 310 311 312 313<style id="zerif_style-inline-css"></style> 314 315 316 317<style id="rewardswp-components-inline-css"></style> 318 319<style id="rocket-lazyload-inline-css"> 320.rll-youtube-player{position:relative;padding-bottom:56.23%;height:0;overflow:hidden;max-width:100%;}.rll-youtube-player:focus-within{outline: 2px solid currentColor;outline-offset: 5px;}.rll-youtube-player iframe{position:absolute;top:0;left:0;width:100%;height:100%;z-index:100;background:0 0}.rll-youtube-player img{bottom:0;display:block;left:0;margin:auto;max-width:100%;width:100%;position:absolute;right:0;top:0;border:none;height:auto;-webkit-transition:.4s all;-moz-transition:.4s all;transition:.4s all}.rll-youtube-player img:hover{-webkit-filter:brightness(75%)}.rll-youtube-player .play{height:100%;width:100%;left:0;top:0;position:absolute;background:url(https://jackkeller.com/wp-content/plugins/wp-rocket/assets/img/youtube.png) no-repeat center;background-color: transparent !important;cursor:pointer;border:none;} 321/*# sourceURL=rocket-lazyload-inline-css */ 322</style>
323<script type="text/rocketlazyloadscript" id="jquery-core-js" data-rocket-src="https://jackkeller.com/wp-includes/js/jquery/jquery.min.js?ver=3.7.1" data-rocket-defer defer></script>
vendor: 1 bytes, line 323
323
324<script type="text/rocketlazyloadscript" id="jquery-migrate-js" data-rocket-src="https://jackkeller.com/wp-includes/js/jquery/jquery-migrate.min.js?ver=3.4.1" data-rocket-defer defer></script>
vendor: 1 bytes, line 324
324
325<script type="text/rocketlazyloadscript" id="wp-dom-ready-js" data-rocket-src="https://jackkeller.com/wp-includes/js/dist/dom-ready.min.js?ver=3fe927cab37bf38d6a23" data-rocket-defer defer></script>
vendor: 1 bytes, line 325
325
326<script type="text/rocketlazyloadscript" data-minify="1" id="wpautoterms_base-js" data-rocket-src="https://jackkeller.com/wp-content/cache/min/1/wp-content/plugins/auto-terms-of-service-and-privacy-policy/js/base.js?ver=1789818262" data-rocket-defer defer></script>
vendor: 1 bytes, line 326
326
327<script type="text/rocketlazyloadscript" async data-wp-strategy="async" id="monsterinsights-frontend-script-js" data-rocket-src="https://jackkeller.com/wp-content/plugins/google-analytics-for-wordpress/assets/js/frontend-gtag.min.js?ver=11.3.0"></script>
vendor: 1 bytes, line 327
327
328<script data-cfasync="false" data-wpfc-render="false" id='monsterinsights-frontend-script-js-extra'>var monsterinsights_frontend = {"js_events_tracking":"true","download_extensions":"doc,pdf,ppt,zip,xls,docx,pptx,xlsx","inbound_paths":"[{\"path\":\"\\\/go\\\/\",\"label\":\"affiliate\"},{\"path\":\"\\\/recommend\\\/\",\"label\":\"affiliate\"}]","home_url":"https:\/\/jackkeller.com","hash_tracking":"false","v4_id":"G-VMZCK0DKVX"};</script>
vendor: 1 bytes, line 328
328
329<script type="text/rocketlazyloadscript" data-wp-strategy="defer" id="wc-jquery-blockui-js" data-rocket-src="https://jackkeller.com/wp-content/plugins/woocommerce/assets/js/jquery-blockui/jquery.blockUI.min.js?ver=2.7.0-wc.11.1.1" data-rocket-defer defer></script>
vendor: 1 bytes, line 329
329
330<script id="wc-add-to-cart-js-extra" type="968bfde1705c18b9099319f7-text/javascript"> 331var wc_add_to_cart_params = {"ajax_url":"/wp-admin/admin-ajax.php","wc_ajax_url":"/?wc-ajax=%%endpoint%%","i18n_view_cart":"View cart","cart_url":"https://jackkeller.com/cart-2/","is_cart":"","cart_redirect_after_add":"yes"}; 332//# sourceURL=wc-add-to-cart-js-extra 333</script>
vendor: 1 bytes, line 333
333
334<script type="text/rocketlazyloadscript" data-wp-strategy="defer" defer id="wc-add-to-cart-js" data-rocket-src="https://jackkeller.com/wp-content/plugins/woocommerce/assets/js/frontend/add-to-cart.min.js?ver=11.1.1"></script>
vendor: 1 bytes, line 334
334
335<script id="wc-address-autocomplete-common-js-extra" type="968bfde1705c18b9099319f7-text/javascript"> 336var wc_address_autocomplete_common_params = {"address_providers":"[{\"id\":\"woocommerce_payments\",\"name\":\"WooCommerce Payments\",\"branding_html\":\"Powered by\u00a0\\u003Cimg style=\\\"height: 15px;width: 45px;margin-bottom: -2px\\\" src=\\\"https://jackkeller.com/wp-content/plugins/woocommerce/assets/images/address-autocomplete/google.svg\\\" alt=\\\"Google logo\\\" /\\u003E\"}]"}; 337//# sourceURL=wc-address-autocomplete-common-js-extra 338</script>
vendor: 1 bytes, line 338
338
339<script type="text/rocketlazyloadscript" data-wp-strategy="defer" defer id="wc-address-autocomplete-common-js" data-rocket-src="https://jackkeller.com/wp-content/plugins/woocommerce/assets/js/frontend/utils/address-autocomplete-common.min.js?ver=11.1.1"></script>
vendor: 1 bytes, line 339
339
340<script type="text/rocketlazyloadscript" data-wp-strategy="defer" defer id="wc-dompurify-js" data-rocket-src="https://jackkeller.com/wp-content/plugins/woocommerce/assets/js/dompurify/purify.min.js?ver=11.1.1"></script>
vendor: 1 bytes, line 340
340
341<script type="text/rocketlazyloadscript" data-wp-strategy="defer" defer id="wc-address-autocomplete-js" data-rocket-src="https://jackkeller.com/wp-content/plugins/woocommerce/assets/js/frontend/address-autocomplete.min.js?ver=11.1.1"></script>
vendor: 1 bytes, line 341
341
342<script type="text/rocketlazyloadscript" data-wp-strategy="defer" id="wc-js-cookie-js" data-rocket-src="https://jackkeller.com/wp-content/plugins/woocommerce/assets/js/js-cookie/js.cookie.min.js?ver=2.1.4-wc.11.1.1" data-rocket-defer defer></script>
vendor: 1 bytes, line 342
342
343<script type="text/rocketlazyloadscript" data-wp-strategy="defer" id="wc-jquery-cookie-js" data-rocket-src="https://jackkeller.com/wp-content/plugins/woocommerce/assets/js/jquery-cookie/jquery.cookie.min.js?ver=1.4.1-wc.11.1.1" data-rocket-defer defer></script>
vendor: 1 bytes, line 343
343
344<script id="jquery-cookie-js-extra" type="968bfde1705c18b9099319f7-text/javascript">window.addEventListener('DOMContentLoaded', function() { 345var affwp_scripts = {"ajaxurl":"https://jackkeller.com/wp-admin/admin-ajax.php"}; 346//# sourceURL=jquery-cookie-js-extra 347});</script>
vendor: 1 bytes, line 347
347
348<script id="affwp-tracking-js-extra" type="968bfde1705c18b9099319f7-text/javascript"> 349var affwp_debug_vars = {"integrations":{"paypal":"PayPal Buttons","woocommerce":"WooCommerce"},"version":"2.36.3","currency":"USD","ref_cookie":"affwp_ref","visit_cookie":"affwp_ref_visit_id","campaign_cookie":"affwp_campaign"}; 350//# sourceURL=affwp-tracking-js-extra 351</script>
vendor: 1 bytes, line 351
351
352<script type="text/rocketlazyloadscript" id="affwp-tracking-js" data-rocket-src="https://jackkeller.com/wp-content/plugins/affiliate-wp/assets/js/tracking.min.js?ver=2.36.3" data-rocket-defer defer></script>
vendor: 1 bytes, line 352
352
353<script id="WCPAY_ASSETS-js-extra" type="968bfde1705c18b9099319f7-text/javascript"> 354var wcpayAssets = {"url":"https://jackkeller.com/wp-content/plugins/woocommerce-payments/dist/"}; 355//# sourceURL=WCPAY_ASSETS-js-extra 356</script>
vendor: 1 bytes, line 356
356
357<script data-wp-strategy="defer" defer id="woocommerce-analytics-js" src="https://stats.wp.com/s-202641.js" type="968bfde1705c18b9099319f7-text/javascript"></script>
vendor: 1 bytes, line 357
357
358<script type="text/rocketlazyloadscript" data-minify="1" id="front-block-script-js" data-rocket-src="https://jackkeller.com/wp-content/cache/min/1/wp-content/plugins/addify-tipping-at-cart-checkout/assets/js/afwtd-block-script.js?ver=1789818262" data-rocket-defer defer></script>
358 359 360<!-- Google tag (gtag.js) snippet added by Site Kit --> 361<!-- Google Analytics snippet added by Site Kit -->
vendor: 125 bytes, lines 361-362
361 362<script type="text/rocketlazyloadscript" id="google_gtagjs-js" data-rocket-src="https://www.googletagmanager.com/gtag/js?id=
362G-7LKY7WJ6X8
vendor: 18 bytes, line 362
362" async></script>
363<script type="text/rocketlazyloadscript" id="google_gtagjs-js-after"> 364window.dataLayer = window.dataLayer || [];function gtag(){dataLayer.push(arguments);} 365gtag("set","linker",{"domains":["jackkeller.com"]}); 366gtag("js", new Date()); 367gtag("set", "developer_id.dZTNiMT", true); 368gtag("config", "G-7LKY7WJ6X8", {"googlesitekit_post_type":"page"}); 369 window._googlesitekit = window._googlesitekit || {}; window._googlesitekit.throttledEvents = []; window._googlesitekit.gtagEvent = (name, data) => { var key = JSON.stringify( { name, data } ); if ( !! window._googlesitekit.throttledEvents[ key ] ) { return; } window._googlesitekit.throttledEvents[ key ] = true; setTimeout( () => { delete window._googlesitekit.throttledEvents[ key ]; }, 5 ); gtag( "event", name, { ...data, event_source: "site-kit" } ); }; 370//# sourceURL=google_gtagjs-js-after 371</script>
371 372<link rel="https://api.w.org/" href="https://jackkeller.com/wp-json/" /><link rel="alternate" title="JSON" type="application/json" href="https://jackkeller.com/wp-json/wp/v2/pages/646" /><link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://jackkeller.com/xmlrpc.php?rsd" /> 373 374<link rel='shortlink' href='https://jackkeller.com/?p=646' /> 375<style type="text/css"></style> 376 <meta name="generator" content="Site Kit by Google 1.187.0" />
376<script type="text/rocketlazyloadscript" id='pixel-script-poptin' data-rocket-src='https://cdn.popt.in/pixel.js?id=b57cf64a7f0a1' async='true'></script>
376 <!-- Enter your scripts here -->
376<script type="text/rocketlazyloadscript" data-rocket-type="text/javascript"> 377 var AFFWP = AFFWP || {}; 378 AFFWP.referral_var = 'ref'; 379 AFFWP.expiration = 88; 380 AFFWP.debug = 0; 381 382 AFFWP.cookie_domain = 'jackkeller.com'; 383 384 AFFWP.referral_credit_last = 0; 385 </script>
385 386 <style></style> 387 <style></style> <style></style> 388 <noscript><style>.woocommerce-product-gallery{ opacity: 1 !important; }</style></noscript> 389 <style></style> 390
390<script type="text/rocketlazyloadscript" data-minify="1" async data-rocket-src="https://jackkeller.com/wp-content/cache/min/1/insights/v1/paypal-insights.sandbox.min.js?ver=1789818263"></script>
390<style id="custom-background-css"></style> 391 392<!-- Google Tag Manager snippet added by Site Kit -->
393<script type="text/rocketlazyloadscript">
vendor: 420 bytes, lines 393-402
393 394 ( function( w, d, s, l, i ) { 395 w[l] = w[l] || []; 396 w[l].push( {'gtm.start': new Date().getTime(), event: 'gtm.js'} ); 397 var f = d.getElementsByTagName( s )[0], 398 j = d.createElement( s ), dl = l != 'dataLayer' ? '&l=' + l : ''; 399 j.async = true; 400 j.src = 'https://www.googletagmanager.com/gtm.js?id=' + i + dl; 401 f.parentNode.insertBefore( j, f ); 402 } )( window, document, 'script', 'dataLayer', '
402GTM-MKRT2Z3
vendor: 9 bytes, lines 402-403
402' ); 403
404</script>
404 405 406<!-- End Google Tag Manager snippet added by Site Kit --> 407<style></style><link rel="icon" href="https://jackkeller.com/wp-content/uploads/2015/08/cropped-favicon-32x32.jpg" sizes="32x32" /> 408<link rel="icon" href="https://jackkeller.com/wp-content/uploads/2015/08/cropped-favicon-192x192.jpg" sizes="192x192" /> 409<link rel="apple-touch-icon" href="https://jackkeller.com/wp-content/uploads/2015/08/cropped-favicon-180x180.jpg" /> 410<meta name="msapplication-TileImage" content="https://jackkeller.com/wp-content/uploads/2015/08/cropped-favicon-270x270.jpg" /> 411<style id="sccss"></style><noscript><style id="rocket-lazyload-nojs-css">.rll-youtube-player, [data-lazy-src]{display:none !important;}</style></noscript> 412 413 414 415<style id="rocket-lazyrender-inline-css">[data-wpr-lazyrender] {content-visibility: auto;}</style><meta name="generator" content="WP Rocket 3.23.3.3" data-wpr-features="wpr_remove_unused_css wpr_delay_js wpr_defer_js wpr_minify_js wpr_lazyload_images wpr_lazyload_iframes wpr_preconnect_external_domains wpr_automatic_lazy_rendering wpr_oci wpr_image_dimensions wpr_minify_css wpr_cdn wpr_preload_links wpr_desktop" />
415<script data-cfasync="false" nonce="a3b199d9-7255-40aa-8ebb-d1031bc23603">try{(function(w,d){!function(kP,kQ,kR,kS){if(kP.zaraz)console.error("zaraz is loaded twice");else{kP[kR]=kP[kR]||{};kP[kR].executed=[];kP.zaraz={deferred:[],listeners:[]};kP.zaraz._v="20";kP.zaraz._n="a3b199d9-7255-40aa-8ebb-d1031bc23603";kP.zaraz.q=[];kP.zaraz._f=function(kT){return async function(){var kU=Array.prototype.slice.call(arguments);kP.zaraz.q.push({m:kT,a:kU})}};for(const kV of["track","set","debug"])kP.zaraz[kV]=kP.zaraz._f(kV);kP.zaraz.init=()=>{var kW=kQ.getElementsByTagName(kS)[0],kX=kQ.createElement(kS),kY=kQ.getElementsByTagName("title")[0];kY&&(kP[kR].t=kQ.getElementsByTagName("title")[0].text);kP[kR].x=Math.random();kP[kR].w=kP.screen.width;kP[kR].h=kP.screen.height;kP[kR].j=kP.innerHeight;kP[kR].e=kP.innerWidth;kP[kR].l=kP.location.href;kP[kR].r=kQ.referrer;kP[kR].k=kP.screen.colorDepth;kP[kR].n=kQ.characterSet;kP[kR].o=(new Date).getTimezoneOffset();if(kP.dataLayer)for(const kZ of Object.entries(Object.entries(dataLayer).reduce((k$,la)=>({...k$[1],...la[1]}),{})))zaraz.set(kZ[0],kZ[1],{scope:"page"});kP[kR].q=[];for(;kP.zaraz.q.length;){const lb=kP.zaraz.q.shift();kP[kR].q.push(lb)}kX.defer=!0;for(const lc of[localStorage,sessionStorage])Object.keys(lc||{}).filter(le=>le.startsWith("_zaraz_")).forEach(ld=>{try{kP[kR]["z_"+ld.slice(7)]=JSON.parse(lc.getItem(ld))}catch{kP[kR]["z_"+ld.slice(7)]=lc.getItem(ld)}});kX.referrerPolicy="origin";kX.src="/cdn-cgi/zaraz/s.js?z="+btoa(encodeURIComponent(JSON.stringify(kP[kR])));kW.parentNode.insertBefore(kX,kW)};["complete","interactive"].includes(kQ.readyState)?zaraz.init():kP.addEventListener("DOMContentLoaded",zaraz.init)}}(w,d,"zarazData","script");window.zaraz._p=async kH=>new Promise(kI=>{if(kH){kH.e&&kH.e.forEach(kJ=>{try{const kK=d.querySelector("script[nonce]"),kL=kK?.nonce||kK?.getAttribute("nonce"),kM=d.createElement("script");kL&&(kM.nonce=kL);kM.innerHTML=kJ;kM.onload=()=>{d.head.removeChild(kM)};d.head.appendChild(kM)}catch(kN){console.error(`Error executing script: ${kJ}\n`,kN)}});Promise.allSettled((kH.f||[]).map(kO=>fetch(kO[0],kO[1])))}kI()});zaraz._p({"e":["(function(w,d){})(window,document)"]});})(window,document)}catch(e){throw fetch("/cdn-cgi/zaraz/t"),e;};</script>
415</head> 416 417 <body class="wp-singular page-template-default page page-id-646 custom-background wp-custom-logo wp-theme-zerif-pro theme-zerif-pro woocommerce-no-js prad-page" itemscope="itemscope" itemtype="http://schema.org/WebPage"> 418 <a class="skip-link screen-text-reader" href="#content">Skip to content</a> 419 420 421 422 423 424 <header id="home" class="header" itemscope="itemscope" itemtype="http://schema.org/WPHeader"> 425 426 427 <div id="main-nav" class="navbar navbar-inverse bs-docs-nav"> 428 429 <div class="container"> 430 431 <div class="navbar-header responsive-logo"> 432 433 <button class="navbar-toggle collapsed" type="button" data-toggle="collapse" 434 data-target=".bs-navbar-collapse"> 435 436 <span class="screen-reader-text">Menu</span> 437 438 <span class="icon-bar"></span> 439 440 <span class="icon-bar"></span> 441 442 <span class="icon-bar"></span> 443 444 </button> 445 446 447 <div class="navbar-brand"> 448 449 450 <a href="https://jackkeller.com/"> 451 452 <img fetchpriority="high" width="150" height="113" src="https://jackkeller.com/wp-content/uploads/2025/12/cropped-JKI-no-addr-1975.jpg" alt="List on MLS & REALTOR.com+ from $75."> 453 </a> 454 455 456 </div> <!-- /.navbar-brand --> 457 458 </div> <!-- /.navbar-header --> 459 460 <div class='primary-menu'> 461 <nav aria-label='Primary Menu '> 462 <h3 class="screen-reader-text">Primary Menu</h3> 463 <div class="menu-menu-1-container"><ul id="menu-menu-1" class="menu"><li id="menu-item-33" class="menu-item menu-item-type-custom menu-item-object-custom current-menu-ancestor current-menu-parent menu-item-has-children menu-item-33"><a href="#"><i class="_mi _before genericon genericon-help" aria-hidden="true" style="font-size:1.6em;"></i><span>Help</span></a> 464<ul class="sub-menu"> 465 <li id="menu-item-39" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-39"><a href="https://jackkeller.freshdesk.com/support/solutions/folders/6000034451"><i class="_mi _before dashicons dashicons-admin-tools" aria-hidden="true"></i><span>Getting Started</span></a></li> 466 <li id="menu-item-38" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-38"><a href="https://jackkeller.tawk.help/"><i class="_mi _before dashicons dashicons-edit" aria-hidden="true"></i><span>Changes</span></a></li> 467 <li id="menu-item-34" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-34"><a href="https://jackkeller.tawk.help/"><i class="_mi _before genericon genericon-help" aria-hidden="true"></i><span>Support</span></a> 468 <ul class="sub-menu"> 469 <li id="menu-item-35" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-35"><a href="https://jackkeller.tawk.help/"><i class="_mi _before dashicons dashicons-tickets-alt" aria-hidden="true"></i><span>New Support Ticket</span></a></li> 470 <li id="menu-item-36" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-36"><a href="https://jackkeller.tawk.help/"><i class="_mi _before dashicons dashicons-update" aria-hidden="true"></i><span>Check Ticket Status</span></a></li> 471 <li id="menu-item-2858" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-2858"><a href="https://jackkeller.com/return-cancellation-refund-policy/"><i class="_mi _before elusive el-icon-return-key" aria-hidden="true"></i><span>Return/Cancellation/Refund policy</span></a></li> 472 </ul> 473</li> 474 <li id="menu-item-591" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-591"><a href="https://jackkeller.tawk.help/"><i class="_mi _before fa fa-camera" aria-hidden="true"></i><span>Photos</span></a></li> 475 <li id="menu-item-651" class="menu-item menu-item-type-post_type menu-item-object-page current-menu-item page_item page-item-646 current_page_item menu-item-651"><a href="https://jackkeller.com/tax-record-search/" aria-current="page"><i class="_mi _before dashicons dashicons-search" aria-hidden="true"></i><span>Tax Record Search</span></a></li> 476 <li id="menu-item-5872" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-5872"><a href="https://jackkeller.com/shop-selling-supplies/"><i class="_mi _before elusive el-icon-shopping-cart-sign" aria-hidden="true"></i><span>Shop Selling Supplies</span></a></li> 477</ul> 478</li> 479<li id="menu-item-76" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-76"><a href="#"><i class="_mi _before fa fa-database" aria-hidden="true"></i><span>Services</span></a> 480<ul class="sub-menu"> 481 <li id="menu-item-44" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children menu-item-44"><a href="https://jackkeller.com/list-now/"><i class="_mi _before elusive el-icon-hourglass" aria-hidden="true"></i><span>List Now!!</span></a> 482 <ul class="sub-menu"> 483 <li id="menu-item-576" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-home menu-item-576"><a href="https://jackkeller.com/#pricingtable"><i class="_mi _before foundation-icons fi-pricetag-multiple" aria-hidden="true"></i><span>Pricing and Packages</span></a></li> 484 </ul> 485</li> 486 <li id="menu-item-5561" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-5561"><a href="https://jackkeller.com/upgrades/"><i class="_mi _before dashicons dashicons-upload" aria-hidden="true"></i><span>Upgrades</span></a> 487 <ul class="sub-menu"> 488 <li id="menu-item-670" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-670"><a href="https://jackkeller.com/realtor-com-upgrade/"><i class="_mi _before dashicons dashicons-upload" aria-hidden="true"></i><span>REALTOR.com Upgrade</span></a></li> 489 <li id="menu-item-406" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-406"><a href="https://jackkeller.com/showingtime-2/"><i class="_mi _before dashicons dashicons-clock" aria-hidden="true"></i><span>ShowingTime</span></a></li> 490 <li id="menu-item-5534" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-5534"><a href="https://jackkeller.com/listtrac-reports-upgrade/"><i class="_mi _before elusive el-icon-adjust-alt" aria-hidden="true"></i><span>ListTrac Reports</span></a></li> 491 <li id="menu-item-451" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-451"><a href="https://jackkeller.freshdesk.com/support/solutions/folders/6000210355"><i class="_mi _before dashicons dashicons-images-alt2" aria-hidden="true"></i><span>Add Pics</span></a></li> 492 <li id="menu-item-449" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-449"><a href="https://jackkeller.com/open-houses/"><i class="_mi _before dashicons dashicons-admin-home" aria-hidden="true"></i><span>Open Houses</span></a></li> 493 <li id="menu-item-567" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-567"><a href="https://jackkeller.com/expert-seller-package-3/"><i class="_mi _before dashicons dashicons-awards" aria-hidden="true"></i><span>EXPERT Seller Package</span></a></li> 494 </ul> 495</li> 496 <li id="menu-item-2707" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-2707"><a href="https://jackkeller.com/shop-selling-supplies/"><i class="_mi _before elusive el-icon-shopping-cart-sign" aria-hidden="true"></i><span>Shop Selling Supplies</span></a></li> 497 <li id="menu-item-21382" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-21382"><a href="https://jackkeller.com/feature-requests/"><i class="_mi _before foundation-icons fi-megaphone" aria-hidden="true"></i><span>Feature Requests</span></a></li> 498 <li id="menu-item-21214" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children menu-item-21214"><a href="https://jackkeller.com/affiliate-area/"><i class="_mi _before foundation-icons fi-universal-access" aria-hidden="true"></i><span>Affiliate Area</span></a> 499 <ul class="sub-menu"> 500 <li id="menu-item-21215" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-21215"><a href="https://jackkeller.com/affiliate-terms-of-use/"><i class="_mi _before dashicons dashicons-admin-customizer" aria-hidden="true"></i><span>Affiliate Terms of Use</span></a></li> 501 </ul> 502</li> 503 <li id="menu-item-87" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-87"><a href="#">———————</a></li>
504 <li id="menu-item-88" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-88"><a href="https://jackkellerinc.managebuilding.com/Resident/PublicPages/CustomPage.aspx?cp=21"><i class="_mi _before dashicons dashicons-admin-multisite" aria-hidden="true"></i><span>Property Management</span></a></li> 505 <li id="menu-item-86" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-86"><a href="http://www.wheelchairaccessiblehomes.com"><i class="_mi _before fab fa-accessible-icon" aria-hidden="true"></i><span>ADA / Wheelchair Accessible Homes</span></a></li> 506</ul> 507</li> 508<li id="menu-item-41" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-41"><a href="#"><i class="_mi _before fa fa-info-circle" aria-hidden="true" style="font-size:1.4em;"></i><span>More Details</span></a> 509<ul class="sub-menu"> 510 <li id="menu-item-2857" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children menu-item-2857"><a href="https://jackkeller.com/more-details-3-2/"><i class="_mi _before dashicons dashicons-welcome-learn-more" aria-hidden="true"></i><span>Learn More</span></a> 511 <ul class="sub-menu"> 512 <li id="menu-item-575" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-home menu-item-575"><a href="https://jackkeller.com/#pricingtable"><i class="_mi _before dashicons dashicons-feedback" aria-hidden="true"></i><span>Packages</span></a></li> 513 </ul> 514</li> 515 <li id="menu-item-21" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-21"><a href="https://jackkeller.com/how/"><i class="_mi _before genericon genericon-show" aria-hidden="true"></i><span>How?</span></a></li> 516 <li id="menu-item-32" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-32"><a href="https://jackkeller.tawk.help/"><i class="_mi _before fa fa-question" aria-hidden="true"></i><span>FAQ’s</span></a></li> 517 <li id="menu-item-37" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-37"><a href="https://jackkeller.tawk.help/"><i class="_mi _before fa fa-list-ol" aria-hidden="true"></i><span>Tips</span></a></li> 518 <li id="menu-item-535" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-535"><a href="https://jackkeller.com/links/"><i class="_mi _before dashicons dashicons-format-links" aria-hidden="true"></i><span>Links</span></a></li> 519 <li id="menu-item-664" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-664"><a href="https://jackkeller.com/areas-served-list-on-mls-realtor-com/"><i class="_mi _before dashicons dashicons-location-alt" aria-hidden="true"></i><span>Areas Served</span></a></li> 520 <li id="menu-item-686" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-home menu-item-has-children menu-item-686"><a href="https://jackkeller.com/#testimonials"><i class="_mi _before dashicons dashicons-thumbs-up" aria-hidden="true"></i><span>Testimonials</span></a> 521 <ul class="sub-menu"> 522 <li id="menu-item-895" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-895"><a href="https://www.surveymonkey.com/results/SM-JLWWGLJG/"><i class="_mi _before dashicons dashicons-testimonial" aria-hidden="true"></i><span>More Testimonials</span></a></li> 523 </ul> 524</li> 525 <li id="menu-item-687" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-home menu-item-687"><a href="https://jackkeller.com/#team"><i class="_mi _before foundation-icons fi-torsos-female-male" aria-hidden="true"></i><span>About Us</span></a></li> 526 <li id="menu-item-5873" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-5873"><a href="https://jackkeller.com/shop-selling-supplies/"><i class="_mi _before elusive el-icon-shopping-cart-sign" aria-hidden="true"></i><span>Shop Selling Supplies</span></a></li> 527 <li id="menu-item-960" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-has-children menu-item-960"><a href="https://jackkeller.com/category/real-estate-news/"><i class="_mi _before far fa-newspaper" aria-hidden="true"></i><span>Real Estate News</span></a> 528 <ul class="sub-menu"> 529 <li id="menu-item-961" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-961"><a href="https://jackkeller.com/category/real-estate-news/miami-metro/">Miami-Dade Metro</a></li> 530 <li id="menu-item-962" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-962"><a href="https://jackkeller.com/category/real-estate-news/orlando-metro/">Orlando Metro</a></li> 531 <li id="menu-item-963" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-963"><a href="https://jackkeller.com/category/real-estate-news/palm-beach-metro/">Palm Beach Metro</a></li> 532 <li id="menu-item-964" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-964"><a href="https://jackkeller.com/category/real-estate-news/tampa-bay-metro/">Tampa Bay Metro</a></li> 533 </ul> 534</li> 535</ul> 536</li> 537<li id="menu-item-23144" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children menu-item-23144"><a href="https://jackkeller.com/pay-now/"><i class="_mi _before foundation-icons fi-dollar" aria-hidden="true"></i><span>Pay</span></a> 538<ul class="sub-menu"> 539 <li id="menu-item-105" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-105"><a href="https://jackkeller.com/pay-now-3/"><i class="_mi _before foundation-icons fi-dollar-bill" aria-hidden="true"></i><span>Alt Pay</span></a></li> 540 <li id="menu-item-23145" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-23145"><a href="https://jackkeller.com/pay-now-3/"><i class="_mi _before foundation-icons fi-dollar" aria-hidden="true"></i><span>Pay Now</span></a></li> 541</ul> 542</li> 543<li id="menu-item-566" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children menu-item-566"><a href="https://jackkeller.com/contact-us/"><i class="_mi _before dashicons dashicons-phone" aria-hidden="true"></i><span>Contact Us</span></a> 544<ul class="sub-menu"> 545 <li id="menu-item-16383" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-16383"><a href="https://jackkeller.com/contact-us-2/"><i class="_mi _before dashicons dashicons-admin-users" aria-hidden="true"></i><span>Contact Us</span></a></li> 546 <li id="menu-item-2470" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2470"><a href="tel:+1-727-586-1497"><i class="_mi _before genericon genericon-send-to-tablet" aria-hidden="true"></i><span>Call</span></a></li> 547 <li id="menu-item-21386" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-21386"><a href="https://jackkeller.com/live-chat/"><i class="_mi _before dashicons dashicons-format-chat" aria-hidden="true"></i><span>Live Chat</span></a></li> 548 <li id="menu-item-2472" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2472"><a href="https://jackkeller.tawk.help/"><i class="_mi _before fas fa-ticket-alt" aria-hidden="true"></i><span>Submit Support Ticket</span></a></li> 549</ul> 550</li> 551<li id="menu-item-23141" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children menu-item-23141"><a href="https://jackkeller.com/cart-2/"><i class="_mi _before foundation-icons fi-shopping-cart" aria-hidden="true"></i><span>
551Cart</span></a> 552<ul class="sub-menu"> 553 <li id="menu-item-23148" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children menu-item-23148"><a href="https://jackkeller.com/my-account/">My account</a> 554 <ul class="sub-menu"> 555 <li id="menu-item-23146" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-23146"><a href="https://jackkeller.com/affiliate-area/">Affiliate Area</a></li> 556 </ul> 557</li> 558 <li id="menu-item-23147" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-23147"><a href="https://jackkeller.com/checkout/">Checkout</a></li> 559</ul> 560</li> 561</ul></div> </nav> 562 </div> 563 564 </div> 565 566 </div> 567 <!-- / END TOP BAR --> 568 569<div class="clear"></div> 570 571</header> <!-- / END HOME SECTION --> 572<div id="content" class="site-content"> 573 <div class="container"> 574 <div class="content-left-wrap col-md-9"> <div id="primary" class="content-area"> 575 <main itemscope itemtype="http://schema.org/WebPageElement" itemprop="mainContentOfPage" id="main" class="site-main"> 576 577<article id="post-646" class="post-646 page type-page status-publish hentry"> 578 579 <header class="entry-header"> 580 581 <span class="date updated published">December 11, 2015</span> 582 <span class="vcard author byline"><a href="https://jackkeller.com/author/admin/" class="fn">jackkellerinc</a></span> 583 <h1 class="entry-title" itemprop="headline">Tax Record Search</h1> </header><!-- .entry-header --> 584 585 <div class="entry-content" itemprop="text"> 586 587 <p style="text-align: center;"><b><span style="color: #000099; font-size: large;">Where can I find the Public Record information for my property?<br /> 588</span></b><br /> 589<span style="color: #666666;"><strong>Click on the county below to go directly to it’s website</strong>:</span></p> 590<p style="text-align: center;" align="center"><a href="https://qpublic.schneidercorp.com/Application.aspx?AppID=1081&LayerID=26490&PageTypeID=2&PageID=10768&KeyValue=02241-000-000" target="_blank" rel="noopener">Alachua</a> – (352) 374-5230</p> 591<p style="text-align: center;" align="center"><a href="http://www.bakerpa.com/search.html" target="_blank" rel="noopener noreferrer">Baker</a> – (904) 259-3191</p> 592<p style="text-align: center;" align="center"><a href="http://bradfordappraiser.com/GISv1/" target="_blank" rel="noopener noreferrer">Bradford</a> – (904) 966-6216</p> 593<p style="text-align: center;" align="center"><a href="http://www.bcpa.net/search.asp?page=search" target="_blank" rel="noopener noreferrer">Broward</a> – (954) 357-6830</p> 594<p style="text-align: center;"><a href="https://www.ccappraiser.com/RPSearchEnter.asp?" target="_blank" rel="noopener noreferrer">Charlotte</a> – (941) 743-1498</p> 595<p style="text-align: center;"><a href="https://qpublic.schneidercorp.com/Application.aspx?AppID=830&LayerID=15008&PageTypeID=2&PageID=6754" target="_blank" rel="noopener noreferrer">Clay</a> – (352) 473-3711</p> 596<p style="text-align: center;"><a href="https://www.collierappraiser.com/" target="_blank" rel="noopener noreferrer">Collier – </a>(239) 252-8141</p> 597<p style="text-align: center;"><a href="https://www8.miamidade.gov/Apps/PA/propertysearch/#/" target="_blank" rel="noopener noreferrer">Dade (Miami)</a> – (305) 375-4099</p> 598<p style="text-align: center;"><a href="http://www.desotopa.com/GIS/Search_F.asp" target="_blank" rel="noopener noreferrer">Desoto</a> – (863) 993-4866</p> 599<p style="text-align: center;"><a href="https://paopropertysearch.coj.net/Tangible/Search.aspx" target="_blank" rel="noopener noreferrer">Duval</a> – <span class="style1">(904) 630-2489</span></p> 600<p style="text-align: center;"><a href="https://www.hernandopa-fl.us/Propertysearch/" target="_blank" rel="noopener">Hernando</a> – <span style="font-family: Arial;">(352) 754-4190</span></p> 601<p style="text-align: center;"><a href="http://gis.hcpafl.org/PropertySearch/#/nav/Basic%20Search" target="_blank" rel="noopener noreferrer">Hillsborough</a> – (813) 272-6100</p> 602<p style="text-align: center;"><a href="http://www.lakecopropappr.com/property-disclaimer.aspx?to=%2fproperty-search.aspx?" target="_blank" rel="noopener noreferrer">Lake</a> – (352) 343-9748</p> 603<p style="text-align: center;"><a href="https://leepa.org/Search/PropertySearch.aspx" target="_blank" rel="noopener noreferrer">Lee –</a> (888) 721-0510</p> 604<p style="text-align: center;"><a href="https://www.manateepao.com/search/" target="_blank" rel="noopener noreferrer">Manatee</a> – (941) 748-8208</p> 605<p style="text-align: center;"><a href="https://www.pa.marion.fl.us/PropertySearch.aspx" target="_blank" rel="noopener noreferrer">Marion</a> – <span class="_Xbe _ZWk kno-fv">(352) 368-8300</span></p> 606<p style="text-align: center;"><a href="https://www.pa.martin.fl.us/-code/property-search/" target="_blank" rel="noopener noreferrer">Martin</a> – (772) 288-5608</p> 607<p style="text-align: center;"><a href="https://maps.nassauflpa.com/NassauSearch/IS_SearchResults2015/ShowIS_NewSearchResults2015Table.aspx" target="_blank" rel="noopener noreferrer">Nassau</a> – <span class="_Xbe _ZWk kno-fv">(352) 368-8300</span></p> 608<p style="text-align: center;"><a href="http://www.okeechobeepa.com/gis/" target="_blank" rel="noopener noreferrer">Okeechobee </a>– (863) 763-4422</p> 609<p style="text-align: center;"><a href="http://www.ocpafl.org/searches/ParcelSearch.aspx" target="_blank" rel="noopener noreferrer">Orange</a> – (407) 836-5046</p> 610<p style="text-align: center;"><a href="http://ira.property-appraiser.org/" target="_blank" rel="noopener noreferrer">Osceola</a> – (407) 343-3500</p> 611<p style="text-align: center;"><a href="http://www.co.palm-beach.fl.us/papa/" target="_blank" rel="noopener noreferrer">Palm Beach</a> – (561) 355-2358</p> 612<p style="text-align: center;"><a href="http://search.pascopa.com/" target="_blank" rel="noopener noreferrer">Pasco</a> – (813) 929-1280</p> 613<p style="text-align: center;"><a href="http://www.pcpao.org/" target="_blank" rel="noopener noreferrer">Pinellas</a> – (727) 464-3207</p> 614<p style="text-align: center;"><a href="http://www.polkpa.org/CamaDisplay.aspx" target="_blank" rel="noopener noreferrer">Polk</a> – (863) 534-4777</p> 615<p style="text-align: center;"><a href="https://apps.putnam-fl.com/pa/property/" target="_blank" rel="noopener">Putnam</a> – (386) 329-0286</p> 616<p style="text-align: center;"><a href="https://www.sc-pa.com/propertysearch" target="_blank" rel="noopener noreferrer">Sarasota</a> – (941) 861-8200</p> 617<p style="text-align: center;"><a href="http://www.scpafl.org" target="_blank" rel="noopener noreferrer">Seminole</a> – (407) 665-7555</p> 618<p style="text-align: center;"><a href="https://qpublic.schneidercorp.com/Application.aspx?App=StJohnsCountyFL&Layer=Parcels&PageType=Search" target="_blank" rel="noopener noreferrer">St. Johns</a> – (904) 827-5500</p> 619<p style="text-align: center;"><a href="https://www.paslc.org/mobile-property-search/home" target="_blank" rel="noopener noreferrer">St. Lucie</a> – (772) 462-1000</p> 620<p style="text-align: center;">
620<a href="http://www.sumterpa.com/GIS/Search_F.asp" target="_blank" rel="noopener noreferrer">Sumter</a> – (352) 793-0210</p> 621<div align="center"> 622<p style="text-align: center;" align="left"><a href="https://vcpa.vcgov.org/searches.html" target="_blank" rel="noopener noreferrer">Volusia</a> – (386) 736-5901</p> 623</div> 624 625 626 </div><!-- .entry-content --> 627 628 629</article><!-- #post-## --> 630 </main><!-- #main --> 631 </div><!-- #primary --> 632 </div> <div class="sidebar-wrap col-md-3 content-left-wrap pull-right"> 633 634<div id="secondary" class="widget-area" role="complementary" itemscope="itemscope" itemtype="http://schema.org/WPSideBar"> 635 636 637 <aside id="search-2" class="widget widget_search"><form role="search" method="get" class="search-form" action="https://jackkeller.com/"> 638 <label> 639 <span class="screen-reader-text">Search for:</span> 640 <input type="search" class="search-field" placeholder="Search …" value="" name="s" /> 641 </label> 642 <input type="submit" class="search-submit" value="Search" /> 643 </form></aside><aside id="text-2" class="widget widget_text"><h2 class="widget-title">Home Improvement</h2> <div class="textwidget"><p><a target="_blank" href="https://www.amazon.com/promocode/AWO63DPKQ1I57?linkCode=pf4&linkId=z7b5638deb81af5805803e8dc94cfdez&_encoding=UTF-8&ref_=assoc_tag_ph_1524315487264&tag=wwwjackkell06-20&creative=9325&camp=1789">Save 50.0% on select products from APSPOW with promo code CHXMG62X, through 6/8 while supplies last.</a></p> 644</div> 645 </aside> 646 <aside id="recent-posts-2" class="widget widget_recent_entries"> 647 <h2 class="widget-title">Recent News</h2> 648 <ul> 649 <li> 650 <a href="https://jackkeller.com/condo-prices-stall-across-the-us-not-just-in-florida-analysis-shows/">Condo prices stall across the US — not just in Florida — analysis shows</a> 651 <span class="post-date">October 6, 2026</span> 652 </li> 653 <li> 654 <a href="https://jackkeller.com/floridas-affordability-advantage-is-gone-inside-the-sharp-drop-in-east-coast-migration-to-miami/">Florida’s Affordability Advantage Is Gone: Inside the Sharp Drop in East Coast Migration to Miami</a> 655 <span class="post-date">October 6, 2026</span> 656 </li> 657 <li> 658 <a href="https://jackkeller.com/freddie-mac-reshuffles-risk-leadership-as-hinduja-exits-glessner-steps-in/">Freddie Mac reshuffles risk leadership as Hinduja exits, Glessner steps in</a> 659 <span class="post-date">October 5, 2026</span> 660 </li> 661 <li> 662 <a href="https://jackkeller.com/lawmakers-float-a-housing-2-0-push-to-build-faster-and-cheaper/">Lawmakers float a housing 2.0 push to build faster and cheaper</a> 663 <span class="post-date">October 5, 2026</span> 664 </li> 665 <li> 666 <a href="https://jackkeller.com/aging-owners-could-free-up-13-9m-homes-by-2036/">Aging owners could free up 13.9M homes by 2036</a> 667 <span class="post-date">October 5, 2026</span> 668 </li> 669 </ul> 670 671 </aside><aside id="categories-2" class="widget widget_categories"><h2 class="widget-title">News Categories</h2><form action="https://jackkeller.com" method="get"><label class="screen-reader-text" for="cat">News Categories</label><select name='cat' id='cat' class='postform'> 672 <option value='-1'>Select Category</option> 673 <option class="level-0" value="4">Real Estate News (122)</option> 674 <option class="level-0" value="1">Uncategorized (3)</option> 675</select> 676</form>
676<script type="text/rocketlazyloadscript"> 677( ( dropdownId ) => { 678 const dropdown = document.getElementById( dropdownId ); 679 function onSelectChange() { 680 setTimeout( () => { 681 if ( 'escape' === dropdown.dataset.lastkey ) { 682 return; 683 } 684 if ( dropdown.value && parseInt( dropdown.value ) > 0 && dropdown instanceof HTMLSelectElement ) { 685 dropdown.parentElement.submit(); 686 } 687 }, 250 ); 688 } 689 function onKeyUp( event ) { 690 if ( 'Escape' === event.key ) { 691 dropdown.dataset.lastkey = 'escape'; 692 } else { 693 delete dropdown.dataset.lastkey; 694 } 695 } 696 function onClick() { 697 delete dropdown.dataset.lastkey; 698 } 699 dropdown.addEventListener( 'keyup', onKeyUp ); 700 dropdown.addEventListener( 'click', onClick ); 701 dropdown.addEventListener( 'change', onSelectChange ); 702})( "cat" ); 703 704//# sourceURL=WP_Widget_Categories%3A%3Awidget 705</script>
705 706</aside><aside id="archives-2" class="widget widget_archive"><h2 class="widget-title">News Archives</h2> <label class="screen-reader-text" for="archives-dropdown-2">News Archives</label> 707 <select id="archives-dropdown-2" name="archive-dropdown"> 708 709 <option value="">Select Month</option> 710 <option value='https://jackkeller.com/2026/10/'> October 2026 (16)</option> 711 <option value='https://jackkeller.com/2026/09/'> September 2026 (106)</option> 712 <option value='https://jackkeller.com/2025/12/'> December 2025 (3)</option> 713 714 </select> 715 716
716<script type="text/rocketlazyloadscript"> 717( ( dropdownId ) => { 718 const dropdown = document.getElementById( dropdownId ); 719 function onSelectChange() { 720 setTimeout( () => { 721 if ( 'escape' === dropdown.dataset.lastkey ) { 722 return; 723 } 724 if ( dropdown.value ) { 725 document.location.href = dropdown.value; 726 } 727 }, 250 ); 728 } 729 function onKeyUp( event ) { 730 if ( 'Escape' === event.key ) { 731 dropdown.dataset.lastkey = 'escape'; 732 } else { 733 delete dropdown.dataset.lastkey; 734 } 735 } 736 function onClick() { 737 delete dropdown.dataset.lastkey; 738 } 739 dropdown.addEventListener( 'keyup', onKeyUp ); 740 dropdown.addEventListener( 'click', onClick ); 741 dropdown.addEventListener( 'change', onSelectChange ); 742})( "archives-dropdown-2" ); 743 744//# sourceURL=WP_Widget_Archives%3A%3Awidget 745</script>
745 746</aside> 747</div><!-- #secondary --> 748 749 </div><!-- .sidebar-wrap --> 750 </div><!-- .container --> 751</div><!-- .site-content --> 752 753 754 <footer id="footer" itemscope="itemscope" itemtype="http://schema.org/WPFooter"> 755 756 <div class="footer-widget-wrap"><div class="container"><div class="footer-widget col-xs-12 col-sm-4"><aside id="text-5" class="widget footer-widget-footer widget_text"> <div class="textwidget"><p>* = contact us for details</p> 757<p>** = or the max # allowed by MLS</p> 758</div> 759 </aside></div><div class="footer-widget col-xs-12 col-sm-4"><aside id="block-14" class="widget footer-widget-footer widget_block"><div id="JFWebsiteWidget-019fac7a4ca0700088f20971d58ccfb80b1b"></div>
760<script type="text/rocketlazyloadscript" data-rocket-src="https://www.jotform.com/website-widgets/embed/019fac7a4ca0700088f20971d58ccfb80b1b" data-rocket-defer defer></script>
760</aside></div></div></div> 761 <div class="container"> 762 763 764 765 <div class="footer-box-wrap"> 766 <div class="col-md-3 footer-box four-cell company-details"><div class="icon-top red-text"><a target="_blank" href="https://www.google.com.sg/maps/place/Jack%20Keller%20Inc.%2C%20REALTORS%0A2440%20West%20Bay%20Dr.Largo%2C%20FL%2033770-1933"><img width="30" height="27" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2030%2027'%3E%3C/svg%3E" alt="kissclipart trucker hat mockup clipart baseball cap mockup de6aed396c5cc905 e1573193547373" data-lazy-src="https://jackkeller.com/wp-content/uploads/2019/11/kissclipart-trucker-hat-mockup-clipart-baseball-cap-mockup-de6aed396c5cc905-e1573193547373.png" /><noscript><img width="30" height="27" src="https://jackkeller.com/wp-content/uploads/2019/11/kissclipart-trucker-hat-mockup-clipart-baseball-cap-mockup-de6aed396c5cc905-e1573193547373.png" alt="kissclipart trucker hat mockup clipart baseball cap mockup de6aed396c5cc905 e1573193547373" /></noscript></a></div><div class="zerif-footer-address">Jack Keller Inc., REALTORS<br /> 7672440 West Bay Dr.<br />Largo, FL 33770-1933</div></div><div class="col-md-3 footer-box four-cell company-details"><div class="icon-top green-text"><a href=""><img src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%200%200'%3E%3C/svg%3E" alt="" data-lazy-src="https://jackkeller.com/wordpress/wp-content/uploads/2016/03/credit-cards-paypal-1-e1458409434415.png" /><noscript><img src="https://jackkeller.com/wordpress/wp-content/uploads/2016/03/credit-cards-paypal-1-e1458409434415.png" alt="" /></noscript></a></div><div class="zerif-footer-email"><div></div> 768 769www.Support.JackKeller.com</div></div><div class="col-md-3 footer-box four-cell company-details"><div class="icon-top blue-text"><a href="tel:Main:727-586-1497TollFree:(888)374-7692"><img width="30" height="30" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2030%2030'%3E%3C/svg%3E" alt="" data-lazy-src="https://jackkeller.com/wp-content/themes/zerif-pro/images/telephone65-blue.png" /><noscript><img width="30" height="30" src="https://jackkeller.com/wp-content/themes/zerif-pro/images/telephone65-blue.png" alt="" /></noscript></a></div><div class="zerif-footer-phone"><a href="tel:+1-727-586-1497"> 770Main: 727-586-1497<br />Toll Free: (888) 374-7692</a></div></div> <div class="col-md-3 footer-box four-cell copyright"> 771 <ul class="social"> 772 <li 773 id="footer_facebook"> 774 <a title="Facebook link" href="https://www.facebook.com/pages/Flat-Fee-MLS-Listings/1624103311168131"> 775 <span class="screen-reader-text">Facebook link</span> <i class="fa fa-facebook"></i> 776 </a> 777 </li> 778 <li 779 id="footer_google"> 780 <a title="Google Plus link" href="https://plus.google.com/u/0/102391989704606890001/posts"> 781 <span class="screen-reader-text">Google Plus link</span> <i class="fa fa-google"></i> 782 </a> 783 </li> 784 <li 785 id="footer_youtube"> 786 <a title="Youtube link" href="https://www.youtube.com/channel/UCzzUGvyWs-qTEJRQHPTYfig"> 787 <span class="screen-reader-text">Youtube link</span> <i class="fa fa-youtube"></i> 788 </a> 789 </li> 790 </ul> 791 <p id="zerif-copyright"> 792 ©1975-2026, Jack Keller Inc. <br />FL RE Brokerage, Lic# CQ182464. <div></div> </p> 793 </div> 794 </div> 795 796 </div> <!-- / END CONTAINER --> 797 798 </footer> <!-- / END FOOOTER --> 799 800
801<script type="speculationrules"> 802{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":["/wp-*.php","/wp-admin/*","/wp-content/uploads/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/zerif-pro/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]} 803</script>
803 804 <ul class="obfx-sharing 805 obfx-sharing-left obfx-sharing-bottom "> 806 <li class=""> 807 <a class="facebook" 808 aria-label="Facebook" 809 href="https://www.facebook.com/sharer.php?u=https://jackkeller.com/tax-record-search/"> 810 811 <svg viewbox="38.658 12.828 207.085 207.085"><path d="m158.232 219.912v-94.461h31.707l4.747-36.813h-36.454v-23.504c0-10.658 2.96-17.922 18.245-17.922l19.494-.009v-32.925c-3.373-.447-14.944-1.449-28.406-1.449-28.106 0-47.348 17.155-47.348 48.661v27.149h-31.789v36.813h31.788v94.461z" /></svg><span>Facebook</span> </a> 812 </li> 813 <li class=""> 814 <a class="twitter" 815 aria-label="X" 816 href="https://twitter.com/intent/tweet?url=https://jackkeller.com/tax-record-search/&text=Tax%20Record%20Search&hashtags="> 817 818 <svg viewbox="0 0 512 512"><path d="m389.2 48h70.6l-154.2 176.2 181.4 239.8h-142l-111.3-145.4-127.2 145.4h-70.7l164.9-188.5-173.9-227.5h145.6l100.5 132.9zm-24.8 373.8h39.1l-252.4-333.8h-42z" /></svg><span>X</span> </a> 819 </li> 820 <li class=""> 821 <a class="linkedin" 822 aria-label="LinkedIn" 823 href="https://www.linkedin.com/shareArticle?url=https://jackkeller.com/tax-record-search/&title=Tax%20Record%20Search"> 824 825 <svg viewbox="0 0 27 26"><path d="m26.325 25.325c-1.575-.0375-3.1125-.0375-4.6875 0-.3375 0-.4125-.075-.4125-.4125 0-2.775 0-5.5875 0-8.3625 0-.6375-.0375-1.275-.225-1.875-.5625-1.95-2.8125-2.6625-4.425-1.35-.8625.675-1.2 1.6125-1.2 2.7375v7.875c0 .3375-.0375.675 0 1.05.0375.3-.1125.375-.375.3375-1.6125 0-3.1875 0-4.8 0-.29999 0-.37499-.075-.37499-.375.0375-2.3625.0375-4.725.0375-7.125 0-2.925 0-5.85-.0375-8.73748 0-.3375.075-.4125.37499-.4125h4.8c.3 0 .375.075.375.375v1.91248c.1125-.1125.15-.15.1875-.1875 1.4625-2.13748 3.525-2.73748 5.9625-2.36248 2.8125.45 4.6125 2.39998 5.0625 5.39998.1125.7125.15 1.425.15 2.1375v8.9625c0 .3-.075.4125-.4125.4125z" /><path d="m6.825 17v7.875c0 .3375-.075.45-.4125.45-1.575-.0375-3.15 0-4.725 0-.3 0-.375-.075-.375-.375 0-5.2875 0-10.6125 0-15.89995 0-.2625.075-.375.375-.375h4.8375c.3375 0 .375.1125.375.4125-.075 2.62495-.075 5.24995-.075 7.91245z" /><path d="m7.08751 4.32502c-.375 1.5-1.9125 2.3625-3.675 2.0625-1.875-.3-2.925003-2.1375-2.25-3.9375.45-1.125 1.5375-1.8 2.925-1.7625 2.1-.0375 3.4875 1.65 3 3.6375z" /></svg><span>LinkedIn</span> </a> 826 </li> 827 <li class="obfx-hide-mobile-socials "> 828 <a class="reddit" 829 aria-label="Reddit" 830 href="https://reddit.com/submit?url=https://jackkeller.com/tax-record-search/&title=Tax%20Record%20Search"> 831 832 <svg viewbox="0 0 32 29"><path clip-rule="evenodd" d="m31.3757 13.1169c.388.5536.6076 1.2076.6323 1.8831.0103.6613-.1669 1.312-.5109 1.8769-.344.5648-.8408
8321.0208-1.4331 1.3151.027.3515.027.7046 0 1.056 0 5.376-6.264 9.744-13.992 9.744-7.72798 0-13.99198-4.368-13.99198-9.744-.02702-.3514-.02702-.7045 0-1.056-.46162-.212-.8716-.522-1.201535-.9082-.329935-.3863-.571932-.8397-.709221-1.3288-.1372892-.4891-.16658691-1.0022-.0858627-1.5038.0807237-.5015.2695397-.9795.5533617-1.4009.283821-.4213.655857-.7759 1.090337-1.0391.43448-.2633.921-.4289 1.42585-.4854.50485-.0566 1.01595-.0026 1.4979.158.48194.1606.92319.4241 1.29317.7722 2.76545-1.8755 6.01888-2.90159 9.35998-2.95196l1.776-8.328c.02-.09641.0588-.1879.1144-.269174s.1267-.150712.2093-.204289c.0826-.053578.175-.090228.2719-.107828.0969-.017601.1963-.0158.2924.005296l5.88 1.175995c.2872-.49334.7408-.868191 1.2794-1.057248.5386-.189058 1.127-.179945 1.6595.025701s.9742.594357 1.246 1.096367c.2717.502.3556 1.08443.2366 1.64272-.1189.5583-.433 1.0559-.8858 1.4035s-1.0147.52242-1.5848.49309c-.57-.02933-1.111-.26089-1.5257-.65312-.4148-.39223-.6761-.91945-.7372-1.487l-5.136-1.08-1.56 7.48799c3.3005.0708 6.5098 1.09616 9.24 2.95196.4877-.4681 1.1004-.7851 1.7643-.9128.6638-.1277 1.3504-.0607 1.977.193.6266.2536 1.1664.6832 1.5544 1.2367zm-9.8444 6.68c1.3246 0 2.3984-1.0738 2.3984-2.3984s-1.0738-2.3984-2.3984-2.3984c-1.3247 0-2.3985 1.0738-2.3985 2.3984s1.0738 2.3984 2.3985 2.3984zm-8.7188-2.3984c0 1.3246-1.0738 2.3984-2.3984 2.3984-1.32464 0-2.39846-1.0738-2.39846-2.3984s1.07382-2.3984 2.39846-2.3984c1.3246 0 2.3984 1.0738 2.3984 2.3984zm3.2112 7.1728-.0119.0001-.0118-.0001v.0001c-1.7106.0104-2.9755-.3728-3.8034-.7483-.417-.1891-.7248-.377-.9237-.5134-.0993-.0681-.1714-.1233-.2161-.1592-.0224-.0179-.0379-.031-.0466-.0385l-.007-.0061c-.0002-.0002-.0005-.0004-.0007-.0006-.2644-.2407-.6739-.2227-.9161.0409-.24293.2643-.22556.6755.0388.9184l.001.0009.0012.0011.0029.0027.0079.0071.024.021c.0197.0169.0467.0396.0811.0671.0687.0551.1668.1298.2944.2174.2553.175.6291.4017 1.122.6252.9835.446 2.4348.8765 4.3521.8643 1.9174.0122 3.3687-.4183 4.3521-.8643.493-.2235.8668-.4502 1.122-.6252.1277-.0876.2258-.1623.2945-.2174.0344-.0275.0614-.0502.081-.0671l.0241-.021.0079-.0071.0029-.0027.0012-.0011.001-.0009c.2643-.2429.2817-.6541.0388-.9184-.2422-.2636-.6517-.2816-.9161-.0409l-.0007.0006-.007.0061c-.0087.0075-.0242.0206-.0466.0385-.0447.0359-.1168.0911-.2162.1592-.1988.1364-.5066.3243-.9237.5134-.8278.3755-2.0927.7587-3.8033.7483z" fill-rule="evenodd" /></svg><span>Reddit</span> </a> 833 </li> 834 <li class="obfx-hide-mobile-socials "> 835 <a class="whatsapp" 836 aria-label="WhatsApp" 837 href="whatsapp://send?text=https://jackkeller.com/tax-record-search/"> 838 839 <svg viewbox="0 0 29 29"><path d="m24.7507 4.21149c-2.573-2.64865-6.1297-4.08649-9.7622-4.08649-7.71889 0-13.9243 6.28108-13.84862 13.9243 0 2.4216.68108 4.7676 1.81621 6.8865l-1.967565 7.1892 7.340545-1.8919c2.04323 1.1351 4.31353 1.6649 6.58373 1.6649 7.6433 0 13.8487-6.2811 13.8487-13.9244 0-3.7081-1.4378-7.18914-4.0108-9.76211zm-9.7622 21.34051c-2.0432 0-4.0865-.5297-5.827-1.5892l-.45406-.227-4.38918 1.1351 1.13513-4.3135-.3027-.454c-3.32973-5.373-1.74054-12.48651 3.70811-15.81624 5.4486-3.329728 12.4865-1.74054 15.8162 3.70811 3.3297 5.44863 1.7406 12.48653-3.7081 15.81623-1.7405 1.1351-3.8595 1.7405-5.9784 1.7405zm6.6595-8.4-.8324-.3784s-1.2109-.5297-1.9676-.9081c-.0757 0-.1514-.0756-.227-.0756-.2271 0-.3784.0756-.5298.1513 0 0-.0756.0757-1.1351 1.2865-.0757.1514-.227.227-.3784.227h-.0757c-.0756 0-.227-.0756-.3027-.1513l-.3783-.1514c-.8325-.3784-1.5892-.8324-2.1946-1.4378-.1514-.1514-.3784-.3027-.5298-.4541-.5297-.5297-1.0594-1.1351-1.4378-1.8162l-.0757-.1513c-.0757-.0757-.0757-.1514-.1513-.3027 0-.1514 0-.3027.0756-.3784 0 0 .3027-.3784.5298-.6054.1513-.1514.227-.3784.3784-.5297.1513-.2271.227-.5298.1513-.7568-.0757-.3784-.9838-2.42163-1.2108-2.87568-.1514-.22703-.3027-.3027-.5297-.37838h-.2271c-.1513 0-.3783 0-.60537 0-.15135 0-.3027.07568-.45405.07568l-.07568.07567c-.15135.07568-.3027.22703-.45405.30271-.15135.15135-.22703.3027-.37838.45405-.52973.68108-.83243 1.51351-.83243 2.34595 0 .6054.15135 1.2108.37837 1.7405l.07568.2271c.68108 1.4378 1.58919 2.7243 2.80001 3.8594l.3027.3027c.227.2271.454.3784.6054.6054 1.5892 1.3622 3.4054 2.346 5.4486 2.8757.2271.0757.5298.0757.7568.1514h.7568c.3783 0 .8324-.1514 1.1351-.3027.227-.1514.3784-.1514.5297-.3027l.1514-.1514c.1513-.1514.3027-.227.454-.3784.1514-.1513.3027-.3027.3784-.454.1514-.3027.227-.6811.3027-1.0595 0-.1513 0-.3784 0-.5297 0 0-.0757-.0757-.227-.1514z" /></svg><span>WhatsApp</span> </a> 840 </li> 841 <li class="">
842 <a class="mail" aria-label="Email" href="/cdn-cgi/l/email-protection#407f66637073787b3335222a2523347d1421386572701225232f322465727013252132232866637073787b222f24397d28343430337a6f6f2a21232b2b252c2c25326e232f2d6f3421386d3225232f32246d3325213223286f"> 843 844 <svg viewbox="0 0 512 384"><path d="m48 0c-26.5 0-48 21.5-48 48 0 15.1 7.1 29.3 19.2 38.4l208 156c17.1 12.8 40.5 12.8 57.6 0l208-156c12.1-9.1 19.2-23.3 19.2-38.4 0-26.5-21.5-48-48-48zm-48 132v188c0 35.3 28.7 64 64 64h384c35.3 0 64-28.7 64-64v-188l-198.4 148.8c-34.1 25.6-81.1 25.6-115.2 0z" /></svg><span>Email</span> </a> 845 </li> 846 <li class=""> 847 <a class="sms" 848 aria-label="SMS" 849 href="sms://?&body=Tax%20Record%20Search%20-%20https://jackkeller.com/tax-record-search/"> 850 851 <svg viewbox="0 0 24 24"><path d="M7.9 20A9 9 0 1 0 4 16.1L2 22Z" /></svg><span>SMS</span> </a> 852 </li> 853 <li class="obfx-hide-mobile-socials "> 854 <a class="baidu" 855 aria-label="Baidu" 856 href="http://cang.baidu.com/do/add?it=Tax%20Record%20Search&iu=https://jackkeller.com/tax-record-search/"> 857 858 <svg viewbox="0 0 24 24"><path d="m9.154 0c-1.444 0-2.614 1.658-2.614 3.707 0 2.051 1.171 3.71 2.615 3.71 1.446 0 2.614-1.659 2.614-3.71-.001-2.049-1.169-3.707-2.615-3.707zm7.025.594c-1.319-.014-2.832 1.995-2.979 3.333-.187 1.745.25 3.487 2.179 3.735 1.933.25 3.175-1.806 3.422-3.364.252-1.555-.995-3.364-2.362-3.674a1.218 1.218 0 0 0 -.261-.03zm-12.597 4.941a2.811 2.811 0 0 0 -.156.008c-2.118.19-2.428 3.24-2.428 3.24-.287 1.41.686 4.425 3.297 3.864 2.617-.561 2.262-3.68 2.183-4.362-.125-1.018-1.292-2.773-2.896-2.75zm16.534 1.753c-2.308 0-2.617 2.119-2.617 3.616 0 1.43.121 3.425 2.988 3.362s2.553-3.238 2.553-3.988c0-.745-.62-2.99-2.924-2.99zm-8.264 2.478c-1.424.014-2.708.925-3.323 1.947-1.118 1.868-2.863 3.05-3.112 3.363-.25.309-3.61 2.116-2.864 5.42.746 3.301 3.365 3.237 3.365 3.237s1.93.19 4.171-.31c2.24-.495 4.17.123 4.17.123s5.233 1.748 6.665-1.616c1.43-3.364-.808-5.109-.808-5.109s-2.99-2.306-4.736-4.798c-1.072-1.665-2.348-2.268-3.528-2.257zm-2.234 3.84 1.542.024v8.197h-3.402c-1.47-.291-2.055-1.292-2.13-1.462-.072-.173-.488-.976-.268-2.343.635-2.049 2.447-2.196 2.447-2.196h1.81zm3.964 2.39v3.881c.096.413.612.488.612.488h1.614v-4.343h1.689v5.782h-3.915c-1.517-.39-1.59-1.465-1.59-1.465v-4.317zm-5.458 1.147c-.66.197-.978.708-1.05.928-.076.22-.247.78-.1 1.269.294 1.095 1.248 1.144 1.248 1.144h1.37v-3.34z" /></svg><span>Baidu</span> </a> 859 </li> 860 <li class="obfx-hide-mobile-socials "> 861 <a class="weibo" 862 aria-label="Weibo" 863 href="http://service.weibo.com/share/share.php?url=https://jackkeller.com/tax-record-search/&appkey=&title=Tax%20Record%20Search&pic=&ralateUid="> 864 865 <svg viewbox="0 0 24 24"><path d="m10.098 20.323c-3.977.391-7.414-1.406-7.672-4.02-.259-2.609 2.759-5.047 6.74-5.441 3.979-.394 7.413 1.404 7.671 4.018.259 2.6-2.759 5.049-6.737 5.439zm-1.048-3.104c-.384.616-1.208.884-1.829.602-.612-.279-.793-.991-.406-1.593.379-.595 1.176-.861 1.793-.601.622.263.82.972.442 1.592zm1.27-1.627c-.141.237-.449.353-.689.253-.236-.09-.313-.361-.177-.586.138-.227.436-.346.672-.24.239.09.315.36.18.601zm.176-2.719c-1.893-.493-4.033.45-4.857 2.118-.836 1.704-.026 3.591 1.886 4.21 1.983.64 4.318-.341 5.132-2.179.8-1.793-.201-3.642-2.161-4.149zm7.563-1.224c-.346-.105-.57-.18-.405-.615.375-.977.42-1.804 0-2.404-.781-1.112-2.915-1.053-5.364-.03 0 0-.766.331-.571-.271.376-1.217.315-2.224-.27-2.809-1.338-1.337-4.869.045-7.888 3.08-2.252 2.27-3.561 4.673-3.561 6.748 0 3.981 5.099 6.395 10.086 6.395 6.536 0 10.888-3.801 10.888-6.82 0-1.822-1.547-2.854-2.915-3.284zm1.908-5.092c-.766-.856-1.908-1.187-2.96-.962-.436.09-.706.511-.616.932.09.42.511.691.932.602.511-.105 1.067.044 1.442.465.376.421.466.977.316 1.473-.136.406.089.856.51.992.405.119.857-.105.992-.512.33-1.021.12-2.178-.646-3.035zm2.418-2.195c-1.576-1.757-3.905-2.419-6.054-1.968-.496.104-.812.587-.706 1.081.104.496.586.813 1.082.707 1.532-.331 3.185.15 4.296 1.383 1.112 1.246 1.429 2.943.947 4.416-.165.48.106 1.007.586 1.157.479.165.991-.104 1.157-.586.675-2.088.241-4.478-1.338-6.235z" /></svg><span>Weibo</span> </a> 866 </li> 867 </ul> 868 <!-- Enter your scripts here -->
vendor: 116 bytes, line 868
868 <script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script>
868<script type="text/rocketlazyloadscript" data-rocket-type="text/javascript"> 869 (function() { 870 var sa = document.createElement('script'); sa.type = 'text/javascript'; sa.async = true; 871 sa.src = ('https:' == document.location.protocol ? 'https://' : 'http://') + 'cdn.ywxi.net/js/1.js'; 872 var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(sa, s); 873 })(); 874 </script>
874 875
875<script type="text/rocketlazyloadscript"> 876 (function(e){ 877 var el = document.createElement('script'); 878 el.setAttribute('data-account', 'TLbgQ1o271'); 879 el.setAttribute('src', 'https://cdn.userway.org/widget.js'); 880 document.body.appendChild(el); 881 })(); 882 </script>
882 883
883<script type="text/rocketlazyloadscript" data-rocket-type="text/javascript">window.addEventListener('DOMContentLoaded', function() { 884 jQuery(document).ready(function($) { 885 886 $('form').on('submit', function(e) { 887 888 // Use attr() to grab the action since the attribute is likely set in the DOM regardless. 889 var action = $(this).attr( 'action' ); 890 891 // Bail if there's no action attribute on the form tag. 892 if ( 'undefined' === typeof action ) { 893 return; 894 } 895 896 paypalMatch = new RegExp( 'paypal\.com\/(cgi-bin\/webscr|donate)' ); 897 898 if ( ! action.match( paypalMatch ) ) { 899 return; 900 } 901 902 e.preventDefault(); 903 904 var $form = $(this); 905 var ipn_url = "https://jackkeller.com/index.php?affwp-listener=paypal"; 906 907 $.ajax({ 908 type: "POST", 909 data: { 910 action: 'affwp_maybe_insert_paypal_referral' 911 }, 912 url: 'https://jackkeller.com/wp-admin/admin-ajax.php', 913 success: function (response) { 914 915 $form.append( '<input type="hidden" name="custom" value="' + response.data.ref + '"/>' ); 916 $form.append( '<input type="hidden" name="notify_url" value="' + ipn_url + '"/>' ); 917 918 $form.get(0).submit(); 919 920 } 921 922 }).fail(function (response) { 923 924 if ( window.console && window.console.log ) { 925 console.log( response ); 926 } 927 928 }); 929 930 }); 931 }); 932 });</script>
932 933 <template id="affwp-notification"> 934 <style></style> 935 936 <!-- #notification --> 937 <div id="notification" aria-live="assertive" class="mt pointer-events-none fixed inset-0 flex items-end px-4 py-6 sm:items-start sm:p-6"> 938 939 <!-- Container 1 --> 940 <div class="flex w-full flex-col items-center space-y-4 sm:items-end"> 941 <div class="pointer-events-auto w-full max-w-sm overflow-hidden rounded-lg bg-white dark:bg-slate-800 shadow-lg ring-1 ring-black/5"><!-- Container 2 --> 942 943 <!-- Container 3 --> 944 <div class="p-4"> 945 946 <!-- items-start --> 947 <div class="flex items-start"> 948 949 <!-- ✔︎ Icon --> 950 <div class="flex-shrink-0"> 951 <svg class="h-6 w-6 text-green-500" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" aria-hidden="true"> 952 <path stroke-linecap="round" stroke-linejoin="round" d="M9 12.75L11.25 15 15 9.75M21 12a9 9 0 11-18 0 9 9 0 0118 0z" /> 953 </svg> 954 </div> 955 956 <!-- Text --> 957 <div class="ml-3 w-0 flex-1 pt-0.5"> 958 <p class="text-sm font-medium text-gray-900 dark:text-white">Discount Applied Successfully!</p> 959 <p class="mt-1 text-sm text-gray-500 dark:text-slate-400">Your savings have been added to the cart.</p> 960 </div> 961 962 <!-- × Icon --> 963 <div class="ml-4 flex flex-shrink-0"> 964 <button id="close-notification" type="button" class="inline-flex rounded-md bg-white dark:bg-slate-800 text-gray-400 dark:text-slate-300 hover:text-gray-500 dark:hover:text-slate-400 focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2"> 965 <span class="sr-only">Close</span> 966 <svg class="h-5 w-5" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true"> 967 <path d="M6.28 5.22a.75.75 0 00-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 101.06 1.06L10 11.06l3.72 3.72a.75.75 0 101.06-1.06L11.06 10l3.72-3.72a.75.75 0 00-1.06-1.06L10 8.94 6.28 5.22z" /> 968 </svg> 969 </button> 970 </div> 971 972 </div> <!-- items-start --> 973 </div> <!-- Container 3 --> 974 </div> <!-- Container 2 --> 975 </div> <!-- Container 1 --> 976 </div><!-- #notification --> 977 978</template> 979 <!-- Google Tag Manager (noscript) snippet added by Site Kit -->
vendor: 74 bytes, lines 979-981
979 980 <noscript> 981 <iframe src="https://www.googletagmanager.com/ns.html?id=
981GTM-MKRT2Z3
vendor: 88 bytes, lines 981-983
981" height="0" width="0" style="display:none;visibility:hidden"></iframe> 982 </noscript> 983
983<!-- End Google Tag Manager (noscript) snippet added by Site Kit --> 984 985<!-- Sign in with Google button added by Site Kit --> 986 <style></style> 987
987<script type="text/rocketlazyloadscript" data-rocket-src="https://accounts.google.com/gsi/client" data-rocket-defer defer></script>
vendor: 1 bytes, line 987
987
988<script type="text/rocketlazyloadscript" data-siwg-config="{"clientID":"424145606693-28jpv669p9cvhc4uck64if0p71m6obm5.apps.googleusercontent.com","defaultButtonOptions":{"theme":"outline","text":"signin_with","shape":"rectangular"},"loginURI":"https:\/\/jackkeller.com\/wordpressiwantin\/?action=googlesitekit_auth","isUserLoggedIn":false,"isWPLogin":false,"isPreview":false,"isWooCommerce":true,"isExistingUserFlow":false,"connectNonce":"","followsPostRedirect":false,"redirectTo":"","redirectCookieName":"googlesitekit_auth_redirect_to","redirectCookiePath":"\/","redirectCookieTTL":0,"shouldShowOneTapPrompt":true}" data-rocket-src="https://jackkeller.com/wp-content/plugins/google-site-kit/dist/assets/js/sign-in-with-google-15a07dd57b5f79886b45.js" data-rocket-defer defer></script>
988 989 990<!-- End Sign in with Google button added by Site Kit --> 991 <template id="rewards-panel"> 992 <div 993 x-cloak 994 x-data="rewardsPanelWidget({ 995 isFriendClaimMode: false, 996 initialPanel: '', 997 globalTier: 'lite', 998 launcherDisplayMode: 'icon_with_text', 999 launcherText: 'Rewards', 1000 originalLauncherText: 'Rewards', 1001 friendClaimLauncherText: 'Claim gift', 1002 friendClaimedLauncherText: 'Your gift', 1003 pointsEnabled: true, 1004 referralsEnabled: true, 1005 friendsReferred: 0, 1006 referralTotal: 0, 1007 isAdminPreview: false, 1008 isDemo: false, 1009 currencySingular: 'Point', 1010 currencyPlural: 'Points', 1011 currencySymbol: '$', 1012 currencyPosition: 'before', 1013 currencySpace: false, 1014 yourLabel: 'Your', 1015 welcomeGreeting: 'Welcome to', 1016 programName: 'List on MLS from $75 Rewards Program', 1017 memberId: 0, 1018 userPoints: 0, 1019 userName: '', 1020 userEmail: '', 1021 referralLink: '', 1022 showWelcomeFlow: false, 1023 isConfirmationPage: false, 1024 isGuestMember: false, 1025 availableRewards: [], 1026 availableRewardsCount: 0, 1027 sharePointsNonce: 'e9babc5c4b', 1028 advocateNonce: 'e9babc5c4b', 1029 claimNonce: 'f68cf984f4', 1030 ajaxUrl: 'https://jackkeller.com/wp-admin/admin-ajax.php?rewardswp_locale=site', 1031 welcomeBannerData: { 1032 memberName: '', 1033 signupPoints: 0, 1034 }, 1035 sharing: { 1036 x: true, 1037 facebook: true, 1038 email: true }, 1039 friendClaimData: { 1040 referralCode: '', 1041 advocateName: '', 1042 rewardInfo: [], 1043 }, 1044 mockMemberData: null, 1045 advocateReward: {"type":"fixed_discount","auto_disabled":false,"reward_expiration":"+1 year","reward_amount":5,"minimum_order_amount":375,"products_included":[],"redemption_limit":"1","formatted_amount":"$5 off coupon"}, 1046 friendReward: {"type":"fixed_discount","auto_disabled":false,"reward_expiration":"+3 months","reward_amount":10,"minimum_order_amount":375,"products_included":[],"redemption_limit":"1","formatted_amount":"$10 off coupon"}, 1047 rewardIconMap: {"points":"\u003Csvg class=\"size-8\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewbox=\"0 0 24 24\"\u003E\u003Cdesc\u003EPoints reward icon\u003C\/desc\u003E\u003Cdefs\u003E\u003C\/defs\u003Erating-star-square\u003Cpath d=\"m12.681 6.593 1.6 3.157h2.746a0.748 0.748 0 0 1 0.525 1.28l-2.505 2.47 1.39 3.191a0.753 0.753 0 0 1 -1.059 0.957L12 15.748l-3.378 1.9a0.753 0.753 0 0 1 -1.059 -0.957l1.39 -3.191 -2.5 -2.459a0.753 0.753 0 0 1 0.528 -1.29h2.734l1.6 -3.157a0.763 0.763 0 0 1 1.366 -0.001Z\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"\u003E\u003C\/path\u003E\u003Cpath d=\"M3.75 0.75h16.5s3 0 3 3v16.5s0 3 -3 3H3.75s-3 0 -3 -3V3.75s0 -3 3 -3\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"\u003E\u003C\/path\u003E\u003C\/svg\u003E","percentage_discount":"\u003Csvg class=\"size-8\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewbox=\"0 0 24 24\"\u003E\n\t\t\t\u003Cdesc\u003E\n\t\t\t\tPercentage discount icon\n\t\t\t\u003C\/desc\u003E\n\t\t\t\u003Cg\u003E\n\t\t\t\t\u003Cpath d=\"M23.25 15v3.5a1.5 1.5 0 0 1 -1.5 1.5H2.25a1.5 1.5 0 0 1 -1.5 -1.5V15a3 3 0 0 0 0 -6V5.5A1.5 1.5 0 0 1 2.25 4h19.5a1.5 1.5 0 0 1 1.5 1.5V9a3 3 0 0 0 0 6Z\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"\u003E\u003C\/path\u003E\n\t\t\t\t\u003Cpath d=\"M7.25 9a1.5 1.5 0 1 0 3 0 1.5 1.5 0 1 0 -3 0\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"\u003E\u003C\/path\u003E\n\t\t\t\t\u003Cpath d=\"M14.5 15a1.5 1.5 0 1 0 3 0 1.5 1.5 0 1 0 -3 0\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"\u003E\u003C\/path\u003E\n\t\t\t\t\u003Cpath d=\"m15.75 8.25 -7.5 7.5\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"\u003E\u003C\/path\u003E\n\t\t\t\u003C\/g\u003E\n\t\t\t\u003C\/svg\u003E","fixed_discount":"\u003Csvg class=\"size-8\" viewbox=\"0 0 24 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003E\n\t\t\t\u003Cdesc\u003E\n\t\t\t\tFixed amount discount icon\n\t\t\t\u003C\/desc\u003E\n\t\t\t\u003Cpath d=\"M19.575 8.25a3.755 3.755 0 0 1 3.049 -2.95 0.749 0.749 0 0 0 0.626 -0.738V2.25a1.5 1.5 0 0 0 -1.5 -1.5H2.25a1.5 1.5 0 0 0 -1.5 1.5v2.314a0.747 0.747 0 0 0 0.626 0.738 3.751 3.751 0 0 1 0 7.4 0.75 0.75 0 0 0 -0.626 0.739v2.309a1.5 1.5 0 0 0 1.5 1.5h6\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"\u003E\u003C\/path\u003E\n\t\t\t\u003Cpath d=\"m8.25 14.25 0 -1.5\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"\u003E\u003C\/path\u003E\n\t\t\t\u003Cpath d=\"m8.25 9.75 0 -1.5\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"\u003E\u003C\/path\u003E\n\t\t\t\u003Cpath d=\"m8.25 5.25 0 -1.5\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"\u003E\u003C\/path\u003E\n\t\t\t\u003Cpath d=\"M18.75 14.25h-2.033a1.342 1.342 0 0 0 -0.5 2.588l2.064 0.825a1.342 1.342 0 0 1 -0.5 2.587H15.75\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"\u003E\u003C\/path\u003E\n\t\t\t\u003Cpath d=\"m17.25 14.25 0 -0.75\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"\u003E\u003C\/path\u003E\n\t\t\t\u003Cpath d=\"m17.25 21 0 -0.75\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"\u003E\u003C\/path\u003E\n\t\t\t\u003Cpath d=\"M11.25 17.25a6 6 0 1 0 12 0 6 6 0 1 0 -12 0Z\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"\u003E\u003C\/path\u003E\n\t\t\t\u003C\/svg\u003E","free_shipping":"\u003Csvg class=\"size-8\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" fill=\"none\" viewbox=\"0 0 24 24\"\u003E\u003Cdesc\u003EDelivery truck icon\u003C\/desc\u003E\u003Cpath stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-miterlimit=\"10\" d=\"M10.25 6h5.5c0.8 0 1.5 0.7 1.5 1.5v7.2\" stroke-width=\"1.5\"\u003E\u003C\/path\u003E\u003Cpath stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-miterlimit=\"10\" d=\"M9.25 17h-5\" stroke-width=\"1.5\"\u003E\u003C\/path\u003E\u003Cpath stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-miterlimit=\"10\" d=\"M17.25 7.5h3c1.7 0 3 1.3 3 3v5c0 0.8 -0.7 1.5 -1.5 1.5h-2.2\" stroke-width=\"1.5\"\u003E\u003C\/path\u003E\u003Cpath stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-miterlimit=\"10\" d=\"
1047M17.65 18.4999c1.0493 0 1.9 -0.8506 1.9 -1.9 0 -1.0493 -0.8507 -1.8999 -1.9 -1.8999s-1.9 0.8506 -1.9 1.8999c0 1.0494 0.8507 1.9 1.9 1.9Z\" stroke-width=\"1.5\"\u003E\u003C\/path\u003E\u003Cpath stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-miterlimit=\"10\" d=\"M11.15 18.4999c1.0493 0 1.9 -0.8506 1.9 -1.9 0 -1.0493 -0.8507 -1.8999 -1.9 -1.8999s-1.9 0.8506 -1.9 1.8999c0 1.0494 0.8507 1.9 1.9 1.9Z\" stroke-width=\"1.5\"\u003E\u003C\/path\u003E\u003Cpath stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-miterlimit=\"10\" d=\"M15.75 17h-2.5\" stroke-width=\"1.5\"\u003E\u003C\/path\u003E\u003Cpath stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-miterlimit=\"10\" d=\"M23.25 10.5h-3\" stroke-width=\"1.5\"\u003E\u003C\/path\u003E\u003Cpath stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-miterlimit=\"10\" d=\"M7.25 5.5h-2\" stroke-width=\"1.5\"\u003E\u003C\/path\u003E\u003Cpath stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-miterlimit=\"10\" d=\"M7.25 9.5h-4\" stroke-width=\"1.5\"\u003E\u003C\/path\u003E\u003Cpath stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-miterlimit=\"10\" d=\"M6.75 13.5h-6\" stroke-width=\"1.5\"\u003E\u003C\/path\u003E\u003C\/svg\u003E","free_product":"\u003Csvg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"size-8\" viewbox=\"0 0 24 24\"\u003E\u003Cdesc\u003EFree product icon\u003C\/desc\u003E\u003Cg\u003E\u003Cg\u003E\u003Cpath d=\"M15.75 23.24a3 3 0 0 0 -3 -3H9a3 3 0 0 0 -3 -3H0.75v6Z\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"\u003E\u003C\/path\u003E\u003Cpath d=\"m6 20.24 3 0\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"\u003E\u003C\/path\u003E\u003C\/g\u003E\u003Cpath d=\"M16.5 17.74H21a0.76 0.76 0 0 0 0.75 -0.75v-6.75\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"\u003E\u003C\/path\u003E\u003Cpath d=\"m8.25 10.24 0 4\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"\u003E\u003C\/path\u003E\u003Cpath d=\"M7.5 5.99h15s0.75 0 0.75 0.75v2.75s0 0.75 -0.75 0.75h-15s-0.75 0 -0.75 -0.75V6.74s0 -0.75 0.75 -0.75\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"\u003E\u003C\/path\u003E\u003Cpath d=\"m15 15.24 0 -9.25\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"\u003E\u003C\/path\u003E\u003Cpath d=\"M19.27 3.87A11.84 11.84 0 0 1 15 6a11.93 11.93 0 0 1 2.12 -4.24C18.46 0.43 19.21 0.63 19.8 1.22s0.78 1.33 -0.53 2.65Z\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"\u003E\u003C\/path\u003E\u003Cpath d=\"M10.73 3.87A11.84 11.84 0 0 0 15 6a11.93 11.93 0 0 0 -2.12 -4.24C11.54 0.43 10.79 0.63 10.2 1.22s-0.78 1.33 0.53 2.65Z\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"\u003E\u003C\/path\u003E\u003C\/g\u003E\u003C\/svg\u003E","gift":"\u003Csvg class=\"size-8\" fill=\"none\" stroke=\"currentColor\" viewbox=\"0 0 24 24\" stroke-width=\"1.5\"\u003E\u003Cpath stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M21 11.25v8.25a1.5 1.5 0 01-1.5 1.5H4.5a1.5 1.5 0 01-1.5-1.5v-8.25M12 4.875A2.625 2.625 0 109.375 7.5H12m0-2.625V7.5m0-2.625A2.625 2.625 0 1114.625 7.5H12m0 0V21m-8.625-9.75h18c.621 0 1.125-.504 1.125-1.125v-1.5c0-.621-.504-1.125-1.125-1.125h-18c-.621 0-1.125.504-1.125 1.125v1.5c0 .621.504 1.125 1.125 1.125z\"\u003E\u003C\/path\u003E\u003C\/svg\u003E"}, 1048 activity: null, 1049 birthdayMonth: '', 1050 birthdayDay: '', 1051 birthdayCanEdit: false, 1052 birthdayPoints: 150, 1053 birthdayMinDays: 30, 1054 birthdayDayFirst: false, 1055 birthdayBanner: null, 1056 redeemActions: [{"id":"spend_1","type":"fixed_discount","cost":"500 Points for $5 off","icon":"reward-amount-coupon","required_points":500,"action_config":{"id":"spend_1","type":"fixed_discount","enabled":true,"auto_disabled":false,"custom_title":"","icon":"reward-amount-coupon","minimum_spent":0,"coupon_prefix":"","coupon_duration":"never","points_required":500,"coupon_amount":5},"reward_label":"$5 off coupon","points_cost_label":"500 Points","product_name":"","icon_html":"\u003Csvg class=\"size-6\" viewbox=\"0 0 24 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003E\n\t\t\t\u003Cdesc\u003E\n\t\t\t\tFixed amount discount icon\n\t\t\t\u003C\/desc\u003E\n\t\t\t\u003Cpath d=\"M19.575 8.25a3.755 3.755 0 0 1 3.049 -2.95 0.749 0.749 0 0 0 0.626 -0.738V2.25a1.5 1.5 0 0 0 -1.5 -1.5H2.25a1.5 1.5 0 0 0 -1.5 1.5v2.314a0.747 0.747 0 0 0 0.626 0.738 3.751 3.751 0 0 1 0 7.4 0.75 0.75 0 0 0 -0.626 0.739v2.309a1.5 1.5 0 0 0 1.5 1.5h6\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"\u003E\u003C\/path\u003E\n\t\t\t\u003Cpath d=\"m8.25 14.25 0 -1.5\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"\u003E\u003C\/path\u003E\n\t\t\t\u003Cpath d=\"m8.25 9.75 0 -1.5\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"\u003E\u003C\/path\u003E\n\t\t\t\u003Cpath d=\"m8.25 5.25 0 -1.5\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"\u003E\u003C\/path\u003E\n\t\t\t\u003Cpath d=\"M18.75 14.25h-2.033a1.342 1.342 0 0 0 -0.5 2.588l2.064 0.825a1.342 1.342 0 0 1 -0.5 2.587H15.75\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"\u003E\u003C\/path\u003E\n\t\t\t\u003Cpath d=\"m17.25 14.25 0 -0.75\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"\u003E\u003C\/path\u003E\n\t\t\t\u003Cpath d=\"m17.25 21 0 -0.75\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"\u003E\u003C\/path\u003E\n\t\t\t\u003Cpath d=\"M11.25 17.25a6 6 0 1 0 12 0 6 6 0 1 0 -12 0Z\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"\u003E\u003C\/path\u003E\n\t\t\t\u003C\/svg\u003E"},{"id":"spend_2","type":"fixed_discount","cost":"1000 Points for $10 off","icon":"reward-amount-coupon","required_points":1000,"action_config":{"id":"spend_2","type":"fixed_discount","enabled":true,"auto_disabled":false,"custom_title":"","icon":"reward-amount-coupon","minimum_spent":0,"coupon_prefix":"","coupon_duration":"never","points_required":1000,"coupon_amount":10},"reward_label":"$10 off coupon","points_cost_label":"1000 Points","product_name":"","icon_html":"\u003Csvg class=\"size-6\" viewbox=\"0 0 24 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003E\n\t\t\t\u003Cdesc\u003E\n\t\t\t\tFixed amount discount icon\n\t\t\t\u003C\/desc\u003E\n\t\t\t\u003Cpath d=\"M19.575 8.25a3.755 3.755 0 0 1 3.049 -2.95 0.749 0.749 0 0 0 0.626 -0.738V2.25a1.5 1.5 0 0 0 -1.5 -1.5H2.25a1.5 1.5 0 0 0 -1.5 1.5v2.314a0.747 0.747 0 0 0 0.626 0.738 3.751 3.751 0 0 1 0 7.4 0.75 0.75 0 0 0 -0.626 0.739v2.309a1.5 1.5 0 0 0 1.5 1.5h6\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"\u003E\u003C\/path\u003E\n\t\t\t\u003Cpath d=\"m8.25 14.25 0 -1.5\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"\u003E\u003C\/path\u003E\n\t\t\t\u003Cpath d=\"m8.25 9.75 0 -1.5\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"\u003E\u003C\/path\u003E\n\t\t\t\u003Cpath d=\"m8.25 5.25 0 -1.5\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"\u003E\u003C\/path\u003E\n\t\t\t\u003Cpath d=\"M18.75 14.25h-2.033a1.342 1.342 0 0 0 -0.5 2.588l2.064 0.825a1.342 1.342 0 0 1 -0.5 2.587H15.75\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"\u003E\u003C\/path\u003E\n\t\t\t\u003Cpath d=\"m17.25 14.25 0 -0.75\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"\u003E\u003C\/path\u003E\n\t\t\t\u003Cpath d=\"m17.25 21 0 -0.75\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"\u003E\u003C\/path\u003E\n\t\t\t\u003Cpath d=\"M11.25 17.25a6 6 0 1 0 12 0 6 6 0 1 0 -12 0Z\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"\u003E\u003C\/path\u003E\n\t\t\t\u003C\/svg\u003E"},{"id":"spend_3","type":"fixed_discount","cost":"2000 Points for $20 off","icon":"reward-amount-coupon","required_points":2000,"action_config":{"id":"spend_3","type":"fixed_discount","enabled":true,"auto_disabled":false,"custom_title":"","icon":"reward-amount-coupon","minimum_spent":0,"coupon_prefix":"","coupon_duration":"never","points_required":2000,"coupon_amount":20},"reward_label":"$20 off coupon","points_cost_label":"2000 Points","product_name":"","icon_html":"\u003Csvg class=\"size-6\" viewbox=\"0 0 24 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003E\n\t\t\t\u003Cdesc\u003E\n\t\t\t\tFixed amount discount icon\n\t\t\t\u003C\/desc\u003E\n\t\t\t\u003Cpath d=\"M19.575 8.25a3.755 3.755 0 0 1 3.049 -2.95 0.749 0.749 0 0 0 0.626 -0.738V2.25a1.5 1.5 0 0 0 -1.5 -1.5H2.25a1.5 1.5 0 0 0 -1.5 1.5v2.314a0.747 0.747 0 0 0 0.626 0.738 3.751 3.751 0 0 1 0 7.4 0.75 0.75 0 0 0 -0.626 0.739v2.309a1.5 1.5 0 0 0 1.5 1.5h6\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"\u003E\u003C\/path\u003E\n\t\t\t\u003Cpath d=\"m8.25 14.25 0 -1.5\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"\u003E\u003C\/path\u003E\n\t\t\t\u003Cpath d=\"m8.25 9.75 0 -1.5\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"\u003E\u003C\/path\u003E\n\t\t\t\u003Cpath d=\"m8.25 5.25 0 -1.5\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"\u003E\u003C\/path\u003E\n\t\t\t\u003Cpath d=\"M18.75 14.25h-2.033a1.342 1.342 0 0 0 -0.5 2.588l2.064 0.825a1.342 1.342 0 0 1 -0.5 2.587H15.75\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"\u003E\u003C\/path\u003E\n\t\t\t\u003Cpath d=\"m17.25 14.25 0 -0.75\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"\u003E\u003C\/path\u003E\n\t\t\t\u003Cpath d=\"m17.25 21 0 -0.75\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"\u003E\u003C\/path\u003E\n\t\t\t\u003Cpath d=\"M11.25 17.25a6 6 0 1 0 12 0 6 6 0 1 0 -12 0Z\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"\u003E\u003C\/path\u003E\n\t\t\t\u003C\/svg\u003E"},{"id":"percentage_discount_1773471154354_l6qm499m0","type":"percentage_discount","cost":"10000 Points for 10% off","icon":"reward-percentage-coupon","required_points":10000,"action_config":{"id":"percentage_discount_1773471154354_l6qm499m0","type":"percentage_discount","enabled":true,"auto_disabled":false,"custom_title":"","icon":"reward-percentage-coupon","minimum_spent":0,"coupon_prefix":"","coupon_duration":"+30 days","points_required":10000,"coupon_amount":10},"reward_label":"10% off coupon","points_cost_label":"10000 Points","product_name":"","icon_html":"\u003Csvg class=\"size-6\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewbox=\"0 0 24 24\"\u003E\n\t\t\t\u003Cdesc\u003E\n\t\t\t\tPercentage discount icon\n\t\t\t\u003C\/desc\u003E\n\t\t\t\u003Cg\u003E\n\t\t\t\t\u003Cpath d=\"M23.25 15v3.5a1.5 1.5 0 0 1 -1.5 1.5H2.25a1.5 1.5 0 0 1 -1.5 -1.5V15a3 3 0 0 0 0 -6V5.5A1.5 1.5 0 0 1 2.25 4h19.5a1.5 1.5 0 0 1 1.5 1.5V9a3 3 0 0 0 0 6Z\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\
1056"1.5\"\u003E\u003C\/path\u003E\n\t\t\t\t\u003Cpath d=\"M7.25 9a1.5 1.5 0 1 0 3 0 1.5 1.5 0 1 0 -3 0\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"\u003E\u003C\/path\u003E\n\t\t\t\t\u003Cpath d=\"M14.5 15a1.5 1.5 0 1 0 3 0 1.5 1.5 0 1 0 -3 0\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"\u003E\u003C\/path\u003E\n\t\t\t\t\u003Cpath d=\"m15.75 8.25 -7.5 7.5\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"\u003E\u003C\/path\u003E\n\t\t\t\u003C\/g\u003E\n\t\t\t\u003C\/svg\u003E"},{"id":"free_product_1774022853187_2dkxwkikl","type":"free_product","cost":"1000 Points for a free product","icon":"reward-free-product","required_points":1000,"action_config":{"id":"free_product_1774022853187_2dkxwkikl","type":"free_product","enabled":true,"auto_disabled":false,"custom_title":"","icon":"reward-free-product","minimum_spent":0,"coupon_prefix":"","coupon_duration":"+3 months","points_required":1000,"products_included":[{"id":21580,"name":"Add photos to your MLS listing \u2013 Add up to 25 photos to MLS","source":"woocommerce"}],"product_value":"","reward_description":"","redemption_limit":"1","minimum_order_value":99},"reward_label":"Free Add photos to your MLS listing \u2013 Add up to 25 photos to MLS","points_cost_label":"1000 Points","product_name":"Add photos to your MLS listing \u2013 Add up to 25 photos to MLS","icon_html":"\u003Csvg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"size-6\" viewbox=\"0 0 24 24\"\u003E\u003Cdesc\u003EFree product icon\u003C\/desc\u003E\u003Cg\u003E\u003Cg\u003E\u003Cpath d=\"M15.75 23.24a3 3 0 0 0 -3 -3H9a3 3 0 0 0 -3 -3H0.75v6Z\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"\u003E\u003C\/path\u003E\u003Cpath d=\"m6 20.24 3 0\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"\u003E\u003C\/path\u003E\u003C\/g\u003E\u003Cpath d=\"M16.5 17.74H21a0.76 0.76 0 0 0 0.75 -0.75v-6.75\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"\u003E\u003C\/path\u003E\u003Cpath d=\"m8.25 10.24 0 4\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"\u003E\u003C\/path\u003E\u003Cpath d=\"M7.5 5.99h15s0.75 0 0.75 0.75v2.75s0 0.75 -0.75 0.75h-15s-0.75 0 -0.75 -0.75V6.74s0 -0.75 0.75 -0.75\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"\u003E\u003C\/path\u003E\u003Cpath d=\"m15 15.24 0 -9.25\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"\u003E\u003C\/path\u003E\u003Cpath d=\"M19.27 3.87A11.84 11.84 0 0 1 15 6a11.93 11.93 0 0 1 2.12 -4.24C18.46 0.43 19.21 0.63 19.8 1.22s0.78 1.33 -0.53 2.65Z\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"\u003E\u003C\/path\u003E\u003Cpath d=\"M10.73 3.87A11.84 11.84 0 0 0 15 6a11.93 11.93 0 0 0 -2.12 -4.24C11.54 0.43 10.79 0.63 10.2 1.22
1056s-0.78 1.33 0.53 2.65Z\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"\u003E\u003C\/path\u003E\u003C\/g\u003E\u003C\/svg\u003E"}] })" 1057 x-init=" 1058 const openFromHash = () => { 1059 if (window.location.hash === '#rewardswp-home') { 1060 if (!open) { 1061 open = true; 1062 currentPanel = 'main'; 1063 showFixedHeader = false; 1064 scrollProgress = 0; 1065 headerCollapsed = false; 1066 $nextTick(() => { 1067 if ($refs.scrollContainer) { $refs.scrollContainer.scrollTop = 0; scrollTop = 0; } 1068 setTimeout(() => { if (typeof checkContentHeight === 'function') { checkContentHeight(); } }, 200); 1069 }); 1070 } 1071 } 1072 }; 1073 window.addEventListener('hashchange', openFromHash); 1074 openFromHash(); 1075 " 1076 x-on:free-product-coupon-failed.window="freeProductCouponFailed = true" 1077 x-on:show-redeem-success.window=" 1078 // Handle redeem success: populate data and show success panel 1079 freeProductCouponFailed = false; // Reset when new redemption occurs. 1080 redeemSuccessData = Object.assign({}, redeemSuccessData, { 1081 couponCode: $event.detail.couponCode, 1082 pointsSpent: $event.detail.pointsSpent, 1083 newBalance: $event.detail.newBalance, 1084 message: $event.detail.message || 'You have successfully redeemed ' + $event.detail.pointsSpent + ' points. Use the coupon code below at checkout:', 1085 icon_html: $event.detail.iconHtml || '', 1086 title: $event.detail.title || '', 1087 points_cost: $event.detail.pointsSpent, 1088 points_label: $event.detail.pointsLabel || 'points', 1089 coupon_terms: $event.detail.couponTerms || '', 1090 expiry_text: $event.detail.expiryText || '', 1091 is_applied: $event.detail.isApplied || false, 1092 reward_id: $event.detail.rewardId || 0, 1093 reward_type: $event.detail.rewardType || '', 1094 free_product_id: $event.detail.freeProductId || null, 1095 minimum_order_amount: $event.detail.minimumOrderAmount || 0, 1096 free_product_price: $event.detail.freeProductPrice || 0 1097 }); 1098 // Update header points reactively 1099 userPoints = $event.detail.newBalance; 1100 userData.points = $event.detail.newBalance; 1101 // Refresh rewards data after successful redemption 1102 refreshRewardsData(); 1103 // Hide the action from Ways to Redeem if limit was reached 1104 if ($event.detail.limitReached && $event.detail.actionId) { 1105 const actionElement = $root.querySelector('[data-action-id=' + String.fromCharCode(34) + $event.detail.actionId + String.fromCharCode(34) + ']'); 1106 if (actionElement) { 1107 actionElement.style.display = 'none'; 1108 } 1109 } 1110 // Mark that activity needs refresh when user navigates to it 1111 needsActivityRefresh = true; 1112 currentPanel = 'redeem-success'; 1113 " 1114 x-on:setting-updated.window=" 1115 isAdminPreview && handleSettingUpdate($event.detail); 1116 if ($event.detail.key === 'points_currency_singular') { 1117 currencySingular = $event.detail.value; 1118 } 1119 if ($event.detail.key === 'points_currency_plural') { 1120 currencyPlural = $event.detail.value; 1121 } 1122 if ($event.detail.key === 'welcome_heading') { 1123 welcomeGreeting = $event.detail.value; 1124 } 1125 if ($event.detail.key === 'program_name') { 1126 programName = $event.detail.value; 1127 } 1128 " 1129 x-cloak 1130 x-on:toggle-widget.window="open = !open" 1131 x-on:toggle-rewards-panel.window="toggle()" 1132 x-on:resize.window="measureBannerHeight()" 1133 x-on:change-test-state.window="isFriendClaimMode = $event.detail === 'friend-claim'" 1134 x-on:navigate-to-panel.window="navigateToPanel($event.detail.panel || $event.detail, $event.detail)" 1135 x-on:update-launcher-style.window=" 1136 launcherStyle = (() => { 1137 return 'floating-circle'; 1138 })(); 1139 " 1140 x-on:update-launcher-display.window=" 1141 open = false; 1142 launcherDisplayMode = $event.detail; 1143 $nextTick(() => measureLauncherWidth()); 1144 " 1145 x-on:update-launcher-text.window=" 1146 open = false; 1147 launcherText = $event.detail; 1148 $nextTick(() => measureLauncherWidth()); 1149 " 1150 x-on:update-background-image.window=" 1151 backgroundImageUrl = $event.detail; 1152 document.documentElement.style.setProperty('--rwp-header-text', this.headerTextColor); 1153 " 1154 x-on:update-logo.window=" 1155 logoUrl = $event.detail; 1156 " 1157 x-on:update-show-logo.window=" 1158 showLogo = $event.detail; 1159 " 1160 x-on:update-fade-overlay.window=" 1161 showFadeOverlay = $event.detail; 1162 " 1163 x-on:global-tier-changed.window=" 1164 globalTier = $event.detail; 1165 " 1166 x-on:background-image-system-updated.window=" 1167 backgroundImage.enabled = $event.detail.enabled; 1168 backgroundImage.url = $event.detail.url; 1169 // Update legacy backgroundImageUrl for compatibility 1170 backgroundImageUrl = backgroundImage.enabled && backgroundImage.url ? backgroundImage.url : ''; 1171 " 1172 x-on:text-overlay-system-updated.window=" 1173 textOverlay[$event.detail.property] = $event.detail.value; 1174 " 1175 x-on:update-program-name.window=" 1176 programName = $event.detail; 1177 " 1178 x-on:update-welcome-greeting.window=" 1179 welcomeGreeting = $event.detail; 1180 " 1181 > 1182 <button 1183 x-ref="launcherButton" 1184 x-cloak 1185 x-show="(launcherStyle !== 'side-tab' || !open) && !(isMobile && open)" 1186 x-on:click="toggle()" 1187 x-bind:style="measuredWidth ? 'width: ' + (open || launcherDisplayMode === 'icon' ? '48px' : measuredWidth + 'px') + ';' : ''"
1188 class="rwp-launcher z-[var(--rwp-z-launcher)] bg-rwp-brand text-rwp-button hover:bg-rwp-brand-hover text-rwp-widget-button-text cursor-pointer flex items-center justify-center overflow-hidden select-none transition-[width,background-color] duration-300 ease-out motion-reduce:transition-none rounded-full h-12 py-2 pointer-events-auto focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500" 1189 x-bind:class="open || launcherDisplayMode === 'icon' ? 'px-3' : 'px-6'" 1190 data-highlight="launcher" 1191 x-bind:aria-label="open ? 'Close rewards' : 'Open rewards - ' + userData.points + ' ' + (userData.points == 1 ? currencySingular : currencyPlural) + ' available'" 1192 x-bind:aria-expanded="open.toString()" 1193 aria-controls="rwp-rewards-panel" 1194 > 1195 <span 1196 x-show="(launcherDisplayMode === 'icon' || launcherDisplayMode === 'both') || open" 1197 x-bind:class="'shrink-0' + (!open && launcherDisplayMode === 'both' ? ' mr-2' : '')"> 1198 <span x-show="!open"> 1199 <svg xmlns="http://www.w3.org/2000/svg" class="size-6" viewbox="0 0 24 24"><desc>Gift icon</desc><path d="M1.416 14.3349V21.3909C1.416 22.6899 2.469 23.7429 3.768 23.7429H10.824V14.3349ZM13.176 14.3349V23.7429H20.232C21.531 23.7429 22.584 22.6899 22.584 21.3909V14.3349ZM21.408 7.2789H17.7459C18.2797 7.0105 18.7694 6.6624 19.1983 6.2464C20.5732 4.8668 20.5732 2.635 19.1983 1.2555C17.8018 -0.0757 15.6062 -0.0757 14.2097 1.2555C12.2846 3.1817 12.0259 6.8085 12 7.2107C12.0026 7.2337 12.0065 7.2564 12.0118 7.2789H11.9882C11.9935 7.2564 11.9974 7.2337 12 7.2107C11.9777 6.805 11.7178 3.1817 9.7927 1.2555C8.396 -0.0751 6.2008 -0.0751 4.8041 1.2555C3.426 2.6333 3.426 4.8674 4.8041 6.2452C5.2319 6.6616 5.7209 7.0102 6.2541 7.2789H2.592C1.293 7.2789 0.24 8.3319 0.24 9.6309V13.1589H10.824V8.4549H13.176V13.1589H23.76V9.6309C23.76 8.3319 22.707 7.2789 21.408 7.2789ZM6.4646 4.5835C6.0047 4.1242 6.0047 3.3789 6.4646 2.9195C6.9238 2.4604 7.6682 2.4604 8.1274 2.9195C8.8215 3.7777 9.2752 4.8049 9.4422 5.896C8.3515 5.728 7.3244 5.2753 6.4646 4.5835ZM14.5566 5.8983C14.7231 4.8065 15.1773 3.7788 15.8726 2.9207C16.3317 2.4624 17.0752 2.4624 17.5343 2.9207C17.9949 3.3802 17.9949 4.1264 17.5343 4.5859C16.6757 5.2797 15.648 5.7327 14.5566 5.8983Z" fill="currentColor" stroke-width="1"></path></svg> </span> 1200 <span x-show="open"> 1201 <svg class="size-6" fill="none" stroke="currentColor" viewbox="0 0 24 24" stroke-width="1.5"><desc>X (close) icon</desc><path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12" /></svg> </span> 1202 </span> 1203 1204 <span 1205 x-ref="launcherLabel" 1206 x-show="!open && (launcherDisplayMode === 'text' || launcherDisplayMode === 'both')" 1207 x-text="launcherText" 1208 class="whitespace-nowrap font-medium text-sm"> 1209 </span> 1210 </button> 1211 1212 <template x-if="isMobile"> 1213 <div 1214 id="rwp-rewards-panel" 1215 x-ref="rewardsPanel" 1216 x-bind:hidden="!open" 1217 class="rwp-mobile-panel fixed inset-0 z-[var(--rwp-z-panel)] bg-rwp-widget-bg overflow-hidden pointer-events-auto flex-col" 1218 data-highlight="panel-bg" 1219 x-bind:style="'padding-top: env(safe-area-inset-top); padding-bottom: env(safe-area-inset-bottom); padding-left: env(safe-area-inset-left); padding-right: env(safe-area-inset-right);'" 1220 role="dialog" 1221 aria-labelledby="rewards-title" 1222 > 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 <button 1234 x-show="!isFriendClaimMode" 1235 x-on:click="open = false" 1236 x-bind:class="'group p-2 rounded transition-colors cursor-pointer z-[var(--rwp-z-close-button)] focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 ' + (isFriendClaimMode ? 'text-gray-500 hover:text-gray-700' : 'text-rwp-widget-header-text') + ' ' + (isMobile ? 'fixed' : 'absolute top-[12px] right-[12px]')" 1237 x-bind:style="isMobile ? 'top: calc(env(safe-area-inset-top) + 12px); right: calc(env(safe-area-inset-right) + 12px);' : ''" 1238 aria-label="Close" 1239 > 1240 <div x-bind:class="'p-1 rounded transition-colors ' + (isFriendClaimMode ? 'group-hover:bg-gray-100' : 'group-hover:bg-white/10')"> 1241 <div class="size-5 flex items-center justify-center"> 1242 <svg class="size-5" fill="none" stroke="currentColor" viewbox="0 0 24 24" stroke-width="1.5"><desc>X (close) icon</desc><path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12" /></svg>
1242 </div> 1243 </div> 1244 </button> 1245 1246 <div 1247 x-bind:hidden="!(currentPanel === 'main' && showFixedHeader && !isFriendClaimMode)" 1248 x-bind:class="'rwp-fixed-header absolute top-0 left-0 right-0 z-50 bg-rwp-brand text-rwp-widget-header-text flex items-center justify-between ' + (isMobile ? '' : 'px-5 h-16')" 1249 x-bind:style="isMobile ? 'padding-left: calc(env(safe-area-inset-left) + 20px); padding-right: calc(env(safe-area-inset-right) + 20px); padding-top: env(safe-area-inset-top); min-height: 64px;' : ''" 1250 data-highlight="header-bg" 1251 > 1252 <div class="flex items-center gap-3 flex-1 min-w-0"> 1253 <button x-show="currentPanel !== 'main'" x-on:click=" 1254 currentPanel === 'redeem-success' ? navigateToPanel('ways-to-redeem') : 1255 currentPanel === 'create-account-prompt' ? navigateToPanel('ways-to-redeem') : 1256 currentPanel.startsWith('reward-detail-') ? navigateToPanel('your-rewards') : 1257 currentPanel === 'birthday-picker' ? navigateToPanel('ways-to-earn') : 1258 navigateToPanel('main') 1259 " class="group p-2 rounded transition-colors cursor-pointer -ml-2 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500" aria-label="Back"> 1260 <div class="p-1 rounded transition-colors group-hover:bg-white/10"> 1261 <div class="size-5 flex items-center justify-center"> 1262 <svg class="size-7" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke-width="1.5" stroke="currentColor"><desc>Chevron left icon</desc><path stroke-linecap="round" stroke-linejoin="round" d="M15.75 19.5 8.25 12l7.5-7.5" /></svg> </div> 1263 </div> 1264 </button> 1265 <div> 1266 <div class="font-semibold text-base"> 1267 <!-- Points balance (shown on all panels when points program is active) --> 1268 <span x-show="showPoints && !!memberId"><span x-text="userData.points.toLocaleString()"></span> <span x-text="(userData.points == 1 ? currencySingular : currencyPlural)"></span></span> 1269 <!-- Referral count (shown on all panels when ONLY referrals program is active) --> 1270 <span x-show="showReferrals && !showPoints && !!memberId" x-text="friendsReferred === 0 ? 'No friends referred yet' : (friendsReferred === 1 ? '1 friend referred' : friendsReferred + ' friends referred')"> 1271 </span> 1272 <!-- Fallback: Activity label when no member or no programs --> 1273 <span x-show="!memberId && currentPanel === 'activity'">Activity</span> 1274 </div> 1275 <div class="text-sm"> 1276 <span x-show="!isFriendClaimMode" x-text="programName"></span> 1277 </div> 1278 </div> 1279 </div> 1280 </div> 1281 1282 <div 1283 x-show="currentPanel !== 'main' && !isFriendClaimMode" 1284 x-bind:class="'absolute top-0 left-0 right-0 z-50 bg-rwp-brand text-rwp-widget-header-text flex items-center justify-between ' + (isMobile ? '' : 'px-5 h-16')" 1285 x-bind:style="isMobile ? 'padding-left: calc(env(safe-area-inset-left) + 20px); padding-right: calc(env(safe-area-inset-right) + 20px); padding-top: env(safe-area-inset-top); min-height: 64px;' : ''" 1286 data-highlight="header-bg" 1287 > 1288 <div class="flex items-center gap-3 flex-1 min-w-0"> 1289 <button x-show="currentPanel !== 'main'" x-on:click=" 1290 currentPanel === 'redeem-success' ? navigateToPanel('ways-to-redeem') : 1291 currentPanel === 'create-account-prompt' ? navigateToPanel('ways-to-redeem') : 1292 currentPanel.startsWith('reward-detail-') ? navigateToPanel('your-rewards') : 1293 currentPanel === 'birthday-picker' ? navigateToPanel('ways-to-earn') : 1294 navigateToPanel('main') 1295 " class="group p-2 rounded transition-colors cursor-pointer -ml-2 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500" aria-label="Back"> 1296 <div class="p-1 rounded transition-colors group-hover:bg-white/10"> 1297 <div class="size-5 flex items-center justify-center"> 1298 <svg class="size-7" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke-width="1.5" stroke="currentColor"><desc>Chevron left icon</desc><path stroke-linecap="round" stroke-linejoin="round" d="M15.75 19.5 8.25 12l7.5-7.5" /></svg> </div>
1299 </div> 1300 </button> 1301 <div> 1302 <div class="font-semibold text-base"> 1303 <!-- Points balance (shown on all panels when points program is active) --> 1304 <span x-show="showPoints && !!memberId"><span x-text="userData.points.toLocaleString()"></span> <span x-text="(userData.points == 1 ? currencySingular : currencyPlural)"></span></span> 1305 <!-- Referral count (shown on all panels when ONLY referrals program is active) --> 1306 <span x-show="showReferrals && !showPoints && !!memberId" x-text="friendsReferred === 0 ? 'No friends referred yet' : (friendsReferred === 1 ? '1 friend referred' : friendsReferred + ' friends referred')"> 1307 </span> 1308 <!-- Fallback: Activity label when no member or no programs --> 1309 <span x-show="!memberId && currentPanel === 'activity'">Activity</span> 1310 </div> 1311 <div class="text-sm"> 1312 <span x-show="!isFriendClaimMode" x-text="programName"></span> 1313 </div> 1314 </div> 1315 </div> 1316 </div> 1317 1318 1319 <template x-if="currentPanel === 'main' && !isFriendClaimMode"> 1320 <div 1321 x-bind:class="'absolute top-0 left-0 w-full -z-10 bg-cover bg-center ' + (!(backgroundImage.enabled && backgroundImage.url && isProFeatureAccessible('pro')) ? ' bg-rwp-brand' : '')" 1322 x-bind:style=" 1323 'transform: translate3d(0px, ' + getParallaxOffset(scrollTop) + 'px, 0px); ' + 1324 (backgroundImage.enabled && backgroundImage.url && isProFeatureAccessible('pro') ? 'background-image: url(' + backgroundImage.url + ');' : '') + 1325 '' + 1326 'height: ' + dynamicBackgroundHeight + 'px;'" 1327 > 1328 </div> 1329 </template> 1330 1331 1332 1333 1334 1335 <div 1336 x-bind:class="'relative w-full h-full flex flex-col panel-container flex-1' + (currentPanel === 'main' ? ' overflow-y-auto overflow-x-hidden custom-scrollbar' : '')" 1337 @scroll="handleScroll($event)" 1338 x-ref="scrollContainer" 1339 > 1340 1341 1342 <div 1343 x-show="currentPanel === 'main' && !isFriendClaimMode" 1344 class="panel-expanded-header text-rwp-widget-header-text bg-cover bg-center relative" 1345 > 1346 <div class="banner-content px-5 pb-6 pt-16 h-full flex flex-col justify-end relative" 1347 x-ref="bannerContent" 1348 x-bind:style="'opacity: ' + getTextOpacity(scrollTop)" 1349 > 1350 <div class="relative z-10"> 1351 <div x-show="memberId > 0"> 1352 <template x-if="showPoints"> 1353 <div> 1354 <div class="text-base" x-text="yourLabel + ' ' + (userData.points == 1 ? currencySingular : currencyPlural)"></div> 1355 <div class="font-bold text-4xl mb-1" x-text="userData.points.toLocaleString()"></div> 1356 </div> 1357 </template> 1358 1359 <template x-if="showReferrals && !showPoints"> 1360 <div> 1361 <div class="text-base">Share & Earn with</div> 1362 <div class="font-semibold text-3xl" x-text="programName"></div> 1363 </div> 1364 </template> 1365 </div> 1366 1367 <div x-show="memberId === 0"> 1368 <div class="text-base"> 1369 <span x-show="!isFriendClaimMode" x-text="welcomeGreeting"></span> 1370 </div> 1371 <div class="font-semibold text-3xl"> 1372 <span x-show="!isFriendClaimMode" x-text="programName"></span> 1373 </div> 1374 </div> 1375 </div> 1376 </div> 1377 </div> 1378 1379 1380 1381 <div 1382 class="flex-1" 1383 x-bind:style="'height: 100%;' + (currentPanel !== 'main' ? ' padding-top: 64px;' : ' padding-top: 0;')" 1384 x-ref="contentArea" 1385 > 1386 1387 1388 <div 1389 x-show="!isFriendClaimMode && currentPanel === 'main'" 1390 x-bind:class="'px-4 pb-10 flex flex-col gap-4 ' + (currentPanel === 'main' ? (navigationDirection === 'initial' ? 'rwp-panel-fade-up' : (navigationDirection === 'forward' ? 'rwp-panel-slide-forward' : (navigationDirection === 'back' ? 'rwp-panel-slide-back' : ''))) : '')" 1391 > 1392 1393 <!-- Birthday banner (shows all day on member's birthday) --> 1394 <div 1395 x-show="birthdayBanner && memberId > 0" 1396 data-birthday-banner 1397 class="bg-white rounded-lg px-4 py-6 relative text-rwp-widget-text shadow-card px-5" 1398 > 1399 <div class="flex items-center gap-3"> 1400 <div class="flex-shrink-0"> 1401 <svg class="size-8 text-rwp-widget-icon-text" viewbox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> 1402 <desc>Birthday cake icon</desc> 1403 <path d="M3.08108 11.7027H20.9189C20.9189 11.7027 22.7027 11.7027 22.7027 13.4865V21.2162C22.7027 21.2162 22.7027 23 20.9189 23H3.08108C3.08108 23 1.2973 23 1.2973 21.2162V13.4865C1.2973 13.4865 1.2973 11.7027 3.08108 11.7027Z" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path> 1404 <path d="M12 9.02703V11.7027" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path> 1405 <path d="M13.7838 3.67568C13.7838 4.14876 13.5959 4.60248 13.2613 4.937C12.9268 5.27153 12.4731 5.45946 12 5.45946C11.5269 5.45946 11.0732 5.27153 10.7387 4.937C10.4041 4.60248 10.2162 4.14876 10.2162 3.67568C10.2162 2.68865 12 1 12 1C12 1 13.7838 2.68865 13.7838 3.67568Z" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path> 1406 <path d="M19.1351 9.02703V11.7027" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path> 1407 <path d="M20.9189 3.67568C20.9189 4.14876 20.731 4.60248 20.3965 4.937C20.0619 5.27153 19.6082 5.45946 19.1351 5.45946C18.662 5.45946 18.2083 5.27153 17.8738 4.937C17.5393 4.60248 17.3514 4.14876 17.3514 3.67568C17.3514 2.68865 19.1351 1 19.1351 1C19.1351 1 20.9189 2.68865 20.9189 3.67568Z" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path> 1408 <path d="M4.86486 9.02703V11.7027" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path> 1409 <path d="M6.64865 3.67568C6.64865 4.14876 6.46071 4.60248 6.12619 4.937C5.79167 5.27153 5.33795 5.45946 4.86486 5.45946C4.39178 5.45946 3.93806 5.27153 3.60354 4.937C3.26901 4.60248 3.08108 4.14876 3.08108 3.67568C3.08108 2.68865 4.86486 1 4.86486 1C4.86486 1 6.64865 2.68865 6.64865 3.67568Z" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path> 1410 <path d="M1.2973 17.0184C1.57132 17.4845 1.96234 17.8709 2.43166 18.1394C2.90097 18.4079 3.43228 18.5492 3.97297 18.5492C4.51367 18.5492 5.04498 18.4079 5.51429 18.1394C5.9836 17.8709 6.37463 17.4845 6.64865 17.0184C6.92267 17.4845 7.3137 17.8709 7.78301 18.1394C8.25232 18.4079 8.78363 18.5492 9.32432 18.5492C9.86502 18.5492 10.3963 18.4079 10.8656 18.1394C11.335 17.8709 11.726 17.4845 12 17.0184C12.274 17.4845 12.665 17.8709 13.1344 18.1394C13.6037 18.4079 14.135 18.5492 14.6757 18.5492C15.2164 18.5492 15.7477 18.4079 16.217 18.1394C16.6863 17.8709 17.0773 17.4845 17.3514 17.0184C17.6254 17.4845 18.0164 17.8709 18.4857 18.1394C18.955 18.4079 19.4863 18.5492 20.027 18.5492C20.5677 18.5492 21.099 18.4079 21.5683 18.1394C22.0377 17.8709 22.4287 17.4845 22.7027 17.0184" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path> 1411 </svg>
1411 </div> 1412 <div class="flex-1 min-w-0"> 1413 <div class="text-base font-semibold text-rwp-widget-heading"> 1414 <span x-text="birthdayBanner ? 'Happy Birthday ' + birthdayBanner.member_name + '!' : ''"></span> 1415 </div> 1416 <div class="text-sm text-gray-500"> 1417 <span x-text="birthdayBanner ? 'Enjoy ' + birthdayBanner.points_earned.toLocaleString() + ' ' + currencyPlural + ' on us' : ''"></span> 1418 </div> 1419 </div> 1420 </div> 1421 </div> 1422 1423 1424 1425 <div x-show="memberId === 0 || isGuestMember"> 1426 <div 1427 x-data="becomeMember({ 1428 nonce: 'e9babc5c4b', 1429 ajaxUrl: 'https://jackkeller.com/wp-admin/admin-ajax.php?rewardswp_locale=site', 1430 isLoggedIn: false, 1431 isGuestMember: false, 1432 userName: '', 1433 userEmail: '' 1434 })" 1435 x-on:show-register-form.window="currentScreen = 'register'; showForm = true; showError = false; $dispatch('navigate-to-panel', { panel: 'main', resetScroll: true });" 1436 x-on:show-login-form.window="currentScreen = 'login'; showForm = true; showError = false;" 1437 x-on:member-joined.window="justJoined = true" 1438 class="bg-white rounded-lg px-4 py-6 relative text-rwp-widget-text shadow-card" 1439 x-bind:class="navigationDirection === 'initial' ? 'rwp-stagger-fade-up rwp-stagger-1' : (navigationDirection === 'back' ? 'rwp-stagger-slide-left rwp-stagger-1' : '')" 1440 data-become-member-section 1441 > 1442 <div x-show="showSuccess" style="display: none;"> 1443 <div class="flex justify-center mb-4"> 1444 <div class="size-16 bg-green-100 rounded-full flex items-center justify-center"> 1445 <svg class="size-8 text-green-600" fill="none" stroke="currentColor" viewBox="0 0 24 24"> 1446 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"></path> 1447 </svg> 1448 </div> 1449 </div> 1450 <h3 class="text-base font-semibold text-rwp-widget-heading mb-2"> 1451 Welcome to List on MLS from $75 Rewards Program! </h3> 1452 <p class="text-sm mb-6 px-2">You're now part of our rewards program! Start earning points and rewards with every purchase.</p> 1453 1454 <a 1455 x-bind:href="isAdminPreview ? 'javascript:void(0)' : 'https://jackkeller.com/pay-now/'" 1456 x-bind:data-preview-disabled="isAdminPreview ? 'true' : null" 1457 x-bind:data-tippy-content="isAdminPreview ? 'Disabled for admin preview' : null" 1458 x-bind:class="{ '!cursor-not-allowed': isAdminPreview }" 1459 class="bg-rwp-brand text-rwp-widget-button-text text-sm font-semibold rounded-lg cursor-pointer transition-colors hover:bg-rwp-brand-hover disabled:hover:bg-rwp-brand disabled:opacity-50 disabled:cursor-not-allowed focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 w-full py-3 px-8 min-h-[48px] mx-auto flex items-center justify-center no-underline hover:bg-rwp-button-hover" 1460 > 1461 Start earning points </a> 1462 </div> 1463 1464 <div x-show="!showSuccess"> 1465 <!-- Register Screen --> 1466 <div class="text-center" x-show="currentScreen === 'register'" x-transition:enter="transition-all duration-300 ease-out" x-transition:enter-start="opacity-0 -translate-y-4 scale-95" x-transition:enter-end="opacity-100 translate-y-0 scale-100"> 1467 <h2 class="text-base font-semibold text-rwp-widget-heading mb-2">Join our rewards program</h2> 1468 <p class="text-sm mb-4 px-2" x-show="!(isGuestMember && showGuestConfirmation)">Create a free account to start earning points and unlocking member-only perks.</p> 1469 <p class="text-sm mb-4 px-2" x-show="isGuestMember && showGuestConfirmation" x-cloak>Your order email will be used to create your account.</p> 1470 1471 <!-- Form for non-logged-in users, guest members, and logged-in non-members - Initially hidden --> 1472 1473 <!-- Guest confirmation: one-click account creation (no form fields needed, backend uses session) --> 1474 <div 1475 x-show="isGuestMember && showGuestConfirmation" 1476 x-transition:enter="transition-all duration-300 ease-out" 1477 x-transition:enter-start="opacity-0 -translate-y-4 scale-95" 1478 x-transition:enter-end="opacity-100 translate-y-0 scale-100" 1479 class="space-y-3" 1480 > 1481 <!-- Email identity card --> 1482 <div class="flex items-center gap-3 rounded-lg border border-gray-200 bg-gray-50/50 px-4 py-3 text-left"> 1483 <svg class="size-5 text-gray-400 flex-shrink-0" fill="none" stroke="currentColor" viewbox="0 0 24 24" stroke-width="1.5"><desc>Envelope (email) icon</desc><path stroke-linecap="round" stroke-linejoin="round" d="M21.75 6.75v10.5a2.25 2.25 0 01-2.25 2.25h-15a2.25 2.25 0 01-2.25-2.25V6.75m19.5 0A2.25 2.25 0 0019.5 4.5h-15a2.25 2.25 0 00-2.25 2.25m19.5 0v.243a2.25 2.25 0 01-1.07 1.916l-7.5 4.615a2.25 2.25 0 01-2.36 0L3.32 8.91a2.25 2.25 0 01-1.07-1.916V6.75" /></svg> <div class="min-w-0"> 1484 <p class="text-sm font-medium text-rwp-widget-heading truncate" x-text="formData.email"></p> 1485 <p class="text-xs text-gray-500">From your recent order</p> 1486 </div> 1487 </div> 1488 1489 <!-- Create account button --> 1490 <button 1491 type="button" 1492 tabindex="0" 1493 x-on:click="if (!isAdminPreview && !isDemo) { createMember() }" 1494 x-bind:disabled="isSubmitting" 1495 x-bind:class="isSubmitting ? 'opacity-50 cursor-not-allowed' : (isAdm
1495inPreview || isDemo) ? '!cursor-not-allowed' : 'hover:bg-rwp-brand-hover'" 1496 x-bind:data-preview-disabled="(isAdminPreview || isDemo) ? 'true' : null" 1497 x-bind:data-tippy-content="(isAdminPreview || isDemo) ? 'Disabled for preview' : null" 1498 class="bg-rwp-brand text-rwp-widget-button-text text-sm font-semibold rounded-lg cursor-pointer transition-colors hover:bg-rwp-brand-hover disabled:hover:bg-rwp-brand disabled:opacity-50 disabled:cursor-not-allowed focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 w-full py-3 px-8 min-h-[48px] mx-auto grid grid-cols-1 grid-rows-1 [grid-template-areas:'stack'] place-items-center" 1499 data-highlight="success-state" 1500 data-become-member-btn 1501 x-bind:aria-label="isSubmitting ? 'Creating account...' : 'Create my account'" 1502 > 1503 <span 1504 class="[grid-area:stack] transition-opacity duration-200" 1505 x-bind:class="{ 'invisible': isSubmitting, 'visible': !isSubmitting }" 1506 >Create my account</span> 1507 <svg class="w-5 h-5 animate-spin [grid-area:stack] transition-opacity duration-200" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" x-bind:class="{ 'invisible': isSubmitting !== true, 'visible': isSubmitting === true }"><desc>Loading spinner icon</desc><circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle><path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path></svg> </button> 1508 1509 </div> 1510 1511 <!-- Full registration form (shown for non-guest visitors only) --> 1512 <form x-on:submit.prevent="if (!isAdminPreview && !isDemo) { createMember() }" x-show="showForm && !isGuestMember" x-transition:enter="transition-all duration-300 ease-out" x-transition:enter-start="opacity-0 -translate-y-4 scale-95" x-transition:enter-end="opacity-100 translate-y-0 scale-100" x-transition:leave="transition-all duration-200 ease-in" x-transition:leave-start="opacity-100 translate-y-0 scale-100" x-transition:leave-end="opacity-0 -translate-y-2 scale-98" style="display: none;"> 1513 <div style="position:absolute;left:-9999px;top:-9999px;opacity:0;pointer-events:none;" aria-hidden="true"> 1514 <label class="sr-only"> 1515 Leave this field empty </label> 1516 <input 1517 type="text" 1518 name="rwp_website" 1519 x-model="formData.rwp_website" 1520 value="" 1521 tabindex="-1" 1522 autocomplete="off" 1523 > 1524 </div> 1525 <div class="space-y-3"> 1526 1527 <div> 1528 <label for="member-name" class="sr-only block text-sm font-medium text-rwp-widget-text mb-1.5 text-left">Name</label> 1529 <input 1530 type="text" 1531 id="member-name" 1532 x-model="formData.name" 1533 class="bg-white text-base w-full px-3 py-3 rounded-lg outline-1 -outline-offset-1 outline-gray-200 placeholder:text-gray-400 focus:outline-2 focus:-outline-offset-2 focus:outline-blue-500" 1534 placeholder="Your name" 1535 required 1536 > 1537 </div> 1538 <div> 1539 <label for="member-email" class="sr-only block text-sm font-medium text-rwp-widget-text mb-1.5 text-left">Email</label> 1540 <input 1541 type="email" 1542 id="member-email" 1543 x-model="formData.email" 1544 class="bg-white text-base w-full px-3 py-3 rounded-lg outline-1 -outline-offset-1 outline-gray-200 placeholder:text-gray-400 focus:outline-2 focus:-outline-offset-2 focus:outline-blue-500" 1545 placeholder="Your email" 1546 required 1547 > 1548 </div> 1549 1550 <button 1551 type="submit" 1552 tabindex="0" 1553 x-bind:disabled="isSubmitting" 1554 x-bind:class="isSubmitting ? 'opacity-50 cursor-not-allowed' : (isAdminPreview || isDemo) ? '!cursor-not-allowed' : 'hover:bg-rwp-brand-hover'" 1555 x-bind:data-preview-disabled="(isAdminPreview || isDemo) ? 'true' : null" 1556 x-bind:data-tippy-content="(isAdminPreview || isDemo) ? 'Disabled for preview' : null" 1557 class="bg-rwp-brand text-rwp-widget-button-text text-sm font-semibold rounded-lg cursor-pointer transition-colors hover:bg-rwp-brand-hover disabled:hover:bg-rwp-brand disabled:opacity-50 disabled:cursor-not-allowed focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500
1557w-full py-3 px-8 min-h-[48px] mx-auto grid grid-cols-1 grid-rows-1 [grid-template-areas:'stack'] place-items-center" 1558 data-highlight="success-state" 1559 data-become-member-btn 1560 x-bind:aria-label="isSubmitting ? 'Creating account...' : 'Create my account'" 1561 > 1562 <span 1563 class="[grid-area:stack] transition-opacity duration-200" 1564 x-bind:class="{ 'invisible': isSubmitting, 'visible': !isSubmitting }" 1565 >Create my account</span> 1566 <svg class="w-5 h-5 animate-spin [grid-area:stack] transition-opacity duration-200" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" x-bind:class="{ 'invisible': isSubmitting !== true, 'visible': isSubmitting === true }"><desc>Loading spinner icon</desc><circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle><path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path></svg> </button> 1567 </div> 1568 1569 1570 </form> 1571 1572 <!-- Error State for Register Screen --> 1573 <div x-show="showError && currentScreen === 'register'" x-transition:enter="transition-opacity duration-300" x-transition:enter-start="opacity-0" x-transition:enter-end="opacity-100" style="display: none;" class="mt-4"> 1574 <div class="bg-red-50 border border-red-200 rounded-lg p-4"> 1575 <div class="flex items-center"> 1576 <svg class="size-5 text-red-400 mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24"> 1577 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path> 1578 </svg> 1579 <span class="text-sm text-red-700 text-left" x-html="errorMessage"></span> 1580 </div> 1581 </div> 1582 </div> 1583 1584 <button 1585 x-show="(!showForm || currentScreen !== 'register') && !(isGuestMember && showGuestConfirmation)" 1586 x-on:click="if (!isAdminPreview && !isDemo) { if (isGuestMember && userData.email) { window.dispatchEvent(new CustomEvent('rewardswp-join-with-email', { detail: { email: userData.email, name: userData.name } })); } handleJoinClick(); } else { currentScreen = 'register'; showForm = true; showError = false; }" 1587 class="bg-rwp-brand text-rwp-widget-button-text text-sm font-semibold rounded-lg cursor-pointer transition-colors hover:bg-rwp-brand-hover disabled:hover:bg-rwp-brand disabled:opacity-50 disabled:cursor-not-allowed focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 w-full py-3 px-8 min-h-[48px] mx-auto grid grid-cols-1 grid-rows-1 [grid-template-areas:'stack'] place-items-center" 1588 data-highlight="success-state" 1589 data-become-member-btn 1590 x-bind:aria-label="'Join now to become a member'" 1591 tabindex="0" 1592 > 1593 Join now </button> 1594 1595 <p class="text-sm mt-4"> 1596 Already have an account? <button 1597 x-on:click="currentScreen = 'login'; showForm = true; showError = false;" 1598 class="font-medium underline text-rwp-accent cursor-pointer" 1599 tabindex="0" 1600 >Sign in</button> 1601 </p> 1602 </div> 1603 1604 <!-- Login Screen --> 1605 <div class="text-center" x-show="currentScreen === 'login'" x-transition:enter="transition-all duration-300 ease-out" x-transition:enter-start="opacity-0 -translate-y-4 scale-95" x-transition:enter-end="opacity-100 translate-y-0 scale-100"> 1606 <h2 class="text-base font-semibold text-rwp-widget-heading mb-2">Sign in to your account</h2> 1607 <p class="text-sm mb-6">Welcome back! Sign in to access your rewards.</p> 1608 1609 <!-- Login Form --> 1610 <form x-on:submit.prevent="if (!isAdminPreview && !isDemo) { handleLogin() }" class="mb-4"> 1611 <div class="space-y-3"> 1612 <div> 1613 <label for="login-email" class="sr-only block text-sm font-medium text-rwp-widget-text mb-2 text-left">Email or Username</label> 1614 <input 1615 type="text" 1616 id="login-email" 1617 x-model="formData.email" 1618 class="bg-white text-base w-full px-3 py-3 rounded-lg outline-1 -outline-offset-1 outline-gray-200 placeholder:text-gray-400 focus:outline-2 focus:-outline-offset-2 focus:outline-blue-500" 1619 placeholder="Your email or username" 1620 required 1621 > 1622 </div> 1623 <div> 1624 <label for="login-password" class="sr-only block text-sm font-medium text-rwp-widget-text mb-2 text-left">Password</label> 1625 <input 1626 type="password" 1627 id="login-password" 1628 x-model="formData.password" 1629 class="bg-white text-base w-full px-3 py-3 rounded-lg outline-1 -outline-offset-1 outline-gray-200 placeholder:text-gray-400 focus:outline-2 focus:-outline-offset-2 focus:outline-blue-500" 1630 placeholder="Your password" 1631 required 1632 > 1633 </div> 1634 1635 <button 1636 type="submit" 1637 tabindex="0" 1638 x-bind:disabled="isSubmitting" 1639 x-bind:class="isSubmitting ? 'opacity-50 cursor-not-allowed' : (isAdm
1639inPreview || isDemo) ? '!cursor-not-allowed' : 'hover:bg-rwp-button-hover'" 1640 x-bind:data-preview-disabled="(isAdminPreview || isDemo) ? 'true' : null" 1641 x-bind:data-tippy-content="(isAdminPreview || isDemo) ? 'Disabled for preview' : null" 1642 class="bg-rwp-brand text-rwp-widget-button-text text-sm font-semibold rounded-lg cursor-pointer transition-colors hover:bg-rwp-brand-hover disabled:hover:bg-rwp-brand disabled:opacity-50 disabled:cursor-not-allowed focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 w-full py-3 px-8 min-h-[48px] mx-auto grid grid-cols-1 grid-rows-1 [grid-template-areas:'stack'] place-items-center" 1643 > 1644 <span 1645 class="[grid-area:stack] transition-opacity duration-200" 1646 x-bind:class="{ 'invisible': isSubmitting, 'visible': !isSubmitting }" 1647 >Sign in</span> 1648 <svg class="w-5 h-5 animate-spin [grid-area:stack] transition-opacity duration-200" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" x-bind:class="{ 'invisible': isSubmitting !== true, 'visible': isSubmitting === true }"><desc>Loading spinner icon</desc><circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle><path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path></svg> </button> 1649 1650 </div> 1651 1652 1653 </form> 1654 1655 <!-- Error State for Login Screen --> 1656 <div x-show="showError && currentScreen === 'login'" x-transition:enter="transition-opacity duration-300" x-transition:enter-start="opacity-0" x-transition:enter-end="opacity-100" style="display: none;" class="mb-4"> 1657 <div class="bg-red-50 border border-red-200 rounded-lg p-4"> 1658 <div class="flex items-center"> 1659 <svg class="size-5 text-red-400 mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24"> 1660 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path> 1661 </svg> 1662 <span class="text-sm text-red-700 text-left" x-html="errorMessage"></span> 1663 </div> 1664 </div> 1665 </div> 1666 1667 <p class="text-sm"> 1668 Don't have an account? <button 1669 x-on:click="currentScreen = 'register'; showForm = true; showError = false;" 1670 class="font-medium underline text-rwp-accent cursor-pointer" 1671 tabindex="0" 1672 >Join now</button> 1673 </p> 1674 </div> 1675 </div> 1676 </div> 1677 </div> 1678 1679 <!-- Points Section for Non-Members --> 1680 <div x-show="memberId === 0 && pointsEnabled"> 1681 1682 <div class="bg-white rounded-lg px-4 py-6 relative text-rwp-widget-text shadow-card"> 1683 <!-- Points System Preview --> 1684 <div class="mb-6 text-center"> 1685 <h3 class="text-base font-semibold text-rwp-widget-heading mb-2" x-text="currencyPlural"></h3> 1686 <p class="text-sm" x-text="'Earn %s for completing different actions, and turn them into rewards.'.replace('%s', currencyPlural.toLowerCase())"></p> 1687 </div> 1688 1689 1690 <!-- Navigation Items --> 1691 <div> 1692 <button x-on:click="navigateToPanel('ways-to-earn')" class="w-full hover:bg-gray-50 text-left px-4 py-3 rounded-lg flex items-center justify-between transition-colors cursor-pointer focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500"> 1693 <div class="flex items-center gap-4"> 1694 <div class="size-8 rounded-lg flex items-center justify-center text-gray-700"> 1695 <svg class="size-8" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> 1696 <desc> 1697 Earn icon 1698 </desc> 1699 <path d="m0.75 14.25 0 9" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 1700 <path d="M0.75 21.75h15a3 3 0 0 0 -3 -3H9a3 3 0 0 0 -3 -3H0.75" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 1701 <path d="m6 18.75 3 0" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 1702 <path d="M15.75 13.875 9.358 7.207a3.785 3.785 0 0 1 -0.709 -4.366h0a3.782 3.782 0 0 1 6.057 -0.983L15.75 2.9l1.044 -1.044a3.782 3.782 0 0 1 6.057 0.983h0a3.783 3.783 0 0 1 -0.709 4.366Z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 1703 </svg> </div> 1704 <span class="text-sm text-rwp-widget-heading font-medium">Ways to earn</span> 1705 </div> 1706 <svg class="size-5 text-gray-400" fill="none" stroke="currentColor" viewbox="0 0 24 24" stroke-width="1.5"> 1707 <path stroke-linecap="round" stroke-linejoin="round" d="M8.25 4.5l7.5 7.5-7.5 7.5"></path> 1708 </svg> 1709 </button> 1710 1711 <button x-on:click="navigateToPanel('ways-to-redeem')" class="w-full hover:bg-gray-50 text-left px-4 py-3 rounded-lg flex items-center justify-between transition-colors cursor-pointer focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500"> 1712 <div class="flex items-center gap-4"> 1713 <div class="size-8 rounded-lg flex items-center justify-center text-gray-700"> 1714 <svg class="size-8" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24"><desc>Free product icon</desc><g><g><path d="M15.75 23.24a3 3 0 0 0 -3 -3H9a3 3 0 0 0 -3 -3H0.75v6Z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path><path d="m6 20.24 3 0" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path></g><path d="M16.5 17.74H21a0.76 0.76 0 0 0 0.75 -0.75v-6.75" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path><path d="m8.25 10.24 0 4" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path><path d="M7.5 5.99h15s0.75 0 0.75 0.75v2.75s0 0.75 -0.75 0.75h-15s-0.75 0 -0.75 -0.75V6.74s0 -0.75 0.75 -0.75" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path><path d="m15 15.24 0 -9.25" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path><path d="M19.27 3.87A11.84 11.84 0 0 1 15 6a11.93 11.93 0 0 1 2.12 -4.24C18.46 0.43 19.21 0.63 19.8 1.22s0.78 1.33 -0.53 2.65Z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path><path d="M10.73 3.87A11.84 11.84 0 0 0 15 6a11.93 11.93 0 0 0 -2.12 -4.24C11.54 0.43 10.79 0.63 10.2 1.22
1714s-0.78 1.33 0.53 2.65Z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path></g></svg> </div> 1715 <span class="text-sm text-rwp-widget-heading font-medium">Ways to redeem</span> 1716 </div> 1717 <svg class="size-5 text-gray-400" fill="none" stroke="currentColor" viewbox="0 0 24 24" stroke-width="1.5"> 1718 <path stroke-linecap="round" stroke-linejoin="round" d="M8.25 4.5l7.5 7.5-7.5 7.5"></path> 1719 </svg> 1720 </button> 1721 </div> 1722 </div> 1723 </div> 1724 1725 <!-- Referrals Section for Non-Members --> 1726 <div x-show="memberId === 0 && referralsEnabled"> 1727 <div class="bg-white rounded-lg px-4 py-6 relative text-rwp-widget-text shadow-card text-center"> 1728 <h2 class="text-base font-semibold text-rwp-widget-heading mb-2">Refer your friends</h2> 1729 <!-- Description changes based on whether friend reward exists --> 1730 <p class="text-sm mb-4"> 1731 Share your link with friends. They get a reward and you earn one when they purchase. </p> 1732 1733 <div class="py-3b"> 1734 <!-- Advocate reward --> 1735 <div class="flex items-center justify-between px-4 py-3"> 1736 <div class="flex items-center gap-4"> 1737 <div class="size-8 flex items-center justify-center shrink-0 text-gray-700"> 1738 <svg class="size-8" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> 1739 <desc> 1740 Fixed amount discount icon 1741 </desc> 1742 <path d="M19.575 8.25a3.755 3.755 0 0 1 3.049 -2.95 0.749 0.749 0 0 0 0.626 -0.738V2.25a1.5 1.5 0 0 0 -1.5 -1.5H2.25a1.5 1.5 0 0 0 -1.5 1.5v2.314a0.747 0.747 0 0 0 0.626 0.738 3.751 3.751 0 0 1 0 7.4 0.75 0.75 0 0 0 -0.626 0.739v2.309a1.5 1.5 0 0 0 1.5 1.5h6" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 1743 <path d="m8.25 14.25 0 -1.5" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 1744 <path d="m8.25 9.75 0 -1.5" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 1745 <path d="m8.25 5.25 0 -1.5" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 1746 <path d="M18.75 14.25h-2.033a1.342 1.342 0 0 0 -0.5 2.588l2.064 0.825a1.342 1.342 0 0 1 -0.5 2.587H15.75" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 1747 <path d="m17.25 14.25 0 -0.75" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 1748 <path d="m17.25 21 0 -0.75" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 1749 <path d="M11.25 17.25a6 6 0 1 0 12 0 6 6 0 1 0 -12 0Z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 1750 </svg> </div> 1751 <div class="flex-1 text-left"> 1752 <div class="font-medium text-rwp-widget-heading text-sm">You get</div> 1753 <div class="text-sm"> 1754 $5 off coupon </div> 1755 </div> 1756 </div> 1757 <div class="size-5"></div> 1758 </div> 1759 <!-- Friend reward --> 1760 <div class="flex items-center justify-between px-4 py-3"> 1761 <div class="flex items-center gap-4"> 1762 <div class="size-8 flex items-center justify-center flex-shrink-0 text-gray-700"> 1763 <svg class="size-8" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> 1764 <desc> 1765 Fixed amount discount icon 1766 </desc> 1767 <path d="M19.575 8.25a3.755 3.755 0 0 1 3.049 -2.95 0.749 0.749 0 0 0 0.626 -0.738V2.25a1.5 1.5 0 0 0 -1.5 -1.5H2.25a1.5 1.5 0 0 0 -1.5 1.5v2.314a0.747 0.747 0 0 0 0.626 0.738 3.751 3.751 0 0 1 0 7.4 0.75 0.75 0 0 0 -0.626 0.739v2.309a1.5 1.5 0 0 0 1.5 1.5h6" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 1768 <path d="m8.25 14.25 0 -1.5" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 1769 <path d="m8.25 9.75 0 -1.5" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 1770 <path d="m8.25 5.25 0 -1.5" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 1771 <path d="M18.75 14.25h-2.033a1.342 1.342 0 0 0 -0.5 2.588l2.064 0.825a1.342 1.342 0 0 1 -0.5 2.587H15.75" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 1772 <path d="m17.25 14.25 0 -0.75" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 1773 <path d="m17.25 21 0 -0.75" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 1774 <path d="M11.25 17.25a6 6 0 1 0 12 0 6 6 0 1 0 -12 0Z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 1775 </svg> </div> 1776 <div class="flex-1 text-left"> 1777 <div class="font-medium text-rwp-widget-heading text-sm">They get</div> 1778 <div class="text-sm"> 1779 $10 off coupon </div> 1780 </div>
1781 </div> 1782 <div class="size-5"></div> 1783 </div> 1784 </div> 1785 </div> 1786 </div> 1787 1788 1789 <div 1790 x-show="availableRewardsCount > 0 && memberId > 0" 1791 x-transition:enter="transition-opacity duration-300 ease-out" 1792 x-transition:enter-start="opacity-0" 1793 x-transition:enter-end="opacity-100" 1794 x-transition:leave="transition-opacity duration-200 ease-in" 1795 x-transition:leave-start="opacity-100" 1796 x-transition:leave-end="opacity-0" 1797 class="bg-white rounded-lg p-4 py-3 text-rwp-widget-text shadow-card" 1798 > 1799 <button 1800 x-on:click="navigateToPanel('your-rewards')" 1801 class="w-full hover:bg-gray-50 text-left px-4 py-3 rounded-lg flex items-center justify-between transition-colors cursor-pointer focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500" 1802 > 1803 <div class="flex-1"> 1804 <div class="text-base font-semibold text-rwp-widget-heading"> 1805 Your rewards </div> 1806 <div class="text-sm text-gray-500"> 1807 <span x-text="availableRewardsCount === 1 ? 1808 'You have 1 reward available' : 1809 'You have ' + availableRewardsCount + ' rewards available'"></span> 1810 </div> 1811 </div> 1812 <svg class="size-5 text-gray-400" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke-width="1.5" stroke="currentColor"><desc>Chevron right icon</desc><path stroke-linecap="round" stroke-linejoin="round" d="m8.25 4.5 7.5 7.5-7.5 7.5" /></svg> </button> 1813 </div> 1814 1815 1816 <div class="bg-white rounded-lg px-4 py-6 relative text-rwp-widget-text shadow-card" x-show="memberId > 0 && pointsEnabled" x-bind:class="navigationDirection === 'initial' ? 'rwp-stagger-fade-up rwp-stagger-2' : (navigationDirection === 'back' ? 'rwp-stagger-slide-left rwp-stagger-2' : '')"> 1817 1818 1819 1820 <button 1821 x-on:click="navigateToPanel('ways-to-earn')" 1822 class="w-full hover:bg-gray-50 text-left px-4 py-3 rounded-lg flex items-center justify-between transition-colors cursor-pointer focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500" 1823 > 1824 <div class="flex items-center gap-4"> 1825 <div class="size-8 flex items-center justify-center flex-shrink-0 text-rwp-widget-icon-text"> 1826 <svg class="size-8" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> 1827 <desc> 1828 Earn icon 1829 </desc> 1830 <path d="m0.75 14.25 0 9" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 1831 <path d="M0.75 21.75h15a3 3 0 0 0 -3 -3H9a3 3 0 0 0 -3 -3H0.75" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 1832 <path d="m6 18.75 3 0" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 1833 <path d="M15.75 13.875 9.358 7.207a3.785 3.785 0 0 1 -0.709 -4.366h0a3.782 3.782 0 0 1 6.057 -0.983L15.75 2.9l1.044 -1.044a3.782 3.782 0 0 1 6.057 0.983h0a3.783 3.783 0 0 1 -0.709 4.366Z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 1834 </svg> </div> 1835 <span class="text-sm text-rwp-widget-heading font-medium">Ways to earn</span> 1836 </div> 1837 <svg class="size-5 text-gray-400" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke-width="1.5" stroke="currentColor"><desc>Chevron right icon</desc><path stroke-linecap="round" stroke-linejoin="round" d="m8.25 4.5 7.5 7.5-7.5 7.5" /></svg> </button> 1838 <button 1839 x-on:click="navigateToPanel('ways-to-redeem')" 1840 class="w-full hover:bg-gray-50 text-left px-4 py-3 rounded-lg flex items-center justify-between transition-colors cursor-pointer focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500" 1841 > 1842 <div class="flex items-center gap-4"> 1843 <div class="size-8 flex items-center justify-center flex-shrink-0 text-rwp-widget-icon-text"> 1844 <svg class="size-8" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24"><desc>Free product icon</desc><g><g><path d="M15.75 23.24a3 3 0 0 0 -3 -3H9a3 3 0 0 0 -3 -3H0.75v6Z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path><path d="m6 20.24 3 0" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path></g><path d="M16.5 17.74H21a0.76 0.76 0 0 0 0.75 -0.75v-6.75" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path><path d="m8.25 10.24 0 4" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path><path d="M7.5 5.99h15s0.75 0 0.75 0.75v2.75s0 0.75 -0.75 0.75h-15s-0.75 0 -0.75 -0.75V6.74s0 -0.75 0.75 -0.75" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path><path d="m15 15.24 0 -9.25" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path><path d="M19.27 3.87A11.84 11.84 0 0 1 15 6a11.93 11.93 0 0 1 2.12 -4.24C18.46 0.43 19.21 0.63 19.8 1.22s0.78 1.33 -0.53 2.65Z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path><path d="M10.73 3.87A11.84 11.84 0 0 0 15 6a11.93 11.93 0 0 0 -2.12 -4.24C11.54 0.43 10.79 0.63 10.2 1.22
1844s-0.78 1.33 0.53 2.65Z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path></g></svg> </div> 1845 <span class="text-sm text-rwp-widget-heading font-medium">Ways to redeem</span> 1846 </div> 1847 <svg class="size-5 text-gray-400" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke-width="1.5" stroke="currentColor"><desc>Chevron right icon</desc><path stroke-linecap="round" stroke-linejoin="round" d="m8.25 4.5 7.5 7.5-7.5 7.5" /></svg> </button> 1848 </div> 1849 1850 1851 <div id="refer-your-friends-section" class="bg-white rounded-lg px-4 py-6 relative text-rwp-widget-text shadow-card" x-show="memberId > 0 && referralsEnabled" x-bind:class="navigationDirection === 'initial' ? 'rwp-stagger-fade-up rwp-stagger-3' : (navigationDirection === 'back' ? 'rwp-stagger-slide-left rwp-stagger-3' : '')"> 1852 <h2 class="text-base font-semibold text-rwp-widget-heading mb-2 text-left pl-4">Refer your friends</h2> 1853 1854 1855 1856 <!-- Advocate reward --> 1857 <div class="flex items-center justify-between" 1858 > 1859 <div class="flex items-center gap-4 px-4 py-3"> 1860 <div class="size-8 flex items-center justify-center flex-shrink-0 text-rwp-widget-icon-text" 1861 > 1862 <svg class="size-8" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> 1863 <desc> 1864 Fixed amount discount icon 1865 </desc> 1866 <path d="M19.575 8.25a3.755 3.755 0 0 1 3.049 -2.95 0.749 0.749 0 0 0 0.626 -0.738V2.25a1.5 1.5 0 0 0 -1.5 -1.5H2.25a1.5 1.5 0 0 0 -1.5 1.5v2.314a0.747 0.747 0 0 0 0.626 0.738 3.751 3.751 0 0 1 0 7.4 0.75 0.75 0 0 0 -0.626 0.739v2.309a1.5 1.5 0 0 0 1.5 1.5h6" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 1867 <path d="m8.25 14.25 0 -1.5" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 1868 <path d="m8.25 9.75 0 -1.5" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 1869 <path d="m8.25 5.25 0 -1.5" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 1870 <path d="M18.75 14.25h-2.033a1.342 1.342 0 0 0 -0.5 2.588l2.064 0.825a1.342 1.342 0 0 1 -0.5 2.587H15.75" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 1871 <path d="m17.25 14.25 0 -0.75" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 1872 <path d="m17.25 21 0 -0.75" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 1873 <path d="M11.25 17.25a6 6 0 1 0 12 0 6 6 0 1 0 -12 0Z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 1874 </svg> </div> 1875 <div class="flex-1 text-left"> 1876 <div class="font-medium text-rwp-widget-heading text-sm">You get</div> 1877 <div class="text-sm" 1878 > 1879 $5 off coupon </div> 1880 </div> 1881 </div> 1882 <div class="size-5"></div> 1883 </div> 1884 <!-- Friend reward --> 1885 <div class="flex items-center justify-between" 1886 > 1887 <div class="flex items-center gap-4 px-4 py-3"> 1888 <div class="size-8 flex items-center justify-center flex-shrink-0 text-rwp-widget-icon-text" 1889 > 1890 <svg class="size-8" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> 1891 <desc> 1892 Fixed amount discount icon 1893 </desc> 1894 <path d="M19.575 8.25a3.755 3.755 0 0 1 3.049 -2.95 0.749 0.749 0 0 0 0.626 -0.738V2.25a1.5 1.5 0 0 0 -1.5 -1.5H2.25a1.5 1.5 0 0 0 -1.5 1.5v2.314a0.747 0.747 0 0 0 0.626 0.738 3.751 3.751 0 0 1 0 7.4 0.75 0.75 0 0 0 -0.626 0.739v2.309a1.5 1.5 0 0 0 1.5 1.5h6" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 1895 <path d="m8.25 14.25 0 -1.5" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 1896 <path d="m8.25 9.75 0 -1.5" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 1897 <path d="m8.25 5.25 0 -1.5" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 1898 <path d="M18.75 14.25h-2.033a1.342 1.342 0 0 0 -0.5 2.588l2.064 0.825a1.342 1.342 0 0 1 -0.5 2.587H15.75" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 1899 <path d="m17.25 14.25 0 -0.75" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 1900 <path d="m17.25 21 0 -0.75" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 1901 <path d="M11.25 17.25a6 6 0 1 0 12 0 6 6 0 1 0 -12 0Z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 1902 </svg> </div> 1903 <div class="flex-1 text-left"> 1904 <div class="font-medium text-rwp-widget-heading text-sm">They get</div> 1905 <div class="text-sm text-gray-700" 1906 > 1907 $10 off coupon </div> 1908 </div> 1909 </div> 1910 <div class="size-5"></div>
1911 </div> 1912 1913 1914 <!-- Referral link input --> 1915 <div> 1916 <label for="referral-link-input" class="block font-medium text-gray-900 sr-only text-sm/6">Invite link</label> 1917 <div class="mt-2"> 1918 <div x-data="{ isCheckmark: false }" class="flex bg-white rounded-lg outline-1 -outline-offset-1 outline-gray-200"> 1919 <input 1920 x-on:click="handleCopyClick($el, null, false)" 1921 id="referral-link-input" 1922 type="text" 1923 readonly 1924 class="block min-w-0 pl-5 py-3 text-sm text-gray-900 cursor-pointer grow focus:outline-none sm:text-sm/6 text-ellipsis" 1925 x-bind:value="userData.referralLink || 'https://yoursite.com/?share=df04c90'" 1926 x-ref="referralInput"> 1927 1928 <div class="flex"> 1929 <button 1930 x-on:click="handleCopyClick($refs.referralInput, $data)" 1931 class="py-3 px-3 relative transition-all duration-200 cursor-pointer" 1932 x-bind:class="{ 'hover:text-gray-900 text-gray-500': !isCheckmark}" 1933 x-ref="copyButton"> 1934 <div class="relative size-6"> 1935 <div class="absolute inset-0 transition-all duration-300 ease-in-out" 1936 x-bind:class="isCheckmark ? 'opacity-0 scale-95' : 'opacity-100 scale-100'"> 1937 <svg class="size-6" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="-1 -1 24 24"><desc>Copy to clipboard icon</desc><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M17.875 6.645833333333333h2.520833333333333c0.506275 0 0.9166666666666666 0.41041 0.9166666666666666 0.9166666666666666v12.833333333333332c0 0.506275 -0.41039166666666665 0.9166666666666666 -0.9166666666666666 0.9166666666666666h-12.833333333333332c-0.5062658333333333 0 -0.9166666666666666 -0.41039166666666665 -0.9166666666666666 -0.9166666666666666V17.875" stroke-width="2"></path><path stroke="currentColor" stroke-linejoin="round" d="M0.6875 1.6041666666666665c0 -0.5062658333333333 0.41041 -0.9166666666666666 0.9166666666666666 -0.9166666666666666h12.833333333333332c0.506275 0 0.9166666666666666 0.41041 0.9166666666666666 0.9166666666666666v12.833333333333332c0 0.506275 -0.41039166666666665 0.9166666666666666 -0.9166666666666666 0.9166666666666666h-12.833333333333332c-0.5062658333333333 0 -0.9166666666666666 -0.41039166666666665 -0.9166666666666666 -0.9166666666666666v-12.833333333333332Z" stroke-width="2"></path></svg> </div> 1938 <div class="absolute inset-0 transition-all duration-300 ease-in-out" 1939 x-bind:class="isCheckmark ? 'opacity-100 scale-100' : 'opacity-0 scale-95'"> 1940 <svg class="size-6" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke="currentColor"><desc>Checkmark icon</desc><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"></path></svg> </div> 1941 </div> 1942 </button> 1943 </div> 1944 </div> 1945 </div> 1946 </div> 1947 1948 <div x-data="{ showMore: false }" x-show="sharing.email || sharing.x || sharing.facebook" x-cloak> 1949 <div class="grid grid-cols-4 mt-6"> 1950 <a href="/cdn-cgi/l/email-protection#9ba4e8eef9f1fef8efa6dabea9abf7f2efeff7febea9abfcf2fdefbea9abfdf4e9bea9abe2f4eebea9aabdfaf6eba0f9f4ffe2a6d3fee9febea9ace8bea9abe8f4f6feeff3f2f5fcbea9d8bea9abd2bea9abfceefee8e8b5bea9abc2f4eebea9abf8faf5bea9abfcfeefbea9abfabea9abbea9afaaabbea9abf4fdfdbea9abf8f4eeebf4f5bea9abfdf4e9bea9abe2f4eee9bea9abfdf2e9e8efbea9abebeee9f8f3fae8febea9abfaefbea9abd7f2e8efbea9abf4f5bea9abd6d7c8bea9abbea9adbea9abc9dedad7cfd4c9b5f8f4f6bea9d9bea9abfde9f4f6bea9abbea9afacaeb5bea9d8bea9abf2fdbea9abeff3faefbea9ace8bea9abfeedfef5bea9abecf4e9eff3bea9abe2f4eee9bea9abeff2f6feb5beabdfbeabdabeabdfbeabdad8f7f2f8f0bea9abeff3f2e8bea9abf7f2f5f0bea9d8bea9abf4e9bea9abfff4f5bea9acefbea9d8bea9abecf3faeffeedfee9bea8dabea9abbea9abbeabdfbeabdaf3efefebe8bea8dabea9ddbea9ddf1faf8f0f0fef7f7fee9b5f8f4f6bea9ddebe9feedf2feecbeabdabeabda" target="_self" rel="noopener noreferrer" class="flex flex-col items-center justify-center min-w-[2.75rem] min-h-[2.75rem] p-2 text-gray-600 hover:text-gray-900 hover:bg-gray-50 transition-all duration-200 ease-out rounded-lg cursor-pointer" x-on:click="handleShareClick('email', $event)"> 1951 <svg class="size-6 shrink-0" fill="none" stroke="currentColor" viewbox="0 0 24 24" stroke-width="1.5"><desc>Envelope (email) icon</desc><path stroke-linecap="round" stroke-linejoin="round" d="M21.75 6.75v10.5a2.25 2.25 0 01-2.25 2.25h-15a2.25 2.25 0 01-2.25-2.25V6.75m19.5 0A2.25 2.25 0 0019.5 4.5h-15a2.25 2.25 0 00-2.25 2.25m19.5 0v.243a2.25 2.25 0 01-1.07 1.916l-7.5 4.615a2.25 2.25 0 01-2.36 0L3.32 8.91a2.25 2.25 0 01-1.07-1.916V6.75" /></svg> <span class="text-xs mt-1">Email</span> 1952 </a> 1953 <a href="https://twitter.com/intent/tweet?url=https%3A%2F%2Fjackkeller.com%2Fpreview&text=Visit%20List%20on%20MLS%20%26amp%3B%20REALTOR.com%2B%20from%20%2475.%20to%20receive%20your%20free%20gift%21" target="_blank" rel="noopener noreferrer" class="flex flex-col items-center justify-center min-w-[2.75rem] min-h-[2.75rem] p-2 text-gray-600 hover:text-gray-900 hover:bg-gray-50 transition-all duration-200 ease-out rounded-lg cursor-pointer" x-on:click="handleShareClick('twitter', $event)"> 1954 <svg class="size-6 shrink-0" viewbox="0 0 24 24" fill="currentColor"><desc>X (formerly Twitter) logo</desc><path d="M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z" /></svg> <span class="text-xs mt-1">X</span> 1955 </a> 1956 <a href="https://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Fjackkeller.com%2Fpreview" target="_blank" rel="noopener noreferrer" class="flex flex-col items-center justify-center min-w-[2.75rem] min-h-[2.75rem] p-2 text-gray-600 hover:text-gray-900 hover:bg-gray-50 transition-all duration-200 ease-out rounded-lg cursor-pointer" x-on:click="handleShareClick('facebook', $event)"> 1957 <svg class="size-6 shrink-0" fill="currentColor" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><desc>Facebook logo</desc><path d="M24 12.073c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.99 4.388 10.954 10.125 11.854v-8.385H7.078v-3.47h3.047V9.43c0-3.007 1.792-4.669 4.533-4.669 1.312 0 2.686.235 2.686.235v2.953H15.83c-1.491 0-1.956.925-1.956 1.874v2.25h3.328l-.532 3.47h-2.796v8.385C19.612 23.027 24 18.062 24 12.073z" /></svg> <span class="text-xs mt-1">Facebook</span> 1958 </a> 1959 1960 </div> 1961 1962 <!-- Overflow Menu --> 1963 <div x-show="showMore" x-cloak class="mt-4 border-t border-gray-100 pt-4"> 1964 <div class="grid grid-cols-4 gap-2"> 1965 </div> 1966 </div> 1967 </div> 1968 </div> 1969 1970 <div 1971 x-show="memberId > 0 && (pointsEnabled || referralsEnabled)" 1972 x-transition:enter="transition-opacity duration-300 ease-out" 1973 x-transition:enter-start="opacity-0" 1974 x-transition:enter-end="opacity-100" 1975 x-transition:leave="transition-opacity duration-200 ease-in" 1976 x-transition:leave-start="opacity-100" 1977 x-transition:leave-end="opacity-0" 1978 class="bg-white rounded-lg p-4 py-3 text-rwp-widget-text shadow-card"
1979 x-bind:class="navigationDirection === 'initial' ? 'rwp-stagger-fade-up rwp-stagger-4' : (navigationDirection === 'back' ? 'rwp-stagger-slide-left rwp-stagger-4' : '')" 1980 > 1981 <button 1982 x-on:click="navigateToPanel('activity')" 1983 class="w-full hover:bg-gray-50 text-left px-4 py-3 rounded-lg flex items-center justify-between transition-colors cursor-pointer focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500" 1984 > 1985 <div class="flex items-center gap-4"> 1986 <div class="size-8 flex items-center justify-center flex-shrink-0 text-rwp-widget-icon-text"> 1987 <svg class="size-8" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> 1988 <desc> 1989 Clock history icon 1990 </desc> 1991 <path d="M13.5 22a9.75 9.75 0 1 0 -9.75 -9.75V13" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 1992 <path d="m0.75 9.997 3 3 3 -3" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 1993 <path d="m12.75 6.247 0 6.75 5.25 0" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 1994 </svg> </div> 1995 <span class="text-sm text-rwp-widget-heading font-medium">Your activity</span> 1996 </div> 1997 <svg class="size-5 text-gray-400" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke-width="1.5" stroke="currentColor"><desc>Chevron right icon</desc><path stroke-linecap="round" stroke-linejoin="round" d="m8.25 4.5 7.5 7.5-7.5 7.5" /></svg> </button> 1998 </div> 1999 </div> 2000 2001 2002 2003 2004 <div 2005 x-show="isFriendClaimMode && currentPanel === 'main'" 2006 x-transition:enter="transition-all duration-300 ease-out delay-150" 2007 x-transition:enter-start="opacity-0" 2008 x-transition:enter-end="opacity-100" 2009 x-transition:leave="transition-opacity duration-0" 2010 x-transition:leave-start="opacity-100" 2011 x-transition:leave-end="opacity-0" 2012 class="px-6 py-12 bg-rwp-widget-bg" 2013 > 2014 2015 <!-- Claim Form --> 2016 <div x-data="friendClaimForm({ 2017 nonce: 'f68cf984f4', 2018 referralCode: '', 2019 ajaxUrl: 'https://jackkeller.com/wp-admin/admin-ajax.php?rewardswp_locale=site', 2020 storeUrl: 'https://jackkeller.com/pay-now/', 2021 checkoutUrl: 'https://jackkeller.com/checkout/', 2022 cartUrl: 'https://jackkeller.com/cart-2/', 2023 cartItemCount: 0, 2024 cartProductIds: [], 2025 integrationSource: 'woocommerce', 2026 alreadyClaimed: false, 2027 existingCoupon: '', 2028 existingRewardId: null, 2029 isCouponApplied: false, 2030 isAdminPreview: false, 2031 isDemo: false, 2032 rewardType: '', 2033 freeProductId: '', 2034 rewardTitle: '', 2035 minimumOrderAmount: 0, 2036 addToCartText: 'Add to cart', 2037 claimRewardText: 'Claim reward', 2038 applyToCartText: 'Claim free product' 2039 })" class="text-rwp-widget-text"> 2040 <!-- Reward Display --> 2041 <div x-show="!showSuccess" class="text-center mb-6"> 2042 <!-- Centered Icon (match success screen) --> 2043 <div class="flex justify-center mb-2"> 2044 <svg class="size-10 text-gray-700" fill="none" stroke="currentColor" viewbox="0 0 24 24" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M21 11.25v8.25a1.5 1.5 0 01-1.5 1.5H4.5a1.5 1.5 0 01-1.5-1.5v-8.25M12 4.875A2.625 2.625 0 109.375 7.5H12m0-2.625V7.5m0-2.625A2.625 2.625 0 1114.625 7.5H12m0 0V21m-8.625-9.75h18c.621 0 1.125-.504 1.125-1.125v-1.5c0-.621-.504-1.125-1.125-1.125h-18c-.621 0-1.125.504-1.125 1.125v1.5c0 .621.504 1.125 1.125 1.125z"></path></svg> </div> 2045 2046 <!-- Reward value display --> 2047 <div> 2048 <!-- Attribution eyebrow text --> 2049 <p class="text-base text-gray-600 mb-0.5"> 2050 You were sent a gift </p> 2051 2052 <!-- Large bold reward value --> 2053 <div class="text-2xl font-bold text-gray-900"> 2054 </div> 2055 </div> 2056 </div> 2057 <!-- Success State --> 2058 <div x-show="showSuccess" style="display: none"> 2059 <div class="text-center mb-6"> 2060 2061 <div class="flex justify-center mb-2"> 2062 <svg class="size-10 text-green-600" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24"><desc>Check circle alternate</desc><path d="M6 13.223 8.45 16.7a1.049 1.049 0 0 0 1.707 0.051L18 6.828" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path><path d="M0.75 11.999a11.25 11.25 0 1 0 22.5 0 11.25 11.25 0 1 0 -22.5 0Z" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path></svg> </div> 2063 2064 <!-- Reward value display --> 2065 <div> 2066 <p class="text-base text-gray-600 mt-2 mb-0.5"> 2067 You have received </p> 2068 <div class="flex items-center justify-center gap-3"> 2069 <div class="size-8 flex items-center justify-center flex-shrink-0 text-gray-700"> 2070 <svg class="size-8" fill="none" stroke="currentColor" viewbox="0 0 24 24" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M21 11.25v8.25a1.5 1.5 0 01-1.5 1.5H4.5a1.5 1.5 0 01-1.5-1.5v-8.25M12 4.875A2.625 2.625 0 109.375 7.5H12m0-2.625V7.5m0-2.625A2.625 2.625 0 1114.625 7.5H12m0 0V21m-8.625-9.75h18c.621 0 1.125-.504 1.125-1.125v-1.5c0-.621-.504-1.125-1.125-1.125h-18c-.621 0-1.125.504-1.125 1.125v1.5c0 .621.504 1.125 1.125 1.125z"></path></svg> </div> 2071 <div class="text-2xl font-bold text-gray-900" x-text="rewardTitle"> 2072 </div> 2073 </div> 2074 </div>
2075 </div> 2076 2077 <!-- Usage Instructions --> 2078 <div x-show="couponCode" class="text-sm text-gray-600 text-center mb-2 px-2"> 2079 <p>Use at checkout on your first order</p> 2080 </div> 2081 2082 <!-- Coupon Code Display (if coupon code available) --> 2083 <div x-show="couponCode" class="mb-4"> 2084 <div x-data="{ isCheckmark: false }" class="flex rounded-lg bg-white outline-1 -outline-offset-1 outline-gray-200"> 2085 <input x-on:click="handleCopyClick($refs.couponCode, null, false)" type="text" readonly class="block min-w-0 grow px-5 py-3 text-sm text-gray-900 focus:outline-none sm:text-sm/6 text-ellipsis cursor-pointer font-mono" x-ref="couponCode" x-bind:value="couponCode"> 2086 2087 <div class="flex"> 2088 <button x-on:click="handleCopyClick($refs.couponCode, $data)" class="py-3 px-3 relative transition-all duration-200 cursor-pointer" x-bind:class="{ 'hover:text-gray-900 text-gray-500': !isCheckmark}" x-ref="copyButton"> 2089 <div class="relative size-6"> 2090 <div class="absolute inset-0 transition-all duration-300 ease-in-out" x-bind:class="isCheckmark ? 'opacity-0 scale-95' : 'opacity-100 scale-100'"> 2091 <svg class="size-6" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="-1 -1 24 24"><desc>Copy to clipboard icon</desc><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M17.875 6.645833333333333h2.520833333333333c0.506275 0 0.9166666666666666 0.41041 0.9166666666666666 0.9166666666666666v12.833333333333332c0 0.506275 -0.41039166666666665 0.9166666666666666 -0.9166666666666666 0.9166666666666666h-12.833333333333332c-0.5062658333333333 0 -0.9166666666666666 -0.41039166666666665 -0.9166666666666666 -0.9166666666666666V17.875" stroke-width="2"></path><path stroke="currentColor" stroke-linejoin="round" d="M0.6875 1.6041666666666665c0 -0.5062658333333333 0.41041 -0.9166666666666666 0.9166666666666666 -0.9166666666666666h12.833333333333332c0.506275 0 0.9166666666666666 0.41041 0.9166666666666666 0.9166666666666666v12.833333333333332c0 0.506275 -0.41039166666666665 0.9166666666666666 -0.9166666666666666 0.9166666666666666h-12.833333333333332c-0.5062658333333333 0 -0.9166666666666666 -0.41039166666666665 -0.9166666666666666 -0.9166666666666666v-12.833333333333332Z" stroke-width="2"></path></svg> </div> 2092 <div class="absolute inset-0 transition-all duration-300 ease-in-out" x-bind:class="isCheckmark ? 'opacity-100 scale-100' : 'opacity-0 scale-95'"> 2093 <svg class="size-6" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke="currentColor"><desc>Checkmark icon</desc><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"></path></svg> </div> 2094 </div> 2095 </button> 2096 </div> 2097 </div> 2098 </div> 2099 2100 2101 2102 <!-- Apply Coupon Button - Only show when NOT applied and NOT failed due to minimum spend --> 2103 <div x-show="couponCode && !couponApplied && !productAddedButCouponFailed" x-cloak class="mb-4"> 2104 <button x-on:click="applyCouponToCart()" x-bind:disabled="applyingCoupon" x-bind:class="{ 2105 'opacity-50 cursor-not-allowed': applyingCoupon, 2106 'hover:bg-rwp-brand-hover': !applyingCoupon 2107 }" class="bg-rwp-brand text-rwp-widget-button-text text-sm font-semibold rounded-lg cursor-pointer transition-colors hover:bg-rwp-brand-hover disabled:hover:bg-rwp-brand disabled:opacity-50 disabled:cursor-not-allowed focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 w-full py-3 px-8 min-h-[48px] mx-auto grid grid-cols-1 grid-rows-1 [grid-template-areas:'stack'] place-items-center"> 2108 <span class="[grid-area:stack] flex items-center justify-center transition-opacity duration-200" x-bind:class="{ 'invisible': applyingCoupon, 'visible': !applyingCoupon }"> 2109 <!-- Dynamic text based on reward type, cart state, and minimum spend --> 2110 <template x-if="rewardType === 'free_product'"> 2111 <span x-text="freeProductButtonText"></span> 2112 </template> 2113 <template x-if="rewardType !== 'free_product'"> 2114 <span> 2115 <span x-show="isWooCommerce">Apply to cart</span> 2116 <span x-show="!isWooCommerce">Apply coupon</span> 2117 </span> 2118 </template> 2119 </span> 2120 <svg class="w-5 h-5 animate-spin [grid-area:stack] transition-opacity duration-200" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" x-bind:class="{ &ap
2120os;invisible': applyingCoupon !== true, 'visible': applyingCoupon === true }"><desc>Loading spinner icon</desc><circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle><path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path></svg> </button> 2121 <div x-show="couponError && !productAddedButCouponFailed" class="text-sm mt-2 text-red-500" x-text="couponErrorMessage"></div> 2122 </div> 2123 2124 <!-- Success Message - Show when coupon applied --> 2125 <div x-show="couponApplied" x-cloak class="mb-1 font-medium inline-flex items-center gap-2 rounded-lg px-3 py-2 text-emerald-600 text-sm w-full justify-center"> 2126 <span> applied</span> 2127 </div> 2128 2129 <div x-show="productAddedButCouponFailed" x-cloak class="mt-3 mb-3 text-sm w-full space-y-2"> 2130 <div x-show="productWasNewlyAdded" class="text-center text-emerald-600 font-medium"> 2131 Product added to cart </div> 2132 <template> 0"> 2133 <div class="text-center text-gray-600 px-2" x-text="'Almost there — add ' + '$' + remainingToUnlock + ' more to unlock'"></div> 2134 </template>
2135 </div> 2136 2137 <!-- Buttons when coupon failed but product added --> 2138 <template x-if="productAddedButCouponFailed"> 2139 <div> 2140 <!-- Primary CTA - Continue Shopping --> 2141 <a x-bind:href="isAdminPreview ? 'javascript:void(0)' : storeUrl" x-bind:class="{ 'mb-3': isWooCommerce, '!cursor-not-allowed': isAdminPreview }" class="bg-rwp-brand text-rwp-widget-button-text text-sm font-semibold rounded-lg cursor-pointer transition-colors hover:bg-rwp-brand-hover disabled:hover:bg-rwp-brand disabled:opacity-50 disabled:cursor-not-allowed focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 w-full py-3 px-8 min-h-[48px] mx-auto flex items-center justify-center no-underline block"> 2142 Continue shopping </a> 2143 2144 <!-- Secondary CTA - View Cart (WooCommerce only) --> 2145 <template x-if="isWooCommerce"> 2146 <a x-bind:href="isAdminPreview ? 'javascript:void(0)' : 'https://jackkeller.com/cart-2/'" x-bind:class="{ '!cursor-not-allowed': isAdminPreview }" class="text-sm inline-block w-full bg-gray-100 text-gray-700 font-semibold py-3 px-8 rounded-lg hover:bg-gray-200 transition-colors text-center cursor-pointer focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 no-underline block"> 2147 View cart </a> 2148 </template> 2149 </div> 2150 </template> 2151 2152 <!-- Buttons when coupon is applied successfully --> 2153 <template x-if="couponApplied && !isCartEmpty"> 2154 <div> 2155 <!-- Primary CTA - Go to Checkout --> 2156 <a x-bind:href="isAdminPreview ? 'javascript:void(0)' : 'https://jackkeller.com/checkout/'" class="bg-rwp-brand text-rwp-widget-button-text text-sm font-semibold rounded-lg cursor-pointer transition-colors hover:bg-rwp-brand-hover disabled:hover:bg-rwp-brand disabled:opacity-50 disabled:cursor-not-allowed focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 w-full py-3 px-8 min-h-[48px] mx-auto flex items-center justify-center no-underline block" x-bind:class="{ 'mb-3': isWooCommerce, '!cursor-not-allowed': isAdminPreview }"> 2157 Go to checkout </a> 2158 2159 <!-- Secondary CTA - View Cart (WooCommerce only) --> 2160 <template x-if="isWooCommerce"> 2161 <a x-bind:href="isAdminPreview ? 'javascript:void(0)' : 'https://jackkeller.com/cart-2/'" x-bind:class="{ '!cursor-not-allowed': isAdminPreview }" class="text-sm inline-block w-full bg-gray-100 text-gray-700 font-semibold py-3 px-8 rounded-lg hover:bg-gray-200 transition-colors text-center cursor-pointer focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 no-underline block"> 2162 View cart </a> 2163 </template> 2164 </div> 2165 </template> 2166 2167 <!-- Button when coupon is applied but cart is empty --> 2168 <template x-if="couponApplied && isCartEmpty"> 2169 <div> 2170 <!-- Primary CTA - Shop Now --> 2171 <a x-bind:href="isAdminPreview ? 'javascript:void(0)' : storeUrl" x-bind:class="{ '!cursor-not-allowed': isAdminPreview }" class="bg-rwp-brand text-rwp-widget-button-text text-sm font-semibold rounded-lg cursor-pointer transition-colors hover:bg-rwp-brand-hover disabled:hover:bg-rwp-brand disabled:opacity-50 disabled:cursor-not-allowed focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 w-full py-3 px-8 min-h-[48px] mx-auto flex items-center justify-center no-underline block"> 2172 Shop now </a> 2173 <!-- No secondary button when cart is empty --> 2174 </div> 2175 </template> 2176 </div> 2177 2178 <!-- Form State --> 2179 <div x-show="!showSuccess"> 2180 <!-- Claim instruction --> 2181 <p class="text-sm text-gray-600 text-center mb-2 px-2"> 2182 Enter your email to claim it now. </p> 2183 2184 <!-- Email Form --> 2185 <form x-on:submit.prevent="if (!isAdminPreview && !isDemo) { claimReward() }" class="mb-3"> 2186 <div style="position:absolute;left:-9999px;top:-9999px;opacity:0;pointer-events:none"> 2187 <label class="sr-only"> 2188 Leave this field empty </label> 2189 <input type="text" name="rwp_website" x-model="formData.rwp_website" value=""> 2190 </div> 2191 <div class="mb-4"> 2192 2193 <label for="claim-email" class="block text-sm font-medium text-gray-700 mb-1.5 text-left sr-only">Email</label> 2194 <input type="email" id="claim-email" x-model="formData.email" class="bg-white text-base w-full px-3 py-3 rounded-lg outline-1 -outline-offset-1 outline-gray-200 placeholder:text-gray-400 focus:outline-2 focus:-outline-offset-2 focus:outline-blue-500" placeholder="[email protected]" required> 2195 2196 </div> 2197 2198 <!-- Error State --> 2199 <div x-show="showError" x-transition:enter="transition-opacity duration-300" x-transition:enter-start="opacity-0" x-transition:enter-end="opacity-100" style="display: none" class="mb-4"> 2200 <div class="bg-red-50 border border-red-200 rounded-lg p-4"> 2201 <div class="flex items-center"> 2202 <svg class="size-5 text-red-400 mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewbox="0 0 24 24"> 2203 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path> 2204 </svg> 2205 <span class="text-sm text-red-700 text-left" x-html="errorMessage"></span> 2206 </div> 2207 </div> 2208 </div> 2209 2210 <button type="submit" x-bind:disabled="isSubmitting" x-bind:class="isSubmitting ? 'opacity-50 cursor-not-allowed'
2210 : (isAdminPreview || isDemo) ? '!cursor-not-allowed' : 'hover:bg-rwp-brand-hover'" class="bg-rwp-brand text-rwp-widget-button-text text-sm font-semibold rounded-lg cursor-pointer transition-colors hover:bg-rwp-brand-hover disabled:hover:bg-rwp-brand disabled:opacity-50 disabled:cursor-not-allowed focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 w-full py-3 px-8 min-h-[48px] mx-auto grid grid-cols-1 grid-rows-1 [grid-template-areas:'stack'] place-items-center"> 2211 <span class="[grid-area:stack] transition-opacity duration-200" x-bind:class="{ 'invisible': isSubmitting, 'visible': !isSubmitting }">Claim your gift</span> 2212 <svg class="w-5 h-5 animate-spin [grid-area:stack] transition-opacity duration-200" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" x-bind:class="{ 'invisible': isSubmitting !== true, 'visible': isSubmitting === true }"><desc>Loading spinner icon</desc><circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle><path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path></svg> </button> 2213 2214 </form> 2215 </div> 2216 2217 </div> 2218 2219 2220 2221 2222 2223 2224 2225 2226 </div> 2227 2228 2229 <div 2230 x-show="currentPanel === 'ways-to-earn'" 2231 x-bind:class="'relative h-full flex flex-col overflow-hidden ' + (currentPanel === 'ways-to-earn' ? (navigationDirection === 'initial' ? 'rwp-panel-fade-up' : (navigationDirection === 'forward' ? 'rwp-panel-slide-forward' : (navigationDirection === 'back' ? 'rwp-panel-slide-back' : ''))) : '')" 2232 x-data="{ panelAtTop: true, panelAtBottom: false }" 2233 x-effect="if (currentPanel === 'ways-to-earn') { const el = $el.querySelector('.overflow-y-auto'); if (el && el.scrollHeight > 0) { panelAtBottom = el.scrollTop + el.clientHeight >= el.scrollHeight - 5; } }" 2234 > 2235 <div class="flex-1 overflow-y-auto custom-scrollbar px-6 py-6 pb-32 text-rwp-widget-text" 2236 @scroll="panelAtTop = $el.scrollTop < 5; panelAtBottom = $el.scrollTop + $el.clientHeight >= $el.scrollHeight - 5" 2237 > 2238 2239 <h2 class="text-lg font-semibold text-rwp-widget-heading mb-3">Ways to earn</h2> 2240 2241 <div 2242 x-show="showWelcomeBanner" 2243 role="status" 2244 class="mt-3 mb-2 flex items-center justify-between gap-2 rounded-lg bg-emerald-50 px-3 py-2 text-sm text-emerald-800" 2245 style="display: none;" 2246 > 2247 <svg class="size-4" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke="currentColor"><desc>Checkmark icon</desc><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"></path></svg> <div class="flex-1"> 2248 <span x-show="welcomeBannerData.signupPoints > 0"> 2249 Welcome, <span x-text="welcomeBannerData.memberName || ''"></span>! 2250 </span> 2251 <span x-show="welcomeBannerData.signupPoints === 0 || !welcomeBannerData.signupPoints"> 2252 Welcome, <span x-text="welcomeBannerData.memberName || ''"></span>—you're in. </span> 2253 </div> 2254 <div class="ml-auto" x-show="welcomeBannerData.signupPoints > 0 || false"> 2255 +<span x-text="(welcomeBannerData.signupPoints || 0).toLocaleString()"></span> 2256 <span x-text="(welcomeBannerData.signupPoints || 0) == 1 ? 'Point' : 'Points'"></span> 2257 </div> 2258 </div> 2259 2260 <!-- Error Notification for Guest Upgrade --> 2261 <div x-show="errorMessage" class="mt-3 mb-2 rounded-lg bg-red-50 px-3 py-2 text-sm text-red-800" role="alert" style="display: none;"> 2262 <span x-text="errorMessage"></span> 2263 </div> 2264 2265 <div class="divide-y divide-gray-50"> 2266 <div 2267 class="grid grid-cols-[auto_1fr_auto] items-center gap-4 py-4" 2268 > 2269 <div class="size-8 flex items-center justify-center flex-shrink-0 text-rwp-widget-icon-text"> 2270 <svg class="size-8" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> 2271 <desc> 2272 Place an order icon 2273 </desc> 2274 <path d="M19.049 6.75H4.936A1.4 1.4 0 0 0 3.5 7.907l-2 13.915a1.357 1.357 0 0 0 1.437 1.428h18.111a1.356 1.356 0 0 0 1.436 -1.428l-2 -13.915a1.4 1.4 0 0 0 -1.435 -1.157Z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 2275 <path d="M15.662 3.807A3.765 3.765 0 0 0 11.976 0.75h0A3.763 3.763 0 0 0 8.3 3.788" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 2276 <path d="M15.923 12.845a1.9 1.9 0 0 0 -2.752 0l-1.179 1.219 -1.179 -1.219a1.9 1.9 0 0 0 -2.751 0 2.06 2.06 0 0 0 0 2.845l3.512 3.63a0.578 0.578
22760 0 0 0.837 0l3.512 -3.63a2.062 2.062 0 0 0 0 -2.845Z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 2277 </svg> </div> 2278 <div class="min-w-0"> 2279 <div class="text-sm font-medium text-gray-900">Make a purchase</div> 2280 <div class="text-xs text-gray-500">1 Point for every $1 spent</div> 2281 </div> 2282 2283 <!-- CTA Button Section --> 2284 <!-- Non-signup actions with CTA --> 2285 <div class="justify-self-end" x-show="!!memberId" x-cloak> 2286 <!-- Regular CTA with URL - visible only to members --> 2287 <a 2288 x-show="!!memberId" 2289 x-cloak 2290 x-bind:href="isAdminPreview ? 'javascript:void(0)' : 'https://jackkeller.com/pay-now/'" 2291 x-bind:data-preview-disabled="isAdminPreview ? 'true' : null" 2292 x-bind:data-tippy-content="isAdminPreview ? 'Disabled for admin preview' : null" 2293 x-bind:class="{ '!cursor-not-allowed': isAdminPreview }" 2294 class="bg-rwp-brand text-rwp-widget-button-text text-sm font-semibold rounded-lg cursor-pointer transition-colors hover:bg-rwp-brand-hover disabled:hover:bg-rwp-brand disabled:opacity-50 disabled:cursor-not-allowed focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 py-2 px-4 grid grid-cols-1 grid-rows-1 [grid-template-areas:'stack'] place-items-center min-h-[36px] min-w-[5rem]" 2295 > 2296 Shop </a> 2297 </div> 2298 </div> 2299 <div 2300 class="grid grid-cols-[auto_1fr_auto] items-center gap-4 py-4" 2301 x-data="{ 2302 isCompleted: false, 2303 signupPoints: 25, 2304 completedDate: '' 2305 }" 2306 x-init=" 2307 if (!isCompleted && $root.welcomeBannerData && !!$root.welcomeBannerData.signupPoints) { 2308 isCompleted = true; 2309 signupPoints = $root.welcomeBannerData.signupPoints; 2310 completedDate = 'today'; 2311 } 2312 " 2313 x-on:member-joined.window=" 2314 if ($event.detail && !!$event.detail.signupPoints) { 2315 isCompleted = true; 2316 signupPoints = $event.detail.signupPoints; 2317 completedDate = 'today'; 2318 } 2319 " 2320 > 2321 <div class="size-8 flex items-center justify-center flex-shrink-0 text-rwp-widget-icon-text"> 2322 <svg class="size-8" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> 2323 <desc> 2324 Create account icon 2325 </desc> 2326 <path d="m15.75 9.749 -3.981 5.308a0.75 0.75 0 0 1 -1.13 0.08L8.25 12.749" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 2327 <path d="M10.73 1.357a1.63 1.63 0 0 1 2.54 0l1.512 1.881a1.629 1.629 0 0 0 1.446 0.6l2.4 -0.261a1.63 1.63 0 0 1 1.8 1.8l-0.261 2.4a1.629 1.629 0 0 0 0.6 1.446l1.881 1.512a1.63 1.63 0 0 1 0 2.54l-1.887 1.505a1.632 1.632 0 0 0 -0.6 1.447l0.261 2.4a1.629 1.629 0 0 1 -1.8 1.8l-2.4 -0.261a1.628 1.628 0 0 0 -1.446 0.6L13.27 22.64a1.629 1.629 0 0 1 -2.54 0l-1.511 -1.88a1.631 1.631 0 0 0 -1.447 -0.6l-2.4 0.261a1.628 1.628 0 0 1 -1.8 -1.8l0.261 -2.4a1.631 1.631 0 0 0 -0.6 -1.447l-1.88 -1.511a1.629 1.629 0 0 1 0 -2.54l1.88 -1.512a1.628 1.628 0 0 0 0.6 -1.446l-0.261 -2.4a1.629 1.629 0 0 1 1.8 -1.8l2.4 0.261a1.632 1.632 0 0 0 1.447 -0.6Z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 2328 </svg> </div> 2329 <div class="min-w-0"> 2330 <div class="text-sm font-medium text-gray-900">Create an account</div> 2331 <!-- Show points when not completed, earned date when completed --> 2332 <div class="text-xs text-gray-500"> 2333 <span x-show="!isCompleted" x-text="signupPoints.toLocaleString() + ' ' + (signupPoints == 1 ? 'Point' : 'Points')"></span> 2334 <span x-show="isCompleted" x-cloak>Earned <span x-text="completedDate"></span></span> 2335 </div> 2336 </div> 2337 2338 <!-- CTA Button Section --> 2339 <!-- Signup action: Always render completion indicator in DOM for dynamic updates --> 2340 <div class="justify-self-end" x-show="isCompleted" x-cloak> 2341 <!-- Completion indicator - always in DOM, controlled by Alpine --> 2342 <div 2343 x-show="isCompleted" 2344 x-cloak 2345 class="text-emerald-600 font-semibold text-sm" 2346 x-bind:aria-label="'You earned ' + signupPoints.toLocaleStr
2346ing() + ' ' + (signupPoints == 1 ? 'Point' : 'Points') + ' for creating your account'" 2347 > 2348 +<span x-text="signupPoints.toLocaleString()"></span> 2349 </div> 2350 </div> 2351 </div> 2352 <div 2353 class="grid grid-cols-[auto_1fr_auto] items-center gap-4 py-4" 2354 > 2355 <div class="size-8 flex items-center justify-center flex-shrink-0 text-rwp-widget-icon-text"> 2356 <svg class="size-8" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24"> 2357 <desc> 2358 Comment icon 2359 </desc> 2360 <g> 2361 <path d="M12.75 0.75a10.49 10.49 0 0 0 -8.92 16l-3.08 6.5 6.47 -3.08A10.5 10.5 0 1 0 12.75 0.75Z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 2362 <g> 2363 <path d="M15 10.5A0.75 0.75 0 0 0 15 9h0a0.75 0.75 0 1 0 0 1.5" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 2364 <path d="M15.17 13.76a2.79 2.79 0 0 0 1.62 -2.38c0 -1 -0.51 -2.26 -1.67 -2.37" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 2365 </g> 2366 <g> 2367 <path d="M9.76 10.5a0.75 0.75 0 0 0 0 -1.5h0a0.75 0.75 0 1 0 0 1.5" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 2368 <path d="M9.92 13.76a2.79 2.79 0 0 0 1.62 -2.38c0 -1 -0.51 -2.26 -1.67 -2.37" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 2369 </g> 2370 </g> 2371 </svg> </div> 2372 <div class="min-w-0"> 2373 <div class="text-sm font-medium text-gray-900">Leave a review</div> 2374 <div class="text-xs text-gray-500">10 Points</div> 2375 </div> 2376 2377 <!-- CTA Button Section --> 2378 </div> 2379 <div 2380 class="grid grid-cols-[auto_1fr_auto] items-center gap-4 py-4" 2381 > 2382 <div class="size-8 flex items-center justify-center flex-shrink-0 text-rwp-widget-icon-text"> 2383 <svg class="size-8" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> 2384 <desc> 2385 First purchase bonus icon 2386 </desc> 2387 <path d="M21.75 11.25H2.25v10.5a1.5 1.5 0 0 0 1.5 1.5h16.5a1.5 1.5 0 0 0 1.5 -1.5Z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 2388 <path d="M21.75 6.75H2.25a1.5 1.5 0 0 0 -1.5 1.5v2.25a0.75 0.75 0 0 0 0.75 0.75h21a0.75 0.75 0 0 0 0.75 -0.75V8.25a1.5 1.5 0 0 0 -1.5 -1.5Z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 2389 <path d="M11.25 6.75c-3.314 0 -6.75 -2.686 -6.75 -6" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 2390 <path d="M4.5 0.75c3.314 0 6.75 2.686 6.75 6" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 2391 <path d="M12.75 6.75c3.314 0 6.75 -2.686 6.75 -6" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 2392 <path d="M19.5 0.75c-3.314 0 -6.75 2.686 -6.75 6" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 2393 <path d="M9.75 6.75h4.5v16.5h-4.5z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 2394 </svg> </div> 2395 <div class="min-w-0"> 2396 <div class="text-sm font-medium text-gray-900">Make your first order</div> 2397 <div class="text-xs text-gray-500">150 Points</div> 2398 </div> 2399 2400 <!-- CTA Button Section --> 2401 <!-- Non-signup actions with CTA --> 2402 <div class="justify-self-end" x-show="!!memberId" x-cloak> 2403 <!-- Regular CTA with URL - visible only to members --> 2404 <a 2405 x-show="!!memberId" 2406 x-cloak 2407 x-bind:href="isAdminPreview ? 'javascript:void(0)' : 'https://jackkeller.com/pay-now/'" 2408 x-bind:data-preview-disabled="isAdminPreview ? 'true' : null" 2409 x-bind:data-tippy-content="isAdminPreview ? 'Disabled for admin preview' : null" 2410 x-bind:class="{ '!cursor-not-allowed': isAdminPreview }" 2411 class="bg-rwp-brand text-rwp-widget-button-text text-sm font-semibold rounded-lg cursor-pointer transition-colors hover:bg-rwp-brand-hover disabled:hover:bg-rwp-brand disabled:opacity-50 disabled:cursor-not-allowed focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 py-2 px-4 grid grid-cols-1 grid-rows-1 [grid-template-areas:'stack'] place-items-center min-h-[36px] min-w-[5rem]" 2412 > 2413 Shop </a> 2414 </div> 2415 </div> 2416 </div> 2417 2418 </div> 2419 2420 <!-- Top scroll fade --> 2421 <div x-show="!panelAtTop" 2422 class="pointer-events-none absolute top-0 left-0 h-8 z-10" 2423 style="right: var(--rwp-scrollbar-width, 8px); background: linear-gradient(to bottom, var(--color-rwp-widget-bg), transparent);"></div> 2424 <!-- Bottom scroll fade — hidden when guest join section is visible --> 2425 <div x-show="!panelAtBottom && memberId !== 0" 2426 class="pointer-events-none absolute bottom-0 left-0 h-12 z-10" 2427 style="right: var(--rwp-scrollbar-width, 8px); background: linear-gradient(to top, var(--color-rwp-widget-bg), transparent);"></div> 2428 2429 <div x-show="memberId === 0"> 2430 <!-- Fade Overlay --> 2431 <div 2432 class="absolute bottom-0 left-0 right-0 h-24 pointer-events-none" 2433 style="background: linear-gradient(to top, var(--color-rwp-widget-bg), var(--color-rwp-widget-bg) 20%, transparent);" 2434 x-data="{ hideJoinSection: false }" 2435 x-on:member-joined.window="hideJoinSection = true" 2436 x-show="!hideJoinSection" 2437 ></div> 2438 2439 <!-- Sticky Join Section --> 2440 <div 2441 class="absolute bottom-0 left-0 right-0 bg-white px-6 py-4 border-t border-gray-100" 2442 x-data="{ hideJoinSection: false, isLoggedIn: false }" 2443 x-on:member-joined.window="hideJoinSection = true" 2444 x-show="!hideJoinSection" 2445 > 2446 <div> 2447 <button 2448 type="button" 2449 x-on:click="isLoggedIn ? window.dispatchEvent(new CustomEvent('create-member-direct')) : window.dispatchEvent(new CustomEvent('show-register-form'))" 2450 class="bg-rwp-brand text-rwp-widget-button-text text-sm font-semibold rounded-lg cursor-pointer transition-colors hover:bg-rwp-brand-hover disabled:hover:bg-rwp-brand disabled:opacity-50 disabled:cursor-not-allowed focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500
2450w-full py-3 px-8 min-h-[48px] mx-auto flex items-center justify-center" 2451 style="--tw-ring-color: var(--rwp-accent);" 2452 > 2453 Join now </button> 2454 </div> 2455 <div x-show="!isLoggedIn" x-cloak class="mt-3 text-center text-rwp-widget-text"> 2456 <p class="text-sm"> 2457 Already have an account? <button 2458 x-on:click="navigateToPanel('main', { resetScroll: true }); $dispatch('show-login-form');" 2459 class="font-medium underline text-rwp-accent cursor-pointer" 2460 >Sign in</button> 2461 </p> 2462 </div> 2463 </div> 2464 </div> 2465 </div> 2466 2467 <div 2468 x-show="currentPanel === 'birthday-picker'" 2469 x-bind:class="'relative h-full flex flex-col ' + (currentPanel === 'birthday-picker' ? (navigationDirection === 'initial' ? 'rwp-panel-fade-up' : (navigationDirection === 'forward' ? 'rwp-panel-slide-forward' : (navigationDirection === 'back' ? 'rwp-panel-slide-back' : ''))) : '')" 2470 > 2471 <div class="flex-1 overflow-y-auto custom-scrollbar px-6 py-6 text-rwp-widget-text"> 2472 2473 <!-- Success State --> 2474 <div x-show="birthdaySuccess" x-transition class="text-center"> 2475 <div class="flex justify-center mb-3"> 2476 <svg class="size-10 text-green-600" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24"><desc>Check circle alternate</desc><path d="M6 13.223 8.45 16.7a1.049 1.049 0 0 0 1.707 0.051L18 6.828" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path><path d="M0.75 11.999a11.25 11.25 0 1 0 22.5 0 11.25 11.25 0 1 0 -22.5 0Z" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path></svg> </div> 2477 <h3 class="text-lg font-semibold text-rwp-widget-heading mb-1">Birthday set!</h3> 2478 <template x-if="birthdayRewardDate"> 2479 <p class="text-sm text-gray-500 mb-6">You'll earn <span x-text="birthdayPoints + ' ' + currencyPlural"></span> on <span x-text="birthdayRewardDate"></span></p> 2480 </template> 2481 <template x-if="!birthdayRewardDate"> 2482 <p class="text-sm text-gray-500 mb-6">You'll earn bonus points on your special day!</p> 2483 </template> 2484 <button 2485 type="button" 2486 x-on:click="resetBirthdayPicker(); navigateToPanel('ways-to-earn')" 2487 class="bg-rwp-brand text-rwp-widget-button-text text-sm font-semibold rounded-lg cursor-pointer transition-colors hover:bg-rwp-brand-hover disabled:hover:bg-rwp-brand disabled:opacity-50 disabled:cursor-not-allowed focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 w-full py-3 px-8 min-h-[48px] mx-auto flex items-center justify-center" 2488 > 2489 Keep earning </button> 2490 </div> 2491 2492 <!-- Form State --> 2493 <div x-show="!birthdaySuccess"> 2494 <div class="text-center mb-4"> 2495 <div class="flex justify-center mx-auto mb-3"> 2496 <svg class="size-10 text-rwp-widget-icon-text" viewbox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> 2497 <desc>Birthday cake icon</desc> 2498 <path d="M3.08108 11.7027H20.9189C20.9189 11.7027 22.7027 11.7027 22.7027 13.4865V21.2162C22.7027 21.2162 22.7027 23 20.9189 23H3.08108C3.08108 23 1.2973 23 1.2973 21.2162V13.4865C1.2973 13.4865 1.2973 11.7027 3.08108 11.7027Z" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path> 2499 <path d="M12 9.02703V11.7027" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path> 2500 <path d="M13.7838 3.67568C13.7838 4.14876 13.5959 4.60248 13.2613 4.937C12.9268 5.27153 12.4731 5.45946 12 5.45946C11.5269 5.45946 11.0732 5.27153 10.7387 4.937C10.4041 4.60248 10.2162 4.14876 10.2162 3.67568C10.2162 2.68865 12 1 12 1C12 1 13.7838 2.68865 13.7838 3.67568Z" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path> 2501 <path d="M19.1351 9.02703V11.7027" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path> 2502 <path d="M20.9189 3.67568C20.9189 4.14876 20.731 4.60248 20.3965 4.937C20.0619 5.27153 19.6082 5.45946 19.1351 5.45946C18.662 5.45946 18.2083 5.27153 17.8738 4.937C17.5393 4.60248 17.3514 4.14876 17.3514 3.67568C17.3514 2.68865 19.1351 1 19.1351 1C19.1351 1 20.9189 2.68865 20.9189 3.67568Z" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path> 2503 <path d="M4.86486 9.02703V11.7027" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path> 2504 <path d="M6.64865 3.67568C6.64865 4.14876 6.46071 4.60248 6.12619 4.937C5.79167 5.27153 5.33795 5.45946 4.86486 5.45946C4.39178 5.45946 3.93806 5.27153 3.60354 4.937C3.26901 4.60248 3.08108 4.14876 3.08108 3.67568C3.08108 2.68865 4.86486 1 4.86486 1C4.86486 1 6.64865 2.68865 6.64865 3.67568Z" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path> 2505 <path d="M1.2973 17.0184C1.57132 17.4845 1.96234 17.8709 2.43166 18.1394C2.90097 18.4079 3.43228 18.5492 3.97297 18.5492C4.51367 18.5492 5.04498 18.4079 5.51429 18.1394C5.9836 17.8709 6.37463 17.4845 6.64865 17.0184C6.92267 17.4845 7.3137 17.8709 7.78301 18.1394C8.25232 18.4079 8.78363 18.5492 9.32432 18.5492C9.86502 18.5492 10.3963 18.4079 10.8656 18.1394C11.335 17.8709 11.726 17.4845 12 17.0184C12.274 17.4845 12.665 17.8709 13.1344 18.1394C13.6037 18.4079 14.135 18.5492 14.6757 18.5492C15.2164 18.5492 15.7477 18.4079 16.217 18.1394C16.6863 17.8709 17.0773 17.4845 17.3514 17.0184C17.6254 17.4845 18.0164 17.8709 18.4857 18.1394C18.955 18.4079 19.4863 18.5492 20.027 18.5492C20.5677 18.5492 21.099 18.4079 21.5683 18.1394C22.0377 17.8709 22.4287 17.4845 22.7027 17.0184" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path> 2506 </svg> </div> 2507 <h3 class="text-lg font-semibold text-rwp-widget-heading mb-3 text-center" x-text="birthdayIsEditing ? 'Update your birthday' : 'When is your birthday?'"></h3> 2508 <p class="text-sm text-gray-500"> 2509 <template x-if="birthdayRewardPreview"> 2510 <span>You'll earn <span x-text="birthdayPoints + ' ' + currencyPlural"></span> on <span x-text="birthdayRewardPreview.rewardDate"></span></span> 2511 </template> 2512 <template x-if="!birthdayRewardPreview"> 2513 <span>You'll earn <span x-text="birthdayPoints + ' ' + currencyPlural"></span> on your special day!</span> 2514 </template> 2515 </p> 2516 </div> 2517 2518 <form x-on:submit.prevent="submitBirthday()"> 2519 <div class="grid gap-3 mb-4 grid-cols-[1fr_6rem]"> 2520 <div class="grid grid-cols-1"> 2521 <label for="rwp-birthday-month" class="sr-only">Month</label> 2522 <select 2523 id="rwp-birthday-month" 2524 x-model="birthdayMonth" 2525 x-on:change="if (!birthdayDay) { setTimeout(() => $refs.birthdayDaySelect?.focus(), 300) }" 2526 class="col-start-1 row-start-1 w-full appearance-none bg-white text-base px-3 py-3 pr-8 rounded-lg outline-1 -outline-offset-1 outline-gray-200 focus:outline-2 focus:-outline-offset-2 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500" 2527 required 2528 > 2529 <option value="">Month</option> 2530 <option value="1">January</option> 2531 <option value="2">February</option> 2532 <option value="3">March</option> 2533 <option value="4">April</option> 2534 <option value="5">May</option> 2535 <option value="6">June</option> 2536 <option value="7">July</option> 2537 <option value="8">August</option> 2538 <option value="9">September</option> 2539 <option value="10">October</option> 2540 <option value="11">November</option> 2541 <option value="12">December</option> 2542 </select> 2543 <svg class="pointer-events-none col-start-1 row-start-1 mr-3 size-4 self-center justify-self-end text-gray-500" viewB
2543ox="0 0 16 16" fill="currentColor" aria-hidden="true"><path fill-rule="evenodd" d="M4.22 6.22a.75.75 0 0 1 1.06 0L8 8.94l2.72-2.72a.75.75 0 1 1 1.06 1.06l-3.25 3.25a.75.75 0 0 1-1.06 0L4.22 7.28a.75.75 0 0 1 0-1.06Z" clip-rule="evenodd" /></svg> </div> 2544 <div class="grid grid-cols-1"> 2545 <label for="rwp-birthday-day" class="sr-only">Day</label> 2546 <select 2547 id="rwp-birthday-day" 2548 x-model="birthdayDay" 2549 x-ref="birthdayDaySelect" 2550 class="col-start-1 row-start-1 w-full appearance-none bg-white text-base px-3 py-3 pr-8 rounded-lg outline-1 -outline-offset-1 outline-gray-200 focus:outline-2 focus:-outline-offset-2 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500" 2551 required 2552 > 2553 <option value="">Day</option> 2554 <template x-for="d in birthdayDaysInMonth" :key="d"> 2555 <option :value="d" :selected="String(d) === birthdayDay" x-text="d"></option> 2556 </template> 2557 </select> 2558 <svg class="pointer-events-none col-start-1 row-start-1 mr-3 size-4 self-center justify-self-end text-gray-500" viewBox="0 0 16 16" fill="currentColor" aria-hidden="true"><path fill-rule="evenodd" d="M4.22 6.22a.75.75 0 0 1 1.06 0L8 8.94l2.72-2.72a.75.75 0 1 1 1.06 1.06l-3.25 3.25a.75.75 0 0 1-1.06 0L4.22 7.28a.75.75 0 0 1 0-1.06Z" clip-rule="evenodd" /></svg> </div> 2559 </div> 2560 2561 2562 <!-- Error Message (server validation errors only) --> 2563 <div x-show="birthdayError" x-transition class="mb-4 p-3 bg-red-50 border border-red-200 rounded-lg"> 2564 <p class="text-sm text-red-700" x-text="birthdayError"></p> 2565 </div> 2566 2567 <button 2568 type="submit" 2569 x-show="!birthdayIsEditing || birthdayChanged" 2570 x-bind:class="birthdaySubmitting ? 'pointer-events-none' : ''" 2571 class="bg-rwp-brand text-rwp-widget-button-text text-sm font-semibold rounded-lg cursor-pointer transition-colors hover:bg-rwp-brand-hover disabled:hover:bg-rwp-brand disabled:opacity-50 disabled:cursor-not-allowed focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 w-full py-3 px-8 min-h-[48px] mx-auto grid grid-cols-1 grid-rows-1 [grid-template-areas:'stack'] place-items-center" 2572 > 2573 <span 2574 class="[grid-area:stack] transition-opacity duration-200" 2575 x-bind:class="{ 'invisible': birthdaySubmitting, 'visible': !birthdaySubmitting }" 2576 x-text="birthdayIsEditing ? 'Update birthday' : 'Set my birthday'" 2577 ></span> 2578 <svg class="w-5 h-5 animate-spin [grid-area:stack] transition-opacity duration-200" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" x-bind:class="{ 'invisible': birthdaySubmitting !== true, 'visible': birthdaySubmitting === true }"><desc>Loading spinner icon</desc><circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle><path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path></svg> </button> 2579 </form> 2580 </div> 2581 2582 </div> 2583 </div> 2584 2585 <div 2586 x-show="currentPanel === 'ways-to-redeem'" 2587 x-bind:class="'ways-to-redeem-panel relative h-full flex flex-col overflow-hidden ' + (currentPanel === 'ways-to-redeem' ? (navigationDirection === 'initial' ? 'rwp-panel-fade-up' : (navigationDirection === 'forward' ? 'rwp-panel-slide-forward' : (navigationDirection === 'back' ? 'rwp-panel-slide-back' : ''))) : '')" 2588 x-data="{ panelAtTop: true, panelAtBottom: false }" 2589 x-effect="if (currentPanel === 'ways-to-redeem') { const el = $el.querySelector('.overflow-y-auto'); if (el && el.scrollHeight > 0) { panelAtBottom = el.scrollTop + el.clientHeight >= el.scrollHeight - 5; } }" 2590 > 2591 <div class="flex-1 overflow-y-auto custom-scrollbar px-6 py-6 pb-32 text-rwp-widget-text" 2592 @scroll="panelAtTop = $el.scrollTop < 5; panelAtBottom = $el.scrollTop + $el.clientHeight >= $el.scrollHeight - 5" 2593 > 2594 2595 <h2 class="text-lg font-semibold text-rwp-widget-heading mb-3">Ways to redeem</h2> 2596 2597 <div class="divide-y divide-gray-50" x-data="redeemManager"> 2598 <div class="grid grid-cols-[auto_1fr_auto] items-center gap-4 py-4" data-action-id="spend_1"> 2599 <div class="size-8 flex items-center justify-center flex-shrink-0 text-rwp-widget-icon-text"> 2600 <svg class="size-8" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> 2601 <desc> 2602 Fixed amount discount icon 2603 </desc> 2604 <path d="M19.575 8.25a3.755 3.755 0 0 1 3.049 -2.95 0.749 0.749 0 0 0 0.626 -0.738V2.25a1.5 1.5 0 0 0 -1.5 -1.5H2.25a1.5 1.5 0 0 0 -1.5 1.5v2.314a0.747 0.747 0 0 0 0.626 0.738 3.751 3.751 0 0 1 0 7.4 0.75 0.75 0 0 0 -0.626 0.739v2.309a1.5 1.5 0 0 0 1.5 1.5h6" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 2605 <path d="m8.25 14.25 0 -1.5" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 2606 <path d="m8.25 9.75 0 -1.5" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 2607 <path d="m8.25 5.25 0 -1.5" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 2608 <path d="M18.75 14.25h-2.033a1.342 1.342 0 0 0 -0.5 2.588l2.064 0.825a1.342 1.342 0 0 1 -0.5 2.587H15.75" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 2609 <path d="m17.25 14.25 0 -0.75" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 2610 <path d="m17.25 21 0 -0.75" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 2611 <path d="M11.25 17.25a6 6 0 1 0 12 0 6 6 0 1 0 -12 0Z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 2612 </svg> </div> 2613 <div class="min-w-0"> 2614 <div class="text-sm font-medium text-gray-900">$5 off coupon</div> 2615 <div class="text-xs text-gray-500 mt-1">500 Points</div> 2616 2617 <!-- Success Message --> 2618 <div x-show="redeemStates['fixed_discount_spend_1']?.success" x-transition class="text-sm text-green-600 mt-1"> 2619 <div class="flex items-center gap-2"> 2620 <svg class="size-4" fill="none" stroke="currentColor" viewBox="0 0 24 24"> 2621 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"></path> 2622 </svg> 2623 Coupon generated and applied to cart! </div> 2624 </div> 2625 2626 <!-- Error Message --> 2627 <div x-show="redeemStates['fixed_discount_spend_1']?.error" x-transition class="text-sm text-red-600 mt-1"> 2628 <div class="flex items-center gap-2"> 2629 2630 <span x-text="redeemStates['fixed_discount_spend_1']?.errorMessage"></span> 2631 </div> 2632 </div> 2633 </div> 2634 2635 <div class="justify-self-end" x-show="memberId" x-cloak > 2636 <button 2637 x-on:click="if (!isAdminPreview) { redeemSuccessData.redeemedLabel = '$5 off coupon'; redeemPointsForCoupon('fixed_discount', 'spend_1', 'fixed_discount_spend_1'); }" 2638 x-bind:disabled="redeemStates['fixed_discount_spend_1']?.redeeming || (userData?.points ?? 0) < 500" 2639 x-bind:data-preview-disabled="isAdminPreview ? 'true' : null" 2640 x-bind:data-tippy-content="isAdminPreview ? 'Disabled for admin preview' : null" 2641 x-bind:class="{ '!cursor-not-allowed': isAdminPreview }" 2642 class="bg-rwp-brand text-rwp-widget-button-text text-sm font-semibold rounded-lg cursor-pointer transition-colors hover:bg-rwp-brand-hover disabled:hover:bg-rwp-brand disabled:opacity-50 disabled:cursor-not-allowed focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 py-2 px-4 grid grid-cols-1 grid-rows-1 [grid-template-areas:'stack'] place-items-center min-h-[36px] min-w-[5rem]" 2643 > 2644 <span 2645 class="[grid-area:stack] transition-opacity duration-200" 2646 x-bind:class="{ 'invisible': redeemStates['fixed_discount_spend_1']?.redeeming, 'visible': !redeemStates['fixed_discount_spend_1']?.redeeming }" 2647 >Redeem</span> 2648 <svg class="size-4 animate-spin [grid-area:stack] transition-opacity duration-200" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" x-bind:class="{ &ap
2648os;invisible': redeemStates['fixed_discount_spend_1']?.redeeming !== true, 'visible': redeemStates['fixed_discount_spend_1']?.redeeming === true }"><desc>Loading spinner icon</desc><circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle><path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path></svg> </button> 2649 </div> 2650 2651 </div> 2652 <div class="grid grid-cols-[auto_1fr_auto] items-center gap-4 py-4" data-action-id="spend_2"> 2653 <div class="size-8 flex items-center justify-center flex-shrink-0 text-rwp-widget-icon-text"> 2654 <svg class="size-8" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> 2655 <desc> 2656 Fixed amount discount icon 2657 </desc> 2658 <path d="M19.575 8.25a3.755 3.755 0 0 1 3.049 -2.95 0.749 0.749 0 0 0 0.626 -0.738V2.25a1.5 1.5 0 0 0 -1.5 -1.5H2.25a1.5 1.5 0 0 0 -1.5 1.5v2.314a0.747 0.747 0 0 0 0.626 0.738 3.751 3.751 0 0 1 0 7.4 0.75 0.75 0 0 0 -0.626 0.739v2.309a1.5 1.5 0 0 0 1.5 1.5h6" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 2659 <path d="m8.25 14.25 0 -1.5" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 2660 <path d="m8.25 9.75 0 -1.5" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 2661 <path d="m8.25 5.25 0 -1.5" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 2662 <path d="M18.75 14.25h-2.033a1.342 1.342 0 0 0 -0.5 2.588l2.064 0.825a1.342 1.342 0 0 1 -0.5 2.587H15.75" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 2663 <path d="m17.25 14.25 0 -0.75" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 2664 <path d="m17.25 21 0 -0.75" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 2665 <path d="M11.25 17.25a6 6 0 1 0 12 0 6 6 0 1 0 -12 0Z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 2666 </svg> </div> 2667 <div class="min-w-0"> 2668 <div class="text-sm font-medium text-gray-900">$10 off coupon</div> 2669 <div class="text-xs text-gray-500 mt-1">1,000 Points</div> 2670 2671 <!-- Success Message --> 2672 <div x-show="redeemStates['fixed_discount_spend_2']?.success" x-transition class="text-sm text-green-600 mt-1"> 2673 <div class="flex items-center gap-2"> 2674 <svg class="size-4" fill="none" stroke="currentColor" viewBox="0 0 24 24"> 2675 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"></path> 2676 </svg> 2677 Coupon generated and applied to cart! </div> 2678 </div> 2679 2680 <!-- Error Message --> 2681 <div x-show="redeemStates['fixed_discount_spend_2']?.error" x-transition class="text-sm text-red-600 mt-1"> 2682 <div class="flex items-center gap-2"> 2683 2684 <span x-text="redeemStates['fixed_discount_spend_2']?.errorMessage"></span> 2685 </div> 2686 </div> 2687 </div> 2688 2689 <div class="justify-self-end" x-show="memberId" x-cloak > 2690 <button 2691 x-on:click="if (!isAdminPreview) { redeemSuccessData.redeemedLabel = '$10 off coupon'; redeemPointsForCoupon('fixed_discount', 'spend_2', 'fixed_discount_spend_2'); }" 2692 x-bind:disabled="redeemStates['fixed_discount_spend_2']?.redeeming || (userData?.points ?? 0) < 1000" 2693 x-bind:data-preview-disabled="isAdminPreview ? 'true' : null" 2694 x-bind:data-tippy-content="isAdminPreview ? 'Disabled for admin preview' : null" 2695 x-bind:class="{ '!cursor-not-allowed': isAdminPreview }" 2696 class="bg-rwp-brand text-rwp-widget-button-text text-sm font-semibold rounded-lg cursor-pointer transition-colors hover:bg-rwp-brand-hover disabled:hover:bg-rwp-brand disabled:opacity-50 disabled:cursor-not-allowed focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 py-2 px-4 grid grid-cols-1 grid-rows-1 [grid-template-areas:'stack'] place-items-center min-h-[36px] min-w-[5rem]" 2697 > 2698 <span 2699 class="[grid-area:stack] transition-opacity duration-200" 2700 x-bind:class="{ 'invisible': redeemStates['fixed_discount_spend_2']?.redeeming, 'visible': !redeemStates['fixed_discount_spend_2']?.redeeming }" 2701 >Redeem</span> 2702 <svg class="size-4 animate-spin [grid-area:stack] transition-opacity duration-200" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" x-bind:class="{ &ap
2702os;invisible': redeemStates['fixed_discount_spend_2']?.redeeming !== true, 'visible': redeemStates['fixed_discount_spend_2']?.redeeming === true }"><desc>Loading spinner icon</desc><circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle><path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path></svg> </button> 2703 </div> 2704 2705 </div> 2706 <div class="grid grid-cols-[auto_1fr_auto] items-center gap-4 py-4" data-action-id="spend_3"> 2707 <div class="size-8 flex items-center justify-center flex-shrink-0 text-rwp-widget-icon-text"> 2708 <svg class="size-8" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> 2709 <desc> 2710 Fixed amount discount icon 2711 </desc> 2712 <path d="M19.575 8.25a3.755 3.755 0 0 1 3.049 -2.95 0.749 0.749 0 0 0 0.626 -0.738V2.25a1.5 1.5 0 0 0 -1.5 -1.5H2.25a1.5 1.5 0 0 0 -1.5 1.5v2.314a0.747 0.747 0 0 0 0.626 0.738 3.751 3.751 0 0 1 0 7.4 0.75 0.75 0 0 0 -0.626 0.739v2.309a1.5 1.5 0 0 0 1.5 1.5h6" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 2713 <path d="m8.25 14.25 0 -1.5" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 2714 <path d="m8.25 9.75 0 -1.5" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 2715 <path d="m8.25 5.25 0 -1.5" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 2716 <path d="M18.75 14.25h-2.033a1.342 1.342 0 0 0 -0.5 2.588l2.064 0.825a1.342 1.342 0 0 1 -0.5 2.587H15.75" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 2717 <path d="m17.25 14.25 0 -0.75" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 2718 <path d="m17.25 21 0 -0.75" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 2719 <path d="M11.25 17.25a6 6 0 1 0 12 0 6 6 0 1 0 -12 0Z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 2720 </svg> </div> 2721 <div class="min-w-0"> 2722 <div class="text-sm font-medium text-gray-900">$20 off coupon</div> 2723 <div class="text-xs text-gray-500 mt-1">2,000 Points</div> 2724 2725 <!-- Success Message --> 2726 <div x-show="redeemStates['fixed_discount_spend_3']?.success" x-transition class="text-sm text-green-600 mt-1"> 2727 <div class="flex items-center gap-2"> 2728 <svg class="size-4" fill="none" stroke="currentColor" viewBox="0 0 24 24"> 2729 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"></path> 2730 </svg> 2731 Coupon generated and applied to cart! </div> 2732 </div> 2733 2734 <!-- Error Message --> 2735 <div x-show="redeemStates['fixed_discount_spend_3']?.error" x-transition class="text-sm text-red-600 mt-1"> 2736 <div class="flex items-center gap-2"> 2737 2738 <span x-text="redeemStates['fixed_discount_spend_3']?.errorMessage"></span> 2739 </div> 2740 </div> 2741 </div> 2742 2743 <div class="justify-self-end" x-show="memberId" x-cloak > 2744 <button 2745 x-on:click="if (!isAdminPreview) { redeemSuccessData.redeemedLabel = '$20 off coupon'; redeemPointsForCoupon('fixed_discount', 'spend_3', 'fixed_discount_spend_3'); }" 2746 x-bind:disabled="redeemStates['fixed_discount_spend_3']?.redeeming || (userData?.points ?? 0) < 2000" 2747 x-bind:data-preview-disabled="isAdminPreview ? 'true' : null" 2748 x-bind:data-tippy-content="isAdminPreview ? 'Disabled for admin preview' : null" 2749 x-bind:class="{ '!cursor-not-allowed': isAdminPreview }" 2750 class="bg-rwp-brand text-rwp-widget-button-text text-sm font-semibold rounded-lg cursor-pointer transition-colors hover:bg-rwp-brand-hover disabled:hover:bg-rwp-brand disabled:opacity-50 disabled:cursor-not-allowed focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 py-2 px-4 grid grid-cols-1 grid-rows-1 [grid-template-areas:'stack'] place-items-center min-h-[36px] min-w-[5rem]" 2751 > 2752 <span 2753 class="[grid-area:stack] transition-opacity duration-200" 2754 x-bind:class="{ 'invisible': redeemStates['fixed_discount_spend_3']?.redeeming, 'visible': !redeemStates['fixed_discount_spend_3']?.redeeming }" 2755 >Redeem</span> 2756 <svg class="size-4 animate-spin [grid-area:stack] transition-opacity duration-200" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" x-bind:class="{ &ap
2756os;invisible': redeemStates['fixed_discount_spend_3']?.redeeming !== true, 'visible': redeemStates['fixed_discount_spend_3']?.redeeming === true }"><desc>Loading spinner icon</desc><circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle><path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path></svg> </button> 2757 </div> 2758 2759 </div> 2760 <div class="grid grid-cols-[auto_1fr_auto] items-center gap-4 py-4" data-action-id="percentage_discount_1773471154354_l6qm499m0"> 2761 <div class="size-8 flex items-center justify-center flex-shrink-0 text-rwp-widget-icon-text"> 2762 <svg class="size-8" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24"> 2763 <desc> 2764 Percentage discount icon 2765 </desc> 2766 <g> 2767 <path d="M23.25 15v3.5a1.5 1.5 0 0 1 -1.5 1.5H2.25a1.5 1.5 0 0 1 -1.5 -1.5V15a3 3 0 0 0 0 -6V5.5A1.5 1.5 0 0 1 2.25 4h19.5a1.5 1.5 0 0 1 1.5 1.5V9a3 3 0 0 0 0 6Z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 2768 <path d="M7.25 9a1.5 1.5 0 1 0 3 0 1.5 1.5 0 1 0 -3 0" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 2769 <path d="M14.5 15a1.5 1.5 0 1 0 3 0 1.5 1.5 0 1 0 -3 0" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 2770 <path d="m15.75 8.25 -7.5 7.5" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 2771 </g> 2772 </svg> </div> 2773 <div class="min-w-0"> 2774 <div class="text-sm font-medium text-gray-900">10% off coupon</div> 2775 <div class="text-xs text-gray-500 mt-1">10,000 Points</div> 2776 2777 <!-- Success Message --> 2778 <div x-show="redeemStates['percentage_discount_percentage_discount_1773471154354_l6qm499m0']?.success" x-transition class="text-sm text-green-600 mt-1"> 2779 <div class="flex items-center gap-2"> 2780 <svg class="size-4" fill="none" stroke="currentColor" viewBox="0 0 24 24"> 2781 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"></path> 2782 </svg> 2783 Coupon generated and applied to cart! </div> 2784 </div> 2785 2786 <!-- Error Message --> 2787 <div x-show="redeemStates['percentage_discount_percentage_discount_1773471154354_l6qm499m0']?.error" x-transition class="text-sm text-red-600 mt-1"> 2788 <div class="flex items-center gap-2"> 2789 2790 <span x-text="redeemStates['percentage_discount_percentage_discount_1773471154354_l6qm499m0']?.errorMessage"></span> 2791 </div> 2792 </div> 2793 </div> 2794 2795 <div class="justify-self-end" x-show="memberId" x-cloak > 2796 <button 2797 x-on:click="if (!isAdminPreview) { redeemSuccessData.redeemedLabel = '10% off coupon'; redeemPointsForCoupon('percentage_discount', 'percentage_discount_1773471154354_l6qm499m0', 'percentage_discount_percentage_discount_1773471154354_l6qm499m0'); }" 2798 x-bind:disabled="redeemStates['percentage_discount_percentage_discount_1773471154354_l6qm499m0']?.redeeming || (userData?.points ?? 0) < 10000" 2799 x-bind:data-preview-disabled="isAdminPreview ? 'true' : null" 2800 x-bind:data-tippy-content="isAdminPreview ? 'Disabled for admin preview' : null" 2801 x-bind:class="{ '!cursor-not-allowed': isAdminPreview }" 2802 class="bg-rwp-brand text-rwp-widget-button-text text-sm font-semibold rounded-lg cursor-pointer transition-colors hover:bg-rwp-brand-hover disabled:hover:bg-rwp-brand disabled:opacity-50 disabled:cursor-not-allowed focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 py-2 px-4 grid grid-cols-1 grid-rows-1 [grid-template-areas:'stack'] place-items-center min-h-[36px] min-w-[5rem]" 2803 > 2804 <span 2805 class="[grid-area:stack] transition-opacity duration-200" 2806 x-bind:class="{ 'invisible': redeemStates['percentage_discount_percentage_discount_1773471154354_l6qm499m0']?.redeeming, 'visible': !redeemStates['percentage_discount_percentage_discount_1773471154354_l6qm499m0']?.redeeming }" 2807 >Redeem</span> 2808 <svg class="size-4 animate-spin [grid-area:stack] transition-opacity duration-200" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" x-bind:class="{ &ap
2808os;invisible': redeemStates['percentage_discount_percentage_discount_1773471154354_l6qm499m0']?.redeeming !== true, 'visible': redeemStates['percentage_discount_percentage_discount_1773471154354_l6qm499m0']?.redeeming === true }"><desc>Loading spinner icon</desc><circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle><path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path></svg> </button> 2809 </div> 2810 2811 </div> 2812 <div class="grid grid-cols-[auto_1fr_auto] items-center gap-4 py-4" data-action-id="free_product_1774022853187_2dkxwkikl"> 2813 <div class="size-8 flex items-center justify-center flex-shrink-0 text-rwp-widget-icon-text"> 2814 <svg xmlns="http://www.w3.org/2000/svg" class="size-8" viewbox="0 0 24 24"><desc>Free product icon</desc><g><g><path d="M15.75 23.24a3 3 0 0 0 -3 -3H9a3 3 0 0 0 -3 -3H0.75v6Z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path><path d="m6 20.24 3 0" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path></g><path d="M16.5 17.74H21a0.76 0.76 0 0 0 0.75 -0.75v-6.75" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path><path d="m8.25 10.24 0 4" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path><path d="M7.5 5.99h15s0.75 0 0.75 0.75v2.75s0 0.75 -0.75 0.75h-15s-0.75 0 -0.75 -0.75V6.74s0 -0.75 0.75 -0.75" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path><path d="m15 15.24 0 -9.25" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path><path d="M19.27 3.87A11.84 11.84 0 0 1 15 6a11.93 11.93 0 0 1 2.12 -4.24C18.46 0.43 19.21 0.63 19.8 1.22s0.78 1.33 -0.53 2.65Z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path><path d="M10.73 3.87A11.84 11.84 0 0 0 15 6a11.93 11.93 0 0 0 -2.12 -4.24C11.54 0.43 10.79 0.63 10.2 1.22s-0.78 1.33 0.53 2.65Z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path></g></svg> </div> 2815 <div class="min-w-0"> 2816 <div class="text-sm font-medium text-gray-900">Free Add photos to your MLS listing – Add up to 25 photos to MLS</div> 2817 <div class="text-xs text-gray-500 mt-1">1,000 Points</div> 2818 2819 <!-- Success Message --> 2820 <div x-show="redeemStates['free_product_free_product_1774022853187_2dkxwkikl']?.success" x-transition class="text-sm text-green-600 mt-1"> 2821 <div class="flex items-center gap-2"> 2822 <svg class="size-4" fill="none" stroke="currentColor" viewBox="0 0 24 24"> 2823 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"></path> 2824 </svg> 2825 Coupon generated and applied to cart! </div> 2826 </div> 2827 2828 <!-- Error Message --> 2829 <div x-show="redeemStates['free_product_free_product_1774022853187_2dkxwkikl']?.error" x-transition class="text-sm text-red-600 mt-1"> 2830 <div class="flex items-center gap-2"> 2831 2832 <span x-text="redeemStates['free_product_free_product_1774022853187_2dkxwkikl']?.errorMessage"></span> 2833 </div> 2834 </div> 2835 </div> 2836 2837 <div class="justify-self-end" x-show="memberId" x-cloak > 2838 <button 2839 x-on:click="if (!isAdminPreview) { redeemSuccessData.redeemedLabel = 'Free Add photos to your MLS listing – Add up to 25 photos to MLS'; redeemPointsForCoupon('free_product', 'free_product_1774022853187_2dkxwkikl', 'free_product_free_product_1774022853187_2dkxwkikl'); }" 2840 x-bind:disabled="redeemStates['free_product_free_product_1774022853187_2dkxwkikl']?.redeeming || (userData?.points ?? 0) < 1000" 2841 x-bind:data-preview-disabled="isAdminPreview ? 'true' : null" 2842 x-bind:data-tippy-content="isAdminPreview ? 'Disabled for admin preview' : null" 2843 x-bind:class="{ '!cursor-not-allowed': isAdminPreview }" 2844 class="bg-rwp-brand text-rwp-widget-button-text text-sm font-semibold rounded-lg cursor-pointer transition-colors hover:bg-rwp-brand-hover disabled:hover:bg-rwp-brand disabled:opacity-50 disabled:cursor-not-allowed focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 py-2 px-4 grid grid-cols-1 grid-rows-1 [grid-template-areas:'stack'] place-items-center min-h-[36px] min-w-[5rem]" 2845 > 2846 <span 2847 class="[grid-area:stack] transition-opacity duration-200" 2848 x-bind:class="{ 'invisible': redeemStates['free_product_free_product_1774022853187_2dkxwkikl']?.redeeming, 'visible': !redeemStates['free_product_free_product_1774022853187_2dkxwkikl']?.redeeming }" 2849 >Redeem</span> 2850 <svg class="size-4 animate-spin [grid-area:stack] transition-opacity duration-200" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" x-bind:class="{ &ap
2850os;invisible': redeemStates['free_product_free_product_1774022853187_2dkxwkikl']?.redeeming !== true, 'visible': redeemStates['free_product_free_product_1774022853187_2dkxwkikl']?.redeeming === true }"><desc>Loading spinner icon</desc><circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle><path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path></svg> </button> 2851 </div> 2852 2853 </div> 2854 </div> 2855 </div> 2856 2857 <!-- Top scroll fade --> 2858 <div x-show="!panelAtTop" 2859 class="pointer-events-none absolute top-0 left-0 h-8 z-10" 2860 style="right: var(--rwp-scrollbar-width, 8px); background: linear-gradient(to bottom, var(--color-rwp-widget-bg), transparent);"></div> 2861 <!-- Bottom scroll fade — hidden when guest join section is visible --> 2862 <div x-show="!panelAtBottom && memberId !== 0" 2863 class="pointer-events-none absolute bottom-0 left-0 h-12 z-10" 2864 style="right: var(--rwp-scrollbar-width, 8px); background: linear-gradient(to top, var(--color-rwp-widget-bg), transparent);"></div> 2865 2866 <div x-show="memberId === 0"> 2867 <!-- Fade Overlay --> 2868 <div 2869 class="absolute bottom-0 left-0 right-0 h-24 pointer-events-none" 2870 style="background: linear-gradient(to top, var(--color-rwp-widget-bg), var(--color-rwp-widget-bg) 20%, transparent);" 2871 x-data="{ hideJoinSection: false }" 2872 x-on:member-joined.window="hideJoinSection = true" 2873 x-show="!hideJoinSection" 2874 ></div> 2875 2876 <!-- Sticky Join Section --> 2877 <div 2878 class="absolute bottom-0 left-0 right-0 bg-white px-6 py-4 border-t border-gray-100" 2879 x-data="{ hideJoinSection: false, isLoggedIn: false }" 2880 x-on:member-joined.window="hideJoinSection = true" 2881 x-show="!hideJoinSection" 2882 > 2883 <div> 2884 <button 2885 type="button" 2886 x-on:click="isLoggedIn ? window.dispatchEvent(new CustomEvent('create-member-direct')) : window.dispatchEvent(new CustomEvent('show-register-form'))" 2887 class="bg-rwp-brand text-rwp-widget-button-text text-sm font-semibold rounded-lg cursor-pointer transition-colors hover:bg-rwp-brand-hover disabled:hover:bg-rwp-brand disabled:opacity-50 disabled:cursor-not-allowed focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 w-full py-3 px-8 min-h-[48px] mx-auto flex items-center justify-center" 2888 > 2889 Join now </button> 2890 </div> 2891 <div x-show="!isLoggedIn" x-cloak class="mt-3 text-center text-rwp-widget-text"> 2892 <p class="text-sm text-gray-600"> 2893 Already have an account? <button 2894 x-on:click="navigateToPanel('main', { resetScroll: true }); $dispatch('show-login-form');" 2895 class="font-medium underline text-rwp-accent cursor-pointer" 2896 >Sign in</button> 2897 </p> 2898 </div> 2899 </div> 2900 </div> 2901 </div> 2902 2903 2904 2905 <div 2906 x-show="currentPanel === 'activity'" 2907 x-init="$watch('currentPanel', value => { 2908 if (value === 'activity') { 2909 if (activityItems.length === 0 || needsActivityRefresh) { 2910 if (needsActivityRefresh && activityTab === 'points') { 2911 activityItems = []; 2912 activityPage = 1; 2913 activityHasMore = false; 2914 activityCache = {}; 2915 } 2916 loadActivity(); 2917 needsActivityRefresh = false; 2918 } 2919 } 2920 })" 2921 x-bind:class="'relative h-full flex flex-col ' + (currentPanel === 'activity' ? (navigationDirection === 'initial' ? 'rwp-panel-fade-up' : (navigationDirection === 'forward' ? 'rwp-panel-slide-forward' : (navigationDirection === 'back' ? 'rwp-panel-slide-back' : ''))) : '')" 2922 > 2923 <div class="shrink-0 px-6 pt-6 text-rwp-widget-text"> 2924 <h2 class="text-lg font-semibold text-rwp-widget-heading mb-3">Activity</h2> 2925 <!-- Segmented Control (hidden when only one tab is available) --> 2926 <div class="relative w-full mb-3" x-show="(pointsEnabled || (!!memberId && userData.points > 0)) && referralsEnabled"> 2927 <div class="relative inline-grid items-center justify-center w-full h-10 grid-cols-2 p-1 text-gray-500 bg-gray-100 rounded-xl select-none" role="tablist"> 2928 <button 2929 x-ref="activityPointsBtn" 2930 x-show="pointsEnabled || (!!memberId && userData.points > 0)" 2931 x-on:click="switchActivityTab('points')" 2932 type="button" 2933 class="relative z-20 inline-flex items-center justify-center w-full h-8 px-3 text-sm font-medium transition-all rounded-md cursor-pointer whitespace-nowrap focu
2933s-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500" 2934 x-bind:class="activityTab === 'points' ? 'text-gray-900' : 'text-gray-500'" 2935 role="tab" 2936 x-bind:aria-selected="activityTab === 'points'" 2937 > 2938 Points </button> 2939 <button 2940 x-ref="activityReferralsBtn" 2941 x-show="referralsEnabled" 2942 x-on:click="switchActivityTab('referrals')" 2943 type="button" 2944 class="relative z-20 inline-flex items-center justify-center w-full h-8 px-3 text-sm font-medium transition-all rounded-md cursor-pointer whitespace-nowrap focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500" 2945 x-bind:class="activityTab === 'referrals' ? 'text-gray-900' : 'text-gray-500'" 2946 role="tab" 2947 x-bind:aria-selected="activityTab === 'referrals'" 2948 > 2949 Referrals </button> 2950 <div class="absolute z-10 bg-white rounded-lg shadow-sm left-1 top-1 transition-transform duration-350 ease-[cubic-bezier(0.22,1.3,0.36,1)]" x-bind:style="'width: calc(50% - 4px); height: 32px; transform: translateX(' + ({'points': 0, 'referrals': 100}[activityTab] ?? 0) + '%)'"></div> 2951 </div> 2952 </div> 2953 </div> 2954 <div class="relative flex-1 min-h-0"> 2955 <div x-ref="activityScroll" x-on:scroll.passive="syncActivityFade()" class="h-full overflow-y-auto custom-scrollbar px-6 pt-1 pb-6 text-rwp-widget-text"> 2956 2957 <!-- Loading State --> 2958 <div x-show="activityLoading" class="flex items-center justify-center py-8"> 2959 <div class="animate-spin size-6 border-2 border-gray-200 border-t-gray-600 rounded-full"></div> 2960 </div> 2961 2962 <!-- Activity List --> 2963 <div x-show="!activityLoading"> 2964 <!-- Empty State - Points Tab --> 2965 <template x-if="activityItems.length === 0 && !activityLoading && activityTab === 'points'"> 2966 <div class="text-center py-8"> 2967 <div class="flex justify-center mb-3"> 2968 <svg class="size-10 text-gray-400" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24"> 2969 <desc> 2970 Points activity icon 2971 </desc> 2972 <path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M12 2V1" stroke-width="1.5"></path> 2973 <path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="m12 23 0 -2.7661" stroke-width="1.5"></path> 2974 <path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M1 12h2.71875" stroke-width="1.5"></path> 2975 <path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M20.2812 12H23" stroke-width="1.5"></path> 2976 <path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="m6.0625 19.2258 -2.01636 2.0164" stroke-width="1.5"></path> 2977 <path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="m17.9375 5.03979 2.0164 -2.01635" stroke-width="1.5"></path> 2978 <path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M6.0625 5.03979 4.04614 3.02344" stroke-width="1.5"></path> 2979 <path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="m17.9375 18.9602 2.0164 2.0164" stroke-width="1.5"></path> 2980 <path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="m12.4169 4.69626 1.9151 3.82921 3.6838 0.36877c0.0879 0.00861 0.1715 0.04201 0.2412 0.09631 0.0696 0.0543 0.1224 0.12727 0.1522 0.21041 0.0297 0.08314 0.0352 0.17302 0.0159 0.25918 -0.0193 0.08616 -0.0628 0.16505 -0.1252 0.22748L15.264 12.7225l1.1256 4.1238c0.0235 0.0869 0.0214 0.1787 -0.006 0.2644 -0.0275 0.0857 -0.0791 0.1616 -0.1486 0.2187 -0.0696 0.057 -0.1542 0.0928 -0.2436 0.1029 -0.0894 0.0101 -0.1798 -0.0058 -0.2604 -0.0458L12 15.5205l-3.73099 1.8679c-0.08052 0.0402 -0.17096 0.0562 -0.2604 0.0462 -0.08943 -0.0101 -0.17403 -0.0459 -0.24358 -0.103 -0.06955 -0.0571 -0.12107 -0.1332 -0.14833 -0.2189 -0.02727 -0.0858 -0.02911 -0.1776 -0.00531 -0.2644l1.1246 -4.1258 -3.03584 -3.03681c-0.06245 -0.06243 -0.10588 -0.14132 -0.12523 -0.22748 -0.01935 -0.08615 -0.01382 -0.17604 0.01595 -0.25918 0.02976 -0.08313 0.08254 -0.1561 0.15217 -0.21041 0.06964 -0.0543 0.15327 -0.0877 0.24115 -0.09631l3.68382 -0.36876 1.91509 -3.82922c0.0389 -0.07736 0.0985 -0.14238 0.1723 -0.18774 0.0737 -0.04536 0.1586 -0.06929 0.2452 -0.06909 0.0866 0.0002 0.1714 0.02452 0.2449 0.07022 0.0736 0.04571 0.1329 0.11099 0.1714 0.18854Z" stroke-width="1.5"></path> 2981 </svg> </div> 2982 <h3 class="text-lg font-medium text-gray-900 mb-1" x-text="'No ' + currencyPlural + ' yet'"></h3> 2983 <p class="text-sm text-gray-500 mb-4" x-text="'See all the ways you can earn ' + currencyPlural"></p> 2984 <button 2985 x-on:click="navigateToPanel('ways-to-earn')" 2986 class="inline-flex items-center px-4 py-2 border border-transparent text-sm font-medium rounded-md text-white bg-rwp-brand hover:bg-rwp-brand-hover cursor-pointer transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-rwp-brand focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500" 2987 > 2988 <span x-text="'Earn ' + currencyPlural"></span> 2989 </button> 2990 </div> 2991 </template> 2992 2993 <!-- Empty State - Referrals Tab --> 2994 <template x-if="activityItems.length === 0 && !activityLoading && activityTab === 'referrals'"> 2995 <div class="text-center py-8"> 2996 <div class="flex justify-center mb-3"> 2997 <svg class="size-10 text-gray-400" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> 2998 <desc> 2999 Refer a friend icon 3000 </desc>
3001 <path d="m3.132 12.8 0.448 -1.175 -1.046 -2.744a0.929 0.929 0 0 1 0.36 -1.107l2.458 -1.605 0.767 -2.834a0.928 0.928 0 0 1 0.942 -0.684l2.932 0.149L12.279 0.955a0.928 0.928 0 0 1 1.165 0L15.73 2.8l2.932 -0.146a0.928 0.928 0 0 1 0.942 0.684l0.767 2.834 2.458 1.605a0.928 0.928 0 0 1 0.36 1.107l-1.045 2.744 1.045 2.743a0.929 0.929 0 0 1 -0.36 1.108l-2.458 1.6 -0.771 2.835a0.927 0.927 0 0 1 -0.942 0.685l-2.932 -0.146 -2.286 1.841" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 3002 <path d="m0.75 19.769 1.656 2.609" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 3003 <path d="m9.908 8.147 6.294 9.916" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 3004 <path d="M15.871 17.541 2.075 21.857l-0.994 -1.566 9.158 -11.622 5.632 8.872z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 3005 <path d="m5.056 20.924 0.876 1.346a2.041 2.041 0 0 0 2.906 0.614 2.256 2.256 0 0 0 0.587 -3.04l-0.163 -0.236" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 3006 </svg> </div> 3007 <h3 class="text-lg font-medium text-gray-900 mb-1">No referrals yet</h3> 3008 <p class="text-sm text-gray-500 mb-4">When friends shop using your referral link, you'll see their activity here</p> 3009 <button 3010 x-on:click="navigateToPanel('main')" 3011 class="inline-flex items-center px-4 py-2 border border-transparent text-sm font-medium rounded-md text-white bg-rwp-brand hover:bg-rwp-brand-hover cursor-pointer transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-rwp-brand focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500" 3012 > 3013 Invite friends </button> 3014 </div> 3015 </template> 3016 3017 <!-- Referral Summary Row (shown above activity items when referrals tab has data) --> 3018 <div x-show="activityTab === 'referrals' && activityItems.length > 0 && activityStatusCounts" class="flex items-center gap-2 text-sm text-gray-500 pb-2 mb-1"> 3019 <span x-text="(activityStatusCounts ? activityStatusCounts.completed : 0) + ' completed'"></span> 3020 <span x-show="activityStatusCounts && !!activityStatusCounts.pending">·</span> 3021 <span x-show="activityStatusCounts && !!activityStatusCounts.pending" x-text="(activityStatusCounts ? activityStatusCounts.pending : 0) + ' pending'"></span> 3022 </div> 3023 3024 <!-- Activity Items --> 3025 <div class="divide-y divide-gray-100"> 3026 <template x-for="item in activityItems" x-bind:key="item.id"> 3027 <div class="py-3"> 3028 <div class="flex items-start justify-between gap-4"> 3029 <!-- Left column: Description + Date --> 3030 <div class="flex-1 min-w-0"> 3031 <!-- Referrals tab: Separate friend_name (semi-bold) and action_text (normal) --> 3032 <template x-if="activityTab === 'referrals' && item.friend_name"> 3033 <p class="text-sm text-gray-900"> 3034 <span class="font-semibold" x-text="item.friend_name"></span> 3035 <template x-if="item.action_text"> 3036 <span class="font-normal" x-text="' ' + item.action_text"></span> 3037 </template> 3038 </p> 3039 </template> 3040 <!-- Points/other tabs: Primary line: Reward/action name --> 3041 <template x-if="activityTab !== 'referrals' || !item.friend_name"> 3042 <p class="text-sm text-gray-900" x-text="item.target || item.action"></p> 3043 </template> 3044 <!-- Small text for order_id (refunds) --> 3045 <template x-if="item.order_id"> 3046 <p class="text-xs text-gray-400 mt-0.5" x-text="'#' + item.order_id"></p> 3047 </template> 3048 <!-- Small text for product_name (product reviews) --> 3049 <template x-if="item.product_name"> 3050 <p class="text-xs text-gray-400 mt-0.5" x-text="item.product_name"></p> 3051 </template> 3052 <!-- Secondary line: Date (all tabs) --> 3053 <p class="text-xs text-gray-500 mt-0.5" x-text="item.date"></p> 3054 </div> 3055 <!-- Right column: Points value + currency OR Status pill --> 3056 <div class="flex-shrink-0 text-right"> 3057 <!-- Points tab: Point value (with inline pending badge) + currency name below --> 3058 <template x-if="activityTab === 'points' && item.points !== undefined"> 3059 <div> 3060 <div class="flex items-center justify-end gap-1.5"> 3061 <p x-bind:class="item.source_type === 'points_expiration' ? 'text-gray-500' : (item.is_deduction ? 'text-gray-700' : (item.status === 'pending' ? 'text-gray-500' : 'text-emerald-600'))" 3062 class="text-sm font-semibold" 3063 x-text="(item.is_deduction ? '-' : '+') + Math.abs(item.points).toLocaleStr
3063ing()"> 3064 </p> 3065 <span x-show="item.status === 'pending'" 3066 class="text-[11px] text-gray-500"> 3067 Pending </span> 3068 </div> 3069 <p class="text-xs text-gray-500 mt-0.5 text-right" 3070 x-text="getCurrencyName(Math.abs(item.points))"> 3071 </p> 3072 </div> 3073 </template> 3074 <!-- Referrals/rewards tab: Status badge --> 3075 <template x-if="activityTab !== 'points' && item.status"> 3076 <span 3077 x-bind:class="{ 3078 'bg-emerald-50 text-emerald-700 border border-emerald-100': item.status === 'completed' || item.status === 'redeemed', 3079 'bg-amber-50 text-amber-700 border border-amber-100': item.status === 'pending', 3080 'bg-gray-50 text-gray-700 border border-gray-200': item.status === 'issued', 3081 'bg-red-50 text-red-700 border border-red-100': item.status === 'blocked' || item.status === 'rejected', 3082 'bg-gray-100 text-gray-600 border border-gray-200': item.status === 'canceled' 3083 }" 3084 class="inline-flex items-center rounded-full px-2 py-0.5 text-xs font-medium mt-0.5" 3085 x-text="({ 3086 completed: 'Completed', 3087 redeemed: 'Redeemed', 3088 pending: 'Pending', 3089 issued: 'Issued', 3090 blocked: 'Blocked', 3091 rejected: 'Rejected', 3092 canceled: 'Canceled', 3093 expired: 'Expired' 3094 })[item.status] || (item.status.charAt(0).toUpperCase() + item.status.slice(1))" 3095 ></span> 3096 </template> 3097 </div> 3098 </div> 3099 </div> 3100 </template> 3101 </div> 3102 3103 <!-- Load More --> 3104 <div x-show="activityHasMore" class="mt-4 text-center"> 3105 <button 3106 x-on:click="loadMoreActivity()" 3107 x-bind:disabled="activityLoadingMore" 3108 class="text-sm text-gray-600 hover:text-gray-900 font-medium cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500" 3109 > 3110 <span x-show="!activityLoadingMore">Load more</span> 3111 <span x-show="activityLoadingMore" class="inline-flex items-center gap-1.5"> 3112 <span class="animate-spin size-3.5 border-2 border-gray-200 border-t-gray-600 rounded-full"></span> 3113 Loading... </span> 3114 </button> 3115 </div> 3116 </div> 3117 </div> 3118 <!-- Top scroll fade --> 3119 <div 3120 x-show="activityShowTopFade" 3121 class="pointer-events-none absolute top-0 left-0 h-8 z-10" 3122 style="right: var(--rwp-scrollbar-width, 8px); background: linear-gradient(to bottom, var(--color-rwp-widget-bg), transparent);" 3123 ></div> 3124 <!-- Bottom scroll fade --> 3125 <div 3126 x-show="activityShowFade" 3127 class="pointer-events-none absolute bottom-0 left-0 h-12 rounded-b-2xl" 3128 style="right: var(--rwp-scrollbar-width, 8px); background: linear-gradient(to top, var(--color-rwp-widget-bg), transparent);" 3129 ></div> 3130 </div> 3131 </div> 3132 3133 <div 3134 x-show="currentPanel === 'create-account-prompt'" 3135 x-bind:class="'create-account-prompt-panel relative h-full flex flex-col ' + (currentPanel === 'create-account-prompt' ? (navigationDirection === 'initial' ? 'rwp-panel-fade-up' : (navigationDirection === 'forward' ? 'rwp-panel-slide-forward' : (navigationDirection === 'back' ? 'rwp-panel-slide-back' : ''))) : '')" 3136 > 3137 <div class="flex-1 overflow-y-auto custom-scrollbar px-6 py-6 text-rwp-widget-text"> 3138 <!-- Icon and Header --> 3139 <div class="text-center mb-6"> 3140 3141 <div class="relative inline-block mb-2"> 3142 <!-- Main reward icon --> 3143 <div class="size-10 flex items-center justify-center text-rwp-widget-text/45" x-show="lockedReward" x-html="lockedReward?.iconHtml"> 3144 <!-- Icon will be populated by Alpine --> 3145 </div> 3146 </div> 3147 <h2 class="text-2xl font-bold text-rwp-widget-heading mb-3"> 3148 <span x-show="lockedReward" x-text="lockedReward?.title"></span> 3149 </h2> 3150 <p class="text-sm text-rwp-widget-text"> 3151 Requires an account to redeem </p> 3152 3153 </div> 3154 3155 <!-- Benefits List --> 3156 <div class="space-y-3 mb-8"> 3157 <div class="flex items-start gap-3"> 3158 <svg class="size-5 text-emerald-500 flex-shrink-0 mt-0.5" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke="currentColor"><desc>Checkmark icon</desc><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"></path></svg> <div class="flex-1"> 3159 <p class="text-sm font-medium text-rwp-widget-heading"> 3160 Redeem rewards now </p> 3161 <p class="text-sm text-rwp-widget-text"> 3162 Turn your <span x-text="currencyPlural.toLowerCase()"></span> into discounts and perks </p> 3163 </div> 3164 </div> 3165 <div class="flex items-start gap-3"> 3166 <svg class="size-5 text-emerald-500 flex-shrink-0 mt-0.5" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke="currentColor"><desc>Checkmark icon</desc><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"></path></svg> <div class="flex-1"> 3167 <p class="text-sm font-medium text-rwp-widget-heading"> 3168 Instant setup </p> 3169 <p class="text-sm text-rwp-widget-text">
3170 One click and you're ready to go </p> 3171 </div> 3172 </div> 3173 <div class="flex items-start gap-3"> 3174 <svg class="size-5 text-emerald-500 flex-shrink-0 mt-0.5" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke="currentColor"><desc>Checkmark icon</desc><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"></path></svg> <div class="flex-1"> 3175 <p class="text-sm font-medium text-rwp-widget-heading"> 3176 Earn even more </p> 3177 <p class="text-sm text-rwp-widget-text"> 3178 Get +25 bonus <span x-text="currencyPlural.toLowerCase()"></span> for signing up </p> 3179 </div> 3180 </div> 3181 </div> 3182 3183 <!-- Create Account Button --> 3184 <button 3185 type="button" 3186 x-on:click="window.dispatchEvent(new CustomEvent('show-register-form'))" 3187 class="bg-rwp-brand text-rwp-widget-button-text text-sm font-semibold rounded-lg cursor-pointer transition-colors hover:bg-rwp-brand-hover disabled:hover:bg-rwp-brand disabled:opacity-50 disabled:cursor-not-allowed focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 w-full py-3 px-8 min-h-[48px] mx-auto grid grid-cols-1 grid-rows-1 [grid-template-areas:'stack'] place-items-center w-full" 3188 > 3189 Create account to use points </button> 3190 3191 <!-- Back Link --> 3192 <div class="text-center mt-4"> 3193 <button 3194 type="button" 3195 x-on:click="navigateToPanel('ways-to-redeem')" 3196 class="text-sm text-rwp-widget-text hover:text-rwp-widget-text underline cursor-pointer" 3197 > 3198 Back to rewards </button> 3199 </div> 3200 </div> 3201 </div> 3202 3203 <!-- Redeem Success Panel --> 3204 <div 3205 x-show="currentPanel === 'redeem-success'" 3206 x-bind:class="'redeem-success-panel relative h-full flex flex-col ' + (currentPanel === 'redeem-success' ? (navigationDirection === 'initial' ? 'rwp-panel-fade-up' : (navigationDirection === 'forward' ? 'rwp-panel-slide-forward' : (navigationDirection === 'back' ? 'rwp-panel-slide-back' : ''))) : '')" 3207 > 3208 <div class="flex-1 overflow-y-auto custom-scrollbar px-6 py-6 pb-4 text-rwp-widget-text"> 3209 <!-- Success Header --> 3210 <div 3211 class="text-center mb-6" 3212 x-data="{ 3213 cartSubtotal: 0, 3214 currencySymbol: '$' 3215 }" 3216 > 3217 <div class="flex justify-center mb-2"> 3218 <svg class="size-10 text-green-600" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24"><desc>Check circle alternate</desc><path d="M6 13.223 8.45 16.7a1.049 1.049 0 0 0 1.707 0.051L18 6.828" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path><path d="M0.75 11.999a11.25 11.25 0 1 0 22.5 0 11.25 11.25 0 1 0 -22.5 0Z" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path></svg> </div> 3219 <p class="text-base text-gray-600 mt-2"> 3220 Redeemed <span x-text="redeemSuccessData.points_cost"></span> 3221 <span x-text="' ' + redeemSuccessData.points_label"></span> 3222 </p> 3223 <h2 class="text-2xl font-bold text-gray-900 text-pretty" x-text="redeemSuccessData.title"> 3224 <!-- Title populated from Alpine data --> 3225 </h2> 3226 </div> 3227 3228 <template x-if="redeemSuccessData.reward_type !== 'free_product'"> 3229 <div class="text-sm text-gray-600 text-center mb-2 px-2"> 3230 <p>Use this coupon on your next order</p> 3231 </div> 3232 </template> 3233 3234 <div> 3235 <template x-if="redeemSuccessData.reward_type !== 'free_product'"> 3236 <div class="mb-4" x-data="copyHandler()"> 3237 <div x-data="{ isCheckmark: false }" class="flex rounded-lg bg-white outline-1 -outline-offset-1 outline-gray-200"> 3238 <input 3239 type="text" 3240 readonly 3241 x-ref="couponCode" 3242 x-bind:value="redeemSuccessData.couponCode" 3243 x-on:click="handleCopyClick($refs.couponCode, null, false)" 3244 class="block min-w-0 grow px-5 py-3 text-sm font-mono text-gray-900 cursor-pointer focus:outline-none sm:text-sm/6 text-ellipsis" 3245 > 3246 <div class="flex"> 3247 <button 3248 x-on:click="handleCopyClick($refs.couponCode, $data)"
3249 class="py-3 px-3 relative transition-all duration-200 cursor-pointer" 3250 x-bind:class="{ 'hover:text-gray-900 text-gray-500': !isCheckmark}" 3251 x-ref="copyButton"> 3252 <div class="relative size-6"> 3253 <div class="absolute inset-0 transition-all duration-300 ease-in-out" 3254 x-bind:class="isCheckmark ? 'opacity-0 scale-95' : 'opacity-100 scale-100'"> 3255 <svg class="size-6" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="-1 -1 24 24"><desc>Copy to clipboard icon</desc><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M17.875 6.645833333333333h2.520833333333333c0.506275 0 0.9166666666666666 0.41041 0.9166666666666666 0.9166666666666666v12.833333333333332c0 0.506275 -0.41039166666666665 0.9166666666666666 -0.9166666666666666 0.9166666666666666h-12.833333333333332c-0.5062658333333333 0 -0.9166666666666666 -0.41039166666666665 -0.9166666666666666 -0.9166666666666666V17.875" stroke-width="2"></path><path stroke="currentColor" stroke-linejoin="round" d="M0.6875 1.6041666666666665c0 -0.5062658333333333 0.41041 -0.9166666666666666 0.9166666666666666 -0.9166666666666666h12.833333333333332c0.506275 0 0.9166666666666666 0.41041 0.9166666666666666 0.9166666666666666v12.833333333333332c0 0.506275 -0.41039166666666665 0.9166666666666666 -0.9166666666666666 0.9166666666666666h-12.833333333333332c-0.5062658333333333 0 -0.9166666666666666 -0.41039166666666665 -0.9166666666666666 -0.9166666666666666v-12.833333333333332Z" stroke-width="2"></path></svg> </div> 3256 <div class="absolute inset-0 transition-all duration-300 ease-in-out" 3257 x-bind:class="isCheckmark ? 'opacity-100 scale-100' : 'opacity-0 scale-95'"> 3258 <svg class="size-6" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke="currentColor"><desc>Checkmark icon</desc><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"></path></svg> </div> 3259 </div> 3260 </button> 3261 </div> 3262 </div> 3263 </div> 3264 </template> 3265 3266 <!-- Button and messages section --> 3267 <div> 3268 3269 <!-- Cart-aware Button Section --> 3270 <div 3271 x-data="couponUtils( { 3272 nonce: 'f68cf984f4', 3273 buttonText: 'Apply to cart', 3274 rewardId: redeemSuccessData.reward_id || 0, 3275 couponCode: redeemSuccessData.couponCode || '', 3276 isApplied: redeemSuccessData.is_applied || false, 3277 cartItemCount: 0, 3278 cartProductIds: [], 3279 cartSubtotal: 0, 3280 freeProductId: redeemSuccessData.free_product_id || null, 3281 minimumOrderAmount: redeemSuccessData.minimum_order_amount || 0, 3282 integrationSource: 'woocommerce', 3283 checkoutUrl: 'https://jackkeller.com/checkout/', 3284 cartUrl: 'https://jackkeller.com/cart-2/', 3285 storeUrl: 'https://jackkeller.com/pay-now/', 3286 isAdminPreview: false, 3287 isDemo: false, 3288 addToCartText: 'Add to cart', 3289 claimRewardText: 'Claim reward', 3290 applyToCartText: 'Claim free product', 3291 currencySymbol: '$', 3292 pendingRewardId: 0, 3293 dismissedRewardId: 0 } )" 3294 x-on:reset-buttons.window="if ( $event.detail.except !== $el ) isApplied = false;" 3295 > 3296 <template x-if="redeemSuccessData.reward_type === 'free_product' && !isApplied && !productAddedButCouponFailed && !isPending && (redeemSuccessData.minimum_order_amount <= 0 || cartSubtotal >= redeemSuccessData.minimum_order_amount)"> 3297 <p class="text-sm font-medium text-gray-500 text-center mb-2">Free product applies automatically.</p> 3298 </template> 3299 3300 <template x-if="redeemSuccessData.reward_type === 'free_product' && !isApplied && !productAddedButCouponFailed && !isPending && redeemSuccessData.minimum_order_amount > 0 && cartSubtotal < redeemSuccessData.minimum_order_amount"> 3301 <p class="text-sm text-gray-500 text-center text-pretty mb-2" x-text="'Claim now — we\'ll add it to your cart when you spend ' + currencySymbol + redeemSuccessData.minimum_order_amount + ' or more'"></p> 3302 </template> 3303 3304 <button 3305 x-show="!isApplied && !isPending && !productAddedButCouponFailed" 3306 class="bg-rwp-brand text-rwp-widget-button-text text-sm font-semibold rounded-lg cursor-pointer transition-colors hover:bg-rwp-brand-hover disabled:hover:bg-rwp-brand disabled:opacity-50 disabled:cursor-not-allowed focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500
3306w-full py-3 px-8 min-h-[48px] mx-auto grid grid-cols-1 grid-rows-1 [grid-template-areas:'stack'] place-items-center" 3307 x-on:click="applyCoupon( redeemSuccessData.couponCode, redeemSuccessData.reward_id )" 3308 x-bind:disabled="isApplying" 3309 x-bind:class="{ 3310 'opacity-50 cursor-not-allowed': isApplying, 3311 'hover:bg-rwp-brand-hover': !isApplying 3312 }" 3313 > 3314 <span 3315 class="[grid-area:stack] flex items-center justify-center transition-opacity duration-200" 3316 x-bind:class="{ 'invisible': isApplying, 'visible': !isApplying }" 3317 > 3318 <!-- Dynamic text based on reward type, cart state, minimum spend, and integration --> 3319 <template x-if="redeemSuccessData.reward_type === 'free_product'"> 3320 <span x-text="getFreeProductButtonText(redeemSuccessData.free_product_id, redeemSuccessData.minimum_order_amount)"></span> 3321 </template> 3322 <template x-if="redeemSuccessData.reward_type !== 'free_product'"> 3323 <span> 3324 <span x-show="isWooCommerce">Apply to cart</span> 3325 <span x-show="!isWooCommerce">Apply coupon</span> 3326 </span> 3327 </template> 3328 </span> 3329 <svg class="w-5 h-5 animate-spin [grid-area:stack] transition-opacity duration-200" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" x-bind:class="{ 'invisible': isApplying !== true, 'visible': isApplying === true }"><desc>Loading spinner icon</desc><circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle><path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path></svg> </button> 3330 3331 <div x-show="hasErrors" class="text-sm mt-2 text-red-500">An error occurred. Please reload the page and try again.</div> 3332 3333 <!-- Success Message - Show when coupon applied --> 3334 <div x-show="isApplied" x-cloak class="mb-1 font-medium inline-flex items-center gap-2 rounded-lg px-3 py-2 text-emerald-600 text-sm w-full justify-center"> 3335 <template x-if="redeemSuccessData.reward_type === 'free_product'"> 3336 <span>Free product added to cart</span> 3337 </template> 3338 <template x-if="redeemSuccessData.reward_type !== 'free_product'"> 3339 <span x-text="redeemSuccessData.title + ' applied'"></span> 3340 </template> 3341 </div> 3342 3343 <template x-if="isPending && !productAddedButCouponFailed"> 3344 <div class="text-sm w-full"> 3345 <!-- Confirmation badge --> 3346 <div class="font-medium inline-flex items-center gap-1 text-emerald-600 text-sm w-full justify-center"> 3347 <svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24"> 3348 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"></path> 3349 </svg> 3350 <span>Reward claimed</span> 3351 </div> 3352 3353 <!-- Explanation text --> 3354 <div class="text-center text-gray-500 px-2 mb-3" x-text="'We\'ll add it to your cart when you spend ' + currencySymbol + redeemSuccessData.minimum_order_amount"> 3355 </div> 3356 3357 <!-- Action buttons --> 3358 <div class="space-y-3"> 3359 <!-- Primary CTA - Start/Continue Shopping --> 3360 <a 3361 x-bind:href="isAdminPreview ? 'javascript:void(0)' : storeUrl" 3362 x-bind:data-preview-disabled="isAdminPreview ? 'true' : null" 3363 x-bind:data-tippy-content="isAdminPreview ? 'Disabled for admin preview' : null" 3364 x-bind:class="{ '!cursor-not-allowed': isAdminPreview }" 3365 class="bg-rwp-brand text-rwp-widget-button-text text-sm font-semibold rounded-lg cursor-pointer transition-colors hover:bg-rwp-brand-hover disabled:hover:bg-rwp-brand disabled:opacity-50 disabled:cursor-not-allowed focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 w-full py-3 px-8 min-h-[48px] mx-auto flex items-center justify-center no-underline block" 3366 x-text="isCartEmpty ? 'Start shopping' : 'Continue shopping'" 3367 ></a> 3368 3369 <!-- Secondary CTA - View Cart (WooCommerce only, when cart has items) --> 3370 <template x-if="isWooCommerce && !isCartEmpty"> 3371 <a 3372 x-bind:href="isAdminPreview ? 'javascript:void(0)' : cartUrl" 3373 x-bind:data-preview-disabled="isAdminPreview ? 'true' : null" 3374 x-bind:data-tippy-content="isAdminPreview ? 'Disabled for admin preview' : null" 3375 x-bind:class="{ '!cursor-not-allowed': isAdminPreview }" 3376 class="text-sm inline-block w-full bg-gray-100 text-gray-700 font-semibold py-3 px-8 rounded-lg hover:bg-gray-200 transition-colors text-center cursor-pointer focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 no-underline block" 3377 > 3378 View cart </a> 3379 </template> 3380 </div> 3381 </div> 3382 </template> 3383 3384 <div x-show="productAddedButCouponFailed && !isPending" x-cloak class="mt-3 mb-3 text-sm w-full space-y-2"> 3385 <div x-show="productWasNewlyAdded" class="text-center text-emerald-600 font-medium"> 3386 Product added to cart </div> 3387 <template x-if="remainingToUnlock > 0"> 3388 <div class="text-center text-gray-600 px-2" x-text="'Almost there — add ' + '$' + remainingToUnlock + ' more to unlock'"></div> 3389 </template> 3390 </div> 3391 3392 <!-- Buttons when coupon failed but product added (fallback) --> 3393 <template x-if="productAddedButCouponFailed && !isPending"> 3394 <div> 3395 <!-- Primary CTA - Continue Shopping --> 3396 <a 3397 x-bind:href="isAdminPreview ? 'javascript:void(0)' : storeUrl" 3398 x-bind:data-preview-disabled="isAdminPreview ? 'true' : null" 3399 x-bind:data-tippy-content="isAdminPreview ? 'Disabled for admin preview' : null" 3400 x-bind:class="{ 'mb-3': isWooCommerce, '!cursor-not-allowed': isAdminPreview }" 3401 class="bg-rwp-brand text-rwp-widget-button-text text-sm font-semibold rounded-lg cursor-pointer transition-colors hover:bg-rwp-brand-hover disabled:hover:bg-rwp-brand disabled:opacity-50 disabled:cursor-not-allowed focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500
3401w-full py-3 px-8 min-h-[48px] mx-auto flex items-center justify-center no-underline block" 3402 > 3403 Continue shopping </a> 3404 3405 <!-- Secondary CTA - View Cart (WooCommerce only) --> 3406 <template x-if="isWooCommerce"> 3407 <a 3408 x-bind:href="isAdminPreview ? 'javascript:void(0)' : cartUrl" 3409 x-bind:data-preview-disabled="isAdminPreview ? 'true' : null" 3410 x-bind:data-tippy-content="isAdminPreview ? 'Disabled for admin preview' : null" 3411 x-bind:class="{ '!cursor-not-allowed': isAdminPreview }" 3412 class="text-sm inline-block w-full bg-gray-100 text-gray-700 font-semibold py-3 px-8 rounded-lg hover:bg-gray-200 transition-colors text-center cursor-pointer focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 no-underline block" 3413 > 3414 View cart </a> 3415 </template> 3416 </div> 3417 </template> 3418 3419 <!-- Error Message - Show when coupon failed to apply (no product involved) --> 3420 <div x-show="hasErrors && !productAddedButCouponFailed" x-cloak class="mb-1 font-medium inline-flex items-center gap-2 rounded-lg px-3 py-2 text-red-600 text-sm w-full justify-center"> 3421 <span x-text="errorMessage"></span> 3422 </div> 3423 3424 <!-- Buttons when coupon is applied successfully --> 3425 <template x-if="isApplied && !isCartEmpty"> 3426 <div> 3427 <!-- Primary CTA - Go to Checkout --> 3428 <a 3429 x-bind:href="isAdminPreview ? 'javascript:void(0)' : checkoutUrl" 3430 x-bind:data-preview-disabled="isAdminPreview ? 'true' : null" 3431 x-bind:data-tippy-content="isAdminPreview ? 'Disabled for admin preview' : null" 3432 class="bg-rwp-brand text-rwp-widget-button-text text-sm font-semibold rounded-lg cursor-pointer transition-colors hover:bg-rwp-brand-hover disabled:hover:bg-rwp-brand disabled:opacity-50 disabled:cursor-not-allowed focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 w-full py-3 px-8 min-h-[48px] mx-auto flex items-center justify-center no-underline block" 3433 x-bind:class="{ 'mb-3': isWooCommerce, '!cursor-not-allowed': isAdminPreview }" 3434 > 3435 Go to checkout </a> 3436 3437 <!-- Secondary CTA - View Cart (WooCommerce only) --> 3438 <template x-if="isWooCommerce"> 3439 <a 3440 x-bind:href="isAdminPreview ? 'javascript:void(0)' : cartUrl" 3441 x-bind:data-preview-disabled="isAdminPreview ? 'true' : null" 3442 x-bind:data-tippy-content="isAdminPreview ? 'Disabled for admin preview' : null" 3443 x-bind:class="{ '!cursor-not-allowed': isAdminPreview }" 3444 class="text-sm inline-block w-full bg-gray-100 text-gray-700 font-semibold py-3 px-8 rounded-lg hover:bg-gray-200 transition-colors text-center cursor-pointer focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 no-underline block" 3445 > 3446 View cart </a> 3447 </template> 3448 </div> 3449 </template> 3450 3451 <!-- Button when coupon is applied but cart is empty --> 3452 <template x-if="isApplied && isCartEmpty"> 3453 <div> 3454 <!-- Primary CTA - Shop Now --> 3455 <a 3456 x-bind:href="isAdminPreview ? 'javascript:void(0)' : storeUrl" 3457 x-bind:data-preview-disabled="isAdminPreview ? 'true' : null" 3458 x-bind:data-tippy-content="isAdminPreview ? 'Disabled for admin preview' : null" 3459 x-bind:class="{ '!cursor-not-allowed': isAdminPreview }" 3460 class="bg-rwp-brand text-rwp-widget-button-text text-sm font-semibold rounded-lg cursor-pointer transition-colors hover:bg-rwp-brand-hover disabled:hover:bg-rwp-brand disabled:opacity-50 disabled:cursor-not-allowed focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 w-full py-3 px-8 min-h-[48px] mx-auto flex items-center justify-center no-underline block" 3461 > 3462 Shop now </a> 3463 <!-- No secondary button when cart is empty --> 3464 </div> 3465 </template> 3466 3467 <!-- Coupon Terms (below buttons) - show only expiry when applied or ready (minimum met). --> 3468 <template x-if="redeemSuccessData.coupon_terms"> 3469 <div class="mt-2 text-center"> 3470 <span class="text-sm text-gray-500" x-text="(isApplied || (redeemSuccessData.reward_type === 'free_product' && !isPending && (redeemSuccessData.minimum_order_amount <= 0 || cartSubtotal >= redeemSuccessData.minimum_order_amount))) && redeemSuccessData.expiry_text ? redeemSuccessData.expiry_text : redeemSuccessData.coupon_terms"></span> 3471 </div> 3472 </template>
3473 </div> 3474 </div> 3475 3476 </div> 3477 3478 </div> 3479 3480 <div 3481 x-data="{ 3482 couponFailed: false, 3483 showCode: false, 3484 isCheckmark: false, 3485 isPending: false, 3486 isApplied: false, 3487 cartSubtotal: 0, 3488 minimumOrderAmount: 0, 3489 pendingRewardId: 0, 3490 ...copyHandler() 3491 }" 3492 x-init=" 3493 minimumOrderAmount = redeemSuccessData.minimum_order_amount || 0; 3494 isPending = pendingRewardId > 0 && pendingRewardId === parseInt(redeemSuccessData.reward_id || 0, 10); 3495 window.addEventListener('free-product-coupon-failed', () => { couponFailed = true; }); 3496 window.addEventListener('show-redeem-success', () => { couponFailed = false; isPending = false; isApplied = false; }); 3497 window.addEventListener('reward-set-pending', () => { isPending = true; }); 3498 window.addEventListener('reward-auto-applied', () => { isPending = false; isApplied = true; }); 3499 window.addEventListener('coupon-applied', () => { isApplied = true; }); 3500 " 3501 x-show="redeemSuccessData.reward_type === 'free_product' && !isApplied && (isPending || (redeemSuccessData.minimum_order_amount <= 0 || cartSubtotal >= redeemSuccessData.minimum_order_amount))" 3502 x-cloak 3503 class="px-6 text-center bg-gray-50 border-t border-gray-100 flex flex-col-reverse items-center" 3504 > 3505 <button 3506 x-on:click="if (!showCode) { showCode = true; $nextTick(() => { handleCopyClick($refs.couponCode, $data); }); } else { showCode = false; }" 3507 class="text-sm text-gray-500 hover:text-gray-600 underline underline-offset-2 cursor-pointer bg-transparent border-0 my-4" 3508 x-text="showCode ? 'Hide code' : 'Use a code at checkout'" 3509 ></button> 3510 3511 <!-- Collapsible code section --> 3512 <div x-show="showCode" x-collapse x-cloak class="w-full"> 3513 <div class="pt-4"> 3514 <div class="flex rounded-lg bg-white outline-1 -outline-offset-1 outline-gray-200"> 3515 <input 3516 type="text" 3517 readonly 3518 x-ref="couponCode" 3519 x-bind:value="redeemSuccessData.couponCode" 3520 x-on:click="handleCopyClick($refs.couponCode, null, false)" 3521 class="block min-w-0 grow px-5 py-3 text-sm font-mono text-gray-900 cursor-pointer focus:outline-none sm:text-sm/6 text-ellipsis" 3522 > 3523 <div class="flex"> 3524 <button 3525 x-on:click="handleCopyClick($refs.couponCode, $data)" 3526 class="py-3 px-3 relative transition-all duration-200 cursor-pointer" 3527 x-bind:class="{ 'hover:text-gray-900 text-gray-500': !isCheckmark}" 3528 x-ref="copyButton"> 3529 <div class="relative size-6"> 3530 <div class="absolute inset-0 transition-all duration-300 ease-in-out" 3531 x-bind:class="isCheckmark ? 'opacity-0 scale-95' : 'opacity-100 scale-100'"> 3532 <svg class="size-6" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="-1 -1 24 24"><desc>Copy to clipboard icon</desc><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M17.875 6.645833333333333h2.520833333333333c0.506275 0 0.9166666666666666 0.41041 0.9166666666666666 0.9166666666666666v12.833333333333332c0 0.506275 -0.41039166666666665 0.9166666666666666 -0.9166666666666666 0.9166666666666666h-12.833333333333332c-0.5062658333333333 0 -0.9166666666666666 -0.41039166666666665 -0.9166666666666666 -0.9166666666666666V17.875" stroke-width="2"></path><path stroke="currentColor" stroke-linejoin="round" d="M0.6875 1.6041666666666665c0 -0.5062658333333333 0.41041 -0.9166666666666666 0.9166666666666666 -0.9166666666666666h12.833333333333332c0.506275 0 0.9166666666666666 0.41041 0.9166666666666666 0.9166666666666666v12.833333333333332c0 0.506275 -0.41039166666666665 0.9166666666666666 -0.9166666666666666 0.9166666666666666h-12.833333333333332c-0.5062658333333333 0 -0.9166666666666666 -0.41039166666666665 -0.9166666666666666 -0.9166666666666666v-12.833333333333332Z" stroke-width="2"></path></svg> </div> 3533 <div class="absolute inset-0 transition-all duration-300 ease-in-out" 3534 x-bind:class="isCheckmark ? 'opacity-100 scale-100' : 'opacity-0 scale-95'"> 3535 <svg class="size-6" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke="currentColor"><desc>Checkmark icon</desc><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"></path></svg> </div> 3536 </div> 3537 </button> 3538 </div> 3539 </div> 3540 </div> 3541 </div>
3542 </div> 3543 </div> 3544 </div> 3545 3546 3547 <div 3548 x-show="currentPanel === 'your-rewards'" 3549 x-bind:class="'relative h-full flex flex-col overflow-hidden ' + (currentPanel === 'your-rewards' ? (navigationDirection === 'initial' ? 'rwp-panel-fade-up' : (navigationDirection === 'forward' ? 'rwp-panel-slide-forward' : (navigationDirection === 'back' ? 'rwp-panel-slide-back' : ''))) : '')" 3550 x-data="{ panelAtTop: true, panelAtBottom: false }" 3551 x-effect="if (currentPanel === 'your-rewards') { void availableRewards?.length; const el = $el.querySelector('.overflow-y-auto'); if (el && el.scrollHeight > 0) { panelAtBottom = el.scrollTop + el.clientHeight >= el.scrollHeight - 5; } }" 3552 > 3553 <div class="flex-1 overflow-y-auto custom-scrollbar px-0 py-6" 3554 @scroll="panelAtTop = $el.scrollTop < 5; panelAtBottom = $el.scrollTop + $el.clientHeight >= $el.scrollHeight - 5" 3555 > 3556 3557 <h2 class="text-lg font-semibold text-rwp-widget-heading mb-3 px-6">Your rewards</h2> 3558 3559 <div class="px-3"> 3560 <template x-if="availableRewards && availableRewards.length > 0"> 3561 <template x-for="reward in availableRewards" x-bind:key="reward.id"> 3562 <div> 3563 <button 3564 x-on:click="navigateToPanel('reward-detail-' + reward.id)" 3565 class="w-full hover:bg-gray-50 text-left px-4 py-3 rounded-lg flex items-center justify-between transition-colors cursor-pointer focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 !px-3" 3566 > 3567 <div class="flex items-center gap-4"> 3568 <div class="size-8 flex items-center justify-center flex-shrink-0 text-rwp-widget-icon-text" x-html="reward.icon_html"> 3569 <!-- Icon will be populated from server --> 3570 </div> 3571 <div class="flex-1"> 3572 <div class="font-medium text-rwp-widget-heading text-sm" x-text="reward.title"></div> 3573 <div class="text-xs text-gray-500"> 3574 <template x-if="reward.is_out_of_stock"> 3575 <span class="text-amber-600">Out of stock</span> 3576 </template> 3577 <template x-if="!reward.is_out_of_stock && reward.points_cost > 0"> 3578 <span x-text="'Redeemed ' + reward.points_cost + ' ' + reward.points_label"></span> 3579 </template> 3580 <template x-if="!reward.is_out_of_stock && reward.points_cost === 0"> 3581 <span>From referral</span> 3582 </template> 3583 </div> 3584 </div> 3585 </div> 3586 <svg class="size-5 text-gray-400 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24" stroke-width="1.5"> 3587 <path stroke-linecap="round" stroke-linejoin="round" d="M8.25 4.5l7.5 7.5-7.5 7.5" /> 3588 </svg> 3589 </button> 3590 </div> 3591 </template> 3592 </template> 3593 3594 <!-- Empty state when no rewards --> 3595 <template x-if="!availableRewards || availableRewards.length === 0"> 3596 <div class="text-center py-8"> 3597 <div class="flex justify-center mb-3"> 3598 <svg class="size-10 text-gray-400" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24"><desc>Free product icon</desc><g><g><path d="M15.75 23.24a3 3 0 0 0 -3 -3H9a3 3 0 0 0 -3 -3H0.75v6Z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path><path d="m6 20.24 3 0" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path></g><path d="M16.5 17.74H21a0.76 0.76 0 0 0 0.75 -0.75v-6.75" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path><path d="m8.25 10.24 0 4" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path><path d="M7.5 5.99h15s0.75 0 0.75 0.75v2.75s0 0.75 -0.75 0.75h-15s-0.75 0 -0.75 -0.75V6.74s0 -0.75 0.75 -0.75" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path><path d="m15 15.24 0 -9.25" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path><path d="M19.27 3.87A11.84 11.84 0 0 1 15 6a11.93 11.93 0 0 1 2.12 -4.24C18.46 0.43 19.21 0.63 19.8 1.22s0.78 1.33 -0.53 2.65Z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path><path d="M10.73 3.87A11.84 11.84 0 0 0 15 6a11.93 11.93 0 0 0 -2.12 -4.24C11.54 0.43 10.79 0.63 10.2 1.22
3598s-0.78 1.33 0.53 2.65Z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path></g></svg> </div> 3599 <h3 class="text-lg font-medium text-gray-900 mb-1">No rewards yet</h3> 3600 <p class="text-sm text-gray-500 mb-5">Start earning to unlock your first reward</p> 3601 <div class="flex justify-center"> 3602 <button 3603 x-on:click="navigateToPanel('ways-to-earn')" 3604 class="bg-rwp-brand text-rwp-widget-button-text text-sm font-semibold rounded-lg cursor-pointer transition-colors hover:bg-rwp-brand-hover disabled:hover:bg-rwp-brand disabled:opacity-50 disabled:cursor-not-allowed focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 py-2 px-4 flex items-center justify-center hover:bg-rwp-button-hover" 3605 > 3606 Earn Points </button> 3607 </div> 3608 </div> 3609 </template> 3610 </div> 3611 </div> 3612 3613 <!-- Top scroll fade --> 3614 <div x-show="!panelAtTop" 3615 class="pointer-events-none absolute top-0 left-0 h-8 z-10" 3616 style="right: var(--rwp-scrollbar-width, 8px); background: linear-gradient(to bottom, var(--color-rwp-widget-bg), transparent);"></div> 3617 <!-- Bottom scroll fade --> 3618 <div x-show="!panelAtBottom" 3619 class="pointer-events-none absolute bottom-0 left-0 h-12 z-10" 3620 style="right: var(--rwp-scrollbar-width, 8px); background: linear-gradient(to top, var(--color-rwp-widget-bg), transparent);"></div> 3621 </div> 3622 3623 <template x-for="reward in availableRewards" x-bind:key="'detail-' + reward.id"> 3624 <div 3625 x-show="currentPanel === 'reward-detail-' + reward.id" 3626 x-bind:class="'reward-detail-panel relative h-full flex flex-col ' + (currentPanel === 'reward-detail-' + reward.id ? (navigationDirection === 'initial' ? 'rwp-panel-fade-up' : (navigationDirection === 'forward' ? 'rwp-panel-slide-forward' : (navigationDirection === 'back' ? 'rwp-panel-slide-back' : ''))) : '')" 3627 > 3628 3629 3630 3631 3632 <div class="flex-1 overflow-y-auto custom-scrollbar px-6 py-6 pb-6 text-rwp-widget-text"> 3633 <!-- Icon and Title (Centered like friend claim) --> 3634 <div 3635 class="text-center mb-6" 3636 x-data="{ 3637 cartSubtotal: 0, 3638 currencySymbol: '$' 3639 }" 3640 > 3641 <div class="flex justify-center mx-auto mb-2 [&>svg]:size-10" x-html="reward.icon_html"> 3642 <!-- Icon will be populated from server --> 3643 </div> 3644 <h2 class="text-2xl font-bold text-gray-900 text-pretty" x-text="reward.title"></h2> 3645 </div> 3646 3647 <template x-if="reward.reward_type !== 'free_product'"> 3648 <p class="text-sm text-gray-600 text-center mb-2" x-text="reward.description"></p> 3649 </template> 3650 3651 <!-- Coupon Code Display with Copy Functionality --> 3652 <template x-if="reward.coupon_code && reward.coupon_code !== ''"> 3653 <div> 3654 <template x-if="reward.reward_type !== 'free_product'"> 3655 <div class="mb-4" x-data="copyHandler()"> 3656 <div x-data="{ isCheckmark: false }" class="flex rounded-lg bg-white outline-1 -outline-offset-1 outline-gray-200"> 3657 <input 3658 type="text" 3659 readonly 3660 x-ref="couponCode" 3661 x-bind:value="reward.coupon_code" 3662 x-on:click="handleCopyClick($refs.couponCode, null, false)" 3663 class="block min-w-0 grow px-5 py-3 text-sm font-mono text-gray-900 cursor-pointer focus:outline-none sm:text-sm/6 text-ellipsis" 3664 > 3665 <div class="flex"> 3666 <button 3667 x-on:click="handleCopyClick($refs.couponCode, $data)" 3668 class="py-3 px-3 relative transition-all duration-200 cursor-pointer" 3669 x-bind:class="{ 'hover:text-gray-900 text-gray-500': !isCheckmark}" 3670 x-ref="copyButton"> 3671 <div class="relative size-6"> 3672 <div class="absolute inset-0 transition-all duration-300 ease-in-out" 3673 x-bind:class="isCheckmark ? 'opacity-0 scale-95' : 'opacity-100 scale-100'"> 3674 <svg class="size-6" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="-1 -1 24 24"><desc>Copy to clipboard icon</desc><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M17.875 6.645833333333333h2.520833333333333c0.506275 0 0.9166666666666666 0.41041 0.9166666666666666 0.9166666666666666v12.833333333333332c0 0.506275 -0.41039166666666665 0.9166666666666666 -0.9166666666666666 0.9166666666666666h-12.833333333333332c-0.5062658333333333 0 -0.9166666666666666 -0.41039166666666665 -0.9166666666666666 -0.9166666666666666V17.875" stroke-width="2"></path>
3674<path stroke="currentColor" stroke-linejoin="round" d="M0.6875 1.6041666666666665c0 -0.5062658333333333 0.41041 -0.9166666666666666 0.9166666666666666 -0.9166666666666666h12.833333333333332c0.506275 0 0.9166666666666666 0.41041 0.9166666666666666 0.9166666666666666v12.833333333333332c0 0.506275 -0.41039166666666665 0.9166666666666666 -0.9166666666666666 0.9166666666666666h-12.833333333333332c-0.5062658333333333 0 -0.9166666666666666 -0.41039166666666665 -0.9166666666666666 -0.9166666666666666v-12.833333333333332Z" stroke-width="2"></path></svg> </div> 3675 <div class="absolute inset-0 transition-all duration-300 ease-in-out" 3676 x-bind:class="isCheckmark ? 'opacity-100 scale-100' : 'opacity-0 scale-95'"> 3677 <svg class="size-6" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke="currentColor"><desc>Checkmark icon</desc><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"></path></svg> </div> 3678 </div> 3679 </button> 3680 </div> 3681 </div> 3682 </div> 3683 </template> 3684 3685 <!-- Button and messages section --> 3686 <div> 3687 3688 <!-- Out of Stock Notice --> 3689 <template x-if="reward.is_out_of_stock"> 3690 <div class="text-center mb-4 p-4 bg-amber-50 rounded-lg"> 3691 <p class="text-sm text-amber-700 font-medium"> 3692 This product is currently out of stock </p> 3693 <p class="text-xs text-amber-600 mt-1"> 3694 Your reward will remain available when the product is back in stock. </p> 3695 </div> 3696 </template> 3697 3698 <!-- Cart-aware Button Section --> 3699 <div 3700 x-data="couponUtils( { 3701 nonce: 'f68cf984f4', 3702 buttonText: 'Apply to cart', 3703 rewardId: reward.id, 3704 couponCode: reward.coupon_code || '', 3705 appliedButtonText: 'Coupon applied', 3706 isApplied: reward.is_applied || false, 3707 isOutOfStock: reward.is_out_of_stock || false, 3708 cartItemCount: 0, 3709 cartProductIds: [], 3710 cartSubtotal: 0, 3711 freeProductId: reward.free_product_id || null, 3712 minimumOrderAmount: reward.minimum_order_amount || 0, 3713 integrationSource: 'woocommerce', 3714 checkoutUrl: 'https://jackkeller.com/checkout/', 3715 cartUrl: 'https://jackkeller.com/cart-2/', 3716 storeUrl: 'https://jackkeller.com/pay-now/', 3717 isAdminPreview: false, 3718 isDemo: false, 3719 addToCartText: 'Add to cart', 3720 claimRewardText: 'Claim reward', 3721 applyToCartText: 'Claim free product', 3722 currencySymbol: '$', 3723 pendingRewardId: 0, 3724 dismissedRewardId: 0 } )" 3725 x-on:reset-buttons.window="if ( $event.detail.except !== $el ) isApplied = false;" 3726 > 3727 <template x-if="reward.reward_type === 'free_product' && !isApplied && !productAddedButCouponFailed && !isPending && (reward.minimum_order_amount <= 0 || cartSubtotal >= reward.minimum_order_amount)"> 3728 <p class="text-sm font-medium text-gray-500 text-center mb-2">Free product applies automatically.</p> 3729 </template> 3730 3731 <template x-if="reward.reward_type === 'free_product' && !isApplied && !productAddedButCouponFailed && !isPending && reward.minimum_order_amount > 0 && cartSubtotal < reward.minimum_order_amount"> 3732 <p class="text-sm text-gray-500 text-center text-pretty mb-2" x-text="'Claim now — we\'ll add it to your cart when you spend ' + currencySymbol + reward.minimum_order_amount + ' or more'"></p> 3733 </template> 3734 3735 <button 3736 x-show="!isApplied && !isPending && !isOutOfStock && !productAddedButCouponFailed" 3737 class="bg-rwp-brand text-rwp-widget-button-text text-sm font-semibold rounded-lg cursor-pointer transition-colors hover:bg-rwp-brand-hover disabled:hover:bg-rwp-brand disabled:opacity-50 disabled:cursor-not-allowed focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 w-full py-3 px-8 min-h-[48px] mx-auto grid grid-cols-1 grid-rows-1 [grid-template-areas:'stack'] place-items-center" 3738 x-on:click="applyCoupon( reward.coupon_code )" 3739 x-bind:disabled="isApplying" 3740 x-bind:class="{ 3741 'opacity-50 cursor-not-allowed': isApplying, 3742 'hover:bg-rwp-brand-hover': !isApplying 3743 }" 3744 > 3745 <span 3746 class="[grid-area:stack] flex items-center justify-center transition-opacity duration-200" 3747 x-bind:class="{ 'invisible': isApplying, 'visible': !isApplying }" 3748 > 3749 <!-- Dynamic text based on reward type, cart state, minimum spend, and integration --> 3750 <template x-if="reward.reward_type === 'free_product'"> 3751 <span x-text="getFreeProductButtonText(reward.free_product_id, reward.minimum_order_amount)"></span> 3752 </template> 3753 <template x-if="reward.reward_type !== 'free_product'"> 3754 <span> 3755 <span x-show="isWooCommerce">Apply to cart</span> 3756 <span x-show="!isWooCommerce">Apply coupon</span> 3757 </span> 3758 </template> 3759 </span> 3760 <svg class="w-5 h-5 animate-spin [grid-area:stack] transition-opacity duration-200" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" x-bind:class="{ &ap
3760os;invisible': isApplying !== true, 'visible': isApplying === true }"><desc>Loading spinner icon</desc><circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle><path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path></svg> </button> 3761 3762 <div x-show="hasErrors" class="text-sm mt-2 text-red-500">An error occurred. Please reload the page and try again.</div> 3763 3764 <!-- Success Message - Show when coupon applied --> 3765 <div x-show="isApplied" x-cloak class="mb-1 font-medium inline-flex items-center gap-2 rounded-lg px-3 py-2 text-emerald-600 text-sm w-full justify-center"> 3766 <template x-if="reward.reward_type === 'free_product'"> 3767 <span>Free product added to cart</span> 3768 </template> 3769 <template x-if="reward.reward_type !== 'free_product'"> 3770 <span x-text="reward.title + ' applied'"></span> 3771 </template> 3772 </div> 3773 3774 <template x-if="isPending && !productAddedButCouponFailed"> 3775 <div class="text-sm w-full"> 3776 <!-- Confirmation badge --> 3777 <div class="font-medium inline-flex items-center gap-1 text-emerald-600 text-sm w-full justify-center"> 3778 <svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24"> 3779 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"></path> 3780 </svg> 3781 <span>Reward claimed</span> 3782 </div> 3783 3784 <!-- Explanation text --> 3785 <div class="text-center text-gray-500 px-2 mb-3" x-text="'We\'ll add it to your cart when you spend ' + currencySymbol + reward.minimum_order_amount"> 3786 </div> 3787 3788 <!-- Action buttons --> 3789 <div class="space-y-3"> 3790 <!-- Primary CTA - Start/Continue Shopping --> 3791 <a 3792 x-bind:href="isAdminPreview ? 'javascript:void(0)' : storeUrl" 3793 x-bind:data-preview-disabled="isAdminPreview ? 'true' : null" 3794 x-bind:data-tippy-content="isAdminPreview ? 'Disabled for admin preview' : null" 3795 x-bind:class="{ '!cursor-not-allowed': isAdminPreview }" 3796 class="bg-rwp-brand text-rwp-widget-button-text text-sm font-semibold rounded-lg cursor-pointer transition-colors hover:bg-rwp-brand-hover disabled:hover:bg-rwp-brand disabled:opacity-50 disabled:cursor-not-allowed focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 w-full py-3 px-8 min-h-[48px] mx-auto flex items-center justify-center no-underline block" 3797 x-text="isCartEmpty ? 'Start shopping' : 'Continue shopping'" 3798 ></a> 3799 3800 <!-- Secondary CTA - View Cart (WooCommerce only, when cart has items) --> 3801 <template x-if="isWooCommerce && !isCartEmpty"> 3802 <a 3803 x-bind:href="isAdminPreview ? 'javascript:void(0)' : cartUrl" 3804 x-bind:data-preview-disabled="isAdminPreview ? 'true' : null" 3805 x-bind:data-tippy-content="isAdminPreview ? 'Disabled for admin preview' : null" 3806 x-bind:class="{ '!cursor-not-allowed': isAdminPreview }" 3807 class="text-sm inline-block w-full bg-gray-100 text-gray-700 font-semibold py-3 px-8 rounded-lg hover:bg-gray-200 transition-colors text-center cursor-pointer focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 no-underline block" 3808 > 3809 View cart </a> 3810 </template> 3811 </div> 3812 </div> 3813 </template> 3814 3815 <!-- Partial Success Message - Product added but coupon failed (fallback for edge cases) --> 3816 <div x-show="productAddedButCouponFailed && !isPending" x-cloak class="mt-3 mb-3 text-sm w-full space-y-2"> 3817 <div x-show="productWasNewlyAdded" class="text-center text-emerald-600 font-medium"> 3818 Product added to cart </div> 3819 <template x-if="remainingToUnlock > 0"> 3820 <div class="text-center text-gray-600 px-2" x-text="'Almost there — add ' + '$' + remainingToUnlock + ' more to unlock'"></div> 3821 </template> 3822 </div> 3823 3824 <!-- Buttons when coupon failed but product added (fallback) --> 3825 <template x-if="productAddedButCouponFailed && !isPending"> 3826 <div> 3827 <!-- Primary CTA - Continue Shopping --> 3828 <a 3829 x-bind:href="isAdminPreview ? 'javascript:void(0)' : storeUrl" 3830 x-bind:data-preview-disabled="isAdminPreview ? 'true' : null" 3831 x-bind:data-tippy-content="isAdminPreview ? 'Disabled for admin preview' : null" 3832 x-bind:class="{ 'mb-3': isWooCommerce, '!cursor-not-allowed': isAdminPreview }" 3833 class="bg-rwp-brand text-rwp-widget-button-text text-sm font-semibold rounded-lg cursor-pointer transition-colors hover:bg-rwp-brand-hover disabled:hover:bg-rwp-brand disabled:opacity-50 disabled:cursor-not-allowed focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500
3833w-full py-3 px-8 min-h-[48px] mx-auto flex items-center justify-center no-underline block" 3834 > 3835 Continue shopping </a> 3836 3837 <!-- Secondary CTA - View Cart (WooCommerce only) --> 3838 <template x-if="isWooCommerce"> 3839 <a 3840 x-bind:href="isAdminPreview ? 'javascript:void(0)' : cartUrl" 3841 x-bind:data-preview-disabled="isAdminPreview ? 'true' : null" 3842 x-bind:data-tippy-content="isAdminPreview ? 'Disabled for admin preview' : null" 3843 x-bind:class="{ '!cursor-not-allowed': isAdminPreview }" 3844 class="text-sm inline-block w-full bg-gray-100 text-gray-700 font-semibold py-3 px-8 rounded-lg hover:bg-gray-200 transition-colors text-center cursor-pointer focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 no-underline block" 3845 > 3846 View cart </a> 3847 </template> 3848 </div> 3849 </template> 3850 3851 <!-- Error Message - Show when coupon failed to apply (no product involved) --> 3852 <div x-show="hasErrors && !productAddedButCouponFailed && !isPending" x-cloak class="mb-1 font-medium inline-flex items-center gap-2 rounded-lg px-3 py-2 text-red-600 text-sm w-full justify-center"> 3853 <span x-text="errorMessage"></span> 3854 </div> 3855 3856 <!-- Buttons when coupon is applied successfully --> 3857 <template x-if="isApplied && !isCartEmpty"> 3858 <div> 3859 <!-- Primary CTA - Go to Checkout --> 3860 <a 3861 x-bind:href="isAdminPreview ? 'javascript:void(0)' : checkoutUrl" 3862 x-bind:data-preview-disabled="isAdminPreview ? 'true' : null" 3863 x-bind:data-tippy-content="isAdminPreview ? 'Disabled for admin preview' : null" 3864 class="bg-rwp-brand text-rwp-widget-button-text text-sm font-semibold rounded-lg cursor-pointer transition-colors hover:bg-rwp-brand-hover disabled:hover:bg-rwp-brand disabled:opacity-50 disabled:cursor-not-allowed focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 w-full py-3 px-8 min-h-[48px] mx-auto flex items-center justify-center no-underline block" 3865 x-bind:class="{ 'mb-3': isWooCommerce, '!cursor-not-allowed': isAdminPreview }" 3866 > 3867 Go to checkout </a> 3868 3869 <!-- Secondary CTA - View Cart (WooCommerce only) --> 3870 <template x-if="isWooCommerce"> 3871 <a 3872 x-bind:href="isAdminPreview ? 'javascript:void(0)' : cartUrl" 3873 x-bind:data-preview-disabled="isAdminPreview ? 'true' : null" 3874 x-bind:data-tippy-content="isAdminPreview ? 'Disabled for admin preview' : null" 3875 x-bind:class="{ '!cursor-not-allowed': isAdminPreview }" 3876 class="text-sm inline-block w-full bg-gray-100 text-gray-700 font-semibold py-3 px-8 rounded-lg hover:bg-gray-200 transition-colors text-center cursor-pointer focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 no-underline block" 3877 > 3878 View cart </a> 3879 </template> 3880 </div> 3881 </template> 3882 3883 <!-- Button when coupon is applied but cart is empty --> 3884 <template x-if="isApplied && isCartEmpty"> 3885 <div> 3886 <!-- Primary CTA - Shop Now --> 3887 <a 3888 x-bind:href="isAdminPreview ? 'javascript:void(0)' : storeUrl" 3889 x-bind:data-preview-disabled="isAdminPreview ? 'true' : null" 3890 x-bind:data-tippy-content="isAdminPreview ? 'Disabled for admin preview' : null" 3891 x-bind:class="{ '!cursor-not-allowed': isAdminPreview }" 3892 class="bg-rwp-brand text-rwp-widget-button-text text-sm font-semibold rounded-lg cursor-pointer transition-colors hover:bg-rwp-brand-hover disabled:hover:bg-rwp-brand disabled:opacity-50 disabled:cursor-not-allowed focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 w-full py-3 px-8 min-h-[48px] mx-auto flex items-center justify-center no-underline block" 3893 > 3894 Shop now </a> 3895 <!-- No secondary button when cart is empty --> 3896 </div> 3897 </template> 3898 3899 <!-- Coupon Terms (below buttons) - show only expiry when applied or ready (minimum met). --> 3900 <template x-if="reward.coupon_terms"> 3901 <div class="mt-2 text-center"> 3902 <span class="text-sm text-gray-500" x-text="(isApplied || (reward.reward_type === 'free_product' && !isPending && (reward.minimum_order_amount <= 0 || cartSubtotal >= reward.minimum_order_amount))) && reward.expiry_text ? reward.expiry_text : reward.coupon_terms"></span> 3903 </div> 3904 </template> 3905 </div> 3906 </div> 3907 3908 </div> 3909 </template> 3910 3911 <!-- Back to Your Rewards Button --> 3912 3913 3914
3915 </div> 3916 3917 <div 3918 x-data="{ 3919 couponFailed: false, 3920 showCode: false, 3921 isCheckmark: false, 3922 isPending: false, 3923 isApplied: false, 3924 cartSubtotal: 0, 3925 minimumOrderAmount: 0, 3926 pendingRewardId: 0, 3927 ...copyHandler() 3928 }" 3929 x-init=" 3930 minimumOrderAmount = reward.minimum_order_amount || 0; 3931 isApplied = reward.is_applied || false; 3932 isPending = pendingRewardId > 0 && pendingRewardId === parseInt(reward.id || 0, 10); 3933 window.addEventListener('free-product-coupon-failed', () => { couponFailed = true; }); 3934 window.addEventListener('show-redeem-success', () => { couponFailed = false; isPending = false; }); 3935 window.addEventListener('reward-set-pending', () => { isPending = true; }); 3936 window.addEventListener('reward-auto-applied', () => { isPending = false; isApplied = true; }); 3937 window.addEventListener('coupon-applied', () => { isApplied = true; }); 3938 " 3939 x-show="reward.reward_type === 'free_product' && !isApplied && (isPending || (reward.minimum_order_amount <= 0 || cartSubtotal >= reward.minimum_order_amount))" 3940 x-cloak 3941 class="px-6 text-center bg-gray-50 border-t border-gray-100 flex flex-col-reverse items-center" 3942 > 3943 <button 3944 x-on:click="if (!showCode) { showCode = true; $nextTick(() => { handleCopyClick($refs.couponCode, $data); }); } else { showCode = false; }" 3945 class="text-sm text-gray-400 hover:text-gray-600 underline underline-offset-2 cursor-pointer bg-transparent border-0 my-4" 3946 x-text="showCode ? 'Hide code' : 'Use a code at checkout'" 3947 ></button> 3948 3949 <!-- Collapsible code section --> 3950 <div x-show="showCode" x-collapse x-cloak class="w-full"> 3951 <div class="pt-4"> 3952 <div class="flex rounded-lg bg-white outline-1 -outline-offset-1 outline-gray-200"> 3953 <input 3954 type="text" 3955 readonly 3956 x-ref="couponCode" 3957 x-bind:value="reward.coupon_code" 3958 x-on:click="handleCopyClick($refs.couponCode, null, false)" 3959 class="block min-w-0 grow px-5 py-3 text-sm font-mono text-gray-900 cursor-pointer focus:outline-none sm:text-sm/6 text-ellipsis" 3960 > 3961 <div class="flex"> 3962 <button 3963 x-on:click="handleCopyClick($refs.couponCode, $data)" 3964 class="py-3 px-3 relative transition-all duration-200 cursor-pointer" 3965 x-bind:class="{ 'hover:text-gray-900 text-gray-500': !isCheckmark}" 3966 x-ref="copyButton"> 3967 <div class="relative size-6"> 3968 <div class="absolute inset-0 transition-all duration-300 ease-in-out" 3969 x-bind:class="isCheckmark ? 'opacity-0 scale-95' : 'opacity-100 scale-100'"> 3970 <svg class="size-6" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="-1 -1 24 24"><desc>Copy to clipboard icon</desc><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M17.875 6.645833333333333h2.520833333333333c0.506275 0 0.9166666666666666 0.41041 0.9166666666666666 0.9166666666666666v12.833333333333332c0 0.506275 -0.41039166666666665 0.9166666666666666 -0.9166666666666666 0.9166666666666666h-12.833333333333332c-0.5062658333333333 0 -0.9166666666666666 -0.41039166666666665 -0.9166666666666666 -0.9166666666666666V17.875" stroke-width="2"></path><path stroke="currentColor" stroke-linejoin="round" d="M0.6875 1.6041666666666665c0 -0.5062658333333333 0.41041 -0.9166666666666666 0.9166666666666666 -0.9166666666666666h12.833333333333332c0.506275 0 0.9166666666666666 0.41041 0.9166666666666666 0.9166666666666666v12.833333333333332c0 0.506275 -0.41039166666666665 0.9166666666666666 -0.9166666666666666 0.9166666666666666h-12.833333333333332c-0.5062658333333333 0 -0.9166666666666666 -0.41039166666666665 -0.9166666666666666 -0.9166666666666666v-12.833333333333332Z" stroke-width="2"></path></svg> </div> 3971 <div class="absolute inset-0 transition-all duration-300 ease-in-out" 3972 x-bind:class="isCheckmark ? 'opacity-100 scale-100' : 'opacity-0 scale-95'"> 3973 <svg class="size-6" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke="currentColor"><desc>Checkmark icon</desc><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"></path></svg> </div> 3974 </div> 3975 </button> 3976 </div> 3977 </div> 3978 </div> 3979 </div> 3980 </div>
3981 </div> 3982 </div> 3983 </template> 3984 3985 </div> 3986 3987 <div x-show="currentPanel === 'main'" 3988 x-bind:class="isScrolledToBottom ? 'opacity-0' : 'opacity-100'" 3989 class="sticky bottom-0 h-8 -mt-8 shrink-0 pointer-events-none z-40 transition-opacity duration-200" 3990 style="margin-right: var(--rwp-scrollbar-width, 8px); background: linear-gradient(to top, var(--color-rwp-widget-bg), transparent);"></div> 3991 3992 </div> 3993 3994 </div> 3995 </template> 3996 3997 <template x-if="!isMobile"> 3998 <div 3999 id="rwp-rewards-panel" 4000 x-ref="rewardsPanel" 4001 x-bind:hidden="!open" 4002 class="rwp-desktop-panel rwp-desktop-panel--scale z-[var(--rwp-z-panel)] bg-rwp-widget-bg rounded-xl overflow-hidden" 4003 x-bind:data-panel-state="isFriendClaimMode ? 'friend-claim' : 'combined'" 4004 data-highlight="panel-bg" 4005 role="dialog" 4006 aria-labelledby="rewards-title" 4007 > 4008 4009 4010 4011 4012 4013 4014 4015 4016 4017 4018 <button 4019 x-show="!isFriendClaimMode" 4020 x-on:click="open = false" 4021 x-bind:class="'group p-2 rounded transition-colors cursor-pointer z-[var(--rwp-z-close-button)] focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 ' + (isFriendClaimMode ? 'text-gray-500 hover:text-gray-700' : 'text-rwp-widget-header-text') + ' ' + (isMobile ? 'fixed' : 'absolute top-[12px] right-[12px]')" 4022 x-bind:style="isMobile ? 'top: calc(env(safe-area-inset-top) + 12px); right: calc(env(safe-area-inset-right) + 12px);' : ''" 4023 aria-label="Close" 4024 > 4025 <div x-bind:class="'p-1 rounded transition-colors ' + (isFriendClaimMode ? 'group-hover:bg-gray-100' : 'group-hover:bg-white/10')"> 4026 <div class="size-5 flex items-center justify-center"> 4027 <svg class="size-5" fill="none" stroke="currentColor" viewbox="0 0 24 24" stroke-width="1.5"><desc>X (close) icon</desc><path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12" /></svg> </div> 4028 </div> 4029 </button> 4030 4031 <div 4032 x-bind:hidden="!(currentPanel === 'main' && showFixedHeader && !isFriendClaimMode)" 4033 x-bind:class="'rwp-fixed-header absolute top-0 left-0 right-0 z-50 bg-rwp-brand text-rwp-widget-header-text flex items-center justify-between ' + (isMobile ? '' : 'px-5 h-16')" 4034 x-bind:style="isMobile ? 'padding-left: calc(env(safe-area-inset-left) + 20px); padding-right: calc(env(safe-area-inset-right) + 20px); padding-top: env(safe-area-inset-top); min-height: 64px;' : ''" 4035 data-highlight="header-bg" 4036 > 4037 <div class="flex items-center gap-3 flex-1 min-w-0"> 4038 <button x-show="currentPanel !== 'main'" x-on:click=" 4039 currentPanel === 'redeem-success' ? navigateToPanel('ways-to-redeem') : 4040 currentPanel === 'create-account-prompt' ? navigateToPanel('ways-to-redeem') : 4041 currentPanel.startsWith('reward-detail-') ? navigateToPanel('your-rewards') : 4042 currentPanel === 'birthday-picker' ? navigateToPanel('ways-to-earn') : 4043 navigateToPanel('main') 4044 " class="group p-2 rounded transition-colors cursor-pointer -ml-2 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500" aria-label="Back"> 4045 <div class="p-1 rounded transition-colors group-hover:bg-white/10"> 4046 <div class="size-5 flex items-center justify-center"> 4047 <svg class="size-7" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke-width="1.5" stroke="currentColor"><desc>Chevron left icon</desc><path stroke-linecap="round" stroke-linejoin="round" d="M15.75 19.5 8.25 12l7.5-7.5" /></svg> </div> 4048 </div> 4049 </button> 4050 <div> 4051 <div class="font-semibold text-base"> 4052 <!-- Points balance (shown on all panels when points program is active) --> 4053 <span x-show="showPoints && !!memberId"><span x-text="userData.points.toLocaleString()"></span> <span x-text="(userData.points == 1 ? currencySingular : currencyPlural)"></span></span> 4054 <!-- Referral count (shown on all panels when ONLY referrals program is active) --> 4055 <span x-show="showReferrals && !showPoints && !!memberId" x-text="friendsReferred === 0 ? 'No friends referred yet'
4055 : (friendsReferred === 1 ? '1 friend referred' : friendsReferred + ' friends referred')"> 4056 </span> 4057 <!-- Fallback: Activity label when no member or no programs --> 4058 <span x-show="!memberId && currentPanel === 'activity'">Activity</span> 4059 </div> 4060 <div class="text-sm"> 4061 <span x-show="!isFriendClaimMode" x-text="programName"></span> 4062 </div> 4063 </div> 4064 </div> 4065 </div> 4066 4067 <div 4068 x-show="currentPanel !== 'main' && !isFriendClaimMode" 4069 x-bind:class="'absolute top-0 left-0 right-0 z-50 bg-rwp-brand text-rwp-widget-header-text flex items-center justify-between ' + (isMobile ? '' : 'px-5 h-16')" 4070 x-bind:style="isMobile ? 'padding-left: calc(env(safe-area-inset-left) + 20px); padding-right: calc(env(safe-area-inset-right) + 20px); padding-top: env(safe-area-inset-top); min-height: 64px;' : ''" 4071 data-highlight="header-bg" 4072 > 4073 <div class="flex items-center gap-3 flex-1 min-w-0"> 4074 <button x-show="currentPanel !== 'main'" x-on:click=" 4075 currentPanel === 'redeem-success' ? navigateToPanel('ways-to-redeem') : 4076 currentPanel === 'create-account-prompt' ? navigateToPanel('ways-to-redeem') : 4077 currentPanel.startsWith('reward-detail-') ? navigateToPanel('your-rewards') : 4078 currentPanel === 'birthday-picker' ? navigateToPanel('ways-to-earn') : 4079 navigateToPanel('main') 4080 " class="group p-2 rounded transition-colors cursor-pointer -ml-2 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500" aria-label="Back"> 4081 <div class="p-1 rounded transition-colors group-hover:bg-white/10"> 4082 <div class="size-5 flex items-center justify-center"> 4083 <svg class="size-7" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke-width="1.5" stroke="currentColor"><desc>Chevron left icon</desc><path stroke-linecap="round" stroke-linejoin="round" d="M15.75 19.5 8.25 12l7.5-7.5" /></svg> </div> 4084 </div> 4085 </button> 4086 <div> 4087 <div class="font-semibold text-base"> 4088 <!-- Points balance (shown on all panels when points program is active) --> 4089 <span x-show="showPoints && !!memberId"><span x-text="userData.points.toLocaleString()"></span> <span x-text="(userData.points == 1 ? currencySingular : currencyPlural)"></span></span> 4090 <!-- Referral count (shown on all panels when ONLY referrals program is active) --> 4091 <span x-show="showReferrals && !showPoints && !!memberId" x-text="friendsReferred === 0 ? 'No friends referred yet' : (friendsReferred === 1 ? '1 friend referred' : friendsReferred + ' friends referred')"> 4092 </span> 4093 <!-- Fallback: Activity label when no member or no programs --> 4094 <span x-show="!memberId && currentPanel === 'activity'">Activity</span> 4095 </div> 4096 <div class="text-sm"> 4097 <span x-show="!isFriendClaimMode" x-text="programName"></span> 4098 </div> 4099 </div> 4100 </div> 4101 </div> 4102 4103 4104 <template x-if="currentPanel === 'main' && !isFriendClaimMode"> 4105 <div 4106 x-bind:class="'absolute top-0 left-0 w-full -z-10 bg-cover bg-center ' + (!(backgroundImage.enabled && backgroundImage.url && isProFeatureAccessible('pro')) ? ' bg-rwp-brand' : '')" 4107 x-bind:style=" 4108 'transform: translate3d(0px, ' + getParallaxOffset(scrollTop) + 'px, 0px); ' + 4109 (backgroundImage.enabled && backgroundImage.url && isProFeatureAccessible('pro') ? 'background-image: url(' + backgroundImage.url + ');' : '') + 4110 '' + 4111 'height: ' + dynamicBackgroundHeight + 'px;'" 4112 > 4113 </div> 4114 </template> 4115 4116 4117 4118 4119 4120 <div 4121 x-bind:class="'relative w-full h-full flex flex-col panel-container flex-1' + (currentPanel === 'main' ? ' overflow-y-auto overflow-x-hidden custom-scrollbar' : '')" 4122 @scroll="handleScroll($event)" 4123 x-ref="scrollContainer" 4124 > 4125 4126 4127 <div 4128 x-show="currentPanel === 'main' && !isFriendClaimMode" 4129 class="panel-expanded-header text-rwp-widget-header-text bg-cover bg-center relative" 4130 > 4131 <div class="banner-content px-5 pb-6 pt-16 h-full flex flex-col justify-end relative" 4132 x-ref="bannerContent" 4133 x-bind:style="'opacity: ' + getTextOpacity(scrollTop)" 4134 > 4135 <div class="relative z-10"> 4136 <div x-show="memberId > 0"> 4137 <template x-if="showPoints"> 4138 <div> 4139 <div class="text-base" x-text="yourLabel + ' ' + (userData.points == 1 ? currencySingular : currencyPlural)"></div> 4140 <div class="font-bold text-4xl mb-1" x-text="userData.points.toLocaleStr
4140ing()"></div> 4141 </div> 4142 </template> 4143 4144 <template x-if="showReferrals && !showPoints"> 4145 <div> 4146 <div class="text-base">Share & Earn with</div> 4147 <div class="font-semibold text-3xl" x-text="programName"></div> 4148 </div> 4149 </template> 4150 </div> 4151 4152 <div x-show="memberId === 0"> 4153 <div class="text-base"> 4154 <span x-show="!isFriendClaimMode" x-text="welcomeGreeting"></span> 4155 </div> 4156 <div class="font-semibold text-3xl"> 4157 <span x-show="!isFriendClaimMode" x-text="programName"></span> 4158 </div> 4159 </div> 4160 </div> 4161 </div> 4162 </div> 4163 4164 4165 4166 <div 4167 class="flex-1" 4168 x-bind:style="'height: 100%;' + (currentPanel !== 'main' ? ' padding-top: 64px;' : ' padding-top: 0;')" 4169 x-ref="contentArea" 4170 > 4171 4172 4173 <div 4174 x-show="!isFriendClaimMode && currentPanel === 'main'" 4175 x-bind:class="'px-4 pb-10 flex flex-col gap-4 ' + (currentPanel === 'main' ? (navigationDirection === 'initial' ? 'rwp-panel-fade-up' : (navigationDirection === 'forward' ? 'rwp-panel-slide-forward' : (navigationDirection === 'back' ? 'rwp-panel-slide-back' : ''))) : '')" 4176 > 4177 4178 <!-- Birthday banner (shows all day on member's birthday) --> 4179 <div 4180 x-show="birthdayBanner && memberId > 0" 4181 data-birthday-banner 4182 class="bg-white rounded-lg px-4 py-6 relative text-rwp-widget-text shadow-card px-5" 4183 > 4184 <div class="flex items-center gap-3"> 4185 <div class="flex-shrink-0"> 4186 <svg class="size-8 text-rwp-widget-icon-text" viewbox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> 4187 <desc>Birthday cake icon</desc> 4188 <path d="M3.08108 11.7027H20.9189C20.9189 11.7027 22.7027 11.7027 22.7027 13.4865V21.2162C22.7027 21.2162 22.7027 23 20.9189 23H3.08108C3.08108 23 1.2973 23 1.2973 21.2162V13.4865C1.2973 13.4865 1.2973 11.7027 3.08108 11.7027Z" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path> 4189 <path d="M12 9.02703V11.7027" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path> 4190 <path d="M13.7838 3.67568C13.7838 4.14876 13.5959 4.60248 13.2613 4.937C12.9268 5.27153 12.4731 5.45946 12 5.45946C11.5269 5.45946 11.0732 5.27153 10.7387 4.937C10.4041 4.60248 10.2162 4.14876 10.2162 3.67568C10.2162 2.68865 12 1 12 1C12 1 13.7838 2.68865 13.7838 3.67568Z" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path> 4191 <path d="M19.1351 9.02703V11.7027" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path> 4192 <path d="M20.9189 3.67568C20.9189 4.14876 20.731 4.60248 20.3965 4.937C20.0619 5.27153 19.6082 5.45946 19.1351 5.45946C18.662 5.45946 18.2083 5.27153 17.8738 4.937C17.5393 4.60248 17.3514 4.14876 17.3514 3.67568C17.3514 2.68865 19.1351 1 19.1351 1C19.1351 1 20.9189 2.68865 20.9189 3.67568Z" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path> 4193 <path d="M4.86486 9.02703V11.7027" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path> 4194 <path d="M6.64865 3.67568C6.64865 4.14876 6.46071 4.60248 6.12619 4.937C5.79167 5.27153 5.33795 5.45946 4.86486 5.45946C4.39178 5.45946 3.93806 5.27153 3.60354 4.937C3.26901 4.60248 3.08108 4.14876 3.08108 3.67568C3.08108 2.68865 4.86486 1 4.86486 1C4.86486 1 6.64865 2.68865 6.64865 3.67568Z" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path> 4195 <path d="M1.2973 17.0184C1.57132 17.4845 1.96234 17.8709 2.43166 18.1394C2.90097 18.4079 3.43228 18.5492 3.97297 18.5492C4.51367 18.5492 5.04498 18.4079 5.51429 18.1394C5.9836 17.8709 6.37463 17.4845 6.64865 17.0184C6.92267 17.4845 7.3137 17.8709 7.78301 18.1394C8.25232 18.4079 8.78363 18.5492 9.32432 18.5492C9.86502 18.5492 10.3963 18.4079 10.8656 18.1394C11.335 17.8709 11.726 17.4845 12 17.0184C12.274 17.4845 12.665 17.8709 13.1344 18.1394C13.6037 18.4079 14.135 18.5492 14.6757 18.5492C15.2164 18.5492 15.7477 18.4079 16.217 18.1394C16.6863 17.8709 17.0773 17.4845 17.3514 17.0184C17.6254 17.4845 18.0164 17.8709 18.4857 18.1394C18.955 18.4079 19.4863 18.5492 20.027 18.5492C20.5677 18.5492 21.099 18.4079 21.5683 18.1394C22.0377 17.8709 22.4287 17.4845 22.7027 17.0184" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path> 4196 </svg>
4196 </div> 4197 <div class="flex-1 min-w-0"> 4198 <div class="text-base font-semibold text-rwp-widget-heading"> 4199 <span x-text="birthdayBanner ? 'Happy Birthday ' + birthdayBanner.member_name + '!' : ''"></span> 4200 </div> 4201 <div class="text-sm text-gray-500"> 4202 <span x-text="birthdayBanner ? 'Enjoy ' + birthdayBanner.points_earned.toLocaleString() + ' ' + currencyPlural + ' on us' : ''"></span> 4203 </div> 4204 </div> 4205 </div> 4206 </div> 4207 4208 4209 4210 <div x-show="memberId === 0 || isGuestMember"> 4211 <div 4212 x-data="becomeMember({ 4213 nonce: 'e9babc5c4b', 4214 ajaxUrl: 'https://jackkeller.com/wp-admin/admin-ajax.php?rewardswp_locale=site', 4215 isLoggedIn: false, 4216 isGuestMember: false, 4217 userName: '', 4218 userEmail: '' 4219 })" 4220 x-on:show-register-form.window="currentScreen = 'register'; showForm = true; showError = false; $dispatch('navigate-to-panel', { panel: 'main', resetScroll: true });" 4221 x-on:show-login-form.window="currentScreen = 'login'; showForm = true; showError = false;" 4222 x-on:member-joined.window="justJoined = true" 4223 class="bg-white rounded-lg px-4 py-6 relative text-rwp-widget-text shadow-card" 4224 x-bind:class="navigationDirection === 'initial' ? 'rwp-stagger-fade-up rwp-stagger-1' : (navigationDirection === 'back' ? 'rwp-stagger-slide-left rwp-stagger-1' : '')" 4225 data-become-member-section 4226 > 4227 <div x-show="showSuccess" style="display: none;"> 4228 <div class="flex justify-center mb-4"> 4229 <div class="size-16 bg-green-100 rounded-full flex items-center justify-center"> 4230 <svg class="size-8 text-green-600" fill="none" stroke="currentColor" viewBox="0 0 24 24"> 4231 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"></path> 4232 </svg> 4233 </div> 4234 </div> 4235 <h3 class="text-base font-semibold text-rwp-widget-heading mb-2"> 4236 Welcome to List on MLS from $75 Rewards Program! </h3> 4237 <p class="text-sm mb-6 px-2">You're now part of our rewards program! Start earning points and rewards with every purchase.</p> 4238 4239 <a 4240 x-bind:href="isAdminPreview ? 'javascript:void(0)' : 'https://jackkeller.com/pay-now/'" 4241 x-bind:data-preview-disabled="isAdminPreview ? 'true' : null" 4242 x-bind:data-tippy-content="isAdminPreview ? 'Disabled for admin preview' : null" 4243 x-bind:class="{ '!cursor-not-allowed': isAdminPreview }" 4244 class="bg-rwp-brand text-rwp-widget-button-text text-sm font-semibold rounded-lg cursor-pointer transition-colors hover:bg-rwp-brand-hover disabled:hover:bg-rwp-brand disabled:opacity-50 disabled:cursor-not-allowed focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 w-full py-3 px-8 min-h-[48px] mx-auto flex items-center justify-center no-underline hover:bg-rwp-button-hover" 4245 > 4246 Start earning points </a> 4247 </div> 4248 4249 <div x-show="!showSuccess"> 4250 <!-- Register Screen --> 4251 <div class="text-center" x-show="currentScreen === 'register'" x-transition:enter="transition-all duration-300 ease-out" x-transition:enter-start="opacity-0 -translate-y-4 scale-95" x-transition:enter-end="opacity-100 translate-y-0 scale-100"> 4252 <h2 class="text-base font-semibold text-rwp-widget-heading mb-2">Join our rewards program</h2> 4253 <p class="text-sm mb-4 px-2" x-show="!(isGuestMember && showGuestConfirmation)">Create a free account to start earning points and unlocking member-only perks.</p> 4254 <p class="text-sm mb-4 px-2" x-show="isGuestMember && showGuestConfirmation" x-cloak>Your order email will be used to create your account.</p> 4255 4256 <!-- Form for non-logged-in users, guest members, and logged-in non-members - Initially hidden --> 4257 4258 <!-- Guest confirmation: one-click account creation (no form fields needed, backend uses session) --> 4259 <div 4260 x-show="isGuestMember && showGuestConfirmation" 4261 x-transition:enter="transition-all duration-300 ease-out" 4262 x-transition:enter-start="opacity-0 -translate-y-4 scale-95" 4263 x-transition:enter-end="opacity-100 translate-y-0 scale-100" 4264 class="space-y-3" 4265 > 4266 <!-- Email identity card --> 4267 <div class="flex items-center gap-3 rounded-lg border border-gray-200 bg-gray-50/50 px-4 py-3 text-left"> 4268 <svg class="size-5 text-gray-400 flex-shrink-0" fill="none" stroke="currentColor" viewbox="0 0 24 24" stroke-width="1.5"><desc>Envelope (email) icon</desc><path stroke-linecap="round" stroke-linejoin="round" d="M21.75 6.75v10.5a2.25 2.25 0 01-2.25 2.25h-15a2.25 2.25 0 01-2.25-2.25V6.75m19.5 0A2.25 2.25 0 0019.5 4.5h-15a2.25 2.25 0 00-2.25 2.25m19.5 0v.243a2.25 2.25 0 01-1.07 1.916l-7.5 4.615a2.25 2.25 0 01-2.36 0L3.32 8.91a2.25 2.25 0 01-1.07-1.916V6.75" /></svg> <div class="min-w-0"> 4269 <p class="text-sm font-medium text-rwp-widget-heading truncate" x-text="formData.email"></p> 4270 <p class="text-xs text-gray-500">From your recent order</p> 4271 </div> 4272 </div> 4273 4274 <!-- Create account button --> 4275 <button 4276 type="button" 4277 tabindex="0" 4278 x-on:click="if (!isAdminPreview && !isDemo) { createMember() }" 4279 x-bind:disabled="isSubmitting" 4280 x-bind:class="isSubmitting ? 'opacity-50 cursor-not-allowed' : (isAdm
4280inPreview || isDemo) ? '!cursor-not-allowed' : 'hover:bg-rwp-brand-hover'" 4281 x-bind:data-preview-disabled="(isAdminPreview || isDemo) ? 'true' : null" 4282 x-bind:data-tippy-content="(isAdminPreview || isDemo) ? 'Disabled for preview' : null" 4283 class="bg-rwp-brand text-rwp-widget-button-text text-sm font-semibold rounded-lg cursor-pointer transition-colors hover:bg-rwp-brand-hover disabled:hover:bg-rwp-brand disabled:opacity-50 disabled:cursor-not-allowed focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 w-full py-3 px-8 min-h-[48px] mx-auto grid grid-cols-1 grid-rows-1 [grid-template-areas:'stack'] place-items-center" 4284 data-highlight="success-state" 4285 data-become-member-btn 4286 x-bind:aria-label="isSubmitting ? 'Creating account...' : 'Create my account'" 4287 > 4288 <span 4289 class="[grid-area:stack] transition-opacity duration-200" 4290 x-bind:class="{ 'invisible': isSubmitting, 'visible': !isSubmitting }" 4291 >Create my account</span> 4292 <svg class="w-5 h-5 animate-spin [grid-area:stack] transition-opacity duration-200" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" x-bind:class="{ 'invisible': isSubmitting !== true, 'visible': isSubmitting === true }"><desc>Loading spinner icon</desc><circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle><path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path></svg> </button> 4293 4294 </div> 4295 4296 <!-- Full registration form (shown for non-guest visitors only) --> 4297 <form x-on:submit.prevent="if (!isAdminPreview && !isDemo) { createMember() }" x-show="showForm && !isGuestMember" x-transition:enter="transition-all duration-300 ease-out" x-transition:enter-start="opacity-0 -translate-y-4 scale-95" x-transition:enter-end="opacity-100 translate-y-0 scale-100" x-transition:leave="transition-all duration-200 ease-in" x-transition:leave-start="opacity-100 translate-y-0 scale-100" x-transition:leave-end="opacity-0 -translate-y-2 scale-98" style="display: none;"> 4298 <div style="position:absolute;left:-9999px;top:-9999px;opacity:0;pointer-events:none;" aria-hidden="true"> 4299 <label class="sr-only"> 4300 Leave this field empty </label> 4301 <input 4302 type="text" 4303 name="rwp_website" 4304 x-model="formData.rwp_website" 4305 value="" 4306 tabindex="-1" 4307 autocomplete="off" 4308 > 4309 </div> 4310 <div class="space-y-3"> 4311 4312 <div> 4313 <label for="member-name" class="sr-only block text-sm font-medium text-rwp-widget-text mb-1.5 text-left">Name</label> 4314 <input 4315 type="text" 4316 id="member-name" 4317 x-model="formData.name" 4318 class="bg-white text-base w-full px-3 py-3 rounded-lg outline-1 -outline-offset-1 outline-gray-200 placeholder:text-gray-400 focus:outline-2 focus:-outline-offset-2 focus:outline-blue-500" 4319 placeholder="Your name" 4320 required 4321 > 4322 </div> 4323 <div> 4324 <label for="member-email" class="sr-only block text-sm font-medium text-rwp-widget-text mb-1.5 text-left">Email</label> 4325 <input 4326 type="email" 4327 id="member-email" 4328 x-model="formData.email" 4329 class="bg-white text-base w-full px-3 py-3 rounded-lg outline-1 -outline-offset-1 outline-gray-200 placeholder:text-gray-400 focus:outline-2 focus:-outline-offset-2 focus:outline-blue-500" 4330 placeholder="Your email" 4331 required 4332 > 4333 </div> 4334 4335 <button 4336 type="submit" 4337 tabindex="0" 4338 x-bind:disabled="isSubmitting" 4339 x-bind:class="isSubmitting ? 'opacity-50 cursor-not-allowed' : (isAdminPreview || isDemo) ? '!cursor-not-allowed' : 'hover:bg-rwp-brand-hover'" 4340 x-bind:data-preview-disabled="(isAdminPreview || isDemo) ? 'true' : null" 4341 x-bind:data-tippy-content="(isAdminPreview || isDemo) ? 'Disabled for preview' : null" 4342 class="bg-rwp-brand text-rwp-widget-button-text text-sm font-semibold rounded-lg cursor-pointer transition-colors hover:bg-rwp-brand-hover disabled:hover:bg-rwp-brand disabled:opacity-50 disabled:cursor-not-allowed focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500
4342w-full py-3 px-8 min-h-[48px] mx-auto grid grid-cols-1 grid-rows-1 [grid-template-areas:'stack'] place-items-center" 4343 data-highlight="success-state" 4344 data-become-member-btn 4345 x-bind:aria-label="isSubmitting ? 'Creating account...' : 'Create my account'" 4346 > 4347 <span 4348 class="[grid-area:stack] transition-opacity duration-200" 4349 x-bind:class="{ 'invisible': isSubmitting, 'visible': !isSubmitting }" 4350 >Create my account</span> 4351 <svg class="w-5 h-5 animate-spin [grid-area:stack] transition-opacity duration-200" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" x-bind:class="{ 'invisible': isSubmitting !== true, 'visible': isSubmitting === true }"><desc>Loading spinner icon</desc><circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle><path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path></svg> </button> 4352 </div> 4353 4354 4355 </form> 4356 4357 <!-- Error State for Register Screen --> 4358 <div x-show="showError && currentScreen === 'register'" x-transition:enter="transition-opacity duration-300" x-transition:enter-start="opacity-0" x-transition:enter-end="opacity-100" style="display: none;" class="mt-4"> 4359 <div class="bg-red-50 border border-red-200 rounded-lg p-4"> 4360 <div class="flex items-center"> 4361 <svg class="size-5 text-red-400 mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24"> 4362 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path> 4363 </svg> 4364 <span class="text-sm text-red-700 text-left" x-html="errorMessage"></span> 4365 </div> 4366 </div> 4367 </div> 4368 4369 <button 4370 x-show="(!showForm || currentScreen !== 'register') && !(isGuestMember && showGuestConfirmation)" 4371 x-on:click="if (!isAdminPreview && !isDemo) { if (isGuestMember && userData.email) { window.dispatchEvent(new CustomEvent('rewardswp-join-with-email', { detail: { email: userData.email, name: userData.name } })); } handleJoinClick(); } else { currentScreen = 'register'; showForm = true; showError = false; }" 4372 class="bg-rwp-brand text-rwp-widget-button-text text-sm font-semibold rounded-lg cursor-pointer transition-colors hover:bg-rwp-brand-hover disabled:hover:bg-rwp-brand disabled:opacity-50 disabled:cursor-not-allowed focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 w-full py-3 px-8 min-h-[48px] mx-auto grid grid-cols-1 grid-rows-1 [grid-template-areas:'stack'] place-items-center" 4373 data-highlight="success-state" 4374 data-become-member-btn 4375 x-bind:aria-label="'Join now to become a member'" 4376 tabindex="0" 4377 > 4378 Join now </button> 4379 4380 <p class="text-sm mt-4"> 4381 Already have an account? <button 4382 x-on:click="currentScreen = 'login'; showForm = true; showError = false;" 4383 class="font-medium underline text-rwp-accent cursor-pointer" 4384 tabindex="0" 4385 >Sign in</button> 4386 </p> 4387 </div> 4388 4389 <!-- Login Screen --> 4390 <div class="text-center" x-show="currentScreen === 'login'" x-transition:enter="transition-all duration-300 ease-out" x-transition:enter-start="opacity-0 -translate-y-4 scale-95" x-transition:enter-end="opacity-100 translate-y-0 scale-100"> 4391 <h2 class="text-base font-semibold text-rwp-widget-heading mb-2">Sign in to your account</h2> 4392 <p class="text-sm mb-6">Welcome back! Sign in to access your rewards.</p> 4393 4394 <!-- Login Form --> 4395 <form x-on:submit.prevent="if (!isAdminPreview && !isDemo) { handleLogin() }" class="mb-4"> 4396 <div class="space-y-3"> 4397 <div> 4398 <label for="login-email" class="sr-only block text-sm font-medium text-rwp-widget-text mb-2 text-left">Email or Username</label> 4399 <input 4400 type="text" 4401 id="login-email" 4402 x-model="formData.email" 4403 class="bg-white text-base w-full px-3 py-3 rounded-lg outline-1 -outline-offset-1 outline-gray-200 placeholder:text-gray-400 focus:outline-2 focus:-outline-offset-2 focus:outline-blue-500" 4404 placeholder="Your email or username" 4405 required 4406 > 4407 </div> 4408 <div> 4409 <label for="login-password" class="sr-only block text-sm font-medium text-rwp-widget-text mb-2 text-left">Password</label> 4410 <input 4411 type="password" 4412 id="login-password" 4413 x-model="formData.password" 4414 class="bg-white text-base w-full px-3 py-3 rounded-lg outline-1 -outline-offset-1 outline-gray-200 placeholder:text-gray-400 focus:outline-2 focus:-outline-offset-2 focus:outline-blue-500" 4415 placeholder="Your password" 4416 required 4417 > 4418 </div> 4419 4420 <button 4421 type="submit" 4422 tabindex="0" 4423 x-bind:disabled="isSubmitting" 4424 x-bind:class="isSubmitting ? 'opacity-50 cursor-not-allowed' : (isAdm
4424inPreview || isDemo) ? '!cursor-not-allowed' : 'hover:bg-rwp-button-hover'" 4425 x-bind:data-preview-disabled="(isAdminPreview || isDemo) ? 'true' : null" 4426 x-bind:data-tippy-content="(isAdminPreview || isDemo) ? 'Disabled for preview' : null" 4427 class="bg-rwp-brand text-rwp-widget-button-text text-sm font-semibold rounded-lg cursor-pointer transition-colors hover:bg-rwp-brand-hover disabled:hover:bg-rwp-brand disabled:opacity-50 disabled:cursor-not-allowed focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 w-full py-3 px-8 min-h-[48px] mx-auto grid grid-cols-1 grid-rows-1 [grid-template-areas:'stack'] place-items-center" 4428 > 4429 <span 4430 class="[grid-area:stack] transition-opacity duration-200" 4431 x-bind:class="{ 'invisible': isSubmitting, 'visible': !isSubmitting }" 4432 >Sign in</span> 4433 <svg class="w-5 h-5 animate-spin [grid-area:stack] transition-opacity duration-200" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" x-bind:class="{ 'invisible': isSubmitting !== true, 'visible': isSubmitting === true }"><desc>Loading spinner icon</desc><circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle><path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path></svg> </button> 4434 4435 </div> 4436 4437 4438 </form> 4439 4440 <!-- Error State for Login Screen --> 4441 <div x-show="showError && currentScreen === 'login'" x-transition:enter="transition-opacity duration-300" x-transition:enter-start="opacity-0" x-transition:enter-end="opacity-100" style="display: none;" class="mb-4"> 4442 <div class="bg-red-50 border border-red-200 rounded-lg p-4"> 4443 <div class="flex items-center"> 4444 <svg class="size-5 text-red-400 mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24"> 4445 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path> 4446 </svg> 4447 <span class="text-sm text-red-700 text-left" x-html="errorMessage"></span> 4448 </div> 4449 </div> 4450 </div> 4451 4452 <p class="text-sm"> 4453 Don't have an account? <button 4454 x-on:click="currentScreen = 'register'; showForm = true; showError = false;" 4455 class="font-medium underline text-rwp-accent cursor-pointer" 4456 tabindex="0" 4457 >Join now</button> 4458 </p> 4459 </div> 4460 </div> 4461 </div> 4462 </div> 4463 4464 <!-- Points Section for Non-Members --> 4465 <div x-show="memberId === 0 && pointsEnabled"> 4466 4467 <div class="bg-white rounded-lg px-4 py-6 relative text-rwp-widget-text shadow-card"> 4468 <!-- Points System Preview --> 4469 <div class="mb-6 text-center"> 4470 <h3 class="text-base font-semibold text-rwp-widget-heading mb-2" x-text="currencyPlural"></h3> 4471 <p class="text-sm" x-text="'Earn %s for completing different actions, and turn them into rewards.'.replace('%s', currencyPlural.toLowerCase())"></p> 4472 </div> 4473 4474 4475 <!-- Navigation Items --> 4476 <div> 4477 <button x-on:click="navigateToPanel('ways-to-earn')" class="w-full hover:bg-gray-50 text-left px-4 py-3 rounded-lg flex items-center justify-between transition-colors cursor-pointer focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500"> 4478 <div class="flex items-center gap-4"> 4479 <div class="size-8 rounded-lg flex items-center justify-center text-gray-700"> 4480 <svg class="size-8" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> 4481 <desc> 4482 Earn icon 4483 </desc> 4484 <path d="m0.75 14.25 0 9" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 4485 <path d="M0.75 21.75h15a3 3 0 0 0 -3 -3H9a3 3 0 0 0 -3 -3H0.75" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 4486 <path d="m6 18.75 3 0" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 4487 <path d="M15.75 13.875 9.358 7.207a3.785 3.785 0 0 1 -0.709 -4.366h0a3.782 3.782 0 0 1 6.057 -0.983L15.75 2.9l1.044 -1.044a3.782 3.782 0 0 1 6.057 0.983h0a3.783 3.783 0 0 1 -0.709 4.366Z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 4488 </svg> </div> 4489 <span class="text-sm text-rwp-widget-heading font-medium">Ways to earn</span> 4490 </div> 4491 <svg class="size-5 text-gray-400" fill="none" stroke="currentColor" viewbox="0 0 24 24" stroke-width="1.5"> 4492 <path stroke-linecap="round" stroke-linejoin="round" d="M8.25 4.5l7.5 7.5-7.5 7.5"></path> 4493 </svg> 4494 </button> 4495 4496 <button x-on:click="navigateToPanel('ways-to-redeem')" class="w-full hover:bg-gray-50 text-left px-4 py-3 rounded-lg flex items-center justify-between transition-colors cursor-pointer focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500"> 4497 <div class="flex items-center gap-4"> 4498 <div class="size-8 rounded-lg flex items-center justify-center text-gray-700"> 4499 <svg class="size-8" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24"><desc>Free product icon</desc><g><g><path d="M15.75 23.24a3 3 0 0 0 -3 -3H9a3 3 0 0 0 -3 -3H0.75v6Z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path><path d="m6 20.24 3 0" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path></g><path d="M16.5 17.74H21a0.76 0.76 0 0 0 0.75 -0.75v-6.75" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path><path d="m8.25 10.24 0 4" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path><path d="M7.5 5.99h15s0.75 0 0.75 0.75v2.75s0 0.75 -0.75 0.75h-15s-0.75 0 -0.75 -0.75V6.74s0 -0.75 0.75 -0.75" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path><path d="m15 15.24 0 -9.25" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path><path d="M19.27 3.87A11.84 11.84 0 0 1 15 6a11.93 11.93 0 0 1 2.12 -4.24C18.46 0.43 19.21 0.63 19.8 1.22s0.78 1.33 -0.53 2.65Z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path><path d="M10.73 3.87A11.84 11.84 0 0 0 15 6a11.93 11.93 0 0 0 -2.12 -4.24C11.54 0.43 10.79 0.63 10.2 1.22
4499s-0.78 1.33 0.53 2.65Z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path></g></svg> </div> 4500 <span class="text-sm text-rwp-widget-heading font-medium">Ways to redeem</span> 4501 </div> 4502 <svg class="size-5 text-gray-400" fill="none" stroke="currentColor" viewbox="0 0 24 24" stroke-width="1.5"> 4503 <path stroke-linecap="round" stroke-linejoin="round" d="M8.25 4.5l7.5 7.5-7.5 7.5"></path> 4504 </svg> 4505 </button> 4506 </div> 4507 </div> 4508 </div> 4509 4510 <!-- Referrals Section for Non-Members --> 4511 <div x-show="memberId === 0 && referralsEnabled"> 4512 <div class="bg-white rounded-lg px-4 py-6 relative text-rwp-widget-text shadow-card text-center"> 4513 <h2 class="text-base font-semibold text-rwp-widget-heading mb-2">Refer your friends</h2> 4514 <!-- Description changes based on whether friend reward exists --> 4515 <p class="text-sm mb-4"> 4516 Share your link with friends. They get a reward and you earn one when they purchase. </p> 4517 4518 <div class="py-3b"> 4519 <!-- Advocate reward --> 4520 <div class="flex items-center justify-between px-4 py-3"> 4521 <div class="flex items-center gap-4"> 4522 <div class="size-8 flex items-center justify-center shrink-0 text-gray-700"> 4523 <svg class="size-8" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> 4524 <desc> 4525 Fixed amount discount icon 4526 </desc> 4527 <path d="M19.575 8.25a3.755 3.755 0 0 1 3.049 -2.95 0.749 0.749 0 0 0 0.626 -0.738V2.25a1.5 1.5 0 0 0 -1.5 -1.5H2.25a1.5 1.5 0 0 0 -1.5 1.5v2.314a0.747 0.747 0 0 0 0.626 0.738 3.751 3.751 0 0 1 0 7.4 0.75 0.75 0 0 0 -0.626 0.739v2.309a1.5 1.5 0 0 0 1.5 1.5h6" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 4528 <path d="m8.25 14.25 0 -1.5" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 4529 <path d="m8.25 9.75 0 -1.5" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 4530 <path d="m8.25 5.25 0 -1.5" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 4531 <path d="M18.75 14.25h-2.033a1.342 1.342 0 0 0 -0.5 2.588l2.064 0.825a1.342 1.342 0 0 1 -0.5 2.587H15.75" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 4532 <path d="m17.25 14.25 0 -0.75" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 4533 <path d="m17.25 21 0 -0.75" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 4534 <path d="M11.25 17.25a6 6 0 1 0 12 0 6 6 0 1 0 -12 0Z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 4535 </svg> </div> 4536 <div class="flex-1 text-left"> 4537 <div class="font-medium text-rwp-widget-heading text-sm">You get</div> 4538 <div class="text-sm"> 4539 $5 off coupon </div> 4540 </div> 4541 </div> 4542 <div class="size-5"></div> 4543 </div> 4544 <!-- Friend reward --> 4545 <div class="flex items-center justify-between px-4 py-3"> 4546 <div class="flex items-center gap-4"> 4547 <div class="size-8 flex items-center justify-center flex-shrink-0 text-gray-700"> 4548 <svg class="size-8" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> 4549 <desc> 4550 Fixed amount discount icon 4551 </desc> 4552 <path d="M19.575 8.25a3.755 3.755 0 0 1 3.049 -2.95 0.749 0.749 0 0 0 0.626 -0.738V2.25a1.5 1.5 0 0 0 -1.5 -1.5H2.25a1.5 1.5 0 0 0 -1.5 1.5v2.314a0.747 0.747 0 0 0 0.626 0.738 3.751 3.751 0 0 1 0 7.4 0.75 0.75 0 0 0 -0.626 0.739v2.309a1.5 1.5 0 0 0 1.5 1.5h6" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 4553 <path d="m8.25 14.25 0 -1.5" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 4554 <path d="m8.25 9.75 0 -1.5" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 4555 <path d="m8.25 5.25 0 -1.5" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 4556 <path d="M18.75 14.25h-2.033a1.342 1.342 0 0 0 -0.5 2.588l2.064 0.825a1.342 1.342 0 0 1 -0.5 2.587H15.75" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 4557 <path d="m17.25 14.25 0 -0.75" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 4558 <path d="m17.25 21 0 -0.75" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 4559 <path d="M11.25 17.25a6 6 0 1 0 12 0 6 6 0 1 0 -12 0Z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 4560 </svg> </div> 4561 <div class="flex-1 text-left"> 4562 <div class="font-medium text-rwp-widget-heading text-sm">They get</div> 4563 <div class="text-sm"> 4564 $10 off coupon </div> 4565 </div>
4566 </div> 4567 <div class="size-5"></div> 4568 </div> 4569 </div> 4570 </div> 4571 </div> 4572 4573 4574 <div 4575 x-show="availableRewardsCount > 0 && memberId > 0" 4576 x-transition:enter="transition-opacity duration-300 ease-out" 4577 x-transition:enter-start="opacity-0" 4578 x-transition:enter-end="opacity-100" 4579 x-transition:leave="transition-opacity duration-200 ease-in" 4580 x-transition:leave-start="opacity-100" 4581 x-transition:leave-end="opacity-0" 4582 class="bg-white rounded-lg p-4 py-3 text-rwp-widget-text shadow-card" 4583 > 4584 <button 4585 x-on:click="navigateToPanel('your-rewards')" 4586 class="w-full hover:bg-gray-50 text-left px-4 py-3 rounded-lg flex items-center justify-between transition-colors cursor-pointer focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500" 4587 > 4588 <div class="flex-1"> 4589 <div class="text-base font-semibold text-rwp-widget-heading"> 4590 Your rewards </div> 4591 <div class="text-sm text-gray-500"> 4592 <span x-text="availableRewardsCount === 1 ? 4593 'You have 1 reward available' : 4594 'You have ' + availableRewardsCount + ' rewards available'"></span> 4595 </div> 4596 </div> 4597 <svg class="size-5 text-gray-400" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke-width="1.5" stroke="currentColor"><desc>Chevron right icon</desc><path stroke-linecap="round" stroke-linejoin="round" d="m8.25 4.5 7.5 7.5-7.5 7.5" /></svg> </button> 4598 </div> 4599 4600 4601 <div class="bg-white rounded-lg px-4 py-6 relative text-rwp-widget-text shadow-card" x-show="memberId > 0 && pointsEnabled" x-bind:class="navigationDirection === 'initial' ? 'rwp-stagger-fade-up rwp-stagger-2' : (navigationDirection === 'back' ? 'rwp-stagger-slide-left rwp-stagger-2' : '')"> 4602 4603 4604 4605 <button 4606 x-on:click="navigateToPanel('ways-to-earn')" 4607 class="w-full hover:bg-gray-50 text-left px-4 py-3 rounded-lg flex items-center justify-between transition-colors cursor-pointer focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500" 4608 > 4609 <div class="flex items-center gap-4"> 4610 <div class="size-8 flex items-center justify-center flex-shrink-0 text-rwp-widget-icon-text"> 4611 <svg class="size-8" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> 4612 <desc> 4613 Earn icon 4614 </desc> 4615 <path d="m0.75 14.25 0 9" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 4616 <path d="M0.75 21.75h15a3 3 0 0 0 -3 -3H9a3 3 0 0 0 -3 -3H0.75" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 4617 <path d="m6 18.75 3 0" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 4618 <path d="M15.75 13.875 9.358 7.207a3.785 3.785 0 0 1 -0.709 -4.366h0a3.782 3.782 0 0 1 6.057 -0.983L15.75 2.9l1.044 -1.044a3.782 3.782 0 0 1 6.057 0.983h0a3.783 3.783 0 0 1 -0.709 4.366Z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 4619 </svg> </div> 4620 <span class="text-sm text-rwp-widget-heading font-medium">Ways to earn</span> 4621 </div> 4622 <svg class="size-5 text-gray-400" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke-width="1.5" stroke="currentColor"><desc>Chevron right icon</desc><path stroke-linecap="round" stroke-linejoin="round" d="m8.25 4.5 7.5 7.5-7.5 7.5" /></svg> </button> 4623 <button 4624 x-on:click="navigateToPanel('ways-to-redeem')" 4625 class="w-full hover:bg-gray-50 text-left px-4 py-3 rounded-lg flex items-center justify-between transition-colors cursor-pointer focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500" 4626 > 4627 <div class="flex items-center gap-4"> 4628 <div class="size-8 flex items-center justify-center flex-shrink-0 text-rwp-widget-icon-text"> 4629 <svg class="size-8" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24"><desc>Free product icon</desc><g><g><path d="M15.75 23.24a3 3 0 0 0 -3 -3H9a3 3 0 0 0 -3 -3H0.75v6Z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path><path d="m6 20.24 3 0" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path></g><path d="M16.5 17.74H21a0.76 0.76 0 0 0 0.75 -0.75v-6.75" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path><path d="m8.25 10.24 0 4" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path><path d="M7.5 5.99h15s0.75 0 0.75 0.75v2.75s0 0.75 -0.75 0.75h-15s-0.75 0 -0.75 -0.75V6.74s0 -0.75 0.75 -0.75" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path><path d="m15 15.24 0 -9.25" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path><path d="M19.27 3.87A11.84 11.84 0 0 1 15 6a11.93 11.93 0 0 1 2.12 -4.24C18.46 0.43 19.21 0.63 19.8 1.22s0.78 1.33 -0.53 2.65Z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path><path d="M10.73 3.87A11.84 11.84 0 0 0 15 6a11.93 11.93 0 0 0 -2.12 -4.24C11.54 0.43 10.79 0.63 10.2 1.22
4629s-0.78 1.33 0.53 2.65Z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path></g></svg> </div> 4630 <span class="text-sm text-rwp-widget-heading font-medium">Ways to redeem</span> 4631 </div> 4632 <svg class="size-5 text-gray-400" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke-width="1.5" stroke="currentColor"><desc>Chevron right icon</desc><path stroke-linecap="round" stroke-linejoin="round" d="m8.25 4.5 7.5 7.5-7.5 7.5" /></svg> </button> 4633 </div> 4634 4635 4636 <div id="refer-your-friends-section" class="bg-white rounded-lg px-4 py-6 relative text-rwp-widget-text shadow-card" x-show="memberId > 0 && referralsEnabled" x-bind:class="navigationDirection === 'initial' ? 'rwp-stagger-fade-up rwp-stagger-3' : (navigationDirection === 'back' ? 'rwp-stagger-slide-left rwp-stagger-3' : '')"> 4637 <h2 class="text-base font-semibold text-rwp-widget-heading mb-2 text-left pl-4">Refer your friends</h2> 4638 4639 4640 4641 <!-- Advocate reward --> 4642 <div class="flex items-center justify-between" 4643 > 4644 <div class="flex items-center gap-4 px-4 py-3"> 4645 <div class="size-8 flex items-center justify-center flex-shrink-0 text-rwp-widget-icon-text" 4646 > 4647 <svg class="size-8" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> 4648 <desc> 4649 Fixed amount discount icon 4650 </desc> 4651 <path d="M19.575 8.25a3.755 3.755 0 0 1 3.049 -2.95 0.749 0.749 0 0 0 0.626 -0.738V2.25a1.5 1.5 0 0 0 -1.5 -1.5H2.25a1.5 1.5 0 0 0 -1.5 1.5v2.314a0.747 0.747 0 0 0 0.626 0.738 3.751 3.751 0 0 1 0 7.4 0.75 0.75 0 0 0 -0.626 0.739v2.309a1.5 1.5 0 0 0 1.5 1.5h6" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 4652 <path d="m8.25 14.25 0 -1.5" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 4653 <path d="m8.25 9.75 0 -1.5" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 4654 <path d="m8.25 5.25 0 -1.5" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 4655 <path d="M18.75 14.25h-2.033a1.342 1.342 0 0 0 -0.5 2.588l2.064 0.825a1.342 1.342 0 0 1 -0.5 2.587H15.75" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 4656 <path d="m17.25 14.25 0 -0.75" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 4657 <path d="m17.25 21 0 -0.75" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 4658 <path d="M11.25 17.25a6 6 0 1 0 12 0 6 6 0 1 0 -12 0Z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 4659 </svg> </div> 4660 <div class="flex-1 text-left"> 4661 <div class="font-medium text-rwp-widget-heading text-sm">You get</div> 4662 <div class="text-sm" 4663 > 4664 $5 off coupon </div> 4665 </div> 4666 </div> 4667 <div class="size-5"></div> 4668 </div> 4669 <!-- Friend reward --> 4670 <div class="flex items-center justify-between" 4671 > 4672 <div class="flex items-center gap-4 px-4 py-3"> 4673 <div class="size-8 flex items-center justify-center flex-shrink-0 text-rwp-widget-icon-text" 4674 > 4675 <svg class="size-8" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> 4676 <desc> 4677 Fixed amount discount icon 4678 </desc> 4679 <path d="M19.575 8.25a3.755 3.755 0 0 1 3.049 -2.95 0.749 0.749 0 0 0 0.626 -0.738V2.25a1.5 1.5 0 0 0 -1.5 -1.5H2.25a1.5 1.5 0 0 0 -1.5 1.5v2.314a0.747 0.747 0 0 0 0.626 0.738 3.751 3.751 0 0 1 0 7.4 0.75 0.75 0 0 0 -0.626 0.739v2.309a1.5 1.5 0 0 0 1.5 1.5h6" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 4680 <path d="m8.25 14.25 0 -1.5" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 4681 <path d="m8.25 9.75 0 -1.5" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 4682 <path d="m8.25 5.25 0 -1.5" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 4683 <path d="M18.75 14.25h-2.033a1.342 1.342 0 0 0 -0.5 2.588l2.064 0.825a1.342 1.342 0 0 1 -0.5 2.587H15.75" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 4684 <path d="m17.25 14.25 0 -0.75" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 4685 <path d="m17.25 21 0 -0.75" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 4686 <path d="M11.25 17.25a6 6 0 1 0 12 0 6 6 0 1 0 -12 0Z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 4687 </svg> </div> 4688 <div class="flex-1 text-left"> 4689 <div class="font-medium text-rwp-widget-heading text-sm">They get</div> 4690 <div class="text-sm text-gray-700" 4691 > 4692 $10 off coupon </div> 4693 </div> 4694 </div> 4695 <div class="size-5"></div>
4696 </div> 4697 4698 4699 <!-- Referral link input --> 4700 <div> 4701 <label for="referral-link-input" class="block font-medium text-gray-900 sr-only text-sm/6">Invite link</label> 4702 <div class="mt-2"> 4703 <div x-data="{ isCheckmark: false }" class="flex bg-white rounded-lg outline-1 -outline-offset-1 outline-gray-200"> 4704 <input 4705 x-on:click="handleCopyClick($el, null, false)" 4706 id="referral-link-input" 4707 type="text" 4708 readonly 4709 class="block min-w-0 pl-5 py-3 text-sm text-gray-900 cursor-pointer grow focus:outline-none sm:text-sm/6 text-ellipsis" 4710 x-bind:value="userData.referralLink || 'https://yoursite.com/?share=df04c90'" 4711 x-ref="referralInput"> 4712 4713 <div class="flex"> 4714 <button 4715 x-on:click="handleCopyClick($refs.referralInput, $data)" 4716 class="py-3 px-3 relative transition-all duration-200 cursor-pointer" 4717 x-bind:class="{ 'hover:text-gray-900 text-gray-500': !isCheckmark}" 4718 x-ref="copyButton"> 4719 <div class="relative size-6"> 4720 <div class="absolute inset-0 transition-all duration-300 ease-in-out" 4721 x-bind:class="isCheckmark ? 'opacity-0 scale-95' : 'opacity-100 scale-100'"> 4722 <svg class="size-6" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="-1 -1 24 24"><desc>Copy to clipboard icon</desc><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M17.875 6.645833333333333h2.520833333333333c0.506275 0 0.9166666666666666 0.41041 0.9166666666666666 0.9166666666666666v12.833333333333332c0 0.506275 -0.41039166666666665 0.9166666666666666 -0.9166666666666666 0.9166666666666666h-12.833333333333332c-0.5062658333333333 0 -0.9166666666666666 -0.41039166666666665 -0.9166666666666666 -0.9166666666666666V17.875" stroke-width="2"></path><path stroke="currentColor" stroke-linejoin="round" d="M0.6875 1.6041666666666665c0 -0.5062658333333333 0.41041 -0.9166666666666666 0.9166666666666666 -0.9166666666666666h12.833333333333332c0.506275 0 0.9166666666666666 0.41041 0.9166666666666666 0.9166666666666666v12.833333333333332c0 0.506275 -0.41039166666666665 0.9166666666666666 -0.9166666666666666 0.9166666666666666h-12.833333333333332c-0.5062658333333333 0 -0.9166666666666666 -0.41039166666666665 -0.9166666666666666 -0.9166666666666666v-12.833333333333332Z" stroke-width="2"></path></svg> </div> 4723 <div class="absolute inset-0 transition-all duration-300 ease-in-out" 4724 x-bind:class="isCheckmark ? 'opacity-100 scale-100' : 'opacity-0 scale-95'"> 4725 <svg class="size-6" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke="currentColor"><desc>Checkmark icon</desc><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"></path></svg> </div> 4726 </div> 4727 </button> 4728 </div> 4729 </div> 4730 </div> 4731 </div> 4732 4733 <div x-data="{ showMore: false }" x-show="sharing.email || sharing.x || sharing.facebook" x-cloak> 4734 <div class="grid grid-cols-4 mt-6"> 4735 <a href="/cdn-cgi/l/email-protection#94abe7e1f6fef1f7e0a9d5b1a6a4f8fde0e0f8f1b1a6a4f3fdf2e0b1a6a4f2fbe6b1a6a4edfbe1b1a6a5b2f5f9e4aff6fbf0eda9dcf1e6f1b1a6a3e7b1a6a4e7fbf9f1e0fcfdfaf3b1a6d7b1a6a4ddb1a6a4f3e1f1e7e7bab1a6a4cdfbe1b1a6a4f7f5fab1a6a4f3f1e0b1a6a4f5b1a6a4b1a6a0a5a4b1a6a4fbf2f2b1a6a4f7fbe1e4fbfab1a6a4f2fbe6b1a6a4edfbe1e6b1a6a4f2fde6e7e0b1a6a4e4e1e6f7fcf5e7f1b1a6a4f5e0b1a6a4d8fde7e0b1a6a4fbfab1a6a4d9d8c7b1a6a4b1a6a2b1a6a4c6d1d5d8c0dbc6baf7fbf9b1a6d6b1a6a4f2e6fbf9b1a6a4b1a6a0a3a1bab1a6d7b1a6a4fdf2b1a6a4e0fcf5e0b1a6a3e7b1a6a4f1e2f1fab1a6a4e3fbe6e0fcb1a6a4edfbe1e6b1a6a4e0fdf9f1bab1a4d0b1a4d5b1a4d0b1a4d5d7f8fdf7ffb1a6a4e0fcfde7b1a6a4f8fdfaffb1a6d7b1a6a4fbe6b1a6a4f0fbfab1a6a3e0b1a6d7b1a6a4e3fcf5e0f1e2f1e6b1a7d5b1a6a4b1a6a4b1a4d0b1a4d5fce0e0e4e7b1a7d5b1a6d2b1a6d2fef5f7fffff1f8f8f1e6baf7fbf9b1a6d2e4e6f1e2fdf1e3b1a4d5b1a4d5" target="_self" rel="noopener noreferrer" class="flex flex-col items-center justify-center min-w-[2.75rem] min-h-[2.75rem] p-2 text-gray-600 hover:text-gray-900 hover:bg-gray-50 transition-all duration-200 ease-out rounded-lg cursor-pointer" x-on:click="handleShareClick('email', $event)"> 4736 <svg class="size-6 shrink-0" fill="none" stroke="currentColor" viewbox="0 0 24 24" stroke-width="1.5"><desc>Envelope (email) icon</desc><path stroke-linecap="round" stroke-linejoin="round" d="M21.75 6.75v10.5a2.25 2.25 0 01-2.25 2.25h-15a2.25 2.25 0 01-2.25-2.25V6.75m19.5 0A2.25 2.25 0 0019.5 4.5h-15a2.25 2.25 0 00-2.25 2.25m19.5 0v.243a2.25 2.25 0 01-1.07 1.916l-7.5 4.615a2.25 2.25 0 01-2.36 0L3.32 8.91a2.25 2.25 0 01-1.07-1.916V6.75" /></svg> <span class="text-xs mt-1">Email</span> 4737 </a> 4738 <a href="https://twitter.com/intent/tweet?url=https%3A%2F%2Fjackkeller.com%2Fpreview&text=Visit%20List%20on%20MLS%20%26amp%3B%20REALTOR.com%2B%20from%20%2475.%20to%20receive%20your%20free%20gift%21" target="_blank" rel="noopener noreferrer" class="flex flex-col items-center justify-center min-w-[2.75rem] min-h-[2.75rem] p-2 text-gray-600 hover:text-gray-900 hover:bg-gray-50 transition-all duration-200 ease-out rounded-lg cursor-pointer" x-on:click="handleShareClick('twitter', $event)"> 4739 <svg class="size-6 shrink-0" viewbox="0 0 24 24" fill="currentColor"><desc>X (formerly Twitter) logo</desc><path d="M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z" /></svg> <span class="text-xs mt-1">X</span> 4740 </a> 4741 <a href="https://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Fjackkeller.com%2Fpreview" target="_blank" rel="noopener noreferrer" class="flex flex-col items-center justify-center min-w-[2.75rem] min-h-[2.75rem] p-2 text-gray-600 hover:text-gray-900 hover:bg-gray-50 transition-all duration-200 ease-out rounded-lg cursor-pointer" x-on:click="handleShareClick('facebook', $event)"> 4742 <svg class="size-6 shrink-0" fill="currentColor" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><desc>Facebook logo</desc><path d="M24 12.073c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.99 4.388 10.954 10.125 11.854v-8.385H7.078v-3.47h3.047V9.43c0-3.007 1.792-4.669 4.533-4.669 1.312 0 2.686.235 2.686.235v2.953H15.83c-1.491 0-1.956.925-1.956 1.874v2.25h3.328l-.532 3.47h-2.796v8.385C19.612 23.027 24 18.062 24 12.073z" /></svg> <span class="text-xs mt-1">Facebook</span> 4743 </a> 4744 4745 </div> 4746 4747 <!-- Overflow Menu --> 4748 <div x-show="showMore" x-cloak class="mt-4 border-t border-gray-100 pt-4"> 4749 <div class="grid grid-cols-4 gap-2"> 4750 </div> 4751 </div> 4752 </div> 4753 </div> 4754 4755 <div 4756 x-show="memberId > 0 && (pointsEnabled || referralsEnabled)" 4757 x-transition:enter="transition-opacity duration-300 ease-out" 4758 x-transition:enter-start="opacity-0" 4759 x-transition:enter-end="opacity-100" 4760 x-transition:leave="transition-opacity duration-200 ease-in" 4761 x-transition:leave-start="opacity-100" 4762 x-transition:leave-end="opacity-0" 4763 class="bg-white rounded-lg p-4 py-3 text-rwp-widget-text shadow-card"
4764 x-bind:class="navigationDirection === 'initial' ? 'rwp-stagger-fade-up rwp-stagger-4' : (navigationDirection === 'back' ? 'rwp-stagger-slide-left rwp-stagger-4' : '')" 4765 > 4766 <button 4767 x-on:click="navigateToPanel('activity')" 4768 class="w-full hover:bg-gray-50 text-left px-4 py-3 rounded-lg flex items-center justify-between transition-colors cursor-pointer focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500" 4769 > 4770 <div class="flex items-center gap-4"> 4771 <div class="size-8 flex items-center justify-center flex-shrink-0 text-rwp-widget-icon-text"> 4772 <svg class="size-8" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> 4773 <desc> 4774 Clock history icon 4775 </desc> 4776 <path d="M13.5 22a9.75 9.75 0 1 0 -9.75 -9.75V13" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 4777 <path d="m0.75 9.997 3 3 3 -3" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 4778 <path d="m12.75 6.247 0 6.75 5.25 0" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 4779 </svg> </div> 4780 <span class="text-sm text-rwp-widget-heading font-medium">Your activity</span> 4781 </div> 4782 <svg class="size-5 text-gray-400" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke-width="1.5" stroke="currentColor"><desc>Chevron right icon</desc><path stroke-linecap="round" stroke-linejoin="round" d="m8.25 4.5 7.5 7.5-7.5 7.5" /></svg> </button> 4783 </div> 4784 </div> 4785 4786 4787 4788 4789 <div 4790 x-show="isFriendClaimMode && currentPanel === 'main'" 4791 x-transition:enter="transition-all duration-300 ease-out delay-150" 4792 x-transition:enter-start="opacity-0" 4793 x-transition:enter-end="opacity-100" 4794 x-transition:leave="transition-opacity duration-0" 4795 x-transition:leave-start="opacity-100" 4796 x-transition:leave-end="opacity-0" 4797 class="px-6 py-12 bg-rwp-widget-bg" 4798 > 4799 4800 <!-- Claim Form --> 4801 <div x-data="friendClaimForm({ 4802 nonce: 'f68cf984f4', 4803 referralCode: '', 4804 ajaxUrl: 'https://jackkeller.com/wp-admin/admin-ajax.php?rewardswp_locale=site', 4805 storeUrl: 'https://jackkeller.com/pay-now/', 4806 checkoutUrl: 'https://jackkeller.com/checkout/', 4807 cartUrl: 'https://jackkeller.com/cart-2/', 4808 cartItemCount: 0, 4809 cartProductIds: [], 4810 integrationSource: 'woocommerce', 4811 alreadyClaimed: false, 4812 existingCoupon: '', 4813 existingRewardId: null, 4814 isCouponApplied: false, 4815 isAdminPreview: false, 4816 isDemo: false, 4817 rewardType: '', 4818 freeProductId: '', 4819 rewardTitle: '', 4820 minimumOrderAmount: 0, 4821 addToCartText: 'Add to cart', 4822 claimRewardText: 'Claim reward', 4823 applyToCartText: 'Claim free product' 4824 })" class="text-rwp-widget-text"> 4825 <!-- Reward Display --> 4826 <div x-show="!showSuccess" class="text-center mb-6"> 4827 <!-- Centered Icon (match success screen) --> 4828 <div class="flex justify-center mb-2"> 4829 <svg class="size-10 text-gray-700" fill="none" stroke="currentColor" viewbox="0 0 24 24" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M21 11.25v8.25a1.5 1.5 0 01-1.5 1.5H4.5a1.5 1.5 0 01-1.5-1.5v-8.25M12 4.875A2.625 2.625 0 109.375 7.5H12m0-2.625V7.5m0-2.625A2.625 2.625 0 1114.625 7.5H12m0 0V21m-8.625-9.75h18c.621 0 1.125-.504 1.125-1.125v-1.5c0-.621-.504-1.125-1.125-1.125h-18c-.621 0-1.125.504-1.125 1.125v1.5c0 .621.504 1.125 1.125 1.125z"></path></svg> </div> 4830 4831 <!-- Reward value display --> 4832 <div> 4833 <!-- Attribution eyebrow text --> 4834 <p class="text-base text-gray-600 mb-0.5"> 4835 You were sent a gift </p> 4836 4837 <!-- Large bold reward value --> 4838 <div class="text-2xl font-bold text-gray-900"> 4839 </div> 4840 </div> 4841 </div> 4842 <!-- Success State --> 4843 <div x-show="showSuccess" style="display: none"> 4844 <div class="text-center mb-6"> 4845 4846 <div class="flex justify-center mb-2"> 4847 <svg class="size-10 text-green-600" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24"><desc>Check circle alternate</desc><path d="M6 13.223 8.45 16.7a1.049 1.049 0 0 0 1.707 0.051L18 6.828" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path><path d="M0.75 11.999a11.25 11.25 0 1 0 22.5 0 11.25 11.25 0 1 0 -22.5 0Z" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path></svg> </div> 4848 4849 <!-- Reward value display --> 4850 <div> 4851 <p class="text-base text-gray-600 mt-2 mb-0.5"> 4852 You have received </p> 4853 <div class="flex items-center justify-center gap-3"> 4854 <div class="size-8 flex items-center justify-center flex-shrink-0 text-gray-700"> 4855 <svg class="size-8" fill="none" stroke="currentColor" viewbox="0 0 24 24" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M21 11.25v8.25a1.5 1.5 0 01-1.5 1.5H4.5a1.5 1.5 0 01-1.5-1.5v-8.25M12 4.875A2.625 2.625 0 109.375 7.5H12m0-2.625V7.5m0-2.625A2.625 2.625 0 1114.625 7.5H12m0 0V21m-8.625-9.75h18c.621 0 1.125-.504 1.125-1.125v-1.5c0-.621-.504-1.125-1.125-1.125h-18c-.621 0-1.125.504-1.125 1.125v1.5c0 .621.504 1.125 1.125 1.125z"></path></svg> </div> 4856 <div class="text-2xl font-bold text-gray-900" x-text="rewardTitle"> 4857 </div> 4858 </div> 4859 </div>
4860 </div> 4861 4862 <!-- Usage Instructions --> 4863 <div x-show="couponCode" class="text-sm text-gray-600 text-center mb-2 px-2"> 4864 <p>Use at checkout on your first order</p> 4865 </div> 4866 4867 <!-- Coupon Code Display (if coupon code available) --> 4868 <div x-show="couponCode" class="mb-4"> 4869 <div x-data="{ isCheckmark: false }" class="flex rounded-lg bg-white outline-1 -outline-offset-1 outline-gray-200"> 4870 <input x-on:click="handleCopyClick($refs.couponCode, null, false)" type="text" readonly class="block min-w-0 grow px-5 py-3 text-sm text-gray-900 focus:outline-none sm:text-sm/6 text-ellipsis cursor-pointer font-mono" x-ref="couponCode" x-bind:value="couponCode"> 4871 4872 <div class="flex"> 4873 <button x-on:click="handleCopyClick($refs.couponCode, $data)" class="py-3 px-3 relative transition-all duration-200 cursor-pointer" x-bind:class="{ 'hover:text-gray-900 text-gray-500': !isCheckmark}" x-ref="copyButton"> 4874 <div class="relative size-6"> 4875 <div class="absolute inset-0 transition-all duration-300 ease-in-out" x-bind:class="isCheckmark ? 'opacity-0 scale-95' : 'opacity-100 scale-100'"> 4876 <svg class="size-6" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="-1 -1 24 24"><desc>Copy to clipboard icon</desc><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M17.875 6.645833333333333h2.520833333333333c0.506275 0 0.9166666666666666 0.41041 0.9166666666666666 0.9166666666666666v12.833333333333332c0 0.506275 -0.41039166666666665 0.9166666666666666 -0.9166666666666666 0.9166666666666666h-12.833333333333332c-0.5062658333333333 0 -0.9166666666666666 -0.41039166666666665 -0.9166666666666666 -0.9166666666666666V17.875" stroke-width="2"></path><path stroke="currentColor" stroke-linejoin="round" d="M0.6875 1.6041666666666665c0 -0.5062658333333333 0.41041 -0.9166666666666666 0.9166666666666666 -0.9166666666666666h12.833333333333332c0.506275 0 0.9166666666666666 0.41041 0.9166666666666666 0.9166666666666666v12.833333333333332c0 0.506275 -0.41039166666666665 0.9166666666666666 -0.9166666666666666 0.9166666666666666h-12.833333333333332c-0.5062658333333333 0 -0.9166666666666666 -0.41039166666666665 -0.9166666666666666 -0.9166666666666666v-12.833333333333332Z" stroke-width="2"></path></svg> </div> 4877 <div class="absolute inset-0 transition-all duration-300 ease-in-out" x-bind:class="isCheckmark ? 'opacity-100 scale-100' : 'opacity-0 scale-95'"> 4878 <svg class="size-6" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke="currentColor"><desc>Checkmark icon</desc><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"></path></svg> </div> 4879 </div> 4880 </button> 4881 </div> 4882 </div> 4883 </div> 4884 4885 4886 4887 <!-- Apply Coupon Button - Only show when NOT applied and NOT failed due to minimum spend --> 4888 <div x-show="couponCode && !couponApplied && !productAddedButCouponFailed" x-cloak class="mb-4"> 4889 <button x-on:click="applyCouponToCart()" x-bind:disabled="applyingCoupon" x-bind:class="{ 4890 'opacity-50 cursor-not-allowed': applyingCoupon, 4891 'hover:bg-rwp-brand-hover': !applyingCoupon 4892 }" class="bg-rwp-brand text-rwp-widget-button-text text-sm font-semibold rounded-lg cursor-pointer transition-colors hover:bg-rwp-brand-hover disabled:hover:bg-rwp-brand disabled:opacity-50 disabled:cursor-not-allowed focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 w-full py-3 px-8 min-h-[48px] mx-auto grid grid-cols-1 grid-rows-1 [grid-template-areas:'stack'] place-items-center"> 4893 <span class="[grid-area:stack] flex items-center justify-center transition-opacity duration-200" x-bind:class="{ 'invisible': applyingCoupon, 'visible': !applyingCoupon }"> 4894 <!-- Dynamic text based on reward type, cart state, and minimum spend --> 4895 <template x-if="rewardType === 'free_product'"> 4896 <span x-text="freeProductButtonText"></span> 4897 </template> 4898 <template x-if="rewardType !== 'free_product'"> 4899 <span> 4900 <span x-show="isWooCommerce">Apply to cart</span> 4901 <span x-show="!isWooCommerce">Apply coupon</span> 4902 </span> 4903 </template> 4904 </span> 4905 <svg class="w-5 h-5 animate-spin [grid-area:stack] transition-opacity duration-200" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" x-bind:class="{ &ap
4905os;invisible': applyingCoupon !== true, 'visible': applyingCoupon === true }"><desc>Loading spinner icon</desc><circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle><path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path></svg> </button> 4906 <div x-show="couponError && !productAddedButCouponFailed" class="text-sm mt-2 text-red-500" x-text="couponErrorMessage"></div> 4907 </div> 4908 4909 <!-- Success Message - Show when coupon applied --> 4910 <div x-show="couponApplied" x-cloak class="mb-1 font-medium inline-flex items-center gap-2 rounded-lg px-3 py-2 text-emerald-600 text-sm w-full justify-center"> 4911 <span> applied</span> 4912 </div> 4913 4914 <div x-show="productAddedButCouponFailed" x-cloak class="mt-3 mb-3 text-sm w-full space-y-2"> 4915 <div x-show="productWasNewlyAdded" class="text-center text-emerald-600 font-medium"> 4916 Product added to cart </div> 4917 <template> 0"> 4918 <div class="text-center text-gray-600 px-2" x-text="'Almost there — add ' + '$' + remainingToUnlock + ' more to unlock'"></div> 4919 </template>
4920 </div> 4921 4922 <!-- Buttons when coupon failed but product added --> 4923 <template x-if="productAddedButCouponFailed"> 4924 <div> 4925 <!-- Primary CTA - Continue Shopping --> 4926 <a x-bind:href="isAdminPreview ? 'javascript:void(0)' : storeUrl" x-bind:class="{ 'mb-3': isWooCommerce, '!cursor-not-allowed': isAdminPreview }" class="bg-rwp-brand text-rwp-widget-button-text text-sm font-semibold rounded-lg cursor-pointer transition-colors hover:bg-rwp-brand-hover disabled:hover:bg-rwp-brand disabled:opacity-50 disabled:cursor-not-allowed focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 w-full py-3 px-8 min-h-[48px] mx-auto flex items-center justify-center no-underline block"> 4927 Continue shopping </a> 4928 4929 <!-- Secondary CTA - View Cart (WooCommerce only) --> 4930 <template x-if="isWooCommerce"> 4931 <a x-bind:href="isAdminPreview ? 'javascript:void(0)' : 'https://jackkeller.com/cart-2/'" x-bind:class="{ '!cursor-not-allowed': isAdminPreview }" class="text-sm inline-block w-full bg-gray-100 text-gray-700 font-semibold py-3 px-8 rounded-lg hover:bg-gray-200 transition-colors text-center cursor-pointer focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 no-underline block"> 4932 View cart </a> 4933 </template> 4934 </div> 4935 </template> 4936 4937 <!-- Buttons when coupon is applied successfully --> 4938 <template x-if="couponApplied && !isCartEmpty"> 4939 <div> 4940 <!-- Primary CTA - Go to Checkout --> 4941 <a x-bind:href="isAdminPreview ? 'javascript:void(0)' : 'https://jackkeller.com/checkout/'" class="bg-rwp-brand text-rwp-widget-button-text text-sm font-semibold rounded-lg cursor-pointer transition-colors hover:bg-rwp-brand-hover disabled:hover:bg-rwp-brand disabled:opacity-50 disabled:cursor-not-allowed focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 w-full py-3 px-8 min-h-[48px] mx-auto flex items-center justify-center no-underline block" x-bind:class="{ 'mb-3': isWooCommerce, '!cursor-not-allowed': isAdminPreview }"> 4942 Go to checkout </a> 4943 4944 <!-- Secondary CTA - View Cart (WooCommerce only) --> 4945 <template x-if="isWooCommerce"> 4946 <a x-bind:href="isAdminPreview ? 'javascript:void(0)' : 'https://jackkeller.com/cart-2/'" x-bind:class="{ '!cursor-not-allowed': isAdminPreview }" class="text-sm inline-block w-full bg-gray-100 text-gray-700 font-semibold py-3 px-8 rounded-lg hover:bg-gray-200 transition-colors text-center cursor-pointer focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 no-underline block"> 4947 View cart </a> 4948 </template> 4949 </div> 4950 </template> 4951 4952 <!-- Button when coupon is applied but cart is empty --> 4953 <template x-if="couponApplied && isCartEmpty"> 4954 <div> 4955 <!-- Primary CTA - Shop Now --> 4956 <a x-bind:href="isAdminPreview ? 'javascript:void(0)' : storeUrl" x-bind:class="{ '!cursor-not-allowed': isAdminPreview }" class="bg-rwp-brand text-rwp-widget-button-text text-sm font-semibold rounded-lg cursor-pointer transition-colors hover:bg-rwp-brand-hover disabled:hover:bg-rwp-brand disabled:opacity-50 disabled:cursor-not-allowed focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 w-full py-3 px-8 min-h-[48px] mx-auto flex items-center justify-center no-underline block"> 4957 Shop now </a> 4958 <!-- No secondary button when cart is empty --> 4959 </div> 4960 </template> 4961 </div> 4962 4963 <!-- Form State --> 4964 <div x-show="!showSuccess"> 4965 <!-- Claim instruction --> 4966 <p class="text-sm text-gray-600 text-center mb-2 px-2"> 4967 Enter your email to claim it now. </p> 4968 4969 <!-- Email Form --> 4970 <form x-on:submit.prevent="if (!isAdminPreview && !isDemo) { claimReward() }" class="mb-3"> 4971 <div style="position:absolute;left:-9999px;top:-9999px;opacity:0;pointer-events:none"> 4972 <label class="sr-only"> 4973 Leave this field empty </label> 4974 <input type="text" name="rwp_website" x-model="formData.rwp_website" value=""> 4975 </div> 4976 <div class="mb-4"> 4977 4978 <label for="claim-email" class="block text-sm font-medium text-gray-700 mb-1.5 text-left sr-only">Email</label> 4979 <input type="email" id="claim-email" x-model="formData.email" class="bg-white text-base w-full px-3 py-3 rounded-lg outline-1 -outline-offset-1 outline-gray-200 placeholder:text-gray-400 focus:outline-2 focus:-outline-offset-2 focus:outline-blue-500" placeholder="[email protected]" required> 4980 4981 </div> 4982 4983 <!-- Error State --> 4984 <div x-show="showError" x-transition:enter="transition-opacity duration-300" x-transition:enter-start="opacity-0" x-transition:enter-end="opacity-100" style="display: none" class="mb-4"> 4985 <div class="bg-red-50 border border-red-200 rounded-lg p-4"> 4986 <div class="flex items-center"> 4987 <svg class="size-5 text-red-400 mr-3 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewbox="0 0 24 24"> 4988 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path> 4989 </svg> 4990 <span class="text-sm text-red-700 text-left" x-html="errorMessage"></span> 4991 </div> 4992 </div> 4993 </div> 4994 4995 <button type="submit" x-bind:disabled="isSubmitting" x-bind:class="isSubmitting ? 'opacity-50 cursor-not-allowed'
4995 : (isAdminPreview || isDemo) ? '!cursor-not-allowed' : 'hover:bg-rwp-brand-hover'" class="bg-rwp-brand text-rwp-widget-button-text text-sm font-semibold rounded-lg cursor-pointer transition-colors hover:bg-rwp-brand-hover disabled:hover:bg-rwp-brand disabled:opacity-50 disabled:cursor-not-allowed focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 w-full py-3 px-8 min-h-[48px] mx-auto grid grid-cols-1 grid-rows-1 [grid-template-areas:'stack'] place-items-center"> 4996 <span class="[grid-area:stack] transition-opacity duration-200" x-bind:class="{ 'invisible': isSubmitting, 'visible': !isSubmitting }">Claim your gift</span> 4997 <svg class="w-5 h-5 animate-spin [grid-area:stack] transition-opacity duration-200" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" x-bind:class="{ 'invisible': isSubmitting !== true, 'visible': isSubmitting === true }"><desc>Loading spinner icon</desc><circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle><path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path></svg> </button> 4998 4999 </form> 5000 </div> 5001 5002 </div> 5003 5004 5005 5006 5007 5008 5009 5010 5011 </div> 5012 5013 5014 <div 5015 x-show="currentPanel === 'ways-to-earn'" 5016 x-bind:class="'relative h-full flex flex-col overflow-hidden ' + (currentPanel === 'ways-to-earn' ? (navigationDirection === 'initial' ? 'rwp-panel-fade-up' : (navigationDirection === 'forward' ? 'rwp-panel-slide-forward' : (navigationDirection === 'back' ? 'rwp-panel-slide-back' : ''))) : '')" 5017 x-data="{ panelAtTop: true, panelAtBottom: false }" 5018 x-effect="if (currentPanel === 'ways-to-earn') { const el = $el.querySelector('.overflow-y-auto'); if (el && el.scrollHeight > 0) { panelAtBottom = el.scrollTop + el.clientHeight >= el.scrollHeight - 5; } }" 5019 > 5020 <div class="flex-1 overflow-y-auto custom-scrollbar px-6 py-6 pb-32 text-rwp-widget-text" 5021 @scroll="panelAtTop = $el.scrollTop < 5; panelAtBottom = $el.scrollTop + $el.clientHeight >= $el.scrollHeight - 5" 5022 > 5023 5024 <h2 class="text-lg font-semibold text-rwp-widget-heading mb-3">Ways to earn</h2> 5025 5026 <div 5027 x-show="showWelcomeBanner" 5028 role="status" 5029 class="mt-3 mb-2 flex items-center justify-between gap-2 rounded-lg bg-emerald-50 px-3 py-2 text-sm text-emerald-800" 5030 style="display: none;" 5031 > 5032 <svg class="size-4" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke="currentColor"><desc>Checkmark icon</desc><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"></path></svg> <div class="flex-1"> 5033 <span x-show="welcomeBannerData.signupPoints > 0"> 5034 Welcome, <span x-text="welcomeBannerData.memberName || ''"></span>! 5035 </span> 5036 <span x-show="welcomeBannerData.signupPoints === 0 || !welcomeBannerData.signupPoints"> 5037 Welcome, <span x-text="welcomeBannerData.memberName || ''"></span>—you're in. </span> 5038 </div> 5039 <div class="ml-auto" x-show="welcomeBannerData.signupPoints > 0 || false"> 5040 +<span x-text="(welcomeBannerData.signupPoints || 0).toLocaleString()"></span> 5041 <span x-text="(welcomeBannerData.signupPoints || 0) == 1 ? 'Point' : 'Points'"></span> 5042 </div> 5043 </div> 5044 5045 <!-- Error Notification for Guest Upgrade --> 5046 <div x-show="errorMessage" class="mt-3 mb-2 rounded-lg bg-red-50 px-3 py-2 text-sm text-red-800" role="alert" style="display: none;"> 5047 <span x-text="errorMessage"></span> 5048 </div> 5049 5050 <div class="divide-y divide-gray-50"> 5051 <div 5052 class="grid grid-cols-[auto_1fr_auto] items-center gap-4 py-4" 5053 > 5054 <div class="size-8 flex items-center justify-center flex-shrink-0 text-rwp-widget-icon-text"> 5055 <svg class="size-8" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> 5056 <desc> 5057 Place an order icon 5058 </desc> 5059 <path d="M19.049 6.75H4.936A1.4 1.4 0 0 0 3.5 7.907l-2 13.915a1.357 1.357 0 0 0 1.437 1.428h18.111a1.356 1.356 0 0 0 1.436 -1.428l-2 -13.915a1.4 1.4 0 0 0 -1.435 -1.157Z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 5060 <path d="M15.662 3.807A3.765 3.765 0 0 0 11.976 0.75h0A3.763 3.763 0 0 0 8.3 3.788" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 5061 <path d="M15.923 12.845a1.9 1.9 0 0 0 -2.752 0l-1.179 1.219 -1.179 -1.219a1.9 1.9 0 0 0 -2.751 0 2.06 2.06 0 0 0 0 2.845l3.512 3.63a0.578 0.578
50610 0 0 0.837 0l3.512 -3.63a2.062 2.062 0 0 0 0 -2.845Z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 5062 </svg> </div> 5063 <div class="min-w-0"> 5064 <div class="text-sm font-medium text-gray-900">Make a purchase</div> 5065 <div class="text-xs text-gray-500">1 Point for every $1 spent</div> 5066 </div> 5067 5068 <!-- CTA Button Section --> 5069 <!-- Non-signup actions with CTA --> 5070 <div class="justify-self-end" x-show="!!memberId" x-cloak> 5071 <!-- Regular CTA with URL - visible only to members --> 5072 <a 5073 x-show="!!memberId" 5074 x-cloak 5075 x-bind:href="isAdminPreview ? 'javascript:void(0)' : 'https://jackkeller.com/pay-now/'" 5076 x-bind:data-preview-disabled="isAdminPreview ? 'true' : null" 5077 x-bind:data-tippy-content="isAdminPreview ? 'Disabled for admin preview' : null" 5078 x-bind:class="{ '!cursor-not-allowed': isAdminPreview }" 5079 class="bg-rwp-brand text-rwp-widget-button-text text-sm font-semibold rounded-lg cursor-pointer transition-colors hover:bg-rwp-brand-hover disabled:hover:bg-rwp-brand disabled:opacity-50 disabled:cursor-not-allowed focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 py-2 px-4 grid grid-cols-1 grid-rows-1 [grid-template-areas:'stack'] place-items-center min-h-[36px] min-w-[5rem]" 5080 > 5081 Shop </a> 5082 </div> 5083 </div> 5084 <div 5085 class="grid grid-cols-[auto_1fr_auto] items-center gap-4 py-4" 5086 x-data="{ 5087 isCompleted: false, 5088 signupPoints: 25, 5089 completedDate: '' 5090 }" 5091 x-init=" 5092 if (!isCompleted && $root.welcomeBannerData && !!$root.welcomeBannerData.signupPoints) { 5093 isCompleted = true; 5094 signupPoints = $root.welcomeBannerData.signupPoints; 5095 completedDate = 'today'; 5096 } 5097 " 5098 x-on:member-joined.window=" 5099 if ($event.detail && !!$event.detail.signupPoints) { 5100 isCompleted = true; 5101 signupPoints = $event.detail.signupPoints; 5102 completedDate = 'today'; 5103 } 5104 " 5105 > 5106 <div class="size-8 flex items-center justify-center flex-shrink-0 text-rwp-widget-icon-text"> 5107 <svg class="size-8" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> 5108 <desc> 5109 Create account icon 5110 </desc> 5111 <path d="m15.75 9.749 -3.981 5.308a0.75 0.75 0 0 1 -1.13 0.08L8.25 12.749" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 5112 <path d="M10.73 1.357a1.63 1.63 0 0 1 2.54 0l1.512 1.881a1.629 1.629 0 0 0 1.446 0.6l2.4 -0.261a1.63 1.63 0 0 1 1.8 1.8l-0.261 2.4a1.629 1.629 0 0 0 0.6 1.446l1.881 1.512a1.63 1.63 0 0 1 0 2.54l-1.887 1.505a1.632 1.632 0 0 0 -0.6 1.447l0.261 2.4a1.629 1.629 0 0 1 -1.8 1.8l-2.4 -0.261a1.628 1.628 0 0 0 -1.446 0.6L13.27 22.64a1.629 1.629 0 0 1 -2.54 0l-1.511 -1.88a1.631 1.631 0 0 0 -1.447 -0.6l-2.4 0.261a1.628 1.628 0 0 1 -1.8 -1.8l0.261 -2.4a1.631 1.631 0 0 0 -0.6 -1.447l-1.88 -1.511a1.629 1.629 0 0 1 0 -2.54l1.88 -1.512a1.628 1.628 0 0 0 0.6 -1.446l-0.261 -2.4a1.629 1.629 0 0 1 1.8 -1.8l2.4 0.261a1.632 1.632 0 0 0 1.447 -0.6Z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 5113 </svg> </div> 5114 <div class="min-w-0"> 5115 <div class="text-sm font-medium text-gray-900">Create an account</div> 5116 <!-- Show points when not completed, earned date when completed --> 5117 <div class="text-xs text-gray-500"> 5118 <span x-show="!isCompleted" x-text="signupPoints.toLocaleString() + ' ' + (signupPoints == 1 ? 'Point' : 'Points')"></span> 5119 <span x-show="isCompleted" x-cloak>Earned <span x-text="completedDate"></span></span> 5120 </div> 5121 </div> 5122 5123 <!-- CTA Button Section --> 5124 <!-- Signup action: Always render completion indicator in DOM for dynamic updates --> 5125 <div class="justify-self-end" x-show="isCompleted" x-cloak> 5126 <!-- Completion indicator - always in DOM, controlled by Alpine --> 5127 <div 5128 x-show="isCompleted" 5129 x-cloak 5130 class="text-emerald-600 font-semibold text-sm" 5131 x-bind:aria-label="'You earned ' + signupPoints.toLocaleStr
5131ing() + ' ' + (signupPoints == 1 ? 'Point' : 'Points') + ' for creating your account'" 5132 > 5133 +<span x-text="signupPoints.toLocaleString()"></span> 5134 </div> 5135 </div> 5136 </div> 5137 <div 5138 class="grid grid-cols-[auto_1fr_auto] items-center gap-4 py-4" 5139 > 5140 <div class="size-8 flex items-center justify-center flex-shrink-0 text-rwp-widget-icon-text"> 5141 <svg class="size-8" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24"> 5142 <desc> 5143 Comment icon 5144 </desc> 5145 <g> 5146 <path d="M12.75 0.75a10.49 10.49 0 0 0 -8.92 16l-3.08 6.5 6.47 -3.08A10.5 10.5 0 1 0 12.75 0.75Z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 5147 <g> 5148 <path d="M15 10.5A0.75 0.75 0 0 0 15 9h0a0.75 0.75 0 1 0 0 1.5" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 5149 <path d="M15.17 13.76a2.79 2.79 0 0 0 1.62 -2.38c0 -1 -0.51 -2.26 -1.67 -2.37" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 5150 </g> 5151 <g> 5152 <path d="M9.76 10.5a0.75 0.75 0 0 0 0 -1.5h0a0.75 0.75 0 1 0 0 1.5" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 5153 <path d="M9.92 13.76a2.79 2.79 0 0 0 1.62 -2.38c0 -1 -0.51 -2.26 -1.67 -2.37" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 5154 </g> 5155 </g> 5156 </svg> </div> 5157 <div class="min-w-0"> 5158 <div class="text-sm font-medium text-gray-900">Leave a review</div> 5159 <div class="text-xs text-gray-500">10 Points</div> 5160 </div> 5161 5162 <!-- CTA Button Section --> 5163 </div> 5164 <div 5165 class="grid grid-cols-[auto_1fr_auto] items-center gap-4 py-4" 5166 > 5167 <div class="size-8 flex items-center justify-center flex-shrink-0 text-rwp-widget-icon-text"> 5168 <svg class="size-8" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> 5169 <desc> 5170 First purchase bonus icon 5171 </desc> 5172 <path d="M21.75 11.25H2.25v10.5a1.5 1.5 0 0 0 1.5 1.5h16.5a1.5 1.5 0 0 0 1.5 -1.5Z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 5173 <path d="M21.75 6.75H2.25a1.5 1.5 0 0 0 -1.5 1.5v2.25a0.75 0.75 0 0 0 0.75 0.75h21a0.75 0.75 0 0 0 0.75 -0.75V8.25a1.5 1.5 0 0 0 -1.5 -1.5Z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 5174 <path d="M11.25 6.75c-3.314 0 -6.75 -2.686 -6.75 -6" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 5175 <path d="M4.5 0.75c3.314 0 6.75 2.686 6.75 6" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 5176 <path d="M12.75 6.75c3.314 0 6.75 -2.686 6.75 -6" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 5177 <path d="M19.5 0.75c-3.314 0 -6.75 2.686 -6.75 6" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 5178 <path d="M9.75 6.75h4.5v16.5h-4.5z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 5179 </svg> </div> 5180 <div class="min-w-0"> 5181 <div class="text-sm font-medium text-gray-900">Make your first order</div> 5182 <div class="text-xs text-gray-500">150 Points</div> 5183 </div> 5184 5185 <!-- CTA Button Section --> 5186 <!-- Non-signup actions with CTA --> 5187 <div class="justify-self-end" x-show="!!memberId" x-cloak> 5188 <!-- Regular CTA with URL - visible only to members --> 5189 <a 5190 x-show="!!memberId" 5191 x-cloak 5192 x-bind:href="isAdminPreview ? 'javascript:void(0)' : 'https://jackkeller.com/pay-now/'" 5193 x-bind:data-preview-disabled="isAdminPreview ? 'true' : null" 5194 x-bind:data-tippy-content="isAdminPreview ? 'Disabled for admin preview' : null" 5195 x-bind:class="{ '!cursor-not-allowed': isAdminPreview }" 5196 class="bg-rwp-brand text-rwp-widget-button-text text-sm font-semibold rounded-lg cursor-pointer transition-colors hover:bg-rwp-brand-hover disabled:hover:bg-rwp-brand disabled:opacity-50 disabled:cursor-not-allowed focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 py-2 px-4 grid grid-cols-1 grid-rows-1 [grid-template-areas:'stack'] place-items-center min-h-[36px] min-w-[5rem]" 5197 > 5198 Shop </a> 5199 </div> 5200 </div> 5201 </div> 5202 5203 </div> 5204 5205 <!-- Top scroll fade --> 5206 <div x-show="!panelAtTop" 5207 class="pointer-events-none absolute top-0 left-0 h-8 z-10" 5208 style="right: var(--rwp-scrollbar-width, 8px); background: linear-gradient(to bottom, var(--color-rwp-widget-bg), transparent);"></div> 5209 <!-- Bottom scroll fade — hidden when guest join section is visible --> 5210 <div x-show="!panelAtBottom && memberId !== 0" 5211 class="pointer-events-none absolute bottom-0 left-0 h-12 z-10" 5212 style="right: var(--rwp-scrollbar-width, 8px); background: linear-gradient(to top, var(--color-rwp-widget-bg), transparent);"></div> 5213 5214 <div x-show="memberId === 0"> 5215 <!-- Fade Overlay --> 5216 <div 5217 class="absolute bottom-0 left-0 right-0 h-24 pointer-events-none" 5218 style="background: linear-gradient(to top, var(--color-rwp-widget-bg), var(--color-rwp-widget-bg) 20%, transparent);" 5219 x-data="{ hideJoinSection: false }" 5220 x-on:member-joined.window="hideJoinSection = true" 5221 x-show="!hideJoinSection" 5222 ></div> 5223 5224 <!-- Sticky Join Section --> 5225 <div 5226 class="absolute bottom-0 left-0 right-0 bg-white px-6 py-4 border-t border-gray-100" 5227 x-data="{ hideJoinSection: false, isLoggedIn: false }" 5228 x-on:member-joined.window="hideJoinSection = true" 5229 x-show="!hideJoinSection" 5230 > 5231 <div> 5232 <button 5233 type="button" 5234 x-on:click="isLoggedIn ? window.dispatchEvent(new CustomEvent('create-member-direct')) : window.dispatchEvent(new CustomEvent('show-register-form'))" 5235 class="bg-rwp-brand text-rwp-widget-button-text text-sm font-semibold rounded-lg cursor-pointer transition-colors hover:bg-rwp-brand-hover disabled:hover:bg-rwp-brand disabled:opacity-50 disabled:cursor-not-allowed focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500
5235w-full py-3 px-8 min-h-[48px] mx-auto flex items-center justify-center" 5236 style="--tw-ring-color: var(--rwp-accent);" 5237 > 5238 Join now </button> 5239 </div> 5240 <div x-show="!isLoggedIn" x-cloak class="mt-3 text-center text-rwp-widget-text"> 5241 <p class="text-sm"> 5242 Already have an account? <button 5243 x-on:click="navigateToPanel('main', { resetScroll: true }); $dispatch('show-login-form');" 5244 class="font-medium underline text-rwp-accent cursor-pointer" 5245 >Sign in</button> 5246 </p> 5247 </div> 5248 </div> 5249 </div> 5250 </div> 5251 5252 <div 5253 x-show="currentPanel === 'birthday-picker'" 5254 x-bind:class="'relative h-full flex flex-col ' + (currentPanel === 'birthday-picker' ? (navigationDirection === 'initial' ? 'rwp-panel-fade-up' : (navigationDirection === 'forward' ? 'rwp-panel-slide-forward' : (navigationDirection === 'back' ? 'rwp-panel-slide-back' : ''))) : '')" 5255 > 5256 <div class="flex-1 overflow-y-auto custom-scrollbar px-6 py-6 text-rwp-widget-text"> 5257 5258 <!-- Success State --> 5259 <div x-show="birthdaySuccess" x-transition class="text-center"> 5260 <div class="flex justify-center mb-3"> 5261 <svg class="size-10 text-green-600" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24"><desc>Check circle alternate</desc><path d="M6 13.223 8.45 16.7a1.049 1.049 0 0 0 1.707 0.051L18 6.828" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path><path d="M0.75 11.999a11.25 11.25 0 1 0 22.5 0 11.25 11.25 0 1 0 -22.5 0Z" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path></svg> </div> 5262 <h3 class="text-lg font-semibold text-rwp-widget-heading mb-1">Birthday set!</h3> 5263 <template x-if="birthdayRewardDate"> 5264 <p class="text-sm text-gray-500 mb-6">You'll earn <span x-text="birthdayPoints + ' ' + currencyPlural"></span> on <span x-text="birthdayRewardDate"></span></p> 5265 </template> 5266 <template x-if="!birthdayRewardDate"> 5267 <p class="text-sm text-gray-500 mb-6">You'll earn bonus points on your special day!</p> 5268 </template> 5269 <button 5270 type="button" 5271 x-on:click="resetBirthdayPicker(); navigateToPanel('ways-to-earn')" 5272 class="bg-rwp-brand text-rwp-widget-button-text text-sm font-semibold rounded-lg cursor-pointer transition-colors hover:bg-rwp-brand-hover disabled:hover:bg-rwp-brand disabled:opacity-50 disabled:cursor-not-allowed focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 w-full py-3 px-8 min-h-[48px] mx-auto flex items-center justify-center" 5273 > 5274 Keep earning </button> 5275 </div> 5276 5277 <!-- Form State --> 5278 <div x-show="!birthdaySuccess"> 5279 <div class="text-center mb-4"> 5280 <div class="flex justify-center mx-auto mb-3"> 5281 <svg class="size-10 text-rwp-widget-icon-text" viewbox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> 5282 <desc>Birthday cake icon</desc> 5283 <path d="M3.08108 11.7027H20.9189C20.9189 11.7027 22.7027 11.7027 22.7027 13.4865V21.2162C22.7027 21.2162 22.7027 23 20.9189 23H3.08108C3.08108 23 1.2973 23 1.2973 21.2162V13.4865C1.2973 13.4865 1.2973 11.7027 3.08108 11.7027Z" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path> 5284 <path d="M12 9.02703V11.7027" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path> 5285 <path d="M13.7838 3.67568C13.7838 4.14876 13.5959 4.60248 13.2613 4.937C12.9268 5.27153 12.4731 5.45946 12 5.45946C11.5269 5.45946 11.0732 5.27153 10.7387 4.937C10.4041 4.60248 10.2162 4.14876 10.2162 3.67568C10.2162 2.68865 12 1 12 1C12 1 13.7838 2.68865 13.7838 3.67568Z" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path> 5286 <path d="M19.1351 9.02703V11.7027" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path> 5287 <path d="M20.9189 3.67568C20.9189 4.14876 20.731 4.60248 20.3965 4.937C20.0619 5.27153 19.6082 5.45946 19.1351 5.45946C18.662 5.45946 18.2083 5.27153 17.8738 4.937C17.5393 4.60248 17.3514 4.14876 17.3514 3.67568C17.3514 2.68865 19.1351 1 19.1351 1C19.1351 1 20.9189 2.68865 20.9189 3.67568Z" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path> 5288 <path d="M4.86486 9.02703V11.7027" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path> 5289 <path d="M6.64865 3.67568C6.64865 4.14876 6.46071 4.60248 6.12619 4.937C5.79167 5.27153 5.33795 5.45946 4.86486 5.45946C4.39178 5.45946 3.93806 5.27153 3.60354 4.937C3.26901 4.60248 3.08108 4.14876 3.08108 3.67568C3.08108 2.68865 4.86486 1 4.86486 1C4.86486 1 6.64865 2.68865 6.64865 3.67568Z" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path> 5290 <path d="M1.2973 17.0184C1.57132 17.4845 1.96234 17.8709 2.43166 18.1394C2.90097 18.4079 3.43228 18.5492 3.97297 18.5492C4.51367 18.5492 5.04498 18.4079 5.51429 18.1394C5.9836 17.8709 6.37463 17.4845 6.64865 17.0184C6.92267 17.4845 7.3137 17.8709 7.78301 18.1394C8.25232 18.4079 8.78363 18.5492 9.32432 18.5492C9.86502 18.5492 10.3963 18.4079 10.8656 18.1394C11.335 17.8709 11.726 17.4845 12 17.0184C12.274 17.4845 12.665 17.8709 13.1344 18.1394C13.6037 18.4079 14.135 18.5492 14.6757 18.5492C15.2164 18.5492 15.7477 18.4079 16.217 18.1394C16.6863 17.8709 17.0773 17.4845 17.3514 17.0184C17.6254 17.4845 18.0164 17.8709 18.4857 18.1394C18.955 18.4079 19.4863 18.5492 20.027 18.5492C20.5677 18.5492 21.099 18.4079 21.5683 18.1394C22.0377 17.8709 22.4287 17.4845 22.7027 17.0184" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path> 5291 </svg> </div> 5292 <h3 class="text-lg font-semibold text-rwp-widget-heading mb-3 text-center" x-text="birthdayIsEditing ? 'Update your birthday' : 'When is your birthday?'"></h3> 5293 <p class="text-sm text-gray-500"> 5294 <template x-if="birthdayRewardPreview"> 5295 <span>You'll earn <span x-text="birthdayPoints + ' ' + currencyPlural"></span> on <span x-text="birthdayRewardPreview.rewardDate"></span></span> 5296 </template> 5297 <template x-if="!birthdayRewardPreview"> 5298 <span>You'll earn <span x-text="birthdayPoints + ' ' + currencyPlural"></span> on your special day!</span> 5299 </template> 5300 </p> 5301 </div> 5302 5303 <form x-on:submit.prevent="submitBirthday()"> 5304 <div class="grid gap-3 mb-4 grid-cols-[1fr_6rem]"> 5305 <div class="grid grid-cols-1"> 5306 <label for="rwp-birthday-month" class="sr-only">Month</label> 5307 <select 5308 id="rwp-birthday-month" 5309 x-model="birthdayMonth" 5310 x-on:change="if (!birthdayDay) { setTimeout(() => $refs.birthdayDaySelect?.focus(), 300) }" 5311 class="col-start-1 row-start-1 w-full appearance-none bg-white text-base px-3 py-3 pr-8 rounded-lg outline-1 -outline-offset-1 outline-gray-200 focus:outline-2 focus:-outline-offset-2 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500" 5312 required 5313 > 5314 <option value="">Month</option> 5315 <option value="1">January</option> 5316 <option value="2">February</option> 5317 <option value="3">March</option> 5318 <option value="4">April</option> 5319 <option value="5">May</option> 5320 <option value="6">June</option> 5321 <option value="7">July</option> 5322 <option value="8">August</option> 5323 <option value="9">September</option> 5324 <option value="10">October</option> 5325 <option value="11">November</option> 5326 <option value="12">December</option> 5327 </select> 5328 <svg class="pointer-events-none col-start-1 row-start-1 mr-3 size-4 self-center justify-self-end text-gray-500" viewB
5328ox="0 0 16 16" fill="currentColor" aria-hidden="true"><path fill-rule="evenodd" d="M4.22 6.22a.75.75 0 0 1 1.06 0L8 8.94l2.72-2.72a.75.75 0 1 1 1.06 1.06l-3.25 3.25a.75.75 0 0 1-1.06 0L4.22 7.28a.75.75 0 0 1 0-1.06Z" clip-rule="evenodd" /></svg> </div> 5329 <div class="grid grid-cols-1"> 5330 <label for="rwp-birthday-day" class="sr-only">Day</label> 5331 <select 5332 id="rwp-birthday-day" 5333 x-model="birthdayDay" 5334 x-ref="birthdayDaySelect" 5335 class="col-start-1 row-start-1 w-full appearance-none bg-white text-base px-3 py-3 pr-8 rounded-lg outline-1 -outline-offset-1 outline-gray-200 focus:outline-2 focus:-outline-offset-2 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500" 5336 required 5337 > 5338 <option value="">Day</option> 5339 <template x-for="d in birthdayDaysInMonth" :key="d"> 5340 <option :value="d" :selected="String(d) === birthdayDay" x-text="d"></option> 5341 </template> 5342 </select> 5343 <svg class="pointer-events-none col-start-1 row-start-1 mr-3 size-4 self-center justify-self-end text-gray-500" viewBox="0 0 16 16" fill="currentColor" aria-hidden="true"><path fill-rule="evenodd" d="M4.22 6.22a.75.75 0 0 1 1.06 0L8 8.94l2.72-2.72a.75.75 0 1 1 1.06 1.06l-3.25 3.25a.75.75 0 0 1-1.06 0L4.22 7.28a.75.75 0 0 1 0-1.06Z" clip-rule="evenodd" /></svg> </div> 5344 </div> 5345 5346 5347 <!-- Error Message (server validation errors only) --> 5348 <div x-show="birthdayError" x-transition class="mb-4 p-3 bg-red-50 border border-red-200 rounded-lg"> 5349 <p class="text-sm text-red-700" x-text="birthdayError"></p> 5350 </div> 5351 5352 <button 5353 type="submit" 5354 x-show="!birthdayIsEditing || birthdayChanged" 5355 x-bind:class="birthdaySubmitting ? 'pointer-events-none' : ''" 5356 class="bg-rwp-brand text-rwp-widget-button-text text-sm font-semibold rounded-lg cursor-pointer transition-colors hover:bg-rwp-brand-hover disabled:hover:bg-rwp-brand disabled:opacity-50 disabled:cursor-not-allowed focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 w-full py-3 px-8 min-h-[48px] mx-auto grid grid-cols-1 grid-rows-1 [grid-template-areas:'stack'] place-items-center" 5357 > 5358 <span 5359 class="[grid-area:stack] transition-opacity duration-200" 5360 x-bind:class="{ 'invisible': birthdaySubmitting, 'visible': !birthdaySubmitting }" 5361 x-text="birthdayIsEditing ? 'Update birthday' : 'Set my birthday'" 5362 ></span> 5363 <svg class="w-5 h-5 animate-spin [grid-area:stack] transition-opacity duration-200" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" x-bind:class="{ 'invisible': birthdaySubmitting !== true, 'visible': birthdaySubmitting === true }"><desc>Loading spinner icon</desc><circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle><path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path></svg> </button> 5364 </form> 5365 </div> 5366 5367 </div> 5368 </div> 5369 5370 <div 5371 x-show="currentPanel === 'ways-to-redeem'" 5372 x-bind:class="'ways-to-redeem-panel relative h-full flex flex-col overflow-hidden ' + (currentPanel === 'ways-to-redeem' ? (navigationDirection === 'initial' ? 'rwp-panel-fade-up' : (navigationDirection === 'forward' ? 'rwp-panel-slide-forward' : (navigationDirection === 'back' ? 'rwp-panel-slide-back' : ''))) : '')" 5373 x-data="{ panelAtTop: true, panelAtBottom: false }" 5374 x-effect="if (currentPanel === 'ways-to-redeem') { const el = $el.querySelector('.overflow-y-auto'); if (el && el.scrollHeight > 0) { panelAtBottom = el.scrollTop + el.clientHeight >= el.scrollHeight - 5; } }" 5375 > 5376 <div class="flex-1 overflow-y-auto custom-scrollbar px-6 py-6 pb-32 text-rwp-widget-text" 5377 @scroll="panelAtTop = $el.scrollTop < 5; panelAtBottom = $el.scrollTop + $el.clientHeight >= $el.scrollHeight - 5" 5378 > 5379 5380 <h2 class="text-lg font-semibold text-rwp-widget-heading mb-3">Ways to redeem</h2> 5381 5382 <div class="divide-y divide-gray-50" x-data="redeemManager"> 5383 <div class="grid grid-cols-[auto_1fr_auto] items-center gap-4 py-4" data-action-id="spend_1"> 5384 <div class="size-8 flex items-center justify-center flex-shrink-0 text-rwp-widget-icon-text"> 5385 <svg class="size-8" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> 5386 <desc> 5387 Fixed amount discount icon 5388 </desc> 5389 <path d="M19.575 8.25a3.755 3.755 0 0 1 3.049 -2.95 0.749 0.749 0 0 0 0.626 -0.738V2.25a1.5 1.5 0 0 0 -1.5 -1.5H2.25a1.5 1.5 0 0 0 -1.5 1.5v2.314a0.747 0.747 0 0 0 0.626 0.738 3.751 3.751 0 0 1 0 7.4 0.75 0.75 0 0 0 -0.626 0.739v2.309a1.5 1.5 0 0 0 1.5 1.5h6" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 5390 <path d="m8.25 14.25 0 -1.5" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 5391 <path d="m8.25 9.75 0 -1.5" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 5392 <path d="m8.25 5.25 0 -1.5" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 5393 <path d="M18.75 14.25h-2.033a1.342 1.342 0 0 0 -0.5 2.588l2.064 0.825a1.342 1.342 0 0 1 -0.5 2.587H15.75" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 5394 <path d="m17.25 14.25 0 -0.75" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 5395 <path d="m17.25 21 0 -0.75" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 5396 <path d="M11.25 17.25a6 6 0 1 0 12 0 6 6 0 1 0 -12 0Z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 5397 </svg> </div> 5398 <div class="min-w-0"> 5399 <div class="text-sm font-medium text-gray-900">$5 off coupon</div> 5400 <div class="text-xs text-gray-500 mt-1">500 Points</div> 5401 5402 <!-- Success Message --> 5403 <div x-show="redeemStates['fixed_discount_spend_1']?.success" x-transition class="text-sm text-green-600 mt-1"> 5404 <div class="flex items-center gap-2"> 5405 <svg class="size-4" fill="none" stroke="currentColor" viewBox="0 0 24 24"> 5406 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"></path> 5407 </svg> 5408 Coupon generated and applied to cart! </div> 5409 </div> 5410 5411 <!-- Error Message --> 5412 <div x-show="redeemStates['fixed_discount_spend_1']?.error" x-transition class="text-sm text-red-600 mt-1"> 5413 <div class="flex items-center gap-2"> 5414 5415 <span x-text="redeemStates['fixed_discount_spend_1']?.errorMessage"></span> 5416 </div> 5417 </div> 5418 </div> 5419 5420 <div class="justify-self-end" x-show="memberId" x-cloak > 5421 <button 5422 x-on:click="if (!isAdminPreview) { redeemSuccessData.redeemedLabel = '$5 off coupon'; redeemPointsForCoupon('fixed_discount', 'spend_1', 'fixed_discount_spend_1'); }" 5423 x-bind:disabled="redeemStates['fixed_discount_spend_1']?.redeeming || (userData?.points ?? 0) < 500" 5424 x-bind:data-preview-disabled="isAdminPreview ? 'true' : null" 5425 x-bind:data-tippy-content="isAdminPreview ? 'Disabled for admin preview' : null" 5426 x-bind:class="{ '!cursor-not-allowed': isAdminPreview }" 5427 class="bg-rwp-brand text-rwp-widget-button-text text-sm font-semibold rounded-lg cursor-pointer transition-colors hover:bg-rwp-brand-hover disabled:hover:bg-rwp-brand disabled:opacity-50 disabled:cursor-not-allowed focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 py-2 px-4 grid grid-cols-1 grid-rows-1 [grid-template-areas:'stack'] place-items-center min-h-[36px] min-w-[5rem]" 5428 > 5429 <span 5430 class="[grid-area:stack] transition-opacity duration-200" 5431 x-bind:class="{ 'invisible': redeemStates['fixed_discount_spend_1']?.redeeming, 'visible': !redeemStates['fixed_discount_spend_1']?.redeeming }" 5432 >Redeem</span> 5433 <svg class="size-4 animate-spin [grid-area:stack] transition-opacity duration-200" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" x-bind:class="{ &ap
5433os;invisible': redeemStates['fixed_discount_spend_1']?.redeeming !== true, 'visible': redeemStates['fixed_discount_spend_1']?.redeeming === true }"><desc>Loading spinner icon</desc><circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle><path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path></svg> </button> 5434 </div> 5435 5436 </div> 5437 <div class="grid grid-cols-[auto_1fr_auto] items-center gap-4 py-4" data-action-id="spend_2"> 5438 <div class="size-8 flex items-center justify-center flex-shrink-0 text-rwp-widget-icon-text"> 5439 <svg class="size-8" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> 5440 <desc> 5441 Fixed amount discount icon 5442 </desc> 5443 <path d="M19.575 8.25a3.755 3.755 0 0 1 3.049 -2.95 0.749 0.749 0 0 0 0.626 -0.738V2.25a1.5 1.5 0 0 0 -1.5 -1.5H2.25a1.5 1.5 0 0 0 -1.5 1.5v2.314a0.747 0.747 0 0 0 0.626 0.738 3.751 3.751 0 0 1 0 7.4 0.75 0.75 0 0 0 -0.626 0.739v2.309a1.5 1.5 0 0 0 1.5 1.5h6" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 5444 <path d="m8.25 14.25 0 -1.5" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 5445 <path d="m8.25 9.75 0 -1.5" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 5446 <path d="m8.25 5.25 0 -1.5" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 5447 <path d="M18.75 14.25h-2.033a1.342 1.342 0 0 0 -0.5 2.588l2.064 0.825a1.342 1.342 0 0 1 -0.5 2.587H15.75" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 5448 <path d="m17.25 14.25 0 -0.75" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 5449 <path d="m17.25 21 0 -0.75" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 5450 <path d="M11.25 17.25a6 6 0 1 0 12 0 6 6 0 1 0 -12 0Z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 5451 </svg> </div> 5452 <div class="min-w-0"> 5453 <div class="text-sm font-medium text-gray-900">$10 off coupon</div> 5454 <div class="text-xs text-gray-500 mt-1">1,000 Points</div> 5455 5456 <!-- Success Message --> 5457 <div x-show="redeemStates['fixed_discount_spend_2']?.success" x-transition class="text-sm text-green-600 mt-1"> 5458 <div class="flex items-center gap-2"> 5459 <svg class="size-4" fill="none" stroke="currentColor" viewBox="0 0 24 24"> 5460 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"></path> 5461 </svg> 5462 Coupon generated and applied to cart! </div> 5463 </div> 5464 5465 <!-- Error Message --> 5466 <div x-show="redeemStates['fixed_discount_spend_2']?.error" x-transition class="text-sm text-red-600 mt-1"> 5467 <div class="flex items-center gap-2"> 5468 5469 <span x-text="redeemStates['fixed_discount_spend_2']?.errorMessage"></span> 5470 </div> 5471 </div> 5472 </div> 5473 5474 <div class="justify-self-end" x-show="memberId" x-cloak > 5475 <button 5476 x-on:click="if (!isAdminPreview) { redeemSuccessData.redeemedLabel = '$10 off coupon'; redeemPointsForCoupon('fixed_discount', 'spend_2', 'fixed_discount_spend_2'); }" 5477 x-bind:disabled="redeemStates['fixed_discount_spend_2']?.redeeming || (userData?.points ?? 0) < 1000" 5478 x-bind:data-preview-disabled="isAdminPreview ? 'true' : null" 5479 x-bind:data-tippy-content="isAdminPreview ? 'Disabled for admin preview' : null" 5480 x-bind:class="{ '!cursor-not-allowed': isAdminPreview }" 5481 class="bg-rwp-brand text-rwp-widget-button-text text-sm font-semibold rounded-lg cursor-pointer transition-colors hover:bg-rwp-brand-hover disabled:hover:bg-rwp-brand disabled:opacity-50 disabled:cursor-not-allowed focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 py-2 px-4 grid grid-cols-1 grid-rows-1 [grid-template-areas:'stack'] place-items-center min-h-[36px] min-w-[5rem]" 5482 > 5483 <span 5484 class="[grid-area:stack] transition-opacity duration-200" 5485 x-bind:class="{ 'invisible': redeemStates['fixed_discount_spend_2']?.redeeming, 'visible': !redeemStates['fixed_discount_spend_2']?.redeeming }" 5486 >Redeem</span> 5487 <svg class="size-4 animate-spin [grid-area:stack] transition-opacity duration-200" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" x-bind:class="{ &ap
5487os;invisible': redeemStates['fixed_discount_spend_2']?.redeeming !== true, 'visible': redeemStates['fixed_discount_spend_2']?.redeeming === true }"><desc>Loading spinner icon</desc><circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle><path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path></svg> </button> 5488 </div> 5489 5490 </div> 5491 <div class="grid grid-cols-[auto_1fr_auto] items-center gap-4 py-4" data-action-id="spend_3"> 5492 <div class="size-8 flex items-center justify-center flex-shrink-0 text-rwp-widget-icon-text"> 5493 <svg class="size-8" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> 5494 <desc> 5495 Fixed amount discount icon 5496 </desc> 5497 <path d="M19.575 8.25a3.755 3.755 0 0 1 3.049 -2.95 0.749 0.749 0 0 0 0.626 -0.738V2.25a1.5 1.5 0 0 0 -1.5 -1.5H2.25a1.5 1.5 0 0 0 -1.5 1.5v2.314a0.747 0.747 0 0 0 0.626 0.738 3.751 3.751 0 0 1 0 7.4 0.75 0.75 0 0 0 -0.626 0.739v2.309a1.5 1.5 0 0 0 1.5 1.5h6" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 5498 <path d="m8.25 14.25 0 -1.5" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 5499 <path d="m8.25 9.75 0 -1.5" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 5500 <path d="m8.25 5.25 0 -1.5" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 5501 <path d="M18.75 14.25h-2.033a1.342 1.342 0 0 0 -0.5 2.588l2.064 0.825a1.342 1.342 0 0 1 -0.5 2.587H15.75" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 5502 <path d="m17.25 14.25 0 -0.75" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 5503 <path d="m17.25 21 0 -0.75" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 5504 <path d="M11.25 17.25a6 6 0 1 0 12 0 6 6 0 1 0 -12 0Z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 5505 </svg> </div> 5506 <div class="min-w-0"> 5507 <div class="text-sm font-medium text-gray-900">$20 off coupon</div> 5508 <div class="text-xs text-gray-500 mt-1">2,000 Points</div> 5509 5510 <!-- Success Message --> 5511 <div x-show="redeemStates['fixed_discount_spend_3']?.success" x-transition class="text-sm text-green-600 mt-1"> 5512 <div class="flex items-center gap-2"> 5513 <svg class="size-4" fill="none" stroke="currentColor" viewBox="0 0 24 24"> 5514 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"></path> 5515 </svg> 5516 Coupon generated and applied to cart! </div> 5517 </div> 5518 5519 <!-- Error Message --> 5520 <div x-show="redeemStates['fixed_discount_spend_3']?.error" x-transition class="text-sm text-red-600 mt-1"> 5521 <div class="flex items-center gap-2"> 5522 5523 <span x-text="redeemStates['fixed_discount_spend_3']?.errorMessage"></span> 5524 </div> 5525 </div> 5526 </div> 5527 5528 <div class="justify-self-end" x-show="memberId" x-cloak > 5529 <button 5530 x-on:click="if (!isAdminPreview) { redeemSuccessData.redeemedLabel = '$20 off coupon'; redeemPointsForCoupon('fixed_discount', 'spend_3', 'fixed_discount_spend_3'); }" 5531 x-bind:disabled="redeemStates['fixed_discount_spend_3']?.redeeming || (userData?.points ?? 0) < 2000" 5532 x-bind:data-preview-disabled="isAdminPreview ? 'true' : null" 5533 x-bind:data-tippy-content="isAdminPreview ? 'Disabled for admin preview' : null" 5534 x-bind:class="{ '!cursor-not-allowed': isAdminPreview }" 5535 class="bg-rwp-brand text-rwp-widget-button-text text-sm font-semibold rounded-lg cursor-pointer transition-colors hover:bg-rwp-brand-hover disabled:hover:bg-rwp-brand disabled:opacity-50 disabled:cursor-not-allowed focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 py-2 px-4 grid grid-cols-1 grid-rows-1 [grid-template-areas:'stack'] place-items-center min-h-[36px] min-w-[5rem]" 5536 > 5537 <span 5538 class="[grid-area:stack] transition-opacity duration-200" 5539 x-bind:class="{ 'invisible': redeemStates['fixed_discount_spend_3']?.redeeming, 'visible': !redeemStates['fixed_discount_spend_3']?.redeeming }" 5540 >Redeem</span> 5541 <svg class="size-4 animate-spin [grid-area:stack] transition-opacity duration-200" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" x-bind:class="{ &ap
5541os;invisible': redeemStates['fixed_discount_spend_3']?.redeeming !== true, 'visible': redeemStates['fixed_discount_spend_3']?.redeeming === true }"><desc>Loading spinner icon</desc><circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle><path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path></svg> </button> 5542 </div> 5543 5544 </div> 5545 <div class="grid grid-cols-[auto_1fr_auto] items-center gap-4 py-4" data-action-id="percentage_discount_1773471154354_l6qm499m0"> 5546 <div class="size-8 flex items-center justify-center flex-shrink-0 text-rwp-widget-icon-text"> 5547 <svg class="size-8" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24"> 5548 <desc> 5549 Percentage discount icon 5550 </desc> 5551 <g> 5552 <path d="M23.25 15v3.5a1.5 1.5 0 0 1 -1.5 1.5H2.25a1.5 1.5 0 0 1 -1.5 -1.5V15a3 3 0 0 0 0 -6V5.5A1.5 1.5 0 0 1 2.25 4h19.5a1.5 1.5 0 0 1 1.5 1.5V9a3 3 0 0 0 0 6Z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 5553 <path d="M7.25 9a1.5 1.5 0 1 0 3 0 1.5 1.5 0 1 0 -3 0" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 5554 <path d="M14.5 15a1.5 1.5 0 1 0 3 0 1.5 1.5 0 1 0 -3 0" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 5555 <path d="m15.75 8.25 -7.5 7.5" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 5556 </g> 5557 </svg> </div> 5558 <div class="min-w-0"> 5559 <div class="text-sm font-medium text-gray-900">10% off coupon</div> 5560 <div class="text-xs text-gray-500 mt-1">10,000 Points</div> 5561 5562 <!-- Success Message --> 5563 <div x-show="redeemStates['percentage_discount_percentage_discount_1773471154354_l6qm499m0']?.success" x-transition class="text-sm text-green-600 mt-1"> 5564 <div class="flex items-center gap-2"> 5565 <svg class="size-4" fill="none" stroke="currentColor" viewBox="0 0 24 24"> 5566 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"></path> 5567 </svg> 5568 Coupon generated and applied to cart! </div> 5569 </div> 5570 5571 <!-- Error Message --> 5572 <div x-show="redeemStates['percentage_discount_percentage_discount_1773471154354_l6qm499m0']?.error" x-transition class="text-sm text-red-600 mt-1"> 5573 <div class="flex items-center gap-2"> 5574 5575 <span x-text="redeemStates['percentage_discount_percentage_discount_1773471154354_l6qm499m0']?.errorMessage"></span> 5576 </div> 5577 </div> 5578 </div> 5579 5580 <div class="justify-self-end" x-show="memberId" x-cloak > 5581 <button 5582 x-on:click="if (!isAdminPreview) { redeemSuccessData.redeemedLabel = '10% off coupon'; redeemPointsForCoupon('percentage_discount', 'percentage_discount_1773471154354_l6qm499m0', 'percentage_discount_percentage_discount_1773471154354_l6qm499m0'); }" 5583 x-bind:disabled="redeemStates['percentage_discount_percentage_discount_1773471154354_l6qm499m0']?.redeeming || (userData?.points ?? 0) < 10000" 5584 x-bind:data-preview-disabled="isAdminPreview ? 'true' : null" 5585 x-bind:data-tippy-content="isAdminPreview ? 'Disabled for admin preview' : null" 5586 x-bind:class="{ '!cursor-not-allowed': isAdminPreview }" 5587 class="bg-rwp-brand text-rwp-widget-button-text text-sm font-semibold rounded-lg cursor-pointer transition-colors hover:bg-rwp-brand-hover disabled:hover:bg-rwp-brand disabled:opacity-50 disabled:cursor-not-allowed focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 py-2 px-4 grid grid-cols-1 grid-rows-1 [grid-template-areas:'stack'] place-items-center min-h-[36px] min-w-[5rem]" 5588 > 5589 <span 5590 class="[grid-area:stack] transition-opacity duration-200" 5591 x-bind:class="{ 'invisible': redeemStates['percentage_discount_percentage_discount_1773471154354_l6qm499m0']?.redeeming, 'visible': !redeemStates['percentage_discount_percentage_discount_1773471154354_l6qm499m0']?.redeeming }" 5592 >Redeem</span> 5593 <svg class="size-4 animate-spin [grid-area:stack] transition-opacity duration-200" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" x-bind:class="{ &ap
5593os;invisible': redeemStates['percentage_discount_percentage_discount_1773471154354_l6qm499m0']?.redeeming !== true, 'visible': redeemStates['percentage_discount_percentage_discount_1773471154354_l6qm499m0']?.redeeming === true }"><desc>Loading spinner icon</desc><circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle><path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path></svg> </button> 5594 </div> 5595 5596 </div> 5597 <div class="grid grid-cols-[auto_1fr_auto] items-center gap-4 py-4" data-action-id="free_product_1774022853187_2dkxwkikl"> 5598 <div class="size-8 flex items-center justify-center flex-shrink-0 text-rwp-widget-icon-text"> 5599 <svg xmlns="http://www.w3.org/2000/svg" class="size-8" viewbox="0 0 24 24"><desc>Free product icon</desc><g><g><path d="M15.75 23.24a3 3 0 0 0 -3 -3H9a3 3 0 0 0 -3 -3H0.75v6Z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path><path d="m6 20.24 3 0" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path></g><path d="M16.5 17.74H21a0.76 0.76 0 0 0 0.75 -0.75v-6.75" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path><path d="m8.25 10.24 0 4" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path><path d="M7.5 5.99h15s0.75 0 0.75 0.75v2.75s0 0.75 -0.75 0.75h-15s-0.75 0 -0.75 -0.75V6.74s0 -0.75 0.75 -0.75" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path><path d="m15 15.24 0 -9.25" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path><path d="M19.27 3.87A11.84 11.84 0 0 1 15 6a11.93 11.93 0 0 1 2.12 -4.24C18.46 0.43 19.21 0.63 19.8 1.22s0.78 1.33 -0.53 2.65Z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path><path d="M10.73 3.87A11.84 11.84 0 0 0 15 6a11.93 11.93 0 0 0 -2.12 -4.24C11.54 0.43 10.79 0.63 10.2 1.22s-0.78 1.33 0.53 2.65Z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path></g></svg> </div> 5600 <div class="min-w-0"> 5601 <div class="text-sm font-medium text-gray-900">Free Add photos to your MLS listing – Add up to 25 photos to MLS</div> 5602 <div class="text-xs text-gray-500 mt-1">1,000 Points</div> 5603 5604 <!-- Success Message --> 5605 <div x-show="redeemStates['free_product_free_product_1774022853187_2dkxwkikl']?.success" x-transition class="text-sm text-green-600 mt-1"> 5606 <div class="flex items-center gap-2"> 5607 <svg class="size-4" fill="none" stroke="currentColor" viewBox="0 0 24 24"> 5608 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"></path> 5609 </svg> 5610 Coupon generated and applied to cart! </div> 5611 </div> 5612 5613 <!-- Error Message --> 5614 <div x-show="redeemStates['free_product_free_product_1774022853187_2dkxwkikl']?.error" x-transition class="text-sm text-red-600 mt-1"> 5615 <div class="flex items-center gap-2"> 5616 5617 <span x-text="redeemStates['free_product_free_product_1774022853187_2dkxwkikl']?.errorMessage"></span> 5618 </div> 5619 </div> 5620 </div> 5621 5622 <div class="justify-self-end" x-show="memberId" x-cloak > 5623 <button 5624 x-on:click="if (!isAdminPreview) { redeemSuccessData.redeemedLabel = 'Free Add photos to your MLS listing – Add up to 25 photos to MLS'; redeemPointsForCoupon('free_product', 'free_product_1774022853187_2dkxwkikl', 'free_product_free_product_1774022853187_2dkxwkikl'); }" 5625 x-bind:disabled="redeemStates['free_product_free_product_1774022853187_2dkxwkikl']?.redeeming || (userData?.points ?? 0) < 1000" 5626 x-bind:data-preview-disabled="isAdminPreview ? 'true' : null" 5627 x-bind:data-tippy-content="isAdminPreview ? 'Disabled for admin preview' : null" 5628 x-bind:class="{ '!cursor-not-allowed': isAdminPreview }" 5629 class="bg-rwp-brand text-rwp-widget-button-text text-sm font-semibold rounded-lg cursor-pointer transition-colors hover:bg-rwp-brand-hover disabled:hover:bg-rwp-brand disabled:opacity-50 disabled:cursor-not-allowed focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 py-2 px-4 grid grid-cols-1 grid-rows-1 [grid-template-areas:'stack'] place-items-center min-h-[36px] min-w-[5rem]" 5630 > 5631 <span 5632 class="[grid-area:stack] transition-opacity duration-200" 5633 x-bind:class="{ 'invisible': redeemStates['free_product_free_product_1774022853187_2dkxwkikl']?.redeeming, 'visible': !redeemStates['free_product_free_product_1774022853187_2dkxwkikl']?.redeeming }" 5634 >Redeem</span> 5635 <svg class="size-4 animate-spin [grid-area:stack] transition-opacity duration-200" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" x-bind:class="{ &ap
5635os;invisible': redeemStates['free_product_free_product_1774022853187_2dkxwkikl']?.redeeming !== true, 'visible': redeemStates['free_product_free_product_1774022853187_2dkxwkikl']?.redeeming === true }"><desc>Loading spinner icon</desc><circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle><path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path></svg> </button> 5636 </div> 5637 5638 </div> 5639 </div> 5640 </div> 5641 5642 <!-- Top scroll fade --> 5643 <div x-show="!panelAtTop" 5644 class="pointer-events-none absolute top-0 left-0 h-8 z-10" 5645 style="right: var(--rwp-scrollbar-width, 8px); background: linear-gradient(to bottom, var(--color-rwp-widget-bg), transparent);"></div> 5646 <!-- Bottom scroll fade — hidden when guest join section is visible --> 5647 <div x-show="!panelAtBottom && memberId !== 0" 5648 class="pointer-events-none absolute bottom-0 left-0 h-12 z-10" 5649 style="right: var(--rwp-scrollbar-width, 8px); background: linear-gradient(to top, var(--color-rwp-widget-bg), transparent);"></div> 5650 5651 <div x-show="memberId === 0"> 5652 <!-- Fade Overlay --> 5653 <div 5654 class="absolute bottom-0 left-0 right-0 h-24 pointer-events-none" 5655 style="background: linear-gradient(to top, var(--color-rwp-widget-bg), var(--color-rwp-widget-bg) 20%, transparent);" 5656 x-data="{ hideJoinSection: false }" 5657 x-on:member-joined.window="hideJoinSection = true" 5658 x-show="!hideJoinSection" 5659 ></div> 5660 5661 <!-- Sticky Join Section --> 5662 <div 5663 class="absolute bottom-0 left-0 right-0 bg-white px-6 py-4 border-t border-gray-100" 5664 x-data="{ hideJoinSection: false, isLoggedIn: false }" 5665 x-on:member-joined.window="hideJoinSection = true" 5666 x-show="!hideJoinSection" 5667 > 5668 <div> 5669 <button 5670 type="button" 5671 x-on:click="isLoggedIn ? window.dispatchEvent(new CustomEvent('create-member-direct')) : window.dispatchEvent(new CustomEvent('show-register-form'))" 5672 class="bg-rwp-brand text-rwp-widget-button-text text-sm font-semibold rounded-lg cursor-pointer transition-colors hover:bg-rwp-brand-hover disabled:hover:bg-rwp-brand disabled:opacity-50 disabled:cursor-not-allowed focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 w-full py-3 px-8 min-h-[48px] mx-auto flex items-center justify-center" 5673 > 5674 Join now </button> 5675 </div> 5676 <div x-show="!isLoggedIn" x-cloak class="mt-3 text-center text-rwp-widget-text"> 5677 <p class="text-sm text-gray-600"> 5678 Already have an account? <button 5679 x-on:click="navigateToPanel('main', { resetScroll: true }); $dispatch('show-login-form');" 5680 class="font-medium underline text-rwp-accent cursor-pointer" 5681 >Sign in</button> 5682 </p> 5683 </div> 5684 </div> 5685 </div> 5686 </div> 5687 5688 5689 5690 <div 5691 x-show="currentPanel === 'activity'" 5692 x-init="$watch('currentPanel', value => { 5693 if (value === 'activity') { 5694 if (activityItems.length === 0 || needsActivityRefresh) { 5695 if (needsActivityRefresh && activityTab === 'points') { 5696 activityItems = []; 5697 activityPage = 1; 5698 activityHasMore = false; 5699 activityCache = {}; 5700 } 5701 loadActivity(); 5702 needsActivityRefresh = false; 5703 } 5704 } 5705 })" 5706 x-bind:class="'relative h-full flex flex-col ' + (currentPanel === 'activity' ? (navigationDirection === 'initial' ? 'rwp-panel-fade-up' : (navigationDirection === 'forward' ? 'rwp-panel-slide-forward' : (navigationDirection === 'back' ? 'rwp-panel-slide-back' : ''))) : '')" 5707 > 5708 <div class="shrink-0 px-6 pt-6 text-rwp-widget-text"> 5709 <h2 class="text-lg font-semibold text-rwp-widget-heading mb-3">Activity</h2> 5710 <!-- Segmented Control (hidden when only one tab is available) --> 5711 <div class="relative w-full mb-3" x-show="(pointsEnabled || (!!memberId && userData.points > 0)) && referralsEnabled"> 5712 <div class="relative inline-grid items-center justify-center w-full h-10 grid-cols-2 p-1 text-gray-500 bg-gray-100 rounded-xl select-none" role="tablist"> 5713 <button 5714 x-ref="activityPointsBtn" 5715 x-show="pointsEnabled || (!!memberId && userData.points > 0)" 5716 x-on:click="switchActivityTab('points')" 5717 type="button" 5718 class="relative z-20 inline-flex items-center justify-center w-full h-8 px-3 text-sm font-medium transition-all rounded-md cursor-pointer whitespace-nowrap focu
5718s-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500" 5719 x-bind:class="activityTab === 'points' ? 'text-gray-900' : 'text-gray-500'" 5720 role="tab" 5721 x-bind:aria-selected="activityTab === 'points'" 5722 > 5723 Points </button> 5724 <button 5725 x-ref="activityReferralsBtn" 5726 x-show="referralsEnabled" 5727 x-on:click="switchActivityTab('referrals')" 5728 type="button" 5729 class="relative z-20 inline-flex items-center justify-center w-full h-8 px-3 text-sm font-medium transition-all rounded-md cursor-pointer whitespace-nowrap focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500" 5730 x-bind:class="activityTab === 'referrals' ? 'text-gray-900' : 'text-gray-500'" 5731 role="tab" 5732 x-bind:aria-selected="activityTab === 'referrals'" 5733 > 5734 Referrals </button> 5735 <div class="absolute z-10 bg-white rounded-lg shadow-sm left-1 top-1 transition-transform duration-350 ease-[cubic-bezier(0.22,1.3,0.36,1)]" x-bind:style="'width: calc(50% - 4px); height: 32px; transform: translateX(' + ({'points': 0, 'referrals': 100}[activityTab] ?? 0) + '%)'"></div> 5736 </div> 5737 </div> 5738 </div> 5739 <div class="relative flex-1 min-h-0"> 5740 <div x-ref="activityScroll" x-on:scroll.passive="syncActivityFade()" class="h-full overflow-y-auto custom-scrollbar px-6 pt-1 pb-6 text-rwp-widget-text"> 5741 5742 <!-- Loading State --> 5743 <div x-show="activityLoading" class="flex items-center justify-center py-8"> 5744 <div class="animate-spin size-6 border-2 border-gray-200 border-t-gray-600 rounded-full"></div> 5745 </div> 5746 5747 <!-- Activity List --> 5748 <div x-show="!activityLoading"> 5749 <!-- Empty State - Points Tab --> 5750 <template x-if="activityItems.length === 0 && !activityLoading && activityTab === 'points'"> 5751 <div class="text-center py-8"> 5752 <div class="flex justify-center mb-3"> 5753 <svg class="size-10 text-gray-400" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24"> 5754 <desc> 5755 Points activity icon 5756 </desc> 5757 <path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M12 2V1" stroke-width="1.5"></path> 5758 <path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="m12 23 0 -2.7661" stroke-width="1.5"></path> 5759 <path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M1 12h2.71875" stroke-width="1.5"></path> 5760 <path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M20.2812 12H23" stroke-width="1.5"></path> 5761 <path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="m6.0625 19.2258 -2.01636 2.0164" stroke-width="1.5"></path> 5762 <path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="m17.9375 5.03979 2.0164 -2.01635" stroke-width="1.5"></path> 5763 <path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M6.0625 5.03979 4.04614 3.02344" stroke-width="1.5"></path> 5764 <path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="m17.9375 18.9602 2.0164 2.0164" stroke-width="1.5"></path> 5765 <path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="m12.4169 4.69626 1.9151 3.82921 3.6838 0.36877c0.0879 0.00861 0.1715 0.04201 0.2412 0.09631 0.0696 0.0543 0.1224 0.12727 0.1522 0.21041 0.0297 0.08314 0.0352 0.17302 0.0159 0.25918 -0.0193 0.08616 -0.0628 0.16505 -0.1252 0.22748L15.264 12.7225l1.1256 4.1238c0.0235 0.0869 0.0214 0.1787 -0.006 0.2644 -0.0275 0.0857 -0.0791 0.1616 -0.1486 0.2187 -0.0696 0.057 -0.1542 0.0928 -0.2436 0.1029 -0.0894 0.0101 -0.1798 -0.0058 -0.2604 -0.0458L12 15.5205l-3.73099 1.8679c-0.08052 0.0402 -0.17096 0.0562 -0.2604 0.0462 -0.08943 -0.0101 -0.17403 -0.0459 -0.24358 -0.103 -0.06955 -0.0571 -0.12107 -0.1332 -0.14833 -0.2189 -0.02727 -0.0858 -0.02911 -0.1776 -0.00531 -0.2644l1.1246 -4.1258 -3.03584 -3.03681c-0.06245 -0.06243 -0.10588 -0.14132 -0.12523 -0.22748 -0.01935 -0.08615 -0.01382 -0.17604 0.01595 -0.25918 0.02976 -0.08313 0.08254 -0.1561 0.15217 -0.21041 0.06964 -0.0543 0.15327 -0.0877 0.24115 -0.09631l3.68382 -0.36876 1.91509 -3.82922c0.0389 -0.07736 0.0985 -0.14238 0.1723 -0.18774 0.0737 -0.04536 0.1586 -0.06929 0.2452 -0.06909 0.0866 0.0002 0.1714 0.02452 0.2449 0.07022 0.0736 0.04571 0.1329 0.11099 0.1714 0.18854Z" stroke-width="1.5"></path> 5766 </svg> </div> 5767 <h3 class="text-lg font-medium text-gray-900 mb-1" x-text="'No ' + currencyPlural + ' yet'"></h3> 5768 <p class="text-sm text-gray-500 mb-4" x-text="'See all the ways you can earn ' + currencyPlural"></p> 5769 <button 5770 x-on:click="navigateToPanel('ways-to-earn')" 5771 class="inline-flex items-center px-4 py-2 border border-transparent text-sm font-medium rounded-md text-white bg-rwp-brand hover:bg-rwp-brand-hover cursor-pointer transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-rwp-brand focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500" 5772 > 5773 <span x-text="'Earn ' + currencyPlural"></span> 5774 </button> 5775 </div> 5776 </template> 5777 5778 <!-- Empty State - Referrals Tab --> 5779 <template x-if="activityItems.length === 0 && !activityLoading && activityTab === 'referrals'"> 5780 <div class="text-center py-8"> 5781 <div class="flex justify-center mb-3"> 5782 <svg class="size-10 text-gray-400" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> 5783 <desc> 5784 Refer a friend icon 5785 </desc>
5786 <path d="m3.132 12.8 0.448 -1.175 -1.046 -2.744a0.929 0.929 0 0 1 0.36 -1.107l2.458 -1.605 0.767 -2.834a0.928 0.928 0 0 1 0.942 -0.684l2.932 0.149L12.279 0.955a0.928 0.928 0 0 1 1.165 0L15.73 2.8l2.932 -0.146a0.928 0.928 0 0 1 0.942 0.684l0.767 2.834 2.458 1.605a0.928 0.928 0 0 1 0.36 1.107l-1.045 2.744 1.045 2.743a0.929 0.929 0 0 1 -0.36 1.108l-2.458 1.6 -0.771 2.835a0.927 0.927 0 0 1 -0.942 0.685l-2.932 -0.146 -2.286 1.841" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 5787 <path d="m0.75 19.769 1.656 2.609" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 5788 <path d="m9.908 8.147 6.294 9.916" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 5789 <path d="M15.871 17.541 2.075 21.857l-0.994 -1.566 9.158 -11.622 5.632 8.872z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 5790 <path d="m5.056 20.924 0.876 1.346a2.041 2.041 0 0 0 2.906 0.614 2.256 2.256 0 0 0 0.587 -3.04l-0.163 -0.236" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path> 5791 </svg> </div> 5792 <h3 class="text-lg font-medium text-gray-900 mb-1">No referrals yet</h3> 5793 <p class="text-sm text-gray-500 mb-4">When friends shop using your referral link, you'll see their activity here</p> 5794 <button 5795 x-on:click="navigateToPanel('main')" 5796 class="inline-flex items-center px-4 py-2 border border-transparent text-sm font-medium rounded-md text-white bg-rwp-brand hover:bg-rwp-brand-hover cursor-pointer transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-rwp-brand focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500" 5797 > 5798 Invite friends </button> 5799 </div> 5800 </template> 5801 5802 <!-- Referral Summary Row (shown above activity items when referrals tab has data) --> 5803 <div x-show="activityTab === 'referrals' && activityItems.length > 0 && activityStatusCounts" class="flex items-center gap-2 text-sm text-gray-500 pb-2 mb-1"> 5804 <span x-text="(activityStatusCounts ? activityStatusCounts.completed : 0) + ' completed'"></span> 5805 <span x-show="activityStatusCounts && !!activityStatusCounts.pending">·</span> 5806 <span x-show="activityStatusCounts && !!activityStatusCounts.pending" x-text="(activityStatusCounts ? activityStatusCounts.pending : 0) + ' pending'"></span> 5807 </div> 5808 5809 <!-- Activity Items --> 5810 <div class="divide-y divide-gray-100"> 5811 <template x-for="item in activityItems" x-bind:key="item.id"> 5812 <div class="py-3"> 5813 <div class="flex items-start justify-between gap-4"> 5814 <!-- Left column: Description + Date --> 5815 <div class="flex-1 min-w-0"> 5816 <!-- Referrals tab: Separate friend_name (semi-bold) and action_text (normal) --> 5817 <template x-if="activityTab === 'referrals' && item.friend_name"> 5818 <p class="text-sm text-gray-900"> 5819 <span class="font-semibold" x-text="item.friend_name"></span> 5820 <template x-if="item.action_text"> 5821 <span class="font-normal" x-text="' ' + item.action_text"></span> 5822 </template> 5823 </p> 5824 </template> 5825 <!-- Points/other tabs: Primary line: Reward/action name --> 5826 <template x-if="activityTab !== 'referrals' || !item.friend_name"> 5827 <p class="text-sm text-gray-900" x-text="item.target || item.action"></p> 5828 </template> 5829 <!-- Small text for order_id (refunds) --> 5830 <template x-if="item.order_id"> 5831 <p class="text-xs text-gray-400 mt-0.5" x-text="'#' + item.order_id"></p> 5832 </template> 5833 <!-- Small text for product_name (product reviews) --> 5834 <template x-if="item.product_name"> 5835 <p class="text-xs text-gray-400 mt-0.5" x-text="item.product_name"></p> 5836 </template> 5837 <!-- Secondary line: Date (all tabs) --> 5838 <p class="text-xs text-gray-500 mt-0.5" x-text="item.date"></p> 5839 </div> 5840 <!-- Right column: Points value + currency OR Status pill --> 5841 <div class="flex-shrink-0 text-right"> 5842 <!-- Points tab: Point value (with inline pending badge) + currency name below --> 5843 <template x-if="activityTab === 'points' && item.points !== undefined"> 5844 <div> 5845 <div class="flex items-center justify-end gap-1.5"> 5846 <p x-bind:class="item.source_type === 'points_expiration' ? 'text-gray-500' : (item.is_deduction ? 'text-gray-700' : (item.status === 'pending' ? 'text-gray-500' : 'text-emerald-600'))" 5847 class="text-sm font-semibold" 5848 x-text="(item.is_deduction ? '-' : '+') + Math.abs(item.points).toLocaleStr
5848ing()"> 5849 </p> 5850 <span x-show="item.status === 'pending'" 5851 class="text-[11px] text-gray-500"> 5852 Pending </span> 5853 </div> 5854 <p class="text-xs text-gray-500 mt-0.5 text-right" 5855 x-text="getCurrencyName(Math.abs(item.points))"> 5856 </p> 5857 </div> 5858 </template> 5859 <!-- Referrals/rewards tab: Status badge --> 5860 <template x-if="activityTab !== 'points' && item.status"> 5861 <span 5862 x-bind:class="{ 5863 'bg-emerald-50 text-emerald-700 border border-emerald-100': item.status === 'completed' || item.status === 'redeemed', 5864 'bg-amber-50 text-amber-700 border border-amber-100': item.status === 'pending', 5865 'bg-gray-50 text-gray-700 border border-gray-200': item.status === 'issued', 5866 'bg-red-50 text-red-700 border border-red-100': item.status === 'blocked' || item.status === 'rejected', 5867 'bg-gray-100 text-gray-600 border border-gray-200': item.status === 'canceled' 5868 }" 5869 class="inline-flex items-center rounded-full px-2 py-0.5 text-xs font-medium mt-0.5" 5870 x-text="({ 5871 completed: 'Completed', 5872 redeemed: 'Redeemed', 5873 pending: 'Pending', 5874 issued: 'Issued', 5875 blocked: 'Blocked', 5876 rejected: 'Rejected', 5877 canceled: 'Canceled', 5878 expired: 'Expired' 5879 })[item.status] || (item.status.charAt(0).toUpperCase() + item.status.slice(1))" 5880 ></span> 5881 </template> 5882 </div> 5883 </div> 5884 </div> 5885 </template> 5886 </div> 5887 5888 <!-- Load More --> 5889 <div x-show="activityHasMore" class="mt-4 text-center"> 5890 <button 5891 x-on:click="loadMoreActivity()" 5892 x-bind:disabled="activityLoadingMore" 5893 class="text-sm text-gray-600 hover:text-gray-900 font-medium cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500" 5894 > 5895 <span x-show="!activityLoadingMore">Load more</span> 5896 <span x-show="activityLoadingMore" class="inline-flex items-center gap-1.5"> 5897 <span class="animate-spin size-3.5 border-2 border-gray-200 border-t-gray-600 rounded-full"></span> 5898 Loading... </span> 5899 </button> 5900 </div> 5901 </div> 5902 </div> 5903 <!-- Top scroll fade --> 5904 <div 5905 x-show="activityShowTopFade" 5906 class="pointer-events-none absolute top-0 left-0 h-8 z-10" 5907 style="right: var(--rwp-scrollbar-width, 8px); background: linear-gradient(to bottom, var(--color-rwp-widget-bg), transparent);" 5908 ></div> 5909 <!-- Bottom scroll fade --> 5910 <div 5911 x-show="activityShowFade" 5912 class="pointer-events-none absolute bottom-0 left-0 h-12 rounded-b-2xl" 5913 style="right: var(--rwp-scrollbar-width, 8px); background: linear-gradient(to top, var(--color-rwp-widget-bg), transparent);" 5914 ></div> 5915 </div> 5916 </div> 5917 5918 <div 5919 x-show="currentPanel === 'create-account-prompt'" 5920 x-bind:class="'create-account-prompt-panel relative h-full flex flex-col ' + (currentPanel === 'create-account-prompt' ? (navigationDirection === 'initial' ? 'rwp-panel-fade-up' : (navigationDirection === 'forward' ? 'rwp-panel-slide-forward' : (navigationDirection === 'back' ? 'rwp-panel-slide-back' : ''))) : '')" 5921 > 5922 <div class="flex-1 overflow-y-auto custom-scrollbar px-6 py-6 text-rwp-widget-text"> 5923 <!-- Icon and Header --> 5924 <div class="text-center mb-6"> 5925 5926 <div class="relative inline-block mb-2"> 5927 <!-- Main reward icon --> 5928 <div class="size-10 flex items-center justify-center text-rwp-widget-text/45" x-show="lockedReward" x-html="lockedReward?.iconHtml"> 5929 <!-- Icon will be populated by Alpine --> 5930 </div> 5931 </div> 5932 <h2 class="text-2xl font-bold text-rwp-widget-heading mb-3"> 5933 <span x-show="lockedReward" x-text="lockedReward?.title"></span> 5934 </h2> 5935 <p class="text-sm text-rwp-widget-text"> 5936 Requires an account to redeem </p> 5937 5938 </div> 5939 5940 <!-- Benefits List --> 5941 <div class="space-y-3 mb-8"> 5942 <div class="flex items-start gap-3"> 5943 <svg class="size-5 text-emerald-500 flex-shrink-0 mt-0.5" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke="currentColor"><desc>Checkmark icon</desc><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"></path></svg> <div class="flex-1"> 5944 <p class="text-sm font-medium text-rwp-widget-heading"> 5945 Redeem rewards now </p> 5946 <p class="text-sm text-rwp-widget-text"> 5947 Turn your <span x-text="currencyPlural.toLowerCase()"></span> into discounts and perks </p> 5948 </div> 5949 </div> 5950 <div class="flex items-start gap-3"> 5951 <svg class="size-5 text-emerald-500 flex-shrink-0 mt-0.5" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke="currentColor"><desc>Checkmark icon</desc><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"></path></svg> <div class="flex-1"> 5952 <p class="text-sm font-medium text-rwp-widget-heading"> 5953 Instant setup </p> 5954 <p class="text-sm text-rwp-widget-text">
5955 One click and you're ready to go </p> 5956 </div> 5957 </div> 5958 <div class="flex items-start gap-3"> 5959 <svg class="size-5 text-emerald-500 flex-shrink-0 mt-0.5" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke="currentColor"><desc>Checkmark icon</desc><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"></path></svg> <div class="flex-1"> 5960 <p class="text-sm font-medium text-rwp-widget-heading"> 5961 Earn even more </p> 5962 <p class="text-sm text-rwp-widget-text"> 5963 Get +25 bonus <span x-text="currencyPlural.toLowerCase()"></span> for signing up </p> 5964 </div> 5965 </div> 5966 </div> 5967 5968 <!-- Create Account Button --> 5969 <button 5970 type="button" 5971 x-on:click="window.dispatchEvent(new CustomEvent('show-register-form'))" 5972 class="bg-rwp-brand text-rwp-widget-button-text text-sm font-semibold rounded-lg cursor-pointer transition-colors hover:bg-rwp-brand-hover disabled:hover:bg-rwp-brand disabled:opacity-50 disabled:cursor-not-allowed focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 w-full py-3 px-8 min-h-[48px] mx-auto grid grid-cols-1 grid-rows-1 [grid-template-areas:'stack'] place-items-center w-full" 5973 > 5974 Create account to use points </button> 5975 5976 <!-- Back Link --> 5977 <div class="text-center mt-4"> 5978 <button 5979 type="button" 5980 x-on:click="navigateToPanel('ways-to-redeem')" 5981 class="text-sm text-rwp-widget-text hover:text-rwp-widget-text underline cursor-pointer" 5982 > 5983 Back to rewards </button> 5984 </div> 5985 </div> 5986 </div> 5987 5988 <!-- Redeem Success Panel --> 5989 <div 5990 x-show="currentPanel === 'redeem-success'" 5991 x-bind:class="'redeem-success-panel relative h-full flex flex-col ' + (currentPanel === 'redeem-success' ? (navigationDirection === 'initial' ? 'rwp-panel-fade-up' : (navigationDirection === 'forward' ? 'rwp-panel-slide-forward' : (navigationDirection === 'back' ? 'rwp-panel-slide-back' : ''))) : '')" 5992 > 5993 <div class="flex-1 overflow-y-auto custom-scrollbar px-6 py-6 pb-4 text-rwp-widget-text"> 5994 <!-- Success Header --> 5995 <div 5996 class="text-center mb-6" 5997 x-data="{ 5998 cartSubtotal: 0, 5999 currencySymbol: '$' 6000 }" 6001 > 6002 <div class="flex justify-center mb-2"> 6003 <svg class="size-10 text-green-600" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24"><desc>Check circle alternate</desc><path d="M6 13.223 8.45 16.7a1.049 1.049 0 0 0 1.707 0.051L18 6.828" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path><path d="M0.75 11.999a11.25 11.25 0 1 0 22.5 0 11.25 11.25 0 1 0 -22.5 0Z" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path></svg> </div> 6004 <p class="text-base text-gray-600 mt-2"> 6005 Redeemed <span x-text="redeemSuccessData.points_cost"></span> 6006 <span x-text="' ' + redeemSuccessData.points_label"></span> 6007 </p> 6008 <h2 class="text-2xl font-bold text-gray-900 text-pretty" x-text="redeemSuccessData.title"> 6009 <!-- Title populated from Alpine data --> 6010 </h2> 6011 </div> 6012 6013 <template x-if="redeemSuccessData.reward_type !== 'free_product'"> 6014 <div class="text-sm text-gray-600 text-center mb-2 px-2"> 6015 <p>Use this coupon on your next order</p> 6016 </div> 6017 </template> 6018 6019 <div> 6020 <template x-if="redeemSuccessData.reward_type !== 'free_product'"> 6021 <div class="mb-4" x-data="copyHandler()"> 6022 <div x-data="{ isCheckmark: false }" class="flex rounded-lg bg-white outline-1 -outline-offset-1 outline-gray-200"> 6023 <input 6024 type="text" 6025 readonly 6026 x-ref="couponCode" 6027 x-bind:value="redeemSuccessData.couponCode" 6028 x-on:click="handleCopyClick($refs.couponCode, null, false)" 6029 class="block min-w-0 grow px-5 py-3 text-sm font-mono text-gray-900 cursor-pointer focus:outline-none sm:text-sm/6 text-ellipsis" 6030 > 6031 <div class="flex"> 6032 <button 6033 x-on:click="handleCopyClick($refs.couponCode, $data)"
6034 class="py-3 px-3 relative transition-all duration-200 cursor-pointer" 6035 x-bind:class="{ 'hover:text-gray-900 text-gray-500': !isCheckmark}" 6036 x-ref="copyButton"> 6037 <div class="relative size-6"> 6038 <div class="absolute inset-0 transition-all duration-300 ease-in-out" 6039 x-bind:class="isCheckmark ? 'opacity-0 scale-95' : 'opacity-100 scale-100'"> 6040 <svg class="size-6" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="-1 -1 24 24"><desc>Copy to clipboard icon</desc><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M17.875 6.645833333333333h2.520833333333333c0.506275 0 0.9166666666666666 0.41041 0.9166666666666666 0.9166666666666666v12.833333333333332c0 0.506275 -0.41039166666666665 0.9166666666666666 -0.9166666666666666 0.9166666666666666h-12.833333333333332c-0.5062658333333333 0 -0.9166666666666666 -0.41039166666666665 -0.9166666666666666 -0.9166666666666666V17.875" stroke-width="2"></path><path stroke="currentColor" stroke-linejoin="round" d="M0.6875 1.6041666666666665c0 -0.5062658333333333 0.41041 -0.9166666666666666 0.9166666666666666 -0.9166666666666666h12.833333333333332c0.506275 0 0.9166666666666666 0.41041 0.9166666666666666 0.9166666666666666v12.833333333333332c0 0.506275 -0.41039166666666665 0.9166666666666666 -0.9166666666666666 0.9166666666666666h-12.833333333333332c-0.5062658333333333 0 -0.9166666666666666 -0.41039166666666665 -0.9166666666666666 -0.9166666666666666v-12.833333333333332Z" stroke-width="2"></path></svg> </div> 6041 <div class="absolute inset-0 transition-all duration-300 ease-in-out" 6042 x-bind:class="isCheckmark ? 'opacity-100 scale-100' : 'opacity-0 scale-95'"> 6043 <svg class="size-6" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke="currentColor"><desc>Checkmark icon</desc><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"></path></svg> </div> 6044 </div> 6045 </button> 6046 </div> 6047 </div> 6048 </div> 6049 </template> 6050 6051 <!-- Button and messages section --> 6052 <div> 6053 6054 <!-- Cart-aware Button Section --> 6055 <div 6056 x-data="couponUtils( { 6057 nonce: 'f68cf984f4', 6058 buttonText: 'Apply to cart', 6059 rewardId: redeemSuccessData.reward_id || 0, 6060 couponCode: redeemSuccessData.couponCode || '', 6061 isApplied: redeemSuccessData.is_applied || false, 6062 cartItemCount: 0, 6063 cartProductIds: [], 6064 cartSubtotal: 0, 6065 freeProductId: redeemSuccessData.free_product_id || null, 6066 minimumOrderAmount: redeemSuccessData.minimum_order_amount || 0, 6067 integrationSource: 'woocommerce', 6068 checkoutUrl: 'https://jackkeller.com/checkout/', 6069 cartUrl: 'https://jackkeller.com/cart-2/', 6070 storeUrl: 'https://jackkeller.com/pay-now/', 6071 isAdminPreview: false, 6072 isDemo: false, 6073 addToCartText: 'Add to cart', 6074 claimRewardText: 'Claim reward', 6075 applyToCartText: 'Claim free product', 6076 currencySymbol: '$', 6077 pendingRewardId: 0, 6078 dismissedRewardId: 0 } )" 6079 x-on:reset-buttons.window="if ( $event.detail.except !== $el ) isApplied = false;" 6080 > 6081 <template x-if="redeemSuccessData.reward_type === 'free_product' && !isApplied && !productAddedButCouponFailed && !isPending && (redeemSuccessData.minimum_order_amount <= 0 || cartSubtotal >= redeemSuccessData.minimum_order_amount)"> 6082 <p class="text-sm font-medium text-gray-500 text-center mb-2">Free product applies automatically.</p> 6083 </template> 6084 6085 <template x-if="redeemSuccessData.reward_type === 'free_product' && !isApplied && !productAddedButCouponFailed && !isPending && redeemSuccessData.minimum_order_amount > 0 && cartSubtotal < redeemSuccessData.minimum_order_amount"> 6086 <p class="text-sm text-gray-500 text-center text-pretty mb-2" x-text="'Claim now — we\'ll add it to your cart when you spend ' + currencySymbol + redeemSuccessData.minimum_order_amount + ' or more'"></p> 6087 </template> 6088 6089 <button 6090 x-show="!isApplied && !isPending && !productAddedButCouponFailed" 6091 class="bg-rwp-brand text-rwp-widget-button-text text-sm font-semibold rounded-lg cursor-pointer transition-colors hover:bg-rwp-brand-hover disabled:hover:bg-rwp-brand disabled:opacity-50 disabled:cursor-not-allowed focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500
6091w-full py-3 px-8 min-h-[48px] mx-auto grid grid-cols-1 grid-rows-1 [grid-template-areas:'stack'] place-items-center" 6092 x-on:click="applyCoupon( redeemSuccessData.couponCode, redeemSuccessData.reward_id )" 6093 x-bind:disabled="isApplying" 6094 x-bind:class="{ 6095 'opacity-50 cursor-not-allowed': isApplying, 6096 'hover:bg-rwp-brand-hover': !isApplying 6097 }" 6098 > 6099 <span 6100 class="[grid-area:stack] flex items-center justify-center transition-opacity duration-200" 6101 x-bind:class="{ 'invisible': isApplying, 'visible': !isApplying }" 6102 > 6103 <!-- Dynamic text based on reward type, cart state, minimum spend, and integration --> 6104 <template x-if="redeemSuccessData.reward_type === 'free_product'"> 6105 <span x-text="getFreeProductButtonText(redeemSuccessData.free_product_id, redeemSuccessData.minimum_order_amount)"></span> 6106 </template> 6107 <template x-if="redeemSuccessData.reward_type !== 'free_product'"> 6108 <span> 6109 <span x-show="isWooCommerce">Apply to cart</span> 6110 <span x-show="!isWooCommerce">Apply coupon</span> 6111 </span> 6112 </template> 6113 </span> 6114 <svg class="w-5 h-5 animate-spin [grid-area:stack] transition-opacity duration-200" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" x-bind:class="{ 'invisible': isApplying !== true, 'visible': isApplying === true }"><desc>Loading spinner icon</desc><circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle><path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path></svg> </button> 6115 6116 <div x-show="hasErrors" class="text-sm mt-2 text-red-500">An error occurred. Please reload the page and try again.</div> 6117 6118 <!-- Success Message - Show when coupon applied --> 6119 <div x-show="isApplied" x-cloak class="mb-1 font-medium inline-flex items-center gap-2 rounded-lg px-3 py-2 text-emerald-600 text-sm w-full justify-center"> 6120 <template x-if="redeemSuccessData.reward_type === 'free_product'"> 6121 <span>Free product added to cart</span> 6122 </template> 6123 <template x-if="redeemSuccessData.reward_type !== 'free_product'"> 6124 <span x-text="redeemSuccessData.title + ' applied'"></span> 6125 </template> 6126 </div> 6127 6128 <template x-if="isPending && !productAddedButCouponFailed"> 6129 <div class="text-sm w-full"> 6130 <!-- Confirmation badge --> 6131 <div class="font-medium inline-flex items-center gap-1 text-emerald-600 text-sm w-full justify-center"> 6132 <svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24"> 6133 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"></path> 6134 </svg> 6135 <span>Reward claimed</span> 6136 </div> 6137 6138 <!-- Explanation text --> 6139 <div class="text-center text-gray-500 px-2 mb-3" x-text="'We\'ll add it to your cart when you spend ' + currencySymbol + redeemSuccessData.minimum_order_amount"> 6140 </div> 6141 6142 <!-- Action buttons --> 6143 <div class="space-y-3"> 6144 <!-- Primary CTA - Start/Continue Shopping --> 6145 <a 6146 x-bind:href="isAdminPreview ? 'javascript:void(0)' : storeUrl" 6147 x-bind:data-preview-disabled="isAdminPreview ? 'true' : null" 6148 x-bind:data-tippy-content="isAdminPreview ? 'Disabled for admin preview' : null" 6149 x-bind:class="{ '!cursor-not-allowed': isAdminPreview }" 6150 class="bg-rwp-brand text-rwp-widget-button-text text-sm font-semibold rounded-lg cursor-pointer transition-colors hover:bg-rwp-brand-hover disabled:hover:bg-rwp-brand disabled:opacity-50 disabled:cursor-not-allowed focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 w-full py-3 px-8 min-h-[48px] mx-auto flex items-center justify-center no-underline block" 6151 x-text="isCartEmpty ? 'Start shopping' : 'Continue shopping'" 6152 ></a> 6153 6154 <!-- Secondary CTA - View Cart (WooCommerce only, when cart has items) --> 6155 <template x-if="isWooCommerce && !isCartEmpty"> 6156 <a 6157 x-bind:href="isAdminPreview ? 'javascript:void(0)' : cartUrl" 6158 x-bind:data-preview-disabled="isAdminPreview ? 'true' : null" 6159 x-bind:data-tippy-content="isAdminPreview ? 'Disabled for admin preview' : null" 6160 x-bind:class="{ '!cursor-not-allowed': isAdminPreview }" 6161 class="text-sm inline-block w-full bg-gray-100 text-gray-700 font-semibold py-3 px-8 rounded-lg hover:bg-gray-200 transition-colors text-center cursor-pointer focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 no-underline block" 6162 > 6163 View cart </a> 6164 </template> 6165 </div> 6166 </div> 6167 </template> 6168 6169 <div x-show="productAddedButCouponFailed && !isPending" x-cloak class="mt-3 mb-3 text-sm w-full space-y-2"> 6170 <div x-show="productWasNewlyAdded" class="text-center text-emerald-600 font-medium"> 6171 Product added to cart </div> 6172 <template x-if="remainingToUnlock > 0"> 6173 <div class="text-center text-gray-600 px-2" x-text="'Almost there — add ' + '$' + remainingToUnlock + ' more to unlock'"></div> 6174 </template> 6175 </div> 6176 6177 <!-- Buttons when coupon failed but product added (fallback) --> 6178 <template x-if="productAddedButCouponFailed && !isPending"> 6179 <div> 6180 <!-- Primary CTA - Continue Shopping --> 6181 <a 6182 x-bind:href="isAdminPreview ? 'javascript:void(0)' : storeUrl" 6183 x-bind:data-preview-disabled="isAdminPreview ? 'true' : null" 6184 x-bind:data-tippy-content="isAdminPreview ? 'Disabled for admin preview' : null" 6185 x-bind:class="{ 'mb-3': isWooCommerce, '!cursor-not-allowed': isAdminPreview }" 6186 class="bg-rwp-brand text-rwp-widget-button-text text-sm font-semibold rounded-lg cursor-pointer transition-colors hover:bg-rwp-brand-hover disabled:hover:bg-rwp-brand disabled:opacity-50 disabled:cursor-not-allowed focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500
6186w-full py-3 px-8 min-h-[48px] mx-auto flex items-center justify-center no-underline block" 6187 > 6188 Continue shopping </a> 6189 6190 <!-- Secondary CTA - View Cart (WooCommerce only) --> 6191 <template x-if="isWooCommerce"> 6192 <a 6193 x-bind:href="isAdminPreview ? 'javascript:void(0)' : cartUrl" 6194 x-bind:data-preview-disabled="isAdminPreview ? 'true' : null" 6195 x-bind:data-tippy-content="isAdminPreview ? 'Disabled for admin preview' : null" 6196 x-bind:class="{ '!cursor-not-allowed': isAdminPreview }" 6197 class="text-sm inline-block w-full bg-gray-100 text-gray-700 font-semibold py-3 px-8 rounded-lg hover:bg-gray-200 transition-colors text-center cursor-pointer focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 no-underline block" 6198 > 6199 View cart </a> 6200 </template> 6201 </div> 6202 </template> 6203 6204 <!-- Error Message - Show when coupon failed to apply (no product involved) --> 6205 <div x-show="hasErrors && !productAddedButCouponFailed" x-cloak class="mb-1 font-medium inline-flex items-center gap-2 rounded-lg px-3 py-2 text-red-600 text-sm w-full justify-center"> 6206 <span x-text="errorMessage"></span> 6207 </div> 6208 6209 <!-- Buttons when coupon is applied successfully --> 6210 <template x-if="isApplied && !isCartEmpty"> 6211 <div> 6212 <!-- Primary CTA - Go to Checkout --> 6213 <a 6214 x-bind:href="isAdminPreview ? 'javascript:void(0)' : checkoutUrl" 6215 x-bind:data-preview-disabled="isAdminPreview ? 'true' : null" 6216 x-bind:data-tippy-content="isAdminPreview ? 'Disabled for admin preview' : null" 6217 class="bg-rwp-brand text-rwp-widget-button-text text-sm font-semibold rounded-lg cursor-pointer transition-colors hover:bg-rwp-brand-hover disabled:hover:bg-rwp-brand disabled:opacity-50 disabled:cursor-not-allowed focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 w-full py-3 px-8 min-h-[48px] mx-auto flex items-center justify-center no-underline block" 6218 x-bind:class="{ 'mb-3': isWooCommerce, '!cursor-not-allowed': isAdminPreview }" 6219 > 6220 Go to checkout </a> 6221 6222 <!-- Secondary CTA - View Cart (WooCommerce only) --> 6223 <template x-if="isWooCommerce"> 6224 <a 6225 x-bind:href="isAdminPreview ? 'javascript:void(0)' : cartUrl" 6226 x-bind:data-preview-disabled="isAdminPreview ? 'true' : null" 6227 x-bind:data-tippy-content="isAdminPreview ? 'Disabled for admin preview' : null" 6228 x-bind:class="{ '!cursor-not-allowed': isAdminPreview }" 6229 class="text-sm inline-block w-full bg-gray-100 text-gray-700 font-semibold py-3 px-8 rounded-lg hover:bg-gray-200 transition-colors text-center cursor-pointer focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 no-underline block" 6230 > 6231 View cart </a> 6232 </template> 6233 </div> 6234 </template> 6235 6236 <!-- Button when coupon is applied but cart is empty --> 6237 <template x-if="isApplied && isCartEmpty"> 6238 <div> 6239 <!-- Primary CTA - Shop Now --> 6240 <a 6241 x-bind:href="isAdminPreview ? 'javascript:void(0)' : storeUrl" 6242 x-bind:data-preview-disabled="isAdminPreview ? 'true' : null" 6243 x-bind:data-tippy-content="isAdminPreview ? 'Disabled for admin preview' : null" 6244 x-bind:class="{ '!cursor-not-allowed': isAdminPreview }" 6245 class="bg-rwp-brand text-rwp-widget-button-text text-sm font-semibold rounded-lg cursor-pointer transition-colors hover:bg-rwp-brand-hover disabled:hover:bg-rwp-brand disabled:opacity-50 disabled:cursor-not-allowed focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 w-full py-3 px-8 min-h-[48px] mx-auto flex items-center justify-center no-underline block" 6246 > 6247 Shop now </a> 6248 <!-- No secondary button when cart is empty --> 6249 </div> 6250 </template> 6251 6252 <!-- Coupon Terms (below buttons) - show only expiry when applied or ready (minimum met). --> 6253 <template x-if="redeemSuccessData.coupon_terms"> 6254 <div class="mt-2 text-center"> 6255 <span class="text-sm text-gray-500" x-text="(isApplied || (redeemSuccessData.reward_type === 'free_product' && !isPending && (redeemSuccessData.minimum_order_amount <= 0 || cartSubtotal >= redeemSuccessData.minimum_order_amount))) && redeemSuccessData.expiry_text ? redeemSuccessData.expiry_text : redeemSuccessData.coupon_terms"></span> 6256 </div> 6257 </template>
6258 </div> 6259 </div> 6260 6261 </div> 6262 6263 </div> 6264 6265 <div 6266 x-data="{ 6267 couponFailed: false, 6268 showCode: false, 6269 isCheckmark: false, 6270 isPending: false, 6271 isApplied: false, 6272 cartSubtotal: 0, 6273 minimumOrderAmount: 0, 6274 pendingRewardId: 0, 6275 ...copyHandler() 6276 }" 6277 x-init=" 6278 minimumOrderAmount = redeemSuccessData.minimum_order_amount || 0; 6279 isPending = pendingRewardId > 0 && pendingRewardId === parseInt(redeemSuccessData.reward_id || 0, 10); 6280 window.addEventListener('free-product-coupon-failed', () => { couponFailed = true; }); 6281 window.addEventListener('show-redeem-success', () => { couponFailed = false; isPending = false; isApplied = false; }); 6282 window.addEventListener('reward-set-pending', () => { isPending = true; }); 6283 window.addEventListener('reward-auto-applied', () => { isPending = false; isApplied = true; }); 6284 window.addEventListener('coupon-applied', () => { isApplied = true; }); 6285 " 6286 x-show="redeemSuccessData.reward_type === 'free_product' && !isApplied && (isPending || (redeemSuccessData.minimum_order_amount <= 0 || cartSubtotal >= redeemSuccessData.minimum_order_amount))" 6287 x-cloak 6288 class="px-6 text-center bg-gray-50 border-t border-gray-100 flex flex-col-reverse items-center" 6289 > 6290 <button 6291 x-on:click="if (!showCode) { showCode = true; $nextTick(() => { handleCopyClick($refs.couponCode, $data); }); } else { showCode = false; }" 6292 class="text-sm text-gray-500 hover:text-gray-600 underline underline-offset-2 cursor-pointer bg-transparent border-0 my-4" 6293 x-text="showCode ? 'Hide code' : 'Use a code at checkout'" 6294 ></button> 6295 6296 <!-- Collapsible code section --> 6297 <div x-show="showCode" x-collapse x-cloak class="w-full"> 6298 <div class="pt-4"> 6299 <div class="flex rounded-lg bg-white outline-1 -outline-offset-1 outline-gray-200"> 6300 <input 6301 type="text" 6302 readonly 6303 x-ref="couponCode" 6304 x-bind:value="redeemSuccessData.couponCode" 6305 x-on:click="handleCopyClick($refs.couponCode, null, false)" 6306 class="block min-w-0 grow px-5 py-3 text-sm font-mono text-gray-900 cursor-pointer focus:outline-none sm:text-sm/6 text-ellipsis" 6307 > 6308 <div class="flex"> 6309 <button 6310 x-on:click="handleCopyClick($refs.couponCode, $data)" 6311 class="py-3 px-3 relative transition-all duration-200 cursor-pointer" 6312 x-bind:class="{ 'hover:text-gray-900 text-gray-500': !isCheckmark}" 6313 x-ref="copyButton"> 6314 <div class="relative size-6"> 6315 <div class="absolute inset-0 transition-all duration-300 ease-in-out" 6316 x-bind:class="isCheckmark ? 'opacity-0 scale-95' : 'opacity-100 scale-100'"> 6317 <svg class="size-6" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="-1 -1 24 24"><desc>Copy to clipboard icon</desc><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M17.875 6.645833333333333h2.520833333333333c0.506275 0 0.9166666666666666 0.41041 0.9166666666666666 0.9166666666666666v12.833333333333332c0 0.506275 -0.41039166666666665 0.9166666666666666 -0.9166666666666666 0.9166666666666666h-12.833333333333332c-0.5062658333333333 0 -0.9166666666666666 -0.41039166666666665 -0.9166666666666666 -0.9166666666666666V17.875" stroke-width="2"></path><path stroke="currentColor" stroke-linejoin="round" d="M0.6875 1.6041666666666665c0 -0.5062658333333333 0.41041 -0.9166666666666666 0.9166666666666666 -0.9166666666666666h12.833333333333332c0.506275 0 0.9166666666666666 0.41041 0.9166666666666666 0.9166666666666666v12.833333333333332c0 0.506275 -0.41039166666666665 0.9166666666666666 -0.9166666666666666 0.9166666666666666h-12.833333333333332c-0.5062658333333333 0 -0.9166666666666666 -0.41039166666666665 -0.9166666666666666 -0.9166666666666666v-12.833333333333332Z" stroke-width="2"></path></svg> </div> 6318 <div class="absolute inset-0 transition-all duration-300 ease-in-out" 6319 x-bind:class="isCheckmark ? 'opacity-100 scale-100' : 'opacity-0 scale-95'"> 6320 <svg class="size-6" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke="currentColor"><desc>Checkmark icon</desc><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"></path></svg> </div> 6321 </div> 6322 </button> 6323 </div> 6324 </div> 6325 </div> 6326 </div>
6327 </div> 6328 </div> 6329 </div> 6330 6331 6332 <div 6333 x-show="currentPanel === 'your-rewards'" 6334 x-bind:class="'relative h-full flex flex-col overflow-hidden ' + (currentPanel === 'your-rewards' ? (navigationDirection === 'initial' ? 'rwp-panel-fade-up' : (navigationDirection === 'forward' ? 'rwp-panel-slide-forward' : (navigationDirection === 'back' ? 'rwp-panel-slide-back' : ''))) : '')" 6335 x-data="{ panelAtTop: true, panelAtBottom: false }" 6336 x-effect="if (currentPanel === 'your-rewards') { void availableRewards?.length; const el = $el.querySelector('.overflow-y-auto'); if (el && el.scrollHeight > 0) { panelAtBottom = el.scrollTop + el.clientHeight >= el.scrollHeight - 5; } }" 6337 > 6338 <div class="flex-1 overflow-y-auto custom-scrollbar px-0 py-6" 6339 @scroll="panelAtTop = $el.scrollTop < 5; panelAtBottom = $el.scrollTop + $el.clientHeight >= $el.scrollHeight - 5" 6340 > 6341 6342 <h2 class="text-lg font-semibold text-rwp-widget-heading mb-3 px-6">Your rewards</h2> 6343 6344 <div class="px-3"> 6345 <template x-if="availableRewards && availableRewards.length > 0"> 6346 <template x-for="reward in availableRewards" x-bind:key="reward.id"> 6347 <div> 6348 <button 6349 x-on:click="navigateToPanel('reward-detail-' + reward.id)" 6350 class="w-full hover:bg-gray-50 text-left px-4 py-3 rounded-lg flex items-center justify-between transition-colors cursor-pointer focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 !px-3" 6351 > 6352 <div class="flex items-center gap-4"> 6353 <div class="size-8 flex items-center justify-center flex-shrink-0 text-rwp-widget-icon-text" x-html="reward.icon_html"> 6354 <!-- Icon will be populated from server --> 6355 </div> 6356 <div class="flex-1"> 6357 <div class="font-medium text-rwp-widget-heading text-sm" x-text="reward.title"></div> 6358 <div class="text-xs text-gray-500"> 6359 <template x-if="reward.is_out_of_stock"> 6360 <span class="text-amber-600">Out of stock</span> 6361 </template> 6362 <template x-if="!reward.is_out_of_stock && reward.points_cost > 0"> 6363 <span x-text="'Redeemed ' + reward.points_cost + ' ' + reward.points_label"></span> 6364 </template> 6365 <template x-if="!reward.is_out_of_stock && reward.points_cost === 0"> 6366 <span>From referral</span> 6367 </template> 6368 </div> 6369 </div> 6370 </div> 6371 <svg class="size-5 text-gray-400 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24" stroke-width="1.5"> 6372 <path stroke-linecap="round" stroke-linejoin="round" d="M8.25 4.5l7.5 7.5-7.5 7.5" /> 6373 </svg> 6374 </button> 6375 </div> 6376 </template> 6377 </template> 6378 6379 <!-- Empty state when no rewards --> 6380 <template x-if="!availableRewards || availableRewards.length === 0"> 6381 <div class="text-center py-8"> 6382 <div class="flex justify-center mb-3"> 6383 <svg class="size-10 text-gray-400" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24"><desc>Free product icon</desc><g><g><path d="M15.75 23.24a3 3 0 0 0 -3 -3H9a3 3 0 0 0 -3 -3H0.75v6Z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path><path d="m6 20.24 3 0" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path></g><path d="M16.5 17.74H21a0.76 0.76 0 0 0 0.75 -0.75v-6.75" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path><path d="m8.25 10.24 0 4" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path><path d="M7.5 5.99h15s0.75 0 0.75 0.75v2.75s0 0.75 -0.75 0.75h-15s-0.75 0 -0.75 -0.75V6.74s0 -0.75 0.75 -0.75" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path><path d="m15 15.24 0 -9.25" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path><path d="M19.27 3.87A11.84 11.84 0 0 1 15 6a11.93 11.93 0 0 1 2.12 -4.24C18.46 0.43 19.21 0.63 19.8 1.22s0.78 1.33 -0.53 2.65Z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path><path d="M10.73 3.87A11.84 11.84 0 0 0 15 6a11.93 11.93 0 0 0 -2.12 -4.24C11.54 0.43 10.79 0.63 10.2 1.22
6383s-0.78 1.33 0.53 2.65Z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path></g></svg> </div> 6384 <h3 class="text-lg font-medium text-gray-900 mb-1">No rewards yet</h3> 6385 <p class="text-sm text-gray-500 mb-5">Start earning to unlock your first reward</p> 6386 <div class="flex justify-center"> 6387 <button 6388 x-on:click="navigateToPanel('ways-to-earn')" 6389 class="bg-rwp-brand text-rwp-widget-button-text text-sm font-semibold rounded-lg cursor-pointer transition-colors hover:bg-rwp-brand-hover disabled:hover:bg-rwp-brand disabled:opacity-50 disabled:cursor-not-allowed focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 py-2 px-4 flex items-center justify-center hover:bg-rwp-button-hover" 6390 > 6391 Earn Points </button> 6392 </div> 6393 </div> 6394 </template> 6395 </div> 6396 </div> 6397 6398 <!-- Top scroll fade --> 6399 <div x-show="!panelAtTop" 6400 class="pointer-events-none absolute top-0 left-0 h-8 z-10" 6401 style="right: var(--rwp-scrollbar-width, 8px); background: linear-gradient(to bottom, var(--color-rwp-widget-bg), transparent);"></div> 6402 <!-- Bottom scroll fade --> 6403 <div x-show="!panelAtBottom" 6404 class="pointer-events-none absolute bottom-0 left-0 h-12 z-10" 6405 style="right: var(--rwp-scrollbar-width, 8px); background: linear-gradient(to top, var(--color-rwp-widget-bg), transparent);"></div> 6406 </div> 6407 6408 <template x-for="reward in availableRewards" x-bind:key="'detail-' + reward.id"> 6409 <div 6410 x-show="currentPanel === 'reward-detail-' + reward.id" 6411 x-bind:class="'reward-detail-panel relative h-full flex flex-col ' + (currentPanel === 'reward-detail-' + reward.id ? (navigationDirection === 'initial' ? 'rwp-panel-fade-up' : (navigationDirection === 'forward' ? 'rwp-panel-slide-forward' : (navigationDirection === 'back' ? 'rwp-panel-slide-back' : ''))) : '')" 6412 > 6413 6414 6415 6416 6417 <div class="flex-1 overflow-y-auto custom-scrollbar px-6 py-6 pb-6 text-rwp-widget-text"> 6418 <!-- Icon and Title (Centered like friend claim) --> 6419 <div 6420 class="text-center mb-6" 6421 x-data="{ 6422 cartSubtotal: 0, 6423 currencySymbol: '$' 6424 }" 6425 > 6426 <div class="flex justify-center mx-auto mb-2 [&>svg]:size-10" x-html="reward.icon_html"> 6427 <!-- Icon will be populated from server --> 6428 </div> 6429 <h2 class="text-2xl font-bold text-gray-900 text-pretty" x-text="reward.title"></h2> 6430 </div> 6431 6432 <template x-if="reward.reward_type !== 'free_product'"> 6433 <p class="text-sm text-gray-600 text-center mb-2" x-text="reward.description"></p> 6434 </template> 6435 6436 <!-- Coupon Code Display with Copy Functionality --> 6437 <template x-if="reward.coupon_code && reward.coupon_code !== ''"> 6438 <div> 6439 <template x-if="reward.reward_type !== 'free_product'"> 6440 <div class="mb-4" x-data="copyHandler()"> 6441 <div x-data="{ isCheckmark: false }" class="flex rounded-lg bg-white outline-1 -outline-offset-1 outline-gray-200"> 6442 <input 6443 type="text" 6444 readonly 6445 x-ref="couponCode" 6446 x-bind:value="reward.coupon_code" 6447 x-on:click="handleCopyClick($refs.couponCode, null, false)" 6448 class="block min-w-0 grow px-5 py-3 text-sm font-mono text-gray-900 cursor-pointer focus:outline-none sm:text-sm/6 text-ellipsis" 6449 > 6450 <div class="flex"> 6451 <button 6452 x-on:click="handleCopyClick($refs.couponCode, $data)" 6453 class="py-3 px-3 relative transition-all duration-200 cursor-pointer" 6454 x-bind:class="{ 'hover:text-gray-900 text-gray-500': !isCheckmark}" 6455 x-ref="copyButton"> 6456 <div class="relative size-6"> 6457 <div class="absolute inset-0 transition-all duration-300 ease-in-out" 6458 x-bind:class="isCheckmark ? 'opacity-0 scale-95' : 'opacity-100 scale-100'"> 6459 <svg class="size-6" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="-1 -1 24 24"><desc>Copy to clipboard icon</desc><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M17.875 6.645833333333333h2.520833333333333c0.506275 0 0.9166666666666666 0.41041 0.9166666666666666 0.9166666666666666v12.833333333333332c0 0.506275 -0.41039166666666665 0.9166666666666666 -0.9166666666666666 0.9166666666666666h-12.833333333333332c-0.5062658333333333 0 -0.9166666666666666 -0.41039166666666665 -0.9166666666666666 -0.9166666666666666V17.875" stroke-width="2"></path>
6459<path stroke="currentColor" stroke-linejoin="round" d="M0.6875 1.6041666666666665c0 -0.5062658333333333 0.41041 -0.9166666666666666 0.9166666666666666 -0.9166666666666666h12.833333333333332c0.506275 0 0.9166666666666666 0.41041 0.9166666666666666 0.9166666666666666v12.833333333333332c0 0.506275 -0.41039166666666665 0.9166666666666666 -0.9166666666666666 0.9166666666666666h-12.833333333333332c-0.5062658333333333 0 -0.9166666666666666 -0.41039166666666665 -0.9166666666666666 -0.9166666666666666v-12.833333333333332Z" stroke-width="2"></path></svg> </div> 6460 <div class="absolute inset-0 transition-all duration-300 ease-in-out" 6461 x-bind:class="isCheckmark ? 'opacity-100 scale-100' : 'opacity-0 scale-95'"> 6462 <svg class="size-6" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke="currentColor"><desc>Checkmark icon</desc><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"></path></svg> </div> 6463 </div> 6464 </button> 6465 </div> 6466 </div> 6467 </div> 6468 </template> 6469 6470 <!-- Button and messages section --> 6471 <div> 6472 6473 <!-- Out of Stock Notice --> 6474 <template x-if="reward.is_out_of_stock"> 6475 <div class="text-center mb-4 p-4 bg-amber-50 rounded-lg"> 6476 <p class="text-sm text-amber-700 font-medium"> 6477 This product is currently out of stock </p> 6478 <p class="text-xs text-amber-600 mt-1"> 6479 Your reward will remain available when the product is back in stock. </p> 6480 </div> 6481 </template> 6482 6483 <!-- Cart-aware Button Section --> 6484 <div 6485 x-data="couponUtils( { 6486 nonce: 'f68cf984f4', 6487 buttonText: 'Apply to cart', 6488 rewardId: reward.id, 6489 couponCode: reward.coupon_code || '', 6490 appliedButtonText: 'Coupon applied', 6491 isApplied: reward.is_applied || false, 6492 isOutOfStock: reward.is_out_of_stock || false, 6493 cartItemCount: 0, 6494 cartProductIds: [], 6495 cartSubtotal: 0, 6496 freeProductId: reward.free_product_id || null, 6497 minimumOrderAmount: reward.minimum_order_amount || 0, 6498 integrationSource: 'woocommerce', 6499 checkoutUrl: 'https://jackkeller.com/checkout/', 6500 cartUrl: 'https://jackkeller.com/cart-2/', 6501 storeUrl: 'https://jackkeller.com/pay-now/', 6502 isAdminPreview: false, 6503 isDemo: false, 6504 addToCartText: 'Add to cart', 6505 claimRewardText: 'Claim reward', 6506 applyToCartText: 'Claim free product', 6507 currencySymbol: '$', 6508 pendingRewardId: 0, 6509 dismissedRewardId: 0 } )" 6510 x-on:reset-buttons.window="if ( $event.detail.except !== $el ) isApplied = false;" 6511 > 6512 <template x-if="reward.reward_type === 'free_product' && !isApplied && !productAddedButCouponFailed && !isPending && (reward.minimum_order_amount <= 0 || cartSubtotal >= reward.minimum_order_amount)"> 6513 <p class="text-sm font-medium text-gray-500 text-center mb-2">Free product applies automatically.</p> 6514 </template> 6515 6516 <template x-if="reward.reward_type === 'free_product' && !isApplied && !productAddedButCouponFailed && !isPending && reward.minimum_order_amount > 0 && cartSubtotal < reward.minimum_order_amount"> 6517 <p class="text-sm text-gray-500 text-center text-pretty mb-2" x-text="'Claim now — we\'ll add it to your cart when you spend ' + currencySymbol + reward.minimum_order_amount + ' or more'"></p> 6518 </template> 6519 6520 <button 6521 x-show="!isApplied && !isPending && !isOutOfStock && !productAddedButCouponFailed" 6522 class="bg-rwp-brand text-rwp-widget-button-text text-sm font-semibold rounded-lg cursor-pointer transition-colors hover:bg-rwp-brand-hover disabled:hover:bg-rwp-brand disabled:opacity-50 disabled:cursor-not-allowed focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 w-full py-3 px-8 min-h-[48px] mx-auto grid grid-cols-1 grid-rows-1 [grid-template-areas:'stack'] place-items-center" 6523 x-on:click="applyCoupon( reward.coupon_code )" 6524 x-bind:disabled="isApplying" 6525 x-bind:class="{ 6526 'opacity-50 cursor-not-allowed': isApplying, 6527 'hover:bg-rwp-brand-hover': !isApplying 6528 }" 6529 > 6530 <span 6531 class="[grid-area:stack] flex items-center justify-center transition-opacity duration-200" 6532 x-bind:class="{ 'invisible': isApplying, 'visible': !isApplying }" 6533 > 6534 <!-- Dynamic text based on reward type, cart state, minimum spend, and integration --> 6535 <template x-if="reward.reward_type === 'free_product'"> 6536 <span x-text="getFreeProductButtonText(reward.free_product_id, reward.minimum_order_amount)"></span> 6537 </template> 6538 <template x-if="reward.reward_type !== 'free_product'"> 6539 <span> 6540 <span x-show="isWooCommerce">Apply to cart</span> 6541 <span x-show="!isWooCommerce">Apply coupon</span> 6542 </span> 6543 </template> 6544 </span> 6545 <svg class="w-5 h-5 animate-spin [grid-area:stack] transition-opacity duration-200" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" x-bind:class="{ &ap
6545os;invisible': isApplying !== true, 'visible': isApplying === true }"><desc>Loading spinner icon</desc><circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle><path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path></svg> </button> 6546 6547 <div x-show="hasErrors" class="text-sm mt-2 text-red-500">An error occurred. Please reload the page and try again.</div> 6548 6549 <!-- Success Message - Show when coupon applied --> 6550 <div x-show="isApplied" x-cloak class="mb-1 font-medium inline-flex items-center gap-2 rounded-lg px-3 py-2 text-emerald-600 text-sm w-full justify-center"> 6551 <template x-if="reward.reward_type === 'free_product'"> 6552 <span>Free product added to cart</span> 6553 </template> 6554 <template x-if="reward.reward_type !== 'free_product'"> 6555 <span x-text="reward.title + ' applied'"></span> 6556 </template> 6557 </div> 6558 6559 <template x-if="isPending && !productAddedButCouponFailed"> 6560 <div class="text-sm w-full"> 6561 <!-- Confirmation badge --> 6562 <div class="font-medium inline-flex items-center gap-1 text-emerald-600 text-sm w-full justify-center"> 6563 <svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24"> 6564 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"></path> 6565 </svg> 6566 <span>Reward claimed</span> 6567 </div> 6568 6569 <!-- Explanation text --> 6570 <div class="text-center text-gray-500 px-2 mb-3" x-text="'We\'ll add it to your cart when you spend ' + currencySymbol + reward.minimum_order_amount"> 6571 </div> 6572 6573 <!-- Action buttons --> 6574 <div class="space-y-3"> 6575 <!-- Primary CTA - Start/Continue Shopping --> 6576 <a 6577 x-bind:href="isAdminPreview ? 'javascript:void(0)' : storeUrl" 6578 x-bind:data-preview-disabled="isAdminPreview ? 'true' : null" 6579 x-bind:data-tippy-content="isAdminPreview ? 'Disabled for admin preview' : null" 6580 x-bind:class="{ '!cursor-not-allowed': isAdminPreview }" 6581 class="bg-rwp-brand text-rwp-widget-button-text text-sm font-semibold rounded-lg cursor-pointer transition-colors hover:bg-rwp-brand-hover disabled:hover:bg-rwp-brand disabled:opacity-50 disabled:cursor-not-allowed focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 w-full py-3 px-8 min-h-[48px] mx-auto flex items-center justify-center no-underline block" 6582 x-text="isCartEmpty ? 'Start shopping' : 'Continue shopping'" 6583 ></a> 6584 6585 <!-- Secondary CTA - View Cart (WooCommerce only, when cart has items) --> 6586 <template x-if="isWooCommerce && !isCartEmpty"> 6587 <a 6588 x-bind:href="isAdminPreview ? 'javascript:void(0)' : cartUrl" 6589 x-bind:data-preview-disabled="isAdminPreview ? 'true' : null" 6590 x-bind:data-tippy-content="isAdminPreview ? 'Disabled for admin preview' : null" 6591 x-bind:class="{ '!cursor-not-allowed': isAdminPreview }" 6592 class="text-sm inline-block w-full bg-gray-100 text-gray-700 font-semibold py-3 px-8 rounded-lg hover:bg-gray-200 transition-colors text-center cursor-pointer focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 no-underline block" 6593 > 6594 View cart </a> 6595 </template> 6596 </div> 6597 </div> 6598 </template> 6599 6600 <!-- Partial Success Message - Product added but coupon failed (fallback for edge cases) --> 6601 <div x-show="productAddedButCouponFailed && !isPending" x-cloak class="mt-3 mb-3 text-sm w-full space-y-2"> 6602 <div x-show="productWasNewlyAdded" class="text-center text-emerald-600 font-medium"> 6603 Product added to cart </div> 6604 <template x-if="remainingToUnlock > 0"> 6605 <div class="text-center text-gray-600 px-2" x-text="'Almost there — add ' + '$' + remainingToUnlock + ' more to unlock'"></div> 6606 </template> 6607 </div> 6608 6609 <!-- Buttons when coupon failed but product added (fallback) --> 6610 <template x-if="productAddedButCouponFailed && !isPending"> 6611 <div> 6612 <!-- Primary CTA - Continue Shopping --> 6613 <a 6614 x-bind:href="isAdminPreview ? 'javascript:void(0)' : storeUrl" 6615 x-bind:data-preview-disabled="isAdminPreview ? 'true' : null" 6616 x-bind:data-tippy-content="isAdminPreview ? 'Disabled for admin preview' : null" 6617 x-bind:class="{ 'mb-3': isWooCommerce, '!cursor-not-allowed': isAdminPreview }" 6618 class="bg-rwp-brand text-rwp-widget-button-text text-sm font-semibold rounded-lg cursor-pointer transition-colors hover:bg-rwp-brand-hover disabled:hover:bg-rwp-brand disabled:opacity-50 disabled:cursor-not-allowed focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500
6618w-full py-3 px-8 min-h-[48px] mx-auto flex items-center justify-center no-underline block" 6619 > 6620 Continue shopping </a> 6621 6622 <!-- Secondary CTA - View Cart (WooCommerce only) --> 6623 <template x-if="isWooCommerce"> 6624 <a 6625 x-bind:href="isAdminPreview ? 'javascript:void(0)' : cartUrl" 6626 x-bind:data-preview-disabled="isAdminPreview ? 'true' : null" 6627 x-bind:data-tippy-content="isAdminPreview ? 'Disabled for admin preview' : null" 6628 x-bind:class="{ '!cursor-not-allowed': isAdminPreview }" 6629 class="text-sm inline-block w-full bg-gray-100 text-gray-700 font-semibold py-3 px-8 rounded-lg hover:bg-gray-200 transition-colors text-center cursor-pointer focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 no-underline block" 6630 > 6631 View cart </a> 6632 </template> 6633 </div> 6634 </template> 6635 6636 <!-- Error Message - Show when coupon failed to apply (no product involved) --> 6637 <div x-show="hasErrors && !productAddedButCouponFailed && !isPending" x-cloak class="mb-1 font-medium inline-flex items-center gap-2 rounded-lg px-3 py-2 text-red-600 text-sm w-full justify-center"> 6638 <span x-text="errorMessage"></span> 6639 </div> 6640 6641 <!-- Buttons when coupon is applied successfully --> 6642 <template x-if="isApplied && !isCartEmpty"> 6643 <div> 6644 <!-- Primary CTA - Go to Checkout --> 6645 <a 6646 x-bind:href="isAdminPreview ? 'javascript:void(0)' : checkoutUrl" 6647 x-bind:data-preview-disabled="isAdminPreview ? 'true' : null" 6648 x-bind:data-tippy-content="isAdminPreview ? 'Disabled for admin preview' : null" 6649 class="bg-rwp-brand text-rwp-widget-button-text text-sm font-semibold rounded-lg cursor-pointer transition-colors hover:bg-rwp-brand-hover disabled:hover:bg-rwp-brand disabled:opacity-50 disabled:cursor-not-allowed focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 w-full py-3 px-8 min-h-[48px] mx-auto flex items-center justify-center no-underline block" 6650 x-bind:class="{ 'mb-3': isWooCommerce, '!cursor-not-allowed': isAdminPreview }" 6651 > 6652 Go to checkout </a> 6653 6654 <!-- Secondary CTA - View Cart (WooCommerce only) --> 6655 <template x-if="isWooCommerce"> 6656 <a 6657 x-bind:href="isAdminPreview ? 'javascript:void(0)' : cartUrl" 6658 x-bind:data-preview-disabled="isAdminPreview ? 'true' : null" 6659 x-bind:data-tippy-content="isAdminPreview ? 'Disabled for admin preview' : null" 6660 x-bind:class="{ '!cursor-not-allowed': isAdminPreview }" 6661 class="text-sm inline-block w-full bg-gray-100 text-gray-700 font-semibold py-3 px-8 rounded-lg hover:bg-gray-200 transition-colors text-center cursor-pointer focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 no-underline block" 6662 > 6663 View cart </a> 6664 </template> 6665 </div> 6666 </template> 6667 6668 <!-- Button when coupon is applied but cart is empty --> 6669 <template x-if="isApplied && isCartEmpty"> 6670 <div> 6671 <!-- Primary CTA - Shop Now --> 6672 <a 6673 x-bind:href="isAdminPreview ? 'javascript:void(0)' : storeUrl" 6674 x-bind:data-preview-disabled="isAdminPreview ? 'true' : null" 6675 x-bind:data-tippy-content="isAdminPreview ? 'Disabled for admin preview' : null" 6676 x-bind:class="{ '!cursor-not-allowed': isAdminPreview }" 6677 class="bg-rwp-brand text-rwp-widget-button-text text-sm font-semibold rounded-lg cursor-pointer transition-colors hover:bg-rwp-brand-hover disabled:hover:bg-rwp-brand disabled:opacity-50 disabled:cursor-not-allowed focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 w-full py-3 px-8 min-h-[48px] mx-auto flex items-center justify-center no-underline block" 6678 > 6679 Shop now </a> 6680 <!-- No secondary button when cart is empty --> 6681 </div> 6682 </template> 6683 6684 <!-- Coupon Terms (below buttons) - show only expiry when applied or ready (minimum met). --> 6685 <template x-if="reward.coupon_terms"> 6686 <div class="mt-2 text-center"> 6687 <span class="text-sm text-gray-500" x-text="(isApplied || (reward.reward_type === 'free_product' && !isPending && (reward.minimum_order_amount <= 0 || cartSubtotal >= reward.minimum_order_amount))) && reward.expiry_text ? reward.expiry_text : reward.coupon_terms"></span> 6688 </div> 6689 </template> 6690 </div> 6691 </div> 6692 6693 </div> 6694 </template> 6695 6696 <!-- Back to Your Rewards Button --> 6697 6698 6699
6700 </div> 6701 6702 <div 6703 x-data="{ 6704 couponFailed: false, 6705 showCode: false, 6706 isCheckmark: false, 6707 isPending: false, 6708 isApplied: false, 6709 cartSubtotal: 0, 6710 minimumOrderAmount: 0, 6711 pendingRewardId: 0, 6712 ...copyHandler() 6713 }" 6714 x-init=" 6715 minimumOrderAmount = reward.minimum_order_amount || 0; 6716 isApplied = reward.is_applied || false; 6717 isPending = pendingRewardId > 0 && pendingRewardId === parseInt(reward.id || 0, 10); 6718 window.addEventListener('free-product-coupon-failed', () => { couponFailed = true; }); 6719 window.addEventListener('show-redeem-success', () => { couponFailed = false; isPending = false; }); 6720 window.addEventListener('reward-set-pending', () => { isPending = true; }); 6721 window.addEventListener('reward-auto-applied', () => { isPending = false; isApplied = true; }); 6722 window.addEventListener('coupon-applied', () => { isApplied = true; }); 6723 " 6724 x-show="reward.reward_type === 'free_product' && !isApplied && (isPending || (reward.minimum_order_amount <= 0 || cartSubtotal >= reward.minimum_order_amount))" 6725 x-cloak 6726 class="px-6 text-center bg-gray-50 border-t border-gray-100 flex flex-col-reverse items-center" 6727 > 6728 <button 6729 x-on:click="if (!showCode) { showCode = true; $nextTick(() => { handleCopyClick($refs.couponCode, $data); }); } else { showCode = false; }" 6730 class="text-sm text-gray-400 hover:text-gray-600 underline underline-offset-2 cursor-pointer bg-transparent border-0 my-4" 6731 x-text="showCode ? 'Hide code' : 'Use a code at checkout'" 6732 ></button> 6733 6734 <!-- Collapsible code section --> 6735 <div x-show="showCode" x-collapse x-cloak class="w-full"> 6736 <div class="pt-4"> 6737 <div class="flex rounded-lg bg-white outline-1 -outline-offset-1 outline-gray-200"> 6738 <input 6739 type="text" 6740 readonly 6741 x-ref="couponCode" 6742 x-bind:value="reward.coupon_code" 6743 x-on:click="handleCopyClick($refs.couponCode, null, false)" 6744 class="block min-w-0 grow px-5 py-3 text-sm font-mono text-gray-900 cursor-pointer focus:outline-none sm:text-sm/6 text-ellipsis" 6745 > 6746 <div class="flex"> 6747 <button 6748 x-on:click="handleCopyClick($refs.couponCode, $data)" 6749 class="py-3 px-3 relative transition-all duration-200 cursor-pointer" 6750 x-bind:class="{ 'hover:text-gray-900 text-gray-500': !isCheckmark}" 6751 x-ref="copyButton"> 6752 <div class="relative size-6"> 6753 <div class="absolute inset-0 transition-all duration-300 ease-in-out" 6754 x-bind:class="isCheckmark ? 'opacity-0 scale-95' : 'opacity-100 scale-100'"> 6755 <svg class="size-6" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="-1 -1 24 24"><desc>Copy to clipboard icon</desc><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M17.875 6.645833333333333h2.520833333333333c0.506275 0 0.9166666666666666 0.41041 0.9166666666666666 0.9166666666666666v12.833333333333332c0 0.506275 -0.41039166666666665 0.9166666666666666 -0.9166666666666666 0.9166666666666666h-12.833333333333332c-0.5062658333333333 0 -0.9166666666666666 -0.41039166666666665 -0.9166666666666666 -0.9166666666666666V17.875" stroke-width="2"></path><path stroke="currentColor" stroke-linejoin="round" d="M0.6875 1.6041666666666665c0 -0.5062658333333333 0.41041 -0.9166666666666666 0.9166666666666666 -0.9166666666666666h12.833333333333332c0.506275 0 0.9166666666666666 0.41041 0.9166666666666666 0.9166666666666666v12.833333333333332c0 0.506275 -0.41039166666666665 0.9166666666666666 -0.9166666666666666 0.9166666666666666h-12.833333333333332c-0.5062658333333333 0 -0.9166666666666666 -0.41039166666666665 -0.9166666666666666 -0.9166666666666666v-12.833333333333332Z" stroke-width="2"></path></svg> </div> 6756 <div class="absolute inset-0 transition-all duration-300 ease-in-out" 6757 x-bind:class="isCheckmark ? 'opacity-100 scale-100' : 'opacity-0 scale-95'"> 6758 <svg class="size-6" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke="currentColor"><desc>Checkmark icon</desc><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"></path></svg> </div> 6759 </div> 6760 </button> 6761 </div> 6762 </div> 6763 </div> 6764 </div> 6765 </div>
6766 </div> 6767 </div> 6768 </template> 6769 6770 </div> 6771 6772 <div x-show="currentPanel === 'main'" 6773 x-bind:class="isScrolledToBottom ? 'opacity-0' : 'opacity-100'" 6774 class="sticky bottom-0 h-8 -mt-8 shrink-0 pointer-events-none z-40 transition-opacity duration-200" 6775 style="margin-right: var(--rwp-scrollbar-width, 8px); background: linear-gradient(to top, var(--color-rwp-widget-bg), transparent);"></div> 6776 6777 </div> 6778 6779 </div> 6780 </template> 6781 </div> 6782 </template> 6783 6784 <rewards-panel 6785 data-template-id="rewards-panel" 6786 data-ajax-url="https://jackkeller.com/wp-admin/admin-ajax.php?rewardswp_locale=site" 6787 data-share-points-nonce="e9babc5c4b" 6788 data-advocate-nonce="e9babc5c4b" 6789 data-claim-nonce="f68cf984f4" 6790 data-user-points="0" 6791 ></rewards-panel>
vendor: 113 bytes, lines 6791-6793
6791 6792 6793 <script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script>
6793<script type="text/rocketlazyloadscript"> 6794 (function () { 6795 var c = document.body.className; 6796 c = c.replace(/woocommerce-no-js/, 'woocommerce-js'); 6797 document.body.className = c; 6798 })(); 6799 </script>
6799 6800
6800<script type="text/rocketlazyloadscript" id="underscore-js" data-rocket-src="https://jackkeller.com/wp-includes/js/underscore.min.js?ver=1.13.8" data-rocket-defer defer></script>
vendor: 1 bytes, line 6800
6800
6801<script id="wp-util-js-extra" type="968bfde1705c18b9099319f7-text/javascript"> 6802var _wpUtilSettings = {"ajax":{"url":"/wp-admin/admin-ajax.php"}}; 6803//# sourceURL=wp-util-js-extra 6804</script>
vendor: 1 bytes, line 6804
6804
6805<script type="text/rocketlazyloadscript" id="wp-util-js" data-rocket-src="https://jackkeller.com/wp-includes/js/wp-util.min.js?ver=aafee5e5c97070fdaa7b106373a3dd97" data-rocket-defer defer></script>
vendor: 1 bytes, line 6805
6805
6806<script id="wpautoterms_js_cookies_notice-js-extra" type="968bfde1705c18b9099319f7-text/javascript"> 6807var wpautoterms_js_cookies_notice = {"disable":"","cookie_name":"wpautoterms-cookies-notice","class":"wpautoterms-cookies-notice"}; 6808//# sourceURL=wpautoterms_js_cookies_notice-js-extra 6809</script>
vendor: 1 bytes, line 6809
6809
6810<script type="text/rocketlazyloadscript" data-minify="1" id="wpautoterms_js_cookies_notice-js" data-rocket-src="https://jackkeller.com/wp-content/cache/min/1/wp-content/plugins/auto-terms-of-service-and-privacy-policy/js/wpautoterms.js?ver=1789818263" data-rocket-defer defer></script>
vendor: 1 bytes, line 6810
6810
6811<script type="text/rocketlazyloadscript" data-minify="1" id="obfx-module-pub-js-social-sharing-0-js" data-rocket-src="https://jackkeller.com/wp-content/cache/min/1/wp-content/plugins/themeisle-companion/obfx_modules/social-sharing/js/public.js?ver=1789818469" data-rocket-defer defer></script>
vendor: 1 bytes, line 6811
6811
6812<script id="woocommerce-js-extra" type="968bfde1705c18b9099319f7-text/javascript"> 6813var woocommerce_params = {"ajax_url":"/wp-admin/admin-ajax.php","wc_ajax_url":"/?wc-ajax=%%endpoint%%","i18n_password_show":"Show password","i18n_password_hide":"Hide password"}; 6814//# sourceURL=woocommerce-js-extra 6815</script>
vendor: 1 bytes, line 6815
6815
6816<script type="text/rocketlazyloadscript" data-wp-strategy="defer" id="woocommerce-js" data-rocket-src="https://jackkeller.com/wp-content/plugins/woocommerce/assets/js/frontend/woocommerce.min.js?ver=11.1.1" data-rocket-defer defer></script>
vendor: 1 bytes, line 6816
6816
6817<script id="affiliatewp-frontend-notifications-js-extra" type="968bfde1705c18b9099319f7-text/javascript"> 6818var affiliateWPFENotifications = {"referralVar":"ref","cssUrl":"https://jackkeller.com/wp-content/plugins/affiliate-wp/assets/css/affiliatewp-frontend-notifications.min.css","ajaxUrl":"https://jackkeller.com/wp-admin/admin-ajax.php","darkMode":"auto"}; 6819//# sourceURL=affiliatewp-frontend-notifications-js-extra 6820</script>
vendor: 1 bytes, line 6820
6820
6821<script type="text/rocketlazyloadscript" id="affiliatewp-frontend-notifications-js" data-rocket-src="https://jackkeller.com/wp-content/plugins/affiliate-wp/assets/js/affiliatewp-frontend-notifications.min.js?ver=2.36.3" data-rocket-defer defer></script>
vendor: 1 bytes, line 6821
6821
6822<script id="ppcp-smart-button-js-extra" type="968bfde1705c18b9099319f7-text/javascript"> 6823var PayPalCommerceGateway = {"url":"https://www.paypal.com/sdk/js?client-id=BAAP_XbtrhR3uCwqoKlmW-OLJEMcz2fUQIPNnyv_RLeBF0E02dV6pQNpWs8tv_Nw4XW28mnzSAYwji1u7s¤cy=USD&integration-date=2026-09-02&components=buttons,funding-eligibility,saved-payment-methods,card-fields,fastlane&vault=true&commit=true&intent=capture&disable-funding=card,paylater&enable-funding=venmo&locale=en_US","url_params":{"client-id":"BAAP_XbtrhR3uCwqoKlmW-OLJEMcz2fUQIPNnyv_RLeBF0E02dV6pQNpWs8tv_Nw4XW28mnzSAYwji1u7s","currency":"USD","integration-date":"2026-09-02","components":"buttons,funding-eligibility,saved-payment-methods,card-fields,fastlane","vault":"true","commit":"true","intent":"capture","disable-funding":"bancontact,blik,eps,ideal,mybank,p24,trustly,multibanco,oxxo,card,paylater","enable-funding":"venmo","locale":"en_US"},"script_attributes":{"data-partner-attribution-id":"Woo_PPCP"},"client_id":"BAAP_XbtrhR3uCwqoKlmW-OLJEMcz2fUQIPNnyv_RLeBF0E02dV6pQNpWs8tv_Nw4XW28mnzSAYwji1u7s","currency":"USD","data_client_id":{"set_attribute":true,"endpoint":"/?wc-ajax=ppc-data-client-id","nonce":"58891ed755","user":0,"has_subscriptions":false,"paypal_subscriptions_enabled":false},"redirect":"https://jackkeller.com/checkout/","context":"mini-cart","ajax":{"simulate_cart":{"endpoint":"/?wc-ajax=ppc-simulate-cart","nonce":"99447ba00a"},"change_cart":{"endpoint":"/?wc-ajax=ppc-change-cart","nonce":"b3edfdfe25"},"create_order":{"endpoint":"/?wc-ajax=ppc-create-order","nonce":"137dbb9d8d"},"approve_order":{"endpoint":"/?wc-ajax=ppc-approve-order","nonce":"a36528d460"},"get_order":{"endpoint":"/?wc-ajax=ppc-get-order","nonce":"4f8589a142"},"approve_subscription":{"endpoint":"/?wc-ajax=ppc-approve-subscription","nonce":"21dd4c1931"},"save_checkout_form":{"endpoint":"/?wc-ajax=ppc-save-checkout-form","nonce":"cb79b526d0"},"validate_checkout":{"endpoint":"/?wc-ajax=ppc-validate-checkout","nonce":"9fb968031d"},"cart_script_params":{"endpoint":"/?wc-ajax=ppc-cart-script-params"},"create_setup_token":{"endpoint":"/?wc-ajax=ppc-create-setup-token","nonce":"9f148b094b"},"create_payment_token":{"endpoint":"/?wc-ajax=ppc-create-payment-token","nonce":"bb53374c64"},"create_payment_token_for_guest":{"endpoint":"/?wc-ajax=ppc-update-customer-id","nonce":"bca65fa9a9"},"update_shipping":{"endpoint":"/?wc-ajax=ppc-update-shipping","nonce":"d8f7d1d638"},"update_customer_shipping":{"shipping_options":{"endpoint":"https://jackkeller.com/wp-json/wc/store/v1/cart/select-shipping-rate"},"shipping_address":{"cart_endpoint":"https://jackkeller.com/wp-json/wc/store/v1/cart/","update_customer_endpoint":"https://jackkeller.com/wp-json/wc/store/v1/cart/update-customer"},"wp_rest_nonce":"bab3f4805b","update_shipping_method":"/?wc-ajax=update_shipping_method"}},"cart_contains_subscription":"","subscription_plan_id":"","subscription_custom_id":"","variable_paypal_subscription_variations":[],"variable_paypal_subscription_variation_from_cart":"","subscription_product_allowed":"","subscription_button_allowed":"1","locations_with_subscription_product":{"product":false,"payorder":false,"cart":false},"subscriptions_accept_manual_renewals":"","enforce_vault":"","can_save_vault_token":"1","is_free_trial_cart":"","bn_codes":{"checkout":"Woo_PPCP","cart":"Woo_PPCP","mini-cart":"Woo_PPCP","product":"Woo_PPCP"},"payer":null,"button":{"wrapper":"#ppc-button-ppcp-gateway","is_disabled":false,"mini_cart_wrapper":"#ppc-button-minicart","is_mini_cart_disabled":false,"cancel_wrapper":"#ppcp-cancel","mini_cart_style":{"layout":"horizontal","color":"gold","shape":"pill","label":"pay","tagline":"false","height":35},"style":{"layout":"horizontal","color":"gold","shape":"pill","label":"pay","tagline":"false"}},"separate_buttons":{"card":{"id":"ppcp-card-button-gateway","wrapper":"#ppc-button-ppcp-card-button-gateway","style":{"shape":"rect","color":"black","layout":"horizontal"}}},"hosted_fields":{"wrapper":"#ppcp-hosted-fields","labels":{"credit_card_number":"","cvv":"","mm_yy":"MM/YY","fields_empty":"C
6823ard payment details are missing. Please fill in all required fields.","fields_not_valid":"Unfortunately, your credit card details are not valid.","card_not_supported":"Unfortunately, we do not support your credit card.","cardholder_name_required":"Cardholder's first and last name are required, please fill the checkout form required fields."},"valid_cards":["mastercard","visa","amex","discover","american-express","master-card"],"contingency":"SCA_WHEN_REQUIRED"},"messages":{"wrapper":".ppcp-messages","is_hidden":false,"block":{"enabled":true},"amount":0,"placement":"payment","style":{"layout":"text","logo":{"type":"primary","position":"left"},"text":{"color":"black","size":"12"},"color":"blue","ratio":"1x1"}},"labels":{"error":{"generic":"Something went wrong. Please try again or choose another payment source.","required":{"generic":"Required form fields are not filled.","field":"%s is a required field.","elements":{"terms":"Please read and accept the terms and conditions to proceed with your order."}}},"billing_field":"Billing %s","shipping_field":"Shipping %s"},"simulate_cart":{"enabled":true,"throttling":5000},"order_id":"0","order_key":"","single_product_buttons_enabled":"1","mini_cart_buttons_enabled":"1","basic_checkout_validation_enabled":"","early_checkout_validation_enabled":"1","funding_sources_without_redirect":["paypal","paylater","venmo","card"],"user":{"is_logged":false,"has_wc_card_payment_tokens":false},"should_handle_shipping_in_paypal":"1","server_side_shipping_callback":{"enabled":true},"appswitch":{"enabled":true},"needShipping":"","vaultingEnabled":"1","productType":null,"manualRenewalEnabled":"","final_review_enabled":""}; 6824//# sourceURL=ppcp-smart-button-js-extra 6825</script>
vendor: 1 bytes, line 6825
6825
6826<script type="text/rocketlazyloadscript" data-minify="1" id="ppcp-smart-button-js" data-rocket-src="https://jackkeller.com/wp-content/cache/min/1/wp-content/plugins/woocommerce-paypal-payments/assets/ppcp-button-js-button.js?ver=1789818263" data-rocket-defer defer></script>
vendor: 1 bytes, line 6826
6826
6827<script type="text/rocketlazyloadscript" id="rocket-browser-checker-js-after"> 6828"use strict";var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){return protoProps&&defineProperties(Constructor.prototype,protoProps),staticProps&&defineProperties(Constructor,staticProps),Constructor}}();function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}var RocketBrowserCompatibilityChecker=function(){function RocketBrowserCompatibilityChecker(options){_classCallCheck(this,RocketBrowserCompatibilityChecker),this.passiveSupported=!1,this._checkPassiveOption(this),this.options=!!this.passiveSupported&&options}return _createClass(RocketBrowserCompatibilityChecker,[{key:"_checkPassiveOption",value:function(self){try{var options={get passive(){return!(self.passiveSupported=!0)}};window.addEventListener("test",null,options),window.removeEventListener("test",null,options)}catch(err){self.passiveSupported=!1}}},{key:"initRequestIdleCallback",value:function(){!1 in window&&(window.requestIdleCallback=function(cb){var start=Date.now();return setTimeout(function(){cb({didTimeout:!1,timeRemaining:function(){return Math.max(0,50-(Date.now()-start))}})},1)}),!1 in window&&(window.cancelIdleCallback=function(id){return clearTimeout(id)})}},{key:"isDataSaverModeOn",value:function(){return"connection"in navigator&&!0===navigator.connection.saveData}},{key:"supportsLinkPrefetch",value:function(){var elem=document.createElement("link");return elem.relList&&elem.relList.supports&&elem.relList.supports("prefetch")&&window.IntersectionObserver&&"isIntersecting"in IntersectionObserverEntry.prototype}},{key:"isSlowConnection",value:function(){return"connection"in navigator&&"effectiveType"in navigator.connection&&("2g"===navigator.connection.effectiveType||"slow-2g"===navigator.connection.effectiveType)}}]),RocketBrowserCompatibilityChecker}(); 6829//# sourceURL=rocket-browser-checker-js-after 6830</script>
vendor: 1 bytes, line 6830
6830
6831<script id="rocket-preload-links-js-extra" type="968bfde1705c18b9099319f7-text/javascript"> 6832var RocketPreloadLinksConfig = {"excludeUris":"/(?:.+/)?feed(?:/(?:.+/?)?)?$|/(?:.+/)?embed/|/checkout/??(.*)|/cart-2/?|/my-account/??(.*)|/(index.php/)?(.*)wp-json(/.*|$)|/refer/|/go/|/recommend/|/recommends/","usesTrailingSlash":"1","imageExt":"jpg|jpeg|gif|png|tiff|bmp|webp|avif|pdf|doc|docx|xls|xlsx|php","fileExt":"jpg|jpeg|gif|png|tiff|bmp|webp|avif|pdf|doc|docx|xls|xlsx|php|html|htm","siteUrl":"https://jackkeller.com","onHoverDelay":"100","rateThrottle":"3"}; 6833//# sourceURL=rocket-preload-links-js-extra 6834</script>
vendor: 1 bytes, line 6834
6834
6835<script type="text/rocketlazyloadscript" id="rocket-preload-links-js-after"> 6836(function() { 6837"use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},e=function(){function i(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(e,t,n){return t&&i(e.prototype,t),n&&i(e,n),e}}();function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var t=function(){function n(e,t){i(this,n),this.browser=e,this.config=t,this.options=this.browser.options,this.prefetched=new Set,this.eventTime=null,this.threshold=1111,this.numOnHover=0}return e(n,[{key:"init",value:function(){!this.browser.supportsLinkPrefetch()||this.browser.isDataSaverModeOn()||this.browser.isSlowConnection()||(this.regex={excludeUris:RegExp(this.config.excludeUris,"i"),images:RegExp(".("+this.config.imageExt+")$","i"),fileExt:RegExp(".("+this.config.fileExt+")$","i")},this._initListeners(this))}},{key:"_initListeners",value:function(e){-1<this.config.onHoverDelay&&document.addEventListener("mouseover",e.listener.bind(e),e.listenerOptions),document.addEventListener("mousedown",e.listener.bind(e),e.listenerOptions),document.addEventListener("touchstart",e.listener.bind(e),e.listenerOptions)}},{key:"listener",value:function(e){var t=e.target.closest("a"),n=this._prepareUrl(t);if(null!==n)switch(e.type){case"mousedown":case"touchstart":this._addPrefetchLink(n);break;case"mouseover":this._earlyPrefetch(t,n,"mouseout")}}},{key:"_earlyPrefetch",value:function(t,e,n){var i=this,r=setTimeout(function(){if(r=null,0===i.numOnHover)setTimeout(function(){return i.numOnHover=0},1e3);else if(i.numOnHover>i.config.rateThrottle)return;i.numOnHover++,i._addPrefetchLink(e)},this.config.onHoverDelay);t.addEventListener(n,function e(){t.removeEventListener(n,e,{passive:!0}),null!==r&&(clearTimeout(r),r=null)},{passive:!0})}},{key:"_addPrefetchLink",value:function(i){return this.prefetched.add(i.href),new Promise(function(e,t){var n=document.createElement("link");n.rel="prefetch",n.href=i.href,n.onload=e,n.onerror=t,document.head.appendChild(n)}).catch(function(){})}},{key:"_prepareUrl",value:function(e){if(null===e||"object"!==(void 0===e?"undefined":r(e))||!1 in e||-1===["http:","https:"].indexOf(e.protocol))return null;var t=e.href.substring(0,this.config.siteUrl.length),n=this._getPathname(e.href,t),i={original:e.href,protocol:e.protocol,origin:t,pathname:n,href:t+n};return this._isLinkOk(i)?i:null}},{key:"_getPathname",value:function(e,t){var n=t?e.substring(this.config.siteUrl.length):e;return n.startsWith("/")||(n="/"+n),this._shouldAddTrailingSlash(n)?n+"/":n}},{key:"_shouldAddTrailingSlash",value:function(e){return this.config.usesTrailingSlash&&!e.endsWith("/")&&!this.regex.fileExt.test(e)}},{key:"_isLinkOk",value:function(e){return null!==e&&"object"===(void 0===e?"undefined":r(e))&&(!this.prefetched.has(e.href)&&e.origin===this.config.siteUrl&&-1===e.href.indexOf("?")&&-1===e.href.indexOf("#")&&!this.regex.excludeUris.test(e.href)&&!this.regex.images.test(e.href))}}],[{key:"run",value:function(){"undefined"!=typeof RocketPreloadLinksConfig&&new n(new RocketBrowserCompatibilityChecker({capture:!0,passive:!0}),RocketPreloadLinksConfig).init()}}]),n}();t.run(); 6838}()); 6839 6840//# sourceURL=rocket-preload-links-js-after 6841</script>
vendor: 1 bytes, line 6841
6841
6842<script type="text/rocketlazyloadscript" id="zerif_bootstrap_script-js" data-rocket-src="https://jackkeller.com/wp-content/themes/zerif-pro/js/bootstrap.min.js?ver=2.3.0" data-rocket-defer defer></script>
vendor: 1 bytes, line 6842
6842
6843<script type="text/rocketlazyloadscript" id="zerif_scrollReveal_script-js" data-rocket-src="https://jackkeller.com/wp-content/themes/zerif-pro/js/scrollReveal.min.js?ver=2.3.0" data-rocket-defer defer></script>
vendor: 1 bytes, line 6843
6843
6844<script id="zerif_script-js-extra" type="968bfde1705c18b9099319f7-text/javascript"> 6845var zerifSettings = {"masonry":""}; 6846//# sourceURL=zerif_script-js-extra 6847</script>
vendor: 1 bytes, line 6847
6847
6848<script type="text/rocketlazyloadscript" data-minify="1" id="zerif_script-js" data-rocket-src="https://jackkeller.com/wp-content/cache/min/1/wp-content/themes/zerif-pro/js/zerif.js?ver=1789818263" data-rocket-defer defer></script>
vendor: 1 bytes, line 6848
6848
6849<script type="text/rocketlazyloadscript" data-minify="1" id="theme_skiplink-fix-js" data-rocket-src="https://jackkeller.com/wp-content/cache/min/1/wp-content/themes/zerif-pro/js/skiplink-fix.js?ver=1789818263" data-rocket-defer defer></script>
vendor: 1 bytes, line 6849
6849
6850<script type="text/rocketlazyloadscript" data-minify="1" data-wp-strategy="defer" defer id="woocommerce-analytics-client-js" data-rocket-src="https://jackkeller.com/wp-content/cache/min/1/wp-content/plugins/jetpack/jetpack_vendor/automattic/woocommerce-analytics/build/woocommerce-analytics-client.js?ver=1789818263"></script>
vendor: 1 bytes, line 6850
6850
6851<script id="af_tipping_donation-js-extra" type="968bfde1705c18b9099319f7-text/javascript"> 6852var af_tbw_ajax_obj = {"ajax_url":"https://jackkeller.com/wp-admin/admin-ajax.php","nonce":"6d8393124c","af_tbw_is_precent_calculated":"0"}; 6853//# sourceURL=af_tipping_donation-js-extra 6854</script>
vendor: 1 bytes, line 6854
6854
6855<script type="text/rocketlazyloadscript" data-minify="1" id="af_tipping_donation-js" data-rocket-src="https://jackkeller.com/wp-content/cache/min/1/wp-content/plugins/addify-tipping-at-cart-checkout/assets/js/front.js?ver=1789818263" data-rocket-defer defer></script>
vendor: 1 bytes, line 6855
6855
6856<script type="text/rocketlazyloadscript" data-minify="1" id="af_tipping_select2-js" data-rocket-src="https://jackkeller.com/wp-content/cache/min/1/wp-content/plugins/addify-tipping-at-cart-checkout/assets/js/select2.js?ver=1789818263" data-rocket-defer defer></script>
vendor: 1 bytes, line 6856
6856
6857<script type="text/rocketlazyloadscript" id="sourcebuster-js-js" data-rocket-src="https://jackkeller.com/wp-content/plugins/woocommerce/assets/js/sourcebuster/sourcebuster.min.js?ver=11.1.1" data-rocket-defer defer></script>
vendor: 1 bytes, line 6857
6857
6858<script id="wc-order-attribution-js-extra" type="968bfde1705c18b9099319f7-text/javascript"> 6859var wc_order_attribution = {"params":{"lifetime":1.0000000000000000818030539140313095458623138256371021270751953125e-5,"session":30,"base64":false,"ajaxurl":"https://jackkeller.com/wp-admin/admin-ajax.php","prefix":"wc_order_attribution_","allowTracking":true},"fields":{"source_type":"current.typ","referrer":"current_add.rf","utm_campaign":"current.cmp","utm_source":"current.src","utm_medium":"current.mdm","utm_content":"current.cnt","utm_id":"current.id","utm_term":"current.trm","utm_source_platform":"current.plt","utm_creative_format":"current.fmt","utm_marketing_tactic":"current.tct","session_entry":"current_add.ep","session_start_time":"current_add.fd","session_pages":"session.pgs","session_count":"udata.vst","user_agent":"udata.uag"}}; 6860//# sourceURL=wc-order-attribution-js-extra 6861</script>
vendor: 1 bytes, line 6861
6861
6862<script type="text/rocketlazyloadscript" id="wc-order-attribution-js" data-rocket-src="https://jackkeller.com/wp-content/plugins/woocommerce/assets/js/frontend/order-attribution.min.js?ver=11.1.1" data-rocket-defer defer></script>
vendor: 1 bytes, line 6862
6862
6863<script id="ppcp-fraudnet-js-extra" type="968bfde1705c18b9099319f7-text/javascript"> 6864var FraudNetConfig = {"f":"5c04ace9c4b8cb9b0b5f9017812e3818","s":"5KKFMCYHX8JME_checkout-page","sandbox":""}; 6865//# sourceURL=ppcp-fraudnet-js-extra 6866</script>
vendor: 1 bytes, line 6866
6866
6867<script type="text/rocketlazyloadscript" data-minify="1" id="ppcp-fraudnet-js" data-rocket-src="https://jackkeller.com/wp-content/cache/min/1/wp-content/plugins/woocommerce-paypal-payments/assets/ppcp-wc-gateway-js-fraudnet.js?ver=1789818263" data-rocket-defer defer></script>
vendor: 1 bytes, line 6867
6867
6868<script type="text/rocketlazyloadscript" id="rewardswp-main-js-before"> 6869window.rewardswpI18n = {"networkError":"Network error. Please try again.","genericError":"An error occurred. Please try again.","loadDataError":"We couldn't load your rewards. Please try again.","signupError":"We couldn't create your account. Please try again.","loginError":"We couldn't sign you in. Please check your details and try again.","birthdayError":"We couldn't save your birthday. Please try again.","claimError":"We couldn't claim your reward. Please try again.","couponError":"We couldn't apply the coupon. Please try again.","redeemError":"We couldn't redeem your points. Please try again.","claimSuccess":"Reward claimed successfully!","alreadyClaimed":"You already claimed this reward!","giftReceived":"You have received your gift!","discountCouponAmount":"%s off coupon","discountCouponPercent":"%d%% off coupon","freeShippingReward":"Free shipping","freeProductReward":"Free product","rewardFallback":"Reward","shareTitle":"Join our rewards program","shareTextGeneric":"Join me and we both get rewards!","shareText":"Join me on %1$s and we both get rewards!","shareEmailSubject":"Join me on %1$s","shareProgramFallback":"our rewards program","launcherLabel":"Rewards","programNameDefault":"Rewards","pointsSingular":"point","pointsPlural":"points","claimRewardLabel":"Claim reward","claimGiftLabel":"Claim gift","claimedGiftLabel":"Your gift","activateProductLabel":"Activate free product","claimProductLabel":"Claim free product","applyToCartLabel":"Apply to cart","applyCouponLabel":"Apply coupon","couponAppliedLabel":"Coupon applied"}; 6870const rewardswpMainVars={"ajaxUrl":"https:\/\/jackkeller.com\/wp-admin\/admin-ajax.php?rewardswp_locale=site","mainCssUrl":"https:\/\/jackkeller.com\/wp-content\/plugins\/rewardswp-pro\/dist\/main.css?ver=1.4.6","brandForegroundColor":"#ffffff"} 6871window.rewardswpCookieConfig={path:"\/",domain:"jackkeller.com"}; 6872//# sourceURL=rewardswp-main-js-before 6873</script>
vendor: 1 bytes, line 6873
6873
6874<script type="text/rocketlazyloadscript" data-minify="1" async data-wp-strategy="async" id="rewardswp-main-js" data-rocket-src="https://jackkeller.com/wp-content/cache/min/1/wp-content/plugins/rewardswp-pro/dist/main.js?ver=1789818263"></script>
vendor: 1 bytes, line 6874
6874
6875<script type="text/rocketlazyloadscript" id="googlesitekit-events-provider-content-events-js-before"> 6876window._googlesitekit = window._googlesitekit || {}; 6877window._googlesitekit.contentEvents = {"postID":646,"isSinglePost":false,"hasVimeoEmbed":false}; 6878//# sourceURL=googlesitekit-events-provider-content-events-js-before 6879</script>
vendor: 1 bytes, line 6879
6879
6880<script type="text/rocketlazyloadscript" id="googlesitekit-events-provider-content-events-js" data-rocket-src="https://jackkeller.com/wp-content/plugins/google-site-kit/dist/assets/js/googlesitekit-events-provider-content-events-bb83c1a0aedefa5d25d1.js" defer></script>
vendor: 1 bytes, line 6880
6880
6881<script type="text/rocketlazyloadscript" id="googlesitekit-events-provider-woocommerce-js-before"> 6882window._googlesitekit.wcdata = window._googlesitekit.wcdata || {}; 6883window._googlesitekit.wcdata.products = []; 6884window._googlesitekit.wcdata.add_to_cart = null; 6885window._googlesitekit.wcdata.currency = "USD"; 6886window._googlesitekit.wcdata.currencyMinorUnit = 2; 6887window._googlesitekit.wcdata.eventsToTrack = ["add_to_cart","purchase"]; 6888//# sourceURL=googlesitekit-events-provider-woocommerce-js-before 6889</script>
vendor: 1 bytes, line 6889
6889
6890<script type="text/rocketlazyloadscript" id="googlesitekit-events-provider-woocommerce-js" data-rocket-src="https://jackkeller.com/wp-content/plugins/google-site-kit/dist/assets/js/googlesitekit-events-provider-woocommerce-86c5a3ff303665006998.js" defer></script>
vendor: 1 bytes, line 6890
6890
6891<script id="jetpack-stats-js-before" type="968bfde1705c18b9099319f7-text/javascript"> 6892_stq = window._stq || []; 6893_stq.push([ "view", {"v":"ext","blog":"252563072","post":"646","tz":"-4","srv":"jackkeller.com","j":"1:16.2"} ]); 6894_stq.push([ "clickTrackerInit", "252563072", "646" ]); 6895//# sourceURL=jetpack-stats-js-before 6896</script>
vendor: 1 bytes, line 6896
6896
6897<script data-wp-strategy="defer" defer fetchpriority="low" id="jetpack-stats-js" src="https://stats.wp.com/e-202641.js" type="968bfde1705c18b9099319f7-text/javascript"></script>
6897 6898
6898<script type="text/rocketlazyloadscript" data-rocket-type="text/javascript"> 6899 (function() { 6900 window.wcAnalytics = window.wcAnalytics || {}; 6901 const wcAnalytics = window.wcAnalytics; 6902 6903 // Set the assets URL for webpack to find the split assets. 6904 wcAnalytics.assets_url = 'https://jackkeller.com/wp-content/plugins/jetpack/jetpack_vendor/automattic/woocommerce-analytics/src/../build/'; 6905 6906 // Set the REST API tracking endpoint URL. 6907 wcAnalytics.trackEndpoint = "https://jackkeller.com/wp-json/woocommerce-analytics/v1/track"; 6908 6909 // Set common properties for all events. 6910 wcAnalytics.commonProps = {"ui":0,"blog_id":252563072,"store_id":"8c0cf046-3a2b-4efc-97ac-53b290a82d95","url":"https://jackkeller.com","woo_version":"11.1.1","wp_version":"7.1.2","store_admin":0,"device":"desktop","store_currency":"USD","timezone":"America/New_York","is_guest":1}; 6911 6912 // Set the event queue. 6913 wcAnalytics.eventQueue = []; 6914 6915 // Features. 6916 wcAnalytics.features = { 6917 ch: false, 6918 sessionTracking: false, 6919 proxy: false, 6920 }; 6921 6922 wcAnalytics.breadcrumbs = ["Tax Record Search"]; 6923 6924 // Page context flags. 6925 wcAnalytics.pages = { 6926 isAccountPage: false, 6927 isCart: false, 6928 }; 6929 })(); 6930 </script>
6930 6931 <div data-wpr-lazyrender="1" class="wpautoterms-footer"><p> 6932 <a href="https://jackkeller.com/wpautoterms/dmca/" target="_blank">DMCA</a><span class="separator"> - </span><a href="https://jackkeller.com/wpautoterms/customer-conduct/" target="_blank">Customer Conduct</a><span class="separator"> - </span><a href="https://jackkeller.com/wpautoterms/privacy-policy/" target="_blank">Privacy Policy</a><span class="separator"> - </span><a href="https://jackkeller.com/wpautoterms/accessibility/" target="_blank">Accessibility</a><span class="separator"> - </span><a href="https://jackkeller.com/wpautoterms/terms-and-conditions-2/" target="_blank">Terms and Conditions</a></p> 6933</div><div data-wpr-lazyrender="1" id="wpautoterms-bottom-static-container"><div class="wpautoterms-cookies-notice" style="display:none"> 6934 We use cookies to ensure that we give you the best experience on our website <a href="javascript:void(0);" class="wpautoterms-notice-close" 6935 data-value="1" data-cookie="wpautoterms-cookies-notice"> 6936 Close</a> 6937</div></div>
6937<script type="968bfde1705c18b9099319f7-text/javascript">window.lazyLoadOptions=[{elements_selector:"img[data-lazy-src],.rocket-lazyload,iframe[data-lazy-src]",data_src:"lazy-src",data_srcset:"lazy-srcset",data_sizes:"lazy-sizes",class_loading:"lazyloading",class_loaded:"lazyloaded",threshold:300,callback_loaded:function(element){if(element.tagName==="IFRAME"&&element.dataset.rocketLazyload=="fitvidscompatible"){if(element.classList.contains("lazyloaded")){if(typeof window.jQuery!="undefined"){if(jQuery.fn.fitVids){jQuery(element).parent().fitVids()}}}}}},{elements_selector:".rocket-lazyload",data_src:"lazy-src",data_srcset:"lazy-srcset",data_sizes:"lazy-sizes",class_loading:"lazyloading",class_loaded:"lazyloaded",threshold:300,}];window.addEventListener('LazyLoad::Initialized',function(e){var lazyLoadInstance=e.detail.instance;if(window.MutationObserver){var observer=new MutationObserver(function(mutations){var image_count=0;var iframe_count=0;var rocketlazy_count=0;mutations.forEach(function(mutation){for(var i=0;i<mutation.addedNodes.length;i++){if(typeof mutation.addedNodes[i].getElementsByTagName!=='function'){continue} 6938if(typeof mutation.addedNodes[i].getElementsByClassName!=='function'){continue} 6939images=mutation.addedNodes[i].getElementsByTagName('img');is_image=mutation.addedNodes[i].tagName=="IMG";iframes=mutation.addedNodes[i].getElementsByTagName('iframe');is_iframe=mutation.addedNodes[i].tagName=="IFRAME";rocket_lazy=mutation.addedNodes[i].getElementsByClassName('rocket-lazyload');image_count+=images.length;iframe_count+=iframes.length;rocketlazy_count+=rocket_lazy.length;if(is_image){image_count+=1} 6940if(is_iframe){iframe_count+=1}}});if(image_count>0||iframe_count>0||rocketlazy_count>0){lazyLoadInstance.update()}});var b=document.getElementsByTagName("body")[0];var config={childList:!0,subtree:!0};observer.observe(b,config)}},!1)</script>
6940<script data-no-minify="1" async src="https://jackkeller.com/wp-content/plugins/wp-rocket/assets/js/lazyload/17.8.3/lazyload.min.js" type="968bfde1705c18b9099319f7-text/javascript"></script>
6940<script type="968bfde1705c18b9099319f7-text/javascript">function lazyLoadThumb(e,alt,l){var t='<img data-lazy-src="https://i.ytimg.com/vi_webp/ID/hqdefault.webp" alt="" width="480" height="360"><noscript><img src="https://i.ytimg.com/vi_webp/ID/hqdefault.webp" alt="" width="480" height="360"></noscript>',a='<button class="play" aria-label="Play Youtube video"></button>';if(l){t=t.replace('data-lazy-','');t=t.replace('loading="lazy"','');t=t.replace(/<noscript>.*?<\/noscript>/g,'');}t=t.replace('alt=""','alt="'+alt+'"');return t.replace("ID",e)+a}function lazyLoadYoutubeIframe(){var e=document.createElement("iframe"),t="ID?autoplay=1";t+=0===this.parentNode.dataset.query.length?"":"&"+this.parentNode.dataset.query;e.setAttribute("src",t.replace("ID",this.parentNode.dataset.src)),e.setAttribute("frameborder","0"),e.setAttribute("allowfullscreen","1"),e.setAttribute("allow","accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture"),this.parentNode.parentNode.replaceChild(e,this.parentNode)}document.addEventListener("DOMContentLoaded",function(){var exclusions=["House-Test-225K.jpg","a-board-1000px_orig-e1542900526451.png","home_finder2.jpg"];var e,t,p,u,l,a=document.getElementsByClassName("rll-youtube-player");for(t=0;t<a.length;t++)(e=document.createElement("div")),(u='https://i.ytimg.com/vi_webp/ID/hqdefault.webp'),(u=u.replace('ID',a[t].dataset.id)),(l=exclusions.some(exclusion=>u.includes(exclusion))),e.setAttribute("data-id",a[t].dataset.id),e.setAttribute("data-query",a[t].dataset.query),e.setAttribute("data-src",a[t].dataset.src),(e.innerHTML=lazyLoadThumb(a[t].dataset.id,a[t].dataset.alt,l)),a[t].appendChild(e),(p=e.querySelector(".play")),(p.onclick=lazyLoadYoutubeIframe)});</script>
vendor: 143 bytes, lines 6940-6941
6940 6941<script src="/cdn-cgi/scripts/7d0fa10a/cloudflare-static/rocket-loader.min.js" data-cf-settings="968bfde1705c18b9099319f7-|49" defer></script>
6941<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"85379b1b718d49878627dce5ec41ba20","r":1,"spa":2}' crossorigin="anonymous"></script>
vendor: 1 bytes, line 6941
6941
6942<script>(function(){function c(){var b=a.contentDocument||(a.contentWindow&&a.contentWindow.document);if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'a46537ad1e442af4',t:'MTc5MTI5NTQ5MA=='};var a=document.createElement('script');a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script>
6942</body> 6943 6944</html> 6945<!-- Rocket no webp -->
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.