1<!doctype html> 2<html class="no-js" lang="en"> 3 <head> 4 5 6
7<script> 8"Linux x86_64"==navigator.platform&&(YETT_BLACKLIST=[/moment/, /global.js/, /script.js/, /kkpeyzoq.js/, /visually-a.js/, /kkpeyzoq.js/, /visually-io.com/, /visually.esm.js/, /visually-a.esm.js/, /load.capi.rockymountainoils.com/, /slick.min.js/, /mm_412bb6e2-1d7f-4855-a404-67a8218945ce-32594417.js/, /Attentive/, /facets.js/, /owl.carousel.js/, /109404662474929.js/, /visually.js/, /slick.min.js/, /storefront/, /jquery-3.6.1.min.js/, /rockymountainoils/, /visually-a.esm.js/, /googletagmanager/, /bing/, /setubridgeapps/, /sentry/, /tiktokw/, /mm-uxrv/, /google/, /loomi-prod/, /polaranalytics/, /pinterest/, /googleadservices/, /jsdelivr/, /config-security/, /cdnhub/, /clarity/, /visually-io/, /main/, /yotpo/, /unified-tag.js/, /attn/, /boomerang/, /klaviyo/, /506/, /dixa/, /tiktok/, /facebook/, /storefront/, /google-analytics/, /pinimg/],function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e(t.yett={})}(this,(function(t){"use strict";var e={blacklist:window.YETT_BLACKLIST,whitelist:window.YETT_WHITELIST},r={blacklisted:[]},n=function(t,r){return t&&(!r||"javascript/blocked"!==r)&&(!e.blacklist||e.blacklist.some((function(e){return e.test(t)})))&&(!e.whitelist||e.whitelist.every((function(e){return!e.test(t)})))},i=function(t){var r=t.getAttribute("src");return e.blacklist&&e.blacklist.every((function(t){return!t.test(r)}))||e.whitelist&&e.whitelist.some((function(t){return t.test(r)}))},c=new MutationObserver((function(t){t.forEach((function(t){for(var e=t.addedNodes,i=function(t){var i=e[t];if(1===i.nodeType&&"SCRIPT"===i.tagName){var c=i.src,o=i.type;n(c,o)&&(r.blacklisted.push(i.cloneNode()),i.type="javascript/blocked",i.addEventListener("beforescriptexecute",(function t(e){"javascript/blocked"===i.getAttribute("type")&&e.preventDefault(),i.removeEventListener("beforescriptexecute",t)})),i.parentElement.removeChild(i))}},c=0;c<e.length;c++)i(c)}))}));c.observe(document.documentElement,{childList:!0,subtree:!0});var o=document.createElement;document.createElement=function(){for(var t=arguments.length,e=Array(t),r=0;r<t;r++)e[r]=arguments[r];if("script"!==e[0].toLowerCase())return o.bind(document).apply(void 0,e);var i=o.bind(document).apply(void 0,e),c=i.setAttribute.bind(i);return Object.defineProperties(i,{src:{get:function(){return i.getAttribute("src")},set:function(t){return n(t,i.type)&&c("type","javascript/blocked"),c("src",t),!0}},type:{set:function(t){var e=n(i.src,i.type)?"javascript/blocked":t;return c("type",e),!0}}}),i.setAttribute=function(t,e){"type"===t||"src"===t?i[t]=e:HTMLScriptElement.prototype.setAttribute.call(i,t,e)},i};var a=function(t){if(Array.isArray(t)){for(var e=0,r=Array(t.length);e<t.length;e++)r[e]=t[e];return r}return Array.from(t)},l=new RegExp("[|\\{}()[\\]^$+*?.]","g");t.unblock=function(){for(var t=arguments.length,n=Array(t),o=0;o<t;o++)n[o]=arguments[o];n.length<1?(e.blacklist=[],e.whitelist=[]):(e.blacklist&&(e.blacklist=e.blacklist.filter((function(t){return n.every((function(e){return!t.test(e)}))}))),e.whitelist&&(e.whitelist=[].concat(a(e.whitelist),a(n.map((function(t){var r=".*"+t.replace(l,"\\$&")+".*";return e.whitelist.find((function(t){return t.toString()===r.toString()}))?null:new RegExp(r)})).filter(Boolean)))));for(var s=document.querySelectorAll('script[type="javascript/blocked"]'),u=0;u<s.length;u++){var p=s[u];i(p)&&(p.type="application/javascript",r.blacklisted.push(p),p.parentElement.removeChild(p))}var d=0;[].concat(a(r.blacklisted)).forEach((function(t,e){if(i(t)){var n=document.createElement("script");n.setAttribute("src",t.src),n.setAttribute("type","application/javascript"),document.head.appendChild(n),r.blacklisted.splice(e-d,1),d++}})),e.blacklist&&e.blacklist.length<1&&c.disconnect()},Object.defineProperty(t,"__esModule",{value:!0})}))); 9 </script>
9 10 11 12 13 14 15
15<script async src="https://apis.google.com/js/platform.js?onload=renderOptIn"></script>
15 16
16<script async src="//www.rockymountainoils.com/cdn/shop/t/383/assets/google-customer-reviews-opt-in.js?v=52521846660400274041785434195"></script>
16 17 18 19 20 21 <meta charset="utf-8"> 22 <meta name="google-site-verification" content="WWhxn_icXJEf5kyTLmNoD9v2dsBsn9PWagB3qNvdWsM"> 23 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 24 <meta name="viewport" content="width=device-width,initial-scale=1"> 25 <meta name="theme-color" content=""> 26 <link rel="preconnect" href="https://cdn.shopify.com" crossorigin><link rel="preconnect" href="https://fonts.shopifycdn.com" crossorigin><link rel="preload" as="font" href="//www.rockymountainoils.com/cdn/fonts/roboto/roboto_n4.2019d890f07b1852f56ce63ba45b2db45d852cba.woff2" type="font/woff2" crossorigin><link rel="preload" as="font" href="//www.rockymountainoils.com/cdn/fonts/roboto/roboto_n7.f38007a10afbbde8976c4056bfe890710d51dec2.woff2" type="font/woff2" crossorigin> 27 28 29 30 31<title> 32 100% Pure & Natural Essential Oils | Rocky Mountain Oils 33</title> 34 35 36 <meta name="description" content="Rocky Mountain Oils provides 100% pure essential oils and essential oil products for home, health and beauty so that you can confidently care for yourself and your family."> 37 38<link rel="icon" type="image/png" href="//www.rockymountainoils.com/cdn/shop/files/favicon_8b484a6e-7120-4921-9a13-1ffef1a1c50e.png?crop=center&height=32&v=1671795913&width=32"><link rel="canonical" href="https://www.rockymountainoils.com/"> 39<link rel="preconnect" href="https://fonts.shopifycdn.com" crossorigin> 40 41 42<meta property="og:site_name" content="Rocky Mountain Oils"> 43<meta property="og:url" content="https://www.rockymountainoils.com/"> 44<meta property="og:title" content="100% Pure & Natural Essential Oils | Rocky Mountain Oils"> 45<meta property="og:type" content="website"> 46<meta property="og:description" content="Rocky Mountain Oils provides 100% pure essential oils and essential oil products for home, health and beauty so that you can confidently care for yourself and your family."><meta property="og:image" content="http://www.rockymountainoils.com/cdn/shop/files/rmo-logo_28785182-8413-4861-93fa-f4aaa5ce9a84.png?height=628&pad_color=fff&v=1671092957&width=1200"> 47 <meta property="og:image:secure_url" content="https://www.rockymountainoils.com/cdn/shop/files/rmo-logo_28785182-8413-4861-93fa-f4aaa5ce9a84.png?height=628&pad_color=fff&v=1671092957&width=1200"> 48 <meta property="og:image:width" content="1200"> 49 <meta property="og:image:height" content="628"><meta name="twitter:card" content="summary_large_image"> 50<meta name="twitter:title" content="100% Pure & Natural Essential Oils | Rocky Mountain Oils"> 51<meta name="twitter:description" content="Rocky Mountain Oils provides 100% pure essential oils and essential oil products for home, health and beauty so that you can confidently care for yourself and your family."> 52 53<meta name="apple-itunes-app" content="app-id=724532626"> 54 55
56<script type="application/ld+json"> 57 { 58 "@context": "http://schema.org", 59 "@type": "Organization", 60 "name": "Rocky Mountain Oils", 61 62 "sameAs": [ 63 "", 64 "https:\/\/facebook.com\/RockyMountainOils\/", 65 "https:\/\/pinterest.com\/rmoessentialoil\/", 66 "https:\/\/instagram.com\/rockymountainoils\/", 67 "", 68 "", 69 "", 70 "https:\/\/www.youtube.com\/channel\/UChhqiDDsyWcABEbZ0_Pk3og", 71 "" 72 ], 73 "url": "https:\/\/www.rockymountainoils.com" 74 } 75</script>
75 76
76<script type="application/ld+json"> 77 { 78 "@context": "http://schema.org", 79 "@type": "WebSite", 80 "name": "Rocky Mountain Oils", 81 "potentialAction": { 82 "@type": "SearchAction", 83 "target": "https:\/\/www.rockymountainoils.com\/search?q={search_term_string}", 84 "query-input": "required name=search_term_string" 85 }, 86 "url": "https:\/\/www.rockymountainoils.com" 87 } 88 </script>
88 89 <style>:root{--bs-blue:#024ec0;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-white:#fff;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-primary:#024ec0;--bs-secondary:#6c757d;--bs-success:#198754;--bs-info:#0dcaf0;--bs-warning:#ffc107;--bs-danger:#dc3545;--bs-light:#f8f9fa;--bs-dark:#212529;--bs-font-sans-serif:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--bs-font-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--bs-gradient:linear-gradient(180deg,rgba(255,255,255,0.15),rgba(255,255,255,0))}*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--bs-font-sans-serif);font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){.h1,h1{font-size:2.5rem}}.h2,h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){.h2,h2{font-size:2rem}}.h3,h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){.h3,h3{font-size:1.75rem}}.h4,h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){.h4,h4{font-size:1.5rem}}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}.small,small{font-size:.875em}.mark,mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#024ec0;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit}code,kbd,pre,samp{font-family:var(--bs-font-monospace);font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}
89[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:calc(1.625rem + 4.5vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-1{font-size:5rem}}.display-2{font-size:calc(1.575rem + 3.9vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-2{font-size:4.5rem}}.display-3{font-size:calc(1.525rem + 3.3vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-3{font-size:4rem}}.display-4{font-size:calc(1.475rem + 2.7vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-4{font-size:3.5rem}}.display-5{font-size:calc(1.425rem + 2.1vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-5{font-size:3rem}}.display-6{font-size:calc(1.375rem + 1.5vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-6{font-size:2.5rem}}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:.875em;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:.875em;color:#6c757d}.blockquote-footer::before{content:"â "}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:.875em;color:#6c757d}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{width:100%;padding-right:var(--bs-gutter-x,.75rem);padding-left:var(--bs-gutter-x,.75rem);margin-right:auto;margin-left:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}@media (min-width:1400px){.container,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{max-width:1320px}}.row{--bs-gutter-x:1.5rem;--bs-gutter-y:0;display:flex;flex-wrap:wrap;margin-top:calc(var(--bs-gutter-y) * -1);margin-right:calc(var(--bs-gutter-x) * -.5);margin-left:calc(var(--bs-gutter-x) * -.5)}.row>*{flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-top:var(--bs-gutter-y)}.col{flex:1 0 0}.row-cols-auto>*{flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-4>*{flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;width:16.6666666667%}@media (min-width:576px){.col-sm{flex:1 0 0}.row-cols-sm-auto>*{flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-sm-4>*{flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;width:16.6666666667%}}@media (min-width:768px){.col-md{flex:1 0 0}.row-cols-md-auto>*{flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-md-4>*{flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;width:16.6666666667%}}@media (min-width:992px){.col-lg{flex:1 0 0}.row-cols-lg-auto>*{flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-lg-4>*{flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;width:16.6666666667%}}@media (min-width:1200px){.col-xl{flex:1 0 0}.row-cols-xl-auto>*{flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xl-4>*{flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;width:16.6666666667%}}@media (min-width:1400px){.col-xxl{flex:1 0 0}.row-cols-xxl-auto>*{flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xxl-4>*{flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;width:16.6666666667%}}.col-auto{flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;width:8.33333333%}.col-2{flex:0 0 auto;width:16.66666667%}.col-3{flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;width:33.33333333%}.col-5{flex:0 0 auto;width:41.66666667%}.col-6{flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;width:58.33333333%}.col-8{flex:0 0 auto;width:66.66666667%}.col-9{flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;width:83.33333333%}.col-11{flex:0 0 auto;width:91.66666667%}.col-12{flex:0 0 auto;width:100%}.offset-1{margin-left:8.33333333%}.offset-2{margin-left:16.66666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333333%}.offset-5{margin-left:41.66666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333333%}.offset-8{margin-left:66.66666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333333%}.offset-11{margin-left:91.66666667%}.g-0,.gx-0{--bs-gutter-x:0}.g-0,.gy-0{--bs-gutter-y:0}.g-1,.gx-1{--bs-gutter-x:.25rem}.g-1,.gy-1{--bs-gutter-y:.25rem}.g-2,.gx-2{--bs-gutter-x:.5rem}
89.g-2,.gy-2{--bs-gutter-y:.5rem}.g-3,.gx-3{--bs-gutter-x:1rem}.g-3,.gy-3{--bs-gutter-y:1rem}.g-4,.gx-4{--bs-gutter-x:1.5rem}.g-4,.gy-4{--bs-gutter-y:1.5rem}.g-5,.gx-5{--bs-gutter-x:3rem}.g-5,.gy-5{--bs-gutter-y:3rem}@media (min-width:576px){.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.33333333%}.col-sm-2{flex:0 0 auto;width:16.66666667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;width:33.33333333%}.col-sm-5{flex:0 0 auto;width:41.66666667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.33333333%}.col-sm-8{flex:0 0 auto;width:66.66666667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.33333333%}.col-sm-11{flex:0 0 auto;width:91.66666667%}.col-sm-12{flex:0 0 auto;width:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333333%}.offset-sm-2{margin-left:16.66666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333333%}.offset-sm-5{margin-left:41.66666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333333%}.offset-sm-8{margin-left:66.66666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333333%}.offset-sm-11{margin-left:91.66666667%}.g-sm-0,.gx-sm-0{--bs-gutter-x:0}.g-sm-0,.gy-sm-0{--bs-gutter-y:0}.g-sm-1,.gx-sm-1{--bs-gutter-x:.25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y:.25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x:.5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y:.5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x:1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y:1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x:1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y:1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x:3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y:3rem}}@media (min-width:768px){.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.33333333%}.col-md-2{flex:0 0 auto;width:16.66666667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.33333333%}.col-md-5{flex:0 0 auto;width:41.66666667%}.col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.33333333%}.col-md-8{flex:0 0 auto;width:66.66666667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.33333333%}.col-md-11{flex:0 0 auto;width:91.66666667%}.col-md-12{flex:0 0 auto;width:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333333%}.offset-md-2{margin-left:16.66666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333333%}.offset-md-5{margin-left:41.66666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333333%}.offset-md-8{margin-left:66.66666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333333%}.offset-md-11{margin-left:91.66666667%}.g-md-0,.gx-md-0{--bs-gutter-x:0}.g-md-0,.gy-md-0{--bs-gutter-y:0}
89.g-md-1,.gx-md-1{--bs-gutter-x:.25rem}.g-md-1,.gy-md-1{--bs-gutter-y:.25rem}.g-md-2,.gx-md-2{--bs-gutter-x:.5rem}.g-md-2,.gy-md-2{--bs-gutter-y:.5rem}.g-md-3,.gx-md-3{--bs-gutter-x:1rem}.g-md-3,.gy-md-3{--bs-gutter-y:1rem}.g-md-4,.gx-md-4{--bs-gutter-x:1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y:1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x:3rem}.g-md-5,.gy-md-5{--bs-gutter-y:3rem}}@media (min-width:992px){.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.33333333%}.col-lg-2{flex:0 0 auto;width:16.66666667%}.col-lg-3{flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;width:33.33333333%}.col-lg-5{flex:0 0 auto;width:41.66666667%}.col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.33333333%}.col-lg-8{flex:0 0 auto;width:66.66666667%}.col-lg-9{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.33333333%}.col-lg-11{flex:0 0 auto;width:91.66666667%}.col-lg-12{flex:0 0 auto;width:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333333%}.offset-lg-2{margin-left:16.66666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333333%}.offset-lg-5{margin-left:41.66666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333333%}.offset-lg-8{margin-left:66.66666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333333%}.offset-lg-11{margin-left:91.66666667%}.g-lg-0,.gx-lg-0{--bs-gutter-x:0}.g-lg-0,.gy-lg-0{--bs-gutter-y:0}.g-lg-1,.gx-lg-1{--bs-gutter-x:.25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y:.25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x:.5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y:.5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x:1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y:1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x:1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y:1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x:3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y:3rem}}@media (min-width:1200px){.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.33333333%}.col-xl-2{flex:0 0 auto;width:16.66666667%}.col-xl-3{flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;width:33.33333333%}.col-xl-5{flex:0 0 auto;width:41.66666667%}.col-xl-6{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.33333333%}.col-xl-8{flex:0 0 auto;width:66.66666667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.33333333%}.col-xl-11{flex:0 0 auto;width:91.66666667%}.col-xl-12{flex:0 0 auto;width:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333333%}.offset-xl-2{margin-left:16.66666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333333%}.offset-xl-5{margin-left:41.66666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333333%}.offset-xl-8{margin-left:66.66666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333333%}.offset-xl-11{margin-left:91.66666667%}.g-xl-0,.gx-xl-0{--bs-gutter-x:0}.g-xl-0,.gy-xl-0{--bs-gutter-y:0}.g-xl-1,.gx-xl-1{--bs-gutter-x:.25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y:.25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x:.5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y:.5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x:1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y:1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x:1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y:1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x:3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y:3rem}}@media (min-width:1400px){.col-xxl-auto{flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;width:8.33333333%}.col-xxl-2{flex:0 0 auto;width:16.66666667%}.col-xxl-3{flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;width:33.33333333%}.col-xxl-5{flex:0 0 auto;width:41.66666667%}.col-xxl-6{flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;width:58.33333333%}.col-xxl-8{flex:0 0 auto;width:66.66666667%}.col-xxl-9{flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;width:83.33333333%}.col-xxl-11{flex:0 0 auto;width:91.66666667%}.col-xxl-12{flex:0 0 auto;width:100%}.offset-xxl-0{margin-left:0}.offset-xxl-1{margin-left:8.33333333%}.offset-xxl-2{margin-left:16.66666667%}.offset-xxl-3{margin-left:25%}.offset-xxl-4{margin-left:33.33333333%}.offset-xxl-5{margin-left:41.66666667%}.offset-xxl-6{margin-left:50%}.offset-xxl-7{margin-left:58.33333333%}.offset-xxl-8{margin-left:66.66666667%}.offset-xxl-9{margin-left:75%}
89.offset-xxl-10{margin-left:83.33333333%}.offset-xxl-11{margin-left:91.66666667%}.g-xxl-0,.gx-xxl-0{--bs-gutter-x:0}.g-xxl-0,.gy-xxl-0{--bs-gutter-y:0}.g-xxl-1,.gx-xxl-1{--bs-gutter-x:.25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y:.25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x:.5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y:.5rem}.g-xxl-3,.gx-xxl-3{--bs-gutter-x:1rem}.g-xxl-3,.gy-xxl-3{--bs-gutter-y:1rem}.g-xxl-4,.gx-xxl-4{--bs-gutter-x:1.5rem}.g-xxl-4,.gy-xxl-4{--bs-gutter-y:1.5rem}.g-xxl-5,.gx-xxl-5{--bs-gutter-x:3rem}.g-xxl-5,.gy-xxl-5{--bs-gutter-y:3rem}}.table{--bs-table-bg:transparent;--bs-table-accent-bg:transparent;--bs-table-striped-color:#212529;--bs-table-striped-bg:rgba(0,0,0,0.05);--bs-table-active-color:#212529;--bs-table-active-bg:rgba(0,0,0,0.1);--bs-table-hover-color:#212529;--bs-table-hover-bg:rgba(0,0,0,0.075);width:100%;margin-bottom:1rem;color:#212529;vertical-align:top;border-color:#dee2e6}.table>:not(caption)>*>*{padding:.5rem;background-color:var(--bs-table-bg);border-bottom-width:1px;box-shadow:inset 0 0 0 9999px var(--bs-table-accent-bg)}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table>:not(:last-child)>:last-child>*{border-bottom-color:currentColor}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem}.table-bordered>:not(caption)>*{border-width:1px 0}.table-bordered>:not(caption)>*>*{border-width:0 1px}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-striped>tbody>tr:nth-of-type(odd){--bs-table-accent-bg:var(--bs-table-striped-bg);color:var(--bs-table-striped-color)}.table-active{--bs-table-accent-bg:var(--bs-table-active-bg);color:var(--bs-table-active-color)}.table-hover>tbody>tr:hover{--bs-table-accent-bg:var(--bs-table-hover-bg);color:var(--bs-table-hover-color)}.table-primary{--bs-table-bg:#cfe2ff;--bs-table-striped-bg:#c5d7f2;--bs-table-striped-color:#000;--bs-table-active-bg:#bacbe6;--bs-table-active-color:#000;--bs-table-hover-bg:#bfd1ec;--bs-table-hover-color:#000;color:#000;border-color:#bacbe6}.table-secondary{--bs-table-bg:#e2e3e5;--bs-table-striped-bg:#d7d8da;--bs-table-striped-color:#000;--bs-table-active-bg:#cbccce;--bs-table-active-color:#000;--bs-table-hover-bg:#d1d2d4;--bs-table-hover-color:#000;color:#000;border-color:#cbccce}.table-success{--bs-table-bg:#d1e7dd;--bs-table-striped-bg:#c7dbd2;--bs-table-striped-color:#000;--bs-table-active-bg:#bcd0c7;--bs-table-active-color:#000;--bs-table-hover-bg:#c1d6cc;--bs-table-hover-color:#000;color:#000;border-color:#bcd0c7}.table-info{--bs-table-bg:#cff4fc;--bs-table-striped-bg:#c5e8ef;--bs-table-striped-color:#000;--bs-table-active-bg:#badce3;--bs-table-active-color:#000;--bs-table-hover-bg:#bfe2e9;--bs-table-hover-color:#000;color:#000;border-color:#badce3}.table-warning{--bs-table-bg:#fff3cd;--bs-table-striped-bg:#f2e7c3;--bs-table-striped-color:#000;--bs-table-active-bg:#e6dbb9;--bs-table-active-color:#000;--bs-table-hover-bg:#ece1be;--bs-table-hover-color:#000;color:#000;border-color:#e6dbb9}.table-danger{--bs-table-bg:#f8d7da;--bs-table-striped-bg:#eccccf;--bs-table-striped-color:#000;--bs-table-active-bg:#dfc2c4;--bs-table-active-color:#000;--bs-table-hover-bg:#e5c7ca;--bs-table-hover-color:#000;color:#000;border-color:#dfc2c4}.table-light{--bs-table-bg:#f8f9fa;--bs-table-striped-bg:#ecedee;--bs-table-striped-color:#000;--bs-table-active-bg:#dfe0e1;--bs-table-active-color:#000;--bs-table-hover-bg:#e5e6e7;--bs-table-hover-color:#000;color:#000;border-color:#dfe0e1}.table-dark{--bs-table-bg:#212529;--bs-table-striped-bg:#2c3034;--bs-table-striped-color:#fff;--bs-table-active-bg:#373b3e;--bs-table-active-color:#fff;--bs-table-hover-bg:#323539;--bs-table-hover-color:#fff;color:#fff;border-color:#373b3e}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}@media (max-width:575.98px){.table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:767.98px){.table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:991.98px){.table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:1199.98px){.table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:1399.98px){.table-responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}.form-label{margin-bottom:.5rem}
89.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem}.form-text{margin-top:.25rem;font-size:.875em;color:#6c757d}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control[type=file]{overflow:hidden}.form-control[type=file]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{color:#212529;background-color:#fff;border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-control::-webkit-date-and-time-value{height:1.5em}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}.form-control::file-selector-button{padding:.375rem .75rem;margin:-.375rem -.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:#212529;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:#dde0e3}.form-control::-webkit-file-upload-button{padding:.375rem .75rem;margin:-.375rem -.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:#212529;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0;-webkit-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control::-webkit-file-upload-button{-webkit-transition:none;transition:none}}.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button{background-color:#dde0e3}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{min-height:calc(1.5em + (.5rem + 2px));padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem}.form-control-sm::file-selector-button{padding:.25rem .5rem;margin:-.25rem -.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-sm::-webkit-file-upload-button{padding:.25rem .5rem;margin:-.25rem -.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-lg{min-height:calc(1.5em + (1rem + 2px));padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem}.form-control-lg::file-selector-button{padding:.5rem 1rem;margin:-.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}.form-control-lg::-webkit-file-upload-button{padding:.5rem 1rem;margin:-.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}textarea.form-control{min-height:calc(1.5em + (.75rem + 2px))}textarea.form-control-sm{min-height:calc(1.5em + (.5rem + 2px))}textarea.form-control-lg{min-height:calc(1.5em + (1rem + 2px))}.form-control-color{max-width:3rem;height:auto;padding:.375rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{height:1.5em;border-radius:.25rem}.form-control-color::-webkit-color-swatch{height:1.5em;border-radius:.25rem}.form-select{display:block;width:100%;padding:.375rem 2.25rem .375rem .75rem;-moz-padding-start:calc(0.75rem - 3px);font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.form-select{transition:none}}.form-select:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-select[multiple],.form-select[size]:not([size="1"]){padding-right:.75rem;background-image:none}.form-select:disabled{background-color:#e9ecef}.form-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #212529}.form-select-sm{padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}.form-check{display:block;min-height:1.5rem;padding-left:1.5em;margin-bottom:.125rem}.form-check .form-check-input{float:left;margin-left:-1.5em}.form-check-input{width:1em;height:1em;margin-top:.25em;vertical-align:top;background-color:#fff;background-repeat:no-repeat;background-position:center;background-size:contain;border:1px solid rgba(0,0,0,.25);-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-print-color-adjust:exact;color-adjust:exact}.form-check-input[type=checkbox]{border-radius:.25em}.form-check-input[type=radio]{border-radius:50%}.form-check-input:active{filter:brightness(90%)}.form-check-input:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-check-input:checked{background-color:#024ec0;border-color:#024ec0}
89.form-check-input:checked[type=checkbox]{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e")}.form-check-input:checked[type=radio]{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e")}.form-check-input[type=checkbox]:indeterminate{background-color:#024ec0;border-color:#024ec0;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e")}.form-check-input:disabled{pointer-events:none;filter:none;opacity:.5}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{opacity:.5}.form-switch{padding-left:2.5em}.form-switch .form-check-input{width:2em;margin-left:-2.5em;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280,0,0,0.25%29'/%3e%3c/svg%3e");background-position:left center;border-radius:2em;transition:background-position .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-switch .form-check-input{transition:none}}.form-switch .form-check-input:focus{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e")}.form-switch .form-check-input:checked{background-position:right center;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.form-check-inline{display:inline-block;margin-right:1rem}.btn-check{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.btn-check:disabled+.btn,.btn-check[disabled]+.btn{pointer-events:none;filter:none;opacity:.65}.form-range{width:100%;height:1.5rem;padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,.25)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,.25)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#024ec0;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.form-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.form-range::-webkit-slider-thumb:active{background-color:#b6d4fe}.form-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.form-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#024ec0;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.form-range::-moz-range-thumb{-moz-transition:none;transition:none}}.form-range::-moz-range-thumb:active{background-color:#b6d4fe}.form-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.form-range:disabled::-moz-range-thumb{background-color:#adb5bd}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-select{height:calc(3.5rem + 2px);line-height:1.25}.form-floating>label{position:absolute;top:0;left:0;height:100%;padding:1rem .75rem;pointer-events:none;border:1px solid transparent;transform-origin:0 0;transition:opacity .1s ease-in-out,transform .1s ease-in-out}@media (prefers-reduced-motion:reduce){.form-floating>label{transition:none}}.form-floating>.form-control{padding:1rem .75rem}.form-floating>.form-control::-moz-placeholder{color:transparent}.form-floating>.form-control::placeholder{color:transparent}.form-floating>.form-control:not(:-moz-placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:-webkit-autofill{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:not(:-moz-placeholder-shown)~label{opacity:.65;transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-select~label{opacity:.65;transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.form-floating>.form-control:-webkit-autofill~label{opacity:.65;transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-select{position:relative;flex:1 1 auto;width:1%;min-width:0}.input-group>.form-control:focus,.input-group>.form-select:focus{z-index:3}.input-group .btn{position:relative;z-index:2}.input-group .btn:focus{z-index:3}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-lg>.btn,.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem}.input-group-sm>.btn,.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text{padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-right:3rem}.input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n+3),.input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu){border-top-right-radius:0;border-bottom-right-radius:0}.input-group.has-validation>.dropdown-toggle:nth-last-child(n+4),.input-group.has-validation>:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-left:-1px;border-top-left-radius:0;border-bottom-left-radius:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:#198754}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:rgba(25,135,84,.9);border-radius:.25rem}
89.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{border-color:#198754;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.form-select.is-valid,.was-validated .form-select:valid{border-color:#198754}.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size="1"],.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size="1"]{padding-right:4.125rem;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"),url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.form-select.is-valid:focus,.was-validated .form-select:valid:focus{border-color:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.form-check-input.is-valid,.was-validated .form-check-input:valid{border-color:#198754}.form-check-input.is-valid:checked,.was-validated .form-check-input:valid:checked{background-color:#198754}.form-check-input.is-valid:focus,.was-validated .form-check-input:valid:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#198754}.form-check-inline .form-check-input~.valid-feedback{margin-left:.5em}.input-group .form-control.is-valid,.input-group .form-select.is-valid,.was-validated .input-group .form-control:valid,.was-validated .input-group .form-select:valid{z-index:1}.input-group .form-control.is-valid:focus,.input-group .form-select.is-valid:focus,.was-validated .input-group .form-control:valid:focus,.was-validated .input-group .form-select:valid:focus{z-index:3}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#dc3545;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.form-select.is-invalid,.was-validated .form-select:invalid{border-color:#dc3545}.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size="1"],.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select:invalid:not([multiple])[size="1"]{padding-right:4.125rem;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"),url
89("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.form-select.is-invalid:focus,.was-validated .form-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.form-check-input.is-invalid,.was-validated .form-check-input:invalid{border-color:#dc3545}.form-check-input.is-invalid:checked,.was-validated .form-check-input:invalid:checked{background-color:#dc3545}.form-check-input.is-invalid:focus,.was-validated .form-check-input:invalid:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-inline .form-check-input~.invalid-feedback{margin-left:.5em}.input-group .form-control.is-invalid,.input-group .form-select.is-invalid,.was-validated .input-group .form-control:invalid,.was-validated .input-group .form-select:invalid{z-index:2}.input-group .form-control.is-invalid:focus,.input-group .form-select.is-invalid:focus,.was-validated .input-group .form-control:invalid:focus,.was-validated .input-group .form-select:invalid:focus{z-index:3}.btn{display:inline-block;font-weight:400;line-height:1.5;color:#212529;text-align:center;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#212529}.btn-check:focus+.btn,.btn:focus{outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.btn.disabled,.btn:disabled,fieldset:disabled .btn{pointer-events:none;opacity:.65}.btn-primary{color:#fff;background-color:#024ec0;border-color:#024ec0}.btn-primary:hover{color:#fff;background-color:#0b5ed7;border-color:#0a58ca}.btn-check:focus+.btn-primary,.btn-primary:focus{color:#fff;background-color:#0b5ed7;border-color:#0a58ca;box-shadow:0 0 0 .25rem rgba(49,132,253,.5)}.btn-check:active+.btn-primary,.btn-check:checked+.btn-primary,.btn-primary.active,.btn-primary:active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0a58ca;border-color:#0a53be}.btn-check:active+.btn-primary:focus,.btn-check:checked+.btn-primary:focus,.btn-primary.active:focus,.btn-primary:active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(49,132,253,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#024ec0;border-color:#024ec0}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5c636a;border-color:#565e64}.btn-check:focus+.btn-secondary,.btn-secondary:focus{color:#fff;background-color:#5c636a;border-color:#565e64;box-shadow:0 0 0 .25rem rgba(130,138,145,.5)}.btn-check:active+.btn-secondary,.btn-check:checked+.btn-secondary,.btn-secondary.active,.btn-secondary:active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#565e64;border-color:#51585e}.btn-check:active+.btn-secondary:focus,.btn-check:checked+.btn-secondary:focus,.btn-secondary.active:focus,.btn-secondary:active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(130,138,145,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-success{color:#fff;background-color:#198754;border-color:#198754}.btn-success:hover{color:#fff;background-color:#157347;border-color:#146c43}.btn-check:focus+.btn-success,.btn-success:focus{color:#fff;background-color:#157347;border-color:#146c43;box-shadow:0 0 0 .25rem rgba(60,153,110,.5)}
89.btn-check:active+.btn-success,.btn-check:checked+.btn-success,.btn-success.active,.btn-success:active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#146c43;border-color:#13653f}.btn-check:active+.btn-success:focus,.btn-check:checked+.btn-success:focus,.btn-success.active:focus,.btn-success:active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(60,153,110,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#198754;border-color:#198754}.btn-info{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-info:hover{color:#000;background-color:#31d2f2;border-color:#25cff2}.btn-check:focus+.btn-info,.btn-info:focus{color:#000;background-color:#31d2f2;border-color:#25cff2;box-shadow:0 0 0 .25rem rgba(11,172,204,.5)}.btn-check:active+.btn-info,.btn-check:checked+.btn-info,.btn-info.active,.btn-info:active,.show>.btn-info.dropdown-toggle{color:#000;background-color:#3dd5f3;border-color:#25cff2}.btn-check:active+.btn-info:focus,.btn-check:checked+.btn-info:focus,.btn-info.active:focus,.btn-info:active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(11,172,204,.5)}.btn-info.disabled,.btn-info:disabled{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-warning{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#000;background-color:#ffca2c;border-color:#ffc720}.btn-check:focus+.btn-warning,.btn-warning:focus{color:#000;background-color:#ffca2c;border-color:#ffc720;box-shadow:0 0 0 .25rem rgba(217,164,6,.5)}.btn-check:active+.btn-warning,.btn-check:checked+.btn-warning,.btn-warning.active,.btn-warning:active,.show>.btn-warning.dropdown-toggle{color:#000;background-color:#ffcd39;border-color:#ffc720}.btn-check:active+.btn-warning:focus,.btn-check:checked+.btn-warning:focus,.btn-warning.active:focus,.btn-warning:active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(217,164,6,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#bb2d3b;border-color:#b02a37}.btn-check:focus+.btn-danger,.btn-danger:focus{color:#fff;background-color:#bb2d3b;border-color:#b02a37;box-shadow:0 0 0 .25rem rgba(225,83,97,.5)}.btn-check:active+.btn-danger,.btn-check:checked+.btn-danger,.btn-danger.active,.btn-danger:active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#b02a37;border-color:#a52834}.btn-check:active+.btn-danger:focus,.btn-check:checked+.btn-danger:focus,.btn-danger.active:focus,.btn-danger:active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(225,83,97,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-light{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#000;background-color:#f9fafb;border-color:#f9fafb}.btn-check:focus+.btn-light,.btn-light:focus{color:#000;background-color:#f9fafb;border-color:#f9fafb;box-shadow:0 0 0 .25rem rgba(211,212,213,.5)}.btn-check:active+.btn-light,.btn-check:checked+.btn-light,.btn-light.active,.btn-light:active,.show>.btn-light.dropdown-toggle{color:#000;background-color:#f9fafb;border-color:#f9fafb}.btn-check:active+.btn-light:focus,.btn-check:checked+.btn-light:focus,.btn-light.active:focus,.btn-light:active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(211,212,213,.5)}.btn-light.disabled,.btn-light:disabled{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-dark{color:#fff;background-color:#212529;border-color:#212529}.btn-dark:hover{color:#fff;background-color:#1c1f23;border-color:#1a1e21}.btn-check:focus+.btn-dark,.btn-dark:focus{color:#fff;background-color:#1c1f23;border-color:#1a1e21;box-shadow:0 0 0 .25rem rgba(66,70,73,.5)}.btn-check:active+.btn-dark,.btn-check:checked+.btn-dark,.btn-dark.active,.btn-dark:active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1a1e21;border-color:#191c1f}.btn-check:active+.btn-dark:focus,.btn-check:checked+.btn-dark:focus,.btn-dark.active:focus,.btn-dark:active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(66,70,73,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#212529;border-color:#212529}.btn-outline-primary{color:#024ec0;border-color:#024ec0}.btn-outline-primary:hover{color:#fff;background-color:#024ec0;border-color:#024ec0}.btn-check:focus+.btn-outline-primary,.btn-outline-primary:focus{box-shadow:0 0 0 .25rem rgba(13,110,253,.5)}.btn-check:active+.btn-outline-primary,.btn-check:checked+.btn-outline-primary,.btn-outline-primary.active,.btn-outline-primary.dropdown-toggle.show,.btn-outline-primary:active{color:#fff;background-color:#024ec0;border-color:#024ec0}.btn-check:active+.btn-outline-primary:focus,.btn-check:checked+.btn-outline-primary:focus,.btn-outline-primary.active:focus,.btn-outline-primary.dropdown-toggle.show:focus,.btn-outline-primary:active:focus{box-shadow:0 0 0 .25rem rgba(13,110,253,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#024ec0;background-color:transparent}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-check:focus+.btn-outline-secondary,.btn-outline-secondary:focus{box-shadow:0 0 0 .25rem rgba(108,117,125,.5)}
89.btn-check:active+.btn-outline-secondary,.btn-check:checked+.btn-outline-secondary,.btn-outline-secondary.active,.btn-outline-secondary.dropdown-toggle.show,.btn-outline-secondary:active{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-check:active+.btn-outline-secondary:focus,.btn-check:checked+.btn-outline-secondary:focus,.btn-outline-secondary.active:focus,.btn-outline-secondary.dropdown-toggle.show:focus,.btn-outline-secondary:active:focus{box-shadow:0 0 0 .25rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-success{color:#198754;border-color:#198754}.btn-outline-success:hover{color:#fff;background-color:#198754;border-color:#198754}.btn-check:focus+.btn-outline-success,.btn-outline-success:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.5)}.btn-check:active+.btn-outline-success,.btn-check:checked+.btn-outline-success,.btn-outline-success.active,.btn-outline-success.dropdown-toggle.show,.btn-outline-success:active{color:#fff;background-color:#198754;border-color:#198754}.btn-check:active+.btn-outline-success:focus,.btn-check:checked+.btn-outline-success:focus,.btn-outline-success.active:focus,.btn-outline-success.dropdown-toggle.show:focus,.btn-outline-success:active:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#198754;background-color:transparent}.btn-outline-info{color:#0dcaf0;border-color:#0dcaf0}.btn-outline-info:hover{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-check:focus+.btn-outline-info,.btn-outline-info:focus{box-shadow:0 0 0 .25rem rgba(13,202,240,.5)}.btn-check:active+.btn-outline-info,.btn-check:checked+.btn-outline-info,.btn-outline-info.active,.btn-outline-info.dropdown-toggle.show,.btn-outline-info:active{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-check:active+.btn-outline-info:focus,.btn-check:checked+.btn-outline-info:focus,.btn-outline-info.active:focus,.btn-outline-info.dropdown-toggle.show:focus,.btn-outline-info:active:focus{box-shadow:0 0 0 .25rem rgba(13,202,240,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#0dcaf0;background-color:transparent}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-check:focus+.btn-outline-warning,.btn-outline-warning:focus{box-shadow:0 0 0 .25rem rgba(255,193,7,.5)}.btn-check:active+.btn-outline-warning,.btn-check:checked+.btn-outline-warning,.btn-outline-warning.active,.btn-outline-warning.dropdown-toggle.show,.btn-outline-warning:active{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-check:active+.btn-outline-warning:focus,.btn-check:checked+.btn-outline-warning:focus,.btn-outline-warning.active:focus,.btn-outline-warning.dropdown-toggle.show:focus,.btn-outline-warning:active:focus{box-shadow:0 0 0 .25rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-check:focus+.btn-outline-danger,.btn-outline-danger:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.5)}.btn-check:active+.btn-outline-danger,.btn-check:checked+.btn-outline-danger,.btn-outline-danger.active,.btn-outline-danger.dropdown-toggle.show,.btn-outline-danger:active{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-check:active+.btn-outline-danger:focus,.btn-check:checked+.btn-outline-danger:focus,.btn-outline-danger.active:focus,.btn-outline-danger.dropdown-toggle.show:focus,.btn-outline-danger:active:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-check:focus+.btn-outline-light,.btn-outline-light:focus{box-shadow:0 0 0 .25rem rgba(248,249,250,.5)}
89.btn-check:active+.btn-outline-light,.btn-check:checked+.btn-outline-light,.btn-outline-light.active,.btn-outline-light.dropdown-toggle.show,.btn-outline-light:active{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-check:active+.btn-outline-light:focus,.btn-check:checked+.btn-outline-light:focus,.btn-outline-light.active:focus,.btn-outline-light.dropdown-toggle.show:focus,.btn-outline-light:active:focus{box-shadow:0 0 0 .25rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-dark{color:#212529;border-color:#212529}.btn-outline-dark:hover{color:#fff;background-color:#212529;border-color:#212529}.btn-check:focus+.btn-outline-dark,.btn-outline-dark:focus{box-shadow:0 0 0 .25rem rgba(33,37,41,.5)}.btn-check:active+.btn-outline-dark,.btn-check:checked+.btn-outline-dark,.btn-outline-dark.active,.btn-outline-dark.dropdown-toggle.show,.btn-outline-dark:active{color:#fff;background-color:#212529;border-color:#212529}.btn-check:active+.btn-outline-dark:focus,.btn-check:checked+.btn-outline-dark:focus,.btn-outline-dark.active:focus,.btn-outline-dark.dropdown-toggle.show:focus,.btn-outline-dark:active:focus{box-shadow:0 0 0 .25rem rgba(33,37,41,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#212529;background-color:transparent}.btn-link{font-weight:400;color:#024ec0;text-decoration:underline}.btn-link:hover{color:#0a58ca}.btn-link.disabled,.btn-link:disabled{color:#6c757d}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropend,.dropstart,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;z-index:1000;display:none;min-width:10rem;padding:.5rem 0;margin:0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu[data-bs-popper]{top:100%;left:0;margin-top:.125rem}.dropdown-menu-start{--bs-position:start}.dropdown-menu-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-end{--bs-position:end}.dropdown-menu-end[data-bs-popper]{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-start{--bs-position:start}.dropdown-menu-sm-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-sm-end{--bs-position:end}.dropdown-menu-sm-end[data-bs-popper]{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-start{--bs-position:start}.dropdown-menu-md-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-md-end{--bs-position:end}.dropdown-menu-md-end[data-bs-popper]{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-start{--bs-position:start}.dropdown-menu-lg-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-lg-end{--bs-position:end}.dropdown-menu-lg-end[data-bs-popper]{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-start{--bs-position:start}.dropdown-menu-xl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xl-end{--bs-position:end}.dropdown-menu-xl-end[data-bs-popper]{right:0;left:auto}}@media (min-width:1400px){.dropdown-menu-xxl-start{--bs-position:start}.dropdown-menu-xxl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xxl-end{--bs-position:end}.dropdown-menu-xxl-end[data-bs-popper]{right:0;left:auto}}.dropup .dropdown-menu[data-bs-popper]{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-menu[data-bs-popper]{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropend .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropend .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-toggle::after{vertical-align:0}.dropstart .dropdown-menu[data-bs-popper]{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropstart .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";display:none}.dropstart .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropstart .dropdown-toggle:empty::after{margin-left:0}.dropstart .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid rgba(0,0,0,.15)}.dropdown-item{display:block;width:100%;padding:.25rem 1rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#1e2125;background-color:#e9ecef}.dropdown-item.active,.dropdown-item:active{color:#fff;background-color:#024ec0}.dropdown-item.disabled,.dropdown-item:disabled{color:#adb5bd;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1rem;color:#212529}.dropdown-menu-dark{color:#dee2e6;background-color:#343a40;border-color:rgba(0,0,0,.15)}.dropdown-menu-dark .dropdown-item{color:#dee2e6}.dropdown-menu-dark .dropdown-item:focus,.dropdown-menu-dark .dropdown-item:hover{color:#fff;background-color:rgba(255,255,255,.15)}.dropdown-menu-dark .dropdown-item.active,.dropdown-menu-dark .dropdown-item:active{color:#fff;background-color:#024ec0}.dropdown-menu-dark .dropdown-item.disabled,.dropdown-menu-dark .dropdown-item:disabled{color:#adb5bd}.dropdown-menu-dark .dropdown-divider{border-color:rgba(0,0,0,.15)}.dropdown-menu-dark .dropdown-item-text{color:#dee2e6}.dropdown-menu-dark .dropdown-header{color:#adb5bd}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;flex:1 1 auto}.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:nth-child(n+3),.btn-group>:not(.btn-check)+.btn{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropend .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropstart .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn~.btn{border-top-left-radius:0;border-top-right-radius:0}.nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem;color:#024ec0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out}
89@media (prefers-reduced-motion:reduce){.nav-link{transition:none}}.nav-link:focus,.nav-link:hover{color:#0a58ca}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-link{margin-bottom:-1px;background:0 0;border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6;isolation:isolate}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{background:0 0;border:0;border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#024ec0}.nav-fill .nav-item,.nav-fill>.nav-link{flex:1 1 auto;text-align:center}.nav-justified .nav-item,.nav-justified>.nav-link{flex-basis:0;flex-grow:1;text-align:center}.nav-fill .nav-item .nav-link,.nav-justified .nav-item .nav-link{width:100%}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding-top:.5rem;padding-bottom:.5rem}.navbar>.container,.navbar>.container-fluid,.navbar>.container-lg,.navbar>.container-md,.navbar>.container-sm,.navbar>.container-xl,.navbar>.container-xxl{display:flex;flex-wrap:inherit;align-items:center;justify-content:space-between}.navbar-brand{padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;white-space:nowrap}.navbar-nav{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static}.navbar-text{padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem;transition:box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.navbar-toggler{transition:none}}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{text-decoration:none;outline:0;box-shadow:0 0 0 .25rem}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;background-repeat:no-repeat;background-position:center;background-size:100%}.navbar-nav-scroll{max-height:var(--bs-scroll-height,75vh);overflow-y:auto}@media (min-width:576px){.navbar-expand-sm{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (min-width:768px){.navbar-expand-md{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (min-width:992px){.navbar-expand-lg{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (min-width:1200px){.navbar-expand-xl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}@media (min-width:1400px){.navbar-expand-xxl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row}.navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xxl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xxl .navbar-nav-scroll{overflow:visible}.navbar-expand-xxl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xxl .navbar-toggler{display:none}}.navbar-expand{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.55)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.55);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280,0,0,0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:rgba(0,0,0,.55)}.navbar-light .navbar-text a,.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.55)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.55);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255,255,255,0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-dark .navbar-text{color:rgba(255,255,255,.55)}.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;padding:1rem}
89.card-title{margin-bottom:.5rem}.card-subtitle{margin-top:-.25rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1rem}.card-header{padding:.5rem 1rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-footer{padding:.5rem 1rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.5rem;margin-bottom:-.5rem;margin-left:-.5rem;border-bottom:0}.card-header-pills{margin-right:-.5rem;margin-left:-.5rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1rem;border-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom,.card-img-top{width:100%}.card-img,.card-img-top{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-group>.card{margin-bottom:.75rem}@media (min-width:576px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card{flex:1 0 0;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.accordion-button{position:relative;display:flex;align-items:center;width:100%;padding:1rem 1.25rem;font-size:1rem;color:#212529;text-align:left;background-color:#fff;border:0;border-radius:0;overflow-anchor:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,border-radius .15s ease}@media (prefers-reduced-motion:reduce){.accordion-button{transition:none}}.accordion-button:not(.collapsed){color:#0c63e4;background-color:#e7f1ff;box-shadow:inset 0 -1px 0 rgba(0,0,0,.125)}.accordion-button:not(.collapsed)::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%230c63e4'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");transform:rotate(-180deg)}.accordion-button::after{flex-shrink:0;width:1.25rem;height:1.25rem;margin-left:auto;content:"";background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-size:1.25rem;transition:transform .2s ease-in-out}@media (prefers-reduced-motion:reduce){.accordion-button::after{transition:none}}.accordion-button:hover{z-index:2}.accordion-button:focus{z-index:3;border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.accordion-header{margin-bottom:0}.accordion-item{background-color:#fff;border:1px solid rgba(0,0,0,.125)}.accordion-item:first-of-type{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.accordion-item:first-of-type .accordion-button{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.accordion-item:not(:first-of-type){border-top:0}.accordion-item:last-of-type{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.accordion-item:last-of-type .accordion-button.collapsed{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.accordion-item:last-of-type .accordion-collapse{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.accordion-body{padding:1rem 1.25rem}.accordion-flush .accordion-collapse{border-width:0}.accordion-flush .accordion-item{border-right:0;border-left:0;border-radius:0}.accordion-flush .accordion-item:first-child{border-top:0}.accordion-flush .accordion-item:last-child{border-bottom:0}.accordion-flush .accordion-item .accordion-button{border-radius:0}.breadcrumb{display:flex;flex-wrap:wrap;padding:0;margin-bottom:1rem;list-style:none}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{float:left;padding-right:.5rem;color:#6c757d;content:var(--bs-breadcrumb-divider, "/")}.breadcrumb-item.active{color:#6c757d}
89.pagination{display:flex;padding-left:0;list-style:none}.page-link{position:relative;display:block;color:#024ec0;background-color:#fff;border:1px solid #dee2e6;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.page-link{transition:none}}.page-link:hover{z-index:2;color:#0a58ca;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:3;color:#0a58ca;background-color:#e9ecef;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.page-item:not(:first-child) .page-link{margin-left:-1px}.page-item.active .page-link{z-index:3;color:#fff;background-color:#024ec0;border-color:#024ec0}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;background-color:#fff;border-color:#dee2e6}.page-link{padding:.375rem .75rem}.page-item:first-child .page-link{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.35em .65em;font-size:.75em;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.alert{position:relative;padding:1rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:3rem}.alert-dismissible .btn-close{position:absolute;top:0;right:0;z-index:2;padding:1.25rem 1rem}.alert-primary{color:#084298;background-color:#cfe2ff;border-color:#b6d4fe}.alert-primary .alert-link{color:#06357a}.alert-secondary{color:#41464b;background-color:#e2e3e5;border-color:#d3d6d8}.alert-secondary .alert-link{color:#34383c}.alert-success{color:#0f5132;background-color:#d1e7dd;border-color:#badbcc}.alert-success .alert-link{color:#0c4128}.alert-info{color:#055160;background-color:#cff4fc;border-color:#b6effb}.alert-info .alert-link{color:#04414d}.alert-warning{color:#664d03;background-color:#fff3cd;border-color:#ffecb5}.alert-warning .alert-link{color:#523e02}.alert-danger{color:#842029;background-color:#f8d7da;border-color:#f5c2c7}.alert-danger .alert-link{color:#6a1a21}.alert-light{color:#636464;background-color:#fefefe;border-color:#fdfdfe}.alert-light .alert-link{color:#4f5050}.alert-dark{color:#141619;background-color:#d3d3d4;border-color:#bcbebf}.alert-dark .alert-link{color:#101214}@-webkit-keyframes progress-bar-stripes{0%{background-position-x:1rem}}@keyframes progress-bar-stripes{0%{background-position-x:1rem}}.progress{display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:flex;flex-direction:column;justify-content:center;overflow:hidden;color:#fff;text-align:center;white-space:nowrap;background-color:#024ec0;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:1s linear infinite progress-bar-stripes;animation:1s linear infinite progress-bar-stripes}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}
89.list-group{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:.25rem}.list-group-numbered{list-style-type:none;counter-reset:section}.list-group-numbered>li::before{content:counters(section, ".") ". ";counter-increment:section}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#495057;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.5rem 1rem;color:#212529;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#024ec0;border-color:#024ec0}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px}.list-group-horizontal{flex-direction:row}.list-group-horizontal>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}@media (min-width:576px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:768px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:992px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:1400px){.list-group-horizontal-xxl{flex-direction:row}.list-group-horizontal-xxl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xxl>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xxl>.list-group-item.active{margin-top:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 1px}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#084298;background-color:#cfe2ff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#084298;background-color:#bacbe6}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#084298;border-color:#084298}.list-group-item-secondary{color:#41464b;background-color:#e2e3e5}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#41464b;background-color:#cbccce}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#41464b;border-color:#41464b}.list-group-item-success{color:#0f5132;background-color:#d1e7dd}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#0f5132;background-color:#bcd0c7}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#0f5132;border-color:#0f5132}.list-group-item-info{color:#055160;background-color:#cff4fc}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#055160;background-color:#badce3}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#055160;border-color:#055160}.list-group-item-warning{color:#664d03;background-color:#fff3cd}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#664d03;background-color:#e6dbb9}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#664d03;border-color:#664d03}.list-group-item-danger{color:#842029;background-color:#f8d7da}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#842029;background-color:#dfc2c4}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#842029;border-color:#842029}.list-group-item-light{color:#636464;background-color:#fefefe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#636464;background-color:#e5e5e5}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#636464;border-color:#636464}.list-group-item-dark{color:#141619;background-color:#d3d3d4}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#141619;background-color:#bebebf}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#141619;border-color:#141619}.btn-close{box-sizing:content-box;width:1em;height:1em;padding:.25em;color:#000;background:transparent url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/%3e%3c/svg%3e") center/1em auto
89no-repeat;border:0;border-radius:.25rem;opacity:.5}.btn-close:hover{color:#000;opacity:.75}.btn-close:focus{outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25);opacity:1}.btn-close.disabled,.btn-close:disabled{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;opacity:.25}.btn-close-white{filter:invert(1) grayscale(100%) brightness(200%)}.toast{width:350px;max-width:100%;font-size:.875rem;pointer-events:auto;background-color:rgba(255,255,255,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .5rem 1rem rgba(0,0,0,.15);border-radius:.25rem}.toast:not(.showing):not(.show){opacity:0}.toast.hide{display:none}.toast-container{width:-webkit-max-content;width:-moz-max-content;width:max-content;max-width:100%;pointer-events:none}.toast-container>:not(:last-child){margin-bottom:.75rem}.toast-header{display:flex;align-items:center;padding:.5rem .75rem;color:#6c757d;background-color:rgba(255,255,255,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05);border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.toast-header .btn-close{margin-right:-.375rem;margin-left:.75rem}.toast-body{padding:.75rem;word-wrap:break-word}.modal{position:fixed;top:0;left:0;z-index:1060;display:none;width:100%;height:100%;overflow-x:hidden;overflow-y:auto;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:transform .3s ease-out;transform:translate(0,-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{height:calc(100% - 1rem)}
89.modal-dialog-scrollable .modal-content{max-height:100%;overflow:hidden}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - 1rem)}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:flex;flex-shrink:0;align-items:center;justify-content:space-between;padding:1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.modal-header .btn-close{padding:.5rem;margin:-.5rem -.5rem -.5rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;flex:1 1 auto;padding:1rem}.modal-footer{display:flex;flex-wrap:wrap;flex-shrink:0;align-items:center;justify-content:flex-end;padding:.75rem;border-top:1px solid #dee2e6;border-bottom-right-radius:calc(.3rem - 1px);border-bottom-left-radius:calc(.3rem - 1px)}.modal-footer>*{margin:.25rem}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{height:calc(100% - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.modal-fullscreen{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen .modal-header{border-radius:0}.modal-fullscreen .modal-body{overflow-y:auto}.modal-fullscreen .modal-footer{border-radius:0}@media (max-width:575.98px){.modal-fullscreen-sm-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-sm-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-sm-down .modal-header{border-radius:0}.modal-fullscreen-sm-down .modal-body{overflow-y:auto}.modal-fullscreen-sm-down .modal-footer{border-radius:0}}@media (max-width:767.98px){.modal-fullscreen-md-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-md-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-md-down .modal-header{border-radius:0}.modal-fullscreen-md-down .modal-body{overflow-y:auto}.modal-fullscreen-md-down .modal-footer{border-radius:0}}@media (max-width:991.98px){.modal-fullscreen-lg-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-lg-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-lg-down .modal-header{border-radius:0}.modal-fullscreen-lg-down .modal-body{overflow-y:auto}.modal-fullscreen-lg-down .modal-footer{border-radius:0}}@media (max-width:1199.98px){.modal-fullscreen-xl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xl-down .modal-header{border-radius:0}.modal-fullscreen-xl-down .modal-body{overflow-y:auto}.modal-fullscreen-xl-down .modal-footer{border-radius:0}}@media (max-width:1399.98px){.modal-fullscreen-xxl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xxl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xxl-down .modal-header{border-radius:0}.modal-fullscreen-xxl-down .modal-body{overflow-y:auto}.modal-fullscreen-xxl-down .modal-footer{border-radius:0}}.tooltip{position:absolute;z-index:1080;display:block;margin:0;font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .tooltip-arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .tooltip-arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[data-popper-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow,.bs-tooltip-top .tooltip-arrow{bottom:0}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before,.bs-tooltip-top .tooltip-arrow::before{top:-1px;border-width:.4rem .4rem 0;border-top-color:#000}
89.bs-tooltip-auto[data-popper-placement^=right],.bs-tooltip-end{padding:0 .4rem}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow,.bs-tooltip-end .tooltip-arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before,.bs-tooltip-end .tooltip-arrow::before{right:-1px;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[data-popper-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow,.bs-tooltip-bottom .tooltip-arrow{top:0}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before,.bs-tooltip-bottom .tooltip-arrow::before{bottom:-1px;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[data-popper-placement^=left],.bs-tooltip-start{padding:0 .4rem}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow,.bs-tooltip-start .tooltip-arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before,.bs-tooltip-start .tooltip-arrow::before{left:-1px;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1070;display:block;max-width:276px;font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .popover-arrow{position:absolute;display:block;width:1rem;height:.5rem}.popover .popover-arrow::after,.popover .popover-arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow,.bs-popover-top>.popover-arrow{bottom:calc(-.5rem - 1px)}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before,.bs-popover-top>.popover-arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after,.bs-popover-top>.popover-arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow,.bs-popover-end>.popover-arrow{left:calc(-.5rem - 1px);width:.5rem;height:1rem}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before,.bs-popover-end>.popover-arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after,.bs-popover-end>.popover-arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow,.bs-popover-bottom>.popover-arrow{top:calc(-.5rem - 1px)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before,.bs-popover-bottom>.popover-arrow::before{top:0;border-width:0 .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after,.bs-popover-bottom>.popover-arrow::after{top:1px;border-width:0 .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[data-popper-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f0f0f0}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow,.bs-popover-start>.popover-arrow{right:calc(-.5rem - 1px);width:.5rem;height:1rem}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before,.bs-popover-start>.popover-arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after,.bs-popover-start>.popover-arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem 1rem;margin-bottom:0;font-size:1rem;background-color:#f0f0f0;border-bottom:1px solid rgba(0,0,0,.2);border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:1rem;color:#212529}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}
89.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-end,.carousel-item-next:not(.carousel-item-start){transform:translateX(100%)}.active.carousel-item-start,.carousel-item-prev:not(.carousel-item-end){transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item-next.carousel-item-start,.carousel-fade .carousel-item-prev.carousel-item-end,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{z-index:0;opacity:0;transition:opacity 0 .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;padding:0;color:#fff;text-align:center;background:0 0;border:0;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}
89.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:2rem;height:2rem;background-repeat:no-repeat;background-position:50%;background-size:100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:2;display:flex;justify-content:center;padding:0;margin-right:15%;margin-bottom:1rem;margin-left:15%;list-style:none}.carousel-indicators [data-bs-target]{box-sizing:content-box;flex:0 1 auto;width:30px;height:3px;padding:0;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border:0;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators [data-bs-target]{transition:none}}
89.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:1.25rem;left:15%;padding-top:1.25rem;padding-bottom:1.25rem;color:#fff;text-align:center}.carousel-dark .carousel-control-next-icon,.carousel-dark .carousel-control-prev-icon{filter:invert(1) grayscale(100)}.carousel-dark .carousel-indicators [data-bs-target]{background-color:#000}.carousel-dark .carousel-caption{color:#000}@-webkit-keyframes spinner-border{to{transform:rotate(360deg)}}@keyframes spinner-border{to{transform:rotate(360deg)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:-.125em;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;-webkit-animation:.75s linear infinite spinner-border;animation:.75s linear infinite spinner-border}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:-.125em;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:.75s linear infinite spinner-grow;animation:.75s linear infinite spinner-grow}.spinner-grow-sm{width:1rem;height:1rem}@media (prefers-reduced-motion:reduce){.spinner-border,.spinner-grow{-webkit-animation-duration:1.5s;animation-duration:1.5s}}.offcanvas{position:fixed;bottom:0;z-index:1050;display:flex;flex-direction:column;max-width:100%;visibility:hidden;background-color:#fff;background-clip:padding-box;outline:0;transition:transform .3s ease-in-out}@media (prefers-reduced-motion:reduce){.offcanvas{transition:none}}.offcanvas-header{display:flex;align-items:center;justify-content:space-between;padding:1rem}.offcanvas-header .btn-close{padding:.5rem;margin-top:-.5rem;margin-right:-.5rem;margin-bottom:-.5rem}.offcanvas-title{margin-bottom:0;line-height:1.5}.offcanvas-body{flex-grow:1;padding:1rem;overflow-y:auto}.offcanvas-start{top:0;left:0;width:400px;border-right:1px solid rgba(0,0,0,.2);transform:translateX(-100%)}.offcanvas-end{top:0;right:0;width:400px;border-left:1px solid rgba(0,0,0,.2);transform:translateX(100%)}.offcanvas-top{top:0;right:0;left:0;height:30vh;max-height:100%;border-bottom:1px solid rgba(0,0,0,.2);transform:translateY(-100%)}.offcanvas-bottom{right:0;left:0;height:30vh;max-height:100%;border-top:1px solid rgba(0,0,0,.2);transform:translateY(100%)}.offcanvas.show{transform:none}.clearfix::after{display:block;clear:both;content:""}.link-primary{color:#024ec0}.link-primary:focus,.link-primary:hover{color:#0a58ca}.link-secondary{color:#6c757d}.link-secondary:focus,.link-secondary:hover{color:#565e64}.link-success{color:#198754}.link-success:focus,.link-success:hover{color:#146c43}.link-info{color:#0dcaf0}.link-info:focus,.link-info:hover{color:#3dd5f3}.link-warning{color:#ffc107}.link-warning:focus,.link-warning:hover{color:#ffcd39}.link-danger{color:#dc3545}.link-danger:focus,.link-danger:hover{color:#b02a37}.link-light{color:#f8f9fa}.link-light:focus,.link-light:hover{color:#f9fafb}.link-dark{color:#212529}.link-dark:focus,.link-dark:hover{color:#1a1e21}.ratio{position:relative;width:100%}.ratio::before{display:block;padding-top:var(--bs-aspect-ratio);content:""}.ratio>*{position:absolute;top:0;left:0;width:100%;height:100%}.ratio-1x1{--bs-aspect-ratio:100%}.ratio-4x3{--bs-aspect-ratio:calc(3 / 4 * 100%)}.ratio-16x9{--bs-aspect-ratio:calc(9 / 16 * 100%)}.ratio-21x9{--bs-aspect-ratio:calc(9 / 21 * 100%)}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}@media (min-width:576px){.sticky-sm-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media (min-width:768px){.sticky-md-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media (min-width:992px){.sticky-lg-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media (min-width:1200px){.sticky-xl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media (min-width:1400px){.sticky-xxl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}
89.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.float-start{float:left!important}.float-end{float:right!important}.float-none{float:none!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.overflow-visible{overflow:visible!important}.overflow-scroll{overflow:scroll!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-grid{display:grid!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}.d-none{display:none!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.top-0{top:0!important}.top-50{top:50%!important}.top-100{top:100%!important}.bottom-0{bottom:0!important}.bottom-50{bottom:50%!important}.bottom-100{bottom:100%!important}.start-0{left:0!important}.start-50{left:50%!important}.start-100{left:100%!important}.end-0{right:0!important}.end-50{right:50%!important}.end-100{right:100%!important}.translate-middle{transform:translate(-50%,-50%)!important}.translate-middle-x{transform:translateX(-50%)!important}.translate-middle-y{transform:translateY(-50%)!important}.border{border:1px solid #dee2e6!important}.border-0{border:0!important}.border-top{border-top:1px solid #dee2e6!important}.border-top-0{border-top:0!important}.border-end{border-right:1px solid #dee2e6!important}.border-end-0{border-right:0!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-bottom-0{border-bottom:0!important}.border-start{border-left:1px solid #dee2e6!important}.border-start-0{border-left:0!important}.border-primary{border-color:#024ec0!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#198754!important}.border-info{border-color:#0dcaf0!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#212529!important}.border-white{border-color:#fff!important}.border-1{border-width:1px!important}.border-2{border-width:2px!important}.border-3{border-width:3px!important}.border-4{border-width:4px!important}.border-5{border-width:5px!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.mw-100{max-width:100%!important}.vw-100{width:100vw!important}.min-vw-100{min-width:100vw!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mh-100{max-height:100%!important}.vh-100{height:100vh!important}.min-vh-100{min-height:100vh!important}.flex-fill{flex:1 1 auto!important}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}
89.gap-0{gap:0!important}.gap-1{gap:.25rem!important}.gap-2{gap:.5rem!important}.gap-3{gap:1rem!important}.gap-4{gap:1.5rem!important}.gap-5{gap:3rem!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.justify-content-evenly{justify-content:space-evenly!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}.order-first{order:-1!important}.order-0{order:0!important}.order-1{order:1!important}.order-2{order:2!important}.order-3{order:3!important}.order-4{order:4!important}.order-5{order:5!important}.order-last{order:6!important}.m-0{margin:0!important}.m-1{margin:.25rem!important}.m-2{margin:.5rem!important}.m-3{margin:1rem!important}.m-4{margin:1.5rem!important}.m-5{margin:3rem!important}.m-auto{margin:auto!important}.mx-0{margin-right:0!important;margin-left:0!important}.mx-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-3{margin-right:1rem!important;margin-left:1rem!important}.mx-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-5{margin-right:3rem!important;margin-left:3rem!important}.mx-auto{margin-right:auto!important;margin-left:auto!important}.my-0{margin-top:0!important;margin-bottom:0!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-0{margin-top:0!important}.mt-1{margin-top:.25rem!important}.mt-2{margin-top:.5rem!important}.mt-3{margin-top:1rem!important}.mt-4{margin-top:1.5rem!important}.mt-5{margin-top:3rem!important}.mt-auto{margin-top:auto!important}.me-0{margin-right:0!important}.me-1{margin-right:.25rem!important}.me-2{margin-right:.5rem!important}.me-3{margin-right:1rem!important}.me-4{margin-right:1.5rem!important}.me-5{margin-right:3rem!important}.me-auto{margin-right:auto!important}.mb-0{margin-bottom:0!important}.mb-1{margin-bottom:.25rem!important}.mb-2{margin-bottom:.5rem!important}.mb-3{margin-bottom:1rem!important}.mb-4{margin-bottom:1.5rem!important}.mb-5{margin-bottom:3rem!important}.mb-auto{margin-bottom:auto!important}.ms-0{margin-left:0!important}.ms-1{margin-left:.25rem!important}.ms-2{margin-left:.5rem!important}.ms-3{margin-left:1rem!important}.ms-4{margin-left:1.5rem!important}.ms-5{margin-left:3rem!important}.ms-auto{margin-left:auto!important}.p-0{padding:0!important}.p-1{padding:.25rem!important}.p-2{padding:.5rem!important}.p-3{padding:1rem!important}.p-4{padding:1.5rem!important}.p-5{padding:3rem!important}.px-0{padding-right:0!important;padding-left:0!important}.px-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-3{padding-right:1rem!important;padding-left:1rem!important}.px-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-5{padding-right:3rem!important;padding-left:3rem!important}.py-0{padding-top:0!important;padding-bottom:0!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-0{padding-top:0!important}.pt-1{padding-top:.25rem!important}.pt-2{padding-top:.5rem!important}.pt-3{padding-top:1rem!important}.pt-4{padding-top:1.5rem!important}.pt-5{padding-top:3rem!important}.pe-0{padding-right:0!important}.pe-1{padding-right:.25rem!important}.pe-2{padding-right:.5rem!important}.pe-3{padding-right:1rem!important}.pe-4{padding-right:1.5rem!important}.pe-5{padding-right:3rem!important}.pb-0{padding-bottom:0!important}.pb-1{padding-bottom:.25rem!important}.pb-2{padding-bottom:.5rem!important}.pb-3{padding-bottom:1rem!important}.pb-4{padding-bottom:1.5rem!important}.pb-5{padding-bottom:3rem!important}.ps-0{padding-left:0!important}.ps-1{padding-left:.25rem!important}.ps-2{padding-left:.5rem!important}.ps-3{padding-left:1rem!important}.ps-4{padding-left:1.5rem!important}.ps-5{padding-left:3rem!important}.font-monospace{font-family:var(--bs-font-monospace)!important}.fs-1{font-size:calc(1.375rem + 1.5vw)!important}.fs-2{font-size:calc(1.325rem + .9vw)!important}
89.fs-3{font-size:calc(1.3rem + .6vw)!important}.fs-4{font-size:calc(1.275rem + .3vw)!important}.fs-5{font-size:1.25rem!important}.fs-6{font-size:1rem!important}.fst-italic{font-style:italic!important}.fst-normal{font-style:normal!important}.fw-light{font-weight:300!important}.fw-lighter{font-weight:lighter!important}.fw-normal{font-weight:400!important}.fw-bold{font-weight:700!important}.fw-bolder{font-weight:bolder!important}.lh-1{line-height:1!important}.lh-sm{line-height:1.25!important}.lh-base{line-height:1.5!important}.lh-lg{line-height:2!important}.text-start{text-align:left!important}.text-end{text-align:right!important}.text-center{text-align:center!important}.text-decoration-none{text-decoration:none!important}.text-decoration-underline{text-decoration:underline!important}.text-decoration-line-through{text-decoration:line-through!important}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-break{word-wrap:break-word!important;word-break:break-word!important}.text-primary{color:#024ec0!important}.text-secondary{color:#6c757d!important}.text-success{color:#198754!important}.text-info{color:#0dcaf0!important}.text-warning{color:#ffc107!important}.text-danger{color:#dc3545!important}.text-light{color:#f8f9fa!important}.text-dark{color:#212529!important}.text-white{color:#fff!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:rgba(255,255,255,.5)!important}.text-reset{color:inherit!important}.bg-primary{background-color:#024ec0!important}.bg-secondary{background-color:#6c757d!important}.bg-success{background-color:#198754!important}.bg-info{background-color:#0dcaf0!important}.bg-warning{background-color:#ffc107!important}.bg-danger{background-color:#dc3545!important}.bg-light{background-color:#f8f9fa!important}.bg-dark{background-color:#212529!important}.bg-body{background-color:#fff!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.bg-gradient{background-image:var(--bs-gradient)!important}.user-select-all{-webkit-user-select:all!important;-moz-user-select:all!important;user-select:all!important}.user-select-auto{-webkit-user-select:auto!important;-moz-user-select:auto!important;user-select:auto!important}.user-select-none{-webkit-user-select:none!important;-moz-user-select:none!important;user-select:none!important}.pe-none{pointer-events:none!important}.pe-auto{pointer-events:auto!important}.rounded{border-radius:.25rem!important}.rounded-0{border-radius:0!important}.rounded-1{border-radius:.2rem!important}.rounded-2{border-radius:.25rem!important}.rounded-3{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-end{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-start{border-bottom-left-radius:.25rem!important;border-top-left-radius:.25rem!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media (min-width:576px){.float-sm-start{float:left!important}.float-sm-end{float:right!important}.float-sm-none{float:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-grid{display:grid!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}.d-sm-none{display:none!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-sm-0{gap:0!important}.gap-sm-1{gap:.25rem!important}.gap-sm-2{gap:.5rem!important}.gap-sm-3{gap:1rem!important}.gap-sm-4{gap:1.5rem!important}.gap-sm-5{gap:3rem!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.justify-content-sm-evenly{justify-content:space-evenly!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}
89.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}.order-sm-first{order:-1!important}.order-sm-0{order:0!important}.order-sm-1{order:1!important}.order-sm-2{order:2!important}.order-sm-3{order:3!important}.order-sm-4{order:4!important}.order-sm-5{order:5!important}.order-sm-last{order:6!important}.m-sm-0{margin:0!important}.m-sm-1{margin:.25rem!important}.m-sm-2{margin:.5rem!important}.m-sm-3{margin:1rem!important}.m-sm-4{margin:1.5rem!important}.m-sm-5{margin:3rem!important}.m-sm-auto{margin:auto!important}.mx-sm-0{margin-right:0!important;margin-left:0!important}.mx-sm-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-sm-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-sm-3{margin-right:1rem!important;margin-left:1rem!important}.mx-sm-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-sm-5{margin-right:3rem!important;margin-left:3rem!important}.mx-sm-auto{margin-right:auto!important;margin-left:auto!important}.my-sm-0{margin-top:0!important;margin-bottom:0!important}.my-sm-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-sm-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-sm-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-sm-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-sm-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-sm-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-sm-0{margin-top:0!important}.mt-sm-1{margin-top:.25rem!important}.mt-sm-2{margin-top:.5rem!important}.mt-sm-3{margin-top:1rem!important}.mt-sm-4{margin-top:1.5rem!important}.mt-sm-5{margin-top:3rem!important}.mt-sm-auto{margin-top:auto!important}.me-sm-0{margin-right:0!important}.me-sm-1{margin-right:.25rem!important}.me-sm-2{margin-right:.5rem!important}.me-sm-3{margin-right:1rem!important}.me-sm-4{margin-right:1.5rem!important}.me-sm-5{margin-right:3rem!important}.me-sm-auto{margin-right:auto!important}.mb-sm-0{margin-bottom:0!important}.mb-sm-1{margin-bottom:.25rem!important}.mb-sm-2{margin-bottom:.5rem!important}.mb-sm-3{margin-bottom:1rem!important}.mb-sm-4{margin-bottom:1.5rem!important}.mb-sm-5{margin-bottom:3rem!important}.mb-sm-auto{margin-bottom:auto!important}.ms-sm-0{margin-left:0!important}.ms-sm-1{margin-left:.25rem!important}.ms-sm-2{margin-left:.5rem!important}.ms-sm-3{margin-left:1rem!important}.ms-sm-4{margin-left:1.5rem!important}.ms-sm-5{margin-left:3rem!important}.ms-sm-auto{margin-left:auto!important}.p-sm-0{padding:0!important}.p-sm-1{padding:.25rem!important}.p-sm-2{padding:.5rem!important}.p-sm-3{padding:1rem!important}.p-sm-4{padding:1.5rem!important}.p-sm-5{padding:3rem!important}.px-sm-0{padding-right:0!important;padding-left:0!important}.px-sm-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-sm-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-sm-3{padding-right:1rem!important;padding-left:1rem!important}.px-sm-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-sm-5{padding-right:3rem!important;padding-left:3rem!important}.py-sm-0{padding-top:0!important;padding-bottom:0!important}.py-sm-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-sm-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-sm-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-sm-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-sm-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-sm-0{padding-top:0!important}.pt-sm-1{padding-top:.25rem!important}.pt-sm-2{padding-top:.5rem!important}.pt-sm-3{padding-top:1rem!important}.pt-sm-4{padding-top:1.5rem!important}.pt-sm-5{padding-top:3rem!important}.pe-sm-0{padding-right:0!important}.pe-sm-1{padding-right:.25rem!important}.pe-sm-2{padding-right:.5rem!important}.pe-sm-3{padding-right:1rem!important}.pe-sm-4{padding-right:1.5rem!important}.pe-sm-5{padding-right:3rem!important}.pb-sm-0{padding-bottom:0!important}.pb-sm-1{padding-bottom:.25rem!important}.pb-sm-2{padding-bottom:.5rem!important}.pb-sm-3{padding-bottom:1rem!important}.pb-sm-4{padding-bottom:1.5rem!important}.pb-sm-5{padding-bottom:3rem!important}.ps-sm-0{padding-left:0!important}.ps-sm-1{padding-left:.25rem!important}.ps-sm-2{padding-left:.5rem!important}.ps-sm-3{padding-left:1rem!important}.ps-sm-4{padding-left:1.5rem!important}.ps-sm-5{padding-left:3rem!important}.text-sm-start{text-align:left!important}.text-sm-end{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.float-md-start{float:left!important}.float-md-end{float:right!important}.float-md-none{float:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-grid{display:grid!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}.d-md-none{display:none!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-md-0{gap:0!important}.gap-md-1{gap:.25rem!important}.gap-md-2{gap:.5rem!important}.gap-md-3{gap:1rem!important}.gap-md-4{gap:1.5rem!important}.gap-md-5{gap:3rem!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.justify-content-md-evenly{justify-content:space-evenly!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}
89.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}.order-md-first{order:-1!important}.order-md-0{order:0!important}.order-md-1{order:1!important}.order-md-2{order:2!important}.order-md-3{order:3!important}.order-md-4{order:4!important}.order-md-5{order:5!important}.order-md-last{order:6!important}.m-md-0{margin:0!important}.m-md-1{margin:.25rem!important}.m-md-2{margin:.5rem!important}.m-md-3{margin:1rem!important}.m-md-4{margin:1.5rem!important}.m-md-5{margin:3rem!important}.m-md-auto{margin:auto!important}.mx-md-0{margin-right:0!important;margin-left:0!important}.mx-md-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-md-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-md-3{margin-right:1rem!important;margin-left:1rem!important}.mx-md-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-md-5{margin-right:3rem!important;margin-left:3rem!important}.mx-md-auto{margin-right:auto!important;margin-left:auto!important}.my-md-0{margin-top:0!important;margin-bottom:0!important}.my-md-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-md-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-md-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-md-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-md-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-md-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-md-0{margin-top:0!important}.mt-md-1{margin-top:.25rem!important}.mt-md-2{margin-top:.5rem!important}.mt-md-3{margin-top:1rem!important}.mt-md-4{margin-top:1.5rem!important}.mt-md-5{margin-top:3rem!important}.mt-md-auto{margin-top:auto!important}.me-md-0{margin-right:0!important}.me-md-1{margin-right:.25rem!important}.me-md-2{margin-right:.5rem!important}.me-md-3{margin-right:1rem!important}.me-md-4{margin-right:1.5rem!important}.me-md-5{margin-right:3rem!important}.me-md-auto{margin-right:auto!important}.mb-md-0{margin-bottom:0!important}.mb-md-1{margin-bottom:.25rem!important}.mb-md-2{margin-bottom:.5rem!important}.mb-md-3{margin-bottom:1rem!important}.mb-md-4{margin-bottom:1.5rem!important}.mb-md-5{margin-bottom:3rem!important}.mb-md-auto{margin-bottom:auto!important}.ms-md-0{margin-left:0!important}.ms-md-1{margin-left:.25rem!important}.ms-md-2{margin-left:.5rem!important}.ms-md-3{margin-left:1rem!important}.ms-md-4{margin-left:1.5rem!important}.ms-md-5{margin-left:3rem!important}.ms-md-auto{margin-left:auto!important}.p-md-0{padding:0!important}.p-md-1{padding:.25rem!important}.p-md-2{padding:.5rem!important}.p-md-3{padding:1rem!important}.p-md-4{padding:1.5rem!important}.p-md-5{padding:3rem!important}.px-md-0{padding-right:0!important;padding-left:0!important}.px-md-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-md-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-md-3{padding-right:1rem!important;padding-left:1rem!important}.px-md-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-md-5{padding-right:3rem!important;padding-left:3rem!important}.py-md-0{padding-top:0!important;padding-bottom:0!important}.py-md-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-md-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-md-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-md-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-md-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-md-0{padding-top:0!important}.pt-md-1{padding-top:.25rem!important}.pt-md-2{padding-top:.5rem!important}.pt-md-3{padding-top:1rem!important}.pt-md-4{padding-top:1.5rem!important}.pt-md-5{padding-top:3rem!important}.pe-md-0{padding-right:0!important}.pe-md-1{padding-right:.25rem!important}.pe-md-2{padding-right:.5rem!important}.pe-md-3{padding-right:1rem!important}.pe-md-4{padding-right:1.5rem!important}.pe-md-5{padding-right:3rem!important}.pb-md-0{padding-bottom:0!important}.pb-md-1{padding-bottom:.25rem!important}.pb-md-2{padding-bottom:.5rem!important}.pb-md-3{padding-bottom:1rem!important}.pb-md-4{padding-bottom:1.5rem!important}.pb-md-5{padding-bottom:3rem!important}.ps-md-0{padding-left:0!important}.ps-md-1{padding-left:.25rem!important}.ps-md-2{padding-left:.5rem!important}.ps-md-3{padding-left:1rem!important}.ps-md-4{padding-left:1.5rem!important}.ps-md-5{padding-left:3rem!important}.text-md-start{text-align:left!important}.text-md-end{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.float-lg-start{float:left!important}.float-lg-end{float:right!important}.float-lg-none{float:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-grid{display:grid!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}.d-lg-none{display:none!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-lg-0{gap:0!important}.gap-lg-1{gap:.25rem!important}.gap-lg-2{gap:.5rem!important}.gap-lg-3{gap:1rem!important}.gap-lg-4{gap:1.5rem!important}.gap-lg-5{gap:3rem!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.justify-content-lg-evenly{justify-content:space-evenly!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}
89.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}.order-lg-first{order:-1!important}.order-lg-0{order:0!important}.order-lg-1{order:1!important}.order-lg-2{order:2!important}.order-lg-3{order:3!important}.order-lg-4{order:4!important}.order-lg-5{order:5!important}.order-lg-last{order:6!important}.m-lg-0{margin:0!important}.m-lg-1{margin:.25rem!important}.m-lg-2{margin:.5rem!important}.m-lg-3{margin:1rem!important}.m-lg-4{margin:1.5rem!important}.m-lg-5{margin:3rem!important}.m-lg-auto{margin:auto!important}.mx-lg-0{margin-right:0!important;margin-left:0!important}.mx-lg-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-lg-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-lg-3{margin-right:1rem!important;margin-left:1rem!important}.mx-lg-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-lg-5{margin-right:3rem!important;margin-left:3rem!important}.mx-lg-auto{margin-right:auto!important;margin-left:auto!important}.my-lg-0{margin-top:0!important;margin-bottom:0!important}.my-lg-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-lg-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-lg-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-lg-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-lg-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-lg-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-lg-0{margin-top:0!important}.mt-lg-1{margin-top:.25rem!important}.mt-lg-2{margin-top:.5rem!important}.mt-lg-3{margin-top:1rem!important}.mt-lg-4{margin-top:1.5rem!important}.mt-lg-5{margin-top:3rem!important}.mt-lg-auto{margin-top:auto!important}.me-lg-0{margin-right:0!important}.me-lg-1{margin-right:.25rem!important}.me-lg-2{margin-right:.5rem!important}.me-lg-3{margin-right:1rem!important}.me-lg-4{margin-right:1.5rem!important}.me-lg-5{margin-right:3rem!important}.me-lg-auto{margin-right:auto!important}.mb-lg-0{margin-bottom:0!important}.mb-lg-1{margin-bottom:.25rem!important}.mb-lg-2{margin-bottom:.5rem!important}.mb-lg-3{margin-bottom:1rem!important}.mb-lg-4{margin-bottom:1.5rem!important}.mb-lg-5{margin-bottom:3rem!important}.mb-lg-auto{margin-bottom:auto!important}.ms-lg-0{margin-left:0!important}.ms-lg-1{margin-left:.25rem!important}.ms-lg-2{margin-left:.5rem!important}.ms-lg-3{margin-left:1rem!important}.ms-lg-4{margin-left:1.5rem!important}.ms-lg-5{margin-left:3rem!important}.ms-lg-auto{margin-left:auto!important}.p-lg-0{padding:0!important}.p-lg-1{padding:.25rem!important}.p-lg-2{padding:.5rem!important}.p-lg-3{padding:1rem!important}.p-lg-4{padding:1.5rem!important}.p-lg-5{padding:3rem!important}.px-lg-0{padding-right:0!important;padding-left:0!important}.px-lg-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-lg-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-lg-3{padding-right:1rem!important;padding-left:1rem!important}.px-lg-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-lg-5{padding-right:3rem!important;padding-left:3rem!important}.py-lg-0{padding-top:0!important;padding-bottom:0!important}.py-lg-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-lg-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-lg-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-lg-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-lg-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-lg-0{padding-top:0!important}.pt-lg-1{padding-top:.25rem!important}.pt-lg-2{padding-top:.5rem!important}.pt-lg-3{padding-top:1rem!important}.pt-lg-4{padding-top:1.5rem!important}.pt-lg-5{padding-top:3rem!important}.pe-lg-0{padding-right:0!important}.pe-lg-1{padding-right:.25rem!important}.pe-lg-2{padding-right:.5rem!important}.pe-lg-3{padding-right:1rem!important}.pe-lg-4{padding-right:1.5rem!important}.pe-lg-5{padding-right:3rem!important}.pb-lg-0{padding-bottom:0!important}.pb-lg-1{padding-bottom:.25rem!important}.pb-lg-2{padding-bottom:.5rem!important}.pb-lg-3{padding-bottom:1rem!important}.pb-lg-4{padding-bottom:1.5rem!important}.pb-lg-5{padding-bottom:3rem!important}.ps-lg-0{padding-left:0!important}.ps-lg-1{padding-left:.25rem!important}.ps-lg-2{padding-left:.5rem!important}.ps-lg-3{padding-left:1rem!important}.ps-lg-4{padding-left:1.5rem!important}.ps-lg-5{padding-left:3rem!important}.text-lg-start{text-align:left!important}.text-lg-end{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.float-xl-start{float:left!important}.float-xl-end{float:right!important}.float-xl-none{float:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-grid{display:grid!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}.d-xl-none{display:none!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-xl-0{gap:0!important}.gap-xl-1{gap:.25rem!important}.gap-xl-2{gap:.5rem!important}.gap-xl-3{gap:1rem!important}.gap-xl-4{gap:1.5rem!important}.gap-xl-5{gap:3rem!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.justify-content-xl-evenly{justify-content:space-evenly!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}
89.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}.order-xl-first{order:-1!important}.order-xl-0{order:0!important}.order-xl-1{order:1!important}.order-xl-2{order:2!important}.order-xl-3{order:3!important}.order-xl-4{order:4!important}.order-xl-5{order:5!important}.order-xl-last{order:6!important}.m-xl-0{margin:0!important}.m-xl-1{margin:.25rem!important}.m-xl-2{margin:.5rem!important}.m-xl-3{margin:1rem!important}.m-xl-4{margin:1.5rem!important}.m-xl-5{margin:3rem!important}.m-xl-auto{margin:auto!important}.mx-xl-0{margin-right:0!important;margin-left:0!important}.mx-xl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xl-5{margin-right:3rem!important;margin-left:3rem!important}.mx-xl-auto{margin-right:auto!important;margin-left:auto!important}.my-xl-0{margin-top:0!important;margin-bottom:0!important}.my-xl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xl-0{margin-top:0!important}.mt-xl-1{margin-top:.25rem!important}.mt-xl-2{margin-top:.5rem!important}.mt-xl-3{margin-top:1rem!important}.mt-xl-4{margin-top:1.5rem!important}.mt-xl-5{margin-top:3rem!important}.mt-xl-auto{margin-top:auto!important}.me-xl-0{margin-right:0!important}.me-xl-1{margin-right:.25rem!important}.me-xl-2{margin-right:.5rem!important}.me-xl-3{margin-right:1rem!important}.me-xl-4{margin-right:1.5rem!important}.me-xl-5{margin-right:3rem!important}.me-xl-auto{margin-right:auto!important}.mb-xl-0{margin-bottom:0!important}.mb-xl-1{margin-bottom:.25rem!important}.mb-xl-2{margin-bottom:.5rem!important}.mb-xl-3{margin-bottom:1rem!important}.mb-xl-4{margin-bottom:1.5rem!important}.mb-xl-5{margin-bottom:3rem!important}.mb-xl-auto{margin-bottom:auto!important}.ms-xl-0{margin-left:0!important}.ms-xl-1{margin-left:.25rem!important}.ms-xl-2{margin-left:.5rem!important}.ms-xl-3{margin-left:1rem!important}.ms-xl-4{margin-left:1.5rem!important}.ms-xl-5{margin-left:3rem!important}.ms-xl-auto{margin-left:auto!important}.p-xl-0{padding:0!important}.p-xl-1{padding:.25rem!important}.p-xl-2{padding:.5rem!important}.p-xl-3{padding:1rem!important}.p-xl-4{padding:1.5rem!important}.p-xl-5{padding:3rem!important}.px-xl-0{padding-right:0!important;padding-left:0!important}.px-xl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xl-0{padding-top:0!important;padding-bottom:0!important}.py-xl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xl-0{padding-top:0!important}.pt-xl-1{padding-top:.25rem!important}.pt-xl-2{padding-top:.5rem!important}.pt-xl-3{padding-top:1rem!important}.pt-xl-4{padding-top:1.5rem!important}.pt-xl-5{padding-top:3rem!important}.pe-xl-0{padding-right:0!important}.pe-xl-1{padding-right:.25rem!important}.pe-xl-2{padding-right:.5rem!important}.pe-xl-3{padding-right:1rem!important}.pe-xl-4{padding-right:1.5rem!important}.pe-xl-5{padding-right:3rem!important}.pb-xl-0{padding-bottom:0!important}.pb-xl-1{padding-bottom:.25rem!important}.pb-xl-2{padding-bottom:.5rem!important}.pb-xl-3{padding-bottom:1rem!important}.pb-xl-4{padding-bottom:1.5rem!important}.pb-xl-5{padding-bottom:3rem!important}.ps-xl-0{padding-left:0!important}.ps-xl-1{padding-left:.25rem!important}.ps-xl-2{padding-left:.5rem!important}.ps-xl-3{padding-left:1rem!important}.ps-xl-4{padding-left:1.5rem!important}.ps-xl-5{padding-left:3rem!important}.text-xl-start{text-align:left!important}.text-xl-end{text-align:right!important}
89.text-xl-center{text-align:center!important}}@media (min-width:1400px){.float-xxl-start{float:left!important}.float-xxl-end{float:right!important}.float-xxl-none{float:none!important}.d-xxl-inline{display:inline!important}.d-xxl-inline-block{display:inline-block!important}.d-xxl-block{display:block!important}.d-xxl-grid{display:grid!important}.d-xxl-table{display:table!important}.d-xxl-table-row{display:table-row!important}.d-xxl-table-cell{display:table-cell!important}.d-xxl-flex{display:flex!important}.d-xxl-inline-flex{display:inline-flex!important}.d-xxl-none{display:none!important}.flex-xxl-fill{flex:1 1 auto!important}.flex-xxl-row{flex-direction:row!important}.flex-xxl-column{flex-direction:column!important}.flex-xxl-row-reverse{flex-direction:row-reverse!important}.flex-xxl-column-reverse{flex-direction:column-reverse!important}.flex-xxl-grow-0{flex-grow:0!important}.flex-xxl-grow-1{flex-grow:1!important}.flex-xxl-shrink-0{flex-shrink:0!important}.flex-xxl-shrink-1{flex-shrink:1!important}.flex-xxl-wrap{flex-wrap:wrap!important}.flex-xxl-nowrap{flex-wrap:nowrap!important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-xxl-0{gap:0!important}.gap-xxl-1{gap:.25rem!important}.gap-xxl-2{gap:.5rem!important}.gap-xxl-3{gap:1rem!important}.gap-xxl-4{gap:1.5rem!important}.gap-xxl-5{gap:3rem!important}.justify-content-xxl-start{justify-content:flex-start!important}.justify-content-xxl-end{justify-content:flex-end!important}.justify-content-xxl-center{justify-content:center!important}.justify-content-xxl-between{justify-content:space-between!important}.justify-content-xxl-around{justify-content:space-around!important}.justify-content-xxl-evenly{justify-content:space-evenly!important}.align-items-xxl-start{align-items:flex-start!important}.align-items-xxl-end{align-items:flex-end!important}.align-items-xxl-center{align-items:center!important}.align-items-xxl-baseline{align-items:baseline!important}.align-items-xxl-stretch{align-items:stretch!important}.align-content-xxl-start{align-content:flex-start!important}.align-content-xxl-end{align-content:flex-end!important}.align-content-xxl-center{align-content:center!important}.align-content-xxl-between{align-content:space-between!important}.align-content-xxl-around{align-content:space-around!important}.align-content-xxl-stretch{align-content:stretch!important}.align-self-xxl-auto{align-self:auto!important}.align-self-xxl-start{align-self:flex-start!important}.align-self-xxl-end{align-self:flex-end!important}.align-self-xxl-center{align-self:center!important}.align-self-xxl-baseline{align-self:baseline!important}.align-self-xxl-stretch{align-self:stretch!important}.order-xxl-first{order:-1!important}.order-xxl-0{order:0!important}.order-xxl-1{order:1!important}.order-xxl-2{order:2!important}.order-xxl-3{order:3!important}.order-xxl-4{order:4!important}.order-xxl-5{order:5!important}.order-xxl-last{order:6!important}.m-xxl-0{margin:0!important}.m-xxl-1{margin:.25rem!important}.m-xxl-2{margin:.5rem!important}.m-xxl-3{margin:1rem!important}.m-xxl-4{margin:1.5rem!important}.m-xxl-5{margin:3rem!important}.m-xxl-auto{margin:auto!important}.mx-xxl-0{margin-right:0!important;margin-left:0!important}.mx-xxl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xxl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xxl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xxl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xxl-5{margin-right:3rem!important;margin-left:3rem!important}.mx-xxl-auto{margin-right:auto!important;margin-left:auto!important}.my-xxl-0{margin-top:0!important;margin-bottom:0!important}.my-xxl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xxl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xxl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xxl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xxl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xxl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xxl-0{margin-top:0!important}.mt-xxl-1{margin-top:.25rem!important}.mt-xxl-2{margin-top:.5rem!important}.mt-xxl-3{margin-top:1rem!important}.mt-xxl-4{margin-top:1.5rem!important}.mt-xxl-5{margin-top:3rem!important}.mt-xxl-auto{margin-top:auto!important}.me-xxl-0{margin-right:0!important}.me-xxl-1{margin-right:.25rem!important}.me-xxl-2{margin-right:.5rem!important}.me-xxl-3{margin-right:1rem!important}.me-xxl-4{margin-right:1.5rem!important}.me-xxl-5{margin-right:3rem!important}.me-xxl-auto{margin-right:auto!important}.mb-xxl-0{margin-bottom:0!important}.mb-xxl-1{margin-bottom:.25rem!important}.mb-xxl-2{margin-bottom:.5rem!important}.mb-xxl-3{margin-bottom:1rem!important}.mb-xxl-4{margin-bottom:1.5rem!important}.mb-xxl-5{margin-bottom:3rem!important}.mb-xxl-auto{margin-bottom:auto!important}.ms-xxl-0{margin-left:0!important}.ms-xxl-1{margin-left:.25rem!important}.ms-xxl-2{margin-left:.5rem!important}.ms-xxl-3{margin-left:1rem!important}.ms-xxl-4{margin-left:1.5rem!important}.ms-xxl-5{margin-left:3rem!important}.ms-xxl-auto{margin-left:auto!important}.p-xxl-0{padding:0!important}.p-xxl-1{padding:.25rem!important}.p-xxl-2{padding:.5rem!important}.p-xxl-3{padding:1rem!important}.p-xxl-4{padding:1.5rem!important}.p-xxl-5{padding:3rem!important}.px-xxl-0{padding-right:0!important;padding-left:0!important}.px-xxl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xxl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xxl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xxl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xxl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xxl-0{padding-top:0!important;padding-bottom:0!important}.py-xxl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xxl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xxl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xxl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xxl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xxl-0{padding-top:0!important}.pt-xxl-1{padding-top:.25rem!important}.pt-xxl-2{padding-top:.5rem!important}.pt-xxl-3{padding-top:1rem!important}.pt-xxl-4{padding-top:1.5rem!important}.pt-xxl-5{padding-top:3rem!important}
89.pe-xxl-0{padding-right:0!important}.pe-xxl-1{padding-right:.25rem!important}.pe-xxl-2{padding-right:.5rem!important}.pe-xxl-3{padding-right:1rem!important}.pe-xxl-4{padding-right:1.5rem!important}.pe-xxl-5{padding-right:3rem!important}.pb-xxl-0{padding-bottom:0!important}.pb-xxl-1{padding-bottom:.25rem!important}.pb-xxl-2{padding-bottom:.5rem!important}.pb-xxl-3{padding-bottom:1rem!important}.pb-xxl-4{padding-bottom:1.5rem!important}.pb-xxl-5{padding-bottom:3rem!important}.ps-xxl-0{padding-left:0!important}.ps-xxl-1{padding-left:.25rem!important}.ps-xxl-2{padding-left:.5rem!important}.ps-xxl-3{padding-left:1rem!important}.ps-xxl-4{padding-left:1.5rem!important}.ps-xxl-5{padding-left:3rem!important}.text-xxl-start{text-align:left!important}.text-xxl-end{text-align:right!important}.text-xxl-center{text-align:center!important}}@media (min-width:1200px){.fs-1{font-size:2.5rem!important}.fs-2{font-size:2rem!important}.fs-3{font-size:1.75rem!important}.fs-4{font-size:1.5rem!important}}@media print{.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-grid{display:grid!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}.d-print-none{display:none!important}}.owl-carousel,.owl-carousel .owl-item{-webkit-tap-highlight-color:transparent;position:relative}.owl-carousel{display:none;width:100%;z-index:1}.owl-carousel .owl-stage{position:relative;-ms-touch-action:pan-Y;touch-action:manipulation;-moz-backface-visibility:hidden}.owl-carousel .owl-stage:after{content:".";display:block;clear:both;visibility:hidden;line-height:0;height:0}.owl-carousel .owl-stage-outer{position:relative;overflow:hidden;-webkit-transform:translate3d(0,0,0)}.owl-carousel .owl-item,.owl-carousel .owl-wrapper{-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0)}.owl-carousel .owl-item{min-height:1px;float:left;-webkit-backface-visibility:hidden;-webkit-touch-callout:none}.owl-carousel .owl-item img{display:block;width:100%}.owl-carousel .owl-dots.disabled,.owl-carousel .owl-nav.disabled{display:none}.no-js .owl-carousel,.owl-carousel.owl-loaded{display:block}.owl-carousel .owl-dot,.owl-carousel .owl-nav .owl-next,.owl-carousel .owl-nav .owl-prev{cursor:pointer;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.owl-carousel .owl-nav button.owl-next,.owl-carousel .owl-nav button.owl-prev,.owl-carousel button.owl-dot{background:0 0;color:inherit;border:none;padding:0!important;font:inherit}.owl-carousel.owl-loading{opacity:0;display:block}.owl-carousel.owl-hidden{opacity:0}
89.owl-carousel.owl-refresh .owl-item{visibility:hidden}.owl-carousel.owl-drag .owl-item{-ms-touch-action:pan-y;touch-action:pan-y;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.owl-carousel.owl-grab{cursor:move;cursor:grab}.owl-carousel.owl-rtl{direction:rtl}.owl-carousel.owl-rtl .owl-item{float:right}.owl-carousel .animated{animation-duration:1s;animation-fill-mode:both}.owl-carousel .owl-animated-in{z-index:0}.owl-carousel .owl-animated-out{z-index:1}.owl-carousel .fadeOut{animation-name:fadeOut}@keyframes fadeOut{0%{opacity:1}100%{opacity:0}}.owl-height{transition:height .5s ease-in-out}.owl-carousel .owl-item .owl-lazy{opacity:0;transition:opacity .4s ease}.owl-carousel .owl-item .owl-lazy:not([src]),.owl-carousel .owl-item .owl-lazy[src^=""]{max-height:0}.owl-carousel .owl-item img.owl-lazy{transform-style:preserve-3d}.owl-carousel .owl-video-wrapper{position:relative;height:100%;background:#000}.owl-carousel .owl-video-play-icon{position:absolute;height:80px;width:80px;left:50%;top:50%;margin-left:-40px;margin-top:-40px;background:url(owl.video.play.png) no-repeat;cursor:pointer;z-index:1;-webkit-backface-visibility:hidden;transition:transform .1s ease}.owl-carousel .owl-video-play-icon:hover{-ms-transform:scale(1.3,1.3);transform:scale(1.3,1.3)}.owl-carousel .owl-video-playing .owl-video-play-icon,.owl-carousel .owl-video-playing .owl-video-tn{display:none}.owl-carousel .owl-video-tn{opacity:0;height:100%;background-position:center center;background-repeat:no-repeat;background-size:contain;transition:opacity .4s ease}.owl-carousel .owl-video-frame{position:relative;z-index:1;height:100%;width:100%}.owl-theme .owl-dots,.owl-theme .owl-nav{text-align:center;-webkit-tap-highlight-color:transparent}.owl-theme .owl-nav{margin-top:10px}.owl-theme .owl-nav [class*=owl-]{color:#FFF;font-size:14px;margin:5px;padding:4px 7px;background:#D6D6D6;display:inline-block;cursor:pointer;border-radius:3px}.owl-theme .owl-nav [class*=owl-]:hover{background:#869791;color:#FFF}.owl-theme .owl-nav .disabled{opacity:.5;cursor:default}.owl-theme .owl-nav.disabled+.owl-dots{margin-top:10px}.owl-theme .owl-dots .owl-dot{display:inline-block;zoom:1}.owl-theme .owl-dots .owl-dot span{width:10px;height:10px;margin:5px 7px;background:#D6D6D6;display:block;-webkit-backface-visibility:visible;transition:opacity .2s ease;border-radius:30px}.owl-theme .owl-dots .owl-dot.active span,.owl-theme .owl-dots .owl-dot:hover span{background:#869791}root{--animate-duration:1s;--animate-delay:1s;--animate-repeat:1}.animate__animated{-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-duration:var(--animate-duration);animation-duration:var(--animate-duration);-webkit-animation-fill-mode:both;animation-fill-mode:both}.animate__animated.animate__infinite{-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.animate__animated.animate__repeat-1{-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-iteration-count:var(--animate-repeat);animation-iteration-count:var(--animate-repeat)}.animate__animated.animate__repeat-2{-webkit-animation-iteration-count:2;animation-iteration-count:2;-webkit-animation-iteration-count:calc(var(--animate-repeat)*2);animation-iteration-count:calc(var(--animate-repeat)*2)}.animate__animated.animate__repeat-3{-webkit-animation-iteration-count:3;animation-iteration-count:3;-webkit-animation-iteration-count:calc(var(--animate-repeat)*3);animation-iteration-count:calc(var(--animate-repeat)*3)}.animate__animated.animate__delay-1s{-webkit-animation-delay:1s;animation-delay:1s;-webkit-animation-delay:var(--animate-delay);animation-delay:var(--animate-delay)}.animate__animated.animate__delay-2s{-webkit-animation-delay:2s;animation-delay:2s;-webkit-animation-delay:calc(var(--animate-delay)*2);animation-delay:calc(var(--animate-delay)*2)}.animate__animated.animate__delay-3s{-webkit-animation-delay:3s;animation-delay:3s;-webkit-animation-delay:calc(var(--animate-delay)*3);animation-delay:calc(var(--animate-delay)*3)}.animate__animated.animate__delay-4s{-webkit-animation-delay:4s;animation-delay:4s;-webkit-animation-delay:calc(var(--animate-delay)*4);animation-delay:calc(var(--animate-delay)*4)}.animate__animated.animate__delay-5s{-webkit-animation-delay:5s;animation-delay:5s;-webkit-animation-delay:calc(var(--animate-delay)*5);animation-delay:calc(var(--animate-delay)*5)}.animate__animated.animate__faster{-webkit-animation-duration:.5s;animation-duration:.5s;-webkit-animation-duration:calc(var(--animate-duration)/2);animation-duration:calc(var(--animate-duration)/2)}.animate__animated.animate__fast{-webkit-animation-duration:.8s;animation-duration:.8s;-webkit-animation-duration:calc(var(--animate-duration)*0.8);animation-duration:calc(var(--animate-duration)*0.8)}.animate__animated.animate__slow{-webkit-animation-duration:2s;animation-duration:2s;-webkit-animation-duration:calc(var(--animate-duration)*2);animation-duration:calc(var(--animate-duration)*2)}.animate__animated.animate__slower{-webkit-animation-duration:3s;animation-duration:3s;-webkit-animation-duration:calc(var(--animate-duration)*3);animation-duration:calc(var(--animate-duration)*3)}@media (prefers-reduced-motion:reduce),print{.animate__animated{-webkit-animation-duration:1ms!important;animation-duration:1ms!important;-webkit-transition-duration:1ms!important;transition-duration:1ms!important;-webkit-animation-iteration-count:1!important;animation-iteration-count:1!important}.animate__animated[class*=Out]{opacity:0}
89}@-webkit-keyframes bounce{0%,20%,53%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translateZ(0);transform:translateZ(0)}40%,43%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-30px,0) scaleY(1.1);transform:translate3d(0,-30px,0) scaleY(1.1)}70%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-15px,0) scaleY(1.05);transform:translate3d(0,-15px,0) scaleY(1.05)}80%{-webkit-transition-timing-function:cubic-bezier(.215,.61,.355,1);transition-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translateZ(0) scaleY(.95);transform:translateZ(0) scaleY(.95)}90%{-webkit-transform:translate3d(0,-4px,0) scaleY(1.02);transform:translate3d(0,-4px,0) scaleY(1.02)}}@keyframes bounce{0%,20%,53%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translateZ(0);transform:translateZ(0)}40%,43%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-30px,0) scaleY(1.1);transform:translate3d(0,-30px,0) scaleY(1.1)}70%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-15px,0) scaleY(1.05);transform:translate3d(0,-15px,0) scaleY(1.05)}80%{-webkit-transition-timing-function:cubic-bezier(.215,.61,.355,1);transition-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translateZ(0) scaleY(.95);transform:translateZ(0) scaleY(.95)}90%{-webkit-transform:translate3d(0,-4px,0) scaleY(1.02);transform:translate3d(0,-4px,0) scaleY(1.02)}}.animate__bounce{-webkit-animation-name:bounce;animation-name:bounce;-webkit-transform-origin:center bottom;transform-origin:center bottom}@-webkit-keyframes flash{0%,50%,to{opacity:1}25%,75%{opacity:0}}@keyframes flash{0%,50%,to{opacity:1}25%,75%{opacity:0}}.animate__flash{-webkit-animation-name:flash;animation-name:flash}@-webkit-keyframes pulse{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}@keyframes pulse{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}.animate__pulse{-webkit-animation-name:pulse;animation-name:pulse;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}@-webkit-keyframes rubberBand{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(.75,1.25,1);transform:scale3d(.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}@keyframes rubberBand{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(.75,1.25,1);transform:scale3d(.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}.animate__rubberBand{-webkit-animation-name:rubberBand;animation-name:rubberBand}@-webkit-keyframes shakeX{0%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}@keyframes shakeX{0%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}.animate__shakeX{-webkit-animation-name:shakeX;animation-name:shakeX}@-webkit-keyframes shakeY{0%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}20%,40%,60%,80%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}}@keyframes shakeY{0%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}20%,40%,60%,80%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}}.animate__shakeY{-webkit-animation-name:shakeY;animation-name:shakeY}@-webkit-keyframes headShake{0%{-webkit-transform:translateX(0);transform:translateX(0)}6.5%{-webkit-transform:translateX(-6px) rotateY(-9deg);transform:translateX(-6px) rotateY(-9deg)}18.5%{-webkit-transform:translateX(5px) rotateY(7deg);transform:translateX(5px) rotateY(7deg)}31.5%{-webkit-transform:translateX(-3px) rotateY(-5deg);transform:translateX(-3px) rotateY(-5deg)}43.5%{-webkit-transform:translateX(2px) rotateY(3deg);transform:translateX(2px) rotateY(3deg)}50%{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes headShake{0%{-webkit-transform:translateX(0);transform:translateX(0)}6.5%{-webkit-transform:translateX(-6px) rotateY(-9deg);transform:translateX(-6px) rotateY(-9deg)}18.5%{-webkit-transform:translateX(5px) rotateY(7deg);transform:translateX(5px) rotateY(7deg)}31.5%{-webkit-transform:translateX(-3px) rotateY(-5deg);transform:translateX(-3px) rotateY(-5deg)}43.5%{-webkit-transform:translateX(2px) rotateY(3deg);transform:translateX(2px) rotateY(3deg)}50%{-webkit-transform:translateX(0);transform:translateX(0)}}.animate__headShake{-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-name:headShake;animation-name:headShake}@-webkit-keyframes swing{20%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}40%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}
8960%{-webkit-transform:rotate(5deg);transform:rotate(5deg)}80%{-webkit-transform:rotate(-5deg);transform:rotate(-5deg)}to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@keyframes swing{20%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}40%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}60%{-webkit-transform:rotate(5deg);transform:rotate(5deg)}80%{-webkit-transform:rotate(-5deg);transform:rotate(-5deg)}to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}.animate__swing{-webkit-transform-origin:top center;transform-origin:top center;-webkit-animation-name:swing;animation-name:swing}@-webkit-keyframes tada{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate(-3deg);transform:scale3d(.9,.9,.9) rotate(-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate(3deg);transform:scale3d(1.1,1.1,1.1) rotate(3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate(-3deg);transform:scale3d(1.1,1.1,1.1) rotate(-3deg)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}@keyframes tada{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate(-3deg);transform:scale3d(.9,.9,.9) rotate(-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate(3deg);transform:scale3d(1.1,1.1,1.1) rotate(3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate(-3deg);transform:scale3d(1.1,1.1,1.1) rotate(-3deg)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}.animate__tada{-webkit-animation-name:tada;animation-name:tada}@-webkit-keyframes wobble{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}15%{-webkit-transform:translate3d(-25%,0,0) rotate(-5deg);transform:translate3d(-25%,0,0) rotate(-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate(3deg);transform:translate3d(20%,0,0) rotate(3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate(-3deg);transform:translate3d(-15%,0,0) rotate(-3deg)}60%{-webkit-transform:translate3d(10%,0,0) rotate(2deg);transform:translate3d(10%,0,0) rotate(2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate(-1deg);transform:translate3d(-5%,0,0) rotate(-1deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes wobble{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}15%{-webkit-transform:translate3d(-25%,0,0) rotate(-5deg);transform:translate3d(-25%,0,0) rotate(-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate(3deg);transform:translate3d(20%,0,0) rotate(3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate(-3deg);transform:translate3d(-15%,0,0) rotate(-3deg)}60%{-webkit-transform:translate3d(10%,0,0) rotate(2deg);transform:translate3d(10%,0,0) rotate(2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate(-1deg);transform:translate3d(-5%,0,0) rotate(-1deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__wobble{-webkit-animation-name:wobble;animation-name:wobble}@-webkit-keyframes jello{0%,11.1%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}22.2%{-webkit-transform:skewX(-12.5deg) skewY(-12.5deg);transform:skewX(-12.5deg) skewY(-12.5deg)}33.3%{-webkit-transform:skewX(6.25deg) skewY(6.25deg);transform:skewX(6.25deg) skewY(6.25deg)}44.4%{-webkit-transform:skewX(-3.125deg) skewY(-3.125deg);transform:skewX(-3.125deg) skewY(-3.125deg)}55.5%{-webkit-transform:skewX(1.5625deg) skewY(1.5625deg);transform:skewX(1.5625deg) skewY(1.5625deg)}66.6%{-webkit-transform:skewX(-.78125deg) skewY(-.78125deg);transform:skewX(-.78125deg) skewY(-.78125deg)}77.7%{-webkit-transform:skewX(.390625deg) skewY(.390625deg);transform:skewX(.390625deg) skewY(.390625deg)}88.8%{-webkit-transform:skewX(-.1953125deg) skewY(-.1953125deg);transform:skewX(-.1953125deg) skewY(-.1953125deg)}}@keyframes jello{0%,11.1%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}22.2%{-webkit-transform:skewX(-12.5deg) skewY(-12.5deg);transform:skewX(-12.5deg) skewY(-12.5deg)}33.3%{-webkit-transform:skewX(6.25deg) skewY(6.25deg);transform:skewX(6.25deg) skewY(6.25deg)}44.4%{-webkit-transform:skewX(-3.125deg) skewY(-3.125deg);transform:skewX(-3.125deg) skewY(-3.125deg)}55.5%{-webkit-transform:skewX(1.5625deg) skewY(1.5625deg);transform:skewX(1.5625deg) skewY(1.5625deg)}66.6%{-webkit-transform:skewX(-.78125deg) skewY(-.78125deg);transform:skewX(-.78125deg) skewY(-.78125deg)}77.7%{-webkit-transform:skewX(.390625deg) skewY(.390625deg);transform:skewX(.390625deg) skewY(.390625deg)}88.8%{-webkit-transform:skewX(-.1953125deg) skewY(-.1953125deg);transform:skewX(-.1953125deg) skewY(-.1953125deg)}}.animate__jello{-webkit-animation-name:jello;animation-name:jello;-webkit-transform-origin:center;transform-origin:center}@-webkit-keyframes heartBeat{0%{-webkit-transform:scale(1);transform:scale(1)}14%{-webkit-transform:scale(1.3);transform:scale(1.3)}28%{-webkit-transform:scale(1);transform:scale(1)}42%{-webkit-transform:scale(1.3);transform:scale(1.3)}70%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes heartBeat{0%{-webkit-transform:scale(1);transform:scale(1)}14%{-webkit-transform:scale(1.3);transform:scale(1.3)}28%{-webkit-transform:scale(1);transform:scale(1)}42%{-webkit-transform:scale(1.3);transform:scale(1.3)}70%{-webkit-transform:scale(1);transform:scale(1)}}.animate__heartBeat{-webkit-animation-name:heartBeat;animation-name:heartBeat;-webkit-animation-duration:1.3s;animation-duration:1.3s;-webkit-animation-duration:calc(var(--animate-duration)*1.3);animation-duration:calc(var(--animate-duration)*1.3);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}@-webkit-keyframes backInDown{0%{-webkit-transform:translateY(-1200px) scale(.7);transform:translateY(-1200px) scale(.7);opacity:.7}80%{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:.7}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@keyframes backInDown{0%{-webkit-transform:translateY(-1200px) scale(.7);transform:translateY(-1200px) scale(.7);opacity:.7}80%{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:.7}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}.animate__backInDown{-webkit-animation-name:backInDown;animation-name:backInDown}@-webkit-keyframes backInLeft{0%{-webkit-transform:translateX(-2000px) scale(.7);transform:translateX(-2000px) scale(.7);opacity:.7}80%{-webkit-transform:translateX(0) scale(.7);transform:translateX(0) scale(.7);opacity:.7}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@keyframes backInLeft{0%{-webkit-transform:translateX(-2000px) scale(.7);transform:translateX(-2000px) scale(.7);opacity:.7}80%{-webkit-transform:translateX(0) scale(.7);transform:translateX(0) scale(.7);opacity:.7}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}.animate__backInLeft{-webkit-animation-name:backInLeft;animation-name:backInLeft}@-webkit-keyframes backInRight{0%{-webkit-transform:translateX(2000px) scale(.7);transform:translateX(2000px) scale(.7);opacity:.7}80%{-webkit-transform:translateX(0) scale(.7);transform:translateX(0) scale(.7);opacity:.7}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@keyframes backInRight{0%{-webkit-transform:translateX(2000px) scale(.7);transform:translateX(2000px) scale(.7);opacity:.7}80%{-webkit-transform:translateX(0) scale(.7);transform:translateX(0) scale(.7);opacity:.7}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}.animate__backInRight{-webkit-animation-name:backInRight;animation-name:backInRight}@-webkit-keyframes backInUp{0%{-webkit-transform:translateY(1200px) scale(.7);transform:translateY(1200px) scale(.7);opacity:.7}80%{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:.7}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@keyframes backInUp{0%{-webkit-transform:translateY(1200px) scale(.7);transform:translateY(1200px) scale(.7);opacity:.7}80%{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:.7}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}.animate__backInUp{-webkit-animation-name:backInUp;animation-name:backInUp}@-webkit-keyframes backOutDown{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}20%{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:.7}to{-webkit-transform:translateY(700px) scale(.7);transform:translateY(700px) scale(.7);opacity:.7}}@keyframes backOutDown{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}20%{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:.7}to{-webkit-transform:translateY(700px) scale(.7);transform:translateY(700px) scale(.7);opacity:.7}}.animate__backOutDown{-webkit-animation-name:backOutDown;animation-name:backOutDown}@-webkit-keyframes backOutLeft{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}20%{-webkit-transform:translateX(0) scale(.7);transform:translateX(0) scale(.7);opacity:.7}to{-webkit-transform:translateX(-2000px) scale(.7);transform:translateX(-2000px) scale(.7);opacity:.7}}@keyframes backOutLeft{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}20%{-webkit-transform:translateX(0) scale(.7);transform:translateX(0) scale(.7);opacity:.7}to{-webkit-transform:translateX(-2000px) scale(.7);transform:translateX(-2000px) scale(.7);opacity:.7}}.animate__backOutLeft{-webkit-animation-name:backOutLeft;animation-name:backOutLeft}@-webkit-keyframes backOutRight{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}20%{-webkit-transform:translateX(0) scale(.7);transform:translateX(0) scale(.7);opacity:.7}to{-webkit-transform:translateX(2000px) scale(.7);transform:translateX(2000px) scale(.7);opacity:.7}}@keyframes backOutRight{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}20%{-webkit-transform:translateX(0) scale(.7);transform:translateX(0) scale(.7);opacity:.7}to{-webkit-transform:translateX(2000px) scale(.7);transform:translateX(2000px) scale(.7);opacity:.7}}.animate__backOutRight{-webkit-animation-name:backOutRight;animation-name:backOutRight}@-webkit-keyframes backOutUp{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}20%{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:.7}to{-webkit-transform:translateY(-700px) scale(.7);transform:translateY(-700px) scale(.7);opacity:.7}}@keyframes backOutUp{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}20%{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:.7}to{-webkit-transform:translateY(-700px) scale(.7);transform:translateY(-700px) scale(.7);opacity:.7}}.animate__backOutUp{-webkit-animation-name:backOutUp;animation-name:backOutUp}@-webkit-keyframes bounceIn{0%,20%,40%,60%,80%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}to{opacity:1;
89-webkit-transform:scaleX(1);transform:scaleX(1)}}@keyframes bounceIn{0%,20%,40%,60%,80%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}to{opacity:1;-webkit-transform:scaleX(1);transform:scaleX(1)}}.animate__bounceIn{-webkit-animation-duration:.75s;animation-duration:.75s;-webkit-animation-duration:calc(var(--animate-duration)*0.75);animation-duration:calc(var(--animate-duration)*0.75);-webkit-animation-name:bounceIn;animation-name:bounceIn}@-webkit-keyframes bounceInDown{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0) scaleY(3);transform:translate3d(0,-3000px,0) scaleY(3)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0) scaleY(.9);transform:translate3d(0,25px,0) scaleY(.9)}75%{-webkit-transform:translate3d(0,-10px,0) scaleY(.95);transform:translate3d(0,-10px,0) scaleY(.95)}90%{-webkit-transform:translate3d(0,5px,0) scaleY(.985);transform:translate3d(0,5px,0) scaleY(.985)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes bounceInDown{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0) scaleY(3);transform:translate3d(0,-3000px,0) scaleY(3)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0) scaleY(.9);transform:translate3d(0,25px,0) scaleY(.9)}75%{-webkit-transform:translate3d(0,-10px,0) scaleY(.95);transform:translate3d(0,-10px,0) scaleY(.95)}90%{-webkit-transform:translate3d(0,5px,0) scaleY(.985);transform:translate3d(0,5px,0) scaleY(.985)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__bounceInDown{-webkit-animation-name:bounceInDown;animation-name:bounceInDown}@-webkit-keyframes bounceInLeft{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0) scaleX(3);transform:translate3d(-3000px,0,0) scaleX(3)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0) scaleX(1);transform:translate3d(25px,0,0) scaleX(1)}75%{-webkit-transform:translate3d(-10px,0,0) scaleX(.98);transform:translate3d(-10px,0,0) scaleX(.98)}90%{-webkit-transform:translate3d(5px,0,0) scaleX(.995);transform:translate3d(5px,0,0) scaleX(.995)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes bounceInLeft{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0) scaleX(3);transform:translate3d(-3000px,0,0) scaleX(3)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0) scaleX(1);transform:translate3d(25px,0,0) scaleX(1)}75%{-webkit-transform:translate3d(-10px,0,0) scaleX(.98);transform:translate3d(-10px,0,0) scaleX(.98)}90%{-webkit-transform:translate3d(5px,0,0) scaleX(.995);transform:translate3d(5px,0,0) scaleX(.995)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__bounceInLeft{-webkit-animation-name:bounceInLeft;animation-name:bounceInLeft}@-webkit-keyframes bounceInRight{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(3000px,0,0) scaleX(3);transform:translate3d(3000px,0,0) scaleX(3)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0) scaleX(1);transform:translate3d(-25px,0,0) scaleX(1)}75%{-webkit-transform:translate3d(10px,0,0) scaleX(.98);transform:translate3d(10px,0,0) scaleX(.98)}90%{-webkit-transform:translate3d(-5px,0,0) scaleX(.995);transform:translate3d(-5px,0,0) scaleX(.995)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes bounceInRight{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(3000px,0,0) scaleX(3);transform:translate3d(3000px,0,0) scaleX(3)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0) scaleX(1);transform:translate3d(-25px,0,0) scaleX(1)}75%{-webkit-transform:translate3d(10px,0,0) scaleX(.98);transform:translate3d(10px,0,0) scaleX(.98)}90%{-webkit-transform:translate3d(-5px,0,0) scaleX(.995);transform:translate3d(-5px,0,0) scaleX(.995)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__bounceInRight{-webkit-animation-name:bounceInRight;animation-name:bounceInRight}@-webkit-keyframes bounceInUp{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,3000px,0) scaleY(5);transform:translate3d(0,3000px,0) scaleY(5)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0) scaleY(.9);transform:translate3d(0,-20px,0) scaleY(.9)}75%{-webkit-transform:translate3d(0,10px,0) scaleY(.95);transform:translate3d(0,10px,0) scaleY(.95)}90%{-webkit-transform:translate3d(0,-5px,0) scaleY(.985);transform:translate3d(0,-5px,0) scaleY(.985)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes bounceInUp{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,3000px,0) scaleY(5);transform:translate3d(0,3000px,0) scaleY(5)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0) scaleY(.9);transform:translate3d(0,-20px,0) scaleY(.9)}75%{-webkit-transform:translate3d(0,10px,0) scaleY(.95);transform:translate3d(0,10px,0) scaleY(.95)}90%{-webkit-transform:translate3d(0,-5px,0) scaleY(.985);transform:translate3d(0,-5px,0) scaleY(.985)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__bounceInUp{-webkit-animation-name:bounceInUp;animation-name:bounceInUp}@-webkit-keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}to{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}}@keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}to{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}}.animate__bounceOut{-webkit-animation-duration:.75s;animation-duration:.75s;-webkit-animation-duration:calc(var(--animate-duration)*0.75);animation-duration:calc(var(--animate-duration)*0.75);-webkit-animation-name:bounceOut;animation-name:bounceOut}@-webkit-keyframes bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0) scaleY(.985);transform:translate3d(0,10px,0) scaleY(.985)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0) scaleY(.9);transform:translate3d(0,-20px,0) scaleY(.9)}to{opacity:0;-webkit-transform:translate3d(0,2000px,0) scaleY(3);transform:translate3d(0,2000px,0) scaleY(3)}}@keyframes bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0) scaleY(.985);transform:translate3d(0,10px,0) scaleY(.985)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0) scaleY(.9);transform:translate3d(0,-20px,0) scaleY(.9)}to{opacity:0;-webkit-transform:translate3d(0,2000px,0) scaleY(3);transform:translate3d(0,2000px,0) scaleY(3)}}.animate__bounceOutDown{-webkit-animation-name:bounceOutDown;animation-name:bounceOutDown}@-webkit-keyframes bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0) scaleX(.9);transform:translate3d(20px,0,0) scaleX(.9)}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0) scaleX(2);transform:translate3d(-2000px,0,0) scaleX(2)}}@keyframes bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0) scaleX(.9);transform:translate3d(20px,0,0) scaleX(.9)}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0) scaleX(2);transform:translate3d(-2000px,0,0) scaleX(2)}}.animate__bounceOutLeft{-webkit-animation-name:bounceOutLeft;animation-name:bounceOutLeft}@-webkit-keyframes bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0) scaleX(.9);transform:translate3d(-20px,0,0) scaleX(.9)}to{opacity:0;-webkit-transform:translate3d(2000px,0,0) scaleX(2);transform:translate3d(2000px,0,0) scaleX(2)}}@keyframes bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0) scaleX(.9);transform:translate3d(-20px,0,0) scaleX(.9)}to{opacity:0;-webkit-transform:translate3d(2000px,0,0) scaleX(2);transform:translate3d(2000px,0,0) scaleX(2)}}.animate__bounceOutRight{-webkit-animation-name:bounceOutRight;animation-name:bounceOutRight}@-webkit-keyframes bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0) scaleY(.985);transform:translate3d(0,-10px,0) scaleY(.985)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0) scaleY(.9);transform:translate3d(0,20px,0) scaleY(.9)}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0) scaleY(3);transform:translate3d(0,-2000px,0) scaleY(3)}}@keyframes bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0) scaleY(.985);transform:translate3d(0,-10px,0) scaleY(.985)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0) scaleY(.9);transform:translate3d(0,20px,0) scaleY(.9)}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0) scaleY(3);transform:translate3d(0,-2000px,0) scaleY(3)}}.animate__bounceOutUp{-webkit-animation-name:bounceOutUp;animation-name:bounceOutUp}@-webkit-keyframes fadeIn{0%{opacity:0}
89to{opacity:1}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.animate__fadeIn{-webkit-animation-name:fadeIn;animation-name:fadeIn}@-webkit-keyframes fadeInDown{0%{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInDown{0%{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInDown{-webkit-animation-name:fadeInDown;animation-name:fadeInDown}@-webkit-keyframes fadeInDownBig{0%{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInDownBig{0%{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInDownBig{-webkit-animation-name:fadeInDownBig;animation-name:fadeInDownBig}@-webkit-keyframes fadeInLeft{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInLeft{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInLeft{-webkit-animation-name:fadeInLeft;animation-name:fadeInLeft}@-webkit-keyframes fadeInLeftBig{0%{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInLeftBig{0%{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInLeftBig{-webkit-animation-name:fadeInLeftBig;animation-name:fadeInLeftBig}@-webkit-keyframes fadeInRight{0%{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInRight{0%{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInRight{-webkit-animation-name:fadeInRight;animation-name:fadeInRight}@-webkit-keyframes fadeInRightBig{0%{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInRightBig{0%{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInRightBig{-webkit-animation-name:fadeInRightBig;animation-name:fadeInRightBig}@-webkit-keyframes fadeInUp{0%{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInUp{0%{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInUp{-webkit-animation-name:fadeInUp;animation-name:fadeInUp}@-webkit-keyframes fadeInUpBig{0%{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInUpBig{0%{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInUpBig{-webkit-animation-name:fadeInUpBig;animation-name:fadeInUpBig}@-webkit-keyframes fadeInTopLeft{0%{opacity:0;-webkit-transform:translate3d(-100%,-100%,0);transform:translate3d(-100%,-100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInTopLeft{0%{opacity:0;-webkit-transform:translate3d(-100%,-100%,0);transform:translate3d(-100%,-100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInTopLeft{-webkit-animation-name:fadeInTopLeft;animation-name:fadeInTopLeft}@-webkit-keyframes fadeInTopRight{0%{opacity:0;-webkit-transform:translate3d(100%,-100%,0);transform:translate3d(100%,-100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInTopRight{0%{opacity:0;-webkit-transform:translate3d(100%,-100%,0);transform:translate3d(100%,-100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInTopRight{-webkit-animation-name:fadeInTopRight;animation-name:fadeInTopRight}@-webkit-keyframes fadeInBottomLeft{0%{opacity:0;-webkit-transform:translate3d(-100%,100%,0);transform:translate3d(-100%,100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInBottomLeft{0%{opacity:0;-webkit-transform:translate3d(-100%,100%,0);transform:translate3d(-100%,100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInBottomLeft{-webkit-animation-name:fadeInBottomLeft;animation-name:fadeInBottomLeft}@-webkit-keyframes fadeInBottomRight{0%{opacity:0;-webkit-transform:translate3d(100%,100%,0);transform:translate3d(100%,100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInBottomRight{0%{opacity:0;-webkit-transform:translate3d(100%,100%,0);transform:translate3d(100%,100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInBottomRight{-webkit-animation-name:fadeInBottomRight;animation-name:fadeInBottomRight}@-webkit-keyframes fadeOut{0%{opacity:1}to{opacity:0}
89}@keyframes fadeOut{0%{opacity:1}to{opacity:0}}.animate__fadeOut{-webkit-animation-name:fadeOut;animation-name:fadeOut}@-webkit-keyframes fadeOutDown{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@keyframes fadeOutDown{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}.animate__fadeOutDown{-webkit-animation-name:fadeOutDown;animation-name:fadeOutDown}@-webkit-keyframes fadeOutDownBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}@keyframes fadeOutDownBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}.animate__fadeOutDownBig{-webkit-animation-name:fadeOutDownBig;animation-name:fadeOutDownBig}@-webkit-keyframes fadeOutLeft{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}@keyframes fadeOutLeft{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.animate__fadeOutLeft{-webkit-animation-name:fadeOutLeft;animation-name:fadeOutLeft}@-webkit-keyframes fadeOutLeftBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@keyframes fadeOutLeftBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}.animate__fadeOutLeftBig{-webkit-animation-name:fadeOutLeftBig;animation-name:fadeOutLeftBig}@-webkit-keyframes fadeOutRight{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}@keyframes fadeOutRight{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.animate__fadeOutRight{-webkit-animation-name:fadeOutRight;animation-name:fadeOutRight}@-webkit-keyframes fadeOutRightBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@keyframes fadeOutRightBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}.animate__fadeOutRightBig{-webkit-animation-name:fadeOutRightBig;animation-name:fadeOutRightBig}@-webkit-keyframes fadeOutUp{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}@keyframes fadeOutUp{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}.animate__fadeOutUp{-webkit-animation-name:fadeOutUp;animation-name:fadeOutUp}@-webkit-keyframes fadeOutUpBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@keyframes fadeOutUpBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}.animate__fadeOutUpBig{-webkit-animation-name:fadeOutUpBig;animation-name:fadeOutUpBig}@-webkit-keyframes fadeOutTopLeft{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate3d(-100%,-100%,0);transform:translate3d(-100%,-100%,0)}}@keyframes fadeOutTopLeft{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate3d(-100%,-100%,0);transform:translate3d(-100%,-100%,0)}}.animate__fadeOutTopLeft{-webkit-animation-name:fadeOutTopLeft;animation-name:fadeOutTopLeft}@-webkit-keyframes fadeOutTopRight{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate3d(100%,-100%,0);transform:translate3d(100%,-100%,0)}}@keyframes fadeOutTopRight{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate3d(100%,-100%,0);transform:translate3d(100%,-100%,0)}}.animate__fadeOutTopRight{-webkit-animation-name:fadeOutTopRight;animation-name:fadeOutTopRight}@-webkit-keyframes fadeOutBottomRight{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate3d(100%,100%,0);transform:translate3d(100%,100%,0)}}@keyframes fadeOutBottomRight{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate3d(100%,100%,0);transform:translate3d(100%,100%,0)}}.animate__fadeOutBottomRight{-webkit-animation-name:fadeOutBottomRight;animation-name:fadeOutBottomRight}@-webkit-keyframes fadeOutBottomLeft{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate3d(-100%,100%,0);transform:translate3d(-100%,100%,0)}}@keyframes fadeOutBottomLeft{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate3d(-100%,100%,0);transform:translate3d(-100%,100%,0)}}.animate__fadeOutBottomLeft{-webkit-animation-name:fadeOutBottomLeft;animation-name:fadeOutBottomLeft}@-webkit-keyframes flip{0%{-webkit-transform:perspective(400px) scaleX(1) translateZ(0) rotateY(-1turn);transform:perspective(400px) scaleX(1) translateZ(0) rotateY(-1turn);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-190deg);transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-190deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-170deg);transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-170deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) scale3d(.95,.95,.95) translateZ(0) rotateY(0deg);transform:perspective(400px) scale3d(.95,.95,.95) translateZ(0) rotateY(0deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}to{-webkit-transform:perspective(400px) scaleX(1) translateZ(0) rotateY(0deg);transform:perspective(400px) scaleX(1) translateZ(0) rotateY(0deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}@keyframes flip{0%{-webkit-transform:perspective(400px) scaleX(1) translateZ(0) rotateY(-1turn);transform:perspective(400px) scaleX(1) translateZ(0) rotateY(-1turn);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-190deg);transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-190deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-170deg);transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-170deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) scale3d(.95,.95,.95) translateZ(0) rotateY(0deg);transform:perspective(400px) scale3d(.95,.95,.95) translateZ(0) rotateY(0deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}to{-webkit-transform:perspective(400px) scaleX(1) translateZ(0) rotateY(0deg);transform:perspective(400px) scaleX(1) translateZ(0) rotateY(0deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}.animate__animated.animate__flip{-webkit-backface-visibility:visible;backface-visibility:visible;-webkit-animation-name:flip;animation-name:flip}@-webkit-keyframes flipInX{0%{-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}
8940%{-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotateX(10deg);transform:perspective(400px) rotateX(10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotateX(-5deg);transform:perspective(400px) rotateX(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInX{0%{-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotateX(10deg);transform:perspective(400px) rotateX(10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotateX(-5deg);transform:perspective(400px) rotateX(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}.animate__flipInX{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipInX;animation-name:flipInX}@-webkit-keyframes flipInY{0%{-webkit-transform:perspective(400px) rotateY(90deg);transform:perspective(400px) rotateY(90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}
8940%{-webkit-transform:perspective(400px) rotateY(-20deg);transform:perspective(400px) rotateY(-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotateY(10deg);transform:perspective(400px) rotateY(10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotateY(-5deg);transform:perspective(400px) rotateY(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInY{0%{-webkit-transform:perspective(400px) rotateY(90deg);transform:perspective(400px) rotateY(90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotateY(-20deg);transform:perspective(400px) rotateY(-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotateY(10deg);transform:perspective(400px) rotateY(10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotateY(-5deg);transform:perspective(400px) rotateY(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}.animate__flipInY{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipInY;animation-name:flipInY}@-webkit-keyframes flipOutX{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg);opacity:1}to{-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);opacity:0}
89}@keyframes flipOutX{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg);opacity:1}to{-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);opacity:0}}.animate__flipOutX{-webkit-animation-duration:.75s;animation-duration:.75s;-webkit-animation-duration:calc(var(--animate-duration)*0.75);animation-duration:calc(var(--animate-duration)*0.75);-webkit-animation-name:flipOutX;animation-name:flipOutX;-webkit-backface-visibility:visible!important;backface-visibility:visible!important}@-webkit-keyframes flipOutY{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotateY(-15deg);transform:perspective(400px) rotateY(-15deg);opacity:1}to{-webkit-transform:perspective(400px) rotateY(90deg);transform:perspective(400px) rotateY(90deg);opacity:0}}@keyframes flipOutY{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotateY(-15deg);transform:perspective(400px) rotateY(-15deg);opacity:1}to{-webkit-transform:perspective(400px) rotateY(90deg);transform:perspective(400px) rotateY(90deg);opacity:0}
89}.animate__flipOutY{-webkit-animation-duration:.75s;animation-duration:.75s;-webkit-animation-duration:calc(var(--animate-duration)*0.75);animation-duration:calc(var(--animate-duration)*0.75);-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipOutY;animation-name:flipOutY}@-webkit-keyframes lightSpeedInRight{0%{-webkit-transform:translate3d(100%,0,0) skewX(-30deg);transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}60%{-webkit-transform:skewX(20deg);transform:skewX(20deg);opacity:1}80%{-webkit-transform:skewX(-5deg);transform:skewX(-5deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes lightSpeedInRight{0%{-webkit-transform:translate3d(100%,0,0) skewX(-30deg);transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}60%{-webkit-transform:skewX(20deg);transform:skewX(20deg);opacity:1}80%{-webkit-transform:skewX(-5deg);transform:skewX(-5deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__lightSpeedInRight{-webkit-animation-name:lightSpeedInRight;animation-name:lightSpeedInRight;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}@-webkit-keyframes lightSpeedInLeft{0%{-webkit-transform:translate3d(-100%,0,0) skewX(30deg);transform:translate3d(-100%,0,0) skewX(30deg);opacity:0}
8960%{-webkit-transform:skewX(-20deg);transform:skewX(-20deg);opacity:1}80%{-webkit-transform:skewX(5deg);transform:skewX(5deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes lightSpeedInLeft{0%{-webkit-transform:translate3d(-100%,0,0) skewX(30deg);transform:translate3d(-100%,0,0) skewX(30deg);opacity:0}60%{-webkit-transform:skewX(-20deg);transform:skewX(-20deg);opacity:1}80%{-webkit-transform:skewX(5deg);transform:skewX(5deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__lightSpeedInLeft{-webkit-animation-name:lightSpeedInLeft;animation-name:lightSpeedInLeft;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}@-webkit-keyframes lightSpeedOutRight{0%{opacity:1}to{-webkit-transform:translate3d(100%,0,0) skewX(30deg);transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}@keyframes lightSpeedOutRight{0%{opacity:1}to{-webkit-transform:translate3d(100%,0,0) skewX(30deg);transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}.animate__lightSpeedOutRight{-webkit-animation-name:lightSpeedOutRight;animation-name:lightSpeedOutRight;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}@-webkit-keyframes lightSpeedOutLeft{0%{opacity:1}to{-webkit-transform:translate3d(-100%,0,0) skewX(-30deg);transform:translate3d(-100%,0,0) skewX(-30deg);opacity:0}
89}@keyframes lightSpeedOutLeft{0%{opacity:1}to{-webkit-transform:translate3d(-100%,0,0) skewX(-30deg);transform:translate3d(-100%,0,0) skewX(-30deg);opacity:0}}.animate__lightSpeedOutLeft{-webkit-animation-name:lightSpeedOutLeft;animation-name:lightSpeedOutLeft;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}@-webkit-keyframes rotateIn{0%{-webkit-transform:rotate(-200deg);transform:rotate(-200deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes rotateIn{0%{-webkit-transform:rotate(-200deg);transform:rotate(-200deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}.animate__rotateIn{-webkit-animation-name:rotateIn;animation-name:rotateIn;-webkit-transform-origin:center;transform-origin:center}@-webkit-keyframes rotateInDownLeft{0%{-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes rotateInDownLeft{0%{-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}
89to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}.animate__rotateInDownLeft{-webkit-animation-name:rotateInDownLeft;animation-name:rotateInDownLeft;-webkit-transform-origin:left bottom;transform-origin:left bottom}@-webkit-keyframes rotateInDownRight{0%{-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes rotateInDownRight{0%{-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}.animate__rotateInDownRight{-webkit-animation-name:rotateInDownRight;animation-name:rotateInDownRight;-webkit-transform-origin:right bottom;transform-origin:right bottom}@-webkit-keyframes rotateInUpLeft{0%{-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes rotateInUpLeft{0%{-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}.animate__rotateInUpLeft{-webkit-animation-name:rotateInUpLeft;animation-name:rotateInUpLeft;-webkit-transform-origin:left bottom;transform-origin:left bottom}@-webkit-keyframes rotateInUpRight{0%{-webkit-transform:rotate(-90deg);transform:rotate(-90deg);opacity:0}
89to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes rotateInUpRight{0%{-webkit-transform:rotate(-90deg);transform:rotate(-90deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}.animate__rotateInUpRight{-webkit-animation-name:rotateInUpRight;animation-name:rotateInUpRight;-webkit-transform-origin:right bottom;transform-origin:right bottom}@-webkit-keyframes rotateOut{0%{opacity:1}to{-webkit-transform:rotate(200deg);transform:rotate(200deg);opacity:0}}@keyframes rotateOut{0%{opacity:1}to{-webkit-transform:rotate(200deg);transform:rotate(200deg);opacity:0}}.animate__rotateOut{-webkit-animation-name:rotateOut;animation-name:rotateOut;-webkit-transform-origin:center;transform-origin:center}@-webkit-keyframes rotateOutDownLeft{0%{opacity:1}to{-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}}@keyframes rotateOutDownLeft{0%{opacity:1}to{-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}}.animate__rotateOutDownLeft{-webkit-animation-name:rotateOutDownLeft;animation-name:rotateOutDownLeft;-webkit-transform-origin:left bottom;transform-origin:left bottom}@-webkit-keyframes rotateOutDownRight{0%{opacity:1}to{-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}
89}@keyframes rotateOutDownRight{0%{opacity:1}to{-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}}.animate__rotateOutDownRight{-webkit-animation-name:rotateOutDownRight;animation-name:rotateOutDownRight;-webkit-transform-origin:right bottom;transform-origin:right bottom}@-webkit-keyframes rotateOutUpLeft{0%{opacity:1}to{-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}}@keyframes rotateOutUpLeft{0%{opacity:1}to{-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}}.animate__rotateOutUpLeft{-webkit-animation-name:rotateOutUpLeft;animation-name:rotateOutUpLeft;-webkit-transform-origin:left bottom;transform-origin:left bottom}@-webkit-keyframes rotateOutUpRight{0%{opacity:1}to{-webkit-transform:rotate(90deg);transform:rotate(90deg);opacity:0}}@keyframes rotateOutUpRight{0%{opacity:1}to{-webkit-transform:rotate(90deg);transform:rotate(90deg);opacity:0}}.animate__rotateOutUpRight{-webkit-animation-name:rotateOutUpRight;animation-name:rotateOutUpRight;-webkit-transform-origin:right bottom;transform-origin:right bottom}@-webkit-keyframes hinge{0%{-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate(80deg);transform:rotate(80deg);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%,80%{-webkit-transform:rotate(60deg);transform:rotate(60deg);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}to{-webkit-transform:translate3d(0,700px,0);transform:translate3d(0,700px,0);opacity:0}}@keyframes hinge{0%{-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate(80deg);transform:rotate(80deg);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%,80%{-webkit-transform:rotate(60deg);transform:rotate(60deg);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}to{-webkit-transform:translate3d(0,700px,0);transform:translate3d(0,700px,0);opacity:0}}.animate__hinge{-webkit-animation-duration:2s;animation-duration:2s;-webkit-animation-duration:calc(var(--animate-duration)*2);animation-duration:calc(var(--animate-duration)*2);-webkit-animation-name:hinge;animation-name:hinge;-webkit-transform-origin:top left;transform-origin:top left}@-webkit-keyframes jackInTheBox{0%{opacity:0;-webkit-transform:scale(.1) rotate(30deg);transform:scale(.1) rotate(30deg);-webkit-transform-origin:center bottom;transform-origin:center bottom}50%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}70%{-webkit-transform:rotate(3deg);transform:rotate(3deg)}to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes jackInTheBox{0%{opacity:0;-webkit-transform:scale(.1) rotate(30deg);transform:scale(.1) rotate(30deg);-webkit-transform-origin:center bottom;transform-origin:center bottom}50%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}70%{-webkit-transform:rotate(3deg);transform:rotate(3deg)}to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}.animate__jackInTheBox{-webkit-animation-name:jackInTheBox;animation-name:jackInTheBox}@-webkit-keyframes rollIn{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0) rotate(-120deg);transform:translate3d(-100%,0,0) rotate(-120deg)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes rollIn{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0) rotate(-120deg);transform:translate3d(-100%,0,0) rotate(-120deg)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__rollIn{-webkit-animation-name:rollIn;animation-name:rollIn}@-webkit-keyframes rollOut{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0) rotate(120deg);transform:translate3d(100%,0,0) rotate(120deg)}}@keyframes rollOut{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0) rotate(120deg);transform:translate3d(100%,0,0) rotate(120deg)}}.animate__rollOut{-webkit-animation-name:rollOut;animation-name:rollOut}@-webkit-keyframes zoomIn{0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}@keyframes zoomIn{0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}.animate__zoomIn{-webkit-animation-name:zoomIn;animation-name:zoomIn}@-webkit-keyframes zoomInDown{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;
89-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInDown{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.animate__zoomInDown{-webkit-animation-name:zoomInDown;animation-name:zoomInDown}@-webkit-keyframes zoomInLeft{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);transform:scale3d(.475,.475,.475) translate3d(10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInLeft{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);transform:scale3d(.475,.475,.475) translate3d(10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.animate__zoomInLeft{-webkit-animation-name:zoomInLeft;animation-name:zoomInLeft}@-webkit-keyframes zoomInRight{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInRight{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.animate__zoomInRight{-webkit-animation-name:zoomInRight;animation-name:zoomInRight}@-webkit-keyframes zoomInUp{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInUp{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.animate__zoomInUp{-webkit-animation-name:zoomInUp;animation-name:zoomInUp}@-webkit-keyframes zoomOut{0%{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}
89}@keyframes zoomOut{0%{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}.animate__zoomOut{-webkit-animation-name:zoomOut;animation-name:zoomOut}@-webkit-keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.animate__zoomOutDown{-webkit-animation-name:zoomOutDown;animation-name:zoomOutDown;-webkit-transform-origin:center bottom;transform-origin:center bottom}@-webkit-keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(-2000px,0,0);transform:scale(.1) translate3d(-2000px,0,0)}}@keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(-2000px,0,0);transform:scale(.1) translate3d(-2000px,0,0)}}.animate__zoomOutLeft{-webkit-animation-name:zoomOutLeft;animation-name:zoomOutLeft;-webkit-transform-origin:left center;transform-origin:left center}@-webkit-keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(2000px,0,0);transform:scale(.1) translate3d(2000px,0,0)}}@keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(2000px,0,0);transform:scale(.1) translate3d(2000px,0,0)}}.animate__zoomOutRight{-webkit-animation-name:zoomOutRight;animation-name:zoomOutRight;-webkit-transform-origin:right center;transform-origin:right center}@-webkit-keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.animate__zoomOutUp{-webkit-animation-name:zoomOutUp;animation-name:zoomOutUp;-webkit-transform-origin:center bottom;transform-origin:center bottom}@-webkit-keyframes slideInDown{0%{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes slideInDown{0%{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__slideInDown{-webkit-animation-name:slideInDown;animation-name:slideInDown}@-webkit-keyframes slideInLeft{0%{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes slideInLeft{0%{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__slideInLeft{-webkit-animation-name:slideInLeft;animation-name:slideInLeft}@-webkit-keyframes slideInRight{0%{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes slideInRight{0%{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__slideInRight{-webkit-animation-name:slideInRight;animation-name:slideInRight}@-webkit-keyframes slideInUp{0%{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes slideInUp{0%{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__slideInUp{-webkit-animation-name:slideInUp;animation-name:slideInUp}@-webkit-keyframes slideOutDown{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@keyframes slideOutDown{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}.animate__slideOutDown{-webkit-animation-name:slideOutDown;animation-name:slideOutDown}@-webkit-keyframes slideOutLeft{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}@keyframes slideOutLeft{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.animate__slideOutLeft{-webkit-animation-name:slideOutLeft;animation-name:slideOutLeft}@-webkit-keyframes slideOutRight{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}@keyframes slideOutRight{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.animate__slideOutRight{-webkit-animation-name:slideOutRight;animation-name:slideOutRight}@-webkit-keyframes slideOutUp{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}@keyframes slideOutUp{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}.animate__slideOutUp{-webkit-animation-name:slideOutUp;animation-name:slideOutUp}.slick-loading .slick-list{background:#fff url(https://www.rockymountainoils.com/cdn/shop/t/38/assets/ajax-loader.gif?v=344831891803776881693632779) center center no-repeat}@font-face{font-family:'slick';font-weight:400;font-style:normal;src:url(://cdn.shopify.com/s/files/1/0679/7908/4098/t/2/assets/slick.eot);src:url(://cdn.shopify.com/s/files/1/0679/7908/4098/t/2/assets/slick.eot?#iefix) format("embedded-opentype"),url(://cdn.shopify.com/s/files/1/0679/7908/4098/t/2/assets/slick.woff) format("woff"),url(://cdn.shopify.com/s/files/1/0679/7908/4098/t/2/assets/slick.ttf) format("truetype"),url(://cdn.shopify.com/s/files/1/0679/7908/4098/t/2/assets/slick.svg#slick) format("svg")}.slick-prev,.slick-next{font-size:0;line-height:0;position:absolute;top:50%;display:block;width:20px;height:20px;padding:0;-webkit-transform:translate(0,-50%);-ms-transform:translate(0,-50%);transform:translate(0,-50%);cursor:pointer;color:transparent;border:none;outline:none;background:transparent}.slick-prev:hover,.slick-prev:focus,.slick-next:hover,.slick-next:focus{color:transparent;outline:none;background:transparent}.slick-prev:hover:before,.slick-prev:focus:before,.slick-next:hover:before,.slick-next:focus:before{opacity:1}.slick-prev.slick-disabled:before,.slick-next.slick-disabled:before{opacity:.25}.slick-prev:before,.slick-next:before{font-family:'slick';font-size:20px;line-height:1;opacity:.75;color:#fff;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.slick-prev{left:-25px}[dir='rtl'] .slick-prev{right:-25px;left:auto}.slick-prev:before{content:'â'}[dir='rtl'] .slick-prev:before{content:'â'}.slick-next{right:-25px}[dir='rtl'] .slick-next{right:auto;left:-25px}.slick-next:before{content:'â'}[dir='rtl'] .slick-next:before{content:'â'}.slick-dotted.slick-slider{margin-bottom:30px}.slick-dots{position:absolute;bottom:-25px;display:block;width:100%;padding:0;margin:0;list-style:none;text-align:center}.slick-dots li{position:relative;display:inline-block;width:20px;height:20px;margin:0 5px;padding:0;cursor:pointer}.slick-dots li button{font-size:0;line-height:0;display:block;width:20px;height:20px;padding:5px;cursor:pointer;color:transparent;border:0;outline:none;background:transparent}.slick-dots li button:hover,.slick-dots li button:focus{outline:none}.slick-dots li button:hover:before,.slick-dots li button:focus:before{opacity:1}.slick-dots li button:before{font-family:'slick';font-size:6px;line-height:20px;position:absolute;top:0;left:0;width:20px;height:20px;content:'â¢';text-align:center;opacity:.25;color:#000;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.slick-dots li.slick-active button:before{opacity:.75;color:#000}.slick-list.draggable{padding:0!important}.slick-slider{position:relative;display:block;box-sizing:border-box;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-touch-callout:none;-khtml-user-select:none;-ms-touch-action:pan-y;touch-action:pan-y;-webkit-tap-highlight-color:transparent}.slick-list{position:relative;display:block;overflow:hidden;margin:0;padding:0}.slick-list:focus{outline:none}.slick-list.dragging{cursor:pointer;cursor:hand}.slick-slider .slick-track,.slick-slider .slick-list{-webkit-transform:translate3d(0,
890,0);-moz-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.slick-track{position:relative;top:0;left:0;display:block;margin-left:auto;margin-right:auto}.slick-track:before,.slick-track:after{display:table;content:''}.slick-track:after{clear:both}.slick-loading .slick-track{visibility:hidden}.slick-slide{display:none;float:left;height:100%;min-height:1px}[dir='rtl'] .slick-slide{float:right}.slick-slide img{display:block}.slick-slide.slick-loading img{display:none}.slick-slide.dragging img{pointer-events:none}.slick-initialized .slick-slide{display:block}.slick-loading .slick-slide{visibility:hidden}.slick-vertical .slick-slide{display:block;height:auto;border:1px solid transparent}.slick-arrow.slick-hidden{display:none} 90.login-section{margin:60px 0 40px;display:inline-block;width:100%}.login-form-wrap{max-width:620px;padding:19px 40px 30px;margin:0 auto;box-shadow:0 0 20px 0 #4f000014;border:solid 1px #f2f2f2;background-color:#fff;margin-bottom:50px}.login-form-wrap h4{display:block;color:#000;font-size:36px;font-weight:400;text-transform:capitalize;text-align:center;padding-bottom:11px;line-height:49px;margin:0}.login-form-wrap p{color:#5d5d5d;font-weight:300;font-size:16px;line-height:22px;margin-bottom:33px;text-align:center}.login-form-wrap label{margin:0 0 8px;display:block}.fieldset>.field{margin:0 0 20px}.forgot-password .fieldset>.field{margin:0 0 40px}.login-form-wrap input[type=password],.login-form-wrap input[type=text],.login-form-wrap input[type=email]{background:#fff;background-clip:padding-box;border:1px solid #c2c2c2;border-radius:1px;font-size:12px;height:32px;line-height:1.42857143;padding:0 9px;vertical-align:baseline;width:100%;box-sizing:border-box;height:50px;color:#282828}.login-form-wrap input[type=password]::placeholder,.login-form-wrap input[type=text]::placeholder,.login-form-wrap input[type=email]::placeholder{color:#a5a5a5bf}.login-form-wrap input[type=checkbox]{height:20px;margin:5px 4px 0 0;position:relative;top:2px}#remember-me-box label{display:inline}.field .tooltipwrapper{position:relative;margin-left:-1px}strong.tooltiptoggle{font-size:12px}.tooltipwrapper .tooltipcontent{background:#fff;max-width:360px;min-width:210px;padding:12px 16px;z-index:100;display:none;position:absolute;text-align:left;color:#333;line-height:1.4;border:1px solid #bbb;margin-top:5px;left:0;top:100%}.form-login .primary,.form-login .secondary{text-align:center}.form-login .action.primary{background:#763d1a;border:1px solid #763d1a;color:#fff;cursor:pointer;font-weight:500;padding:11px 30px 12px;font-size:16px;margin:0 auto;width:56%;border-radius:3px;text-transform:uppercase;transition:.3s all;display:inline-block}.form-login .action.primary:hover{background:transparent;color:#763d1a}a.action.remind,.new-customer >p{color:#282828;font-size:12px;line-height:16px;font-weight:400;margin-top:13px;display:block}.new-customer >p{margin:6px 0 10px}.fieldset>.legend{font-weight:400;font-size:14px;line-height:19px;color:#282828;text-transform:uppercase;display:block;float:none;margin-bottom:21px}.create-account-section{margin:20px 0 40px}fieldset.fieldset.personal-info{margin-bottom:39px}.fieldset>.field.required>label:after,.fieldset>.fields>.field.required>label:after,.fieldset>.field._required>label:after,.fieldset>.fields>.field._required>label:after{content:'*';color:#e02b27;font-size:12px;margin:0 0 0 5px}.form__message.error{color:#721c24;background-color:#f8d7da;border:1px solid #f5c6cb;padding:15px;margin-bottom:20px}.form__message.success{color:#155724;background-color:#d4edda;border:1px solid #c3e6cb;padding:15px;margin-bottom:20px}.errors ul{margin:0;padding:0}.errors li{list-style:none}.shopify-challenge__container{padding:70px 0}.shopify-challenge__button{border-radius:2px;background:#763d1a;border:1px solid #763d1a;color:#fff;cursor:pointer;font-weight:500;padding:11px 30px 12px;font-size:16px;margin:0 auto;width:56%;border-radius:3px;text-transform:uppercase;transition:.3s all;display:inline-block;margin-top:20px!important}.shopify-challenge__button:hover{background:transparent;color:#763d1a}.account-menu{padding:15px;margin-bottom:20px;width:100%;border:solid 1px #e1e1e1;background-color:#fff}.account-menu h2{font-size:18px;font-stretch:normal;font-style:normal;line-height:1;letter-spacing:.63px;text-align:left;margin-bottom:10px}.account-menu ul{margin:0;padding:0}.account-menu ul li{list-style:none}.account-menu ul li a{margin-left:0!important;font-size:16px;line-height:30px;border-bottom:1px solid #e6e6e6;display:block;text-align:left;color:#212529}.account-menu ul li a:hover{color:#d62699}.__account h2{font-size:24px;color:#000;text-transform:capitalize}.__account table a{font-size:15px;color:#d62699}.__account table{border:solid 1px #e1e1e1;background-color:#fff}.__account .card{border:solid 1px #e1e1e1;background-color:#fff}.__account .card p{font-size:15px;line-height:20px;color:#4e4e4e;font-weight:300}.__account .card button.btn{font-size:13px;font-weight:500;line-height:1;border-radius:3px;padding:5px 20px!important;background:#763d1a;border:1px solid #763d1a;color:#fff;cursor:pointer;display:inline-block;box-sizing:border-box;transition:.4s all ease;text-transform:uppercase}.__account .__form label{color:#5d5d5d;font-weight:400;font-size:16px;line-height:30px}.__account .__form input{background:#f9f9f9;background-clip:padding-box;border:1px solid #e2e2e2;border-radius:1px;font-family:Montserrat,sans-serif;font-size:12px;height:32px;line-height:1.42857143;padding:0 9px;vertical-align:baseline;width:100%;box-sizing:border-box;height:50px;color:#282828}.__account .__form select{background:#f9f9f9;background-clip:padding-box;border:1px solid #e2e2e2;border-radius:1px;font-family:Montserrat,sans-serif;font-size:12px;height:32px;line-height:1.42857143;padding:0 9px;vertical-align:baseline;width:100%;box-sizing:border-box;height:50px;color:#282828}.__account .__form .__checkbox input{float:left;width:15px;height:15px;margin-top:7px;margin-right:10px}.__account .__form .btn{font-size:13px;font-weight:500;line-height:1;border-radius:3px;padding:10px 20px!important;background:#763d1a;border:1px solid #763d1a;color:#fff;cursor:pointer;display:inline-block;box-sizing:border-box;transition:.4s all ease;text-transform:uppercase;margin-top:15px}.__account .card button.btn:hover,.__account .__form .btn:hover{background:#fff;border:1px solid #763d1a;color:#763d1a}.__checkbox input{float:left;width:15px;height:15px;margin-top:7px;margin-right:10px}.add-address{font-size:13px;font-weight:500;line-height:1;border-radius:3px;padding:10px 20px!important;background:#763d1a;border:1px solid #763d1a;color:#fff;cursor:pointer;display:inline-block;box-sizing:border-box;transition:.4s all ease;text-transform:uppercase;float:right}.add-address:hover{background:#fff;border:1px solid #763d1a;color:#763d1a}</style> 91<link href="//www.rockymountainoils.com/cdn/shop/t/383/assets/style.css?v=174636506460032956221790008073" rel="stylesheet" type="text/css" media="all" /> 92<link href="//www.rockymountainoils.com/cdn/shop/t/383/assets/style-two.css?v=128982019119815048721785434304" rel="stylesheet" type="text/css" media="all" /> 93<link href="//www.rockymountainoils.com/cdn/shop/t/383/assets/style-three.css?v=65779355981942569911785434303" rel="stylesheet" type="text/css" media="all" /> 94<link href="//www.rockymountainoils.com/cdn/shop/t/383/assets/shop-style.css?v=45651780894644379631785911844" rel="stylesheet" type="text/css" media="all" /> 95<link href="//www.rockymountainoils.com/cdn/shop/t/383/assets/responsive-style.css?v=140572169052298177971785854417" rel="stylesheet" type="text/css" media="all" /> 96<link href="//www.rockymountainoils.com/cdn/shop/t/383/assets/offers.css?v=139488457835823472051785434221" rel="stylesheet" type="text/css" media="all" /> 97<link href="//www.rockymountainoils.com/cdn/shop/t/383/assets/securely-checkout.css?v=42801585711833878161785434286" rel="stylesheet" type="text/css" media="all" /> 98
99<script src="//www.rockymountainoils.com/cdn/shop/t/383/assets/global.js?v=86241992143886113901785434195" defer="defer"></script>
vendor: 1 bytes, line 99
99
100<script src="//www.rockymountainoils.com/cdn/shop/t/383/assets/jquery-3.6.1.min.js?v=125460993922723132401785434206" type="text/javascript"></script>
100 101 102
102<script>window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.start');</script>
102<meta name="facebook-domain-verification" content="oluk2fxx5d7edn2jvg83rnrg8v711t"> 103<meta name="google-site-verification" content="z85ipM40aEKXy72fX2UF_nfQXSPIZL5I0LEVU64DPCU"> 104<meta id="shopify-digital-wallet" name="shopify-digital-wallet" content="/67979084098/digital_wallets/dialog"> 105<meta id="in-context-paypal-metadata" data-shop-id="67979084098" data-venmo-supported="true" data-environment="production" data-locale="en_US" data-paypal-v4="true" data-currency="USD"> 106<link rel="ucp" href="/.well-known/ucp" version="2026-08-25">
106<script async="async" src="/checkouts/internal/preloads.js?locale=en-US&default_configuration_id=36176194"></script>
106 107<link rel="preconnect" href="https://shop.app" crossorigin="anonymous">
108<script async="async" src="https://shop.app/checkouts/internal/preloads.js?locale=en-US&default_configuration_id=36176194&shop_id=67979084098" crossorigin="anonymous"></script>
vendor: 1 bytes, line 108
108
109<script id="apple-pay-shop-capabilities" type="application/json">{"shopId":67979084098,"countryCode":"US","currencyCode":"USD","merchantCapabilities":["supports3DS"],"merchantId":"gid:\/\/shopify\/Shop\/67979084098","merchantName":"Rocky Mountain Oils","requiredBillingContactFields":["postalAddress","email","phone"],"requiredShippingContactFields":["postalAddress","email","phone"],"shippingType":"shipping","supportedNetworks":["visa","masterCard","amex","discover","elo","jcb"],"total":{"type":"pending","label":"Rocky Mountain Oils","amount":"1.00"},"shopifyPaymentsEnabled":true,"supportsSubscriptions":true}</script>
vendor: 1 bytes, line 109
109
110<script id="shopify-features" type="application/json">{"accessToken":"c5c2e8c582015904409d7243adb9972c","betas":["rich-media-storefront-analytics"],"domain":"www.rockymountainoils.com","predictiveSearch":true,"shopId":67979084098,"locale":"en"}</script>
vendor: 1 bytes, line 110
110
111<script>var Shopify = Shopify || {}; 112Shopify.shop = "rocky-mountain-oils.myshopify.com"; 113Shopify.locale = "en"; 114Shopify.currency = {"active":"USD","rate":"1.0"}; 115Shopify.country = "US"; 116Shopify.theme = {"name":"2026-08-26 - Rocky Mountain Oils (clean-up)","id":188727001455,"schema_name":"Rocky Mountain Oils","schema_version":"2.0.0","theme_store_id":null,"role":"main"}; 117Shopify.theme.handle = "null"; 118Shopify.theme.style = {"id":null,"handle":null}; 119Shopify.cdnHost = "www.rockymountainoils.com/cdn"; 120Shopify.routes = Shopify.routes || {}; 121Shopify.routes.root = "/"; 122Shopify.shopJsCdnBaseUrl = "https://cdn.shopify.com/shopifycloud/shop-js"; 123Shopify.SignInWithShop = Shopify.SignInWithShop || {}; 124Shopify.SignInWithShop.User = Shopify.SignInWithShop.User || {}; 125Shopify.SignInWithShop.User.recognized = false;</script>
vendor: 1 bytes, line 125
125
126<script type="module">!function(o){(o.Shopify=o.Shopify||{}).modules=!0}(window);</script>
vendor: 1 bytes, line 126
126
127<script>!function(o){function n(){var o=[];function n(){o.push(Array.prototype.slice.apply(arguments))}return n.q=o,n}var t=o.Shopify=o.Shopify||{};t.loadFeatures=n(),t.autoloadFeatures=n()}(window);</script>
vendor: 1 bytes, line 127
127
128<script> 129 window.ShopifyPay = window.ShopifyPay || {}; 130 window.ShopifyPay.apiHost = "shop.app\/pay"; 131 window.ShopifyPay.redirectState = null; 132</script>
vendor: 1 bytes, line 132
132
133<script> 134 window.Shopify = window.Shopify || {}; 135 window.Shopify.SignInWithShop = window.Shopify.SignInWithShop || {}; 136 window.Shopify.SignInWithShop.assetMetrics = { sampleRate: 0.25 }; 137 window.Shopify.SignInWithShop.eligible = true; 138</script>
vendor: 1 bytes, line 138
138
139<script id="shop-js-analytics" type="application/json">{"pageType":"index"}</script>
vendor: 1 bytes, line 139
139
140<script defer="defer" async type="module" src="https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/loader.init-shop-cart-sync.en.esm.js"></script>
vendor: 1 bytes, line 140
140
141<script type="module"> 142 await import("https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/loader.init-shop-cart-sync.en.esm.js"); 143 144 window.Shopify.SignInWithShop?.initShopCartSync?.({"fedCMEnabled":true,"windoidEnabled":true}); 145 146</script>
vendor: 1 bytes, line 146
146
147<script> 148 window.Shopify = window.Shopify || {}; 149 if (!window.Shopify.featureAssets) window.Shopify.featureAssets = {}; 150 window.Shopify.featureAssets['shop-js'] = {"avatar":["modules/v2/loader.avatar.en.esm.js"],"checkout-modal":["modules/v2/loader.checkout-modal.en.esm.js"],"init-customer-accounts-sign-up":["modules/v2/loader.init-customer-accounts-sign-up.en.esm.js"],"init-customer-accounts":["modules/v2/loader.init-customer-accounts.en.esm.js"],"init-fed-cm":["modules/v2/loader.init-fed-cm.en.esm.js"],"init-shop-cart-sync":["modules/v2/loader.init-shop-cart-sync.en.esm.js"],"init-shop-email-lookup-coordinator":["modules/v2/loader.init-shop-email-lookup-coordinator.en.esm.js"],"init-shop-for-new-customer-accounts":["modules/v2/loader.init-shop-for-new-customer-accounts.en.esm.js"],"init-shop-user-recognition":["modules/v2/loader.init-shop-user-recognition.en.esm.js"],"init-windoid":["modules/v2/loader.init-windoid.en.esm.js"],"lead-capture":["modules/v2/loader.lead-capture.en.esm.js"],"listener":["modules/v2/loader.listener.en.esm.js"],"pay-button":["modules/v2/loader.pay-button.en.esm.js"],"payment-terms":["modules/v2/loader.payment-terms.en.esm.js"],"shop-button":["modules/v2/loader.shop-button.en.esm.js"],"shop-cart-sync":["modules/v2/loader.shop-cart-sync.en.esm.js"],"shop-cash-offers":["modules/v2/loader.shop-cash-offers.en.esm.js"],"shop-follow-button":["modules/v2/loader.shop-follow-button.en.esm.js"],"shop-login-button":["modules/v2/loader.shop-login-button.en.esm.js"],"shop-login":["modules/v2/loader.shop-login.en.esm.js"],"shop-toast-manager":["modules/v2/loader.shop-toast-manager.en.esm.js"],"shop-user-recognition":["modules/v2/loader.shop-user-recognition.en.esm.js"]}; 151</script>
vendor: 1 bytes, line 151
151
152<script>(function() { 153 var isLoaded = false; 154 function asyncLoad() { 155 if (isLoaded) return; 156 isLoaded = true; 157 var urls = ["https:\/\/cloudsearch-1f874.kxcdn.com\/shopify.js?srp=\/a\/search\u0026shop=rocky-mountain-oils.myshopify.com","\/\/cdn.shopify.com\/proxy\/adfff20bad1767e6d428f2e3027a41c4a767676459302f015783762733521f9a\/bingshoppingtool-t2app-prod.trafficmanager.net\/uet\/tracking_script?shop=rocky-mountain-oils.myshopify.com\u0026sp-cache-control=cHVibGljLCBtYXgtYWdlPTkwMA","https:\/\/seo.apps.avada.io\/scripttag\/avada-seo-installed.js?shop=rocky-mountain-oils.myshopify.com","https:\/\/cdn1.avada.io\/flying-pages\/module.js?shop=rocky-mountain-oils.myshopify.com","https:\/\/shop.orderdeadline.com\/app\/frontend\/js\/order-deadline.min.js?shop=rocky-mountain-oils.myshopify.com","https:\/\/cdn-loyalty.yotpo.com\/loader\/1mzqlpuEeK12ZA7oqhI7dA.js?shop=rocky-mountain-oils.myshopify.com","https:\/\/static.shareasale.com\/json\/shopify\/shareasale-tracking.js?sasmid=83601\u0026ssmtid=73099\u0026shop=rocky-mountain-oils.myshopify.com","https:\/\/cdn.attn.tv\/rockymountainoils\/dtag.js?shop=rocky-mountain-oils.myshopify.com"]; 158 for (var i = 0; i < urls.length; i++) { 159 var s = document.createElement('script'); 160 s.type = 'text/javascript'; 161 s.async = true; 162 s.src = urls[i]; 163 var x = document.getElementsByTagName('script')[0]; 164 x.parentNode.insertBefore(s, x); 165 } 166 }; 167 if(window.attachEvent) { 168 window.attachEvent('onload', asyncLoad); 169 } else { 170 window.addEventListener('load', asyncLoad, false); 171 } 172})();</script>
vendor: 1 bytes, line 172
172
173<script id="__st">var __st={"a":67979084098,"offset":-21600,"reqid":"f3e44af7-63f6-4294-8fed-499f683f564b-1791062567","pageurl":"www.rockymountainoils.com\/","u":"44c8254463f0","p":"home"};</script>
vendor: 1 bytes, line 173
173
174<script>window.ShopifyPaypalV4VisibilityTracking = true;</script>
vendor: 1 bytes, line 174
174
175<script id="captcha-bootstrap">!function(){'use strict';const t='contact',e='account',n='new_comment',o=[[t,t],['blogs',n],['comments',n],[t,'customer']],c=[[e,'customer_login'],[e,'guest_login'],[e,'recover_customer_password'],[e,'create_customer']],r=t=>t.map((([t,e])=>`form[action*='/${t}']:not([data-nocaptcha='true']) input[name='form_type'][value='${e}']`)).join(','),a=t=>()=>t?[...document.querySelectorAll(t)].map((t=>t.form)):[];function s(){const t=[...o],e=r(t);return a(e)}const i='password',u='form_key',d=['recaptcha-v3-token','g-recaptcha-response','h-captcha-response',i],f=()=>{try{return window.sessionStorage}catch{return}},m='__shopify_v',_=t=>t.elements[u];function p(t,e,n=!1){try{const o=window.sessionStorage,c=JSON.parse(o.getItem(e)),{data:r}=function(t){const{data:e,action:n}=t;return t[m]||n?{data:e,action:n}:{data:t,action:n}}(c);for(const[e,n]of Object.entries(r))t.elements[e]&&(t.elements[e].value=n);n&&o.removeItem(e)}catch(o){console.error('form repopulation failed',{error:o})}}const l='form_type',E='cptcha';function T(t){t.dataset[E]=!0}const w=window,h=w.document,L='Shopify',v='ce_forms',y='captcha';let A=!1;((t,e)=>{const n=(g='f06e6c50-85a8-45c8-87d0-21a2b65856fe',I='https://cdn.shopify.com/shopifycloud/storefront-forms-hcaptcha/ce_storefront_forms_captcha_hcaptcha.v1.5.3.iife.js',D={infoText:'Protected by hCaptcha',privacyText:'Privacy',termsText:'Terms'},(t,e,n)=>{const o=w[L][v],c=o.bindForm;if(c)return c(t,g,e,D).then(n);var r;o.q.push([[t,g,e,D],n]),r=I,A||(h.body.append(Object.assign(h.createElement('script'),{id:'captcha-provider',async:!0,src:r})),A=!0)});var g,I,D;w[L]=w[L]||{},w[L][v]=w[L][v]||{},w[L][v].q=[],w[L][y]=w[L][y]||{},w[L][y].protect=function(t,e){n(t,void 0,e),T(t)},Object.freeze(w[L][y]),function(t,e,n,w,h,L){const[v,y,A,g]=function(t,e,n){const i=e?o:[],u=t?c:[],d=[...i,...u],f=r(d),m=r(i),_=r(d.filter((([t,e])=>n.includes(e))));return[a(f),a(m),a(_),s()]}(w,h,L),I=t=>{const e=t.target;return e instanceof HTMLFormElement?e:e&&e.form},D=t=>v().includes(t);t.addEventListener('submit',(t=>{const e=I(t);if(!e)return;const n=D(e)&&!e.dataset.hcaptchaBound&&!e.dataset.recaptchaBound,o=_(e),c=g().includes(e)&&(!o||!o.value);(n||c)&&t.preventDefault(),c&&!n&&(function(t){try{if(!f())return;!function(t){const e=f();if(!e)return;const n=_(t);if(!n)return;const o=n.value;o&&e.removeItem(o)}(t);const e=Array.from(Array(32),(()=>Math.random().toString(36)[2])).join('');!function(t,e){_(t)||t.append(Object.assign(document.createElement('input'),{type:'hidden',name:u})),t.elements[u].value=e}(t,e),function(t,e){const n=f();if(!n)return;const o=[...t.querySelectorAll(`input[type='${i}']`)].map((({name:t})=>t)),c=[...d,...o],r={};for(const[a,s]of new FormData(t).entries())c.includes(a)||(r[a]=s);n.setItem(e,JSON.stringify({[m]:1,action:t.action,data:r}))}(t,e)}catch(e){console.error('failed to persist form',e)}}(e),e.submit())}));const S=(t,e)=>{t&&!t.dataset[E]&&(n(t,e.some((e=>e===t))),T(t))};for(const o of['focusin','change'])t.addEventListener(o,(t=>{const e=I(t);D(e)&&S(e,y())}));const B=e.get('form_key'),M=e.get(l),P=B&&M;t.addEventListener('DOMContentLoaded',(()=>{const t=y();if(P)for(const e of t)e.elements[l].value===M&&p(e,B);[...new Set([...A(),...v().filter((t=>'true'===t.dataset.shopifyCaptcha))])].forEach((e=>S(e,t)))}))}(h,new URLSearchParams(w.location.search),n,t,e,['guest_login'])})(!0,!0)}();</script>
vendor: 1 bytes, line 175
175
176<script integrity="sha256-JjoPp5ZfB1sSAs5SQaol1x1GgvveM+BgmRzyDexInEQ=" data-source-attribution="shopify.loadfeatures" defer="defer" src="//www.rockymountainoils.com/cdn/shopifycloud/storefront/assets/storefront/load_feature-1bd60354.js" crossorigin="anonymous"></script>
vendor: 1 bytes, line 176
176
177<script>(function () {var userAgent = navigator.userAgent;var platform = navigator.platform;var maxTouchPoints = navigator.maxTouchPoints || 0;var isIOS = /iPad|iPhone|iPod/.test(platform) || (platform === 'MacIntel' && maxTouchPoints > 1);var isMacSafari = platform.indexOf('Mac') === 0 && /Safari/.test(userAgent) && !/Chrome|Chromium|CriOS|FxiOS|Edg|OPR|Android/.test(userAgent);var isAppleSafari = isIOS || isMacSafari;if (isAppleSafari) {fetch('/sf_private_access_tokens' + location.search).catch(function () {});}function browserMajorVersion(pattern) {var match = userAgent.match(pattern);return match ? parseInt(match[1], 10) : null;}function shouldLoadAutosizesPolyfill() {if (!window.PerformanceObserver?.supportedEntryTypes?.includes('paint')) {return false;}var chromeVersion = browserMajorVersion(/Chrome\/(\d+)/);if (chromeVersion !== null) {return chromeVersion < 126;}var firefoxVersion = browserMajorVersion(/Firefox\/(\d+)/);if (firefoxVersion !== null) {return firefoxVersion < 150;}var safariVersion = isAppleSafari ? browserMajorVersion(/Version\/(\d+).*Safari\//) : null;if (safariVersion !== null) {return safariVersion < 27;}return true;}if (shouldLoadAutosizesPolyfill()) {var autosizesScript = document.createElement('script');autosizesScript.async = true;autosizesScript.crossOrigin = 'anonymous';autosizesScript.src = "//www.rockymountainoils.com/cdn/shopifycloud/storefront/assets/storefront/autosizes-84416378.js";(document.head || document.documentElement).appendChild(autosizesScript);}window.ShopifyAnalytics = window.ShopifyAnalytics || {};window.ShopifyAnalytics.performance = window.ShopifyAnalytics.performance || {};(function () {var LONG_FRAME_THRESHOLD = 50;var longAnimationFrames = [];var activeRafId = null;function collectLongFrames() {var previousTime = null;function rafMonitor(now) {if (activeRafId === null) {return;}var delta = now - previousTime;if (delta > LONG_FRAME_THRESHOLD) {longAnimationFrames.push({startTime: previousTime,endTime: now,});}previousTime = now;activeRafId = requestAnimationFrame(rafMonitor);}previousTime = performance.now();activeRafId = requestAnimationFrame(rafMonitor);}if (!window.PerformanceObserver?.supportedEntryTypes?.includes('long-animation-frame')) {collectLongFrames();var timeoutId = setTimeout(function () {cancelAnimationFrame(activeRafId);}, 10000);window.ShopifyAnalytics.performance.getLongAnimationFrames = function (stopCollection) {if (stopCollection === undefined) {stopCollection = false;}if (stopCollection) {clearTimeout(timeoutId);cancelAnimationFrame(activeRafId);}return longAnimationFrames;};}})();})();</script>
177<script crossorigin="anonymous" defer="defer" src="//www.rockymountainoils.com/cdn/shopifycloud/storefront/assets/shopify_pay/storefront-616277c7.js?v=20250812"></script>
vendor: 1 bytes, line 177
177
178<script id="shopify-origin-trials" async="async" integrity="sha256-qJbe/jEZBHtr5W/BlA2cKAz3vkXu6vJQyLjgvgCC86g=" src="//cdn.shopify.com/shopifycloud/storefront/assets/storefront/origin_trials-318ab40a.js" crossorigin="anonymous" onload="window.__shopifyOriginTrialsDone = true" onerror="window.__shopifyOriginTrialsDone = true"></script>
vendor: 1 bytes, line 178
178
179<script> 180 window.Shopify = window.Shopify || {}; 181 window.Shopify.MCP = window.Shopify.MCP || {}; 182 window.Shopify.MCP.enabled = true; 183 window.Shopify.MCP.shop = "rocky-mountain-oils.myshopify.com"; 184 window.Shopify.MCP.mcpEndpoint = "https:\/\/www.rockymountainoils.com\/api\/mcp"; 185 window.Shopify.MCP.tools = [{"name":"search_shop_policies_and_faqs","description":"Used to get facts about the stores policies, products, or services.\nSome examples of questions you can ask are:\n - What is your return policy?\n - What is your shipping policy?\n - What is your phone number?\n - What are your hours of operation?\"\n","inputSchema":{"$schema":"https:\/\/json-schema.org\/draft\/2020-12\/schema","type":"object","properties":{"query":{"type":"string","description":"A natural language query."},"context":{"type":"string","description":"Additional information about the request such as user demographics, mood, location, or other relevant details that could help in tailoring the response appropriately."}},"required":["query"]}}]; 186</script>
vendor: 1 bytes, line 186
186
187<script>(()=>{var d="shopify:webmcp_adapter_loaded",n=Symbol.for("shopify.webmcp_adapter_loading");function s(c,a,{win:r=window,doc:o=document}={}){function p(){try{return r.localStorage.getItem(d)==="true"}catch{return!1}}function l(){try{r.localStorage.setItem(d,"true")}catch{}}function u(){return typeof(o.modelContext||r.navigator?.modelContext)?.registerTool=="function"}function f(){if(r[n]||!u())return;let t=o.head||o.getElementsByTagName("head")[0];if(!t)return;let e=o.createElement("script");e.type="module",e.crossOrigin="anonymous",a&&(e.integrity=a),e.src=c,e.addEventListener("load",l,{once:!0}),e.addEventListener("error",()=>{r[n]=!1},{once:!0}),t.appendChild(e),r[n]=!0}function _(t){let e=o.getElementById("shopify-origin-trials");if(!e||r.__shopifyOriginTrialsDone){t();return}e.addEventListener("load",t,{once:!0}),e.addEventListener("error",t,{once:!0})}function i(){_(()=>r.setTimeout(f,0))}function m(){o.addEventListener("DOMContentLoaded",i,{once:!0})}p()?i():m()}s("\/\/www.rockymountainoils.com\/cdn\/shopifycloud\/storefront\/assets\/storefront\/webmcp-c6b62ece.js","sha256-ke4DDuBjdvea3vxLWxHc9E9nq8zihuG4IfYEGbb77ys=");})(); 188</script>
vendor: 1 bytes, line 188
188
189<script data-source-attribution="shopify.dynamic_checkout.dynamic.init">var Shopify=Shopify||{};Shopify.PaymentButton=Shopify.PaymentButton||{isStorefrontPortableWallets:!0,init:function(){window.Shopify.PaymentButton.init=function(){};var t=document.createElement("script");t.src="https://www.rockymountainoils.com/cdn/shopifycloud/portable-wallets/latest/portable-wallets.en.js",t.type="module",document.head.appendChild(t)}}; 190</script>
vendor: 1 bytes, line 190
190
191<script data-source-attribution="shopify.dynamic_checkout.buyer_consent"> 192 function portableWalletsHideBuyerConsent(e){var t=document.getElementById("shopify-buyer-consent"),n=document.getElementById("shopify-subscription-policy-button");t&&n&&(t.classList.add("hidden"),t.setAttribute("aria-hidden","true"),n.removeEventListener("click",e))}function portableWalletsShowBuyerConsent(e){var t=document.getElementById("shopify-buyer-consent"),n=document.getElementById("shopify-subscription-policy-button");t&&n&&(t.classList.remove("hidden"),t.removeAttribute("aria-hidden"),n.addEventListener("click",e))}window.Shopify?.PaymentButton&&(window.Shopify.PaymentButton.hideBuyerConsent=portableWalletsHideBuyerConsent,window.Shopify.PaymentButton.showBuyerConsent=portableWalletsShowBuyerConsent); 193</script>
vendor: 1 bytes, line 193
193
194<script data-source-attribution="shopify.dynamic_checkout.cart.bootstrap">document.addEventListener("DOMContentLoaded",(function(){function t(){return document.querySelector("shopify-accelerated-checkout-cart, shopify-accelerated-checkout")}if(t())Shopify.PaymentButton.init();else{new MutationObserver((function(e,n){t()&&(Shopify.PaymentButton.init(),n.disconnect())})).observe(document.body,{childList:!0,subtree:!0})}})); 195</script>
vendor: 1 bytes, line 195
195
196<script id='scb4127' type='text/javascript' async='' src='https://www.rockymountainoils.com/cdn/shopifycloud/privacy-banner/storefront-banner.js'></script>
196<link id="shopify-accelerated-checkout-styles" rel="stylesheet" media="screen" href="https://www.rockymountainoils.com/cdn/shopifycloud/portable-wallets/latest/accelerated-checkout-backwards-compat.css" crossorigin="anonymous"> 197<style id="shopify-accelerated-checkout-cart"> 198 #shopify-buyer-consent { 199 margin-top: 1em; 200 display: inline-block; 201 width: 100%; 202} 203 204#shopify-buyer-consent.hidden { 205 display: none; 206} 207 208#shopify-subscription-policy-button { 209 background: none; 210 border: none; 211 padding: 0; 212 text-decoration: underline; 213 font-size: inherit; 214 cursor: pointer; 215} 216 217#shopify-subscription-policy-button::before { 218 box-shadow: none; 219} 220 221 </style> 222
223<script id="shopify-cfh-end">window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.end');</script>
223 224 <style>.hc-sale-tag{top:0;left:0;width:80px;height:80px;overflow:hidden;position:absolute!important;z-index:2}.hc-sale-tag span{right:10px;top:4px;transform:rotate(-45deg);position:absolute;display:block;width:100px;padding:4px 0;background-color:#fb485e;box-shadow:0 5px 10px rgba(0,0,0,.1);color:#fff;font-size:14px;font-weight:700;text-align:center}.hc-sale-tag span{background:#a4197a!important;color:#ffffff!important;}</style>
224<script>document.addEventListener("DOMContentLoaded",function(){"undefined"!=typeof hcVariants&&function(e){function t(e,t,a){return function(){if(a)return t.apply(this,arguments),e.apply(this,arguments);var n=e.apply(this,arguments);return t.apply(this,arguments),n}}var a=null;function n(){var t=window.location.search.replace(/.*variant=(\d+).*/,"$1");t&&t!=a&&(a=t,e(t))}window.history.pushState=t(history.pushState,n),window.history.replaceState=t(history.replaceState,n),window.addEventListener("popstate",n)}(function(e){let t=null;for(var a=0;a<hcVariants.length;a++)if(hcVariants[a].id==e){t=hcVariants[a];var n=document.querySelectorAll(".hc-product-page.hc-sale-tag");if(t.compare_at_price&&t.compare_at_price>t.price){var r=100*(t.compare_at_price-t.price)/t.compare_at_price;if(null!=r)for(a=0;a<n.length;a++)n[a].childNodes[0].textContent=r.toFixed(0)+"%",n[a].style.display="block";else for(a=0;a<n.length;a++)n[a].style.display="none"}else for(a=0;a<n.length;a++)n[a].style.display="none";break}})});</script>
224 225 226 227
227<script> 228 229 230 231 232 233 234 var gsf_conversion_data = {page_type : 'home', event : 'page_view', data : {product_data : [{variant_id : 51753324347759, product_id : 8025526305090, name : "1/4oz Plastic Blending Bottle", price : "0.95", currency : "USD", sku : "PBBOTT-M8ML", brand : "Rocky Mountain Oils", variant : "1 pack", category : "Bottle"}, {variant_id : 47158794846530, product_id : 8870804783426, name : "16oz Spray Bottle", price : "6.76", currency : "USD", sku : "EPLSPY-M16", brand : "Rocky Mountain Oils", variant : "16oz", category : "Glass Bottle"}], total_price :"7.71", shop_currency : "USD"}}; 235 236 237</script>
237 238
238<script async src="https://cdn-widgetsrepository.yotpo.com/v1/loader/lJQvWsNScp9JikHPae5aRIjveHBjpzkexd8mF1de" type="text/javascript"></script>
238 239 240<style> 241 h4.yotpo-review-title:empty { display: none !important; } 242</style> 243
244<script> 245 (function () { 246 function normalize(s) { 247 return (s || '').replace(/\s+/g, ' ').trim(); 248 } 249 function isScrollable(el) { 250 var s = window.getComputedStyle(el); 251 var vy = (s.overflowY === 'auto' || s.overflowY === 'scroll') && el.scrollHeight > el.clientHeight + 1; 252 var vx = (s.overflowX === 'auto' || s.overflowX === 'scroll') && el.scrollWidth > el.clientWidth + 1; 253 return vy || vx; 254 } 255 function hasFocusable(el) { 256 return !!el.querySelector('a[href], button, input, select, textarea, [tabindex]'); 257 } 258 259 function run() { 260 var i, el; 261 262 var titles = document.querySelectorAll('h4.yotpo-review-title'); 263 for (i = 0; i < titles.length; i++) { 264 el = titles[i]; 265 if (!el.querySelector('*') && !el.textContent.trim() && el.parentNode) { 266 el.parentNode.removeChild(el); 267 } 268 } 269 270 var btns = document.querySelectorAll('.yotpo-widget-instance button[aria-label]'); 271 for (i = 0; i < btns.length; i++) { 272 el = btns[i]; 273 var label = normalize(el.getAttribute('aria-label')); 274 var visible = normalize(el.textContent); 275 if (label && visible && label.toLowerCase().indexOf(visible.toLowerCase()) === -1) { 276 el.setAttribute('aria-label', visible + ', ' + label); 277 } 278 } 279 280 var widgets = document.querySelectorAll('.yotpo-widget-instance'); 281 for (var w = 0; w < widgets.length; w++) { 282 var els = widgets[w].querySelectorAll('div, ul, ol, section, dl'); 283 for (i = 0; i < els.length; i++) { 284 el = els[i]; 285 if (!el.hasAttribute('tabindex') && isScrollable(el) && !hasFocusable(el)) { 286 el.setAttribute('tabindex', '0'); 287 if (!el.hasAttribute('role') && el.tagName !== 'UL' && el.tagName !== 'OL' && el.tagName !== 'DL') { 288 el.setAttribute('role', 'group'); 289 } 290 if (!el.hasAttribute('aria-label')) { 291 el.setAttribute('aria-label', 'Scrollable review content, use arrow keys to scroll'); 292 } 293 } 294 } 295 } 296 297 var lists = document.querySelectorAll('ul, ol, dl'); 298 for (i = 0; i < lists.length; i++) { 299 el = lists[i]; 300 var ours = el.getAttribute('data-rmo-empty-list') === '1'; 301 if (el.getAttribute('role') && !ours) continue; 302 if (!el.closest || !el.closest('[class*="yotpo"], [id*="yotpo"]')) continue; 303 var hasItem = el.tagName === 'DL' ? el.querySelector('dt, dd') : el.querySelector('li, [role="listitem"]'); 304 if (!hasItem) { 305 el.setAttribute('role', 'presentation'); 306 el.setAttribute('data-rmo-empty-list', '1'); 307 } else if (ours) { 308 el.removeAttribute('role'); 309 el.removeAttribute('data-rmo-empty-list'); 310 } 311 } 312 } 313 314 function init() { 315 if (!document.querySelector('.yotpo-widget-instance')) return; 316 var t; 317 function schedule() { clearTimeout(t); t = setTimeout(run, 400); } 318 schedule(); 319 new MutationObserver(schedule).observe(document.body, { childList: true, subtree: true }); 320 } 321 322 if (document.readyState === 'loading') { 323 document.addEventListener('DOMContentLoaded', init); 324 } else { 325 init(); 326 } 327 })(); 328</script>
328 329 330
330<script async type="text/javascript" src="//www.rockymountainoils.com/cdn/shop/t/383/assets/clarity.js?v=116180266523842809431785434162"></script>
330 331 332 <!-- BEGIN app block: shopify://apps/essential-a-b-testing/blocks/ab-testing/0154ac6b-7b9c-4958-8219-ed5b06e6d463 -->
332<script type="text/javascript"> 333 var eaABtEmbdScrV=(function(){"use strict";var I=Object.defineProperty;var E=(l,a,d)=>a in l?I(l,a,{enumerable:!0,configurable:!0,writable:!0,value:d}):l[a]=d;var h=(l,a,d)=>E(l,typeof a!="symbol"?a+"":a,d);class l{constructor(){h(this,"selectors",["#PBarNextFrameWrapper","#preview-bar-iframe"]);h(this,"keepLookingForMs",1e4)}hide(){return Promise.all(this.selectors.map(e=>this.waitAndHideElement(e)))}waitAndHideElement(e){return new Promise(t=>{let s=0;const o=c=>{c.dataset.eaAbPbHidden!=="1"&&(c.dataset.eaAbPbHidden="1",c.style.display="none")},i=document.querySelector(e);if(i){o(i),t(!0);return}const n=new MutationObserver(()=>{const c=document.querySelector(e);c&&(o(c),window.clearTimeout(s),n.disconnect(),t(!0))});n.observe(document.documentElement,{childList:!0,subtree:!0}),s=window.setTimeout(()=>{n.disconnect(),t(!1)},this.keepLookingForMs)})}}class a{static clearIfStale(e){if(e===0||Shopify.theme.role==="main")return!1;const t=new URL(window.location.href);return t.searchParams.set("preview_theme_id",""),window.location.replace(t.toString()),!0}}const d=/\b(googlebot|adsbot-google|google-adsbot|mediapartners-google|google-inspectiontool|googleother|storebot-google|google-read-aloud|googleweblight|googlepage|google-adwords(?:-[a-z0-9-]+)?|bingbot|slurp|duckduckbot|baiduspider|yandex(?:bot|images)|sogou|exabot|applebot|petalbot|ahrefsbot|semrushbot|mj12bot|dotbot|seznambot|rogerbot|linkdexbot|facebookexternalhit|facebot|linkedinbot|twitterbot|pinterest|redditbot|discordbot|slackbot|whatsapp|telegrambot|embedly|quora-link-preview|outbrain|nuzzel|flipboardproxy|vkshare)\b/i;class m{static shouldProcessRequest(e){return!(this.isBot()||!this.canPersist()||this.isInDesignMode(e)||this.isAppPreview())}static isBot(){return d.test(navigator.userAgent)}static canPersist(){try{const e="__essential-ab-testing-persistance__";return localStorage.setItem(e,"1"),localStorage.removeItem(e),!0}catch{return!1}}static isInDesignMode(e){return e.request.designMode}static isAppPreview(){return new URLSearchParams(window.location.search).get("eaPreview")==="true"}}var u=(r=>(r.TEMPLATE="template",r.THEME="theme",r))(u||{});class f{static themeGid(e){return`gid://shopify/OnlineStoreTheme/${e}`}static themeId(e){return e.replace("gid://shopify/OnlineStoreTheme/","")}}class p{static handle(e,t,s){switch(e.type){case u.TEMPLATE:this.handleTemplate(e,t,s);return;case u.THEME:this.handleTheme(e,t);return}}static handleTemplate(e,t,s){if(t!=="a"&&t!=="b")return;const i=e.params[t];if(i.name!==s.template.name||i.suffix===s.template.suffix)return;const n=new URL(window.location.href);n.searchParams.set("view",i.suffix??"__DEFAULT"),window.location.replace(n.toString())}static handleTheme(e,t){if(t!=="a"&&t!=="b")return;const o=e.params[t];if(o===f.themeGid(Shopify.theme.id))return;const i=f.themeId(o),n=new URL(window.location.href);n.searchParams.set("preview_theme_id",i),window.location.replace(n.toString())}}class g{constructor(e){h(this,"tests");this.tests=e}find(e){return this.tests.find(t=>{switch(t.type){case u.TEMPLATE:return this.testMatchesTemplate(t.params,e);case u.THEME:return this.testMatchesTheme(t.params)}return!1})}testMatchesTemplate(e,t){return e.themeId!==f.themeGid(Shopify.theme.id)?!1:e.a.name===t.template.name&&e.a.suffix===t.template.suffix||e.b.name===t.template.name&&e.b.suffix===t.template.suffix}testMatchesTheme(e){const t=f.themeGid(Shopify.theme.id);return e.a===t||e.b===t}}class w{static pick(e){return Math.random()<=e.aPercentage/100?"a":"b"}}class b{static generate(){return typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():typeof crypto<"u"&&crypto.getRandomValues?"10000000-1000-4000-8000-100000000000".replace(/[018]/g,e=>(+e^crypto.getRandomValues(new Uint8Array(1))[0]&15>>+e/4).toString(16)):"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(e){const t=Math.random()*16|0;return(e==="x"?t:t&3|8).toString(16)})}}class x{constructor(e){h(this,"key");this.key=`essential-ab-testing-${e}`}get(){const e=localStorage.getItem(this.key);if(e)try{return JSON.parse(e)}catch{}}getOrMake(){const e=this.get();return e||{id:b.generate(),createdAt:new Date,tests:[]}}
333getTestVariant(e){const t=this.get();if(!t)return;const o=(t.tests??[]).find(i=>i.id==e);return o?o.variant:void 0}setTestVariant(e,t){const s=this.getOrMake();s.tests.push({id:e,variant:t,createdAt:new Date}),localStorage.setItem(this.key,JSON.stringify(s))}onlyKeepTests(e){const t=this.get();if(!t||t.tests.length==0)return 0;const s=t.tests.filter(i=>e.includes(i.id)),o=t.tests.length-s.length;return o>0&&(t.tests=s,localStorage.setItem(this.key,JSON.stringify(t))),o}}const y=50,T=200;function S(r){if(typeof Shopify<"u"&&Shopify.theme){r();return}let e=0;const t=setInterval(()=>{e++,typeof Shopify<"u"&&Shopify.theme?(clearInterval(t),r()):e>=T&&clearInterval(t)},y)}function v(r,e){if(!m.shouldProcessRequest(r))return;new l().hide();const t=new x(r.shopId),s=t.onlyKeepTests(e.map(c=>c.id));if(a.clearIfStale(s))return;const i=new g(e).find(r);if(!i)return;let n=t.getTestVariant(i.id);n||(n=w.pick(i),t.setTestVariant(i.id,n)),p.handle(i,n,r)}function P(r,e){S(()=>v(r,e))}return P})(); 334 335 eaABtEmbdScrV( 336 { 337 shopId: 67979084098, 338 request: { 339 designMode: false, 340 visualPreviewMode: false, 341 }, 342 template: { 343 directory: null, 344 name: "index", 345 suffix: null, 346 } 347 }, 348 JSON.parse('[{"id":"e0a108d6-079e-4803-9397-81cfd7850b7d","aPercentage":50,"type":"template","params":{"themeId":"gid://shopify/OnlineStoreTheme/183782343023","a":{"template":"templates/product.a-test-carrier-oil-vari.json","name":"product","suffix":"a-test-carrier-oil-vari"},"b":{"template":"templates/product.b-test-carrier-oil-vari.json","name":"product","suffix":"b-test-carrier-oil-vari"}}},{"id":"0fb7dbf3-563e-4219-8e97-f5d5058835c1","aPercentage":50,"type":"template","params":{"themeId":"gid://shopify/OnlineStoreTheme/183782343023","a":{"template":"templates/product.a-test-cucumber-seed.json","name":"product","suffix":"a-test-cucumber-seed"},"b":{"template":"templates/product.b-test-cucumber-seed.json","name":"product","suffix":"b-test-cucumber-seed"}}},{"id":"7f9c3410-e2c8-4076-9352-ce1d421ecc28","aPercentage":50,"type":"template","params":{"themeId":"gid://shopify/OnlineStoreTheme/183782343023","a":{"template":"templates/product.a-test-minty-clean.json","name":"product","suffix":"a-test-minty-clean"},"b":{"template":"templates/product.b-test-minty-clean.json","name":"product","suffix":"b-test-minty-clean"}}},{"id":"45d11ca1-1ee4-4004-986d-c9261c0f71e7","aPercentage":50,"type":"template","params":{"themeId":"gid://shopify/OnlineStoreTheme/183782343023","a":{"template":"templates/product.a-test-juniper-berry.json","name":"product","suffix":"a-test-juniper-berry"},"b":{"template":"templates/product.b-test-juniper-berry.json","name":"product","suffix":"b-test-juniper-berry"}}},{"id":"080c0a0c-b269-487e-97cc-1646ae20fa0a","aPercentage":50,"type":"template","params":{"themeId":"gid://shopify/OnlineStoreTheme/183782343023","a":{"template":"templates/product.a-test-organic-esse-kit.json","name":"product","suffix":"a-test-organic-esse-kit"},"b":{"template":"templates/product.b-test-organic-esse-kit.json","name":"product","suffix":"b-test-organic-esse-kit"}}},{"id":"92b3a305-addb-45ca-8c6f-d0fa01b88874","aPercentage":50,"type":"template","params":{"themeId":"gid://shopify/OnlineStoreTheme/183782343023","a":{"template":"templates/product.a-test-toasted-coco.json","name":"product","suffix":"a-test-toasted-coco"},"b":{"template":"templates/product.b-test-toasted-coco.json","name":"product","suffix":"b-test-toasted-coco"}}},{"id":"4d183565-df68-40eb-9255-ec3c849d9585","aPercentage":50,"type":"template","params":{"themeId":"gid://shopify/OnlineStoreTheme/183782343023","a":{"template":"templates/product.a-test-cypress.json","name":"product","suffix":"a-test-cypress"},"b":{"template":"templates/product.b-test-cypress.json","name":"product","suffix":"b-test-cypress"}}},{"id":"664019a4-dc4f-4645-9099-be739b8abf27","aPercentage":50,"type":"template","params":{"themeId":"gid://shopify/OnlineStoreTheme/183782343023","a":{"template":"templates/product.a-test-melissa.json","name":"product","suffix":"a-test-melissa"},"b":{"template":"templates/product.b-test-melissa.json","name":"product","suffix":"b-test-melissa"}}},{"id":"564edd92-0ead-4aba-b467-ccdb3fa2117d","aPercentage":50,"type":"template","params":{"themeId":"gid://shopify/OnlineStoreTheme/183782343023","a":{"template":"templates/product.a-test-jasmine.json","name":"product","suffix":"a-test-jasmine"},"b":{"template":"templates/product.b-test-jasmine.json","name":"product","suffix":"b-test-jasmine"}}},{"id":"5f59bc53-489d-45f7-9bdb-19b2ec9e3014","aPercentage":50,"type":"template","params":{"themeId":"gid://shopify/OnlineStoreTheme/183782343023","a":{"template":"templates/product.a-test-majestic-breeze.json","name":"product","suffix":"a-test-majestic-breeze"},"b":{"template":"templates/product.b-test-majestic-breeze.json","name":"product","suffix":"b-test-majestic-breeze"}}}
348,{"id":"1bb1583a-f905-4859-ab16-b4e66036e921","aPercentage":50,"type":"template","params":{"themeId":"gid://shopify/OnlineStoreTheme/183782343023","a":{"template":"templates/product.a-test-blossoms.json","name":"product","suffix":"a-test-blossoms"},"b":{"template":"templates/product.b-test-blossoms.json","name":"product","suffix":"b-test-blossoms"}}},{"id":"cd8b15b6-4e0e-4fe4-8cbf-d4ccb2b3ff6e","aPercentage":50,"type":"template","params":{"themeId":"gid://shopify/OnlineStoreTheme/183782343023","a":{"template":"templates/product.a-test-fco-carrier-oil.json","name":"product","suffix":"a-test-fco-carrier-oil"},"b":{"template":"templates/product.b-test-fco-carrier-oil.json","name":"product","suffix":"b-test-fco-carrier-oil"}}},{"id":"01db657a-1612-4b6c-aad2-c89913695628","aPercentage":50,"type":"template","params":{"themeId":"gid://shopify/OnlineStoreTheme/183782343023","a":{"template":"templates/product.a-test-eucalyptus-citri.json","name":"product","suffix":"a-test-eucalyptus-citri"},"b":{"template":"templates/product.b-test-eucalyptus-citri.json","name":"product","suffix":"b-test-eucalyptus-citri"}}},{"id":"191b5f4a-3318-46cf-a815-69e7b37208de","aPercentage":50,"type":"template","params":{"themeId":"gid://shopify/OnlineStoreTheme/183782343023","a":{"template":"templates/product.a-test-marjoram.json","name":"product","suffix":"a-test-marjoram"},"b":{"template":"templates/product.b-test-marjoram.json","name":"product","suffix":"b-test-marjoram"}}},{"id":"6a1ee9af-71ea-440f-9a58-acffbe4f758b","aPercentage":50,"type":"template","params":{"themeId":"gid://shopify/OnlineStoreTheme/183782343023","a":{"template":"templates/product.a-test-jojoba.json","name":"product","suffix":"a-test-jojoba"},"b":{"template":"templates/product.b-test-jojoba.json","name":"product","suffix":"b-test-jojoba"}}},{"id":"d68aee9f-94c3-41dc-bb10-202b7afffc1e","aPercentage":50,"type":"template","params":{"themeId":"gid://shopify/OnlineStoreTheme/185166496111","a":{"template":"templates/product.json","name":"product","suffix":null},"b":{"template":"templates/product.price-above-ratings.json","name":"product","suffix":"price-above-ratings"}}},{"id":"21efb2f9-868d-4b78-8703-beb0e0f5c267","aPercentage":50,"type":"template","params":{"themeId":"gid://shopify/OnlineStoreTheme/185166496111","a":{"template":"templates/product.a-test-arcticrose.json","name":"product","suffix":"a-test-arcticrose"},"b":{"template":"templates/product.b-test-actricrose.json","name":"product","suffix":"b-test-actricrose"}}},{"id":"9c191335-a2f5-45f3-8b43-d87787f90267","aPercentage":50,"type":"template","params":{"themeId":"gid://shopify/OnlineStoreTheme/185166496111","a":{"template":"templates/product.a-test-balsamofperu.json","name":"product","suffix":"a-test-balsamofperu"},"b":{"template":"templates/product.b-test-balsamofperu.json","name":"product","suffix":"b-test-balsamofperu"}}},{"id":"4711bdd8-4be9-448f-a1e4-c93b10fced4c","aPercentage":50,"type":"template","params":{"themeId":"gid://shopify/OnlineStoreTheme/185166496111","a":{"template":"templates/product.a-test-basil.json","name":"product","suffix":"a-test-basil"},"b":{"template":"templates/product.b-test-basil.json","name":"product","suffix":"b-test-basil"}}},{"id":"7efbec66-42f3-4d74-ada5-22efa7a0c59c","aPercentage":50,"type":"template","params":{"themeId":"gid://shopify/OnlineStoreTheme/185166496111","a":{"template":"templates/product.a-test-bluetansy.json","name":"product","suffix":"a-test-bluetansy"},"b":{"template":"templates/product.b-test-bluetansy.json","name":"product","suffix":"b-test-bluetansy"}}},{"id":"3000fb0d-2e41-437a-a079-b6d842dc97be","aPercentage":50,"type":"template","params":{"themeId":"gid://shopify/OnlineStoreTheme/185166496111","a":{"template":"templates/product.a-test-citronella.json","name":"product","suffix":"a-test-citronella"},"b":{"template":"templates/product.b-test-citronella.json","name":"product","suffix":"b-test-citronella"}}},{"id":"19e188c4-89f0-4871-bde0-81c021b5b0df","aPercentage":50,"type":"template","params":{"themeId":"gid://shopify/OnlineStoreTheme/185166496111","a":{"template":"templates/product.a-test-germanchamomile.json","name":"product","suffix":"a-test-germanchamomile"},"b":{"template":"templates/product.b-test-germanchamomile.json","name":"product","suffix":"b-test-germanchamomile"}}},{"id":"a9f9a46b-9571-46f1-b415-c14f9fadad8b","aPercentage":50,"type":"template","params":{"themeId":"gid://shopify/OnlineStoreTheme/185166496111","a":{"template":"templates/product.a-test-holybasil.json","name":"product","suffix":"a-test-holybasil"},"b":{"template":"templates/product.b-test-holybasil.json","name":"product","suffix":"b-test-holybasil"}}},{"id":"ffd07d5a-9309-4c02-8eb5-25b699ca0ca5","aPercentage":50,"type":"template","params":{"themeId":"gid://shopify/OnlineStoreTheme/185166496111","a":{"template":"templates/product.a-test-peaceandquiet.json","name":"product","suffix":"a-test-peaceandquiet"},"b":{"template":"templates/product.b-test-peaceandquiet.json","name":"product","suffix":"b-test-peaceandquiet"}}}
348,{"id":"1d6aa0c2-1c1c-4663-872c-db55d0e0118a","aPercentage":50,"type":"template","params":{"themeId":"gid://shopify/OnlineStoreTheme/185166496111","a":{"template":"templates/product.a-test-sprayhead.json","name":"product","suffix":"a-test-sprayhead"},"b":{"template":"templates/product.b-test-sprayhead.json","name":"product","suffix":"b-test-sprayhead"}}},{"id":"f3cae3fa-b038-4e6a-b0da-488ac36a1567","aPercentage":50,"type":"template","params":{"themeId":"gid://shopify/OnlineStoreTheme/185166496111","a":{"template":"templates/product.a-test-magnolia.json","name":"product","suffix":"a-test-magnolia"},"b":{"template":"templates/product.b-test-magnolia.json","name":"product","suffix":"b-test-magnolia"}}},{"id":"06906f20-b832-4451-b5f7-31a3a703311f","aPercentage":50,"type":"template","params":{"themeId":"gid://shopify/OnlineStoreTheme/185166496111","a":{"template":"templates/product.a-test-mandarin.json","name":"product","suffix":"a-test-mandarin"},"b":{"template":"templates/product.b-test-mandarin.json","name":"product","suffix":"b-test-mandarin"}}},{"id":"0a825b9d-0627-4aa3-930b-49220c211f9a","aPercentage":50,"type":"template","params":{"themeId":"gid://shopify/OnlineStoreTheme/185166496111","a":{"template":"templates/product.a-test-tangerine.json","name":"product","suffix":"a-test-tangerine"},"b":{"template":"templates/product.b-test-tangerine.json","name":"product","suffix":"b-test-tangerine"}}},{"id":"a6f6e100-84ad-41cc-8fc8-df34f3bfbd07","aPercentage":50,"type":"template","params":{"themeId":"gid://shopify/OnlineStoreTheme/185166496111","a":{"template":"templates/product.a-test-blendofmelissa.json","name":"product","suffix":"a-test-blendofmelissa"},"b":{"template":"templates/product.b-test-blendofmelissa.json","name":"product","suffix":"b-test-blendofmelissa"}}},{"id":"ecd648d6-bc2f-40a8-af94-bb25400e8d72","aPercentage":50,"type":"template","params":{"themeId":"gid://shopify/OnlineStoreTheme/185166496111","a":{"template":"templates/product.a-test-gingerroot.json","name":"product","suffix":"a-test-gingerroot"},"b":{"template":"templates/product.b-test-gingerroot.json","name":"product","suffix":"b-test-gingerroot"}}},{"id":"0af09b61-bfcd-4324-938f-bcddf7cd0b4d","aPercentage":50,"type":"template","params":{"themeId":"gid://shopify/OnlineStoreTheme/185166496111","a":{"template":"templates/product.a-test-meadowbreeze.json","name":"product","suffix":"a-test-meadowbreeze"},"b":{"template":"templates/product.b-test-meadowbreeze.json","name":"product","suffix":"b-test-meadowbreeze"}}},{"id":"2bc8dc99-bf45-465a-a90b-4104bff84b0a","aPercentage":50,"type":"template","params":{"themeId":"gid://shopify/OnlineStoreTheme/185166496111","a":{"template":"templates/product.a-test-neroli.json","name":"product","suffix":"a-test-neroli"},"b":{"template":"templates/product.b-test-neroli.json","name":"product","suffix":"b-test-neroli"}}},{"id":"d763c5cc-c028-4641-86b4-b78805a08ed5","aPercentage":50,"type":"template","params":{"themeId":"gid://shopify/OnlineStoreTheme/185166496111","a":{"template":"templates/product.a-test-oregano.json","name":"product","suffix":"a-test-oregano"},"b":{"template":"templates/product.b-test-oregano.json","name":"product","suffix":"b-test-oregano"}}},{"id":"10d84a6f-081d-4f5b-9807-6148796ef899","aPercentage":50,"type":"template","params":{"themeId":"gid://shopify/OnlineStoreTheme/185166496111","a":{"template":"templates/product.a-test-relieveme.json","name":"product","suffix":"a-test-relieveme"},"b":{"template":"templates/product.b-test-relieveme.json","name":"product","suffix":"b-test-relieveme"}}},{"id":"0a28b042-85c9-4732-ab92-85c3f912b8ad","aPercentage":50,"type":"template","params":{"themeId":"gid://shopify/OnlineStoreTheme/185166496111","a":{"template":"templates/product.a-test-thyme.json","name":"product","suffix":"a-test-thyme"},"b":{"template":"templates/product.b-test-thyme.json","name":"product","suffix":"b-test-thyme"}}},{"id":"2b3715c0-7130-494c-bcec-1e1913b7efd0","aPercentage":50,"type":"template","params":{"themeId":"gid://shopify/OnlineStoreTheme/185166496111","a":{"template":"templates/product.a-test-aromahangingcardiff.json","name":"product","suffix":"a-test-aromahangingcardiff"},"b":{"template":"templates/product.b-test-aromahangingcardiff.json","name":"product","suffix":"b-test-aromahangingcardiff"}}},{"id":"a8309aaa-90d3-423e-b5c2-1689d7691b9e","aPercentage":50,"type":"template","params":{"themeId":"gid://shopify/OnlineStoreTheme/185166496111","a":{"template":"templates/product.a-test-blendofcinnamon.json","name":"product","suffix":"a-test-blendofcinnamon"},"b":{"template":"templates/product.b-test-blendofcinnamon.json","name":"product","suffix":"b-test-blendofcinnamon"}}},{"id":"0d257723-eb33-4b42-97f6-2bb6f8692029","aPercentage":50,"type":"template","params":{"themeId":"gid://shopify/OnlineStoreTheme/185166496111","a":{"template":"templates/product.a-test-brainstorm.json","name":"product","suffix":"a-test-brainstorm"},"b":{"template":"templates/product.b-test-brainstorm.json","name":"product","suffix":"b-test-brainstorm"}}},{"id":"278a175e-5ce2-4eeb-8312-5145a1cb5f88","aPercentage":50,"type":"template","params":{"themeId":"gid://shopify/OnlineStoreTheme/185166496111","a":{"template":"templates/product.a-test-carrotseed.json","name":"product","suffix":"a-test-carrotseed"},"b":{"template":"templates/product.b-test-carrotseed.json","name":"product","suffix":"b-test-carrotseed"}}},{"id":"75b23942-a8a8-432b-a015-4a668d58a96c","aPercentage":50,"type":"template","params":{"themeId":"gid://shopify/OnlineStoreTheme/185166496111","a":{"template":"templates/product.a-test-cardamom.json","name":"product","suffix":"a-test-cardamom"},"b":{"template":"templates/product.b-test-cardamom.json","name":"product","suffix":"b-test-cardamom"}}},{"id":"3d5ae5df-842d-418e-ab84-205971d5680c","aPercentage":50,"type":"template","params":{"themeId":"gid://shopify/OnlineStoreTheme/185166496111","a":{"template":"templates/product.a-test-cinnamonleaf.json","name":"product","suffix":"a-test-cinnamonleaf"},"b":{"template":"templates/product.b-test-cinnamonleaf.json","name":"product","suffix":"b-test-cinnamonleaf"}}},{"id":"3c6b638a-c8f3-49b6-bb49-3845c0ecbe28","aPercentage":50,"type":"template","params":{"themeId":"gid://shopify/OnlineStoreTheme/185166496111","a":{"template":"templates/product.a-test-coriander.json","name":"product","suffix":"a-test-coriander"},"b":{"template":"templates/product.b-test-coriander.json","name":"product","suffix":"b-test-coriander"}}},{"id":"c92966d2-f5ff-4a2a-a13c-d6f4120ddcd1","aPercentage":50,"type":"template","params":{"themeId":"gid://shopify/OnlineStoreTheme/185166496111","a":{"template":"templates/product.a-test-emptyroll-onbottle.json","name":"product","suffix":"a-test-emptyroll-onbottle"},"b":{"template":"templates/product.b-test-emptyroll-onbottle.json","name":"product","suffix":"b-test-emptyroll-onbottle"}}},{"id":"a0d9106c-7fff-4e40-a72e-1efc56eb662d","aPercentage":50,"type":"template","params":{"themeId":"gid://shopify/OnlineStoreTheme/185166496111","a":{"template":"templates/product.a-test-fennelseed.json","name":"product","suffix":"a-test-fennelseed"},"b":{"template":"templates/product.b-test-fennelseed.json","name":"product","suffix":"b-test-fennelseed"}}},{"id":"895e1a10-bc15-4010-88f4-d12aea992271","aPercentage":50,"type":"template","params":{"themeId":"gid://shopify/OnlineStoreTheme/185166496111","a":{"template":"templates/product.a-test-hyssop.json","name":"product","suffix":"a-test-hyssop"},"b":{"template":"templates/product.b-test-hyssop.json","name":"product","suffix":"b-test-hyssop"}}},{"id":"8ee05d77-41bf-416e-a034-3786263ee5de","aPercentage":50,"type":"template","params":{"themeId":"gid://shopify/OnlineStoreTheme/185166496111","a":{"template":"templates/product.a-test-kidsdailykit.json","name":"product","suffix":"a-test-kidsdailykit"},"b":{"template":"templates/product.b-test-kidsdailykit.json","name":"product","suffix":"b-test-kidsdailykit"}}},{"id":"4f79f8a5-0955-41c9-a964-81ba6750eb83","aPercentage":50,"type":"template","params":{"themeId":"gid://shopify/OnlineStoreTheme/185166496111","a":{"template":"templates/product.a-test-limoncello.json","name":"product","suffix":"a-test-limoncello"},"b":{"template":"templates/product.b-test-limoncello.json","name":"product","suffix":"b-test-limoncello"}}},{"id":"7e42f7c9-748f-47f4-980b-180ca0be7100","aPercentage":50,"type":"template","params":{"themeId":"gid://shopify/OnlineStoreTheme/185166496111","a":{"template":"templates/product.a-test-naturallaundrybundle.json","name":"product","suffix":"a-test-naturallaundrybundle"},"b":{"template":"templates/product.b-test-naturallaundrybundle.json","name":"product","suffix":"b-test-naturallaundrybundle"}}}
348,{"id":"1688c811-75d2-4e2b-b42b-689ed4b332de","aPercentage":50,"type":"template","params":{"themeId":"gid://shopify/OnlineStoreTheme/185166496111","a":{"template":"templates/product.a-test-mindalive.json","name":"product","suffix":"a-test-mindalive"},"b":{"template":"templates/product.b-test-mindalive.json","name":"product","suffix":"b-test-mindalive"}}},{"id":"d39fabd1-613f-4280-900c-3a5f98b69b89","aPercentage":50,"type":"template","params":{"themeId":"gid://shopify/OnlineStoreTheme/185166496111","a":{"template":"templates/product.a-test-myrtle.json","name":"product","suffix":"a-test-myrtle"},"b":{"template":"templates/product.b-test-myrtle.json","name":"product","suffix":"b-test-myrtle"}}},{"id":"c28300e2-1001-4884-aab6-cdef1fc008af","aPercentage":50,"type":"template","params":{"themeId":"gid://shopify/OnlineStoreTheme/185166496111","a":{"template":"templates/product.a-test-organicesseoilkit4-pack.json","name":"product","suffix":"a-test-organicesseoilkit4-pack"},"b":{"template":"templates/product.b-test-organicesseoilkit4-pack.json","name":"product","suffix":"b-test-organicesseoilkit4-pack"}}},{"id":"9849f4e3-d14b-44d9-9020-9a6633b2641d","aPercentage":50,"type":"template","params":{"themeId":"gid://shopify/OnlineStoreTheme/185166496111","a":{"template":"templates/product.a-test-palosanto.json","name":"product","suffix":"a-test-palosanto"},"b":{"template":"templates/product.b-test-palosanto.json","name":"product","suffix":"b-test-palosanto"}}},{"id":"51da63c9-c90c-4130-8578-af6db9646844","aPercentage":50,"type":"template","params":{"themeId":"gid://shopify/OnlineStoreTheme/185166496111","a":{"template":"templates/product.a-test-purification.json","name":"product","suffix":"a-test-purification"},"b":{"template":"templates/product.b-test-purification.json","name":"product","suffix":"b-test-purification"}}},{"id":"3b22db87-72bd-43d7-b101-fe940e73a26e","aPercentage":50,"type":"template","params":{"themeId":"gid://shopify/OnlineStoreTheme/185166496111","a":{"template":"templates/product.a-test-summerscentskit.json","name":"product","suffix":"a-test-summerscentskit"},"b":{"template":"templates/product.b-test-summerscentskit.json","name":"product","suffix":"b-test-summerscentskit"}}},{"id":"d8a347fc-c9c4-4683-bd3d-3a0a5d789aac","aPercentage":50,"type":"template","params":{"themeId":"gid://shopify/OnlineStoreTheme/185166496111","a":{"template":"templates/product.a-test-vitexberry.json","name":"product","suffix":"a-test-vitexberry"},"b":{"template":"templates/product.b-test-vitexberry.json","name":"product","suffix":"b-test-vitexberry"}}},{"id":"7289a41d-0d8a-4ea5-a00a-a231b832ba93","aPercentage":50,"type":"template","params":{"themeId":"gid://shopify/OnlineStoreTheme/185166496111","a":{"template":"templates/product.a-test-warmcozy.json","name":"product","suffix":"a-test-warmcozy"},"b":{"template":"templates/product.b-test-warmcozy.json","name":"product","suffix":"b-test-warmcozy"}}}]') 349 ); 350</script>
350<!-- END app block --><!-- BEGIN app block: shopify://apps/xcloud-search-filter/blocks/cloudsearch_opt/8ddbd0bf-e311-492e-ab28-69d0ad268fac -->
350<script type="application/json" id="cloudsearch-settings">{"srp":"\/a\/search"}</script>
350<!-- END app block --><!-- BEGIN app block: shopify://apps/eg-auto-add-to-cart/blocks/app-embed/0f7d4f74-1e89-4820-aec4-6564d7e535d2 --> 351 352 353 354 355 356 357 358 359 360 361 362 363
363<script 364 async 365 type="text/javascript" 366 src="https://cdn.506.io/eg/script.js?shop=rocky-mountain-oils.myshopify.com&v=12" 367 ></script>
367 368 369 370 371 372 <meta id="easygift-shop" itemid="c2hvcF8kXzE3OTEwNjI1Njc=" content="{"isInstalled":true,"installedOn":"2023-08-12T00:15:59.986Z","appVersion":"3.0","subscriptionName":"Unlimited","cartAnalytics":true,"freeTrialEndsOn":null,"settings":{"reminderBannerStyle":{"position":{"horizontal":"right","vertical":"bottom"},"backgroundColor":"#FFFFFF","borderRadius":null,"padding":null,"headerFontSize":null,"subHeaderFontSize":null,"fontFamily":null,"primaryColor":"#484848","cssStyles":"","headerText":"Click here to reopen missed deals","subHeaderText":null,"showImage":true,"imageUrl":"https:\/\/cdn.506.io\/eg\/eg_notification_default_512x512.png","displayAfter":5,"closingMode":"doNotAutoClose","selfcloseAfter":5,"reshowBannerAfter":"everyNewSession"},"addedItemIdentifier":"_Gifted","ignoreOtherAppLineItems":null,"customVariantsInfoLifetimeMins":1440,"redirectPath":null,"ignoreNonStandardCartRequests":false,"bannerStyle":{"position":{"horizontal":"right","vertical":"bottom"},"backgroundColor":"#FFFFFF","borderRadius":null,"padding":null,"headerFontSize":null,"subHeaderFontSize":null,"fontFamily":null,"primaryColor":"#484848","cssStyles":""},"themePresetId":"0","notificationStyle":{"position":{"horizontal":"right","vertical":"bottom"},"backgroundColor":"#FFFFFF","borderRadius":null,"headerFontSize":null,"subHeaderFontSize":null,"padding":null,"fontFamily":null,"primaryColor":"#484848","duration":"3.0","cssStyles":"#aca-notifications-wrapper {\n display: block;\n right: 0;\n bottom: 0;\n position: fixed;\n z-index: 99999999;\n max-height: 100%;\n overflow: auto;\n}\n.aca-notification-container {\n display: flex;\n flex-direction: row;\n text-align: left;\n font-size: 16px;\n margin: 12px;\n padding: 8px;\n background-color: #FFFFFF;\n width: fit-content;\n box-shadow: rgb(170 170 170) 0px 0px 5px;\n border-radius: 8px;\n opacity: 0;\n transition: opacity 0.4s ease-in-out;\n}\n.aca-notification-container .aca-notification-image {\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 60px;\n min-width: 60px;\n height: 60px;\n width: 60px;\n background-color: #FFFFFF;\n margin: 8px;\n}\n.aca-notification-image img {\n display: block;\n max-width: 100%;\n max-height: 100%;\n width: auto;\n height: auto;\n border-radius: 6px;\n box-shadow: rgba(99, 115, 129, 0.29) 0px 0px 4px 1px;\n}\n.aca-notification-container .aca-notification-text {\n flex-grow: 1;\n margin: 8px;\n max-width: 260px;\n}\n.aca-notification-heading {\n font-size: 24px;\n margin: 0 0 0.3em 0;\n line-height: normal;\n word-break: break-word;\n line-height: 1.2;\n max-height: 3.6em;\n overflow: hidden;\n color: #484848;\n}\n.aca-notification-subheading {\n font-size: 18px;\n margin: 0;\n line-height: normal;\n word-break: break-word;\n line-height: 1.4;\n max-height: 5.6em;\n overflow: hidden;\n color: #484848;\n}\n@media screen and (max-width: 450px) {\n #aca-notifications-wrapper {\n left: 0;\n right: 0;\n }\n .aca-notification-container {\n width: auto;\n }\n.aca-notification-container .aca-notification-text {\n max-width: none;\n }\n}","hasCustomizations":false},"fetchCartData":false,"useLocalStorage":{"enabled":false,"expiryMinutes":null},"popupStyle":{"buttonTextColor":null,"backgroundColor":"#FFFFFF","borderRadius":null,"padding":null,"headerFontSize":null,"subHeaderFontSize":null,"bodyColor":null,"bodyFontSize":null,"priceShowZeroDecimals":true,"headerFontFamily":null,"bodyFontFamily":null,"primaryColor":"#E040AF","secondaryColor":"#484848","cssStyles":"#aca-modal {\n position: fixed;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n background: rgba(0, 0, 0, 0.5);\n z-index: 99999999;\n overflow-x: hidden;\n overflow-y: auto;\n display: block;\n}\n#aca-modal-wrapper {\n display: flex;\n align-items: center;\n width: 50%;\n height: auto;\n max-width: 800px;\n min-height: calc(100% - 60px);\n margin: 10px auto;\n}\n#aca-modal-container {\n position: relative;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n box-shadow: 0 0 1.5rem rgba(17, 17, 17, 0.7);\n width: 100%;\n padding: 10px;\n background-color: #FFFFFF;\n border-radius: 10px;\n}\n#aca-close-icon-container {\n position: absolute;\n top: 12px;\n right: 12px;\n width: 25px;\n display: none;\n}\n#aca-close-icon {\n stroke: #333333;\n}\n#aca-modal-custom-image-container {\n background-color: #FFFFFF;\n margin: 0.25em 0;\n}\n#aca-modal-custom-image-container img {\n display: block;\n min-width: 60px;\n min-height: 60px;\n max-width: 200px;\n max-height: 200px;\n width: auto;\n height: auto;\n}\n#aca-modal-headline {\n text-align: center;\n text-transform: none;\n letter-spacing: normal;\n margin: 0.5em 0;\n font-size: 30px;\n color: #484848;\n}\n#aca-modal-subheadline {\n text-align: center;\n font-weight: normal;\n margin: 0 0 0.5em 0;\n font-size: 14px;\n color: #484848;\n}\n#aca-products-container {\n display: flex;\n align-items: flex-start;\n justify-content: center;\n flex-wrap: wrap;\n width: 85%;\n}\n#aca-products-container .aca-product {\n text-align: center;\n margin: 10px;\n width: 200px;\n}\n.aca-product-image {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 150px;\n background-color: #FFFFFF;\n margin-bottom: 0.25em;\n}\n.aca-product-image img {\n display: block;\n max-width: 100%;\n max-height: 100%;\n width: auto;\n height: auto;\nborder-radius: 10px;\n}\n.aca-product-name, .aca-subscription-name {\n color: #333333;\n line-height: inherit;\n word-break: break-word;\n font-size: 16px;\n font-weight: bold;\n}\n.aca-product-variant-name {\n margin-top: 1em;\n color: #333333;\n line-height: inherit;\n word-break: break-word;\n font-size: 16px;\n}
372\n\/*\n.aca-product-name::after {\n content: \" - Oregano Essential Oil is also anti-inflammatory and may help relieve common aches and pain.\"; \/* Text you want to add before the price *\/\nfont-weight: normal;\nfont-size: 12px;\n}\n*\/\n.aca-product-price {\n color: #333333;\n line-height: inherit;\n font-size: 16px;\n}\n.aca-subscription-label {\n color: #333333;\n line-height: inherit;\n word-break: break-word;\n font-weight: 600;\n font-size: 16px;\n}\n.aca-product-dropdown {\n position: relative;\n display: flex;\n align-items: center;\n cursor: pointer;\n width: 100%;\n height: 42px;\n background-color: #FFFFFF;\n line-height: inherit;\n margin-bottom: 1em;\n}\n.aca-product-dropdown .dropdown-icon {\n position: absolute;\n right: 8px;\n height: 12px;\n width: 12px;\n fill: #E1E3E4;\n}\n.aca-product-dropdown select::before,\n.aca-product-dropdown select::after {\n box-sizing: border-box;\n}\nselect.aca-product-dropdown::-ms-expand {\n display: none;\n}\n.aca-product-dropdown select {\n box-sizing: border-box;\n background-color: transparent;\n border: none;\n margin: 0;\n cursor: inherit;\n line-height: inherit;\n outline: none;\n -moz-appearance: none;\n -webkit-appearance: none;\n appearance: none;\n background-image: none;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n z-index: 1;\n width: 100%;\n height: 100%;\n cursor: pointer;\n border: 1px solid #E1E3E4;\n border-radius: 2px;\n color: #333333;\n padding: 0 30px 0 10px;\n font-size: 15px;\n}\n.aca-product-button {\n border: none;\n cursor: pointer;\n width: 100%;\n min-height: 42px;\n word-break: break-word;\n padding: 8px 14px;\n background-color: #d63384;\n text-transform: uppercase;\n line-height: inherit;\n border: 1px solid transparent;\n border-radius: 2px;\n font-size: 14px;\n color: #FFFFFF;\n font-weight: bold;\n letter-spacing: 1.039px;\nborder-radius: 10px;\n}\n.aca-product-button.aca-product-out-of-stock-button {\n cursor: default;\n background-color: #FFFFFF;\n border: 1px solid #E040AF;\n color: #E040AF;\n}\n.aca-button-loader {\n display: block;\n border: 3px solid transparent;\n border-radius: 50%;\n border-top: 3px solid #FFFFFF;\n width: 20px;\n height: 20px;\n background: transparent;\n margin: 0 auto;\n -webkit-animation: aca-loader 0.5s linear infinite;\n animation: aca-loader 0.5s linear infinite;\n}\n@-webkit-keyframes aca-loader {\n 0% {\n -webkit-transform: rotate(0deg);\n }\n 100% {\n -webkit-transform: rotate(360deg);\n }\n}\n@keyframes aca-loader {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n.aca-button-tick {\n display: block;\n transform: rotate(45deg);\n -webkit-transform: rotate(45deg);\n height: 19px;\n width: 9px;\n margin: 0 auto;\n border-bottom: 3px solid #FFFFFF;\n border-right: 3px solid #FFFFFF;\n}\n.aca-button-cross \u003e svg {\n width: 22px;\n margin-bottom: -6px;\n}\n.aca-button-cross .button-cross-icon {\n stroke: #FFFFFF;\n}\n#aca-bottom-close {\n cursor: pointer;\n text-align: center;\n word-break: break-word;\n font-size: 14px;\n color: #E040AF;\n}\n@media screen and (min-width: 951px) and (max-width: 1200px) {\n #aca-products-container {\n width: 95%;\n padding: 20px 0;\n }\n #aca-products-container .aca-product {\n margin: 20px 3%;\n padding: 0;\n }\n}\n@media screen and (min-width: 951px) and (max-width: 1024px) {\n #aca-products-container .aca-product {\n margin: 20px 2%;\n }\n}\n@media screen and (max-width: 950px) {\n #aca-products-container {\n width: 95%;\n padding: 0;\n }\n #aca-products-container .aca-product {\n width: 45%;\n max-width: 200px;\n margin: 2.5%;\n }\n}\n@media screen and (min-width: 602px) and (max-width: 950px) {\n #aca-products-container .aca-product {\n margin: 4%;\n }\n}\n@media screen and (max-width: 767px) {\n #aca-modal-wrapper {\n width: 90%;\n }\n}\n@media screen and (max-width: 576px) {\n #aca-modal-container {\n padding: 23px 0 0;\n }\n #aca-close-icon-container {\n display: block;\n }\n #aca-bottom-close {\n margin: 10px;\n font-size: 14px;\n color: #E040AF;\n}\n #aca-modal-headline {\n margin: 10px 5%;\n font-size: 20px;\n color: #484848;\n}\n #aca-modal-subheadline {\n margin: 0 0 5px 0;\n font-size: 12px;\n color: #484848;\n}\n .aca-product-image {\n height: 250px;\n margin: 0;\n }\n .aca-product-name, .aca-subscription-name, .aca-product-variant-name {\n font-size: 16px;\n margin: 5px 0;\n font-weight: bold;\n }\n .aca-product-dropdown select, .aca-product-button, .aca-subscription-label {\n font-size: 12px;\n }\n .aca-product-dropdown {\n height: 30px;\n margin-bottom: 7px;\n }\n .aca-product-button {\n min-height: 30px;\n padding: 4px;\n margin-bottom: 7px;\n }\n .aca-button-loader {\n border: 2px solid transparent;\n border-top: 2px solid #FFFFFF;\n width: 12px;\n height: 12px;\n }\n .aca-button-tick {\n height: 12px;\n width: 6px;\n border-bottom: 2px solid #FFFFFF;\n border-right: 2px solid #FFFFFF;\n }\n .aca-button-cross \u003e svg {\n width: 15px;\n margin-bottom: -4px;\n }\n .aca-button-cross .button-cross-icon {\n stroke: #FFFFFF;\n }\n}","hasCustomizations":false,"addButtonText":"Add to Order","
372dismissButtonText":"No Thank You","outOfStockButtonText":"Out of Stock","imageUrl":null,"showProductLink":false,"subscriptionLabel":"Subscription Plan","closeModalOutsideClick":true},"refreshAfterBannerClick":false,"disableReapplyRules":false,"disableReloadOnFailedAddition":false,"autoReloadCartPage":false,"ajaxRedirectPath":null,"allowSimultaneousRequests":false,"applyRulesOnCheckout":false,"enableCartCtrlOverrides":true,"customRedirectFromCart":null,"scriptSettings":{"branding":{"show":false,"removalRequestSent":null},"productPageRedirection":{"enabled":false,"products":[],"redirectionURL":"\/"},"debugging":{"enabled":false,"enabledOn":null,"stringifyObj":false},"reApplyValueBasedRulesInCart":false,"disableRedirectAfterFormSubmit":false,"fetchProductInfoFromSavedDomain":false,"enableBuyNowInterceptions":false,"removeProductsAddedFromExpiredRules":false,"useFinalPrice":false,"useFinalPriceGetEntireCart":false,"hideGiftedPropertyText":false,"fetchCartDataBeforeRequest":false,"removeEGPropertyFromSplitActionLineItems":false,"hideAlertsOnFrontend":false,"decodePayload":false,"customCSS":null,"delayUpdates":2000},"promoCodeMessageStyle":{"message":"Free gift added!"},"egDiscount":{"cartValueStopCollectionCheck":false},"accessToEnterprise":true},"translations":null,"defaultLocale":"en","shopDomain":"www.rockymountainoils.com"}"> 373 374
375<script defer> 376 (async function() { 377 try { 378 379 const blockVersion = "v3" 380 if (blockVersion != "v3") { 381 return 382 } 383 384 let metaErrorFlag = false; 385 if (metaErrorFlag) { 386 return 387 } 388 389 // Parse metafields as JSON 390 const metafields = {"easygift-rule-669038cca3af096d5b96e2ac":{"schedule":{"enabled":false,"starts":null,"ends":null},"trigger":{"productTags":{"targets":[],"sellingPlan":null},"hybrid":null,"promoCode":null,"promoCodeDiscount":null,"type":"productsInclude","minCartValue":null,"hasUpperCartValue":false,"upperCartValue":null,"products":[{"variantId":44111360459074,"sellingPlans":[]}],"collections":[],"condition":"quantity","conditionMin":1,"conditionMax":null,"collectionSellingPlanType":null,"cartValueExcludedVariants":[]},"action":{"notification":{"enabled":false,"headerText":null,"subHeaderText":null,"showImage":false,"imageUrl":""},"discount":{"easygiftAppDiscount":false,"discountType":null,"issue":null,"type":"shpPromo","id":"gid:\/\/shopify\/DiscountCodeNode\/1426321899842","code":"LAVENDER4YOU","title":"LAVENDER4YOU","createdByEasyGift":true,"value":100},"popupOptions":{"showVariantsSeparately":false,"headline":"Congratulations! You've unlocked FREE Lavender!","subHeadline":"Add to order now! Discount code would be applied at checkout!","showItemsPrice":false,"popupDismissable":false,"subscriptionLabel":"Subscription Plan","imageUrl":null,"persistPopup":false,"rewardQuantity":1,"showDiscountedPrice":false,"hideOOSItems":false},"banner":{"enabled":false,"headerText":null,"subHeaderText":null,"showImage":false,"imageUrl":null,"displayAfter":"5","closingMode":"doNotAutoClose","selfcloseAfter":"5","reshowBannerAfter":"everyNewSession","redirectLink":null},"showPromoCodeMessage":false,"type":"offerToCustomer","products":[{"id":"8025540854082","title":"Lavender Essential Oil","handle":"lavender-essential-oil","variants":[{"id":"44111360459074","alerts":[],"showVariantName":false}]}],"limit":1,"preventProductRemoval":false,"addAvailableProducts":false},"targeting":{"link":{"destination":"product","data":{"availablePublicationCount":14,"createdAt":"2022-11-28T12:32:46Z","descriptionHtml":"\u003cp\u003eExperience deeper levels of peace and tranquility with sweet-smelling Lavender Essential Oil. With a gentle floral aroma thatâs earthy and grounding, lavender is one of the most popular essential oils due to its holistic healing properties and natural medicinal benefits.\u003c\/p\u003e\n\u003cp\u003eLavender oil has been used for thousands of years in traditional medicine and herbal remedies as a rich source of anti-inflammatory compounds that \u003ca href=\"https:\/\/www.ncbi.nlm.nih.gov\/pmc\/articles\/PMC3612440\/\" target=\"_blank\"\u003ehelp treat chronic pain\u003c\/a\u003e. Itâs also used to support sleep, lower stress levels, and provide relief from skin irritations like insect bites. It also has antifungal and antibacterial properties to help prevent infection.\u003c\/p\u003e\n\u003cp\u003eThe medium-strength aroma of lavender oil is floral, herbaceous, sweet, and slightly woody. Rocky Mountain Oilsâ Lavender oil is steam-distilled from the beautiful flowers of the \u003ci\u003eLavandula angustifolia\u003c\/i\u003e plant, sourced directly from the verdant French countryside.\u003c\/p\u003e\n\u003cp\u003eTry lavender oil to balance mood swings, reduce anxiety, and create serenity whenever you need a break from lifeâs daily stressors. Use for massage oils, aromatherapy, DIY skincare and haircare, candle-making, meditation, homemade cleaners, and more.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"https:\/\/www.rockymountainoils.com\/blogs\/essential-oil-basics\/unlock-the-secrets-of-phoenix-s-favorite-single-oils\" target=\"_blank\" title=\"Unlock the Secrets of Phoenixâs Favorite Single Oils!\" rel=\"noopener noreferrer\"\u003e\"Learn why Lavender Essential Oil is Michael \u0026amp; Phoenix's favorite product\"\u003c\/a\u003e\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"https:\/\/www.rockymountainoils.com\/pages\/lavender-oil-benefits-uses\" target=\"_blank\"\u003eLearn More About Lavender\u003c\/a\u003e\u003c\/p\u003e\n\u003ccenter\u003e\u003cdiv dir=\"ltr\"\u003e\u003ciframe style=\"aspect-ratio: 16\/9; width: 100%;\" width=\"716\" height=\"403\" src=\"https:\/\/www.youtube.com\/embed\/w0eeVZLYmGE\" title=\"Lavender Essential Oil Review from RMO's Founder, Phoenix\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" allowfullscreen\u003e\u003c\/iframe\u003e\u003c\/div\u003e\u003c\/center\u003e\n\u003chr\u003e\n\u003cp dir=\"ltr\"\u003e\u003cem\u003eThe statements contained herein have not been evaluated by the Food and Drug Administration. Neither Rocky Mountain Oils® nor its products are intended for the purpose of diagnosing, treating, curing, or preventing any disease. If you are pregnant, nursing, taking medication, or have a medical condition, consult your physician before using these products.\u003c\/em\u003e\u003c\/p\u003e","handle":"lavender-essential-oil","hasOnlyDefaultVariant":false,"id":"gid:\/\/shopify\/Product\/8025540854082","images":[{"id":"gid:\/\/shopify\/ProductImage\/43452351381826","altText":"Lavender Essential Oil - 15ml - Rocky Mountain Oils","originalSrc":"https:\/\/cdn.shopify.com\/s\/files\/1\/0679\/7908\/4098\/files\/lavender-essential-oil-15ml-1.jpg?v=1712608578"},{"id":"gid:\/\/shopify\/ProductImage\/41877240217922","altText":"Lavender Essential Oil Back","originalSrc":"https:\/\/cdn.shopify.com\/s\/files\/1\/0679\/7908\/4098\/files\/lavender-essential-oil-back.png?v=1701184849"},{"id":"gid:\/\/shopify\/ProductImage\/41877239988546","altText":"Lavender Essential Oil Spread","originalSrc":"https:\/\/cdn.shopify.com\/s\/files\/1\/0679\/7908\/4098\/files\/lavender-essential-oil-spread.png?v=1701184849"},{"id":"gid:\/\/shopify\/ProductImage\/41877240021314","altText":"Lavender Essential Oil Top","originalSrc":"https:\/\/cdn.shopify.com\/s\/files\/1\/0679\/7908\/4098\/files\/lavender-essential-oil-top.png?v=1701184849"},{"id":"gid:\/\/shopify\/ProductImage\/44365299745090","altText":"Lavender Essential Oil - 4oz - Rocky Mountain Oils","originalSrc":"https:\/\/cdn.shopify.com\/s\/files\/1\/0679\/7908\/4098\/files\/lavender-essential-oil-4oz-3.jpg?v=1710350671"}],"options":[{"id":"gid:\/\/shopify\/ProductOption\/10196688830786","name":"Size","position":1,"values":["15ml","4oz","5ml"]}],"productType":"Essential Oil","publishedAt":"2022-11-28T12:32:46Z","tags":["4oz","Aroma Artisan - 2023","bath care","Best Sellers","Build A Box","Crowd's Favorites - 2023","Floral","Immunity","Oils","Outdoor","Pain","Respiratory","Serenity Seeker - 2023","Singles","Skin","Skin Care","Spring Oils","Stress","summer oils","Trending","Valentine Day","Wholesale Oils"],"templateSuffix":"","title":"Lavender Essential Oil","totalInventory":3874,"totalVariants":3,"tracksInventory":true,"updatedAt":"2024-0
3907-11T13:24:28Z","variants":[{"availableForSale":true,"barcode":"053176181462","compareAtPrice":null,"createdAt":"2022-11-28T12:32:46Z","displayName":"Lavender Essential Oil - 15ml","fulfillmentService":{"id":"gid:\/\/shopify\/FulfillmentService\/manual","inventoryManagement":false,"productBased":true,"serviceName":"Manual","type":"MANUAL"},"id":"gid:\/\/shopify\/ProductVariant\/44111360459074","image":{"id":"gid:\/\/shopify\/ProductImage\/43452351381826","altText":"Lavender Essential Oil - 15ml - Rocky Mountain Oils","originalSrc":"https:\/\/cdn.shopify.com\/s\/files\/1\/0679\/7908\/4098\/files\/lavender-essential-oil-15ml-1.jpg?v=1712608578"},"inventoryItem":{"__typename":"InventoryItem","id":"gid:\/\/shopify\/InventoryItem\/46159406104898"},"inventoryManagement":"SHOPIFY","inventoryPolicy":"DENY","inventoryQuantity":3616,"position":1,"price":"20.95","product":{"__typename":"Product","id":"gid:\/\/shopify\/Product\/8025540854082"},"requiresShipping":true,"selectedOptions":[{"__typename":"SelectedOption","value":"15ml"}],"sku":"LAVGRE-S15","taxable":true,"title":"15ml","updatedAt":"2024-07-11T13:24:28Z","weight":45,"weightUnit":"GRAMS"},{"availableForSale":true,"barcode":"053176183145","compareAtPrice":null,"createdAt":"2024-05-16T19:28:08Z","displayName":"Lavender Essential Oil - 4oz","fulfillmentService":{"id":"gid:\/\/shopify\/FulfillmentService\/manual","inventoryManagement":false,"productBased":true,"serviceName":"Manual","type":"MANUAL"},"id":"gid:\/\/shopify\/ProductVariant\/48687729082690","image":{"id":"gid:\/\/shopify\/ProductImage\/44365299745090","altText":"Lavender Essential Oil - 4oz - Rocky Mountain Oils","originalSrc":"https:\/\/cdn.shopify.com\/s\/files\/1\/0679\/7908\/4098\/files\/lavender-essential-oil-4oz-3.jpg?v=1710350671"},"inventoryItem":{"__typename":"InventoryItem","id":"gid:\/\/shopify\/InventoryItem\/50729117122882"},"inventoryManagement":"SHOPIFY","inventoryPolicy":"DENY","inventoryQuantity":40,"position":2,"price":"49.95","product":{"__typename":"Product","id":"gid:\/\/shopify\/Product\/8025540854082"},"requiresShipping":true,"selectedOptions":[{"__typename":"SelectedOption","value":"4oz"}],"sku":"LAVGRE-4OZ","taxable":true,"title":"4oz","updatedAt":"2024-07-11T01:25:03Z","weight":4,"weightUnit":"OUNCES"},{"availableForSale":true,"barcode":"053176181776","compareAtPrice":null,"createdAt":"2024-05-16T19:28:08Z","displayName":"Lavender Essential Oil - 5ml","fulfillmentService":{"id":"gid:\/\/shopify\/FulfillmentService\/manual","inventoryManagement":false,"productBased":true,"serviceName":"Manual","type":"MANUAL"},"id":"gid:\/\/shopify\/ProductVariant\/48687729115458","image":{"id":"gid:\/\/shopify\/ProductImage\/40133962531138","altText":"Lavender Essential Oil - 5ml","originalSrc":"https:\/\/cdn.shopify.com\/s\/files\/1\/0679\/7908\/4098\/products\/Lavender-Essential-Oil-1.png?v=1671122677"},"inventoryItem":{"__typename":"InventoryItem","id":"gid:\/\/shopify\/InventoryItem\/50729117155650"},"inventoryManagement":"SHOPIFY","inventoryPolicy":"DENY","inventoryQuantity":218,"position":3,"price":"11.95","product":{"__typename":"Product","id":"gid:\/\/shopify\/Product\/8025540854082"},"requiresShipping":true,"selectedOptions":[{"__typename":"SelectedOption","value":"5ml"}],"sku":"LAVGRE-S5","taxable":true,"title":"5ml","updatedAt":"2024-07-07T03:00:45Z","weight":28,"weightUnit":"GRAMS"}],"vendor":"Rocky Mountain Oils","status":"ACTIVE"},"cookieLifetime":1},"additionalCriteria":{"geo":{"include":[],"exclude":[]},"type":null,"customerTags":[],"customerTagsExcluded":[],"customerId":[],"orderCount":null,"hasOrderCountMax":false,"orderCountMax":null,"totalSpent":null,"hasTotalSpentMax":false,"totalSpentMax":null},"type":"link"},"settings":{"worksInReverse":true,"runsOncePerSession":false,"preventAddedItemPurchase":false,"showReminderBanner":false},"testMode":false,"_id":"669038cca3af096d5b96e2ac","name":"LAVENDER4YOU","active":true,"translations":null},"easygift-rule-66a78b1e132c2fcd6de8ca93":{"schedule":{"enabled":false,"starts":null,"ends":null},"trigger":{"productTags":{"targets":[],"collectionInfo":null,"sellingPlan":null},"promoCode":null,"promoCodeDiscount":null,"type":"cartValue","minCartValue":50,"hasUpperCartValue":false,"upperCartValue":null,"products":[],"collections":[],"condition":null,"conditionMin":null,"conditionMax":null,"collectionSellingPlanType":null,"cartValueExcludedVariants":[]},"action":{"notification":{"enabled":false,"headerText":null,"subHeaderText":null,"showImage":false,"imageUrl":""},"discount":{"type":"shpPromo","code":"CARDIFFUSER50","id":"gid:\/\/shopify\/DiscountCodeNode\/1426536956226","createdByEasyGift":false,"easygiftAppDiscount":false,"value":null,"discountType":null,"title":"CARDIFFUSER50","issue":null},"popupOptions":{"showVariantsSeparately":false,"headline":"Congratulations! You've unlocked FREE Hanging Car Diffuser!","subHeadline":"Add to order now!","
390showItemsPrice":false,"popupDismissable":false,"subscriptionLabel":"Subscription Plan","imageUrl":null,"persistPopup":false,"rewardQuantity":1,"showDiscountedPrice":false,"hideOOSItems":false},"banner":{"enabled":false,"headerText":null,"subHeaderText":null,"showImage":false,"imageUrl":null,"displayAfter":"5","closingMode":"doNotAutoClose","selfcloseAfter":"5","reshowBannerAfter":"everyNewSession","redirectLink":null},"showPromoCodeMessage":false,"type":"offerToCustomer","products":[{"handle":"aromatherapy-hanging-car-diffuser","title":"Aromatherapy Hanging Car Diffuser","id":"8047238250818","gid":"gid:\/\/shopify\/Product\/8047238250818","hasOnlyDefaultVariant":false,"variants":[{"title":"Default Title","displayName":"Aromatherapy Hanging Car Diffuser - Default Title","id":"49116053209410","gid":"gid:\/\/shopify\/ProductVariant\/49116053209410","showVariantName":false,"alerts":[]}]}],"limit":1,"preventProductRemoval":false,"addAvailableProducts":false},"targeting":{"link":{"destination":"home","data":null,"cookieLifetime":1},"testMode":{"testCount":0,"lastTestedAt":null,"currentNonce":null,"lastTestUrl":null,"lastTokenExpiresAt":null},"additionalCriteria":{"geo":{"include":[],"exclude":[]},"type":null,"customerTags":[],"customerTagsExcluded":[],"customerId":[],"orderCount":null,"hasOrderCountMax":false,"orderCountMax":null,"totalSpent":null,"hasTotalSpentMax":false,"totalSpentMax":null},"type":"link"},"settings":{"worksInReverse":true,"runsOncePerSession":false,"preventAddedItemPurchase":false,"showReminderBanner":false},"translations":null,"testMode":false,"_id":"66a78b1e132c2fcd6de8ca93","name":"CARDIFFUSER50","store":"64b6d3cb32a7338aa9b60f8a","shop":"rocky-mountain-oils","active":true,"createdAt":"2024-07-29T12:29:18.474Z","updatedAt":"2026-01-09T18:28:15.480Z","__v":0},"easygift-rule-6706df0b2983c7ad262c698d":{"schedule":{"enabled":false,"starts":null,"ends":null},"trigger":{"productTags":{"targets":[],"sellingPlan":null},"hybrid":null,"promoCode":null,"promoCodeDiscount":null,"type":"productsInclude","minCartValue":null,"upperCartValue":null,"products":[{"variantId":48633909543234,"sellingPlans":[]}],"collections":[],"condition":"quantity","conditionMin":1,"conditionMax":null,"collectionSellingPlanType":null,"cartValueExcludedVariants":[]},"action":{"notification":{"enabled":false,"headerText":null,"subHeaderText":null,"showImage":false,"imageUrl":""},"discount":{"easygiftAppDiscount":false,"discountType":"percentage","type":"shpAutomatic","title":"Massage Oil 25% OFF","id":"gid:\/\/shopify\/DiscountAutomaticNode\/1638617940335","createdByEasyGift":true,"value":25,"issue":null,"code":null},"popupOptions":{"showVariantsSeparately":false,"headline":"Congratulations! You've earned 1 Massage Oil for 25% OFF!","subHeadline":"Click Add to Order Now!","showItemsPrice":false,"popupDismissable":true,"imageUrl":null,"persistPopup":false,"rewardQuantity":1,"showDiscountedPrice":true,"hideOOSItems":true},"banner":{"enabled":false,"headerText":null,"subHeaderText":null,"showImage":false,"imageUrl":null,"displayAfter":"5","closingMode":"doNotAutoClose","selfcloseAfter":"5","reshowBannerAfter":"everyNewSession","redirectLink":null},"showPromoCodeMessage":false,"type":"offerToCustomer","products":[{"id":"9064111997250","title":"Lavender Massage Oil","handle":"lavender-massage-oil","variants":[{"id":"51879169327471","alerts":[],"showVariantName":false}]},{"id":"9064125530434","title":"Spearmint Massage Oil","handle":"spearmint-massage-oil","variants":[{"id":"51879186202991","alerts":[],"showVariantName":false}]},{"id":"9064137720130","title":"True Blue Massage Oil","handle":"true-blue-massage-oil","variants":[{"id":"51879166181743","alerts":[],"showVariantName":false}]}],"limit":1,"preventProductRemoval":false,"addAvailableProducts":false},"targeting":{"link":{"destination":null,"data":null,"cookieLifetime":14},"additionalCriteria":{"geo":{"include":[],"exclude":[]},"type":null,"customerTags":[],"customerTagsExcluded":[],"customerId":[],"orderCount":null,"hasOrderCountMax":false,"orderCountMax":null,"totalSpent":null,"hasTotalSpentMax":false,"totalSpentMax":null},"type":"all"},"settings":{"worksInReverse":true,"runsOncePerSession":false,"preventAddedItemPurchase":false,"showReminderBanner":false},"testMode":false,"_id":"6706df0b2983c7ad262c698d","name":"Massage Oil 25% OFF","active":true,"translations":null},"easygift-rule-673bb17f9424c4723df30a54":{"schedule":{"enabled":false,"starts":null,"ends":null},"trigger":{"productTags":{"targets":[],"collectionInfo":null,"sellingPlan":null},"promoCode":null,"promoCodeDiscount":null,"type":"collection","minCartValue":null,"hasUpperCartValue":false,"upperCartValue":null,"products":[],"collections":[{"alerts":[],"name":"Upsell Spray Head","id":630636118383,"gid":"gid:\/\/shopify\/Collection\/630636118383","handle":"upsell-spray-head","_id":"673bb3d3cae6b04d75154916"}
390],"condition":null,"conditionMin":null,"conditionMax":null,"collectionSellingPlanType":null,"cartValueExcludedVariants":[]},"action":{"notification":{"enabled":false,"headerText":null,"subHeaderText":null,"showImage":false,"imageUrl":""},"discount":{"easygiftAppDiscount":false,"type":null,"id":null,"title":null,"createdByEasyGift":false,"code":null,"issue":null,"discountType":null,"value":null},"popupOptions":{"showVariantsSeparately":false,"headline":"Customers who bought 15ml Essential Oils also bought:","subHeadline":null,"showItemsPrice":true,"popupDismissable":true,"subscriptionLabel":"Subscription Plan","imageUrl":null,"persistPopup":false,"rewardQuantity":1,"showDiscountedPrice":false,"hideOOSItems":false},"banner":{"enabled":false,"headerText":null,"subHeaderText":null,"showImage":false,"imageUrl":null,"displayAfter":"5","closingMode":"doNotAutoClose","selfcloseAfter":"5","reshowBannerAfter":"everyNewSession","redirectLink":null},"showPromoCodeMessage":false,"type":"offerToCustomer","products":[{"handle":"spray-head-essential-oils","title":"Spray Head For Essential Oil Bottles","id":"8376809226562","gid":"gid:\/\/shopify\/Product\/8376809226562","hasOnlyDefaultVariant":true,"variants":[{"title":"Default Title","displayName":"Spray Head For Essential Oil Bottles - Default Title","id":"45318592758082","gid":"gid:\/\/shopify\/ProductVariant\/45318592758082","showVariantName":false,"alerts":[]}]}],"limit":1,"preventProductRemoval":false,"addAvailableProducts":false},"targeting":{"link":{"destination":null,"data":null,"cookieLifetime":14},"testMode":{"testCount":0,"lastTestedAt":null,"currentNonce":null,"lastTestUrl":null,"lastTokenExpiresAt":null},"additionalCriteria":{"geo":{"include":[],"exclude":[]},"type":null,"customerTags":[],"customerTagsExcluded":[],"customerId":[],"orderCount":null,"hasOrderCountMax":false,"orderCountMax":null,"totalSpent":null,"hasTotalSpentMax":false,"totalSpentMax":null},"type":"all"},"settings":{"worksInReverse":false,"runsOncePerSession":false,"preventAddedItemPurchase":false,"showReminderBanner":false},"translations":null,"testMode":false,"_id":"673bb17f9424c4723df30a54","name":"Add Spray Head","store":"64b6d3cb32a7338aa9b60f8a","shop":"rocky-mountain-oils","active":true,"createdAt":"2024-11-18T21:28:31.543Z","updatedAt":"2026-02-05T12:38:30.400Z","__v":0},"easygift-rule-678829a447474ddda010c00e":{"schedule":{"enabled":false,"starts":null,"ends":null},"trigger":{"productTags":{"targets":[],"sellingPlan":null},"hybrid":null,"promoCode":null,"promoCodeDiscount":null,"type":"productsInclude","minCartValue":null,"hasUpperCartValue":false,"upperCartValue":null,"products":[{"variantId":44111529771330,"sellingPlans":[]},{"variantId":44276013269314,"sellingPlans":[]},{"variantId":47468641616194,"sellingPlans":[]}],"collections":[],"condition":"quantity","conditionMin":1,"conditionMax":null,"collectionSellingPlanType":null,"cartValueExcludedVariants":[]},"action":{"notification":{"enabled":false,"headerText":null,"subHeaderText":null,"showImage":false,"imageUrl":""},"discount":{"easygiftAppDiscount":false,"type":null,"id":null,"title":null,"createdByEasyGift":false,"code":null,"issue":null,"discountType":null,"value":null},"popupOptions":{"showVariantsSeparately":false,"headline":"Using Sacred Frankincense for your skin care routine? Try combining it with our Mountain Rain Facial Cleanser!","subHeadline":null,"showItemsPrice":true,"popupDismissable":true,"subscriptionLabel":"Subscription Plan","imageUrl":null,"persistPopup":false,"rewardQuantity":1,"showDiscountedPrice":false,"hideOOSItems":false},"banner":{"enabled":false,"headerText":null,"subHeaderText":null,"showImage":false,"imageUrl":null,"displayAfter":"5","closingMode":"doNotAutoClose","selfcloseAfter":"5","reshowBannerAfter":"everyNewSession","redirectLink":null},"showPromoCodeMessage":false,"type":"offerToCustomer","products":[{"id":"8896792625474","title":"Mountain Rain Facial Cleanser","handle":"mountain-rain-facial-cleanser","variants":[{"id":"47363190030658","alerts":[],"showVariantName":false}]}
390],"limit":1,"preventProductRemoval":false,"addAvailableProducts":false},"targeting":{"link":{"destination":null,"data":null,"cookieLifetime":14},"additionalCriteria":{"geo":{"include":[],"exclude":[]},"type":null,"customerTags":[],"customerTagsExcluded":[],"customerId":[],"orderCount":null,"hasOrderCountMax":false,"orderCountMax":null,"totalSpent":null,"hasTotalSpentMax":false,"totalSpentMax":null},"type":"all"},"settings":{"worksInReverse":true,"runsOncePerSession":false,"preventAddedItemPurchase":false,"showReminderBanner":false},"translations":null,"testMode":false,"_id":"678829a447474ddda010c00e","name":"Sacred Frankincense and Mountain Rain Facial Cleanser","active":true},"easygift-rule-6952c65cb263ac5ab8b39a7c":{"schedule":{"enabled":false,"starts":null,"ends":null},"trigger":{"productTags":{"targets":[],"sellingPlan":null},"hybrid":null,"promoCode":null,"promoCodeDiscount":null,"type":"productsInclude","minCartValue":null,"hasUpperCartValue":false,"upperCartValue":null,"products":[{"variantId":47158794846530,"sellingPlans":[]}],"collections":[],"condition":"quantity","conditionMin":1,"conditionMax":null,"collectionSellingPlanType":null,"cartValueExcludedVariants":[]},"action":{"notification":{"enabled":false,"headerText":null,"subHeaderText":null,"showImage":false,"imageUrl":""},"discount":{"easygiftAppDiscount":false,"type":null,"id":null,"title":null,"createdByEasyGift":false,"code":null,"issue":null,"discountType":null,"value":null},"popupOptions":{"headline":"Customers who bought 16oz Spray Bottle also bought:","subHeadline":null,"showItemsPrice":true,"showVariantsSeparately":false,"popupDismissable":true,"imageUrl":null,"persistPopup":false,"rewardQuantity":1,"showDiscountedPrice":false,"hideOOSItems":true},"banner":{"enabled":false,"headerText":null,"subHeaderText":null,"showImage":false,"imageUrl":null,"displayAfter":"5","closingMode":"doNotAutoClose","selfcloseAfter":"5","reshowBannerAfter":"everyNewSession","redirectLink":null},"showPromoCodeMessage":false,"type":"offerToCustomer","products":[{"id":"8870795575618","title":"Silicone Sleeve for 16oz Bottle","handle":"silicone-sleeve-for-16oz-bottle","variants":[{"id":"47158783672642","alerts":[],"showVariantName":false},{"id":"47158783705410","alerts":[],"showVariantName":false},{"id":"47158783738178","alerts":[],"showVariantName":false},{"id":"47158783770946","alerts":[],"showVariantName":false}]}],"limit":1,"preventProductRemoval":false,"addAvailableProducts":false},"targeting":{"link":{"destination":null,"data":null,"cookieLifetime":14},"additionalCriteria":{"geo":{"include":[],"exclude":[]},"type":null,"customerTags":[],"customerTagsExcluded":[],"customerId":[],"orderCount":null,"hasOrderCountMax":false,"orderCountMax":null,"totalSpent":null,"hasTotalSpentMax":false,"totalSpentMax":null},"type":"all"},"settings":{"worksInReverse":true,"runsOncePerSession":false,"preventAddedItemPurchase":false,"showReminderBanner":false},"testMode":false,"_id":"6952c65cb263ac5ab8b39a7c","name":"16oz Spray Bottle and 16oz Sleeve","active":true,"translations":null}}; 391 392 // Process metafields in JavaScript 393 let savedRulesArray = []; 394 for (const [key, value] of Object.entries(metafields)) { 395 if (value) { 396 for (const prop in value) { 397 // avoiding Object.Keys for performance gain -- no need to make an array of keys. 398 savedRulesArray.push(value); 399 break; 400 } 401 } 402 } 403 404 const metaTag = document.createElement('meta'); 405 metaTag.id = 'easygift-rules'; 406 metaTag.content = JSON.stringify(savedRulesArray); 407 metaTag.setAttribute('itemid', 'cnVsZXNfJF8xNzkxMDYyNTY3'); 408 409 document.head.appendChild(metaTag); 410 } catch (err) { 411 412 } 413 })(); 414</script>
414 415 416 417
417<script 418 type="text/javascript" 419 defer 420 > 421 422 (function () { 423 try { 424 window.EG_INFO = window.EG_INFO || {}; 425 var shopInfo = {"isInstalled":true,"installedOn":"2023-08-12T00:15:59.986Z","appVersion":"3.0","subscriptionName":"Unlimited","cartAnalytics":true,"freeTrialEndsOn":null,"settings":{"reminderBannerStyle":{"position":{"horizontal":"right","vertical":"bottom"},"backgroundColor":"#FFFFFF","borderRadius":null,"padding":null,"headerFontSize":null,"subHeaderFontSize":null,"fontFamily":null,"primaryColor":"#484848","cssStyles":"","headerText":"Click here to reopen missed deals","subHeaderText":null,"showImage":true,"imageUrl":"https:\/\/cdn.506.io\/eg\/eg_notification_default_512x512.png","displayAfter":5,"closingMode":"doNotAutoClose","selfcloseAfter":5,"reshowBannerAfter":"everyNewSession"},"addedItemIdentifier":"_Gifted","ignoreOtherAppLineItems":null,"customVariantsInfoLifetimeMins":1440,"redirectPath":null,"ignoreNonStandardCartRequests":false,"bannerStyle":{"position":{"horizontal":"right","vertical":"bottom"},"backgroundColor":"#FFFFFF","borderRadius":null,"padding":null,"headerFontSize":null,"subHeaderFontSize":null,"fontFamily":null,"primaryColor":"#484848","cssStyles":""},"themePresetId":"0","notificationStyle":{"position":{"horizontal":"right","vertical":"bottom"},"backgroundColor":"#FFFFFF","borderRadius":null,"headerFontSize":null,"subHeaderFontSize":null,"padding":null,"fontFamily":null,"primaryColor":"#484848","duration":"3.0","cssStyles":"#aca-notifications-wrapper {\n display: block;\n right: 0;\n bottom: 0;\n position: fixed;\n z-index: 99999999;\n max-height: 100%;\n overflow: auto;\n}\n.aca-notification-container {\n display: flex;\n flex-direction: row;\n text-align: left;\n font-size: 16px;\n margin: 12px;\n padding: 8px;\n background-color: #FFFFFF;\n width: fit-content;\n box-shadow: rgb(170 170 170) 0px 0px 5px;\n border-radius: 8px;\n opacity: 0;\n transition: opacity 0.4s ease-in-out;\n}\n.aca-notification-container .aca-notification-image {\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 60px;\n min-width: 60px;\n height: 60px;\n width: 60px;\n background-color: #FFFFFF;\n margin: 8px;\n}\n.aca-notification-image img {\n display: block;\n max-width: 100%;\n max-height: 100%;\n width: auto;\n height: auto;\n border-radius: 6px;\n box-shadow: rgba(99, 115, 129, 0.29) 0px 0px 4px 1px;\n}\n.aca-notification-container .aca-notification-text {\n flex-grow: 1;\n margin: 8px;\n max-width: 260px;\n}\n.aca-notification-heading {\n font-size: 24px;\n margin: 0 0 0.3em 0;\n line-height: normal;\n word-break: break-word;\n line-height: 1.2;\n max-height: 3.6em;\n overflow: hidden;\n color: #484848;\n}\n.aca-notification-subheading {\n font-size: 18px;\n margin: 0;\n line-height: normal;\n word-break: break-word;\n line-height: 1.4;\n max-height: 5.6em;\n overflow: hidden;\n color: #484848;\n}\n@media screen and (max-width: 450px) {\n #aca-notifications-wrapper {\n left: 0;\n right: 0;\n }\n .aca-notification-container {\n width: auto;\n }\n.aca-notification-container .aca-notification-text {\n max-width: none;\n }\n}","hasCustomizations":false},"fetchCartData":false,"useLocalStorage":{"enabled":false,"expiryMinutes":null},"popupStyle":{"buttonTextColor":null,"backgroundColor":"#FFFFFF","borderRadius":null,"padding":null,"headerFontSize":null,"subHeaderFontSize":null,"bodyColor":null,"bodyFontSize":null,"priceShowZeroDecimals":true,"headerFontFamily":null,"bodyFontFamily":null,"primaryColor":"#E040AF","secondaryColor":"#484848","cssStyles":"#aca-modal {\n position: fixed;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n background: rgba(0, 0, 0, 0.5);\n z-index: 99999999;\n overflow-x: hidden;\n overflow-y: auto;\n display: block;\n}\n#aca-modal-wrapper {\n display: flex;\n align-items: center;\n width: 50%;\n height: auto;\n max-width: 800px;\n min-height: calc(100% - 60px);\n margin: 10px auto;\n}\n#aca-modal-container {\n position: relative;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n box-shadow: 0 0 1.5rem rgba(17, 17, 17, 0.7);\n width: 100%;\n padding: 10px;\n background-color: #FFFFFF;\n border-radius: 10px;\n}\n#aca-close-icon-container {\n position: absolute;\n top: 12px;\n right: 12px;\n width: 25px;\n display: none;\n}\n#aca-close-icon {\n stroke: #333333;\n}\n#aca-modal-custom-image-container {\n background-color: #FFFFFF;\n margin: 0.25em 0;\n}\n#aca-modal-custom-image-container img {\n display: block;\n min-width: 60px;\n min-height: 60px;\n max-width: 200px;\n max-height: 200px;\n width: auto;\n height: auto;\n}\n#aca-modal-headline {\n text-align: center;\n text-transform: none;\n letter-spacing: normal;\n margin: 0.5em 0;\n font-size: 30px;\n color: #484848;\n}\n#aca-modal-subheadline {\n text-align: center;\n font-weight: normal;\n margin: 0 0 0.5em 0;\n font-size: 14px;\n color: #484848;\n}\n#aca-products-container {\n display: flex;\n align-items: flex-start;\n justify-content: center;\n flex-wrap: wrap;\n width: 85%;\n}\n#aca-products-container .aca-product {\n text-align: center;\n margin: 10px;\n width: 200px;\n}\n.aca-product-image {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 150px;\n background-color: #FFFFFF;\n margin-bottom: 0.25em;\n}\n.aca-product-image img {\n display: block;\n max-width: 100%;\n max-height: 100%;\n width: auto;\n height: auto;\nborder-radius: 10px;\n}\n.aca-product-name, .aca-subscription-name {\n color: #333333;\n line-height: inherit;\n word-break: break-word;\n font-size: 16px;\n font-weight: bold;\n}\n.aca-product-variant-name {\n margin-top: 1em;\n color: #333333;\n line-height: inherit;\n word-break: break-word;\n font-size: 16px;\n}
425\n\/*\n.aca-product-name::after {\n content: \" - Oregano Essential Oil is also anti-inflammatory and may help relieve common aches and pain.\"; \/* Text you want to add before the price *\/\nfont-weight: normal;\nfont-size: 12px;\n}\n*\/\n.aca-product-price {\n color: #333333;\n line-height: inherit;\n font-size: 16px;\n}\n.aca-subscription-label {\n color: #333333;\n line-height: inherit;\n word-break: break-word;\n font-weight: 600;\n font-size: 16px;\n}\n.aca-product-dropdown {\n position: relative;\n display: flex;\n align-items: center;\n cursor: pointer;\n width: 100%;\n height: 42px;\n background-color: #FFFFFF;\n line-height: inherit;\n margin-bottom: 1em;\n}\n.aca-product-dropdown .dropdown-icon {\n position: absolute;\n right: 8px;\n height: 12px;\n width: 12px;\n fill: #E1E3E4;\n}\n.aca-product-dropdown select::before,\n.aca-product-dropdown select::after {\n box-sizing: border-box;\n}\nselect.aca-product-dropdown::-ms-expand {\n display: none;\n}\n.aca-product-dropdown select {\n box-sizing: border-box;\n background-color: transparent;\n border: none;\n margin: 0;\n cursor: inherit;\n line-height: inherit;\n outline: none;\n -moz-appearance: none;\n -webkit-appearance: none;\n appearance: none;\n background-image: none;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n z-index: 1;\n width: 100%;\n height: 100%;\n cursor: pointer;\n border: 1px solid #E1E3E4;\n border-radius: 2px;\n color: #333333;\n padding: 0 30px 0 10px;\n font-size: 15px;\n}\n.aca-product-button {\n border: none;\n cursor: pointer;\n width: 100%;\n min-height: 42px;\n word-break: break-word;\n padding: 8px 14px;\n background-color: #d63384;\n text-transform: uppercase;\n line-height: inherit;\n border: 1px solid transparent;\n border-radius: 2px;\n font-size: 14px;\n color: #FFFFFF;\n font-weight: bold;\n letter-spacing: 1.039px;\nborder-radius: 10px;\n}\n.aca-product-button.aca-product-out-of-stock-button {\n cursor: default;\n background-color: #FFFFFF;\n border: 1px solid #E040AF;\n color: #E040AF;\n}\n.aca-button-loader {\n display: block;\n border: 3px solid transparent;\n border-radius: 50%;\n border-top: 3px solid #FFFFFF;\n width: 20px;\n height: 20px;\n background: transparent;\n margin: 0 auto;\n -webkit-animation: aca-loader 0.5s linear infinite;\n animation: aca-loader 0.5s linear infinite;\n}\n@-webkit-keyframes aca-loader {\n 0% {\n -webkit-transform: rotate(0deg);\n }\n 100% {\n -webkit-transform: rotate(360deg);\n }\n}\n@keyframes aca-loader {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n.aca-button-tick {\n display: block;\n transform: rotate(45deg);\n -webkit-transform: rotate(45deg);\n height: 19px;\n width: 9px;\n margin: 0 auto;\n border-bottom: 3px solid #FFFFFF;\n border-right: 3px solid #FFFFFF;\n}\n.aca-button-cross \u003e svg {\n width: 22px;\n margin-bottom: -6px;\n}\n.aca-button-cross .button-cross-icon {\n stroke: #FFFFFF;\n}\n#aca-bottom-close {\n cursor: pointer;\n text-align: center;\n word-break: break-word;\n font-size: 14px;\n color: #E040AF;\n}\n@media screen and (min-width: 951px) and (max-width: 1200px) {\n #aca-products-container {\n width: 95%;\n padding: 20px 0;\n }\n #aca-products-container .aca-product {\n margin: 20px 3%;\n padding: 0;\n }\n}\n@media screen and (min-width: 951px) and (max-width: 1024px) {\n #aca-products-container .aca-product {\n margin: 20px 2%;\n }\n}\n@media screen and (max-width: 950px) {\n #aca-products-container {\n width: 95%;\n padding: 0;\n }\n #aca-products-container .aca-product {\n width: 45%;\n max-width: 200px;\n margin: 2.5%;\n }\n}\n@media screen and (min-width: 602px) and (max-width: 950px) {\n #aca-products-container .aca-product {\n margin: 4%;\n }\n}\n@media screen and (max-width: 767px) {\n #aca-modal-wrapper {\n width: 90%;\n }\n}\n@media screen and (max-width: 576px) {\n #aca-modal-container {\n padding: 23px 0 0;\n }\n #aca-close-icon-container {\n display: block;\n }\n #aca-bottom-close {\n margin: 10px;\n font-size: 14px;\n color: #E040AF;\n}\n #aca-modal-headline {\n margin: 10px 5%;\n font-size: 20px;\n color: #484848;\n}\n #aca-modal-subheadline {\n margin: 0 0 5px 0;\n font-size: 12px;\n color: #484848;\n}\n .aca-product-image {\n height: 250px;\n margin: 0;\n }\n .aca-product-name, .aca-subscription-name, .aca-product-variant-name {\n font-size: 16px;\n margin: 5px 0;\n font-weight: bold;\n }\n .aca-product-dropdown select, .aca-product-button, .aca-subscription-label {\n font-size: 12px;\n }\n .aca-product-dropdown {\n height: 30px;\n margin-bottom: 7px;\n }\n .aca-product-button {\n min-height: 30px;\n padding: 4px;\n margin-bottom: 7px;\n }\n .aca-button-loader {\n border: 2px solid transparent;\n border-top: 2px solid #FFFFFF;\n width: 12px;\n height: 12px;\n }\n .aca-button-tick {\n height: 12px;\n width: 6px;\n border-bottom: 2px solid #FFFFFF;\n border-right: 2px solid #FFFFFF;\n }\n .aca-button-cross \u003e svg {\n width: 15px;\n margin-bottom: -4px;\n }\n .aca-button-cross .button-cross-icon {\n stroke: #FFFFFF;\n }\n}","hasCustomizations":false,"addButtonText":"Add to Order","dismissButtonText":"No Thank You","outOfStockButtonText":"Out of Stock","imageUrl":null,"showProductLink":false,"subscriptionLabel":"Subscription Plan","closeModalOutsideClick":true},"refreshAfterBannerClick":false,"disableReapplyRules":false,"disableReloadOnFailedAddition":false,"autoReloadCartPage":false,"ajaxRedirectPath":null,"allowSimultaneousRequests":false,"applyRulesOnCheckout":false,"enableCartCtrlOverrides":true,"customRedirectFromCart":null,"scriptSettings":{"branding":{"show":false,"removalRequestSent":null},"productPageRedirection":{"enabled":false,"products":[],"redirectionURL":"\/"},"debugging":{"enabled":false,"enabledOn":null,"stringifyObj":false}
425,"reApplyValueBasedRulesInCart":false,"disableRedirectAfterFormSubmit":false,"fetchProductInfoFromSavedDomain":false,"enableBuyNowInterceptions":false,"removeProductsAddedFromExpiredRules":false,"useFinalPrice":false,"useFinalPriceGetEntireCart":false,"hideGiftedPropertyText":false,"fetchCartDataBeforeRequest":false,"removeEGPropertyFromSplitActionLineItems":false,"hideAlertsOnFrontend":false,"decodePayload":false,"customCSS":null,"delayUpdates":2000},"promoCodeMessageStyle":{"message":"Free gift added!"},"egDiscount":{"cartValueStopCollectionCheck":false},"accessToEnterprise":true},"translations":null,"defaultLocale":"en","shopDomain":"www.rockymountainoils.com"}; 426 var productRedirectionEnabled = shopInfo.settings.scriptSettings.productPageRedirection.enabled; 427 if (["Unlimited", "Enterprise"].includes(shopInfo.subscriptionName) && productRedirectionEnabled) { 428 var products = shopInfo.settings.scriptSettings.productPageRedirection.products; 429 if (products.length > 0) { 430 var productIds = products.map(function(prod) { 431 var productGid = prod.id; 432 var productIdNumber = parseInt(productGid.split('/').pop()); 433 return productIdNumber; 434 }); 435 var productInfo = null; 436 var isProductInList = productIds.includes(productInfo.id); 437 if (isProductInList) { 438 var redirectionURL = shopInfo.settings.scriptSettings.productPageRedirection.redirectionURL; 439 if (redirectionURL) { 440 window.location = redirectionURL; 441 } 442 } 443 } 444 } 445 446 447 } catch(err) { 448 return 449 }}
449)() 450 </script>
450 451 452 453 454<!-- END app block --><!-- BEGIN app block: shopify://apps/attentive/blocks/attn-tag/8df62c72-8fe4-407e-a5b3-72132be30a0d -->
454<script type="text/javascript" src="https://wrllp.rockymountainoils.com/rockymountainoils/load" onerror=" var fallbackScript = document.createElement('script'); fallbackScript.src = 'https://cdn.attn.tv/rockymountainoils/dtag.js'; document.head.appendChild(fallbackScript);" data-source="loaded?source=app-embed" defer="defer"></script>
454 455 456 457<!-- END app block --><!-- BEGIN app block: shopify://apps/yotpo-product-reviews/blocks/settings/eb7dfd7d-db44-4334-bc49-c893b51b36cf --> 458 459 460
460<script type="text/javascript" src="https://cdn-widgetsrepository.yotpo.com/v1/loader/lJQvWsNScp9JikHPae5aRIjveHBjpzkexd8mF1de?languageCode=en" async></script>
460 461 462 463 464 465<!-- END app block --><!-- BEGIN app block: shopify://apps/yotpo-loyalty-rewards/blocks/loader-app-embed-block/2f9660df-5018-4e02-9868-ee1fb88d6ccd --> 466
466<script src="https://cdn-widgetsrepository.yotpo.com/v1/loader/1mzqlpuEeK12ZA7oqhI7dA" async></script>
466 467 468 469 470 471 472 473 474<!-- END app block --><!-- BEGIN app block: shopify://apps/regios-discounts/blocks/regios_discounts_embed/dc1514bb-4830-4102-bffa-e8b300bac5bd --> 475
476<script id="regios-dopp-config" type="application/json"> 477{ 478 "discountConfigs": {"1395517686082":"null","1395985318210":"null","1396108722498":"null","1396258505026":"null","1396432961858":"null","1398913335618":"null","1399524196674":"null","1399563813186":"null","1399709368642":"null","1400079057218":"null","1400277336386":"null","1400396939586":"null","1400616714562":"null","1400977097026":"null","1401057640770":"null","1401385713986":"null","1401508233538":"null","1401888440642":"null","1402028884290":"null","1402488095042":"null","1405469229378":"null","1405642375490":"null","1405969236290":"null","1407287951682":"null","1407300567362":"null","1407455592770":"null","1407635423554":"null","1407857656130":"null","1409679196482":"null","1409865875778":"null","1410568454466":"null","1410895020354":"null","1410917663042":"null","1410918809922":"null","1411040182594":"null","1411076194626":"null","1411129770306":"null","1411443622210":"null","1411552870722":"null","1411789783362":"null","1411913515330":"null","1412632412482":"null","1413023596866":"null","1413066424642":"null","1413141430594":"null","1413488443714":"null","1413615452482":"null","1413679579458":"null","1413736759618":"null","1413837521218":"null","1413861048642":"null","1414019744066":"null","1414118965570":"null","1414270157122":"null","1414501728578":"null","1414528434498":"null","1414528532802":"null","1414679855426":"null","1414705578306":"null","1414705807682":"null","1414747390274":"null","1414794477890":"null","1414818169154":"null","1414819053890":"null","1414852084034":"null","1414852215106":"null","1414852247874":"null","1414855524674":"null","1414855557442":"null","1414918373698":"null","1414921814338":"null","1414991020354":"{\"config\":{\"message\":\"Individual\",\"isEnabled\":true,\"customLogic\":{\"id\":\"converted-legacy-root\",\"type\":\"ROOT\",\"entryPoint\":{\"id\":\"check-if0\",\"type\":\"CHECK_IF\",\"matchType\":\"AND\",\"then\":{\"id\":\"check-if1\",\"type\":\"CHECK_IF\",\"matchType\":\"AND\",\"then\":{\"id\":\"apply-discount0\",\"type\":\"APPLY_DISCOUNT\",\"value\":{\"type\":\"PERCENTAGE\",\"percentage\":\"50\"},\"dimensions\":{\"width\":332,\"height\":216},\"position\":{\"x\":995.8908986790632,\"y\":0},\"title\":\"Employee 50% off\"},\"otherwise\":{\"id\":\"check-if2\",\"type\":\"CHECK_IF\",\"matchType\":\"AND\",\"then\":{\"id\":\"apply-discount1\",\"type\":\"APPLY_DISCOUNT\",\"value\":{\"type\":\"PERCENTAGE\",\"percentage\":\"35\"},\"dimensions\":{\"width\":332,\"height\":216},\"position\":{\"x\":1416.7817973581264,\"y\":264},\"title\":\"DRC 35% off\"},\"otherwise\":{\"id\":\"check-if3\",\"type\":\"CHECK_IF\",\"matchType\":\"AND\",\"then\":{\"id\":\"apply-discount2\",\"type\":\"APPLY_DISCOUNT\",\"value\":{\"type\":\"PERCENTAGE\",\"percentage\":\"20\"},\"dimensions\":{\"width\":332,\"height\":216},\"position\":{\"x\":1821.8908986790632,\"y\":528},\"title\":\"Affiliate 20% off\"},\"otherwise\":{\"id\":\"check-if4\",\"type\":\"CHECK_IF\",\"matchType\":\"AND\",\"then\":{\"id\":\"apply-discount3\",\"type\":\"APPLY_DISCOUNT\",\"value\":{\"type\":\"PERCENTAGE\",\"percentage\":\"10\"},\"dimensions\":{\"width\":332,\"height\":216},\"position\":{\"x\":2227.8908986790634,\"y\":792},\"title\":\"Military 10% off\"},\"otherwise\":null,\"conditions\":[{\"type\":\"CUSTOMER_ELIGIBILITY\",\"includeOrExclude\":\"INCLUDE\",\"eligibility\":{\"type\":\"SPECIFIC_CUSTOMER_TAGS\",\"tagsToCheck\":[\"Military\"]}}],\"dimensions\":{\"width\":278,\"height\":148},\"position\":{\"x\":1853,\"y\":792}},\"conditions\":[{\"type\":\"CUSTOMER_ELIGIBILITY\",\"includeOrExclude\":\"INCLUDE\",\"eligibility\":{\"type\":\"SPECIFIC_CUSTOMER_TAGS\",\"tagsToCheck\":[\"Affiliate\"]}}],\"dimensions\":{\"width\":278,\"height\":148},\"position\":{\"x\":1447,\"y\":528}},\"conditions\":[{\"type\":\"CUSTOMER_ELIGIBILITY\",\"includeOrExclude\":\"INCLUDE\",\"eligibility\":{\"type\":\"SPECIFIC_CUSTOMER_TAGS\",\"tagsToCheck\":[\"Doug Releaf Center\"]}}],\"dimensions\":{\"width\":292,\"height\":168},\"position\":{\"x\":1027,\"y\":264}},\"conditions\":[{\"type\":\"CUSTOMER_ELIGIBILITY\",\"includeOrExclude\":\"INCLUDE\",\"eligibility\":{\"type\":\"SPECIFIC_CUSTOMER_TAGS\",\"tagsToCheck\":[\"Employee\"]}}
478],\"dimensions\":{\"width\":278,\"height\":148},\"position\":{\"x\":620,\"y\":0}},\"otherwise\":null,\"conditions\":[{\"type\":\"PRODUCT_ELIGIBILITY\",\"includeOrExclude\":\"INCLUDE\",\"eligibility\":{\"type\":\"SPECIFIC_COLLECTIONS\",\"selectedCollections\":[{\"availablePublicationCount\":10,\"description\":\"\",\"descriptionHtml\":\"\",\"handle\":\"site-wide\",\"id\":\"gid:\/\/shopify\/Collection\/472076222786\",\"productsAutomaticallySortedCount\":294,\"productsCount\":294,\"productsManuallySortedCount\":0,\"publicationCount\":12,\"seo\":{\"description\":null,\"title\":null},\"ruleSet\":{\"appliedDisjunctively\":false,\"rules\":[{\"column\":\"VARIANT_INVENTORY\",\"condition\":\"0\",\"relation\":\"GREATER_THAN\"},{\"column\":\"TITLE\",\"condition\":\"Kit\",\"relation\":\"NOT_CONTAINS\"},{\"column\":\"TITLE\",\"condition\":\"Free\",\"relation\":\"NOT_CONTAINS\"},{\"column\":\"TITLE\",\"condition\":\"Membership\",\"relation\":\"NOT_CONTAINS\"},{\"column\":\"TITLE\",\"condition\":\"Letter\",\"relation\":\"NOT_CONTAINS\"},{\"column\":\"TITLE\",\"condition\":\"Bundle\",\"relation\":\"NOT_CONTAINS\"},{\"column\":\"TITLE\",\"condition\":\"Oil'ty Plus Gift\",\"relation\":\"NOT_CONTAINS\"},{\"column\":\"TITLE\",\"condition\":\"Bulk\",\"relation\":\"NOT_CONTAINS\"},{\"column\":\"TITLE\",\"condition\":\"Gift Card\",\"relation\":\"NOT_CONTAINS\"},{\"column\":\"TITLE\",\"condition\":\"CBD\",\"relation\":\"NOT_CONTAINS\"},{\"column\":\"TITLE\",\"condition\":\"Duo\",\"relation\":\"NOT_CONTAINS\"},{\"column\":\"TITLE\",\"condition\":\"Test\",\"relation\":\"NOT_CONTAINS\"},{\"column\":\"TITLE\",\"condition\":\"Donate\",\"relation\":\"NOT_CONTAINS\"},{\"column\":\"TITLE\",\"condition\":\"Note\",\"relation\":\"NOT_CONTAINS\"},{\"column\":\"TITLE\",\"condition\":\"Scented Storytime Essentials\",\"relation\":\"NOT_CONTAINS\"},{\"column\":\"TITLE\",\"condition\":\"Literary Aromatica Collection\",\"relation\":\"NOT_CONTAINS\"},{\"column\":\"TITLE\",\"condition\":\"Christmas Trio\",\"relation\":\"NOT_CONTAINS\"},{\"column\":\"TITLE\",\"condition\":\"Holiday Traditions On-The-Go\",\"relation\":\"NOT_CONTAINS\"},{\"column\":\"TITLE\",\"condition\":\"SavedBy Package Protection\",\"relation\":\"NOT_CONTAINS\"},{\"column\":\"TITLE\",\"condition\":\"Fall Blends Collection\",\"relation\":\"NOT_CONTAINS\"},{\"column\":\"TITLE\",\"condition\":\"Harvest Festival On-the-Go\",\"relation\":\"NOT_CONTAINS\"},{\"column\":\"TITLE\",\"condition\":\"Bamboo Toothbrush\",\"relation\":\"NOT_CONTAINS\"},{\"column\":\"TITLE\",\"condition\":\"Holiday Blends Collection\",\"relation\":\"NOT_CONTAINS\"},{\"column\":\"TITLE\",\"condition\":\"9-Pack\",\"relation\":\"NOT_CONTAINS\"},{\"column\":\"TITLE\",\"condition\":\"Tohi Immune Strength Multi-Purpose Cleaning Concentrate with Bottle Spray and Silicone Sleeve\",\"relation\":\"NOT_CONTAINS\"},{\"column\":\"TITLE\",\"condition\":\"2 Pack\",\"relation\":\"NOT_CONTAINS\"},{\"column\":\"TITLE\",\"condition\":\"Draft\",\"relation\":\"NOT_CONTAINS\"}]},\"sortOrder\":\"BEST_SELLING\",\"storefrontId\":\"gid:\/\/shopify\/Collection\/472076222786\",\"templateSuffix\":\"\",\"title\":\"Site Wide\",\"updatedAt\":\"2024-04-12T13:53:56Z\"}]}},{\"type\":\"SELLING_PLAN\",\"includeOrExclude\":\"INCLUDE\",\"appliesTo\":\"ONE_TIME_ONLY\"}],\"dimensions\":{\"width\":278,\"height\":201},\"position\":{\"x\":246,\"y\":0}},\"dimensions\":{\"width\":150,\"height\":0},\"position\":{\"x\":0,\"y\":0}},\"customerEligibility\":{\"type\":\"ALL_CUSTOMERS\"},\"productEligibility\":{\"type\":\"ALL_PRODUCTS\"},\"developerOptions\":{\"alwaysThrow\":false},\"minimumPurchaseRequirements\":{\"requirementType\":\"NONE\",\"quantity\":\"0\",\"subtotal\":\"0\",\"appliesTo\":\"ELIGIBLE_LINE_ITEMS\"},\"maximumPurchaseRequirements\":{\"requirementType\":\"NONE\",\"quantity\":\"0\",\"subtotal\":\"0\",\"appliesTo\":\"ELIGIBLE_LINE_ITEMS\"},\"value\":{\"type\":\"PERCENTAGE\",\"percentage\":\"0\"},\"appliesToSellingPlans\":\"ALL_SELLING_PLANS\",\"salePriceHandlingStrategy\":\"APPLY_TO_COMPARE_AT_PRICE\"},\"startDate\":\"2024-04-11T17:16:16Z\",\"endDate\":null,\"discountClass\":\"PRODUCT\",\"discountClasses\":[\"PRODUCT\"]}","1414996885826":"null","1414997410114":"null","1415014973762":"null","1415015137602":"null","1415068680514":"null","1415097614658":"null","1415141327170":"null","1415141425474":"null","1415169212738":"null","1415169409346":"null","1415169442114":"null","1415187693890":"null","1415187824962":"null","1415285145922":"null","1415285244226":"null","1415285276994":"null","1415308640578":"null","1415308673346":"null","1415308804418":"null","1415309164866":"null","1415372210498":"null","1415375782210":"null","1415375814978":"null","1415375913282":"null","1415375946050":"null","1415376011586":"null","1415398359362":"null","1415398949186":"null","1415398981954":"null","1415399014722":"null","1415399047490":"null","1415399080258":"null","1415474577730":"null","1415477395778":"null","1415540769090":"null","1415540834626":"null","1415575404866":"null","1415594836290":"null","1415597031746":"null","1415597064514":"null","1415597130050":"null","1415597162818":"null","1415601488194":"null","1415673315650":"null","1415674036546":"null","1415676789058":"null","1415819166018":"null","1415819198786":"null","1415863370050":"null","1415870972226":"null","1415960002882":"null","1415960068418":"null","1415960199490":"null","1415975010626":"null","1415976190274":"null","1415976517954":"null","1415976649026":"null","1415976780098":"null","1415976845634":"null","1415977304386":"null","1415977795906":"null","1415978910018":"null","1415995195714":"null","1416041103682":"null","1416061878594":"null","1416066236738":"null","1416067088706":"null","1416069349698":"null","1416081670466":"null","1416085307714":"null","1416139833666":"null","1416141570370":"null","1416141668674":"null","1416149336386":"null","1416149369154":"null","1416191770946":"null","1416196063554":"null","1416266088770":"null","1416284635458":"null","1416284733762":"null","1416285061442":"null","1416365801794":"null","1416466825538":"null","1416467448130":"null","1416477049154":"null","1416481472834":"null","1416483930434":"null","1416494547266":"null","1416587149634":"null","1416611496258":"null","1416611660098":"null","1416800796994":"null","1416813478210":"null","1416862794050":"null","1416992129346":"null","1417027060034":"null","1417041150274":"null","1417041183042":"null","1417062515010":"null","1417158754626":"null","1417302442306":"{\"config\":{\"message\"
478:\"Wholesale\",\"isEnabled\":true,\"customLogic\":{\"id\":\"converted-legacy-root\",\"type\":\"ROOT\",\"entryPoint\":{\"id\":\"check-if734\",\"type\":\"CHECK_IF\",\"matchType\":\"AND\",\"then\":{\"id\":\"check-if536\",\"type\":\"CHECK_IF\",\"matchType\":\"AND\",\"then\":{\"id\":\"apply-discount335\",\"type\":\"APPLY_DISCOUNT\",\"value\":{\"type\":\"PERCENTAGE\",\"percentage\":\"50\"},\"dimensions\":{\"width\":332,\"height\":216},\"position\":{\"x\":1030.9116923515815,\"y\":-90.13589104844854},\"title\":\"Wholesale Oils 50% Discount\"},\"otherwise\":{\"id\":\"check-if33\",\"type\":\"CHECK_IF\",\"matchType\":\"AND\",\"then\":{\"id\":\"apply-discount557\",\"type\":\"APPLY_DISCOUNT\",\"value\":{\"type\":\"PERCENTAGE\",\"percentage\":\"40\"},\"dimensions\":{\"width\":332,\"height\":216},\"position\":{\"x\":1452.447692505632,\"y\":171.08974303991113},\"title\":\"Wholesale Oils 40% Discount\"},\"otherwise\":{\"id\":\"check-if752\",\"type\":\"CHECK_IF\",\"matchType\":\"AND\",\"then\":{\"id\":\"apply-discount443\",\"type\":\"APPLY_DISCOUNT\",\"value\":{\"type\":\"PERCENTAGE\",\"percentage\":\"30\"},\"dimensions\":{\"width\":332,\"height\":216},\"position\":{\"x\":1839,\"y\":528},\"title\":\"Wholesale Oils 30% Discount\"},\"otherwise\":{\"id\":\"check-if725\",\"type\":\"CHECK_IF\",\"matchType\":\"AND\",\"then\":{\"id\":\"apply-discount345\",\"type\":\"APPLY_DISCOUNT\",\"value\":{\"type\":\"PERCENTAGE\",\"percentage\":\"25\"},\"dimensions\":{\"width\":332,\"height\":216},\"position\":{\"x\":2252.594420889743,\"y\":792},\"title\":\"Wholesale Oils 25% Discount\"},\"otherwise\":null,\"conditions\":[{\"type\":\"CUSTOMER_ELIGIBILITY\",\"includeOrExclude\":\"INCLUDE\",\"eligibility\":{\"type\":\"SPECIFIC_CUSTOMER_TAGS\",\"tagsToCheck\":[\"Wholesale Starter\",\"Wholesale Basic New\"]}}],\"dimensions\":{\"width\":292,\"height\":168},\"position\":{\"x\":1830.1194869375609,\"y\":894.2012826560978}},\"conditions\":[{\"type\":\"CUSTOMER_ELIGIBILITY\",\"includeOrExclude\":\"INCLUDE\",\"eligibility\":{\"type\":\"SPECIFIC_CUSTOMER_TAGS\",\"tagsToCheck\":[\"Wholesale Starter\"]}},{\"type\":\"PURCHASE_REQUIREMENTS\",\"minOrMax\":\"MIN\",\"requirements\":{\"requirementType\":\"SUBTOTAL\",\"quantity\":\"0\",\"subtotal\":\"714.29\",\"appliesTo\":\"ENTIRE_ORDER\"}}],\"dimensions\":{\"width\":283,\"height\":201},\"position\":{\"x\":1451,\"y\":528}},\"conditions\":[{\"type\":\"CUSTOMER_ELIGIBILITY\",\"includeOrExclude\":\"INCLUDE\",\"eligibility\":{\"type\":\"SPECIFIC_CUSTOMER_TAGS\",\"tagsToCheck\":[\"Wholesale Basic\",\"Wholesale Pro New\",\"Wholesale Starter 2\",\"Wholesale Basic New 2\"]}}],\"dimensions\":{\"width\":292,\"height\":208},\"position\":{\"x\":1031,\"y\":264}},\"conditions\":[{\"type\":\"CUSTOMER_ELIGIBILITY\",\"includeOrExclude\":\"INCLUDE\",\"eligibility\":{\"type\":\"SPECIFIC_CUSTOMER_TAGS\",\"tagsToCheck\":[\"Wholesale Pro\"]}}],\"dimensions\":{\"width\":278,\"height\":148},\"position\":{\"x\":625,\"y\":0}},\"otherwise\":{\"id\":\"check-if786\",\"type\":\"CHECK_IF\",\"matchType\":\"AND\",\"then\":{\"id\":\"check-if682\",\"type\":\"CHECK_IF\",\"matchType\":\"AND\",\"then\":{\"id\":\"apply-discount258\",\"type\":\"APPLY_DISCOUNT\",\"value\":{\"type\":\"PERCENTAGE\",\"percentage\":\"20\"},\"dimensions\":{\"width\":332,\"height\":216},\"position\":{\"x\":1442.7312822272283,\"y\":768.1566668096231},\"title\":\"Wholesale Kits 20% Discount\"},\"otherwise\":{\"id\":\"check-if113\",\"type\":\"CHECK_IF\",\"matchType\":\"AND\",\"then\":{\"id\":\"apply-discount306\",\"type\":\"APPLY_DISCOUNT\",\"value\":{\"type\":\"PERCENTAGE\",\"percentage\":\"10\"},\"dimensions\":{\"width\":332,\"height\":336},\"position\":{\"x\":1828.3812239942686,\"y\":1112.0848568872639},\"title\":\"Wholesale Kits 10% Discount\"},\"otherwise\":null,\"conditions\":[{\"type\":\"CUSTOMER_ELIGIBILITY\",\"includeOrExclude\":\"INCLUDE\",\"eligibility\":{\"type\":\"SPECIFIC_CUSTOMER_TAGS\",\"tagsToCheck\":[\"Wholesale Starter\",\"Wholesale Starter 2\",\"Wholesale Basic New\",\"Wholesale Basic New 2\"]}}],\"dimensions\":{\"width\":292,\"height\":208},\"position\":{\"x\":1430.8640278775893,\"y\":1200.2413999663972}},\"conditions\":[{\"type\":\"CUSTOMER_ELIGIBILITY\",\"includeOrExclude\":\"INCLUDE\",\"eligibility\":{\"type\":\"SPECIFIC_CUSTOMER_TAGS\",\"tagsToCheck\":[\"Wholesale Pro\",\"Wholesale Basic\",\"Wholesale Pro New\"]}}
478],\"dimensions\":{\"width\":292,\"height\":188},\"position\":{\"x\":1001.2239781958071,\"y\":529.3712429703917}},\"otherwise\":null,\"conditions\":[{\"type\":\"PRODUCT_ELIGIBILITY\",\"includeOrExclude\":\"INCLUDE\",\"eligibility\":{\"type\":\"SPECIFIC_COLLECTIONS\",\"selectedCollections\":[],\"asListOfIds\":\"475126694210\"}}],\"dimensions\":{\"width\":292,\"height\":180},\"position\":{\"x\":657,\"y\":196},\"tooltips\":{}},\"conditions\":[{\"type\":\"PRODUCT_ELIGIBILITY\",\"includeOrExclude\":\"INCLUDE\",\"eligibility\":{\"type\":\"SPECIFIC_COLLECTIONS\",\"selectedCollections\":[],\"asListOfIds\":\"474194706754\"}}],\"dimensions\":{\"width\":283,\"height\":160},\"position\":{\"x\":246,\"y\":0},\"tooltips\":{}},\"dimensions\":{\"width\":150,\"height\":0},\"position\":{\"x\":0,\"y\":0}},\"customerEligibility\":{\"type\":\"ALL_CUSTOMERS\"},\"productEligibility\":{\"type\":\"ALL_PRODUCTS\"},\"developerOptions\":{\"alwaysThrow\":false},\"minimumPurchaseRequirements\":{\"requirementType\":\"NONE\",\"quantity\":\"0\",\"subtotal\":\"0\",\"appliesTo\":\"ELIGIBLE_LINE_ITEMS\"},\"maximumPurchaseRequirements\":{\"requirementType\":\"NONE\",\"quantity\":\"0\",\"subtotal\":\"0\",\"appliesTo\":\"ELIGIBLE_LINE_ITEMS\"},\"value\":{\"type\":\"PERCENTAGE\",\"percentage\":\"0\"},\"appliesToSellingPlans\":\"ALL_SELLING_PLANS\",\"salePriceHandlingStrategy\":\"APPLY_TO_COMPARE_AT_PRICE\"},\"startDate\":\"2024-05-03T16:02:01Z\",\"endDate\":null,\"discountClass\":\"PRODUCT\",\"discountClasses\":[\"PRODUCT\"]}","1417331212610":"null","1417343795522":"null","1417382330690":"null","1417382396226":"null","1417382428994":"null","1417645261122":"null","1417729671490":"null","1417753657666":"null","1417810870594":"null","1417933652290":"null","1418092577090":"null","1418172662082":"null","1418179543362":"null","1418190586178":"null","1418192027970":"null","1418209231170":"null","1418209329474":"null","1418209395010":"null","1418212245826":"null","1418212278594":"null","1418232529218":"null","1418281255234":"null","1418347282754":"null","1418363306306":"null","1418373923138":"null","1418408657218":"null","1418420912450":"null","1418421076290":"null","1418460561730":"null","1418461118786":"null","1418461249858":"null","1418461380930":"null","1418504962370":"null","1418516234562":"null","1418516300098":"null","1418519773506":"null","1418539270466":"null","1418543857986":"null","1418614833474":"null","1418625777986":"null","1418636820802":"null","1418636853570":"null","1418638262594":"{\"config\":{\"message\":\"Oilty Plus\",\"isEnabled\":true,\"customLogic\":{\"id\":\"converted-legacy-root\",\"type\":\"ROOT\",\"entryPoint\":{\"id\":\"check-if86\",\"type\":\"CHECK_IF\",\"matchType\":\"AND\",\"then\":{\"id\":\"check-if338\",\"type\":\"CHECK_IF\",\"matchType\":\"AND\",\"then\":{\"id\":\"apply-discount493\",\"type\":\"APPLY_DISCOUNT\",\"value\":{\"type\":\"PERCENTAGE\",\"percentage\":\"20\"},\"dimensions\":{\"width\":332,\"height\":244},\"position\":{\"x\":1039.2764082173626,\"y\":0},\"title\":\"Oilty Plus 20% OFF\"},\"otherwise\":null,\"conditions\":[{\"type\":\"PRODUCT_ELIGIBILITY\",\"includeOrExclude\":\"EXCLUDE\",\"eligibility\":{\"type\":\"SPECIFIC_COLLECTIONS\",\"selectedCollections\":[],\"asListOfIds\":\"483001893186,639998853487,463206875458,648980037999\"}},{\"type\":\"SELLING_PLAN\",\"includeOrExclude\":\"INCLUDE\",\"appliesTo\":\"ONE_TIME_ONLY\"},{\"type\":\"PRODUCT_ELIGIBILITY\",\"includeOrExclude\":\"EXCLUDE\",\"eligibility\":{\"type\":\"SPECIFIC_PRODUCT_VARIANTS\",\"selectedProductVariants\":[],\"compactFormat\":{\"8025567494466\":\"52064202457455\",\"8025539838274\":\"52064210354543\",\"8025537380674\":\"52064215433583\",\"8025523618114\":\"52064222282095\",\"8025534529858\":\"52064228901231\",\"8025533776194\":\"52064234307951\",\"8025539084610\":\"52064239780207\",\"8025532334402\":\"52064259408239\"}}}],\"dimensions\":{\"width\":292,\"height\":518},\"position\":{\"x\":642,\"y\":0},\"tooltips\":{}},\"otherwise\":{\"id\":\"check-if524\",\"type\":\"CHECK_IF\",\"matchType\":\"AND\",\"then\":{\"id\":\"apply-discount645\",\"type\":\"APPLY_DISCOUNT\",\"value\":{\"type\":\"PERCENTAGE\",\"percentage\":\"20\"}
478,\"dimensions\":{\"width\":332,\"height\":340},\"position\":{\"x\":1038.6862944162435,\"y\":319.5710659898477},\"title\":\"Oilty Plus 20% OFF\"},\"otherwise\":null,\"conditions\":[{\"type\":\"IF_IN_CART\",\"eligibility\":{\"type\":\"SPECIFIC_PRODUCTS\",\"selectedProducts\":[],\"asListOfIds\":\"8215212327234\"}},{\"type\":\"PRODUCT_ELIGIBILITY\",\"includeOrExclude\":\"EXCLUDE\",\"eligibility\":{\"type\":\"SPECIFIC_COLLECTIONS\",\"selectedCollections\":[],\"asListOfIds\":\"483001893186,639998853487,463206875458,648980037999\"}},{\"type\":\"SELLING_PLAN\",\"includeOrExclude\":\"INCLUDE\",\"appliesTo\":\"ONE_TIME_ONLY\"},{\"type\":\"PRODUCT_ELIGIBILITY\",\"includeOrExclude\":\"EXCLUDE\",\"eligibility\":{\"type\":\"SPECIFIC_PRODUCT_VARIANTS\",\"selectedProductVariants\":[],\"compactFormat\":{\"8025567494466\":\"52064202457455\",\"8025539838274\":\"52064210354543\",\"8025537380674\":\"52064215433583\",\"8025523618114\":\"52064222282095\",\"8025534529858\":\"52064228901231\",\"8025533776194\":\"52064234307951\",\"8025539084610\":\"52064239780207\",\"8025532334402\":\"52064259408239\"}}}],\"dimensions\":{\"width\":292,\"height\":631},\"position\":{\"x\":643.0206039539254,\"y\":617.9831262115042},\"tooltips\":{}},\"conditions\":[{\"type\":\"CUSTOMER_ELIGIBILITY\",\"includeOrExclude\":\"INCLUDE\",\"eligibility\":{\"type\":\"SPECIFIC_CUSTOMER_TAGS\",\"tagsToCheck\":[\"Oilty Plus\"]}}],\"dimensions\":{\"width\":300,\"height\":0},\"position\":{\"x\":246,\"y\":0}},\"dimensions\":{\"width\":150,\"height\":0},\"position\":{\"x\":0,\"y\":0}},\"customerEligibility\":{\"type\":\"ALL_CUSTOMERS\"},\"productEligibility\":{\"type\":\"ALL_PRODUCTS\"},\"developerOptions\":{\"alwaysThrow\":false},\"minimumPurchaseRequirements\":{\"requirementType\":\"NONE\",\"quantity\":\"0\",\"subtotal\":\"0\",\"appliesTo\":\"ELIGIBLE_LINE_ITEMS\"},\"maximumPurchaseRequirements\":{\"requirementType\":\"NONE\",\"quantity\":\"0\",\"subtotal\":\"0\",\"appliesTo\":\"ELIGIBLE_LINE_ITEMS\"},\"value\":{\"type\":\"PERCENTAGE\",\"percentage\":\"0\"},\"appliesToSellingPlans\":\"ALL_SELLING_PLANS\",\"salePriceHandlingStrategy\":\"APPLY_TO_COMPARE_AT_PRICE\",\"cartLineSortOrder\":\"NONE\"},\"startDate\":\"2024-05-13T18:03:58Z\",\"endDate\":null,\"discountClass\":\"PRODUCT\",\"discountClasses\":[\"PRODUCT\"]}","1418664640834":"null","1418664739138":"null","1418752819522":"null","1418762944834":"null","1418766090562":"null","1418793648450":"null","1418847420738":"null","1418861117762":"null","1418886644034":"null","1418910138690":"null","1418910335298":"null","1418925801794":"null","1418963845442":"null","1419031576898":"null","1419044225346":"null","1419096064322":"null","1419096162626":"null","1419096195394":"null","1419144069442":"null","1419144167746":"null","1419144200514":"null","1419144233282":"null","1419144266050":"null","1419147182402":"null","1419151802690":"null","1419168350530":"null","1419168383298":"null","1419168416066":"null","1419183456578":"null","1419183751490":"null","1419233689922":"null","1419234672962":"null","1419243585858":"null","1419341988162":"null","1419342020930":"null","1419343593794":"null","1419343823170":"null","1419357651266":"null","1419362533698":"null","1419362632002":"null","1419362664770":"null","1419362697538":"null","1419365876034":"null","1419366203714":"null","1419366433090":"null","1419438686530":"null","1419457036610":"null","1419553603906":"null","1423161000258":"null","1424955736386":"null","1424961306946":"null","1426322391362":"null","1637700206959":"{\"config\":{\"message\":\"Wholesale Pro Discount\",\"isEnabled\":true,\"customLogic\":{\"id\":\"converted-legacy-root\",\"type\":\"ROOT\",\"entryPoint\":{\"id\":\"converted-legacy-criteria\",\"type\":\"CHECK_IF\",\"matchType\":\"AND\",\"conditions\":[{\"type\":\"CUSTOMER_ELIGIBILITY\",\"includeOrExclude\":\"INCLUDE\",\"eligibility\":{\"type\":\"SPECIFIC_CUSTOMER_TAGS\",\"tagsToCheck\":[\"Wholesale Pro\"]}},{\"type\":\"PRODUCT_ELIGIBILITY\",\"includeOrExclude\":\"INCLUDE\",\"eligibility\":{\"type\":\"SPECIFIC_COLLECTIONS\",\"tagsToCheck\":[],\"selectedCollections\":[],\"asListOfIds\":\"474194706754\"}}],\"then\":{\"id\":\"converted-legacy-discount\",\"type\":\"APPLY_DISCOUNT\",\"title\":\"Wholesale Oils 50% OFF\",\"value\":{\"type\":\"PERCENTAGE\",\"percentage\":\"50\",\"quantity\":null}
478,\"dimensions\":{\"width\":332,\"height\":336},\"position\":{\"x\":655.4544613350957,\"y\":-0.7081295439524524}},\"otherwise\":{\"id\":\"check-if559\",\"type\":\"CHECK_IF\",\"matchType\":\"AND\",\"then\":{\"id\":\"apply-discount897\",\"type\":\"APPLY_DISCOUNT\",\"value\":{\"type\":\"PERCENTAGE\",\"percentage\":\"20\"},\"dimensions\":{\"width\":332,\"height\":336},\"position\":{\"x\":1045.7081295439525,\"y\":384.7081295439524},\"title\":\"Wholesale Kits 20% OFF\"},\"otherwise\":null,\"conditions\":[{\"type\":\"CUSTOMER_ELIGIBILITY\",\"includeOrExclude\":\"INCLUDE\",\"eligibility\":{\"type\":\"SPECIFIC_CUSTOMER_TAGS\",\"tagsToCheck\":[\"Wholesale Pro\"]}},{\"type\":\"PRODUCT_ELIGIBILITY\",\"includeOrExclude\":\"INCLUDE\",\"eligibility\":{\"type\":\"SPECIFIC_COLLECTIONS\",\"selectedCollections\":[],\"asListOfIds\":\"475126694210\"}}],\"dimensions\":{\"width\":292,\"height\":233},\"position\":{\"x\":657,\"y\":384.7081295439524},\"tooltips\":{}},\"dimensions\":{\"width\":283,\"height\":372},\"position\":{\"x\":246,\"y\":0},\"tooltips\":{}},\"dimensions\":{\"width\":150,\"height\":0},\"position\":{\"x\":0,\"y\":0}},\"customerEligibility\":{\"type\":\"ALL_CUSTOMERS\"},\"productEligibility\":{\"type\":\"ALL_PRODUCTS\"},\"developerOptions\":{\"alwaysThrow\":false},\"minimumPurchaseRequirements\":{\"requirementType\":\"NONE\",\"quantity\":\"0\",\"subtotal\":\"0\",\"appliesTo\":\"ELIGIBLE_LINE_ITEMS\"},\"maximumPurchaseRequirements\":{\"requirementType\":\"NONE\",\"quantity\":\"0\",\"subtotal\":\"0\",\"appliesTo\":\"ELIGIBLE_LINE_ITEMS\"},\"value\":{\"type\":\"PERCENTAGE\",\"percentage\":\"0\"},\"appliesToSellingPlans\":\"ONE_TIME_ONLY\",\"salePriceHandlingStrategy\":\"APPLY_TO_COMPARE_AT_PRICE\"},\"startDate\":\"2024-10-04T16:06:53Z\",\"endDate\":null,\"discountClass\":\"PRODUCT\",\"discountClasses\":[\"PRODUCT\"]}","1638618595695":"null","1639605371247":"{\"config\":{\"message\":\"Wholesale Basic Discount\",\"isEnabled\":true,\"customLogic\":{\"id\":\"converted-legacy-root\",\"type\":\"ROOT\",\"entryPoint\":{\"id\":\"converted-legacy-criteria\",\"type\":\"CHECK_IF\",\"matchType\":\"AND\",\"conditions\":[{\"type\":\"CUSTOMER_ELIGIBILITY\",\"includeOrExclude\":\"INCLUDE\",\"eligibility\":{\"type\":\"SPECIFIC_CUSTOMER_TAGS\",\"tagsToCheck\":[\"Wholesale Basic\"]}},{\"type\":\"PRODUCT_ELIGIBILITY\",\"includeOrExclude\":\"INCLUDE\",\"eligibility\":{\"type\":\"SPECIFIC_COLLECTIONS\",\"tagsToCheck\":[],\"selectedCollections\":[],\"asListOfIds\":\"474194706754\"}}],\"then\":{\"id\":\"converted-legacy-discount\",\"type\":\"APPLY_DISCOUNT\",\"title\":\"Wholesale Oils 40% OFF\",\"value\":{\"type\":\"PERCENTAGE\",\"percentage\":\"40\",\"quantity\":null},\"dimensions\":{\"width\":332,\"height\":336},\"position\":{\"x\":655.4544613350957,\"y\":-0.7081295439524524}},\"otherwise\":{\"id\":\"check-if559\",\"type\":\"CHECK_IF\",\"matchType\":\"AND\",\"then\":{\"id\":\"apply-discount897\",\"type\":\"APPLY_DISCOUNT\",\"value\":{\"type\":\"PERCENTAGE\",\"percentage\":\"20\"},\"dimensions\":{\"width\":332,\"height\":336},\"position\":{\"x\":1045.7081295439525,\"y\":384.7081295439524},\"title\":\"Wholesale Kits 20% OFF\"},\"otherwise\":null,\"conditions\":[{\"type\":\"CUSTOMER_ELIGIBILITY\",\"includeOrExclude\":\"INCLUDE\",\"eligibility\":{\"type\":\"SPECIFIC_CUSTOMER_TAGS\",\"tagsToCheck\":[\"Wholesale Basic\"]}},{\"type\":\"PRODUCT_ELIGIBILITY\",\"includeOrExclude\":\"INCLUDE\",\"eligibility\":{\"type\":\"SPECIFIC_COLLECTIONS\",\"selectedCollections\":[],\"asListOfIds\":\"475126694210\"}}],\"dimensions\":{\"width\":292,\"height\":233},\"position\":{\"x\":657,\"y\":384.7081295439524},\"tooltips\":{}},\"dimensions\":{\"width\":283,\"height\":213},\"position\":{\"x\":246,\"y\":0},\"tooltips\":{}},\"dimensions\":{\"width\":150,\"height\":0},\"position\":{\"x\":0,\"y\":0}},\"customerEligibility\":{\"type\":\"ALL_CUSTOMERS\"},\"productEligibility\":{\"type\":\"ALL_PRODUCTS\"},\"developerOptions\":{\"alwaysThrow\":false},\"minimumPurchaseRequirements\":{\"requirementType\":\"NONE\",\"quantity\":\"0\",\"subtotal\":\"0\",\"appliesTo\":\"ELIGIBLE_LINE_ITEMS\"},\"maximumPurchaseRequirements\":{\"requirementType\":\"NONE\",\"quantity\":\"0\",\"subtotal\":\"0\",\"appliesTo\":\"ELIGIBLE_LINE_ITEMS\"},\"value\":{\"type\":\"PERCENTAGE\",\"percentage\":\"0\"},\"appliesToSellingPlans\":\"ALL_SELLING_PLANS\",\"salePriceHandlingStrategy\":\"APPLY_TO_COMPARE_AT_PRICE\"}
478,\"startDate\":\"2024-10-11T12:01:37Z\",\"endDate\":null,\"discountClass\":\"PRODUCT\",\"discountClasses\":[\"PRODUCT\"]}","1658202030447":"null","1658202554735":"null","1658202587503":"null","1665488093551":"null","1665490256239":"null","1666257387887":"null","1666470805871":"null","1668327965039":"null","1669053186415":"{\"config\":{\"message\":\"Subscription + Oilty Plus Regular Combo\",\"isEnabled\":true,\"customLogic\":{\"id\":\"converted-legacy-root\",\"type\":\"ROOT\",\"entryPoint\":{\"id\":\"check-if86\",\"type\":\"CHECK_IF\",\"matchType\":\"AND\",\"then\":{\"id\":\"check-if338\",\"type\":\"CHECK_IF\",\"matchType\":\"AND\",\"then\":{\"id\":\"apply-discount493\",\"type\":\"APPLY_DISCOUNT\",\"value\":{\"type\":\"PERCENTAGE\",\"percentage\":\"50\"},\"dimensions\":{\"width\":332,\"height\":244},\"position\":{\"x\":1040.411214951014,\"y\":0},\"title\":\"Oilty Plus + Sub Combo\"},\"otherwise\":null,\"conditions\":[{\"type\":\"PRODUCT_ELIGIBILITY\",\"includeOrExclude\":\"EXCLUDE\",\"eligibility\":{\"type\":\"SPECIFIC_COLLECTIONS\",\"selectedCollections\":[],\"asListOfIds\":\"463206875458\"}},{\"type\":\"SELLING_PLAN\",\"includeOrExclude\":\"INCLUDE\",\"appliesTo\":\"ONE_TIME_ONLY\"},{\"type\":\"PURCHASE_REQUIREMENTS\",\"minOrMax\":\"MIN\",\"requirements\":{\"requirementType\":\"SUBTOTAL\",\"quantity\":\"0\",\"subtotal\":\"35.00\",\"appliesTo\":\"ELIGIBLE_LINE_ITEMS\"}}],\"dimensions\":{\"width\":292,\"height\":286},\"position\":{\"x\":642,\"y\":0},\"tooltips\":{}},\"otherwise\":{\"id\":\"check-if524\",\"type\":\"CHECK_IF\",\"matchType\":\"AND\",\"then\":{\"id\":\"apply-discount645\",\"type\":\"APPLY_DISCOUNT\",\"value\":{\"type\":\"PERCENTAGE\",\"percentage\":\"50\"},\"dimensions\":{\"width\":332,\"height\":308},\"position\":{\"x\":1035.9275540169886,\"y\":331.3098152276321},\"title\":\"Oilty Plus + Sub Combo\"},\"otherwise\":null,\"conditions\":[{\"type\":\"IF_IN_CART\",\"eligibility\":{\"type\":\"SPECIFIC_PRODUCTS\",\"selectedProducts\":[],\"asListOfIds\":\"8215212327234\"}},{\"type\":\"PRODUCT_ELIGIBILITY\",\"includeOrExclude\":\"EXCLUDE\",\"eligibility\":{\"type\":\"SPECIFIC_COLLECTIONS\",\"selectedCollections\":[],\"asListOfIds\":\"463206875458\"}},{\"type\":\"SELLING_PLAN\",\"includeOrExclude\":\"INCLUDE\",\"appliesTo\":\"ONE_TIME_ONLY\"},{\"type\":\"PURCHASE_REQUIREMENTS\",\"minOrMax\":\"MIN\",\"requirements\":{\"requirementType\":\"SUBTOTAL\",\"quantity\":\"0\",\"subtotal\":\"35.00\",\"appliesTo\":\"ELIGIBLE_LINE_ITEMS\"}},{\"type\":\"CUSTOMER_ELIGIBILITY\",\"includeOrExclude\":\"INCLUDE\",\"eligibility\":{\"type\":\"SPECIFIC_CUSTOMER_TAGS\",\"tagsToCheck\":[\"Special Postcard Offer\"]}}],\"dimensions\":{\"width\":292,\"height\":432},\"position\":{\"x\":641.7693078539081,\"y\":313.81315377689657},\"tooltips\":{}},\"conditions\":[{\"type\":\"CUSTOMER_ELIGIBILITY\",\"includeOrExclude\":\"INCLUDE\",\"eligibility\":{\"type\":\"SPECIFIC_CUSTOMERS\",\"selectedCustomers\":[{\"id\":\"gid:\/\/shopify\/Customer\/7106794291522\",\"name\":\"Karlo Vladomar Jamandores\",\"caption\":\"[email protected]\"}]}},{\"type\":\"CUSTOMER_ELIGIBILITY\",\"includeOrExclude\":\"INCLUDE\",\"eligibility\":{\"type\":\"SPECIFIC_CUSTOMER_TAGS\",\"tagsToCheck\":[\"Oilty Plus\"]}},{\"type\":\"CUSTOMER_ELIGIBILITY\",\"includeOrExclude\":\"INCLUDE\",\"eligibility\":{\"type\":\"SPECIFIC_CUSTOMER_TAGS\",\"tagsToCheck\":[\"Has active product subscriptions\"]}}],\"dimensions\":{\"width\":292,\"height\":306},\"position\":{\"x\":246,\"y\":0},\"tooltips\":{}},\"dimensions\":{\"width\":150,\"height\":0},\"position\":{\"x\":0,\"y\":0}},\"customerEligibility\":{\"type\":\"ALL_CUSTOMERS\"},\"productEligibility\":{\"type\":\"ALL_PRODUCTS\"},\"developerOptions\":{\"alwaysThrow\":false},\"minimumPurchaseRequirements\":{\"requirementType\":\"NONE\",\"quantity\":\"0\",\"subtotal\":\"0\",\"appliesTo\":\"ELIGIBLE_LINE_ITEMS\"},\"maximumPurchaseRequirements\":{\"requirementType\":\"NONE\",\"quantity\":\"0\",\"subtotal\":\"0\",\"appliesTo\":\"ELIGIBLE_LINE_ITEMS\"},\"value\":{\"type\":\"PERCENTAGE\",\"percentage\":\"0\"},\"appliesToSellingPlans\":\"ALL_SELLING_PLANS\",\"salePriceHandlingStrategy\":\"APPLY_TO_COMPARE_AT_PRICE\",\"cartLineSortOrder\":\"NONE\"}
478,\"startDate\":\"2024-05-13T18:03:58Z\",\"endDate\":\"2025-02-10T13:20:25Z\",\"discountClass\":\"PRODUCT\",\"discountClasses\":[\"PRODUCT\"]}","1669241602415":"null","1669635735919":"null","1670596854127":"null","1670601015663":"null","1670604489071":"null","1671074808175":"null","1672310030703":"null","1673341960559":"null","1673345925487":"null","1673467429231":"null","1674826416495":"{\"config\":{\"message\":\"Oilty Plus + Special Postcard Offer\",\"isEnabled\":true,\"customLogic\":{\"id\":\"converted-legacy-root\",\"type\":\"ROOT\",\"entryPoint\":{\"id\":\"check-if86\",\"type\":\"CHECK_IF\",\"matchType\":\"AND\",\"then\":{\"id\":\"check-if338\",\"type\":\"CHECK_IF\",\"matchType\":\"AND\",\"then\":{\"id\":\"apply-discount493\",\"type\":\"APPLY_DISCOUNT\",\"value\":{\"type\":\"PERCENTAGE\",\"percentage\":\"28.65\"},\"dimensions\":{\"width\":332,\"height\":316},\"position\":{\"x\":1039.2764082173626,\"y\":0},\"title\":\"Addt'l Oilty Plus Discount\"},\"otherwise\":null,\"conditions\":[{\"type\":\"PRODUCT_ELIGIBILITY\",\"includeOrExclude\":\"EXCLUDE\",\"eligibility\":{\"type\":\"SPECIFIC_COLLECTIONS\",\"selectedCollections\":[],\"asListOfIds\":\"639998853487,648980037999,463206875458\"}},{\"type\":\"SELLING_PLAN\",\"includeOrExclude\":\"INCLUDE\",\"appliesTo\":\"SUBSCRIPTIONS_ONLY\"},{\"type\":\"PURCHASE_REQUIREMENTS\",\"minOrMax\":\"MIN\",\"requirements\":{\"requirementType\":\"SUBTOTAL\",\"quantity\":\"0\",\"subtotal\":\"35.00\",\"appliesTo\":\"ENTIRE_ORDER\"}},{\"type\":\"PRODUCT_ELIGIBILITY\",\"includeOrExclude\":\"EXCLUDE\",\"eligibility\":{\"type\":\"SPECIFIC_PRODUCT_VARIANTS\",\"selectedProductVariants\":[],\"compactFormat\":{\"8025567494466\":\"52064202457455\",\"8025539838274\":\"52064210354543\",\"8025537380674\":\"52064215433583\",\"8025523618114\":\"52064222282095\",\"8025534529858\":\"52064228901231\",\"8025533776194\":\"52064234307951\",\"8025539084610\":\"52064239780207\",\"8025532334402\":\"52064259408239\"}}}],\"dimensions\":{\"width\":292,\"height\":711},\"position\":{\"x\":642,\"y\":0},\"tooltips\":{}},\"otherwise\":null,\"conditions\":[{\"type\":\"CUSTOMER_ELIGIBILITY\",\"includeOrExclude\":\"INCLUDE\",\"eligibility\":{\"type\":\"SPECIFIC_CUSTOMER_TAGS\",\"tagsToCheck\":[\"Oilty Plus\"]}},{\"type\":\"CUSTOMER_ELIGIBILITY\",\"includeOrExclude\":\"INCLUDE\",\"eligibility\":{\"type\":\"SPECIFIC_CUSTOMER_TAGS\",\"tagsToCheck\":[\"Special Postcard Offer\"]}},{\"type\":\"CUSTOMER_ELIGIBILITY\",\"includeOrExclude\":\"INCLUDE\",\"eligibility\":{\"type\":\"SPECIFIC_CUSTOMER_TAGS\",\"tagsToCheck\":[\"Subscription Discount Combo\"]}}],\"dimensions\":{\"width\":292,\"height\":306},\"position\":{\"x\":246,\"y\":-1.3047377326565055},\"tooltips\":{}},\"dimensions\":{\"width\":150,\"height\":0},\"position\":{\"x\":0,\"y\":0}},\"customerEligibility\":{\"type\":\"ALL_CUSTOMERS\"},\"productEligibility\":{\"type\":\"ALL_PRODUCTS\"},\"developerOptions\":{\"alwaysThrow\":false},\"minimumPurchaseRequirements\":{\"requirementType\":\"NONE\",\"quantity\":\"0\",\"subtotal\":\"0\",\"appliesTo\":\"ELIGIBLE_LINE_ITEMS\"},\"maximumPurchaseRequirements\":{\"requirementType\":\"NONE\",\"quantity\":\"0\",\"subtotal\":\"0\",\"appliesTo\":\"ELIGIBLE_LINE_ITEMS\"},\"value\":{\"type\":\"PERCENTAGE\",\"percentage\":\"0\"},\"appliesToSellingPlans\":\"ALL_SELLING_PLANS\",\"salePriceHandlingStrategy\":\"STACK\",\"cartLineSortOrder\":\"NONE\"},\"startDate\":\"2024-05-13T18:03:58Z\",\"endDate\":null,\"discountClass\":\"PRODUCT\",\"discountClasses\":[\"PRODUCT\"]}","1676495749487":"{\"config\":{\"message\":\"Oilty Plus + Discount Combo\",\"isEnabled\":true,\"customLogic\":{\"id\":\"converted-legacy-root\",\"type\":\"ROOT\",\"entryPoint\":{\"id\":\"check-if86\",\"type\":\"CHECK_IF\",\"matchType\":\"AND\",\"then\":{\"id\":\"check-if338\",\"type\":\"CHECK_IF\",\"matchType\":\"AND\",\"then\":{\"id\":\"apply-discount493\",\"type\":\"APPLY_DISCOUNT\",\"value\":{\"type\":\"PERCENTAGE\",\"percentage\":\"23.5\"},\"dimensions\":{\"width\":332,\"height\":308},\"position\":{\"x\":1021.0446147553998,\"y\":-20.257548291069895},\"title\":\"Addt'l Oilty Plus Discount\"},\"otherwise\":null,\"conditions\":[{\"type\":\"PRODUCT_ELIGIBILITY\",\"includeOrExclude\":\"EXCLUDE\",\"eligibility\":{\"type\":\"SPECIFIC_COLLECTIONS\",\"selectedCollections\":[],\"asListOfIds\":\"639998853487,429243957570,463206875458\"}},{\"type\":\"SELLING_PLAN\",\"includeOrExclude\":\"INCLUDE\",\"appliesTo\":\"SUBSCRIPTIONS_ONLY\"},{\"type\":\"PURCHASE_REQUIREMENTS\",\"minOrMax\":\"MIN\",\"requirements\":{\"requirementType\":\"SUBTOTAL\",\"quantity\":\"0\",\"subtotal\":\"35.00\",\"appliesTo\":\"ENTIRE_ORDER\"}},{\"type\":\"PRODUCT_ELIGIBILITY\",\"includeOrExclude\":\"EXCLUDE\",\"eligibility\":{\"type\":\"SPECIFIC_PRODUCT_VARIANTS\",\"selectedProductVariants\":[],\"compactFormat\":{\"14725145461103\":\"52018307629423\",\"8025567330626\":\"52064
478188629359\",\"8025567494466\":\"52064202457455\",\"8025539838274\":\"52064210354543\",\"8025537380674\":\"52064215433583\",\"8025523618114\":\"52064222282095\",\"8025534529858\":\"52064228901231\",\"8025533776194\":\"52064234307951\",\"8025539084610\":\"52064239780207\",\"8025532334402\":\"52064259408239\"}}}],\"dimensions\":{\"width\":292,\"height\":719},\"position\":{\"x\":642,\"y\":0},\"tooltips\":{}},\"otherwise\":null,\"conditions\":[{\"type\":\"CUSTOMER_ELIGIBILITY\",\"includeOrExclude\":\"INCLUDE\",\"eligibility\":{\"type\":\"SPECIFIC_CUSTOMER_TAGS\",\"tagsToCheck\":[\"Oilty Plus\"]}},{\"type\":\"CUSTOMER_ELIGIBILITY\",\"includeOrExclude\":\"INCLUDE\",\"eligibility\":{\"type\":\"SPECIFIC_CUSTOMER_TAGS\",\"tagsToCheck\":[\"Subscription Discount Combo\"]}}],\"dimensions\":{\"width\":292,\"height\":233},\"position\":{\"x\":246,\"y\":-1.3047377326565055},\"tooltips\":{}},\"dimensions\":{\"width\":150,\"height\":0},\"position\":{\"x\":0,\"y\":0}},\"customerEligibility\":{\"type\":\"ALL_CUSTOMERS\"},\"productEligibility\":{\"type\":\"ALL_PRODUCTS\"},\"developerOptions\":{\"alwaysThrow\":false},\"minimumPurchaseRequirements\":{\"requirementType\":\"NONE\",\"quantity\":\"0\",\"subtotal\":\"0\",\"appliesTo\":\"ELIGIBLE_LINE_ITEMS\"},\"maximumPurchaseRequirements\":{\"requirementType\":\"NONE\",\"quantity\":\"0\",\"subtotal\":\"0\",\"appliesTo\":\"ELIGIBLE_LINE_ITEMS\"},\"value\":{\"type\":\"PERCENTAGE\",\"percentage\":\"0\"},\"appliesToSellingPlans\":\"ALL_SELLING_PLANS\",\"salePriceHandlingStrategy\":\"STACK\",\"cartLineSortOrder\":\"NONE\"},\"startDate\":\"2024-05-13T18:03:58Z\",\"endDate\":null,\"discountClass\":\"PRODUCT\",\"discountClasses\":[\"PRODUCT\"]}","1677628309871":"{\"config\":{\"message\":\"Oilty Plus + Discount Combo - On Singles and Blends\",\"isEnabled\":true,\"customLogic\":{\"id\":\"converted-legacy-root\",\"type\":\"ROOT\",\"entryPoint\":{\"id\":\"check-if86\",\"type\":\"CHECK_IF\",\"matchType\":\"AND\",\"then\":{\"id\":\"check-if338\",\"type\":\"CHECK_IF\",\"matchType\":\"AND\",\"then\":{\"id\":\"apply-discount493\",\"type\":\"APPLY_DISCOUNT\",\"value\":{\"type\":\"PERCENTAGE\",\"percentage\":\"35\"},\"dimensions\":{\"width\":332,\"height\":340},\"position\":{\"x\":1021.0446147553998,\"y\":-20.257548291069895},\"title\":\"Oilty Plus + Subscriber Discount\"},\"otherwise\":null,\"conditions\":[{\"type\":\"PRODUCT_ELIGIBILITY\",\"includeOrExclude\":\"EXCLUDE\",\"eligibility\":{\"type\":\"SPECIFIC_COLLECTIONS\",\"selectedCollections\":[],\"asListOfIds\":\"639998853487,648980037999,463206875458\"}},{\"type\":\"SELLING_PLAN\",\"includeOrExclude\":\"INCLUDE\",\"appliesTo\":\"ONE_TIME_ONLY\"},{\"type\":\"PRODUCT_ELIGIBILITY\",\"includeOrExclude\":\"INCLUDE\",\"eligibility\":{\"type\":\"SPECIFIC_COLLECTIONS\",\"selectedCollections\":[],\"asListOfIds\":\"429147455810,429147423042\"}},{\"type\":\"PURCHASE_REQUIREMENTS\",\"minOrMax\":\"MIN\",\"requirements\":{\"requirementType\":\"SUBTOTAL\",\"quantity\":\"0\",\"subtotal\":\"35.00\",\"appliesTo\":\"ENTIRE_ORDER\"}},{\"type\":\"PRODUCT_ELIGIBILITY\",\"includeOrExclude\":\"EXCLUDE\",\"eligibility\":{\"type\":\"SPECIFIC_PRODUCT_VARIANTS\",\"selectedProductVariants\":[],\"compactFormat\":{\"8025567494466\":\"52064202457455\",\"8025539838274\":\"52064210354543\",\"8025537380674\":\"52064215433583\",\"8025523618114\":\"52064222282095\",\"8025534529858\":\"52064228901231\",\"8025533776194\":\"52064234307951\",\"8025539084610\":\"52064239780207\",\"8025532334402\":\"52064259408239\"}}}],\"dimensions\":{\"width\":292,\"height\":784},\"position\":{\"x\":642,\"y\":0},\"tooltips\":{}},\"otherwise\":null,\"conditions\":[{\"type\":\"CUSTOMER_ELIGIBILITY\",\"includeOrExclude\":\"INCLUDE\",\"eligibility\":{\"type\":\"SPECIFIC_CUSTOMER_TAGS\",\"tagsToCheck\":[\"Oilty Plus\"]}},{\"type\":\"CUSTOMER_ELIGIBILITY\",\"includeOrExclude\":\"INCLUDE\",\"eligibility\":{\"type\":\"SPECIFIC_CUSTOMER_TAGS\",\"tagsToCheck\":[\"Subscription Discount Combo\"]}}],\"dimensions\":{\"width\":292,\"height\":233},\"position\":{\"x\":246,\"y\":-1.3047377326565055},\"tooltips\":{}}
478,\"dimensions\":{\"width\":150,\"height\":0},\"position\":{\"x\":0,\"y\":0}},\"customerEligibility\":{\"type\":\"ALL_CUSTOMERS\"},\"productEligibility\":{\"type\":\"ALL_PRODUCTS\"},\"developerOptions\":{\"alwaysThrow\":false},\"minimumPurchaseRequirements\":{\"requirementType\":\"NONE\",\"quantity\":\"0\",\"subtotal\":\"0\",\"appliesTo\":\"ELIGIBLE_LINE_ITEMS\"},\"maximumPurchaseRequirements\":{\"requirementType\":\"NONE\",\"quantity\":\"0\",\"subtotal\":\"0\",\"appliesTo\":\"ELIGIBLE_LINE_ITEMS\"},\"value\":{\"type\":\"PERCENTAGE\",\"percentage\":\"0\"},\"appliesToSellingPlans\":\"ALL_SELLING_PLANS\",\"salePriceHandlingStrategy\":\"APPLY_TO_COMPARE_AT_PRICE\",\"cartLineSortOrder\":\"NONE\"},\"startDate\":\"2024-05-13T18:03:58Z\",\"endDate\":null,\"discountClass\":\"PRODUCT\",\"discountClasses\":[\"PRODUCT\"]}","1677633978735":"{\"config\":{\"message\":\"Oilty Plus + Special Postcard Offer + Discount Combo\",\"isEnabled\":true,\"customLogic\":{\"id\":\"converted-legacy-root\",\"type\":\"ROOT\",\"entryPoint\":{\"id\":\"check-if86\",\"type\":\"CHECK_IF\",\"matchType\":\"AND\",\"then\":{\"id\":\"check-if338\",\"type\":\"CHECK_IF\",\"matchType\":\"AND\",\"then\":{\"id\":\"apply-discount493\",\"type\":\"APPLY_DISCOUNT\",\"value\":{\"type\":\"PERCENTAGE\",\"percentage\":\"50\"},\"dimensions\":{\"width\":332,\"height\":340},\"position\":{\"x\":1006.1704056338626,\"y\":2.0268981173571348},\"title\":\"Oilty Plus + Subscriber Discount\"},\"otherwise\":null,\"conditions\":[{\"type\":\"PRODUCT_ELIGIBILITY\",\"includeOrExclude\":\"EXCLUDE\",\"eligibility\":{\"type\":\"SPECIFIC_COLLECTIONS\",\"selectedCollections\":[],\"asListOfIds\":\"639998853487,648980037999,463206875458\"}},{\"type\":\"SELLING_PLAN\",\"includeOrExclude\":\"INCLUDE\",\"appliesTo\":\"ONE_TIME_ONLY\"},{\"type\":\"PRODUCT_ELIGIBILITY\",\"includeOrExclude\":\"INCLUDE\",\"eligibility\":{\"type\":\"SPECIFIC_COLLECTIONS\",\"selectedCollections\":[],\"asListOfIds\":\"429147423042,429147455810\"}},{\"type\":\"PURCHASE_REQUIREMENTS\",\"minOrMax\":\"MIN\",\"requirements\":{\"requirementType\":\"SUBTOTAL\",\"quantity\":\"0\",\"subtotal\":\"35.00\",\"appliesTo\":\"ENTIRE_ORDER\"}},{\"type\":\"PRODUCT_ELIGIBILITY\",\"includeOrExclude\":\"EXCLUDE\",\"eligibility\":{\"type\":\"SPECIFIC_PRODUCT_VARIANTS\",\"selectedProductVariants\":[],\"compactFormat\":{\"8025567494466\":\"52064202457455\",\"8025539838274\":\"52064210354543\",\"8025537380674\":\"52064215433583\",\"8025523618114\":\"52064222282095\",\"8025534529858\":\"52064228901231\",\"8025533776194\":\"52064234307951\",\"8025539084610\":\"52064239780207\",\"8025532334402\":\"52064259408239\"}}}],\"dimensions\":{\"width\":292,\"height\":784},\"position\":{\"x\":642,\"y\":0},\"tooltips\":{}},\"otherwise\":null,\"conditions\":[{\"type\":\"CUSTOMER_ELIGIBILITY\",\"includeOrExclude\":\"INCLUDE\",\"eligibility\":{\"type\":\"SPECIFIC_CUSTOMER_TAGS\",\"tagsToCheck\":[\"Oilty Plus\"]}},{\"type\":\"CUSTOMER_ELIGIBILITY\",\"includeOrExclude\":\"INCLUDE\",\"eligibility\":{\"type\":\"SPECIFIC_CUSTOMER_TAGS\",\"tagsToCheck\":[\"Special Postcard Offer\"]}},{\"type\":\"CUSTOMER_ELIGIBILITY\",\"includeOrExclude\":\"INCLUDE\",\"eligibility\":{\"type\":\"SPECIFIC_CUSTOMER_TAGS\",\"tagsToCheck\":[\"Subscription Discount Combo\"]}}],\"dimensions\":{\"width\":292,\"height\":306},\"position\":{\"x\":246,\"y\":-1.3047377326565055},\"tooltips\":{}},\"dimensions\":{\"width\":150,\"height\":0},\"position\":{\"x\":0,\"y\":0}},\"customerEligibility\":{\"type\":\"ALL_CUSTOMERS\"},\"productEligibility\":{\"type\":\"ALL_PRODUCTS\"},\"developerOptions\":{\"alwaysThrow\":false},\"minimumPurchaseRequirements\":{\"requirementType\":\"NONE\",\"quantity\":\"0\",\"subtotal\":\"0\",\"appliesTo\":\"ELIGIBLE_LINE_ITEMS\"},\"maximumPurchaseRequirements\":{\"requirementType\":\"NONE\",\"quantity\":\"0\",\"subtotal\":\"0\",\"appliesTo\":\"ELIGIBLE_LINE_ITEMS\"},\"value\":{\"type\":\"PERCENTAGE\",\"percentage\":\"0\"},\"appliesToSellingPlans\":\"ALL_SELLING_PLANS\",\"salePriceHandlingStrategy\":\"APPLY_TO_COMPARE_AT_PRICE\",\"cartLineSortOrder\":\"NONE\"}
478,\"startDate\":\"2024-05-13T18:03:58Z\",\"endDate\":null,\"discountClass\":\"PRODUCT\",\"discountClasses\":[\"PRODUCT\"]}","1679006761327":"null","1680937353583":"null","1680981492079":"null","1680982016367":"null","1680982409583":"null","1683166626159":"null","1684690076015":"null","1684696760687":"null","1684697186671":"null","1686201106799":"null","1686213722479":"null","1688972984687":"{\"config\":{\"message\":\"Oilty Plus - Early Access - Buy 2, get another 1 Free\",\"isEnabled\":true,\"customLogic\":{\"id\":\"converted-legacy-root\",\"type\":\"ROOT\",\"entryPoint\":{\"id\":\"check-if39\",\"type\":\"CHECK_IF\",\"matchType\":\"AND\",\"then\":{\"id\":\"entrypoint\",\"type\":\"BUY_X\",\"requirements\":[{\"quantity\":3,\"productEligibility\":{\"type\":\"SPECIFIC_COLLECTIONS\",\"selectedCollections\":[],\"asListOfIds\":\"472076222786\",\"selectedProductVariants\":[],\"compactFormat\":{\"8047238250818\":\"49116053209410\",\"8286183686466\":\"45012481081666,45012481114434,45012481147202\",\"9073966842178\":\"47745637286210\",\"8833223917890\":\"47069438607682\",\"14622951801199\":\"51901252305263\",\"8025529155906\":\"44111254913346\"}}}],\"then\":{\"id\":\"entrypoint-then-apply-discount\",\"type\":\"APPLY_DISCOUNT\",\"title\":\"Buy 2, get another 1 free\",\"value\":{\"type\":\"GET_Y\",\"customerGets\":{\"type\":\"SPECIFIC_COLLECTIONS\",\"selectedCollections\":[],\"asListOfIds\":\"472076222786\",\"selectedProductVariants\":[],\"compactFormat\":{\"8047238250818\":\"49116053209410\",\"8286183686466\":\"45012481081666,45012481114434,45012481147202\",\"9073966842178\":\"47745637286210\",\"8833223917890\":\"47069438607682\",\"14622951801199\":\"51901252305263\",\"8025529155906\":\"44111254913346\"}},\"atDiscountedValue\":{\"type\":\"PERCENTAGE\",\"percentage\":\"100\"},\"quantity\":\"1\"},\"tooltips\":{},\"dimensions\":{\"width\":650,\"height\":964},\"position\":{\"x\":1377.1307017543859,\"y\":87.08746867167919}},\"otherwise\":null,\"dimensions\":{\"width\":324,\"height\":472},\"position\":{\"x\":578,\"y\":0}},\"otherwise\":null,\"conditions\":[{\"type\":\"CUSTOMER_ELIGIBILITY\",\"includeOrExclude\":\"INCLUDE\",\"eligibility\":{\"type\":\"SPECIFIC_CUSTOMER_TAGS\",\"tagsToCheck\":[\"Oilty Plus\"]}}],\"position\":{\"x\":246,\"y\":0},\"dimensions\":{\"width\":247,\"height\":160},\"tooltips\":{}},\"dimensions\":{\"width\":150,\"height\":0},\"position\":{\"x\":0,\"y\":0}},\"customerEligibility\":{\"type\":\"ALL_CUSTOMERS\"},\"productEligibility\":{\"type\":\"ALL_PRODUCTS\"},\"developerOptions\":{\"alwaysThrow\":false},\"minimumPurchaseRequirements\":{\"requirementType\":\"NONE\",\"quantity\":\"0\",\"subtotal\":\"0\",\"appliesTo\":\"ELIGIBLE_LINE_ITEMS\"},\"maximumPurchaseRequirements\":{\"requirementType\":\"NONE\",\"quantity\":\"0\",\"subtotal\":\"0\",\"appliesTo\":\"ELIGIBLE_LINE_ITEMS\"},\"value\":{\"type\":\"PERCENTAGE\",\"percentage\":\"0\"},\"appliesToSellingPlans\":\"ALL_SELLING_PLANS\",\"salePriceHandlingStrategy\":\"APPLY_TO_COMPARE_AT_PRICE\",\"cartLineSortOrder\":\"LOWEST_PRICED_PRODUCTS\"},\"startDate\":\"2026-05-21T06:00:00Z\",\"endDate\":\"2026-05-22T05:59:59Z\",\"discountClass\":\"PRODUCT\",\"discountClasses\":[\"PRODUCT\"]}","1688980423023":"{\"config\":{\"message\":\"Buy 2, get another 1 Free\",\"isEnabled\":true,\"customLogic\":{\"id\":\"converted-legacy-root\",\"type\":\"ROOT\",\"entryPoint\":{\"id\":\"check-if39\",\"type\":\"CHECK_IF\",\"matchType\":\"AND\",\"then\":{\"id\":\"buy-x726\",\"type\":\"BUY_X\",\"requirements\":[{\"quantity\":3,\"productEligibility\":{\"type\":\"SPECIFIC_PRODUCT_VARIANTS\",\"selectedCollections\":[],\"asListOfIds\":\"429146669378\",\"selectedProducts\":[],\"selectedProductVariants\":[],\"compactFormat\":{\"8025523618114\":\"52064222282095\",\"8025567494466\":\"52064202457455\",\"8025533776194\":\"52064234307951\",\"14725145461103\":\"52681213509999\",\"8025539084610\":\"52064239780207\"}}}],\"then\":{\"id\":\"apply-discount518\",\"type\":\"APPLY_DISCOUNT\",\"value\":{\"type\":\"GET_Y\",\"customerGets\":{\"type\":\"SPECIFIC_PRODUCT_VARIANTS\",\"selectedCollections\":[],\"asListOfIds\":\"\",\"selectedProducts\":[],\"selectedProductVariants\":[],\"compactFormat\":{\"8025523618114\":\"52064222282095\",\"8025567494466\":\"52064202457455\",\"8025533776194\":\"52064234307951\",\"14725145461103\":\"52681213509999\",\"8025539084610\":\"52064239780207\"}},\"atDiscountedValue\":{\"type\":\"PERCENTAGE\",\"percentage\":\"100\"},\"quantity\":\"1\"}
478,\"dimensions\":{\"width\":650,\"height\":1336},\"position\":{\"x\":1171.0000105765869,\"y\":20.000000846126945},\"title\":\"Buy 2, get another 1 Free\"},\"otherwise\":null,\"position\":{\"x\":589.9869602771422,\"y\":-0.9869602771422592},\"dimensions\":{\"width\":587,\"height\":868}},\"otherwise\":null,\"conditions\":[{\"type\":\"CUSTOMER_ELIGIBILITY\",\"includeOrExclude\":\"INCLUDE\",\"eligibility\":{\"type\":\"ALL_CUSTOMERS\"}}],\"position\":{\"x\":246,\"y\":0},\"dimensions\":{\"width\":228,\"height\":212},\"tooltips\":{}},\"dimensions\":{\"width\":150,\"height\":0},\"position\":{\"x\":0,\"y\":0}},\"customerEligibility\":{\"type\":\"ALL_CUSTOMERS\"},\"productEligibility\":{\"type\":\"ALL_PRODUCTS\"},\"developerOptions\":{\"alwaysThrow\":false},\"minimumPurchaseRequirements\":{\"requirementType\":\"NONE\",\"quantity\":\"0\",\"subtotal\":\"0\",\"appliesTo\":\"ELIGIBLE_LINE_ITEMS\"},\"maximumPurchaseRequirements\":{\"requirementType\":\"NONE\",\"quantity\":\"0\",\"subtotal\":\"0\",\"appliesTo\":\"ELIGIBLE_LINE_ITEMS\"},\"value\":{\"type\":\"PERCENTAGE\",\"percentage\":\"0\"},\"appliesToSellingPlans\":\"ALL_SELLING_PLANS\",\"salePriceHandlingStrategy\":\"APPLY_TO_COMPARE_AT_PRICE\",\"cartLineSortOrder\":\"LOWEST_PRICED_PRODUCTS\"},\"startDate\":\"2026-08-15T06:00:00Z\",\"endDate\":\"2026-08-16T05:59:59Z\",\"discountClass\":\"PRODUCT\",\"discountClasses\":[\"PRODUCT\"]}","1691298496879":"null","1696461881711":"null","1696462340463":"null","1696462799215":"null","1696463061359":"null","1698844279151":"null","1720390156655":"null","1732104192367":"null","1733161058671":"null","1734285361519":"null","1735133626735":"null","1736314913135":"null","1737187754351":"null","1737316434287":"null","1738645209455":"null","1751098655087":"null","1751472177519":"null","1769778577775":"{\"config\":{\"message\":\"BOGO Mix and Match\",\"isEnabled\":true,\"customLogic\":{\"id\":\"root\",\"type\":\"ROOT\",\"entryPoint\":{\"id\":\"check-if39\",\"type\":\"CHECK_IF\",\"matchType\":\"AND\",\"conditions\":[{\"type\":\"CUSTOMER_ELIGIBILITY\",\"includeOrExclude\":\"INCLUDE\",\"eligibility\":{\"type\":\"ALL_CUSTOMERS\"}}],\"then\":{\"id\":\"buy-x726\",\"type\":\"BUY_X\",\"requirements\":[{\"productEligibility\":{\"type\":\"SPECIFIC_COLLECTIONS\",\"selectedCollections\":[],\"asListOfIds\":\"431063892290\"},\"quantity\":2}],\"then\":{\"id\":\"apply-discount518\",\"type\":\"APPLY_DISCOUNT\",\"title\":\"2026-09 - National Coffee Day BOGO\",\"value\":{\"type\":\"GET_Y\",\"customerGets\":{\"type\":\"SPECIFIC_COLLECTIONS\",\"selectedCollections\":[],\"asListOfIds\":\"431063892290\"},\"atDiscountedValue\":{\"type\":\"PERCENTAGE\",\"percentage\":\"100\"},\"quantity\":\"1\"},\"dimensions\":{\"width\":650,\"height\":964},\"position\":{\"x\":1166.8502160760586,\"y\":1.9375972342264483}},\"otherwise\":null,\"disableCurrencyConversion\":false,\"dimensions\":{\"width\":300,\"height\":0},\"position\":{\"x\":642,\"y\":0}},\"otherwise\":null,\"dimensions\":{\"width\":300,\"height\":0},\"position\":{\"x\":246,\"y\":0}},\"dimensions\":{\"width\":150,\"height\":0},\"position\":{\"x\":0,\"y\":0}},\"customerEligibility\":{\"type\":\"ALL_CUSTOMERS\"},\"productEligibility\":{\"type\":\"ALL_PRODUCTS\"},\"developerOptions\":{\"alwaysThrow\":false},\"minimumPurchaseRequirements\":{\"requirementType\":\"NONE\",\"quantity\":\"0\",\"subtotal\":\"0\",\"appliesTo\":\"ELIGIBLE_LINE_ITEMS\"},\"maximumPurchaseRequirements\":{\"requirementType\":\"NONE\",\"quantity\":\"0\",\"subtotal\":\"0\",\"appliesTo\":\"ELIGIBLE_LINE_ITEMS\"},\"value\":{\"type\":\"PERCENTAGE\",\"percentage\":\"0\"},\"appliesToSellingPlans\":\"ALL_SELLING_PLANS\",\"salePriceHandlingStrategy\":\"APPLY_TO_COMPARE_AT_PRICE\",\"cartLineSortOrder\":\"LOWEST_PRICED_PRODUCTS\"},\"startDate\":\"2026-09-25T06:00:00Z\",\"endDate\":\"2026-09-30T05:59:59Z\",\"discountClass\":\"PRODUCT\",\"discountClasses\":[\"PRODUCT\"]}","1773430309231":"null","1773586088303":"null","1779224150383":"null","1780893253999":"null","1780896366959":"null","1780902363503":"{\"config\":{\"message\":\"BOGO 50% OFF 15ml Oils\",\"isEnabled\":true,\"customLogic\":{\"id\":\"converted-legacy-root\",\"type\":\"ROOT\",\"entryPoint\":{\"id\":\"check-if39\",\"type\":\"CHECK_IF\",\"matchType\":\"AND\",\"then\":{\"id\":\"buy-x726\",\"type\":\"BUY_X\",\"requirements\":[{\"quantity\":2,\"productEligibility\":{\"type\":\"SPECIFIC_PRODUCT_VARIANTS\",\"selectedCollections\":[],\"asListOfIds\":\"650543464815\",\"selectedProducts\":[],\"selectedProductVariants\":[],\"compactFormat\":{\"8652751077698\":\"47078204834114\",\"8896924516674\":\"47226891534658\",\"8025515393346\":\"44111103918402\",\"8025520374082\":\"44111183642946\",\"8025522864450\":\"44111202025794\",\"8025523028290\":\"44111202353474\",\"8025523093826\":\"44111204254018\",\"8025526403394\":\"44111230861634\",\"8025526436162\":\"44111230894402\",\"8025526665538\":\"44111237382466\",\"8025526993218\":\"44111238955330\",\"8025526829378\":\"44111238758722\",\"8025527058754\":\"44111239184706\",\"9176715854146\":\"51879290405231\",\"8025566806338\":\"44111527149890\",\"8025553011010\":\"44111435759938\",\"9583563964738\":\"49109628092738\",\"8025528009026\":\"44111245574466\",\"8025534136642\":\"44111298625858\",\"8025528336706\":\"44111247835458\",\"8973668319554\":\"51879047856495\",\"8025529221442\":\"44111255273794\",\"8025529811266\":\"44111260877122\",\"8025530401090\":\"44111265956162\",\"8025539543362\":\"44111350333762\",\"8025531842882\":\"44111279882562\",\"8025563398466\":\"44111498117442\",\"8025532006722\":\"44111280800066\",\"8025567756610\":\"44111536488770\",\"8025567494466\":\"44111532425538\",\"9692562850114\":\"51986965954927\",\"8323577479490\":\"45140473479490\",\"8307945111874\":\"45092108239170\",\"8025544589634\":\"45739965546818\",\"8025534005570\":\"44111296135490\",\"8025568051522\":\"44111539437890\",\"9583530246466\":\"49109448720706\",\"8025568215362\":\"44111541109058\",\"9585364861250\":\"51879297483119\",\"9039492743490\":\"518793406385
47875\",\"8025535021378\":\"44111302885698\",\"8025535086914\":\"44111303016770\",\"8025535578434\":\"44111305474370\",\"8652750848322\":\"47078220398914\",\"8025536168258\":\"44111311503682\",\"8025536332098\":\"44111312027970\",\"8025536594242\":\"44111313469762\",\"8671334302018\":\"46808482775362\",\"8025536790850\":\"44111316844866\",\"8025537151298\":\"51752046952815\",\"8025567330626\":\"44111529771330\",\"8025537610050\":\"44111330902338\",\"8025539838274\":\"44111352037698\",\"8025538396482\":\"44111343288642\",\"8025538560322\":\"44111343714626\",\"8025538920770\":\"44111344959810\",\"8047231893826\":\"49037006864706\"}}}],\"then\":{\"id\":\"apply-discount518\",\"type\":\"APPLY_DISCOUNT\",\"value\":{\"type\":\"GET_Y\",\"customerGets\":{\"type\":\"SPECIFIC_PRODUCT_VARIANTS\",\"selectedCollections\":[],\"selectedProducts\":[],\"selectedProductVariants\":[],\"compactFormat\":{\"8652751077698\":\"47078204834114\",\"8896924516674\":\"47226891534658\",\"8025515393346\":\"44111103918402\",\"8025520374082\":\"44111183642946\",\"8025522864450\":\"44111202025794\",\"8025523028290\":\"44111202353474\",\"8025523093826\":\"44111204254018\",\"8025526403394\":\"44111230861634\",\"8025526436162\":\"44111230894402\",\"8025526665538\":\"44111237382466\",\"8025526993218\":\"44111238955330\",\"8025526829378\":\"44111238758722\",\"8025527058754\":\"44111239184706\",\"9176715854146\":\"51879290405231\",\"8025566806338\":\"44111527149890\",\"8025553011010\":\"44111435759938\",\"9583563964738\":\"49109628092738\",\"8025528009026\":\"44111245574466\",\"8025534136642\":\"44111298625858\",\"8025528336706\":\"44111247835458\",\"8973668319554\":\"51879047856495\",\"8025529221442\":\"44111255273794\",\"8025529811266\":\"44111260877122\",\"8025530401090\":\"44111265956162\",\"8025539543362\":\"44111350333762\",\"8025531842882\":\"44111279882562\",\"8025563398466\":\"44111498117442\",\"8025532006722\":\"44111280800066\",\"8025567756610\":\"44111536488770\",\"8025567494466\":\"44111532425538\",\"9692562850114\":\"51986965954927\",\"8323577479490\":\"45140473479490\",\"8307945111874\":\"45092108239170\",\"8025544589634\":\"45739965546818\",\"8025534005570\":\"44111296135490\",\"8025568051522\":\"44111539437890\",\"9583530246466\":\"49109448720706\",\"8025568215362\":\"44111541109058\",\"9585364861250\":\"51879297483119\",\"9039492743490\":\"51879340638575\",\"8025535021378\":\"44111302885698\",\"8025535086914\":\"44111303016770\",\"8025535578434\":\"44111305474370\",\"8652750848322\":\"47078220398914\",\"8025536168258\":\"44111311503682\",\"8025536332098\":\"44111312027970\",\"8025536594242\":\"44111313469762\",\"8671334302018\":\"46808482775362\",\"8025536790850\":\"44111316844866\",\"8025537151298\":\"51752046952815\",\"8025567330626\":\"44111529771330\",\"8025537610050\":\"44111330902338\",\"8025539838274\":\"44111352037698\",\"8025538396482\":\"44111343288642\",\"8025538560322\":\"44111343714626\",\"8025538920770\":\"44111344959810\",\"8047231893826\":\"49037006864706\"}},\"atDiscountedValue\":{\"type\":\"PERCENTAGE\",\"percentage\":\"50\"},\"quantity\":\"1\"},\"dimensions\":{\"width\":650,\"height\":3064},\"position\":{\"x\":1371.327446209709,\"y\":2.36110714258162},\"title\":\"BOGO 50% OFF 15ml Oils\"},\"otherwise\":null,\"position\":{\"x\":592.2356329043987,\"y\":3.4989784677659372},\"dimensions\":{\"width\":634,\"height\":2596}},\"otherwise\":null,\"conditions\":[{\"type\":\"CUSTOMER_ELIGIBILITY\",\"includeOrExclude\":\"INCLUDE\",\"eligibility\":{\"type\":\"ALL_CUSTOMERS\"}}],\"position\":{\"x\":246,\"y\":0},\"dimensions\":{\"width\":228,\"height\":212},\"tooltips\":{}},\"dimensions\":{\"width\":150,\"height\":0},\"position\":{\"x\":0,\"y\":0}},\"customerEligibility\":{\"type\":\"ALL_CUSTOMERS\"},\"productEligibility\":{\"type\":\"ALL_PRODUCTS\"},\"developerOptions\":{\"alwaysThrow\":false},\"minimumPurchaseRequirements\":{\"requirementType\":\"NONE\",\"quantity\":\"0\",\"subtotal\":\"0\",\"appliesTo\":\"ELIGIBLE_LINE_ITEMS\"},\"maximumPurchaseRequirements\":{\"requirementType\":\"NONE\",\"quantity\":\"0\",\"subtotal\":\"0\",\"appliesTo\":\"ELIGIBLE_LINE_ITEMS\"},\"value\":{\"type\":\"PERCENTAGE\",\"percentage\":\"0\"},\"appliesToSellingPlans\":\"ALL_SELLING_PLANS\",\"salePriceHandlingStrategy\":\"APPLY_TO_COMPARE_AT_PRICE\",\"cartLineSortOrder\":\"LOWEST_PRICED_PRODUCTS\"}
478,\"startDate\":\"2026-08-11T06:00:00Z\",\"endDate\":\"2026-08-12T05:59:59Z\",\"discountClass\":\"PRODUCT\",\"discountClasses\":[\"PRODUCT\"]}","1781208351087":"null","1781362884975":"null","1782972088687":"{\"config\":{\"message\":\"B2G1 - End of Summer Sale\",\"isEnabled\":true,\"customLogic\":{\"id\":\"converted-legacy-root\",\"type\":\"ROOT\",\"entryPoint\":{\"id\":\"check-if39\",\"type\":\"CHECK_IF\",\"matchType\":\"AND\",\"then\":{\"id\":\"buy-x726\",\"type\":\"BUY_X\",\"requirements\":[{\"quantity\":3,\"productEligibility\":{\"type\":\"SPECIFIC_PRODUCT_VARIANTS\",\"selectedCollections\":[],\"asListOfIds\":\"429146669378\",\"selectedProducts\":[],\"selectedProductVariants\":[],\"compactFormat\":{\"8025523552578\":\"44111210807618\",\"9418313072962\":\"51977942565231\",\"8025526436162\":\"44111230894402\",\"8025552585026\":\"44111434711362\",\"8025527746882\":\"44111243936066\",\"8025567068482\":\"53115392491887\",\"9583563964738\":\"49109628092738\",\"8025542525250\":\"44111374745922\",\"8025563758914\":\"44111498641730\",\"8025578078530\":\"52948354269551\",\"8323577479490\":\"45140473479490\",\"8025544589634\":\"45739965546818\",\"9583530246466\":\"49109448720706\",\"8025568411970\":\"52948343062895\",\"8025542328642\":\"44111370912066\",\"8025542361410\":\"44111370944834\",\"8025537937730\":\"44111337587010\",\"8652750127426\":\"46808401871170\",\"8025542623554\":\"44111375532354\",\"8025538658626\":\"44111343878466\",\"8025542558018\":\"44111374778690\",\"8025538756930\":\"44111344828738\"}}}],\"then\":{\"id\":\"apply-discount518\",\"type\":\"APPLY_DISCOUNT\",\"value\":{\"type\":\"GET_Y\",\"customerGets\":{\"type\":\"SPECIFIC_PRODUCT_VARIANTS\",\"selectedCollections\":[],\"asListOfIds\":\"\",\"selectedProducts\":[],\"selectedProductVariants\":[],\"compactFormat\":{\"8025523552578\":\"44111210807618\",\"9418313072962\":\"51977942565231\",\"8025526436162\":\"44111230894402\",\"8025552585026\":\"44111434711362\",\"8025527746882\":\"44111243936066\",\"8025567068482\":\"53115392491887\",\"9583563964738\":\"49109628092738\",\"8025542525250\":\"44111374745922\",\"8025563758914\":\"44111498641730\",\"8025578078530\":\"52948354269551\",\"8323577479490\":\"45140473479490\",\"8025544589634\":\"45739965546818\",\"9583530246466\":\"49109448720706\",\"8025568411970\":\"52948343062895\",\"8025542328642\":\"44111370912066\",\"8025542361410\":\"44111370944834\",\"8025537937730\":\"44111337587010\",\"8652750127426\":\"46808401871170\",\"8025542623554\":\"44111375532354\",\"8025538658626\":\"44111343878466\",\"8025542558018\":\"44111374778690\",\"8025538756930\":\"44111344828738\"}},\"atDiscountedValue\":{\"type\":\"PERCENTAGE\",\"percentage\":\"100\"},\"quantity\":\"1\"},\"dimensions\":{\"width\":650,\"height\":2781},\"position\":{\"x\":1171.0000105765869,\"y\":20.000000846126945},\"title\":\"Buy 2, get another 1 Free\"},\"otherwise\":null,\"position\":{\"x\":589.9869602771422,\"y\":-0.9869602771422592},\"dimensions\":{\"width\":493,\"height\":2313}},\"otherwise\":null,\"conditions\":[{\"type\":\"CUSTOMER_ELIGIBILITY\",\"includeOrExclude\":\"INCLUDE\",\"eligibility\":{\"type\":\"ALL_CUSTOMERS\"}}],\"position\":{\"x\":246,\"y\":0},\"dimensions\":{\"width\":228,\"height\":212},\"tooltips\":{}},\"dimensions\":{\"width\":150,\"height\":0},\"position\":{\"x\":0,\"y\":0}},\"customerEligibility\":{\"type\":\"ALL_CUSTOMERS\"},\"productEligibility\":{\"type\":\"ALL_PRODUCTS\"},\"developerOptions\":{\"alwaysThrow\":false},\"minimumPurchaseRequirements\":{\"requirementType\":\"NONE\",\"quantity\":\"0\",\"subtotal\":\"0\",\"appliesTo\":\"ELIGIBLE_LINE_ITEMS\"},\"maximumPurchaseRequirements\":{\"requirementType\":\"NONE\",\"quantity\":\"0\",\"subtotal\":\"0\",\"appliesTo\":\"ELIGIBLE_LINE_ITEMS\"},\"value\":{\"type\":\"PERCENTAGE\",\"percentage\":\"0\"},\"appliesToSellingPlans\":\"ALL_SELLING_PLANS\",\"salePriceHandlingStrategy\":\"APPLY_TO_COMPARE_AT_PRICE\",\"cartLineSortOrder\":\"LOWEST_PRICED_PRODUCTS\"},\"startDate\":\"2026-08-21T06:00:00Z\",\"endDate\":\"2026-08-24T05:59:59Z\",\"discountClass\":\"PRODUCT\",\"discountClasses\":[\"PRODUCT\"]}
478","1782972449135":"{\"config\":{\"message\":\"B2G1 - Harvest Season Preparation\",\"isEnabled\":true,\"customLogic\":{\"id\":\"converted-legacy-root\",\"type\":\"ROOT\",\"entryPoint\":{\"id\":\"check-if39\",\"type\":\"CHECK_IF\",\"matchType\":\"AND\",\"then\":{\"id\":\"buy-x726\",\"type\":\"BUY_X\",\"requirements\":[{\"quantity\":3,\"productEligibility\":{\"type\":\"SPECIFIC_PRODUCT_VARIANTS\",\"selectedCollections\":[],\"asListOfIds\":\"429146669378\",\"selectedProducts\":[],\"selectedProductVariants\":[],\"compactFormat\":{\"8025542197570\":\"44111368421698\",\"9583563964738\":\"49109628092738\",\"9565521838402\":\"51879406993775\",\"9583530246466\":\"49109448720706\",\"8025565561154\":\"44111514468674\",\"8025536758082\":\"44111314387266\",\"8025542263106\":\"44111369666882\"}}}],\"then\":{\"id\":\"apply-discount518\",\"type\":\"APPLY_DISCOUNT\",\"value\":{\"type\":\"GET_Y\",\"customerGets\":{\"type\":\"SPECIFIC_PRODUCT_VARIANTS\",\"selectedCollections\":[],\"asListOfIds\":\"\",\"selectedProducts\":[],\"selectedProductVariants\":[],\"compactFormat\":{\"8025542197570\":\"44111368421698\",\"9583563964738\":\"49109628092738\",\"9565521838402\":\"51879406993775\",\"9583530246466\":\"49109448720706\",\"8025565561154\":\"44111514468674\",\"8025536758082\":\"44111314387266\",\"8025542263106\":\"44111369666882\"}},\"atDiscountedValue\":{\"type\":\"PERCENTAGE\",\"percentage\":\"100\"},\"quantity\":\"1\"},\"dimensions\":{\"width\":650,\"height\":1506},\"position\":{\"x\":1171.0000105765869,\"y\":20.000000846126945},\"title\":\"Buy 2, get another 1 Free\"},\"otherwise\":null,\"position\":{\"x\":589.9869602771422,\"y\":-0.9869602771422592},\"dimensions\":{\"width\":493,\"height\":1038}},\"otherwise\":null,\"conditions\":[{\"type\":\"CUSTOMER_ELIGIBILITY\",\"includeOrExclude\":\"INCLUDE\",\"eligibility\":{\"type\":\"ALL_CUSTOMERS\"}}],\"position\":{\"x\":246,\"y\":0},\"dimensions\":{\"width\":228,\"height\":212},\"tooltips\":{}},\"dimensions\":{\"width\":150,\"height\":0},\"position\":{\"x\":0,\"y\":0}},\"customerEligibility\":{\"type\":\"ALL_CUSTOMERS\"},\"productEligibility\":{\"type\":\"ALL_PRODUCTS\"},\"developerOptions\":{\"alwaysThrow\":false},\"minimumPurchaseRequirements\":{\"requirementType\":\"NONE\",\"quantity\":\"0\",\"subtotal\":\"0\",\"appliesTo\":\"ELIGIBLE_LINE_ITEMS\"},\"maximumPurchaseRequirements\":{\"requirementType\":\"NONE\",\"quantity\":\"0\",\"subtotal\":\"0\",\"appliesTo\":\"ELIGIBLE_LINE_ITEMS\"},\"value\":{\"type\":\"PERCENTAGE\",\"percentage\":\"0\"},\"appliesToSellingPlans\":\"ALL_SELLING_PLANS\",\"salePriceHandlingStrategy\":\"APPLY_TO_COMPARE_AT_PRICE\",\"cartLineSortOrder\":\"LOWEST_PRICED_PRODUCTS\"},\"startDate\":\"2026-08-29T06:00:00Z\",\"endDate\":\"2026-09-01T05:59:59Z\",\"discountClass\":\"PRODUCT\",\"discountClasses\":[\"PRODUCT\"]}","1785854984559":"{\"config\":{\"message\":\"B2G1 - 9\/11 Remembrance\",\"isEnabled\":true,\"customLogic\":{\"id\":\"root\",\"type\":\"ROOT\",\"entryPoint\":{\"id\":\"check-if39\",\"type\":\"CHECK_IF\",\"matchType\":\"AND\",\"conditions\":[{\"type\":\"CUSTOMER_ELIGIBILITY\",\"includeOrExclude\":\"INCLUDE\",\"eligibility\":{\"type\":\"ALL_CUSTOMERS\"}}],\"then\":{\"id\":\"buy-x726\",\"type\":\"BUY_X\",\"requirements\":[{\"productEligibility\":{\"type\":\"SPECIFIC_PRODUCT_VARIANTS\",\"selectedProductVariants\":[],\"compactFormat\":{\"8025566445890\":\"44111522758978\",\"8025515393346\":\"44111103918402\",\"8025526665538\":\"44111237382466\",\"9176715854146\":\"51879290405231\",\"8025532498242\":\"44111284633922\",\"8025533415746\":\"44111294300482\",\"8025536332098\":\"44111312027970\",\"8025536495938\":\"44111312388418\",\"8293731762498\":\"45042609226050\",\"8025538396482\":\"44111343288642\",\"8025541050690\":\"44111360590146\"}},\"quantity\":2}],\"then\":{\"id\":\"apply-discount518\",\"type\":\"APPLY_DISCOUNT\",\"title\":\"Buy 1, get another 1 Free\",\"value\":{\"type\":\"GET_Y\",\"customerGets\":{\"type\":\"SPECIFIC_PRODUCT_VARIANTS\",\"selectedProductVariants\":[],\"compactFormat\":{\"8025566445890\":\"44111522758978\",\"8025515393346\":\"44111103918402\",\"8025526665538\":\"44111237382466\",\"9176715854146\":\"51879290405231\",\"8025532498242\":\"44111284633922\",\"8025533415746\":\"44111294300482\",\"8025536332098\":\"44111312027970\",\"8025536495938\":\"44111312388418\",\"8293731762498\":\"45042609226050\",\"802553839
4786482\":\"44111343288642\",\"8025541050690\":\"44111360590146\"}},\"atDiscountedValue\":{\"type\":\"PERCENTAGE\",\"percentage\":\"100\"},\"quantity\":\"1\"},\"dimensions\":{\"width\":650,\"height\":1846},\"position\":{\"x\":1038,\"y\":0}},\"otherwise\":null,\"disableCurrencyConversion\":false,\"dimensions\":{\"width\":300,\"height\":0},\"position\":{\"x\":642,\"y\":0}},\"otherwise\":null,\"dimensions\":{\"width\":300,\"height\":0},\"position\":{\"x\":246,\"y\":0}},\"dimensions\":{\"width\":150,\"height\":0},\"position\":{\"x\":0,\"y\":0}},\"customerEligibility\":{\"type\":\"ALL_CUSTOMERS\"},\"productEligibility\":{\"type\":\"ALL_PRODUCTS\"},\"developerOptions\":{\"alwaysThrow\":false},\"minimumPurchaseRequirements\":{\"requirementType\":\"NONE\",\"quantity\":\"0\",\"subtotal\":\"0\",\"appliesTo\":\"ELIGIBLE_LINE_ITEMS\"},\"maximumPurchaseRequirements\":{\"requirementType\":\"NONE\",\"quantity\":\"0\",\"subtotal\":\"0\",\"appliesTo\":\"ELIGIBLE_LINE_ITEMS\"},\"value\":{\"type\":\"PERCENTAGE\",\"percentage\":\"0\"},\"appliesToSellingPlans\":\"ALL_SELLING_PLANS\",\"salePriceHandlingStrategy\":\"APPLY_TO_COMPARE_AT_PRICE\",\"cartLineSortOrder\":\"LOWEST_PRICED_PRODUCTS\"},\"startDate\":\"2026-09-11T06:00:00Z\",\"endDate\":\"2026-09-12T05:59:59Z\",\"discountClass\":\"PRODUCT\",\"discountClasses\":[\"PRODUCT\"]}","1789746610543":"{\"config\":{\"message\":\"Build a Fall Kit\",\"isEnabled\":true,\"customLogic\":{\"id\":\"root\",\"type\":\"ROOT\",\"entryPoint\":{\"id\":\"check-if-0\",\"type\":\"CHECK_IF\",\"matchType\":\"AND\",\"conditions\":[{\"type\":\"PRODUCT_ELIGIBILITY\",\"includeOrExclude\":\"INCLUDE\",\"eligibility\":{\"type\":\"SPECIFIC_PRODUCT_VARIANTS\",\"selectedCollections\":[],\"asListOfIds\":\"615752958319\",\"selectedProductVariants\":[],\"compactFormat\":{\"8652751077698\":\"47078204834114\",\"8025566806338\":\"44111527149890\",\"8025532006722\":\"44111280800066\",\"8896924516674\":\"47226891534658\",\"8671334302018\":\"46808482775362\",\"8025536758082\":\"44111314387266\",\"8025542197570\":\"44111368421698\",\"8025542263106\":\"44111369666882\",\"8025565561154\":\"44111514468674\",\"8025526993218\":\"44111238955330\",\"8025531842882\":\"44111279882562\",\"8025539543362\":\"44111350333762\",\"8025536168258\":\"44111311503682\",\"8652750848322\":\"47078220398914\",\"8025539838274\":\"44111352037698\"}}}],\"then\":{\"id\":\"apply-discount-0\",\"type\":\"APPLY_DISCOUNT\",\"title\":\"Build a Fall Kit\",\"value\":{\"type\":\"VOLUME\",\"breaks\":[{\"minimumQuantity\":\"2\",\"discount\":{\"type\":\"PERCENTAGE\",\"percentage\":\"15\"}},{\"minimumQuantity\":\"3\",\"discount\":{\"type\":\"PERCENTAGE\",\"percentage\":\"25\"}},{\"minimumQuantity\":\"4\",\"discount\":{\"type\":\"PERCENTAGE\",\"percentage\":\"35\"}},{\"minimumQuantity\":\"5\",\"discount\":{\"type\":\"PERCENTAGE\",\"percentage\":\"45\"}}],\"appliesTo\":\"ELIGIBLE_LINE_ITEMS\",\"basedOn\":\"QUANTITY\",\"disableCurrencyConversion\":false},\"dimensions\":{\"width\":606,\"height\":744},\"position\":{\"x\":642,\"y\":0}},\"otherwise\":null,\"dimensions\":{\"width\":292,\"height\":512},\"position\":{\"x\":246,\"y\":0},\"tooltips\":{}},\"dimensions\":{\"width\":150,\"height\":0},\"position\":{\"x\":0,\"y\":0}},\"customerEligibility\":{\"type\":\"ALL_CUSTOMERS\"},\"productEligibility\":{\"type\":\"ALL_PRODUCTS\"},\"developerOptions\":{\"alwaysThrow\":false},\"minimumPurchaseRequirements\":{\"requirementType\":\"NONE\",\"quantity\":\"0\",\"subtotal\":\"0\",\"appliesTo\":\"ELIGIBLE_LINE_ITEMS\"},\"maximumPurchaseRequirements\":{\"requirementType\":\"NONE\",\"quantity\":\"0\",\"subtotal\":\"0\",\"appliesTo\":\"ELIGIBLE_LINE_ITEMS\"},\"value\":{\"type\":\"PERCENTAGE\",\"percentage\":\"0\"},\"appliesToSellingPlans\":\"ALL_SELLING_PLANS\",\"salePriceHandlingStrategy\":\"APPLY_TO_COMPARE_AT_PRICE\",\"cartLineSortOrder\":\"HIGHEST_PRICED_PRODUCTS\"},\"startDate\":\"2026-10-02T06:00:00Z\",\"endDate\":\"2026-10-05T06:00:00Z\",\"discountClass\":\"PRODUCT\",\"discountClasses\":[\"PRODUCT\"]}"}, 479 "calculateDiscountBasedOnQuantity": false, 480 "countryCode": "US", 481 "currencyCode": "USD", 482 "currencySymbol": "$", 483 484 "customer": null, 485 486 "customerMetafieldsToCheck": "", 487 488 "moneyFormat": "$0.00", 489 "moneyFormatString": "${{amount}}", 490 491 "themeType": "auto_detect", 492 "badgeTemplate": "[discount_percentage] OFF", 493 "badgeCss": "", 494 "descriptionTemplate": "Your price: \u003cb\u003e[sale_price]\u003c\/b\u003e", 495 "descriptionCss": "", 496 "priceOnSaleClass": "", 497 "delay": 0, 498 "logLevel": "error", 499 "regularPriceTemplate": "[regular_price]", 500 "salePriceTemplate": "[sale_price]", 501 "regiosDiscountsAppProxyUrl": "\/apps\/regios-discounts", 502 "useAppProxyForManualCodeStrikethrough": false, 503 "cart": { 504 "attributes": {}, 505 "discountCodes": [], 506 "items": [ 507 508 ] 509 }, 510 "featureFlags": "", 511 "designMode": false, 512 513 "marketId": 39835631938, 514 515 516 "doppV3Fallbacks": { 517 518 "product": null, 519 520 "keep-this-last": "" 521 } 522 523} 524</script>
524 525
526<script id="regios-dopp-script"> 527 var configScript = document.getElementById('regios-dopp-config'); 528 529 if (!configScript) { 530 throw new Error('[Regios Discounts] Critical error: Configuration script not found.'); 531 } 532 533 var config = JSON.parse(configScript.textContent); 534 window.RegiosDOPP = Object.assign(window.RegiosDOPP || {}, config); 535</script>
535 536 537 538<!-- END app block -->
538<script src="https://cdn.shopify.com/extensions/01a0ec21-7369-78a6-b9c0-c07227d664ec/lb-upsell-451/assets/lb-selleasy.js" type="text/javascript" defer="defer"></script>
vendor: 1 bytes, line 538
538
539<script src="https://cdn.shopify.com/extensions/01a0ec76-5fb5-755e-9044-58df84589822/xcloud-search-filter-75/assets/shopify.js" type="text/javascript" defer="defer"></script>
vendor: 1 bytes, line 539
539
540<script src="https://cdn.shopify.com/extensions/01a0fc09-fc82-7b7d-a2d5-0cf4cae65dc9/regios-automatic-discounts-1516/assets/regios_discounts_embed.js" type="text/javascript" defer="defer"></script>
540 541<link href="https://monorail-edge.shopifysvc.com" rel="dns-prefetch">
542<script>(function(){if ("sendBeacon" in navigator && "performance" in window) {try {var session_token_from_headers = performance.getEntriesByType('navigation')[0].serverTiming.find(x => x.name == '_s').description;} catch {var session_token_from_headers = undefined;}var session_cookie_matches = document.cookie.match(/_shopify_s=([^;]*)/);var session_token_from_cookie = session_cookie_matches && session_cookie_matches.length === 2 ? session_cookie_matches[1] : "";var session_token = session_token_from_headers || session_token_from_cookie || "";function handle_abandonment_event(e) {var entries = performance.getEntries().filter(function(entry) {return /monorail-edge.shopifysvc.com/.test(entry.name);});if (!window.abandonment_tracked && entries.length === 0) {window.abandonment_tracked = true;var currentMs = Date.now();var navigation_start = performance.timing.navigationStart;var payload = {shop_id: 67979084098,url: window.location.href,navigation_start,duration: currentMs - navigation_start,session_token,page_type: "index"};window.navigator.sendBeacon("https://monorail-edge.shopifysvc.com/v1/produce", JSON.stringify({schema_id: "online_store_buyer_site_abandonment/1.1",payload: payload,metadata: {event_created_at_ms: currentMs,event_sent_at_ms: currentMs}}));}}window.addEventListener('pagehide', handle_abandonment_event);}}());</script>
vendor: 1 bytes, line 542
542
543<script> 544 window.__TREKKIE_SHIM_QUEUE = window.__TREKKIE_SHIM_QUEUE || []; 545</script>
vendor: 1 bytes, line 545
545
546<script>(function(){var wpmLoader=function(){"use strict";var e=/Googlebot|Storebot-Google|bingbot|Baiduspider|YandexBot|DuckDuckBot|Slurp|facebookexternalhit|Twitterbot|LinkedInBot|Applebot|AdsBot-Google|Mediapartners-Google|APIs-Google|PetalBot|SemrushBot|AhrefsBot|MJ12bot|DotBot|Acunetix|PerplexityBot|Perplexity-User/i,t=/bytedance/i;function i(){try{var e=document.cookie;if(!e||"string"!=typeof e)return;for(var t=0,i=e.split(";");t<i.length;t++){var n=i[t],r=n.indexOf("=");if(-1!==r){var o=n.slice(0,r).trim();if(o){var a=void 0;try{a=decodeURIComponent(o)}catch(e){a=o}if("_shopify_s"===a){var d=n.slice(r+1).trim();try{return decodeURIComponent(d)}catch(e){return d}}}}}return}catch(e){return}}function n(e){try{"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn(e)}catch(e){}}function r(e,t){return"string"==typeof e&&e.length>0&&e.length<=t?e:void 0}function o(e){var t;switch(null==(t=null==e?void 0:e.navigation)?void 0:t.type){case 0:return"navigate";case 1:return"reload";case 2:return"back_forward";default:return}}function a(){var e,t,i;try{var n=null==(i=null==(t=null==(e=self.ShopifyAnalytics)?void 0:e.lib)?void 0:t.trekkie)?void 0:i.state;return"awaiting-consent"===n||"initialized"===n?n:void 0}catch(e){return}}return function(d,s,u,l){var c=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{};try{var p=c.trekkieShim;!0!==p&&"true"!==p||null!=window.__TREKKIE_SHIM_QUEUE||(window.__TREKKIE_SHIM_QUEUE=[])}catch(e){}var f,v,h,y,g=(v=(f={modern:/Edge?\/(1{2}[4-9]|1[2-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Firefox\/(1{2}[4-9]|1[2-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Chrom(ium|e)\/(9{2}|\d{3,})\.\d+(\.\d+|)|(Maci|X1{2}).+ Version\/(15\.\d+|(1[6-9]|[2-9]\d|\d{3,})\.\d+)([,.]\d+|)( \(\w+\)|)( Mobile\/\w+|) Safari\/|Chrome.+OPR\/(9{2}|\d{3,})\.\d+\.\d+|(CPU[ +]OS|iPhone[ +]OS|CPU[ +]iPhone|CPU IPhone OS|CPU iPad OS)[ +]+(15[._]\d+|(1[6-9]|[2-9]\d|\d{3,})[._]\d+)([._]\d+|)|Android:?[ /-](14[89]|1[5-9]\d|[2-9]\d{2}|\d{4,})(\.\d+|)(\.\d+|)|Android.+Firefox\/(15\d|1[6-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Android.+Chrom(ium|e)\/(14[89]|1[5-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|SamsungBrowser\/([2-9]\d|\d{3,})\.\d+/,legacy:/Edge?\/(1[6-9]|[2-9]\d|\d{3,})\.\d+(\.\d+|)|Firefox\/(5[4-9]|[6-9]\d|\d{3,})\.\d+(\.\d+|)|Chrom(ium|e)\/(5[1-9]|[6-9]\d|\d{3,})\.\d+(\.\d+|)([\d.]+$|.*Safari\/(?![\d.]+ Edge\/[\d.]+$))|(Maci|X1{2}).+ Version\/(10\.\d+|(1[1-9]|[2-9]\d|\d{3,})\.\d+)([,.]\d+|)( \(\w+\)|)( Mobile\/\w+|) Safari\/|Chrome.+OPR\/(3[89]|[4-9]\d|\d{3,})\.\d+\.\d+|(CPU[ +]OS|iPhone[ +]OS|CPU[ +]iPhone|CPU IPhone OS|CPU iPad OS)[ +]+(10[._]\d+|(1[1-9]|[2-9]\d|\d{3,})[._]\d+)([._]\d+|)|Android:?[ /-](14[89]|1[5-9]\d|[2-9]\d{2}|\d{4,})(\.\d+|)(\.\d+|)|Mobile Safari.+OPR\/([89]\d|\d{3,})\.\d+\.\d+|Android.+Firefox\/(15\d|1[6-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Android.+Chrom(ium|e)\/(14[89]|1[5-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Android.+(UC? ?Browser|UCWEB|U3)[ /]?(15\.([5-9]|\d{2,})|(1[6-9]|[2-9]\d|\d{3,})\.\d+)\.\d+|SamsungBrowser\/(5\.\d+|([6-9]|\d{2,})\.\d+)|Android.+MQ{2}Browser\/(14(\.(9|\d{2,})|)|(1[5-9]|[2-9]\d|\d{3,})(\.\d+|))(\.\d+|)|K[Aa][Ii]OS\/(3\.\d+|([4-9]|\d{2,})\.\d+)(\.\d+|)/}).modern,h=f.legacy,(y=navigator.userAgent).match(e)?"bot":y.match(v)?"modern":y.match(h)?"legacy":y.match(t)?"bot":"unknown"),m=function(e){var t,i,n=r(e,128);try{var a=window.performance,d=null==(t=null==a?void 0:a.getEntriesByType)?void 0:t.call(a,"navigation")[0];if(!d)return{requestId:n,navigationType:o(a)};var s="type"in d?r(d.type,64):void 0,u="serverTiming"in d&&Array.isArray(d.serverTiming)?d.serverTiming:[];return{requestId:null!=n?n:r(null==(i=u.find(function(e){return"requestID"===e.name}))?void 0:i.description,128),navigationType:s}}catch(e){return{requestId:n}}}(c.requestId),w=function(e){var t=e.version,r=e.browserTarget,o=e.surface,a=e.shopId,d=e.monorailEndpoint,s=window.location.href;return{emit:function(e){var u=e.status,l=e.errorMsg,c=e.failureReason,p=e.useKeepaliveFallback,f=void 0!==p&&p,v=e.navigationType,h=e.pagehidePersisted,y=e.requestId,g=e.trekkieState;if(d){var m,w;try{var b=(new Date).getTime();m=JSON.stringify({metadata:{event_sent_at_ms:b},events:[{schema_id:"web_pixels_manager_load/3.3",payload:{version:t,bundle_target:r,page_url:s,status:u,surface:o,error_msg:l,failure_reason:c,navigation_type:v,pagehide_persisted:h,request_id:y,trekkie_state:g,shop_id:a,visit_token:i()},metadata:{event_created_at_ms:b}}]})}catch(e){return}try{if("function"==typeof window.navigator.sendBeacon&&-1===(w=window.navigator.userAgent).indexOf("iPhone; CPU iPhone OS 12_")&&-1===w.indexOf("iPad; CPU OS 12_")&&-1===w.indexOf("iPod touch; CPU iPhone OS 12_")&&window.navigator.sendBeacon.bind(window.navigator)(d,m))return}catch(e){}if(f)try{"function"==typeof window.fetch&&window.fetch(d,{method:"POST",headers:{"Content-Type":"text/plain"},body:m,keepalive:!0}
546).catch(function(){})}catch(e){}else try{var _=new XMLHttpRequest;_.open("POST",d,!0),_.setRequestHeader("Content-Type","text/plain"),_.send(m)}catch(e){n("[Web Pixels Manager] Got an unhandled error while logging to Monorail.")}}else n("[Web Pixels Manager] No Monorail endpoint provided, skipping logging.")}}}({version:u,browserTarget:g,surface:d.surface,shopId:d.shopId,monorailEndpoint:d.monorailEndpoint});if(Boolean(null==(_=null==(b=window.Shopify)?void 0:b.analytics)?void 0:_.replayQueue))w.emit({status:"setup-skipped",errorMsg:"replay queue already initialized."});else{var b,_;w.emit({status:"setup-started"}),window.Shopify=window.Shopify||{};var S=window.Shopify;S.analytics=S.analytics||{};var P=S.analytics;P.replayQueue=[],P.publish=function(e,t,i){return P.replayQueue.push([e,t,i]),!0};try{self.performance.mark("wpm:start")}catch(e){}var k,C="modern"===g?"modern":"legacy",E=(null!=l?l:{modern:"",legacy:""})[C],I=[(k={baseUrl:s,hashVersion:u,buildTarget:C}).baseUrl,"/wpm","/b",k.hashVersion,"modern"===k.buildTarget?"m":"l",".js"].join(""),O=!1,T=!1;try{c.browserTarget=g,function(){O=!0;try{window.addEventListener("pagehide",M)}catch(e){O=!1}}(),R(function(){try{R(x)}catch(e){D(e)}}),w.emit({status:"loading",requestId:m.requestId,navigationType:m.navigationType,trekkieState:a()})}catch(e){D(e)}}function U(){var e;if(q(),!function(){var e,t;return Boolean(null==(t=null==(e=window.Shopify)?void 0:e.analytics)?void 0:t.initialized)}()){var t,i,n;try{if("function"!=typeof(null==(e=window.webPixelsManager)?void 0:e.init))return void A();if(!(null!==(n=i=t=window.webPixelsManager.init(d))&&"function"!=typeof n&&Object(n)===n&&"publish"in i&&"function"==typeof i.publish&&"publishCustomEvent"in i&&"function"==typeof i.publishCustomEvent&&"visitor"in i&&"function"==typeof i.visitor))return void A()}catch(e){return void A(e)}var r=window.Shopify.analytics;r.replayQueue.forEach(function(e){var i=e[0],n=e[1],r=e[2];t.publishCustomEvent(i,n,r)}),r.replayQueue=[],r.publish=t.publishCustomEvent,r.visitor=t.visitor,r.initialized=!0}}function A(e){B("manager_api_unavailable",void 0===e?void 0:Q(e))}function x(){B("script_load_failed","".concat(I," has failed to load"))}function B(e,t){T||(T=!0,q(),w.emit({status:"failed",errorMsg:t,failureReason:e,requestId:m.requestId,navigationType:m.navigationType,trekkieState:a()}))}function M(e){O&&(q(),w.emit({status:"pagehide-while-loading",useKeepaliveFallback:!0,pagehidePersisted:e.persisted,requestId:m.requestId,navigationType:m.navigationType,trekkieState:a()}))}function q(){O=!1;try{window.removeEventListener("pagehide",M)}catch(e){}}function R(e){var t;!function(e){var t=e.src,i=e.async,n=void 0===i||i,r=e.onload,o=e.onerror,a=e.sri,d=e.scriptDataAttributes,s=void 0===d?{}:d,u=document.createElement("script"),l=document.querySelector("head"),c=document.querySelector("body");if(u.async=n,u.src=t,a&&(u.integrity=a,u.crossOrigin="anonymous"),s)for(var p in s)if(Object.prototype.hasOwnProperty.call(s,p))try{u.dataset[p]=String(s[p])}catch(e){}if(r&&u.addEventListener("load",r),o&&u.addEventListener("error",o),l)l.appendChild(u);else{if(!c)throw new Error("Did not find a head or body element to append the script");c.appendChild(u)}}({src:I,async:!0,onload:U,onerror:e,sri:(t=E,"string"==typeof t&&/^sha384-[A-Za-z0-9+/=]+$/.test(t)?E:""),scriptDataAttributes:c})}function D(e){B("script_append_failed",Q(e))}function Q(e){return e instanceof Error?e.message:"Unknown error"}}}();wpmLoader({shopId: 67979084098,storefrontBaseUrl: "https://www.rockymountainoils.com",extensionsBaseUrl: "https://extensions.shopifycdn.com/cdn/shopifycloud/web-pixels-manager",monorailEndpoint: "https://www.rockymountainoils.com/.well-known/shopify/monorail/unstable/produce_batch",surface: "storefront-renderer",enabledBetaFlags: ["4c64608a","16072cab","8450a54b","7ee89bf1"],webPixelsConfigList: [{"id":"2811199855","configuration":"{\"shop\":\"rocky-mountain-oils.myshopify.com\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"933d4caa1e2cc643aeb46e3c5f7a4c7d","type":"APP","apiClientId":18394152961,"privacyPurposes":["ANALYTICS"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]}
546,"dataSharingState":"unrestricted"},{"id":"2550989167","configuration":"{\"accountID\":\"selleasy-metrics-track\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"50acfdcd7b118f50e52df83f64624d06","type":"APP","apiClientId":5519923,"privacyPurposes":[],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_email","read_customer_name","read_customer_personal_data"],"dataSharingControls":["share_all_events"]},"dataSharingState":"unrestricted"},{"id":"1916666223","configuration":"{\"shopId\":\"gid:\/\/shopify\/Shop\/67979084098\",\"baseUrl\":\"https:\/\/ab-testing.essential-apps.com\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"b26e45fa9a7a5cf51742cf4b300d6739","type":"APP","apiClientId":248390909953,"privacyPurposes":["ANALYTICS"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_personal_data"],"dataSharingControls":["share_all_events"]},"dataSharingState":"unrestricted"},{"id":"1915617647","configuration":"{\"baseUrl\":\"https:\/\/wishlist.xobuilder.app\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"9c6ceed5ad8172883427700a3c12afd5","type":"APP","apiClientId":152864980993,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_email","read_customer_name","read_customer_personal_data"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"},{"id":"1699217775","configuration":"{\"ti\":\"97013981\",\"endpoint\":\"https:\/\/bat.bing.com\/action\/0\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"5ee93563fe31b11d2d65e2f09a5229dc","type":"APP","apiClientId":2997493,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_personal_data"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"},{"id":"1540260207","configuration":"{\"account_ID\":\"361669\",\"google_analytics_tracking_tag\":\"1\",\"measurement_id\":\"2\",\"api_secret\":\"3\",\"shop_settings\":\"{\\\"custom_pixel_script\\\":\\\"https:\\\\\\\/\\\\\\\/storage.googleapis.com\\\\\\\/gsf-scripts\\\\\\\/custom-pixels\\\\\\\/rocky-mountain-oils.js\\\"}\"}","eventPayloadVersion":"v1","runtimeContext":"LAX","scriptVersion":"dbf16afd37d7bda963909dd4e886232e","type":"APP","apiClientId":1558137,"privacyPurposes":[],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"unrestricted"},{"id":"1493926255","configuration":"{\"env\":\"prod\"}","eventPayloadVersion":"v1","runtimeContext":"LAX","scriptVersion":"8a9a175b11d15038a70fe78d09c59720","type":"APP","apiClientId":3977633,"privacyPurposes":["ANALYTICS","MARKETING"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized","enabledFlags":["9a3ed68a"]},{"id":"734331247","configuration":"{\"config\":\"{\\\"google_tag_ids\\\":[\\\"G-25N5FJKQ0T\\\",\\\"AW-11271236224\\\",\\\"GT-KD23J5W\\\"],\\\"target_country\\\":\\\"US\\\",\\\"gtag_events\\\":[{\\\"type\\\":\\\"begin_checkout\\\",\\\"action_label\\\":[\\\"G-25N5FJKQ0T\\\",\\\"AW-11271236224\\\/n3N2CJ6eqsIYEIDVxf4p\\\"]},{\\\"type\\\":\\\"search\\\",\\\"action_label\\\":[\\\"G-25N5FJKQ0T\\\",\\\"AW-11271236224\\\/LdCtCJieqsIYEIDVxf4p\\\"]},{\\\"type\\\":\\\"remove_from_cart\\\",\\\"action_label\\\":\\\"G-25N5FJKQ0T\\\"},{\\\"type\\\":\\\"view_item\\\",\\\"action_label\\\":[\\\"G-25N5FJKQ0T\\\",\\\"AW-11271236224\\\/9_DSCJWeqsIYEIDVxf4p\\\",\\\"MC-MM0M8R6GP8\\\"]},{\\\"type\\\":\\\"add_shipping_info\\\",\\\"action_label\\\":\\\"G-25N5FJKQ0T\\\"},{\\\"type\\\":\\\"purchase\\\",\\\"action_label\\\":[\\\"G-25N5FJKQ0T\\\",\\\"AW-11271236224\\\/lw1MCI-eqsIYEIDVxf4p\\\",\\\"MC-MM0M8R6GP8\\\"]},{\\\"type\\\":\\\"page_view\\\",\\\"action_label\\\":[\\\"G-25N5FJKQ0T\\\",\\\"AW-11271236224\\\/EyXOCJKeqsIYEIDVxf4p\\\",\\\"MC-MM0M8R6GP8\\\"]},{\\\"type\\\":\\\"view_item_list\\\",\\\"action_label\\\":\\\"G-25N5FJKQ0T\\\"},{\\\"type\\\":\\\"add_payment_info\\\",\\\"action_label\\\":[\\\"G-25N5FJKQ0T\\\",\\\"AW-11271236224\\\/n0T8CKGeqsIYEIDVxf4p\\\"]},{\\\"type\\\":\\\"add_to_cart\\\",\\\"action_label\\\":[\\\"G-25N5FJKQ0T\\\",\\\"AW-11271236224\\\/x0EgCJueqsIYEIDVxf4p\\\"]},{\\\"type\\\":\\\"view_cart\\\",\\\"action_label\\\":\\\"G-25N5FJKQ0T\\\"}],\\\"enable_monitoring_mode\\\":false}\"}","eventPayloadVersion":"v1","runtimeContext":"OPEN","scriptVersion":"a3321ca85cf5aaf6b57585fcd8d67b3a","type":"APP","apiClientId":1780363,"privacyPurposes":[],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized","enabledFlags":["9a3ed68a"]},{"id":"657326447","configuration":"{\"pixelCode\":\"CPG7S63C77UEREVSP7CG\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"22e92c2ad45662f435e4801458fb78cc","type":"APP","apiClientId":4383523,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"},{"id":"368574786","configuration":"{\"pixel_id\":\"454506200363093\",\"pixel_type\":\"facebook_pixel\",\"metaapp_system_user_token\":\"-\"}","eventPayloadVersion":"v1","runtimeContext":"OPEN","scriptVersion":"96420dbe9ea96c426a1b7f364f977719","type":"APP","apiClientId":2329312,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized","enabledFlags":["9a3ed68a"]},{"id":"210895170","configuration":"{\"masterTagID\":\"73099\",\"merchantID\":\"83601\",\"appPath\":\"https:\/\/daedalus.shareasale.com\",\"storeID\":\"NaN\",\"xTypeMode\":\"NaN\",\"xTypeValue\":\"NaN\",\"channelDedup\":\"NaN\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"f300cca684872f2df140f714437af558","type":"APP","apiClientId":4929191,"privacyPurposes":["ANALYTICS","MARKETING"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_personal_data"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"}
546,{"id":"196411714","configuration":"{\"tagID\":\"2616683366557\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"7ae565e198624b39e0856d352b9a6b4c","type":"APP","apiClientId":3009811,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"},{"id":"141001071","eventPayloadVersion":"1","runtimeContext":"LAX","scriptVersion":"1","type":"CUSTOM","privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"name":"ShareASale Tracking"},{"id":"141033839","eventPayloadVersion":"1","runtimeContext":"LAX","scriptVersion":"1","type":"CUSTOM","privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"name":"Microsoft Clarity Tracking"},{"id":"shopify-app-pixel","configuration":"{}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"0530","apiClientId":"shopify-pixel","type":"APP","privacyPurposes":["ANALYTICS","MARKETING"]},{"id":"shopify-custom-pixel","eventPayloadVersion":"v1","runtimeContext":"LAX","scriptVersion":"0530","apiClientId":"shopify-pixel","type":"CUSTOM","privacyPurposes":["ANALYTICS","MARKETING"]}],isMerchantRequest: false,initData: {"shop":{"name":"Rocky Mountain Oils","paymentSettings":{"currencyCode":"USD"},"myshopifyDomain":"rocky-mountain-oils.myshopify.com","countryCode":"US","storefrontUrl":"https:\/\/www.rockymountainoils.com"},"customer":null,"cart":null,"checkout":null,"productVariants":[],"products":[{"id":"8215212327234","handle":"membership","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"44794297090370","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"14686600233327","handle":"mystery-bundle","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"51814431687023","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8025566609730","handle":"breathe-ease-essential-oil-blend","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"52912994877807","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8025560121666","handle":"eucalyptus-radiata-essential-oil","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"48687488991554","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8025540657474","handle":"immune-strength-essential-oil-blends","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"44111359082818","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8025540854082","handle":"lavender-essential-oil","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"44111360459074","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8025578078530","handle":"lemon-essential-oil","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"52948354269551","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8025568411970","handle":"orange-essential-oil","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"52948343062895","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8025578602818","handle":"peppermint-essential-oil","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"44111590523202","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8025569132866","handle":"purify-essential-oil","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"44111543894338","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8025569296706","handle":"rosemary-essential-oil","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"44111544451394","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8025567330626","handle":"frankincense-sacred-essential-oil","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"44111529771330","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8025567494466","handle":"helichrysum-italicum-essential-oil","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"44111532425538","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8025539838274","handle":"sandalwood-essential-oil","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"44111352037698","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8025537380674","handle":"rose-essential-oil","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"44111325430082","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8025532334402","handle":"jasmine-essential-oil","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"44111282209090","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8025523618114","handle":"blue-tansy-essential-oil","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"44111212314946","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8025534529858","handle":"neroli-essential-oil","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"44111301673282","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8025533776194","handle":"melissa-essential-oil","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"44111294955842","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8025539084610","handle":"vitex-berry-essential-oil","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"44111346794818","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]}
546,{"id":"14725145461103","handle":"moldavian-dragonhead-essential-oil","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"52681248309615","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8025526305090","handle":"1-4-ounce-plastic-blending-bottle-bkit8pack","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"51753324347759","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8870804783426","handle":"16oz-spray-bottle","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"47158794846530","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8025566282050","handle":"aligning-essential-oil-blend","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"44111522562370","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8652751077698","handle":"allspice-essential-oil","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"47078204834114","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8025506152770","handle":"almond-carrier-oil","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"44110976221506","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"9213852909890","handle":"alpine-glow-facial-serum","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"51879351517551","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8942900085058","handle":"anxiety-and-aromatherapy-by-phoenix-vincent","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"47354806436162","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8896924516674","handle":"apple-cider-essential-oil-blend","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"47226891534658","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"9039484944706","handle":"arctic-rose-essential-oil-blend","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"51879253344623","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8652749668674","handle":"argan-carrier-oil","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"46760212988226","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8025544458562","handle":"aroma-inhaler-replacement-wicks-24-pack","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"44111383757122","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8976620388674","handle":"aromafuse-waterless-diffuser","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"47440260759874","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8047238250818","handle":"aromatherapy-hanging-car-diffuser","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"49116053209410","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8025566445890","handle":"at-peace-essential-oil-blend","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"48953495716162","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8025540133186","handle":"attention-assist-essential-oil","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"44111356690754","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8025539281218","handle":"attention-assist-roll-on","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"44111348269378","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8293733794114","handle":"aura-awakening-essential-oil-blend","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"45042619580738","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8025542197570","handle":"autumn-air-essential-oil-blend","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"44111368421698","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8193444938050","handle":"aviva-waterless-diffuser","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"48170965172546","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8025506808130","handle":"baby-skin-essential-oil-blend","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"48955852390722","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8025515393346","handle":"balance-essential-oil-blend","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"44111103918402","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8025516147010","handle":"balsam-of-peru-essential-oil","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"44111117812034","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8025517916482","handle":"basil-essential-oil","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"44111146320194","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8025518735682","handle":"bergamot-fcf-essential-oil","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"44111158182210","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8047224979778","handle":"birch-bark","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"51879239319919","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8025520374082","handle":"black-pepper-essential-oil","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"44111183642946","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8025524109634","handle":"blend-essential-kit","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"44111214936386","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8025522864450","handle":"blend-of-cinnamon","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"44111202025794","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8025522995522","handle":"blend-of-jasmine","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"44111202320706","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8025523028290","handle":"blend-of-melissa","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"44111202353474","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8025523093826","handle":"blend-of-neroli","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"44111204254018","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8025523224898","handle":"blend-of-rose","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"44111206252866","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8025541280066","handle":"blend-of-sacred-frankincense","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"44111362720066","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8025523290434","handle":"blend-of-sandalwood","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"44111206285634","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8025523552578","handle":"blood-orange-essential-oil","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"44111210807618","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8025523487042","handle":"blossoms-essential-oil-blend","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"44111210447170","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"9656010211650","handle":"blue-horizon-facial-oil","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"51879264911727","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8025526403394","handle":"brainstorm-essential-oil-blend","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"44111230861634","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8025548292418","handle":"breathe-ease-roll-on","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"44111415345474","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8025551929666","handle":"breathe-roll-on","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"44111433892162","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"9418313072962","handle":"bug-away-balm","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"51977942565231","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8025526436162","handle":"bug-away-bottle","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"44111230894402","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8025552585026","handle":"bug-away-roll-on","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"44111434711362","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"9418368680258","handle":"bug-away-spray","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"51977940238703","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8025526665538","handle":"calming-essential-oil-blend","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"44111237382466","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8047288090946","handle":"candy-cane-essential-oil-blend","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"47256748163394","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"9597254467906","handle":"car-essential-bundle","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"49168699097410","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8025526993218","handle":"cardamom-essential-oil","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"44111238955330","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]}
546,{"id":"14622951801199","handle":"natures-pure-laundry-detergent-sheets","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"51901252305263","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]}],"purchasingCompany":null},},"https://www.rockymountainoils.com/cdn","5982071ew7ea472e3p69b68784m2150dfea",{"modern":"","legacy":""},{"trekkieShim":true,"agentContext":true,"apiClientId":"580111","facebookCapiEnabled":"true","themeId":"188727001455","themePublished":"true","eventMetadataId":"bcbf3c36-32be-4b70-955e-f5e087b045a3","pageType":"home","shopId":"67979084098","storefrontBaseUrl":"https:\/\/www.rockymountainoils.com","extensionBaseUrl":"https:\/\/extensions.shopifycdn.com\/cdn\/shopifycloud\/web-pixels-manager","surface":"storefront-renderer","enabledBetaFlags":"[\"4c64608a\", \"16072cab\", \"8450a54b\", \"7ee89bf1\"]","isMerchantRequest":"false","hashVersion":"5982071ew7ea472e3p69b68784m2150dfea","publish":"custom","events":"[[\"page_viewed\",{}]]"});})();</script>
546<script> 547 window.ShopifyAnalytics = window.ShopifyAnalytics || {}; 548 window.ShopifyAnalytics.meta = window.ShopifyAnalytics.meta || {}; 549 window.ShopifyAnalytics.meta.currency = 'USD'; 550 var meta = {"page":{"pageType":"home","requestId":"f3e44af7-63f6-4294-8fed-499f683f564b-1791062567"}}; 551 for (var attr in meta) { 552 window.ShopifyAnalytics.meta[attr] = meta[attr]; 553 } 554</script>
vendor: 1 bytes, line 554
554
555<script class="analytics"> 556 (function () { 557 var customDocumentWrite = function(content) { 558 var jquery = null; 559 560 if (window.jQuery) { 561 jquery = window.jQuery; 562 } else if (window.Checkout && window.Checkout.$) { 563 jquery = window.Checkout.$; 564 } 565 566 if (jquery) { 567 jquery('body').append(content); 568 } 569 }; 570 571 var hasLoggedConversion = function(token) { 572 if (token) { 573 return document.cookie.indexOf('loggedConversion=' + token) !== -1; 574 } 575 return false; 576 } 577 578 var setCookieIfConversion = function(token) { 579 if (token) { 580 var twoMonthsFromNow = new Date(Date.now()); 581 twoMonthsFromNow.setMonth(twoMonthsFromNow.getMonth() + 2); 582 583 document.cookie = 'loggedConversion=' + token + '; expires=' + twoMonthsFromNow; 584 } 585 } 586 587 var trekkie = window.ShopifyAnalytics.lib = window.trekkie = window.trekkie || []; 588 window.ShopifyAnalytics.lib.trekkie = window.trekkie; 589 if (trekkie.integrations) { 590 return; 591 } 592 trekkie.methods = [ 593 'identify', 594 'page', 595 'ready', 596 'track', 597 'trackForm', 598 'trackLink' 599 ]; 600 trekkie.factory = function(method) { 601 return function() { 602 var args = Array.prototype.slice.call(arguments); 603 args.unshift(method); 604 trekkie.push(args); 605 if (method == 'track' || method == 'page') { 606 var pageUrl; 607 try { 608 pageUrl = window.location.href; 609 } catch (e) {} 610 var pageReferrer; 611 try { 612 pageReferrer = document.referrer; 613 } catch (e) {} 614 try { 615 if (window.__TREKKIE_SHIM_QUEUE == null) { 616 window.__TREKKIE_SHIM_QUEUE = []; 617 } 618 window.__TREKKIE_SHIM_QUEUE.push({ 619 from: 'trekkie-stub', 620 method: method, 621 args: args.slice(1), 622 pageContext: { 623 url: pageUrl, 624 referrer: pageReferrer 625 } 626 }); 627 } catch (e) { 628 // no-op 629 } 630 } 631 return trekkie; 632 }; 633 }; 634 for (var i = 0; i < trekkie.methods.length; i++) { 635 var key = trekkie.methods[i]; 636 trekkie[key] = trekkie.factory(key); 637 } 638 trekkie.load = function(config) { 639 trekkie.config = config || {}; 640 trekkie.config.initialDocumentCookie = document.cookie; 641 var first = document.getElementsByTagName('script')[0]; 642var script = document.createElement('script'); 643script.type = 'text/javascript'; 644script.onerror = function(e) { 645 var scriptFallback = document.createElement('script'); 646 scriptFallback.type = 'text/javascript'; 647 scriptFallback.onerror = function(error) { 648 var Monorail = { 649 produce: function produce(monorailDomain, schemaId, payload) { 650 var currentMs = new Date().getTime(); 651 var event = { 652 schema_id: schemaId, 653 payload: payload, 654 metadata: { 655 event_created_at_ms: currentMs, 656 event_sent_at_ms: currentMs 657 } 658 }; 659 return Monorail.sendRequest("https://" + monorailDomain + "/v1/produce", JSON.stringify(event)); 660 }, 661 sendRequest: function sendRequest(endpointUrl, payload) { 662 // Try the sendBeacon API 663 if (window && window.navigator && typeof window.navigator.sendBeacon === 'function' && typeof window.Blob === 'function' && !Monorail.isIos12()) { 664 var blobData = new window.Blob([payload], { 665 type: 'text/plain' 666 }); 667 668 if (window.navigator.sendBeacon(endpointUrl, blobData)) { 669 return true; 670 } // sendBeacon was not successful 671 672 } // XHR beacon 673 674 var xhr = new XMLHttpRequest(); 675 676 try { 677 xhr.open('POST', endpointUrl); 678 xhr.setRequestHeader('Content-Type', 'text/plain'); 679 xhr.send(payload); 680 } catch (e) { 681 console.log(e); 682 } 683 684 return false; 685 }, 686 isIos12: function isIos12() { 687 return window.navigator.userAgent.lastIndexOf('iPhone; CPU iPhone OS 12_') !== -1 || window.navigator.userAgent.lastIndexOf('iPad; CPU OS 12_') !== -1; 688 } 689 }; 690 Monorail.produce('monorail-edge.shopifysvc.com', 691 'trekkie_storefront_load_errors/1.1', 692 {shop_id: 67979084098, 693 theme_id: 188727001455, 694 app_name: "storefront", 695 context_url: window.location.href, 696 source_url: "//www.rockymountainoils.com/cdn/s/trekkie.storefront.2f6d7d7ede7d24234881a9cd5f47e679642fa1f6.min.js"}); 697 698 }; 699 scriptFallback.async = true; 700 scriptFallback.src = '//www.rockymountainoils.com/cdn/s/trekkie.storefront.2f6d7d7ede7d24234881a9cd5f47e679642fa1f6.min.js'; 701 first.parentNode.insertBefore(scriptFallback, first); 702}; 703script.async = true; 704script.src = '//www.rockymountainoils.com/cdn/s/trekkie.storefront.2f6d7d7ede7d24234881a9cd5f47e679642fa1f6.min.js'; 705first.parentNode.insertBefore(script, first); 706 707 }; 708 trekkie.load( 709 {"Trekkie":{"appName":"storefront","development":false,"defaultAttributes":{"shopId":67979084098,"isMerchantRequest":null,"themeId":188727001455,"themeCityHash":"11484302718442395350","contentLanguage":"en","currency":"USD","eventMetadataId":"bcbf3c36-32be-4b70-955e-f5e087b045a3"},"isServerSideCookieWritingEnabled":true,"monorailRegion":"shop_domain","enabledBetaFlags":["764d78cb","8450a54b","7ee89bf1","4c64608a"]},"Session Attribution":{},"S2S":{"facebookCapiEnabled":true,"source":"trekkie-storefront-renderer","apiClientId":580111}} 710 ); 711 712 var loaded = false;
713 trekkie.ready(function() { 714 if (loaded) return; 715 loaded = true; 716 717 window.ShopifyAnalytics.lib = window.trekkie; 718 719 var originalDocumentWrite = document.write; 720 document.write = customDocumentWrite; 721 try { window.ShopifyAnalytics.merchantGoogleAnalytics.call(this); } catch(error) {}; 722 document.write = originalDocumentWrite; 723 724 var match = window.location.pathname.match(/checkouts\/(.+)\/(thank_you|post_purchase)/) 725 var token = match? match[1]: undefined; 726 if (!hasLoggedConversion(token)) { 727 setCookieIfConversion(token); 728 729 } 730 }); 731 732 window.ShopifyAnalytics.lib.page(null,{"pageType":"home","requestId":"f3e44af7-63f6-4294-8fed-499f683f564b-1791062567","shopifyEmitted":true}); 733 734 var eventsListenerScript = document.createElement('script'); 735 eventsListenerScript.async = true; 736 eventsListenerScript.src = "//www.rockymountainoils.com/cdn/shopifycloud/storefront/assets/shop_events_listener-4e26a9ce.js"; 737 document.getElementsByTagName('head')[0].appendChild(eventsListenerScript); 738})();</script>
vendor: 1 bytes, line 738
738
739<script 740 defer 741 src="https://www.rockymountainoils.com/cdn/shopifycloud/perf-kit/shopify-perf-kit-3.9.4.min.js" 742 data-application="storefront-renderer" 743 data-shop-id="67979084098" 744 data-render-region="gcp-us-central1" 745 data-page-type="index" 746 data-theme-instance-id="188727001455" 747 data-theme-name="Rocky Mountain Oils" 748 data-theme-version="2.0.0" 749 data-monorail-region="shop_domain" 750 data-resource-timing-sampling-rate="10" 751 data-shs="true" 752 data-shs-beacon="true" 753 data-shs-export-with-fetch="true" 754 data-shs-logs-sample-rate="1" 755 data-shs-beacon-endpoint="https://www.rockymountainoils.com/api/collect" 756></script>
756 757<meta name="shopify-y" content="ade57fcd-4b33-4185-9a50-7e5b717ee517" data-expiration="1822620167000"><meta name="shopify-s" content="a096f28a-7430-4ef9-bf77-263d5f46d2ce" data-expiration="1791064367000"><meta name="new-cookie-storage-activated" content="t"> 758</head> 759 <body class="template-index"> 760 761 762 <div class="skip-links"> 763 <a href="#main-content" class="skip-to-main-link">Skip to main content</a> 764 <a href="#search-input" class="skip-to-search">Skip to search</a> 765 <a href="#cart-sidebar" class="skip-to-cart">Skip to cart</a> 766 </div> 767 768 <div class="Wrapper"> 769 <header class="site-header"> 770 <section id="shopify-section-announcement-bar" class="shopify-section section"> 771 772 773<div class="header-top"> 774 <div class="container"> 775 <div class="top-slider-wrap"> 776 <div class="SalesSliderWrapper"> 777 <div id="SalesSlider" class="owl-carousel carousel-fade owl-theme"> 778 779 780 <div class="item"><a class = "item_link" href="/collections/build-a-fall-kit"><div class="__desktop"> 781 <p style="font-size: 16px; color: white;">ð Build a Fall Kit Sale â Mix & Match 20 Fall Oils | Save Up to 45% Off | Oct 2â4 Only â Shop Now</p> 782 </div> 783 <div class="__mobile __announcement_mobile">ð Build a Fall Kit Sale â Mix & Match 20 Fall Oils | Save Up to 45% Off | Oct 2â4 Only â Shop Now</div></a></div> 784 785 786 787 788 <div class="item"><a class = "item_link" href="/products/membership"><div class="__desktop"> 789 <p style="font-size: 16px; color: white;">Oil'ty Plus! Experience Huge Savings With Our New Membership!</p> 790 </div> 791 <div class="__mobile __announcement_mobile">Oil'ty Plus! Experience Huge Savings With Our New Membership!</div></a></div> 792 793 794 795 796 <div class="item"><a class = "item_link" href="/pages/rocky-mountain-impact-partners"><div class="__desktop"> 797 <p style="font-size: 16px; color: white;">Become A Rocky Mountain Impact Partner</p> 798 </div> 799 <div class="__mobile __announcement_mobile">Become A Rocky Mountain Impact Partner</div></a></div> 800 801 802 803 804 <div class="item"><a class = "item_link" href="/products/membership"><div class="__desktop"> 805 <p style="font-size: 16px; color: white;">Get HUGE Savings and Amazing Perks | Oil'ty Plus is Here!</p> 806 </div> 807 <div class="__mobile __announcement_mobile">Get HUGE Savings and Amazing Perks | Oil'ty Plus is Here!</div></a></div> 808 809 810 811 812 <div class="item"><a class = "item_link" href="/collections/shop"><div class="__desktop"> 813 <p style="font-size: 16px; color: white;">FREE shipping on orders over $49.95</p> 814 815 816 <div id="header-countdown-fb0c4bdc-b85d-4990-b520-d890c066ab23" class="_countdown"></div></div> 817 <div class="__mobile __announcement_mobile">FREE shipping on orders over $49.95</div></a></div> 818 819</div> 820 </div> 821 </div> 822 </div> 823</div> 824 825
826<script> 827 pushCountdown('_countdown', '2026-10-05 00:00:00'); 828 function pushCountdown( countdown, countTo ) { 829 830 // Set the date we're counting down to 831 var countToSplit = countTo.split(/[- :]/); 832 ///console.log(countToSplit); 833 var countDownDate = new Date( countToSplit[0], countToSplit[1]-1, countToSplit[2], countToSplit[3], countToSplit[4], countToSplit[5] ).getTime(); 834 835 // Update the count down every 1 second 836 var x = setInterval(function() { 837 838 // Get today's date and time 839 var now = new Date().getTime(); 840 841 // Find the distance between now and the count down date 842 var distance = countDownDate - now; 843 844 // Time calculations for days, hours, minutes and seconds 845 var days = Math.floor(distance / (1000 * 60 * 60 * 24)); 846 var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)); 847 var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60)); 848 var seconds = Math.floor((distance % (1000 * 60)) / 1000); 849 850 var dclass = ''; 851 var hclass = ''; 852 var mclass = ''; 853 var sclass = ''; 854 855 if (hours < 13) { 856 hclass = ' class="bright"'; 857 mclass = ' class="bright"'; 858 sclass = ' class="bright"'; 859 } 860 861 dclass = ' class="fadeds"'; 862 if (hours == 0 && days == 0) hclass = ' class="faded"'; 863 if (minutes == 0 && hours == 0 && days == 0) mclass = ' class="faded_"'; 864 865 // If the count down is finished, write some text 866 if (distance < 0) { 867 clearInterval(x); 868 //document.getElementsByClassName( countdown )[0].innerHTML = "EXPIRED"; 869 } else { 870 for (let i = 0; i < document.getElementsByClassName(countdown).length; i++) { 871 document.getElementsByClassName( countdown )[i].innerHTML = "<span" + dclass + ">" + days + "<i>d</i></span>"; 872 document.getElementsByClassName( countdown )[i].innerHTML += "<span" + hclass + ">" + hours + "<i>hr</i></span>"; 873 document.getElementsByClassName( countdown )[i].innerHTML += "<span" + mclass + ">" + minutes + "<i>m</i></span>"; 874 document.getElementsByClassName( countdown )[i].innerHTML += "<span" + sclass + ">" + seconds + "<i>s</i></span>"; 875 } 876 } 877 }, 1000); 878 } 879 </script>
879 880</section> 881 <div id="shopify-section-header" class="shopify-section section-header"><div class="header-navbar"> 882 <div class="container"> 883 <div class="header-navbar-wrapper"> 884 <div class="d-flex justify-content-between align-items-center"> 885 <div class="logo-menu-wrap"> 886 <div class="d-flex align-items-center"> 887 <button id="BurgerMenu" class="burger-menu" aria-label="Open navigation menu" aria-expanded="false" aria-controls="side-menu"><i class="menu-icon" aria-hidden="true"></i></button> 888 <div class="site-logo"><a href="https://www.rockymountainoils.com"> 889 <img src="//www.rockymountainoils.com/cdn/shop/t/383/assets/rmo-logo.svg?v=119252189530219791611785434280" width="100" class="img-fluid" height="44" alt="Rocky Mountain Oils"/> 890 </a></div> 891 </div> 892 </div> 893 <div class="nav-search-wrap"> 894 <div class="rocky_search_bar"> 895 <form action="/search" method="get" role="search" class="search-bar" aria-label="Search form"> 896 <label for="search-input" class="visually-hidden">Search</label> 897 <input 898 id="search-input" 899 type="search" 900 name="q" 901 placeholder="Search solutions, categories, products" 902 aria-label="Search Input" 903 > 904 <input type="hidden" name="type" value="product"> 905 <button type="submit" aria-label="Search"> 906 <i class="search-icon" aria-hidden="true"></i> 907 </button> 908 </form> 909 </div> 910 </div> 911 <div class="user-actions-wrap"> 912 <div class="user-actions"> 913 <div class="user-action-item"><a href="/pages/contact"><img src="//www.rockymountainoils.com/cdn/shop/t/383/assets/chat.svg?v=85283629329099276931785434158" class="chat" width="28" height="34" alt="Help Icon"><span>Contact Us</span></a></div> 914 915 <div class="user-action-item"><a href="/account/login"><img src="//www.rockymountainoils.com/cdn/shop/t/383/assets/account.svg?v=64592610833481847801785434122" width="30" height="30" alt="Account Icon"><span>Account</span></a></div> 916 917 <button 918 class="user-action-item mini-cart" 919 id="CartMenu" 920 aria-label="Open cart, 0 items" 921 aria-haspopup="true" 922 aria-controls="cart-sidebar" 923 type="button" 924 > 925 <img 926 src="//www.rockymountainoils.com/cdn/shop/t/383/assets/cart.svg?v=89473404183696256301785434154" 927 width="30" 928 height="30" 929 alt="" 930 aria-hidden="true" 931 > 932 933 <span>Cart</span> 934 935 <span 936 class="mini-cart-count" 937 aria-live="polite" 938 > 939 0 940 </span> 941 </button> 942 </div> 943 </div> 944 </div> 945 </div> 946 </div> 947</div> 948 949 950 951 952 953 954</div> 955 <section id="shopify-section-menu-bar" class="shopify-section section"><div class="header-menu-wrapper"> 956<div class="container"> 957 <nav class="nav-menu"> 958 <ul class="main-menu"> 959 960 961 962 <li><a href="/collections/shop">Shop All</a></li> 963 964 965 966 <li class="has_sub_menu bb"> 967 <a href="/collections/all-essential-oils">Essential Oils</a> 968 <ul class="sub_menu "><li><a href="/collections/essential-oil-kits"> 969 Bundles & Kits 970 </a></li><li><a href="/collections/essential-oils"> 971 Singles 972 </a></li><li><a href="/collections/essential-oil-blends"> 973 Blends 974 </a></li><li><a href="/collections/organic-essential-oils"> 975 Organics 976 </a></li><li><a href="/collections/luxury-oils"> 977 Luxury Oils 978 </a></li><li><a href="/collections/essential-oil-roll-ons"> 979 Roll-Ons 980 </a></li><li><a href="/collections/for-kids"> 981 Kid Safe 982 </a></li><li><a href="/collections/accessories"> 983 Accessories 984 </a></li><li><a href="/collections/seasonal"> 985 Seasonal 986 </a></li></ul> 987 </li> 988 989 990 991 992 993 994 <li class="has_sub_menu aa"> 995 <a href="/collections/body-care">Home & Body</a> 996 <ul class="sub_menu"> 997 <li><a href="/collections/essential-oil-kits">Bundles & Kits</a></li> 998 999 1000 <li class="has_nested_sub_menu"> 1001 <a href="/collections/body-care">Body Care<img src="//www.rockymountainoils.com/cdn/shop/t/383/assets/Path-arrow-next.png?v=76227656136117390941785434244" alt="Path Arrow Next" class="content-icon arrow"></a> 1002 <ul class="nested_sub_menu"><li><a href="/collections/carrier-oils">Carrier Oils</a></li><li><a href="/collections/massage-oils">Massage</a></li><li><a href="/collections/pain-essential-oils">Pain Relief</a></li></ul> 1003 </li> 1004 1005 1006 <li><a href="/collections/skin-care">Skin Care</a></li> 1007 1008 1009 <li><a href="/collections/hair-care">Hair Care</a></li> 1010 1011 1012 <li><a href="/collections/bath-care">Bath Care</a></li> 1013 1014 1015 <li class="has_nested_sub_menu"> 1016 <a href="https://www.rockymountainoils.com/collections/wellness">Wellness<img src="//www.rockymountainoils.com/cdn/shop/t/383/assets/Path-arrow-next.png?v=76227656136117390941785434244" alt="Path Arrow Next" class="content-icon arrow"></a> 1017 <ul class="nested_sub_menu"><li><a href="/collections/immunity-essential-oils">Immunity</a></li><li><a href="/collections/mood-boost">Mood & Stress</a></li></ul> 1018 </li> 1019 1020 1021 <li><a href="/collections/cleaning-essential-oils">Cleaning & Laundry</a></li> 1022 1023 1024 <li><a href="/collections/outdoor-essentials">Outdoor Essentials</a></li> 1025 1026 1027 <li class="has_nested_sub_menu"> 1028 <a href="/collections/essential-oil-diffusers">Diffusers<img src="//www.rockymountainoils.com/cdn/shop/t/383/assets/Path-arrow-next.png?v=76227656136117390941785434244" alt="Path Arrow Next" class="content-icon arrow"></a> 1029 <ul class="nested_sub_menu"><li><a href="/collections/ultrasonic-diffusers">Ultrasonic</a></li><li><a href="/collections/waterless-diffusers">Waterless</a></li><li><a href="/collections/passive-diffusers">Passive</a></li></ul> 1030 </li> 1031 1032 1033 <li><a href="/collections/accessories">Accessories</a></li> 1034 1035</ul> 1036 </li> 1037 1038 1039 1040 1041 <li class="has_sub_menu bb"> 1042 <a href="/pages/essential-oil-101">Learn</a> 1043 <ul class="sub_menu "><li><a href="https://www.rockymountainoils.com/blogs/all"> 1044 Our Blog "The Blend" 1045 </a></li><li><a href="https://www.rockymountainoils.com/pages/essential-oil-101"> 1046 Essential Oil 101 1047 </a></li><li><a href="https://www.rockymountainoils.com/pages/kid-safety"> 1048 Kids & Essential Oils 101 1049 </a></li><li><a href="https://www.rockymountainoils.com/pages/dilution-rate"> 1050 Dilution Guide 1051 </a></li><li><a href="https://www.rockymountainoils.com/pages/compare"> 1052 Compare Oils 1053 </a></li><li><a href="https://www.rockymountainoils.com/pages/essential-oil-garden"> 1054 Essential Oil Garden 1055 </a></li><li><a href="https://www.rockymountainoils.com/pages/get-gcms-test-results"> 1056 Your GC/MS Lookup 1057 </a></li></ul> 1058 </li> 1059 1060 1061 1062 1063 1064 1065 1066 <li><a href="/collections/new-arrivals">New Arrivals</a></li> 1067 1068 1069 1070 1071 <li class="has_sub_menu aa"> 1072 <a href="/pages/rewards">Rewards</a> 1073 <ul class="sub_menu"> 1074 <li><a href="/products/membership">Oil'ty Plus</a></li> 1075 1076 1077 <li><a href="/pages/rewards">Earn Points</a></li> 1078 1079</ul> 1080 </li> 1081 1082 1083 1084 1085 1086 1087 <li><a href="/collections/sale">Sale</a></li> 1088 1089</ul> 1090 </nav> 1091</div> 1092</div> 1093 1094<aside class="side-menu"> 1095 <div class="side-menu-close"> 1096 <button class="side-menu-close" aria-label="Close menu"> 1097 <i class="icon-close" aria-hidden="true"></i> 1098 </button> 1099 </div> 1100 <div class="sidebar-menu-wrapper"> 1101 <div class="sidebar-menu-wrap"> 1102 <nav class="sidebar-nav-menu"> 1103 <ul class="sidebar-menu menu-lavel-0"> 1104 1105 1106 1107 1108 1109 1110 <li class="menu-item"><a href="/collections/shop">Shop All</a></li> 1111 1112 1113 1114 1115 <li class="menu-item discover-dropdown-menu">
1116 <div class="sub-menu-item"> 1117 Essential Oils 1118 <div id="menu-accordion-icon" class="isClosed">+</div> 1119 </div> 1120 <ul class="sidebar-sub-menu menu-lavel-1"><li><a href="/collections/essential-oil-kits"> 1121 Bundles & Kits 1122 </a></li><li><a href="/collections/essential-oils"> 1123 Singles 1124 </a></li><li><a href="/collections/essential-oil-blends"> 1125 Blends 1126 </a></li><li><a href="/collections/organic-essential-oils"> 1127 Organics 1128 </a></li><li><a href="/collections/luxury-oils"> 1129 Luxury Oils 1130 </a></li><li><a href="/collections/essential-oil-roll-ons"> 1131 Roll-Ons 1132 </a></li><li><a href="/collections/for-kids"> 1133 Kid Safe 1134 </a></li><li><a href="/collections/accessories"> 1135 Accessories 1136 </a></li><li><a href="/collections/seasonal"> 1137 Seasonal 1138 </a></li></ul> 1139 </li> 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 <li class="menu-item discover-dropdown-menu"> 1151 <div class="sub-menu-item"> 1152 Home & Body 1153 <div id="menu-accordion-icon" class="isClosed">+</div> 1154 </div> 1155 <ul class="sidebar-sub-menu menu-lavel-1"><li class="menu-item discover-dropdown-menu"> 1156 <div class="sub-menu-item-2"> 1157 <a href="/collections/essential-oil-kits">Bundles & Kits</a> 1158 1159 </div> 1160 <ul class="sidebar-sub-menu menu-lavel-2"></ul> 1161 </li><li class="menu-item discover-dropdown-menu"> 1162 <div class="sub-menu-item-2"><a>Body Care 1163<div id="menu-accordion-icon" class="isClosed">+</div></a> 1164 1165 </div> 1166 <ul class="sidebar-sub-menu menu-lavel-2"><li><a href="/collections/carrier-oils">Carrier Oils</a></li><li><a href="/collections/massage-oils">Massage</a></li><li><a href="/collections/pain-essential-oils">Pain Relief</a></li></ul> 1167 </li><li class="menu-item discover-dropdown-menu"> 1168 <div class="sub-menu-item-2"> 1169 <a href="/collections/skin-care">Skin Care</a> 1170 1171 </div> 1172 <ul class="sidebar-sub-menu menu-lavel-2"></ul> 1173 </li><li class="menu-item discover-dropdown-menu"> 1174 <div class="sub-menu-item-2"> 1175 <a href="/collections/hair-care">Hair Care</a> 1176 1177 </div> 1178 <ul class="sidebar-sub-menu menu-lavel-2"></ul> 1179 </li><li class="menu-item discover-dropdown-menu"> 1180 <div class="sub-menu
1180-item-2"> 1181 <a href="/collections/bath-care">Bath Care</a> 1182 1183 </div> 1184 <ul class="sidebar-sub-menu menu-lavel-2"></ul> 1185 </li><li class="menu-item discover-dropdown-menu"> 1186 <div class="sub-menu-item-2"><a>Wellness 1187<div id="menu-accordion-icon" class="isClosed">+</div></a> 1188 1189 </div> 1190 <ul class="sidebar-sub-menu menu-lavel-2"><li><a href="/collections/immunity-essential-oils">Immunity</a></li><li><a href="/collections/mood-boost">Mood & Stress</a></li></ul> 1191 </li><li class="menu-item discover-dropdown-menu"> 1192 <div class="sub-menu-item-2"> 1193 <a href="/collections/cleaning-essential-oils">Cleaning & Laundry</a> 1194 1195 </div> 1196 <ul class="sidebar-sub-menu menu-lavel-2"></ul> 1197 </li><li class="menu-item discover-dropdown-menu"> 1198 <div class="sub-menu-item-2"> 1199 <a href="/collections/outdoor-essentials">Outdoor Essentials</a> 1200 1201 </div> 1202 <ul class="sidebar-sub-menu menu-lavel-2"></ul> 1203 </li><li class="menu-item discover-dropdown-menu"> 1204 <div class="sub-menu-item-2"><a>Diffusers 1205<div id="menu-accordion-icon" class="isClosed">+</div></a> 1206 1207 </div> 1208 <ul class="sidebar-sub-menu menu-lavel-2"><li><a href="/collections/ultrasonic-diffusers">Ultrasonic</a></li><li><a href="/collections/waterless-diffusers">Waterless</a></li><li><a href="/collections/passive-diffusers">Passive</a></li></ul> 1209 </li><li class="menu-item discover-dropdown-menu"> 1210 <div class="sub-menu-item-2"> 1211 <a href="/collections/accessories">Accessories</a> 1212 1213 </div> 1214 <ul class="sidebar-sub-menu menu-lavel-2"></ul> 1215 </li></ul> 1216 </li> 1217 1218 1219 1220 1221 1222 1223 <li class="menu-item discover-dropdown-menu"> 1224 <div class="sub-menu-item"> 1225 Learn 1226 <div id="menu-accordion-icon" class="isClosed">+</div> 1227 </div> 1228 <ul class="sidebar-sub-menu menu-lavel-1"><li><a href="https://www.rockymountainoils.com/blogs/all"> 1229 Our Blog "The Blend" 1230 </a></li><li><a href="https://www.rockymountainoils.com/pages/essential-oil-101"> 1231 Essential Oil 101 1232 </a></li><li><a href="https://www.rockymountainoils.com/pages/kid-safety"> 1233 Kids & Essential Oils 101 1234 </a></li><li><a href="https://www.rockymountainoils.com/pages/dilution-rate"> 1235 Dilution Guide 1236 </a></li><li><a href="https://www.rockymountainoils.com/pages/compare"> 1237 Compare Oils 1238 </a></li><li><a href="https://www.rockymountainoils.com/pages/essential-oil-garden"> 1239 Essential Oil Garden 1240 </a></li><li><a href="https://www.rockymountainoils.com/pages/get-gcms-test-results"> 1241 Your GC/MS Lookup 1242 </a></li></ul> 1243 </li> 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 <li class="menu-item"><a href="/collections/new-arrivals">New Arrivals</a></li> 1257 1258 1259 1260 1261 1262 1263 <li class="menu-item discover-dropdown-menu">
1264 <div class="sub-menu-item"> 1265 Rewards 1266 <div id="menu-accordion-icon" class="isClosed">+</div> 1267 </div> 1268 <ul class="sidebar-sub-menu menu-lavel-1"><li class="menu-item discover-dropdown-menu"> 1269 <div class="sub-menu-item-2"> 1270 <a href="/products/membership">Oil'ty Plus</a> 1271 1272 </div> 1273 <ul class="sidebar-sub-menu menu-lavel-2"></ul> 1274 </li><li class="menu-item discover-dropdown-menu"> 1275 <div class="sub-menu-item-2"> 1276 <a href="/pages/rewards">Earn Points</a> 1277 1278 </div> 1279 <ul class="sidebar-sub-menu menu-lavel-2"></ul> 1280 </li></ul> 1281 </li> 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 <li class="menu-item"><a href="/collections/sale">Sale</a></li> 1293 1294 1295 1296 </ul> 1297 <div class="sidebar-account-button"> 1298 1299 <a href="/account/login" class="sidebar-account-btn">LOGIN / CREATE AN ACCOUNT</a> 1300 1301 </div> 1302 </nav> 1303 </div> 1304 </div> 1305</aside> 1306 1307<style> #shopify-section-menu-bar .container {max-width: 1200px;} </style></section> 1308 <div id="shopify-section-cart-sidebar" class="shopify-section"><link href="//www.rockymountainoils.com/cdn/shop/t/383/assets/securely-checkout.css?v=42801585711833878161785434286" rel="stylesheet" type="text/css" media="all" /> 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318<aside class="cart-side-menu cart-sidebar is_empty" id="cart-sidebar" aria-label="Shopping cart sidebar"> 1319 <div class="cart-menu-heading"> 1320 <span id="cart-sidebar-heading">Cart</span> 1321 <button class="cart-side-menu-close" aria-label="Close cart" aria-controls="cart-sidebar"> 1322 <i class="icon-close-b" aria-hidden="true"></i> 1323 </button> 1324 </div> 1325 1326 <div class="product-in-cart"> 1327 1328 1329 1330 1331 1332 1333 1334 1335 <div class="ajax-cart-free-shipping" 100> 1336 <h3>Almost There! Add $<span>49.95</span> To Unlock Free Shipping</h3> 1337 <div class="progress"> 1338 <div class="progress-bar progress-bar-striped bg-warning progress-bar-animated" role="progressbar" style="width: 0%" aria-valuenow="0.00" aria-valuemin="0" aria-valuemax="49.95"></div> 1339 </div> 1340 </div> 1341 1342 1343 1344 <p class="empty-cart" aria-live="polite">You have no items in your shopping cart.</p> 1345 1346 <div class="upsell-cart" role="region" aria-label="Recommended product"> 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 <div class="upsell-cart-sidebar" id="upsell-cart-sidebar-14622951801199"> 1360 1361 1362 <div class="upsell-info"> 1363 1364 <img class="upsell-image" 1365 src="//www.rockymountainoils.com/cdn/shop/files/Nature_s_Pure_Laundry_Sheets_4.png?v=1744302547&width=160" 1366 alt="Nature's Pure Laundry Detergent Sheets, Rocky Mountain Oils" 1367 width="80" height="80" loading="lazy" 1368 style="width:80px;height:80px;object-fit:contain;"> 1369 1370 1371 <div class="upsell-info-details"> 1372 <h5 class="upsell-title">Nature's Pure Laundry Detergent Sheets</h5> 1373 <p class="upsell-price">$19.95</p><form method="post" action="/cart/add" id="upsell-form-14622951801199" accept-charset="UTF-8" class="form" enctype="multipart/form-data" novalidate="novalidate" data-type="add-to-cart-form"><input type="hidden" name="form_type" value="product" /><input type="hidden" name="utf8" value="â" /> 1374 <input type="hidden" name="id" value="51901252305263"> 1375 1376 1377 <button type="submit" class="upsell-add add-to-cart" data-product-id="14622951801199">
1378 <span>Add to Cart</span> 1379 </button><input type="hidden" name="product-id" value="14622951801199" /><input type="hidden" name="section-id" value="cart-sidebar" /></form></div> 1380 </div> 1381 </div> 1382 1383 1384 1385
1386<script> 1387 document.addEventListener('DOMContentLoaded', function () { 1388 document.querySelectorAll('.upsell-variant-select').forEach(function (select) { 1389 select.addEventListener('change', function () { 1390 var opt = this.options[this.selectedIndex]; 1391 var wrap = this.closest('.upsell-cart-sidebar'); 1392 if (!wrap || !opt) return; 1393 var priceEl = wrap.querySelector('.upsell-price'); 1394 var imgEl = wrap.querySelector('.upsell-image'); 1395 if (priceEl && opt.dataset.price) { priceEl.textContent = opt.dataset.price; } 1396 if (imgEl && opt.dataset.image) { imgEl.src = opt.dataset.image; } 1397 if (imgEl && opt.dataset.alt) { imgEl.alt = opt.dataset.alt; } 1398 }); 1399 }); 1400 1401 function syncUpsell() { 1402 fetch('/cart.js') 1403 .then(function (r) { return r.json(); }) 1404 .then(function (cart) { 1405 document.querySelectorAll('.upsell-cart-sidebar').forEach(function (el) { 1406 var pid = parseInt(el.id.replace('upsell-cart-sidebar-', ''), 10); 1407 var inCart = cart.items.some(function (item) { return item.product_id === pid; }); 1408 el.style.display = inCart ? 'none' : ''; 1409 }); 1410 }); 1411 } 1412 syncUpsell(); 1413 1414 document.addEventListener('click', function (event) { 1415 var addBtn = event.target.closest('.upsell-add'); 1416 if (addBtn) { 1417 var wrap = addBtn.closest('.upsell-cart-sidebar'); 1418 if (wrap) { wrap.style.display = 'none'; } 1419 } 1420 }); 1421 1422 var cartList = document.querySelector('.carts-product-list'); 1423 if (cartList) { 1424 var syncTimer; 1425 new MutationObserver(function () { 1426 clearTimeout(syncTimer); 1427 syncTimer = setTimeout(syncUpsell, 150); 1428 }).observe(cartList, { childList: true }); 1429 } 1430 }); 1431</script>
1431 1432 </div> 1433 1434 <div class="cart-sidebar-loading"><img src="//www.rockymountainoils.com/cdn/shop/t/383/assets/ajax-loader.gif?v=344831891803776881785434126" alt="Loading, please wait"></div> 1435 <div class="cart-sidebar-error-message" style="display:none;" role="alert" aria-live="assertive"></div>
1436<script> 1437 window.RMO_COMPARE = window.RMO_COMPARE || {};</script>
1437 1438<ul class="carts-product-list" aria-label="Products in your cart"><p role="listitem" style="text-align:center;">Start shopping now!</p> 1439</ul> 1440 1441 <div class="securely-checkout-cart-sidebar"> 1442 <h6>Securely Checkout With</h6> 1443 <div class="cro-payment-icons"> 1444 <div class="icon-container"> 1445 <ul> 1446 <li style="list-style:none; display: inline-block; margin-right: 5px; max-width: 40px;"><svg class="icon icon--full-color" xmlns="http://www.w3.org/2000/svg" role="img" aria-labelledby="pi-american_express" viewBox="0 0 38 24" width="38" height="24"> 1447 <title id="pi-american_express">American Express</title> 1448 <path fill="#000" d="M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3Z" opacity=".07"></path> 1449 <path fill="#006FCF" d="M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32Z"></path> 1450 <path fill="#FFF" d="M22.012 19.936v-8.421L37 11.528v2.326l-1.732 1.852L37 17.573v2.375h-2.766l-1.47-1.622-1.46 1.628-9.292-.02Z"></path> 1451 <path fill="#006FCF" d="M23.013 19.012v-6.57h5.572v1.513h-3.768v1.028h3.678v1.488h-3.678v1.01h3.768v1.531h-5.572Z"></path> 1452 <path fill="#006FCF" d="m28.557 19.012 3.083-3.289-3.083-3.282h2.386l1.884 2.083 1.89-2.082H37v.051l-3.017 3.23L37 18.92v.093h-2.307l-1.917-2.103-1.898 2.104h-2.321Z"></path> 1453 <path fill="#FFF" d="M22.71 4.04h3.614l1.269 2.881V4.04h4.46l.77 2.159.771-2.159H37v8.421H19l3.71-8.421Z"></path> 1454 <path fill="#006FCF" d="m23.395 4.955-2.916 6.566h2l.55-1.315h2.98l.55 1.315h2.05l-2.904-6.566h-2.31Zm.25 3.777.875-2.09.873 2.09h-1.748Z"></path> 1455 <path fill="#006FCF" d="M28.581 11.52V4.953l2.811.01L32.84 9l1.456-4.046H37v6.565l-1.74.016v-4.51l-1.644 4.494h-1.59L30.35 7.01v4.51h-1.768Z"></path> 1456 </svg></li> 1457 <li style="list-style:none; display: inline-block; margin-right: 5px; max-width: 40px;"><svg class="icon icon--full-color" version="1.1" xmlns="http://www.w3.org/2000/svg" role="img" x="0" y="0" width="38" height="24" viewBox="0 0 165.521 105.965" xml:space="preserve" aria-labelledby="pi-apple_pay"> 1458 <title id="pi-apple_pay">Apple Pay</title> 1459 <path fill="#000" d="M150.698 0H14.823c-.566 0-1.133 0-1.698.003-.477.004-.953.009-1.43.022-1.039.028-2.087.09-3.113.274a10.51 10.51 0 0 0-2.958.975 9.932 9.932 0 0 0-4.35 4.35 10.463 10.463 0 0 0-.975 2.96C.113 9.611.052 10.658.024 11.696a70.22 70.22 0 0 0-.022 1.43C0 13.69 0 14.256 0 14.823v76.318c0 .567 0 1.132.002 1.699.003.476.009.953.022 1.43.028 1.036.09 2.084.275 3.11a10.46 10.46 0 0 0 .974 2.96 9.897 9.897 0 0 0 1.83 2.52 9.874 9.874 0 0 0 2.52 1.83c.947.483 1.917.79 2.96.977 1.025.183 2.073.245 3.112.273.477.011.953.017 1.43.02.565.004 1.132.004 1.698.004h135.875c.565 0 1.132 0 1.697-.004.476-.002.952-.009 1.431-.02 1.037-.028 2.085-.09 3.113-.273a10.478 10.478 0 0 0 2.958-.977 9.955 9.955 0 0 0 4.35-4.35c.483-.947.789-1.917.974-2.96.186-1.026.246-2.074.274-3.11.013-.477.02-.954.022-1.43.004-.567.004-1.132.004-1.699V14.824c0-.567 0-1.133-.004-1.699a63.067 63.067 0 0 0-.022-1.429c-.028-1.038-.088-2.085-.274-3.112a10.4 10.4 0 0 0-.974-2.96 9.94 9.94 0 0 0-4.35-4.35A10.52 10.52 0 0 0 156.939.3c-1.028-.185-2.076-.246-3.113-.274a71.417 71.417 0 0 0-1.431-.022C151.83 0 151.263 0 150.698 0z"></path> 1460 <path fill="#FFF" d="M150.698 3.532l1.672.003c.452.003.905.008 1.36.02.793.022 1.719.065 2.583.22.75.135 1.38.34 1.984.648a6.392 6.392 0 0 1 2.804 2.807c.306.6.51 1.226.645 1.983.154.854.197 1.783.218 2.58.013.45.019.9.02 1.36.005.557.005 1.113.005 1.671v76.318c0 .558 0 1.114-.004 1.682-.002.45-.008.9-.02 1.35-.022.796-.065 1.725-.221 2.589a6.855 6.855 0 0 1-.645 1.975 6.397 6.397 0 0 1-2.808 2.807c-.6.306-1.228.511-1.971.645-.881.157-1.847.2-2.574.22-.457.01-.912.017-1.379.019-.555.004-1.113.004-1.669.004H14.801c-.55 0-1.1 0-1.66-.004a74.993 74.993 0 0 1-1.35-.018c-.744-.02-1.71-.064-2.584-.22a6.938 6.938 0 0 1-1.986-.65 6.337 6.337 0 0 1-1.622-1.18 6.355 6.355 0 0 1-1.178-1.623 6.935 6.935 0 0 1-.646-1.985c-.156-.863-.2-1.788-.22-2.578a66.088 66.088 0 0 1-.02-1.355l-.003-1.327V14.474l.002-1.325a66.7 66.7 0 0 1 .02-1.357c.022-.792.065-1.717.222-2.587a6.924 6.924 0 0 1 .646-1.981c.304-.598.7-1.144 1.18-1.623a6.386 6.386 0 0 1 1.624-1.18 6.96 6.96 0 0 1 1.98-.646c.865-.155 1.792-.198 2.586-.22.452-.012.905-.017 1.354-.02l1.677-.003h135.875"></path> 1461 <g> 1462 <g> 1463 <path fill="#000" d="M43.508 35.77c1.404-1.755 2.356-4.112 2.105-6.52-2.054.102-4.56 1.355-6.012 3.112-1.303
14631.504-2.456 3.959-2.156 6.266 2.306.2 4.61-1.152 6.063-2.858"></path> 1464 <path fill="#000" d="M45.587 39.079c-3.35-.2-6.196 1.9-7.795 1.9-1.6 0-4.049-1.8-6.698-1.751-3.447.05-6.645 2-8.395 5.1-3.598 6.2-.95 15.4 2.55 20.45 1.699 2.5 3.747 5.25 6.445 5.151 2.55-.1 3.549-1.65 6.647-1.65 3.097 0 3.997 1.65 6.696 1.6 2.798-.05 4.548-2.5 6.247-5 1.95-2.85 2.747-5.6 2.797-5.75-.05-.05-5.396-2.101-5.446-8.251-.05-5.15 4.198-7.6 4.398-7.751-2.399-3.548-6.147-3.948-7.447-4.048"></path> 1465 </g> 1466 <g> 1467 <path fill="#000" d="M78.973 32.11c7.278 0 12.347 5.017 12.347 12.321 0 7.33-5.173 12.373-12.529 12.373h-8.058V69.62h-5.822V32.11h14.062zm-8.24 19.807h6.68c5.07 0 7.954-2.729 7.954-7.46 0-4.73-2.885-7.434-7.928-7.434h-6.706v14.894z"></path> 1468 <path fill="#000" d="M92.764 61.847c0-4.809 3.665-7.564 10.423-7.98l7.252-.442v-2.08c0-3.04-2.001-4.704-5.562-4.704-2.938 0-5.07 1.507-5.51 3.82h-5.252c.157-4.86 4.731-8.395 10.918-8.395 6.654 0 10.995 3.483 10.995 8.89v18.663h-5.38v-4.497h-.13c-1.534 2.937-4.914 4.782-8.579 4.782-5.406 0-9.175-3.222-9.175-8.057zm17.675-2.417v-2.106l-6.472.416c-3.64.234-5.536 1.585-5.536 3.95 0 2.288 1.975 3.77 5.068 3.77 3.95 0 6.94-2.522 6.94-6.03z"></path> 1469 <path fill="#000" d="M120.975 79.652v-4.496c.364.051 1.247.103 1.715.103 2.573 0 4.029-1.09 4.913-3.899l.52-1.663-9.852-27.293h6.082l6.863 22.146h.13l6.862-22.146h5.927l-10.216 28.67c-2.34 6.577-5.017 8.735-10.683 8.735-.442 0-1.872-.052-2.261-.157z"></path> 1470 </g> 1471 </g> 1472 </svg></li> 1473 <li style="list-style:none; display: inline-block; margin-right: 5px; max-width: 40px;"><svg class="icon icon--full-color" viewBox="0 0 38 24" xmlns="http://www.w3.org/2000/svg" role="img" width="38" height="24" aria-labelledby="pi-diners_club"> 1474 <title id="pi-diners_club">Diners Club</title> 1475 <path opacity=".07" d="M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z"></path> 1476 <path fill="#fff" d="M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32"></path> 1477 <path d="M12 12v3.7c0 .3-.2.3-.5.2-1.9-.8-3-3.3-2.3-5.4.4-1.1 1.2-2 2.3-2.4.4-.2.5-.1.5.2V12zm2 0V8.3c0-.3 0-.3.3-.2 2.1.8 3.2 3.3 2.4 5.4-.4 1.1-1.2 2-2.3 2.4-.4.2-.4.1-.4-.2V12zm7.2-7H13c3.8 0 6.8 3.1 6.8 7s-3 7-6.8 7h8.2c3.8 0 6.8-3.1 6.8-7s-3-7-6.8-7z" fill="#3086C8"></path> 1478 </svg></li> 1479 <li style="list-style:none; display: inline-block; margin-right: 5px; max-width: 40px;"><svg class="icon icon--full-color" viewBox="0 0 38 24" width="38" height="24" role="img" aria-labelledby="pi-discover" fill="none" xmlns="http://www.w3.org/2000/svg"> 1480 <title id="pi-discover">Discover</title> 1481 <path fill="#000" opacity=".07" d="M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z"></path> 1482 <path d="M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32z" fill="#fff"></path> 1483 <path d="M3.57 7.16H2v5.5h1.57c.83 0 1.43-.2 1.96-.63.63-.52 1-1.3 1-2.11-.01-1.63-1.22-2.76-2.96-2.76zm1.26 4.14c-.34.3-.77.44-1.47.44h-.29V8.1h.29c.69 0 1.11.12 1.47.44.37.33.59.84.59 1.37 0 .53-.22 1.06-.59 1.39zm2.19-4.14h1.07v5.5H7.02v-5.5zm3.69 2.11c-.64-.24-.83-.4-.83-.69 0-.35.34-.61.8-.61.32 0 .59.13.86.45l.56-.73c-.46-.4-1.01-.61-1.62-.61-.97 0-1.72.68-1.72 1.58 0 .76.35 1.15 1.35 1.51.42.15.63.25.74.31.21.14.32.34.32.57 0 .45-.35.78-.83.78-.51 0-.92-.26-1.17-.73l-.69.67c.49.73 1.09 1.05 1.9 1.05 1.11 0 1.9-.74 1.9-1.81.02-.89-.35-1.29-1.57-1.74zm1.92.65c0 1.62 1.27 2.87 2.9 2.87.46 0 .86-.09 1.34-.32v-1.26c-.43.43-.81.6-1.29.6-1.08 0-1.85-.78-1.85-1.9 0-1.06.79-1.89 1.8-1.89.51 0 .9.18 1.34.62V7.38c-.47-.24-.86-.34-1.32-.34-1.61 0-2.92 1.28-2.92 2.88zm12.76.94l-1.47-3.7h-1.17l2.33 5.64h.58l2.37-5.64h-1.16l-1.48 3.7zm3.13 1.8h3.04v-.93h-1.97v-1.48h1.9v-.93h-1.9V8.1h1.97v-.94h-3.04v5.5zm7.29-3.87c0-1.03-.71-1.62-1.95-1.62h-1.59v5.5h1.07v-2.21h.14l1.48 2.21h1.32l-1.73-2.32c.81-.17 1.26-.72 1.26-1.56zm-2.16.91h-.31V8.03h.33c.67 0 1.03.28 1.03.82 0 .55-.36.85-1.05.85z" fill="#231F20"></path> 1484 <path d="M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z" fill="url(#pi-paint0_linear)"></path> 1485 <path opacity=".65" d="M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z" fill="url(#pi-paint1_linear)"></path> 1486 <path d="M36.57 7.506c0-.1-.07-.15-.18-.15h-.16v.48h.12v-.19l.14.19h.14l-.16-.2c.06-.01.1-.06.1-.13zm-.2.07h-.02v-.13h.02c.06 0 .09.02.09.06 0 .05-.03.07-.09.07z" fill="#231F20"></path> 1487 <path d="M36.41 7.176c-.23 0-.42.19-.42.42 0 .23.19.42.42.42.23 0 .42-.19.42-.42 0-.23-.19-.42-.42-.42zm0 .77c-.18 0-.34-.15-.34-.35 0-.19.15-.35.34-.35.18 0 .33.16.33.35 0 .19-.15.35-.33.35z" fill="#231F20"></path> 1488 <path d="M37 12.984S27.09 19.873 8.976 23h26.023a2 2 0 002-1.984l.024-3.02L37 12.985z" fill="#F48120"></path> 1489 <defs> 1490 <linearGradient id="pi-paint0_linear" x1="21.657" y1="12.275" x2="19.632" y2="9.104" gradientUnits="userSpaceOnUse"> 1491 <stop offset="0" stop-color="#F89F20"></stop> 1492 <stop offset=".25" stop-color="#F79A20"></stop> 1493 <stop offset=".533" stop-color="#F68D20"></stop> 1494 <stop offset=".62" stop-color="#F58720"></stop> 1495 <stop offset=".723" stop-color="#F48120"></stop> 1496 <stop offset="1" stop-color="#F37521"></stop> 1497 </linearGradient> 1498 <linearGradient id="pi-paint1_linear" x1="21.338" y1="12.232" x2="18.378" y2="6.446" gradientUnits="userSpaceOnUse"> 1499 <stop offset="0" stop-color="#F58720"></stop> 1500 <stop offset=".359" stop-color="#E16F27"></stop> 1501 <stop offset=".703" stop-color="#D4602C"></stop> 1502 <stop offset=".982" stop-color="#D05B2E"></stop> 1503 </linearGradient> 1504 </defs> 1505 </svg></li> 1506 <li style="list-style:none; display: inline-block; margin-right: 5px; max-width: 40px;"><svg class="icon icon--full-color" width="38" height="24" role="img" aria-labelledby="pi-metapay" viewB
1506ox="0 0 38 24" fill="none" xmlns="http://www.w3.org/2000/svg"> 1507 <title id="pi-metapay">Meta Pay</title> 1508 <path opacity=".07" d="M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z" fill="#000"></path> 1509 <path d="M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32z" fill="#fff"></path> 1510 <path d="M4.983 12.986c0 .348.076.614.176.776a.6.6 0 00.524.3c.257 0 .491-.063.943-.688.362-.5.788-1.204 1.076-1.645l.486-.747c.337-.518.728-1.095 1.176-1.486.366-.319.76-.496 1.158-.496.667 0 1.302.386 1.788 1.111.532.794.79 1.793.79 2.825 0 .613-.12 1.064-.326 1.42-.2.345-.587.688-1.238.688v-.981c.558 0 .697-.513.697-1.1 0-.836-.195-1.764-.624-2.427-.305-.47-.7-.757-1.134-.757-.47 0-.848.354-1.274.986-.226.336-.457.745-.718 1.207l-.287.508c-.576 1.02-.722 1.254-1.01 1.637-.504.672-.935.927-1.502.927-.674 0-1.1-.291-1.363-.73C4.106 13.956 4 13.486 4 12.95l.983.035z" fill="#0081FB"></path> 1511 <path d="M4.775 10.18C5.225 9.486 5.875 9 6.622 9c.432 0 .861.128 1.31.494.49.4 1.013 1.06 1.665 2.146l.234.39c.565.94.886 1.424 1.074 1.652.242.293.411.38.631.38.558 0 .697-.512.697-1.099l.867-.027c0 .613-.12 1.064-.326 1.42-.2.345-.587.688-1.238.688-.405 0-.764-.088-1.16-.462-.306-.287-.663-.798-.937-1.257l-.816-1.363c-.41-.684-.785-1.194-1.003-1.425-.234-.249-.534-.549-1.014-.549-.388 0-.718.273-.994.69l-.837-.498z" fill="url(#pi-paint0_linear_1164_3)"></path> 1512 <path d="M6.606 9.988c-.388 0-.718.273-.994.69-.39.588-.629 1.466-.629 2.308 0 .348.076.614.176.776l-.838.552C4.106 13.956 4 13.486 4 12.95c0-.973.267-1.987.775-2.77C5.225 9.485 5.875 9 6.622 9l-.016.988z" fill="url(#pi-paint1_linear_1164_3)"></path> 1513 <path d="M15.01 9.191h1.138l1.933 3.498 1.934-3.498h1.112v5.747h-.928v-4.405l-1.695 3.05h-.87l-1.696-3.05v4.405h-.927V9.191zm9.023 2.143c-.665 0-1.066.5-1.162 1.12h2.258c-.046-.638-.415-1.12-1.096-1.12zm-2.081 1.474c0-1.305.843-2.254 2.097-2.254 1.234 0 1.971.937 1.971 2.323v.255h-3.148c.111.674.559 1.129 1.28 1.129.576 0 .936-.176 1.277-.497l.493.603c-.465.427-1.055.674-1.803.674-1.358 0-2.167-.99-2.167-2.233zm5.193-1.392h-.854v-.76h.854V9.402h.895v1.256h1.297v.76H28.04v1.924c0 .657.21.89.726.89.236 0 .371-.02.57-.053v.752c-.248.07-.485.102-.742.102-.966 0-1.45-.528-1.45-1.584v-2.032zm5.96.739a1.207 1.207 0 00-1.17-.788c-.766 0-1.256.543-1.256 1.428 0 .863.451 1.433 1.22 1.433.603 0 1.034-.351 1.206-.788v-1.285zM34 14.938h-.878v-.6c-.246.353-.693.703-1.417.703-1.164 0-1.941-.975-1.941-2.246 0-1.283.796-2.241 1.99-2.241.591 0 1.055.236 1.368.653v-.55H34v4.281z" fill="#000000"></path> 1514 <defs> 1515 <linearGradient id="pi-paint0_linear_1164_3" x1="5.93" y1="12.703" x2="12.196" y2="13.019" gradientUnits="userSpaceOnUse"> 1516 <stop offset="0" stop-color="#0064E1"></stop> 1517 <stop offset=".4" stop-color="#0064E1"></stop> 1518 <stop offset=".83" stop-color="#0073EE"></stop> 1519 <stop offset="1" stop-color="#0082FB"></stop> 1520 </linearGradient> 1521 <linearGradient id="pi-paint1_linear_1164_3" x1="5.424" y1="13.399" x2="5.424" y2="11.089" gradientUnits="userSpaceOnUse"> 1522 <stop offset="0" stop-color="#0082FB"></stop> 1523 <stop offset="1" stop-color="#0064E0"></stop> 1524 </linearGradient> 1525 </defs> 1526 </svg></li> 1527 <li style="list-style:none; display: inline-block; margin-right: 5px; max-width: 40px;"><svg class="icon icon--full-color" xmlns="http://www.w3.org/2000/svg" role="img" viewBox="0 0 38 24" width="38" height="24" aria-labelledby="pi-google_pay"> 1528 <title id="pi-google_pay">Google Pay</title> 1529 <path d="M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z" fill="#000" opacity=".07"></path> 1530 <path d="M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32" fill="#FFF"></path> 1531 <path d="M18.093 11.976v3.2h-1.018v-7.9h2.691a2.447 2.447 0 0 1 1.747.692 2.28 2.28 0 0 1 .11 3.224l-.11.116c-.47.447-1.098.69-1.747.674l-1.673-.006zm0-3.732v2.788h1.698c.377.012.741-.135 1.005-.404a1.391 1.391 0 0 0-1.005-2.354l-1.698-.03zm6.484 1.348c.65-.03 1.286.188 1.778.613.445.43.682 1.03.65 1.649v3.334h-.969v-.766h-.049a1.93 1.93 0 0 1-1.673.931 2.17 2.17 0 0 1-1.496-.533 1.667 1.667 0 0 1-.613-1.324 1.606 1.606 0 0 1 .613-1.336 2.746 2.746 0 0 1 1.698-.515c.517-.02 1.03.093 1.49.331v-.208a1.134 1.134 0 0 0-.417-.901 1.416 1.416 0 0 0-.98-.368 1.545 1.545 0 0 0-1.319.717l-.895-.564a2.488 2.488 0 0 1 2.182-1.
153106zM23.29 13.52a.79.79 0 0 0 .337.662c.223.176.5.269.785.263.429-.001.84-.17 1.146-.472.305-.286.478-.685.478-1.103a2.047 2.047 0 0 0-1.324-.374 1.716 1.716 0 0 0-1.03.294.883.883 0 0 0-.392.73zm9.286-3.75l-3.39 7.79h-1.048l1.281-2.728-2.224-5.062h1.103l1.612 3.885 1.569-3.885h1.097z" fill="#5F6368"></path> 1532 <path d="M13.986 11.284c0-.308-.024-.616-.073-.92h-4.29v1.747h2.451a2.096 2.096 0 0 1-.9 1.373v1.134h1.464a4.433 4.433 0 0 0 1.348-3.334z" fill="#4285F4"></path> 1533 <path d="M9.629 15.721a4.352 4.352 0 0 0 3.01-1.097l-1.466-1.14a2.752 2.752 0 0 1-4.094-1.44H5.577v1.17a4.53 4.53 0 0 0 4.052 2.507z" fill="#34A853"></path> 1534 <path d="M7.079 12.05a2.709 2.709 0 0 1 0-1.735v-1.17H5.577a4.505 4.505 0 0 0 0 4.075l1.502-1.17z" fill="#FBBC04"></path> 1535 <path d="M9.629 8.44a2.452 2.452 0 0 1 1.74.68l1.3-1.293a4.37 4.37 0 0 0-3.065-1.183 4.53 4.53 0 0 0-4.027 2.5l1.502 1.171a2.715 2.715 0 0 1 2.55-1.875z" fill="#EA4335"></path> 1536 </svg></li> 1537 <li style="list-style:none; display: inline-block; margin-right: 5px; max-width: 40px;"><svg class="icon icon--full-color" viewBox="0 0 38 24" xmlns="http://www.w3.org/2000/svg" role="img" width="38" height="24" aria-labelledby="pi-master"> 1538 <title id="pi-master">Mastercard</title> 1539 <path opacity=".07" d="M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z"></path> 1540 <path fill="#fff" d="M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32"></path> 1541 <circle fill="#EB001B" cx="15" cy="12" r="7"></circle> 1542 <circle fill="#F79E1B" cx="23" cy="12" r="7"></circle> 1543 <path fill="#FF5F00" d="M22 12c0-2.4-1.2-4.5-3-5.7-1.8 1.3-3 3.4-3 5.7s1.2 4.5 3 5.7c1.8-1.2 3-3.3 3-5.7z"></path> 1544 </svg></li> 1545 <li style="list-style:none; display: inline-block; margin-right: 5px; max-width: 40px;"><svg class="icon icon--full-color" viewBox="0 0 38 24" xmlns="http://www.w3.org/2000/svg" width="38" height="24" role="img" aria-labelledby="pi-paypal"> 1546 <title id="pi-paypal">PayPal</title> 1547 <path opacity=".07" d="M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z"></path> 1548 <path fill="#fff" d="M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32"></path> 1549 <path fill="#003087" d="M23.9 8.3c.2-1 0-1.7-.6-2.3-.6-.7-1.7-1-3.1-1h-4.1c-.3 0-.5.2-.6.5L14 15.6c0 .2.1.4.3.4H17l.4-3.4 1.8-2.2 4.7-2.1z"></path> 1550 <path fill="#3086C8" d="M23.9 8.3l-.2.2c-.5 2.8-2.2 3.8-4.6 3.8H18c-.3 0-.5.2-.6.5l-.6 3.9-.2 1c0 .2.1.4.3.4H19c.3 0 .5-.2.5-.4v-.1l.4-2.4v-.1c0-.2.3-.4.5-.4h.3c2.1 0 3.7-.8 4.1-3.2.2-1 .1-1.8-.4-2.4-.1-.5-.3-.7-.5-.8z"></path> 1551 <path fill="#012169" d="M23.3 8.1c-.1-.1-.2-.1-.3-.1-.1 0-.2 0-.3-.1-.3-.1-.7-.1-1.1-.1h-3c-.1 0-.2
15510-.2.1-.2.1-.3.2-.3.4l-.7 4.4v.1c0-.3.3-.5.6-.5h1.3c2.5 0 4.1-1 4.6-3.8v-.2c-.1-.1-.3-.2-.5-.2h-.1z"></path> 1552 </svg></li> 1553 <li style="list-style:none; display: inline-block; margin-right: 5px; max-width: 40px;"><svg class="icon icon--full-color" xmlns="http://www.w3.org/2000/svg" role="img" viewBox="0 0 38 24" width="38" height="24" aria-labelledby="pi-shopify_pay"> 1554 <title id="pi-shopify_pay">Shop Pay</title> 1555 <path opacity=".07" d="M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z" fill="#000"></path> 1556 <path d="M35.889 0C37.05 0 38 .982 38 2.182v19.636c0 1.2-.95 2.182-2.111 2.182H2.11C.95 24 0 23.018 0 21.818V2.182C0 .982.95 0 2.111 0H35.89z" fill="#5A31F4"></path> 1557 <path d="M9.35 11.368c-1.017-.223-1.47-.31-1.47-.705 0-.372.306-.558.92-.558.54 0 .934.238 1.225.704a.079.079 0 00.104.03l1.146-.584a.082.082 0 00.032-.114c-.475-.831-1.353-1.286-2.51-1.286-1.52 0-2.464.755-2.464 1.956 0 1.275 1.15 1.597 2.17 1.82 1.02.222 1.474.31 1.474.705 0 .396-.332.582-.993.582-.612 0-1.065-.282-1.34-.83a.08.08 0 00-.107-.035l-1.143.57a.083.083 0 00-.036.111c.454.92 1.384 1.437 2.627 1.437 1.583 0 2.539-.742 2.539-1.98s-1.155-1.598-2.173-1.82v-.003zM15.49 8.855c-.65 0-1.224.232-1.636.646a.04.04 0 01-.069-.03v-2.64a.08.08 0 00-.08-.081H12.27a.08.08 0 00-.08.082v8.194a.08.08 0 00.08.082h1.433a.08.08 0 00.081-.082v-3.594c0-.695.528-1.227 1.239-1.227.71 0 1.226.521 1.226 1.227v3.594a.08.08 0 00.081.082h1.433a.08.08 0 00.081-.082v-3.594c0-1.51-.981-2.577-2.355-2.577zM20.753 8.62c-.778 0-1.507.24-2.03.588a.082.082 0 00-.027.109l.632 1.088a.08.08 0 00.11.03 2.5 2.5 0 011.318-.366c1.25 0 2.17.891 2.17 2.068 0 1.003-.736 1.745-1.669 1.745-.76 0-1.288-.446-1.288-1.077 0-.361.152-.657.548-.866a.08.08 0 00.032-.113l-.596-1.018a.08.08 0 00-.098-.035c-.799.299-1.359 1.018-1.359 1.984 0 1.46 1.152 2.55 2.76 2.55 1.877 0 3.227-1.313 3.227-3.195 0-2.018-1.57-3.492-3.73-3.492zM28.675 8.843c-.724 0-1.373.27-1.845.746-.026.027-.069.007-.069-.029v-.572a.08.08 0 00-.08-.082h-1.397a.08.08 0 00-.08.082v8.182a.08.08 0 00.08.081h1.433a.08.08 0 00.081-.081v-2.683c0-.036.043-.054.069-.03a2.6 2.6 0 001.808.7c1.682 0 2.993-1.373 2.993-3.157s-1.313-3.157-2.993-3.157zm-.271 4.929c-.956 0-1.681-.768-1.681-1.783s.723-1.783 1.681-1.783c.958 0 1.68.755 1.68 1.783 0 1.027-.713 1.783-1.681 1.783h.001z" fill="#fff"></path> 1558 </svg></li> 1559 <li style="list-style:none; display: inline-block; margin-right: 5px; max-width: 40px;"><svg class="icon icon--full-color" viewBox="0 0 38 24" width="38" height="24" xmlns="http://www.w3.org/2000/svg" role="img" aria-labelledby="pi-venmo"> 1560 <title id="pi-venmo">Venmo</title> 1561 <g fill="none" fill-rule="evenodd"> 1562 <rect fill-opacity=".07" fill="#000" width="38" height="24" rx="3"></rect> 1563 <path fill="#3D95CE" d="M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32"></path> 1564 <path d="M24.675 8.36c0 3.064-2.557 7.045-4.633 9.84h-4.74L13.4 6.57l4.151-.402 1.005 8.275c.94-1.566 2.099-4.025 2.099-5.702 0-.918-.154-1.543-.394-2.058l3.78-.783c.437.738.634 1.499.634 2.46z" fill="#FFF" fill-rule="nonzero"></path> 1565 </g> 1566 </svg></li> 1567 <li style="list-style:none; display: inline-block; margin-right: 5px; max-width: 40px;"><svg class="icon icon--full-color" viewBox="0 0 38 24" xmlns="http://www.w3.org/2000/svg" role="img" width="38" height="24" aria-labelledby="pi-visa"> 1568 <title id="pi-visa">Visa</title> 1569 <path opacity=".07" d="M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z"></path> 1570 <path fill="#fff" d="M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32"></path> 1571 <path d="M28.3 10.1H28c-.4 1-.7 1.5-1 3h1.9c-.3-1.5-.3-2.2-.6-3zm2.9 5.9h-1.7c-.1 0-.1 0-.2-.1l-.2-.9-.1-.2h-2.4c-.1 0-.2 0-.2.2l-.3.9c0 .1-.1.1-.1.1h-2.1l.2-.5L27 8.7c0-.5.3-.7.8-.7h1.5c.1 0 .2 0 .2.2l1.4 6.5c.1.4.2.7.2 1.1.1.1.1.1.1.2zm-13.4-.3l.4-1.8c.1 0 .2.1.2.1.7.3 1.4.5 2.1.4.2 0 .5-.1.7-.2.5-.2.5-.7.1-1.1-.2-.2-.5-.3-.8-.5-.4-.2-.8-.4-1.1-.7-1.2-1-.8-2.4-.1-3.1.6-.4.9-.8 1.7-.8 1.2 0 2.5 0 3.1.2h.1c-.
15711.6-.2 1.1-.4 1.7-.5-.2-1-.4-1.5-.4-.3 0-.6 0-.9.1-.2 0-.3.1-.4.2-.2.2-.2.5 0 .7l.5.4c.4.2.8.4 1.1.6.5.3 1 .8 1.1 1.4.2.9-.1 1.7-.9 2.3-.5.4-.7.6-1.4.6-1.4 0-2.5.1-3.4-.2-.1.2-.1.2-.2.1zm-3.5.3c.1-.7.1-.7.2-1 .5-2.2 1-4.5 1.4-6.7.1-.2.1-.3.3-.3H18c-.2 1.2-.4 2.1-.7 3.2-.3 1.5-.6 3-1 4.5 0 .2-.1.2-.3.2M5 8.2c0-.1.2-.2.3-.2h3.4c.5 0 .9.3 1 .8l.9 4.4c0 .1 0 .1.1.2 0-.1.1-.1.1-.1l2.1-5.1c-.1-.1 0-.2.1-.2h2.1c0 .1 0 .1-.1.2l-3.1 7.3c-.1.2-.1.3-.2.4-.1.1-.3 0-.5 0H9.7c-.1 0-.2 0-.2-.2L7.9 9.5c-.2-.2-.5-.5-.9-.6-.6-.3-1.7-.5-1.9-.5L5 8.2z" fill="#142688"></path> 1572 </svg></li> 1573 </ul> 1574 </div> 1575 </div> 1576 </div> 1577 1578 1579 1580<div class="oilty-plus-cart-sidebar" > 1581 <input type="checkbox" id="oilty-plus-checkbox" name="oilty-plus-checkbox" value="1"/> 1582 <label for="oilty-plus-checkbox">Oil'ty Plus Monthly Membership</label> 1583 <div class="oilty-info"> 1584 Save an additional 20% off this order + free shipping on orders over $15! Sign up Oil'ty Plus $9.95/mo. Note: This offer cannot be combined with current sale promotions.<form method="post" action="/cart/add" id="8215212327234" accept-charset="UTF-8" class="form" enctype="multipart/form-data" novalidate="novalidate" data-type="add-to-cart-form"><input type="hidden" name="form_type" value="product" /><input type="hidden" name="utf8" value="â" /><input type="hidden" name="id" value="44794297090370"/> 1585 <input type="hidden" name="quantity" value="1"/> 1586 1587 1588 <input type="hidden" name="selling_plan" value="691797361007"/> 1589 1590 1591 <button type="submit" title="Add to Cart" class="oilty-plus-add add-to-cart"> 1592 <span>Become A Member</span> 1593 </button><input type="hidden" name="product-id" value="8215212327234" /><input type="hidden" name="section-id" value="cart-sidebar" /></form></div> 1594</div> 1595 </div> 1596 1597 <div class="cart-menu-checkout-actions"> 1598 <div class="checkout-ammount"> 1599 <div class="cart-total"> 1600 <span>Total</span> 1601 <span class="__total" aria-live="polite" aria-label="Cart total: $0.00">$0.00</span> 1602 </div> 1603 <p>Shipping and taxes calculated on checkout.</p> 1604 <input type="hidden" id="cart-value" value="0"/> 1605 <input type="hidden" id="cart-type" value="monthly"/> 1606 <a href="/checkout" class="checkout-popup checkout-btn" aria-label="Proceed to checkout">CHECKOUT</a> 1607 </div> 1608 </div> 1609 1610</aside> 1611 1612<style> 1613 .oilty-plus-cart-sidebar{ 1614 padding: 5px 10px; 1615 background-color: #a4197a; 1616 border-radius: 5px; 1617 margin-top: 10px; 1618 color:#fff; 1619 width: calc(90%); 1620 margin-left: calc(5%); 1621 margin-bottom: 100px; 1622 position: sticky; 1623 bottom: 0; 1624 } 1625 .cart-container .oilty-plus-cart-sidebar{ 1626 text-align: center; 1627 font-size:14px; 1628 } 1629 .oilty-plus-cart-sidebar > input{ 1630 float: left; 1631 width: 15px; 1632 height: 15px; 1633 margin: 2px 5px 0px 0px; 1634 } 1635 .oilty-plus-cart-sidebar a{ 1636 width: 16px; 1637 font-size: 12px; 1638 color: #fff; 1639 font-weight: 300; 1640 line-height: 16px; 1641 height: 16px; 1642 background-color: #763d1a; 1643 display: inline-block; 1644 text-align: center; 1645 border-radius: 100%; 1646 } 1647 .oilty-plus-add{ 1648 background:#000; 1649 border:none; 1650 color:#fff; 1651 padding:3px 15px; 1652 border-radius:20px; 1653 display:none; 1654 } 1655 .oilty-plus-cart-sidebar .oilty-info{ 1656 font-size:13px; 1657 } 1658 1659 .upsell-cart { 1660 width: calc(90%); 1661 margin-left: calc(5%); 1662 } 1663 .upsell-cart-sidebar { 1664 display: flex; 1665 flex-direction: column; 1666 padding: 8px; 1667 background-color: #f9f9f9; 1668 border: 1px solid #ddd; 1669 border-radius: 5px; 1670 margin-top: 10px; 1671 } 1672 .upsell-info { 1673 display: flex; 1674 align-items: center; 1675 gap: 10px; 1676 } 1677 .upsell-info img { 1678 flex-shrink: 0; 1679 } 1680 .upsell-info-details { 1681 display: flex; 1682 flex-direction: column; 1683 } 1684 .upsell-cart-sidebar > h5 { 1685 font-size: 16px; 1686 } 1687 .upsell-add { 1688 background-color: #a4197a; 1689 color: #fff; 1690 border: none; 1691 padding: 3px 8px; 1692 border-radius: 5px; 1693 cursor: pointer; 1694 } 1695 .upsell-add:hover { 1696 background-color: #d60069; 1697 } 1698 1699 /* ---- Variant selection styling ---- */
1700 .upsell-info-details { 1701 gap: 6px; 1702 flex: 1; 1703 min-width: 0; 1704 } 1705 .upsell-title { 1706 margin: 0; 1707 font-size: 14px; 1708 font-weight: 600; 1709 line-height: 1.3; 1710 } 1711 .upsell-price { 1712 margin: 0; 1713 font-size: 14px; 1714 font-weight: 700; 1715 color: #a4197a; 1716 } 1717 .upsell-cart-sidebar .upsell-variant-select { 1718 box-sizing: border-box; 1719 width: 100%; 1720 max-width: 240px; 1721 margin: 2px 0; 1722 padding: 8px 34px 8px 12px; 1723 font-size: 13px; 1724 line-height: 1.2; 1725 color: #1a1a1a; 1726 background-color: #fff; 1727 border: 1px solid #ddd; 1728 border-radius: 6px; 1729 cursor: pointer; 1730 appearance: none; 1731 -webkit-appearance: none; 1732 -moz-appearance: none; 1733 background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8'%3E%3Cpath fill='%23a4197a' d='M6 8 0 2l1.4-1.4L6 5.2 10.6.6 12 2z'/%3E%3C/svg%3E"); 1734 background-repeat: no-repeat; 1735 background-position: right 12px center; 1736 transition: border-color .15s ease, box-shadow .15s ease; 1737 } 1738 .upsell-cart-sidebar .upsell-variant-select:hover { 1739 border-color: #a4197a; 1740 } 1741 .upsell-cart-sidebar .upsell-variant-select:focus, 1742 .upsell-cart-sidebar .upsell-variant-select:focus-visible { 1743 outline: none; 1744 border-color: #a4197a; 1745 box-shadow: 0 0 0 3px rgba(164, 25, 122, 0.15); 1746 } 1747 .upsell-cart-sidebar .upsell-variant-select option:disabled { 1748 color: #aaa; 1749 } 1750 .upsell-add { 1751 align-self: flex-start; 1752 display: inline-flex; 1753 align-items: center; 1754 justify-content: center; 1755 padding: 8px 16px; 1756 font-size: 13px; 1757 font-weight: 600; 1758 border-radius: 6px; 1759 transition: background-color .15s ease; 1760 } 1761 1762 @media (max-width: 768px) { 1763 .oilty-plus-cart-sidebar { 1764 position: static; 1765 margin-bottom: 20px; 1766 } 1767 } 1768</style> 1769
1770<script> 1771 var is_oilty = false; 1772 var oilty_id_monthly = 44794297090370; 1773 var oilty_id_annually = 44794297123138; 1774 var oilty_type = 'monthly'; 1775 var hide_oilty_signup = false; 1776</script>
1776 1777 1778</div> 1779 </header> 1780 1781 <main id="main-content" class="main-content"> 1782 <section id="shopify-section-template--27595751620975__hero_slideshow_FppVXP" class="shopify-section frontpage-slideshow"> 1783 1784<div class="slideshow-container" style="--desktop-height: 450px; --mobile-height: 400px;"> 1785 1786 <div class="slides-wrapper" data-speed="10"> 1787 1788 1789 1790 1791 <div class="slide"> 1792 1793 <a href="/collections/build-a-fall-kit" class="slide-link"> 1794 1795 1796 <img src="//www.rockymountainoils.com/cdn/shop/files/2026-10-Build_a_Fall_Kit_Web_Slider_2000x.webp?v=1790937319" alt="Build a Fall Kit" class="desktop-image" loading="lazy" width="1920" height="450"/> 1797 1798 1799 <img src="//www.rockymountainoils.com/cdn/shop/files/2026-10-Build_a_Fall_Kit_Mobile_Slider_1000x.webp?v=1790937319" alt="Build a Fall Kit" class="mobile-image" loading="lazy" width="767" height="900"/> 1800 1801 1802 </a> 1803 1804 </div> 1805 1806 1807 1808 1809 1810 <div class="slide"> 1811 1812 <a href="/products/membership" class="slide-link"> 1813 1814 1815 <img src="//www.rockymountainoils.com/cdn/shop/files/2026-10-October_Oilty_Plus_Web_Slider_2000x.webp?v=1790834663" alt="OIlty Plus" class="desktop-image" loading="lazy" width="1920" height="450"/> 1816 1817 1818 <img src="//www.rockymountainoils.com/cdn/shop/files/2026-10-October_Oilty_Plus_Mobile_Slider_1000x.webp?v=1790834662" alt="OIlty Plus" class="mobile-image" loading="lazy" width="767" height="900"/> 1819 1820 1821 </a> 1822 1823 </div> 1824 1825 1826 1827 1828 1829 <div class="slide"> 1830 1831 <a href="/products/mystery-bundle" class="slide-link"> 1832 1833 1834 <img src="//www.rockymountainoils.com/cdn/shop/files/mystery-bundle-web-slider_2000x.webp?v=1760031646" alt="Mystery Bundle" class="desktop-image" loading="lazy" width="1920" height="450"/> 1835 1836 1837 <img src="//www.rockymountainoils.com/cdn/shop/files/mystery-bundle-mobile-slider_1000x.webp?v=1760031640" alt="Mystery Bundle" class="mobile-image" loading="lazy" width="767" height="900"/> 1838 1839 1840 </a> 1841 1842 </div> 1843 1844 1845 </div> 1846 1847 1848 <!-- Navigation Arrows --> 1849 <button class="arrow arrow-left" aria-label="Previous slide">❮</button> 1850 <button class="arrow arrow-right" aria-label="Next slide">❯</button> 1851</div> 1852
1853<script> 1854document.addEventListener('DOMContentLoaded', () => { 1855 const wrapper = document.querySelector('.slides-wrapper'); 1856 const slides = wrapper.querySelectorAll('.slide'); 1857 const speed = parseInt(wrapper.dataset.speed, 10) * 1000; 1858 const leftArrow = document.querySelector('.arrow-left'); 1859 const rightArrow = document.querySelector('.arrow-right'); 1860 const container = document.querySelector('.slideshow-container'); 1861 1862 if (slides.length <= 1) return; 1863 1864 let current = 0; 1865 let autoplay; 1866 let startX, moveX; 1867 let isDragging = false; 1868 let translateX = 0; 1869 1870 const goToSlide = (index, animate = true) => { 1871 current = (index + slides.length) % slides.length; 1872 wrapper.style.transition = animate ? 'transform 0.3s ease-in-out' : 'none'; 1873 wrapper.style.transform = `translateX(-${current * 100}%)`; 1874 translateX = -current * 100; 1875 }; 1876 1877 const startAutoplay = () => { 1878 autoplay = setInterval(() => { 1879 goToSlide(current + 1); 1880 }, speed); 1881 }; 1882 1883 const stopAutoplay = () => { 1884 clearInterval(autoplay); 1885 }; 1886 1887 // Mouse and touch event handlers 1888 const handleStart = (clientX) => { 1889 stopAutoplay(); 1890 isDragging = true; 1891 startX = clientX; 1892 wrapper.classList.add('grabbing'); 1893 }; 1894 1895 const handleMove = (clientX) => { 1896 if (!isDragging) return; 1897 moveX = clientX; 1898 const diff = moveX - startX; 1899 const newTranslateX = translateX + (diff / container.offsetWidth) * 100; 1900 wrapper.style.transform = `translateX(calc(${newTranslateX}% + ${diff}px))`; 1901 }; 1902 1903 const handleEnd = (clientX) => { 1904 if (!isDragging) return; 1905 isDragging = false; 1906 wrapper.classList.remove('grabbing'); 1907 1908 moveX = clientX; 1909 const diff = moveX - startX; 1910 const threshold = container.offsetWidth * 0.1; // 10% threshold 1911 1912 if (diff > threshold) { 1913 goToSlide(current - 1); 1914 } else if (diff < -threshold) { 1915 goToSlide(current + 1); 1916 } else { 1917 goToSlide(current); 1918 } 1919 1920 startAutoplay(); 1921 }; 1922 1923 // Mouse events 1924 container.addEventListener('mousedown', (e) => { 1925 e.preventDefault(); 1926 handleStart(e.clientX); 1927 }); 1928 1929 document.addEventListener('mousemove', (e) => { 1930 handleMove(e.clientX); 1931 }); 1932 1933 document.addEventListener('mouseup', (e) => { 1934 handleEnd(e.clientX); 1935 }); 1936 1937 // Touch events 1938 container.addEventListener('touchstart', (e) => { 1939 handleStart(e.touches[0].clientX); 1940 }, { passive: true }); 1941 1942 container.addEventListener('touchmove', (e) => { 1943 handleMove(e.touches[0].clientX); 1944 }, { passive: false }); 1945 1946 container.addEventListener('touchend', (e) => { 1947 handleEnd(e.changedTouches[0].clientX); 1948 }); 1949 1950 // Arrow controls 1951 leftArrow.addEventListener('click', () => { 1952 stopAutoplay(); 1953 goToSlide(current - 1); 1954 startAutoplay(); 1955 }); 1956 1957 rightArrow.addEventListener('click', () => { 1958 stopAutoplay(); 1959 goToSlide(current + 1); 1960 startAutoplay(); 1961 }); 1962 1963 // Prevent image drag
1964 slides.forEach(slide => { 1965 slide.addEventListener('dragstart', (e) => { 1966 e.preventDefault(); 1967 }); 1968 }); 1969 1970 // Start autoplay 1971 startAutoplay(); 1972}); 1973</script>
1973</section><section id="shopify-section-template--27595751620975__707c2d2a-c7a2-411a-a343-e6c163e414dd" class="shopify-section section"><section class="featured_categories sec_pad"> 1974 <div class="container"> 1975 <h2 style="text-align: center;">Featured Categories</h2> 1976 <div class="categories_wrapper"><div class="category_wrap"> 1977 <a href="/collections/essential-oil-blends"> 1978 <div class="CategoriesCardImage"><img src="//www.rockymountainoils.com/cdn/shop/files/blends-button_442x250.webp?v=1720725380" width="442" height="250" alt="Blends"></div> 1979 </a> 1980 </div><div class="category_wrap"> 1981 <a href="/collections/essential-oil-roll-ons"> 1982 <div class="CategoriesCardImage"><img src="//www.rockymountainoils.com/cdn/shop/files/roll-on-button_442x250.webp?v=1720725393" width="442" height="250" alt="Roll-On"></div> 1983 </a> 1984 </div><div class="category_wrap"> 1985 <a href="/pages/organic-essential-oils"> 1986 <div class="CategoriesCardImage"><img src="//www.rockymountainoils.com/cdn/shop/files/organic-button_1_442x250.webp?v=1720725428" width="442" height="250" alt="Organic"></div> 1987 </a> 1988 </div><div class="category_wrap"> 1989 <a href="/collections/chakra-oils"> 1990 <div class="CategoriesCardImage"><img src="//www.rockymountainoils.com/cdn/shop/files/chakra-button_442x250.webp?v=1720725439" width="442" height="250" alt="Chakra"></div> 1991 </a> 1992 </div><div class="category_wrap"> 1993 <a href="/collections/kid-friendly"> 1994 <div class="CategoriesCardImage"><img src="//www.rockymountainoils.com/cdn/shop/files/kid-friendly-button_442x250.webp?v=1720725453" width="442" height="250" alt="Kid Friendly"></div> 1995 </a> 1996 </div><div class="category_wrap"> 1997 <a href="/collections/sale"> 1998 <div class="CategoriesCardImage"><img src="//www.rockymountainoils.com/cdn/shop/files/on-sale-button_442x250.webp?v=1720725466" width="442" height="250" alt="On Sale"></div> 1999 </a> 2000 </div><div class="category_wrap"> 2001 <a href="/collections/best-sellers"> 2002 <div class="CategoriesCardImage"><img src="//www.rockymountainoils.com/cdn/shop/files/best-sellers-button_442x250.webp?v=1720725479" width="442" height="250" alt="Best Sellers"></div> 2003 </a> 2004 </div><div class="category_wrap"> 2005 <a href="/collections/essential-oil-diffusers"> 2006 <div class="CategoriesCardImage"><img src="//www.rockymountainoils.com/cdn/shop/files/diffusers-button_442x250.webp?v=1720725492" width="442" height="250" alt="Diffusers"></div> 2007 </a> 2008 </div></div> 2009 </div> 2010</section> 2011 2012 2013 2014<style> @media (max-width: 767px) {#shopify-section-template--27595751620975__707c2d2a-c7a2-411a-a343-e6c163e414dd .sec_pad_wrapper > div, #shopify-section-template--27595751620975__707c2d2a-c7a2-411a-a343-e6c163e414dd .categories_wrapper > div {width: 48%; flex: 0 0 48%; padding: 10px; }} </style></section><section id="shopify-section-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1" class="shopify-section section"><link href="//www.rockymountainoils.com/cdn/shop/t/383/assets/product-slider.css?v=100911957534726869481785434252" rel="stylesheet" type="text/css" media="all" /> 2015 2016<section class="TopSeller"> 2017 <div class="container"> 2018 <div class="TopSeller_Wrap"> 2019 2020 <div class="sec-heading text-center"> 2021 2022 <h2>Best Sellers</h2> 2023 2024 <a href="/collections/best-sellers" class="viewAllBtn" aria-label="View all Best Sellers products"> 2025 View all <i role="img" aria-hidden="true"></i> 2026 </a> 2027 </div> 2028 2029 <div class="owl-carousel carousel-fade owl-theme slider-section ProductsSlider" id="ProductsSlider"><div class="item"> 2030
2030<script> 2031(function() { 2032 class ProductCardVariantSelector { 2033 constructor(container) { 2034 this.container = container; 2035 if (!this.container) return; 2036 2037 this.form = this.container.querySelector('.product-form'); 2038 this.variantSelectors = this.container.querySelectorAll('.variant-select'); 2039 this.masterSelect = this.container.querySelector('.product-variants-select'); 2040 this.productImage = this.container.querySelector('.main-product-image'); 2041 this.priceWrapper = this.container.querySelector('[id^="ProductPrice-"]'); 2042 this.currentPriceElement = this.container.querySelector('[id^="CurrentPrice-"]'); 2043 this.comparePriceElement = this.container.querySelector('[id^="ComparePrice-"]'); 2044 this.addToCartButton = this.container.querySelector('[id^="AddToCart-"]'); 2045 this.addToCartText = this.container.querySelector('[id^="AddToCartText-"]'); 2046 this.notifyMeButton = this.container.querySelector('[id^="NotifyMe-"]'); 2047 this.variantsJsonScript = this.container.querySelector('[id^="VariantsJson-"]'); 2048 this.dataStore = this.container.querySelector('[id^="DataStore-"]'); 2049 this.saleTag = this.container.querySelector('.hc-sale-tag'); 2050 this.statusElement = this.container.querySelector('[id^="variant-status-"]'); 2051 2052 if (!this.masterSelect || !this.variantsJsonScript) return; 2053 2054 try { 2055 this.productVariants = JSON.parse(this.variantsJsonScript.textContent); 2056 } catch (e) { return; } 2057 2058 this.mainImageUrl = this.dataStore ? this.dataStore.dataset.mainImageUrl : null; 2059 this.productTitle = this.dataStore ? this.dataStore.dataset.productTitle : ''; 2060 2061 this.init(); 2062 } 2063 2064 init() { 2065 // --- iOS-safe image tap handling (works on iPhone 16, 17 Pro Max, etc.) --- 2066 if (this.productImage) { 2067 let touchStartX = 0, touchStartY = 0, touchMoved = false; 2068 let lastTouchTime = 0; 2069 2070 this.productImage.style.cursor = 'pointer'; 2071 this.productImage.setAttribute('role', 'button'); 2072 this.productImage.setAttribute('tabindex', '0'); 2073 2074 this.productImage.addEventListener('touchstart', (e) => { 2075 const t = e.touches[0]; 2076 touchStartX = t.clientX; 2077 touchStartY = t.clientY; 2078 touchMoved = false; 2079 }, { passive: true }); 2080 2081 this.productImage.addEventListener('touchmove', (e) => { 2082 const t = e.touches[0]; 2083 if (Math.abs(t.clientX - touchStartX) > 10 || 2084 Math.abs(t.clientY - touchStartY) > 10) { 2085 touchMoved = true; 2086 } 2087 }, { passive: true }); 2088 2089 this.productImage.addEventListener('touchend', (e) => { 2090 if (touchMoved) return; 2091 lastTouchTime = Date.now(); 2092 e.preventDefault(); 2093 this.onImageTap(e); 2094 }, { passive: false }); 2095 2096 // Desktop / non-touch fallback (with double-fire protection after touchend) 2097 this.productImage.addEventListener('click', (e) => { 2098 if (Date.now() - lastTouchTime < 500) return; 2099 this.onImageTap(e); 2100 }); 2101 2102 this.productImage.addEventListener('keydown', (e) => { 2103 if (e.key === 'Enter' || e.key === ' ') { 2104 e.preventDefault(); 2105 this.onImageTap(e); 2106 } 2107 }); 2108 } 2109 2110 // --- Variant select listeners --- 2111 if (this.variantSelectors.length > 0) { 2112 this.variantSelectors.forEach(select => { 2113 select.addEventListener('change', this.onVariantChange.bind(this)); 2114 }); 2115 this.updateProductDetails(this.getCurrentVariant()); 2116 } 2117 } 2118 2119 // ============================================================ 2120 // CHANGE THIS IF YOU WANT DIFFERENT TAP BEHAVIOR 2121 // Currently: navigates to the product page. 2122 // ============================================================ 2123 onImageTap(e) { 2124 const link = this.container.querySelector('.product-title-link'); 2125 if (link && link.href && link.href !== '#') { 2126 window.location.href = link.href; 2127 } 2128 } 2129 // ============================================================ 2130 2131 onVariantChange() { 2132 const selectedOptions = Array.from(this.variantSelectors).map(s => s.value); 2133 const matchedVariant = this.findMatchingVariant(selectedOptions); 2134 2135 if (matchedVariant) { 2136 this.masterSelect.value = matchedVariant.id; 2137 this.updateProductDetails(matchedVariant); 2138 if (this.statusElement) this.statusElement.textContent = ''; 2139 } else { 2140 if (this.statusElement) { 2141 this.statusElement.textContent = 'No available variant matches your selection'; 2142 } 2143 this.updateProductDetails(null); 2144 } 2145 } 2146 2147 findMatchingVariant(selectedOptions) { 2148 return this.productVariants.find(variant => { 2149 if (!variant.options || variant.options.length !== selectedOptions.length) return false;
2150 return selectedOptions.every((val, i) => variant.options[i] === val); 2151 }); 2152 } 2153 2154 getCurrentVariant() { 2155 if (!this.masterSelect) return null; 2156 const id = this.masterSelect.value; 2157 if (!id) return null; 2158 return this.productVariants.find(v => String(v.id) === String(id)) || null; 2159 } 2160 2161 // Shopify CDN: insert _WIDTHx before extension for a properly sized image 2162 sizedImageUrl(src, width) { 2163 if (!src) return src; 2164 return src.replace(/(\.[a-z]{3,4})(\?|$)/i, `_${width}x$1$2`); 2165 } 2166 2167 updateProductDetails(variant) { 2168 this.container.setAttribute('aria-busy', 'true'); 2169 2170 if (!variant) { 2171 if (this.addToCartButton) this.addToCartButton.disabled = true; 2172 if (this.addToCartText) this.addToCartText.textContent = 'Unavailable'; 2173 if (this.notifyMeButton) this.notifyMeButton.style.display = 'none'; 2174 if (this.priceWrapper) this.priceWrapper.classList.remove('sale'); 2175 if (this.comparePriceElement) this.comparePriceElement.style.display = 'none'; 2176 if (this.saleTag) this.saleTag.style.display = 'none'; 2177 this.container.setAttribute('aria-busy', 'false'); 2178 return; 2179 } 2180 2181 // 1. Image 2182 if (this.productImage) { 2183 if (variant.featured_image && variant.featured_image.src) { 2184 const sized = this.sizedImageUrl(variant.featured_image.src, 300); 2185 const variantOptions = variant.options ? variant.options.join(' - ') : ''; 2186 this.productImage.src = sized; 2187 this.productImage.srcset = ''; 2188 this.productImage.alt = variant.featured_image.alt 2189 ? variant.featured_image.alt 2190 : (this.productTitle + (variantOptions ? ' - ' + variantOptions : '')); 2191 } else if (this.mainImageUrl) { 2192 this.productImage.src = this.mainImageUrl; 2193 this.productImage.srcset = ''; 2194 this.productImage.alt = this.productTitle; 2195 } 2196 } 2197 2198 // 2. Price 2199 const moneyFormat = "${{amount}}"; 2200 const formatMoney = (cents, format) => { 2201 if (typeof cents === 'string') cents = cents.replace('.', ''); 2202 let value = ''; 2203 const placeholderRegex = /\{\{\s*(\w+)\s*\}\}/; 2204 const formatString = (format || moneyFormat).replace(/<[^>]*>/g, ''); 2205 2206 function formatWithDelimiters(number, precision, thousands, decimal) { 2207 precision = precision ?? 2; 2208 thousands = thousands ?? ','; 2209 decimal = decimal ?? '.'; 2210 if (isNaN(number) || number == null) return 0; 2211 number = (number / 100.0).toFixed(precision); 2212 const parts = number.split('.'); 2213 const dollars = parts[0].replace(/(\d)(?=(\d\d\d)+(?!\d))/g, '$1' + thousands); 2214 const centsPart = parts[1] ? (decimal + parts[1]) : ''; 2215 return dollars + centsPart; 2216 } 2217 2218 switch (formatString.match(placeholderRegex)?.[1]) { 2219 case 'amount': value = formatWithDelimiters(cents, 2); break; 2220 case 'amount_no_decimals': value = formatWithDelimiters(cents, 0); break; 2221 case 'amount_with_comma_separator': value = formatWithDelimiters(cents, 2, '.', ','); break; 2222 case 'amount_no_decimals_with_comma_separator': value = formatWithDelimiters(cents, 0, '.', ','); break; 2223 case 'amount_with_apostrophe_separator': value = formatWithDelimiters(cents, 2, "'", "."); break; 2224 case 'amount_no_decimals_with_space_separator': value = formatWithDelimiters(cents, 0, " ", ","); break; 2225 case 'amount_with_space_separator': value = formatWithDelimiters(cents, 2, " ", ","); break; 2226 default: value = formatWithDelimiters(cents, 2); 2227 } 2228 try { 2229 return formatString.replace(placeholderRegex, value); 2230 } catch (e) { 2231 const fallback = (cents / 100.0).toFixed(2); 2232 return formatString.includes('') 2233 ? formatString.replace(placeholderRegex, fallback) 2234 : fallback; 2235 } 2236 }; 2237 2238 if (this.currentPriceElement) { 2239 this.currentPriceElement.textContent = formatMoney(variant.price, moneyFormat); 2240 } 2241 if (this.comparePriceElement && this.priceWrapper) { 2242 if (variant.compare_at_price && variant.compare_at_price > variant.price) { 2243 this.comparePriceElement.textContent = formatMoney(variant.compare_at_price, moneyFormat); 2244 this.comparePriceElement.style.display = ''; 2245 this.priceWrapper.classList.add('sale'); 2246 } else { 2247 this.comparePriceElement.textContent = ''; 2248 this.comparePriceElement.style.display = 'none'; 2249 this.priceWrapper.classList.remove('sale'); 2250 } 2251 } 2252 2253 // 3. Sale tag 2254 if (this.saleTag) { 2255 const isDiscounted = variant.compare_at_price && variant.compare_at_price > variant.price; 2256 if (isDiscounted && variant.available) { 2257 this.saleTag.style.display = 'block'; 2258 const discount = Math.round((variant.compare_at_price - variant.price) * 100.0 / variant.compare_at_price); 2259 const span = this.saleTag.querySelector('span'); 2260 if (span) span.textContent = discount + '%'; 2261 this.saleTag.setAttribute('aria-label', 'Save ' + discount + '%'); 2262 this.saleTag.setAttribute('role', 'status'); 2263 } else { 2264 this.saleTag.style.display = 'none'; 2265 } 2266 } 2267 2268 // 4. Add to cart 2269 if (this.addToCartButton && this.addToCartText) { 2270 if (variant.available) { 2271 this.addToCartButton.disabled = false;
2272 this.addToCartText.innerHTML = 'Add to Cart <i class="cart-icon"></i>'; 2273 this.addToCartButton.setAttribute('aria-label', 'Add to Cart - Add ' + this.productTitle + ' to cart'); 2274 if (this.notifyMeButton) this.notifyMeButton.style.display = 'none'; 2275 } else { 2276 this.addToCartButton.disabled = true; 2277 this.addToCartText.textContent = 'Sold Out'; 2278 this.addToCartButton.setAttribute('aria-label', 'Sold Out - ' + this.productTitle + ' is sold out'); 2279 if (this.notifyMeButton) this.notifyMeButton.style.display = 'block'; 2280 } 2281 } 2282 if (this.notifyMeButton) { 2283 this.notifyMeButton.setAttribute('data-variant-id', variant.id); 2284 } 2285 2286 this.container.setAttribute('aria-busy', 'false'); 2287 } 2288 } 2289 2290 function initProductCards(root) { 2291 root = root || document; 2292 root.querySelectorAll('.product-card-wrapper[data-product-id]').forEach(cardContainer => { 2293 if (cardContainer.dataset.variantSelectorInit === 'true') return; 2294 cardContainer.dataset.variantSelectorInit = 'true'; 2295 new ProductCardVariantSelector(cardContainer); 2296 }); 2297 } 2298 2299 if (document.readyState === 'loading') { 2300 document.addEventListener('DOMContentLoaded', () => initProductCards()); 2301 } else { 2302 initProductCards(); 2303 } 2304 2305 document.addEventListener('shopify:section:load', (e) => initProductCards(e.target)); 2306})(); 2307</script>
2307<div class="product-card-wrapper" data-product-id="8025566609730" aria-busy="false"> 2308 2309 <div class="product-image" id="ProductImageWrapper-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025566609730"><!-- WISHLIST BUTTON --> 2310 <div class='xb-wishlist__btn-custom'> 2311 <div 2312 class='xb-wishlist__add' 2313 xb-product-id='8025566609730' 2314 xb-product-title='Breathe Ease Essential Oil Blend' 2315 xb-product-variant='52912994877807' 2316 xb-is-in-stock='true' 2317 xb-product-handle='breathe-ease-essential-oil-blend' 2318 > 2319 <button aria-label="Add Breathe Ease Essential Oil Blend to wishlist" aria-pressed="false"> 2320 <svg 2321 xmlns='http://www.w3.org/2000/svg' 2322 width='20' 2323 height='20' 2324 viewBox='0 0 24 24' 2325 fill='none' 2326 stroke='#FF4A71' 2327 stroke-width='2' 2328 stroke-linecap='round' 2329 stroke-linejoin='round' 2330 aria-hidden='true' 2331 focusable='false' 2332 > 2333 <path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"></path> 2334 </svg> 2335 </button> 2336 </div> 2337 2338 <div class="xb-wishlist__loading" xb-product-id="8025566609730"> 2339 <span class="loading-spinner"></span> 2340 </div> 2341 2342 <div class='xb-wishlist__remove' xb-product-id='8025566609730' xb-is-in-stock='true'> 2343 <button aria-label="Remove Breathe Ease Essential Oil Blend from wishlist" aria-pressed="true"> 2344 <svg 2345 xmlns='http://www.w3.org/2000/svg' 2346 width='20' 2347 height='20'
2348 viewBox='0 0 24 24' 2349 fill='#FF4A71' 2350 stroke='#FF4A71' 2351 stroke-width='2' 2352 stroke-linecap='round' 2353 stroke-linejoin='round' 2354 aria-hidden='true' 2355 focusable='false' 2356 > 2357 <path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"></path> 2358 </svg> 2359 </button> 2360 </div> 2361 </div><img 2362 id="ProductImage-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025566609730" 2363 class="main-product-image" 2364 src="//www.rockymountainoils.com/cdn/shop/files/BreatheEase5mlBlend.jpg?crop=center&height=300&v=1744351343&width=300" 2365 alt="Quality Breathe Easy Essential Oil Blend" 2366 width="300" 2367 height="300" 2368 loading="lazy" 2369 /></div> 2370 2371 <div class="product-content"> 2372 <div class="product-title"> 2373 <a href="/products/breathe-ease-essential-oil-blend" class="product-title-link" aria-label="View Breathe Ease Essential Oil Blend"> 2374 <h2>Breathe Ease Essential Oil Blend</h2> 2375 </a> 2376 </div><div> 2377 <div class="product-subtitle"> 2378 Sharp, menthol-like scent; clears congestion, eases muscles. 2379 </div> 2380 </div><div class="yotpo-widget-instance" data-yotpo-instance-id="503375" data-yotpo-product-id="8025566609730" data-yotpo-cart-product-id="" data-yotpo-section-id="index"></div><!-- START Variant Selection Form --> 2381 <div class="product-data-store" style="display:none;" 2382 data-main-image-url="//www.rockymountainoils.com/cdn/shop/files/BreatheEase5mlBlend.jpg?v=1744351343&width=300" 2383 data-product-title="Breathe Ease Essential Oil Blend" 2384 id="DataStore-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025566609730"> 2385 </div> 2386 2387
2387<script id="VariantsJson-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025566609730" type="application/json"> 2388 [{"id":52912994877807,"title":"5ml","option1":"5ml","option2":null,"option3":null,"sku":"BRENEA-B5","requires_shipping":true,"taxable":true,"featured_image":{"id":43885022445890,"product_id":8025566609730,"position":1,"created_at":"2024-01-22T07:42:38-07:00","updated_at":"2025-04-11T00:02:23-06:00","alt":"Quality Breathe Easy Essential Oil Blend","width":532,"height":532,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/BreatheEase5mlBlend.jpg?v=1744351343","variant_ids":[52912994877807]},"available":true,"name":"Breathe Ease Essential Oil Blend - 5ml","public_title":"5ml","options":["5ml"],"price":1020,"weight":45,"compare_at_price":null,"inventory_management":"shopify","barcode":"053176177441","featured_media":{"alt":"Quality Breathe Easy Essential Oil Blend","id":36355387720002,"position":1,"preview_image":{"aspect_ratio":1.0,"height":532,"width":532,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/BreatheEase5mlBlend.jpg?v=1744351343"}},"requires_selling_plan":false,"selling_plan_allocations":[{"price_adjustments":[{"position":1,"price":714}],"price":714,"compare_at_price":1020,"per_delivery_price":714,"selling_plan_id":691785924975,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":867},{"position":2,"price":816}],"price":867,"compare_at_price":1020,"per_delivery_price":867,"selling_plan_id":691785957743,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":918},{"position":2,"price":867}],"price":918,"compare_at_price":1020,"per_delivery_price":918,"selling_plan_id":691785990511,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":969},{"position":2,"price":918}],"price":969,"compare_at_price":1020,"per_delivery_price":969,"selling_plan_id":691786023279,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":918},{"position":2,"price":867}],"price":918,"compare_at_price":1020,"per_delivery_price":918,"selling_plan_id":691786088815,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":969},{"position":2,"price":918}],"price":969,"compare_at_price":1020,"per_delivery_price":969,"selling_plan_id":691786121583,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":867},{"position":2,"price":816}],"price":867,"compare_at_price":1020,"per_delivery_price":867,"selling_plan_id":691795362159,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":918},{"position":2,"price":867}],"price":918,"compare_at_price":1020,"per_delivery_price":918,"selling_plan_id":691795394927,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":969},{"position":2,"price":918}],"price":969,"compare_at_price":1020,"per_delivery_price":969,"selling_plan_id":691795427695,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"}],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":44111525019970,"title":"15ml","option1":"15ml","option2":null,"option3":null,"sku":"BRENEA-B15","requires_shipping":true,"taxable":true,"featured_image":{"id":43885027328322,"product_id":8025566609730,"position":4,"created_at":"2024-01-22T07:43:39-07:00","updated_at":"2025-04-11T00:02:23-06:00","alt":"Breathe Easy Essential Oil Blend","width":571,"height":571,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/BreatheEase15mlBlend.jpg?v=1744351343","variant_ids":[44111525019970]},"available":true,"name":"Breathe Ease Essential Oil Blend - 15ml","public_title":"15ml","options":["15ml"],"price":2045,"weight":45,"compare_at_price":null,"inventory_management":"shopify","barcode":"053176177434","featured_media":{"alt":"Breathe Easy Essential Oil Blend","id":36355392536898,"position":4,"preview_image":{"aspect_ratio":1.0,"height":571,"width":571,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/BreatheEase15mlBlend.jpg?v=1744351343"}},"requires_selling_plan":false,"selling_plan_allocations":[{"price_adjustments":[{"position":1,"price":1432}],"price":1432,"compare_at_price":2045,"per_delivery_price":1432,"selling_plan_id":691785924975,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":1738},{"position":2,"price":1636}],"price":1738,"compare_at_price":2045,"per_delivery_price":1738,"selling_plan_id":691785957743,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":1841},{"position":2,"price":1738}],"price":1841,"compare_at_price":2045,"per_delivery_price":1841,"selling_plan_id":691785990511,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":1943},{"position":2,"price":1841}],"price":1943,"compare_at_price":2045,"per_delivery_price":1943,"selling_plan_id":691786023279,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":1841},{"position":2,"price":1738}],"price":1841,"compare_at_price":2045,"per_delivery_price":1841,"selling_plan_id":691786088815,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":1943},{"position":2,"price":1841}],"price":1943,"compare_at_price":2045,"per_delivery_price":1943,"selling_plan_id":691786121583,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":1738},{"position":2,"price":1636}],"price":1738,"compare_at_price":2045,"per_delivery_price":1738,"selling_plan_id":691795362159,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":1841},{"position":2,"price":1738}],"price":1841,"compare_at_price":2045,"per_delivery_price":1841,"selling_plan_id":691795394927,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":1943},{"position":2,"price":1841}],"price":1943,"compare_at_price":2045,"per_delivery_price":1943,"selling_plan_id":691795427695,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"}],"quantity_rule":{"min":1,"max":null,"increment":1}}] 2389 </script>
2389<form method="post" action="/cart/add" id="product-form-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025566609730" accept-charset="UTF-8" class="product-variants product-form" enctype="multipart/form-data" data-productid="8025566609730" novalidate="novalidate" data-type="add-to-cart-form"><input type="hidden" name="form_type" value="product" /><input type="hidden" name="utf8" value="â" /><div class="product-price-option"> 2390 <div class="product-price" id="ProductPrice-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025566609730" aria-live="polite" aria-atomic="true"> 2391 <span class="compare-at-price" id="ComparePrice-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025566609730" style="display: none;"></span> 2392 <span class="current-price" id="CurrentPrice-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025566609730">$10.20</span> 2393 2394 2395 </div> 2396 2397 2398 <div class="product-option"> 2399 <label for="Option-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025566609730-0" class="visually-hidden"> 2400 Select Size for Breathe Ease Essential Oil Blend 2401 </label> 2402 <select 2403 id="Option-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025566609730-0" 2404 class="variant-select" 2405 name="options[Size]" 2406 form="product-form-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025566609730" 2407 data-index="option0" 2408 ><option 2409 value="5ml" 2410 selected="selected" 2411 > 2412 5ml 2413 </option><option 2414 value="15ml" 2415 2416 > 2417 15ml 2418 </option></select> 2419 </div> 2420 2421 </div><label for="ProductSelect-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025566609730" class="visually-hidden"> 2422 Choose variant for Breathe Ease Essential Oil Blend 2423 </label> 2424 <select 2425 name="id" 2426 data-productid="8025566609730" 2427 id="ProductSelect-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025566609730" 2428 class="product-variants-select no-js-only" 2429 ><option 2430 value="52912994877807" 2431 selected="selected" 2432 2433 > 2434 5ml - $10.20 2435 </option><option 2436 value="44111525019970" 2437 2438 2439 > 2440 15ml - $20.45 2441 </option></select> 2442 2443 <div class="product-addtocart" id="AddToCartWrapper-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025566609730"> 2444 <input type="hidden" name="quantity" value="1"> 2445 2446 2447 <div class="visually-hidden" role="status" id="variant-status-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025566609730" aria-live="assertive"></div> 2448 2449 <span id="cart-action-desc-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025566609730" class="visually-hidden">Adds item to your shopping cart</span> 2450 2451 <button 2452 class="addtocart-btn add-to-cart" 2453 type="submit" 2454 name="add" 2455 aria-label="Add to Cart - Add Breathe Ease Essential Oil Blend to cart" 2456 aria-describedby="cart-action-desc-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025566609730" 2457 id="AddToCart-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025566609730" 2458 2459 >
2460 <span id="AddToCartText-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025566609730">Add to Cart <i class="cart-icon" aria-hidden="true"></i></span> 2461 </button> 2462 </div><input type="hidden" name="product-id" value="8025566609730" /><input type="hidden" name="section-id" value="template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1" /></form><!-- END Variant Selection Form --></div>
2462<script type="application/ld+json"> 2463 { 2464 "@context": "http://schema.org/", 2465 "@type": "Product", 2466 "name": "Breathe Ease Essential Oil Blend", 2467 "url": "https:\/\/www.rockymountainoils.com\/products\/breathe-ease-essential-oil-blend","image": [ 2468 "https:\/\/www.rockymountainoils.com\/cdn\/shop\/files\/BreatheEase5mlBlend.jpg?v=1744351343\u0026width=532" 2469 ], 2470 "description": "Breathe Ease Essential Oil Blend combines powerful respiratory support oils to help you breathe better naturally. This synergistic blend of Eucalyptus, Myrtle, Peppermint, Spruce, Ravintsara, Pine, and Marjoram opens airways, relieves congestion, and supports overall respiratory health.\nUse this potent blend to clear sinuses, ease coughing, and boost immunity during cold and flu season. The natural expectorant and anti-inflammatory properties provide relief from allergies, asthma, and other breathing difficulties. You can also use it as a home remedy for allergies.","sku": "BRENEA-B5", 2471 "brand": { 2472 "@type": "Brand", 2473 "name": "Rocky Mountain Oils" 2474 }, 2475 "offers": { 2476 "@type": "AggregateOffer", 2477 "availability": "http://schema.org/InStock", 2478 "priceCurrency": "USD", 2479 "highPrice": 20.45, 2480 "lowPrice": 10.2, 2481 "offerCount": 2, 2482 "offers": [{ 2483 "@type" : "Offer","sku": "BRENEA-B5","gtin12": "053176177441","availability" : "http://schema.org/InStock", 2484 "price" : 10.2, 2485 "priceCurrency" : "USD", 2486 "priceValidUntil": "2026-12-31", 2487 "url" : "https:\/\/www.rockymountainoils.com\/products\/breathe-ease-essential-oil-blend?variant=52912994877807" 2488 }, 2489{ 2490 "@type" : "Offer","sku": "BRENEA-B15","gtin12": "053176177434","availability" : "http://schema.org/InStock", 2491 "price" : 20.45, 2492 "priceCurrency" : "USD", 2493 "priceValidUntil": "2026-12-31", 2494 "url" : "https:\/\/www.rockymountainoils.com\/products\/breathe-ease-essential-oil-blend?variant=44111525019970" 2495 } 2496] 2497 } 2498 } 2499 </script>
2499</div> 2500 2501<style> 2502/* Ensure visually-hidden utility exists even if theme lacks it */ 2503.visually-hidden { 2504 position: absolute !important; 2505 width: 1px !important; 2506 height: 1px !important; 2507 padding: 0 !important; 2508 margin: -1px !important; 2509 overflow: hidden !important; 2510 clip: rect(0, 0, 0, 0) !important; 2511 white-space: nowrap !important; 2512 border: 0 !important; 2513} 2514 2515/* Ensure the main product image is tappable on iOS */ 2516.main-product-image { 2517 cursor: pointer; 2518 -webkit-tap-highlight-color: rgba(0,0,0,0.05); 2519 touch-action: manipulation; 2520} 2521 2522/* ULTIMATE FIX - Override anything that hides select text */ 2523.product-variants-select, 2524.product-variants-select.no-js-only, 2525select.product-variants-select, 2526select[id*="ProductSelect-"] { 2527 color: #1a1a1a !important; 2528 opacity: 1 !important; 2529 background-color: #ffffff !important; 2530 -webkit-text-fill-color: #1a1a1a !important; 2531} 2532 2533.product-variants-select option, 2534select[id*="ProductSelect-"] option { 2535 color: #1a1a1a !important; 2536 background-color: #ffffff !important; 2537 -webkit-text-fill-color: #1a1a1a !important; 2538} 2539 2540.product-variants-select option:checked, 2541select[id*="ProductSelect-"] option:checked { 2542 color: #1a1a1a !important; 2543 background-color: #e8f0fe !important; 2544} 2545 2546.product-variants-select option:disabled, 2547select[id*="ProductSelect-"] option:disabled { 2548 color: #6c6c6c !important; 2549 background-color: #f5f5f5 !important; 2550 -webkit-text-fill-color: #6c6c6c !important; 2551 opacity: 1 !important; 2552} 2553 2554.product-variants-select:focus, 2555select[id*="ProductSelect-"]:focus { 2556 color: #1a1a1a !important; 2557 outline: 3px solid #000000ff !important; 2558} 2559</style> 2560 </div><div class="item"> 2561
2561<script> 2562(function() { 2563 class ProductCardVariantSelector { 2564 constructor(container) { 2565 this.container = container; 2566 if (!this.container) return; 2567 2568 this.form = this.container.querySelector('.product-form'); 2569 this.variantSelectors = this.container.querySelectorAll('.variant-select'); 2570 this.masterSelect = this.container.querySelector('.product-variants-select'); 2571 this.productImage = this.container.querySelector('.main-product-image'); 2572 this.priceWrapper = this.container.querySelector('[id^="ProductPrice-"]'); 2573 this.currentPriceElement = this.container.querySelector('[id^="CurrentPrice-"]'); 2574 this.comparePriceElement = this.container.querySelector('[id^="ComparePrice-"]'); 2575 this.addToCartButton = this.container.querySelector('[id^="AddToCart-"]'); 2576 this.addToCartText = this.container.querySelector('[id^="AddToCartText-"]'); 2577 this.notifyMeButton = this.container.querySelector('[id^="NotifyMe-"]'); 2578 this.variantsJsonScript = this.container.querySelector('[id^="VariantsJson-"]'); 2579 this.dataStore = this.container.querySelector('[id^="DataStore-"]'); 2580 this.saleTag = this.container.querySelector('.hc-sale-tag'); 2581 this.statusElement = this.container.querySelector('[id^="variant-status-"]'); 2582 2583 if (!this.masterSelect || !this.variantsJsonScript) return; 2584 2585 try { 2586 this.productVariants = JSON.parse(this.variantsJsonScript.textContent); 2587 } catch (e) { return; } 2588 2589 this.mainImageUrl = this.dataStore ? this.dataStore.dataset.mainImageUrl : null; 2590 this.productTitle = this.dataStore ? this.dataStore.dataset.productTitle : ''; 2591 2592 this.init(); 2593 } 2594 2595 init() { 2596 // --- iOS-safe image tap handling (works on iPhone 16, 17 Pro Max, etc.) --- 2597 if (this.productImage) { 2598 let touchStartX = 0, touchStartY = 0, touchMoved = false; 2599 let lastTouchTime = 0; 2600 2601 this.productImage.style.cursor = 'pointer'; 2602 this.productImage.setAttribute('role', 'button'); 2603 this.productImage.setAttribute('tabindex', '0'); 2604 2605 this.productImage.addEventListener('touchstart', (e) => { 2606 const t = e.touches[0]; 2607 touchStartX = t.clientX; 2608 touchStartY = t.clientY; 2609 touchMoved = false; 2610 }, { passive: true }); 2611 2612 this.productImage.addEventListener('touchmove', (e) => { 2613 const t = e.touches[0]; 2614 if (Math.abs(t.clientX - touchStartX) > 10 || 2615 Math.abs(t.clientY - touchStartY) > 10) { 2616 touchMoved = true; 2617 } 2618 }, { passive: true }); 2619 2620 this.productImage.addEventListener('touchend', (e) => { 2621 if (touchMoved) return; 2622 lastTouchTime = Date.now(); 2623 e.preventDefault(); 2624 this.onImageTap(e); 2625 }, { passive: false }); 2626 2627 // Desktop / non-touch fallback (with double-fire protection after touchend) 2628 this.productImage.addEventListener('click', (e) => { 2629 if (Date.now() - lastTouchTime < 500) return; 2630 this.onImageTap(e); 2631 }); 2632 2633 this.productImage.addEventListener('keydown', (e) => { 2634 if (e.key === 'Enter' || e.key === ' ') { 2635 e.preventDefault(); 2636 this.onImageTap(e); 2637 } 2638 }); 2639 } 2640 2641 // --- Variant select listeners --- 2642 if (this.variantSelectors.length > 0) { 2643 this.variantSelectors.forEach(select => { 2644 select.addEventListener('change', this.onVariantChange.bind(this)); 2645 }); 2646 this.updateProductDetails(this.getCurrentVariant()); 2647 } 2648 } 2649 2650 // ============================================================ 2651 // CHANGE THIS IF YOU WANT DIFFERENT TAP BEHAVIOR 2652 // Currently: navigates to the product page. 2653 // ============================================================ 2654 onImageTap(e) { 2655 const link = this.container.querySelector('.product-title-link'); 2656 if (link && link.href && link.href !== '#') { 2657 window.location.href = link.href; 2658 } 2659 } 2660 // ============================================================ 2661 2662 onVariantChange() { 2663 const selectedOptions = Array.from(this.variantSelectors).map(s => s.value); 2664 const matchedVariant = this.findMatchingVariant(selectedOptions); 2665 2666 if (matchedVariant) { 2667 this.masterSelect.value = matchedVariant.id; 2668 this.updateProductDetails(matchedVariant); 2669 if (this.statusElement) this.statusElement.textContent = ''; 2670 } else { 2671 if (this.statusElement) { 2672 this.statusElement.textContent = 'No available variant matches your selection'; 2673 } 2674 this.updateProductDetails(null); 2675 } 2676 } 2677 2678 findMatchingVariant(selectedOptions) { 2679 return this.productVariants.find(variant => { 2680 if (!variant.options || variant.options.length !== selectedOptions.length) return false;
2681 return selectedOptions.every((val, i) => variant.options[i] === val); 2682 }); 2683 } 2684 2685 getCurrentVariant() { 2686 if (!this.masterSelect) return null; 2687 const id = this.masterSelect.value; 2688 if (!id) return null; 2689 return this.productVariants.find(v => String(v.id) === String(id)) || null; 2690 } 2691 2692 // Shopify CDN: insert _WIDTHx before extension for a properly sized image 2693 sizedImageUrl(src, width) { 2694 if (!src) return src; 2695 return src.replace(/(\.[a-z]{3,4})(\?|$)/i, `_${width}x$1$2`); 2696 } 2697 2698 updateProductDetails(variant) { 2699 this.container.setAttribute('aria-busy', 'true'); 2700 2701 if (!variant) { 2702 if (this.addToCartButton) this.addToCartButton.disabled = true; 2703 if (this.addToCartText) this.addToCartText.textContent = 'Unavailable'; 2704 if (this.notifyMeButton) this.notifyMeButton.style.display = 'none'; 2705 if (this.priceWrapper) this.priceWrapper.classList.remove('sale'); 2706 if (this.comparePriceElement) this.comparePriceElement.style.display = 'none'; 2707 if (this.saleTag) this.saleTag.style.display = 'none'; 2708 this.container.setAttribute('aria-busy', 'false'); 2709 return; 2710 } 2711 2712 // 1. Image 2713 if (this.productImage) { 2714 if (variant.featured_image && variant.featured_image.src) { 2715 const sized = this.sizedImageUrl(variant.featured_image.src, 300); 2716 const variantOptions = variant.options ? variant.options.join(' - ') : ''; 2717 this.productImage.src = sized; 2718 this.productImage.srcset = ''; 2719 this.productImage.alt = variant.featured_image.alt 2720 ? variant.featured_image.alt 2721 : (this.productTitle + (variantOptions ? ' - ' + variantOptions : '')); 2722 } else if (this.mainImageUrl) { 2723 this.productImage.src = this.mainImageUrl; 2724 this.productImage.srcset = ''; 2725 this.productImage.alt = this.productTitle; 2726 } 2727 } 2728 2729 // 2. Price 2730 const moneyFormat = "${{amount}}"; 2731 const formatMoney = (cents, format) => { 2732 if (typeof cents === 'string') cents = cents.replace('.', ''); 2733 let value = ''; 2734 const placeholderRegex = /\{\{\s*(\w+)\s*\}\}/; 2735 const formatString = (format || moneyFormat).replace(/<[^>]*>/g, ''); 2736 2737 function formatWithDelimiters(number, precision, thousands, decimal) { 2738 precision = precision ?? 2; 2739 thousands = thousands ?? ','; 2740 decimal = decimal ?? '.'; 2741 if (isNaN(number) || number == null) return 0; 2742 number = (number / 100.0).toFixed(precision); 2743 const parts = number.split('.'); 2744 const dollars = parts[0].replace(/(\d)(?=(\d\d\d)+(?!\d))/g, '$1' + thousands); 2745 const centsPart = parts[1] ? (decimal + parts[1]) : ''; 2746 return dollars + centsPart; 2747 } 2748 2749 switch (formatString.match(placeholderRegex)?.[1]) { 2750 case 'amount': value = formatWithDelimiters(cents, 2); break; 2751 case 'amount_no_decimals': value = formatWithDelimiters(cents, 0); break; 2752 case 'amount_with_comma_separator': value = formatWithDelimiters(cents, 2, '.', ','); break; 2753 case 'amount_no_decimals_with_comma_separator': value = formatWithDelimiters(cents, 0, '.', ','); break; 2754 case 'amount_with_apostrophe_separator': value = formatWithDelimiters(cents, 2, "'", "."); break; 2755 case 'amount_no_decimals_with_space_separator': value = formatWithDelimiters(cents, 0, " ", ","); break; 2756 case 'amount_with_space_separator': value = formatWithDelimiters(cents, 2, " ", ","); break; 2757 default: value = formatWithDelimiters(cents, 2); 2758 } 2759 try { 2760 return formatString.replace(placeholderRegex, value); 2761 } catch (e) { 2762 const fallback = (cents / 100.0).toFixed(2); 2763 return formatString.includes('') 2764 ? formatString.replace(placeholderRegex, fallback) 2765 : fallback; 2766 } 2767 }; 2768 2769 if (this.currentPriceElement) { 2770 this.currentPriceElement.textContent = formatMoney(variant.price, moneyFormat); 2771 } 2772 if (this.comparePriceElement && this.priceWrapper) { 2773 if (variant.compare_at_price && variant.compare_at_price > variant.price) { 2774 this.comparePriceElement.textContent = formatMoney(variant.compare_at_price, moneyFormat); 2775 this.comparePriceElement.style.display = ''; 2776 this.priceWrapper.classList.add('sale'); 2777 } else { 2778 this.comparePriceElement.textContent = ''; 2779 this.comparePriceElement.style.display = 'none'; 2780 this.priceWrapper.classList.remove('sale'); 2781 } 2782 } 2783 2784 // 3. Sale tag 2785 if (this.saleTag) { 2786 const isDiscounted = variant.compare_at_price && variant.compare_at_price > variant.price; 2787 if (isDiscounted && variant.available) { 2788 this.saleTag.style.display = 'block'; 2789 const discount = Math.round((variant.compare_at_price - variant.price) * 100.0 / variant.compare_at_price); 2790 const span = this.saleTag.querySelector('span'); 2791 if (span) span.textContent = discount + '%'; 2792 this.saleTag.setAttribute('aria-label', 'Save ' + discount + '%'); 2793 this.saleTag.setAttribute('role', 'status'); 2794 } else { 2795 this.saleTag.style.display = 'none'; 2796 } 2797 } 2798 2799 // 4. Add to cart 2800 if (this.addToCartButton && this.addToCartText) { 2801 if (variant.available) { 2802 this.addToCartButton.disabled = false;
2803 this.addToCartText.innerHTML = 'Add to Cart <i class="cart-icon"></i>'; 2804 this.addToCartButton.setAttribute('aria-label', 'Add to Cart - Add ' + this.productTitle + ' to cart'); 2805 if (this.notifyMeButton) this.notifyMeButton.style.display = 'none'; 2806 } else { 2807 this.addToCartButton.disabled = true; 2808 this.addToCartText.textContent = 'Sold Out'; 2809 this.addToCartButton.setAttribute('aria-label', 'Sold Out - ' + this.productTitle + ' is sold out'); 2810 if (this.notifyMeButton) this.notifyMeButton.style.display = 'block'; 2811 } 2812 } 2813 if (this.notifyMeButton) { 2814 this.notifyMeButton.setAttribute('data-variant-id', variant.id); 2815 } 2816 2817 this.container.setAttribute('aria-busy', 'false'); 2818 } 2819 } 2820 2821 function initProductCards(root) { 2822 root = root || document; 2823 root.querySelectorAll('.product-card-wrapper[data-product-id]').forEach(cardContainer => { 2824 if (cardContainer.dataset.variantSelectorInit === 'true') return; 2825 cardContainer.dataset.variantSelectorInit = 'true'; 2826 new ProductCardVariantSelector(cardContainer); 2827 }); 2828 } 2829 2830 if (document.readyState === 'loading') { 2831 document.addEventListener('DOMContentLoaded', () => initProductCards()); 2832 } else { 2833 initProductCards(); 2834 } 2835 2836 document.addEventListener('shopify:section:load', (e) => initProductCards(e.target)); 2837})(); 2838</script>
2838<div class="product-card-wrapper" data-product-id="8025560121666" aria-busy="false"> 2839 2840 <div class="product-image" id="ProductImageWrapper-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025560121666"><!-- WISHLIST BUTTON --> 2841 <div class='xb-wishlist__btn-custom'> 2842 <div 2843 class='xb-wishlist__add' 2844 xb-product-id='8025560121666' 2845 xb-product-title='Eucalyptus Radiata Essential Oil' 2846 xb-product-variant='48687488991554' 2847 xb-is-in-stock='true' 2848 xb-product-handle='eucalyptus-radiata-essential-oil' 2849 > 2850 <button aria-label="Add Eucalyptus Radiata Essential Oil to wishlist" aria-pressed="false"> 2851 <svg 2852 xmlns='http://www.w3.org/2000/svg' 2853 width='20' 2854 height='20' 2855 viewBox='0 0 24 24' 2856 fill='none' 2857 stroke='#FF4A71' 2858 stroke-width='2' 2859 stroke-linecap='round' 2860 stroke-linejoin='round' 2861 aria-hidden='true' 2862 focusable='false' 2863 > 2864 <path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"></path> 2865 </svg> 2866 </button> 2867 </div> 2868 2869 <div class="xb-wishlist__loading" xb-product-id="8025560121666"> 2870 <span class="loading-spinner"></span> 2871 </div> 2872 2873 <div class='xb-wishlist__remove' xb-product-id='8025560121666' xb-is-in-stock='true'> 2874 <button aria-label="Remove Eucalyptus Radiata Essential Oil from wishlist" aria-pressed="true"> 2875 <svg 2876 xmlns='http://www.w3.org/2000/svg' 2877 width='20' 2878 height='20'
2879 viewBox='0 0 24 24' 2880 fill='#FF4A71' 2881 stroke='#FF4A71' 2882 stroke-width='2' 2883 stroke-linecap='round' 2884 stroke-linejoin='round' 2885 aria-hidden='true' 2886 focusable='false' 2887 > 2888 <path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"></path> 2889 </svg> 2890 </button> 2891 </div> 2892 </div><img 2893 id="ProductImage-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025560121666" 2894 class="main-product-image" 2895 src="//www.rockymountainoils.com/cdn/shop/files/eucalyptus-radiata-essential-oil-4oz-1.jpg?crop=center&height=300&v=1758272035&width=300" 2896 alt="Eucalyptus radiata Essential Oil - 4oz - Rocky Mountain Oils" 2897 width="300" 2898 height="300" 2899 loading="lazy" 2900 /></div> 2901 2902 <div class="product-content"> 2903 <div class="product-title"> 2904 <a href="/products/eucalyptus-radiata-essential-oil" class="product-title-link" aria-label="View Eucalyptus Radiata Essential Oil"> 2905 <h2>Eucalyptus Radiata Essential Oil</h2> 2906 </a> 2907 </div><div> 2908 <div class="product-subtitle"> 2909 Crisp, menthol-like; aids in centering & clearing the mind. 2910 </div> 2911 </div><div class="yotpo-widget-instance" data-yotpo-instance-id="503375" data-yotpo-product-id="8025560121666" data-yotpo-cart-product-id="" data-yotpo-section-id="index"></div><!-- START Variant Selection Form --> 2912 <div class="product-data-store" style="display:none;" 2913 data-main-image-url="//www.rockymountainoils.com/cdn/shop/files/eucalyptus-radiata-essential-oil-4oz-1.jpg?v=1758272035&width=300" 2914 data-product-title="Eucalyptus Radiata Essential Oil" 2915 id="DataStore-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025560121666"> 2916 </div> 2917 2918
2918<script id="VariantsJson-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025560121666" type="application/json"> 2919 [{"id":48687488991554,"title":"4oz","option1":"4oz","option2":null,"option3":null,"sku":"EUCRAD-4OZ","requires_shipping":true,"taxable":true,"featured_image":{"id":44365286539586,"product_id":8025560121666,"position":1,"created_at":"2024-03-06T13:38:29-07:00","updated_at":"2025-09-19T02:53:55-06:00","alt":"Eucalyptus radiata Essential Oil - 4oz - Rocky Mountain Oils","width":741,"height":741,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/eucalyptus-radiata-essential-oil-4oz-1.jpg?v=1758272035","variant_ids":[48687488991554]},"available":true,"name":"Eucalyptus Radiata Essential Oil - 4oz","public_title":"4oz","options":["4oz"],"price":3995,"weight":113,"compare_at_price":null,"inventory_management":"shopify","barcode":"053176183213","featured_media":{"alt":"Eucalyptus radiata Essential Oil - 4oz - Rocky Mountain Oils","id":36844192629058,"position":1,"preview_image":{"aspect_ratio":1.0,"height":741,"width":741,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/eucalyptus-radiata-essential-oil-4oz-1.jpg?v=1758272035"}},"requires_selling_plan":false,"selling_plan_allocations":[{"price_adjustments":[{"position":1,"price":2797}],"price":2797,"compare_at_price":3995,"per_delivery_price":2797,"selling_plan_id":691785924975,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":3396},{"position":2,"price":3196}],"price":3396,"compare_at_price":3995,"per_delivery_price":3396,"selling_plan_id":691785957743,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":3596},{"position":2,"price":3396}],"price":3596,"compare_at_price":3995,"per_delivery_price":3596,"selling_plan_id":691785990511,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":3795},{"position":2,"price":3596}],"price":3795,"compare_at_price":3995,"per_delivery_price":3795,"selling_plan_id":691786023279,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":3596},{"position":2,"price":3396}],"price":3596,"compare_at_price":3995,"per_delivery_price":3596,"selling_plan_id":691786088815,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":3795},{"position":2,"price":3596}],"price":3795,"compare_at_price":3995,"per_delivery_price":3795,"selling_plan_id":691786121583,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":3396},{"position":2,"price":3196}],"price":3396,"compare_at_price":3995,"per_delivery_price":3396,"selling_plan_id":691795362159,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":3596},{"position":2,"price":3396}],"price":3596,"compare_at_price":3995,"per_delivery_price":3596,"selling_plan_id":691795394927,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":3795},{"position":2,"price":3596}],"price":3795,"compare_at_price":3995,"per_delivery_price":3795,"selling_plan_id":691795427695,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"}],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":44111479865666,"title":"15ml","option1":"15ml","option2":null,"option3":null,"sku":"EUCRAD-S15","requires_shipping":true,"taxable":true,"featured_image":{"id":44126614389058,"product_id":8025560121666,"position":4,"created_at":"2024-02-14T14:27:18-07:00","updated_at":"2025-09-19T02:53:55-06:00","alt":"Eucalyptus Radiata Essential Oil - 15ml - Rocky Mountain Oils","width":607,"height":607,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/eucalyptus-radiata-essential-oil-15ml-1.jpg?v=1758272035","variant_ids":[44111479865666]},"available":true,"name":"Eucalyptus Radiata Essential Oil - 15ml","public_title":"15ml","options":["15ml"],"price":1495,"weight":45,"compare_at_price":null,"inventory_management":"shopify","barcode":"053176175638","featured_media":{"alt":"Eucalyptus Radiata Essential Oil - 15ml - Rocky Mountain Oils","id":36602443432258,"position":4,"preview_image":{"aspect_ratio":1.0,"height":607,"width":607,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/eucalyptus-radiata-essential-oil-15ml-1.jpg?v=1758272035"}},"requires_selling_plan":false,"selling_plan_allocations":[{"price_adjustments":[{"position":1,"price":1047}],"price":1047,"compare_at_price":1495,"per_delivery_price":1047,"selling_plan_id":691785924975,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":1271},{"position":2,"price":1196}],"price":1271,"compare_at_price":1495,"per_delivery_price":1271,"selling_plan_id":691785957743,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":1346},{"position":2,"price":1271}],"price":1346,"compare_at_price":1495,"per_delivery_price":1346,"selling_plan_id":691785990511,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":1420},{"position":2,"price":1346}],"price":1420,"compare_at_price":1495,"per_delivery_price":1420,"selling_plan_id":691786023279,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":1346},{"position":2,"price":1271}],"price":1346,"compare_at_price":1495,"per_delivery_price":1346,"selling_plan_id":691786088815,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":1420},{"position":2,"price":1346}],"price":1420,"compare_at_price":1495,"per_delivery_price":1420,"selling_plan_id":691786121583,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":1271},{"position":2,"price":1196}],"price":1271,"compare_at_price":1495,"per_delivery_price":1271,"selling_plan_id":691795362159,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":1346},{"position":2,"price":1271}],"price":1346,"compare_at_price":1495,"per_delivery_price":1346,"selling_plan_id":691795394927,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":1420},{"position":2,"price":1346}],"price":1420,"compare_at_price":1495,"per_delivery_price":1420,"selling_plan_id":691795427695,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"}],"quantity_rule":{"min":1,"max":null,"increment":1}}] 2920 </script>
2920<form method="post" action="/cart/add" id="product-form-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025560121666" accept-charset="UTF-8" class="product-variants product-form" enctype="multipart/form-data" data-productid="8025560121666" novalidate="novalidate" data-type="add-to-cart-form"><input type="hidden" name="form_type" value="product" /><input type="hidden" name="utf8" value="â" /><div class="product-price-option"> 2921 <div class="product-price" id="ProductPrice-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025560121666" aria-live="polite" aria-atomic="true"> 2922 <span class="compare-at-price" id="ComparePrice-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025560121666" style="display: none;"></span> 2923 <span class="current-price" id="CurrentPrice-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025560121666">$39.95</span> 2924 2925 2926 </div> 2927 2928 2929 <div class="product-option"> 2930 <label for="Option-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025560121666-0" class="visually-hidden"> 2931 Select Size for Eucalyptus Radiata Essential Oil 2932 </label> 2933 <select 2934 id="Option-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025560121666-0" 2935 class="variant-select" 2936 name="options[Size]" 2937 form="product-form-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025560121666" 2938 data-index="option0" 2939 ><option 2940 value="4oz" 2941 selected="selected" 2942 > 2943 4oz 2944 </option><option 2945 value="15ml" 2946 2947 > 2948 15ml 2949 </option></select> 2950 </div> 2951 2952 </div><label for="ProductSelect-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025560121666" class="visually-hidden"> 2953 Choose variant for Eucalyptus Radiata Essential Oil 2954 </label> 2955 <select 2956 name="id" 2957 data-productid="8025560121666" 2958 id="ProductSelect-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025560121666" 2959 class="product-variants-select no-js-only" 2960 ><option 2961 value="48687488991554" 2962 selected="selected" 2963 2964 > 2965 4oz - $39.95 2966 </option><option 2967 value="44111479865666" 2968 2969 2970 > 2971 15ml - $14.95 2972 </option></select> 2973 2974 <div class="product-addtocart" id="AddToCartWrapper-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025560121666"> 2975 <input type="hidden" name="quantity" value="1"> 2976 2977 2978 <div class="visually-hidden" role="status" id="variant-status-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025560121666" aria-live="assertive"></div> 2979 2980 <span id="cart-action-desc-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025560121666" class="visually-hidden">Adds item to your shopping cart</span> 2981 2982 <button 2983 class="addtocart-btn add-to-cart" 2984 type="submit" 2985 name="add" 2986 aria-label="Add to Cart - Add Eucalyptus Radiata Essential Oil to cart" 2987 aria-describedby="cart-action-desc-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025560121666" 2988 id="AddToCart-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025560121666" 2989 2990 >
2991 <span id="AddToCartText-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025560121666">Add to Cart <i class="cart-icon" aria-hidden="true"></i></span> 2992 </button> 2993 </div><input type="hidden" name="product-id" value="8025560121666" /><input type="hidden" name="section-id" value="template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1" /></form><!-- END Variant Selection Form --></div>
2993<script type="application/ld+json"> 2994 { 2995 "@context": "http://schema.org/", 2996 "@type": "Product", 2997 "name": "Eucalyptus Radiata Essential Oil", 2998 "url": "https:\/\/www.rockymountainoils.com\/products\/eucalyptus-radiata-essential-oil","image": [ 2999 "https:\/\/www.rockymountainoils.com\/cdn\/shop\/files\/eucalyptus-radiata-essential-oil-4oz-1.jpg?v=1758272035\u0026width=741" 3000 ], 3001 "description": "Eucalyptus radiata Essential Oil, also known as Narrow-Leaved Peppermint, is a versatile oil with a crisp, peppermint-like fragrance. Its aroma may help create a sense of mental focus and clarity. When diffused, this powerful oil can contribute to a clean, fresh atmosphere in your space.\n\n","sku": "EUCRAD-4OZ", 3002 "brand": { 3003 "@type": "Brand", 3004 "name": "Rocky Mountain Oils" 3005 }, 3006 "offers": { 3007 "@type": "AggregateOffer", 3008 "availability": "http://schema.org/InStock", 3009 "priceCurrency": "USD", 3010 "highPrice": 39.95, 3011 "lowPrice": 14.95, 3012 "offerCount": 2, 3013 "offers": [{ 3014 "@type" : "Offer","sku": "EUCRAD-4OZ","gtin12": "053176183213","availability" : "http://schema.org/InStock", 3015 "price" : 39.95, 3016 "priceCurrency" : "USD", 3017 "priceValidUntil": "2026-12-31", 3018 "url" : "https:\/\/www.rockymountainoils.com\/products\/eucalyptus-radiata-essential-oil?variant=48687488991554" 3019 }, 3020{ 3021 "@type" : "Offer","sku": "EUCRAD-S15","gtin12": "053176175638","availability" : "http://schema.org/InStock", 3022 "price" : 14.95, 3023 "priceCurrency" : "USD", 3024 "priceValidUntil": "2026-12-31", 3025 "url" : "https:\/\/www.rockymountainoils.com\/products\/eucalyptus-radiata-essential-oil?variant=44111479865666" 3026 } 3027] 3028 } 3029 } 3030 </script>
3030</div> 3031 3032<style> 3033/* Ensure visually-hidden utility exists even if theme lacks it */ 3034.visually-hidden { 3035 position: absolute !important; 3036 width: 1px !important; 3037 height: 1px !important; 3038 padding: 0 !important; 3039 margin: -1px !important; 3040 overflow: hidden !important; 3041 clip: rect(0, 0, 0, 0) !important; 3042 white-space: nowrap !important; 3043 border: 0 !important; 3044} 3045 3046/* Ensure the main product image is tappable on iOS */ 3047.main-product-image { 3048 cursor: pointer; 3049 -webkit-tap-highlight-color: rgba(0,0,0,0.05); 3050 touch-action: manipulation; 3051} 3052 3053/* ULTIMATE FIX - Override anything that hides select text */ 3054.product-variants-select, 3055.product-variants-select.no-js-only, 3056select.product-variants-select, 3057select[id*="ProductSelect-"] { 3058 color: #1a1a1a !important; 3059 opacity: 1 !important; 3060 background-color: #ffffff !important; 3061 -webkit-text-fill-color: #1a1a1a !important; 3062} 3063 3064.product-variants-select option, 3065select[id*="ProductSelect-"] option { 3066 color: #1a1a1a !important; 3067 background-color: #ffffff !important; 3068 -webkit-text-fill-color: #1a1a1a !important; 3069} 3070 3071.product-variants-select option:checked, 3072select[id*="ProductSelect-"] option:checked { 3073 color: #1a1a1a !important; 3074 background-color: #e8f0fe !important; 3075} 3076 3077.product-variants-select option:disabled, 3078select[id*="ProductSelect-"] option:disabled { 3079 color: #6c6c6c !important; 3080 background-color: #f5f5f5 !important; 3081 -webkit-text-fill-color: #6c6c6c !important; 3082 opacity: 1 !important; 3083} 3084 3085.product-variants-select:focus, 3086select[id*="ProductSelect-"]:focus { 3087 color: #1a1a1a !important; 3088 outline: 3px solid #000000ff !important; 3089} 3090</style> 3091 </div><div class="item"> 3092
3092<script> 3093(function() { 3094 class ProductCardVariantSelector { 3095 constructor(container) { 3096 this.container = container; 3097 if (!this.container) return; 3098 3099 this.form = this.container.querySelector('.product-form'); 3100 this.variantSelectors = this.container.querySelectorAll('.variant-select'); 3101 this.masterSelect = this.container.querySelector('.product-variants-select'); 3102 this.productImage = this.container.querySelector('.main-product-image'); 3103 this.priceWrapper = this.container.querySelector('[id^="ProductPrice-"]'); 3104 this.currentPriceElement = this.container.querySelector('[id^="CurrentPrice-"]'); 3105 this.comparePriceElement = this.container.querySelector('[id^="ComparePrice-"]'); 3106 this.addToCartButton = this.container.querySelector('[id^="AddToCart-"]'); 3107 this.addToCartText = this.container.querySelector('[id^="AddToCartText-"]'); 3108 this.notifyMeButton = this.container.querySelector('[id^="NotifyMe-"]'); 3109 this.variantsJsonScript = this.container.querySelector('[id^="VariantsJson-"]'); 3110 this.dataStore = this.container.querySelector('[id^="DataStore-"]'); 3111 this.saleTag = this.container.querySelector('.hc-sale-tag'); 3112 this.statusElement = this.container.querySelector('[id^="variant-status-"]'); 3113 3114 if (!this.masterSelect || !this.variantsJsonScript) return; 3115 3116 try { 3117 this.productVariants = JSON.parse(this.variantsJsonScript.textContent); 3118 } catch (e) { return; } 3119 3120 this.mainImageUrl = this.dataStore ? this.dataStore.dataset.mainImageUrl : null; 3121 this.productTitle = this.dataStore ? this.dataStore.dataset.productTitle : ''; 3122 3123 this.init(); 3124 } 3125 3126 init() { 3127 // --- iOS-safe image tap handling (works on iPhone 16, 17 Pro Max, etc.) --- 3128 if (this.productImage) { 3129 let touchStartX = 0, touchStartY = 0, touchMoved = false; 3130 let lastTouchTime = 0; 3131 3132 this.productImage.style.cursor = 'pointer'; 3133 this.productImage.setAttribute('role', 'button'); 3134 this.productImage.setAttribute('tabindex', '0'); 3135 3136 this.productImage.addEventListener('touchstart', (e) => { 3137 const t = e.touches[0]; 3138 touchStartX = t.clientX; 3139 touchStartY = t.clientY; 3140 touchMoved = false; 3141 }, { passive: true }); 3142 3143 this.productImage.addEventListener('touchmove', (e) => { 3144 const t = e.touches[0]; 3145 if (Math.abs(t.clientX - touchStartX) > 10 || 3146 Math.abs(t.clientY - touchStartY) > 10) { 3147 touchMoved = true; 3148 } 3149 }, { passive: true }); 3150 3151 this.productImage.addEventListener('touchend', (e) => { 3152 if (touchMoved) return; 3153 lastTouchTime = Date.now(); 3154 e.preventDefault(); 3155 this.onImageTap(e); 3156 }, { passive: false }); 3157 3158 // Desktop / non-touch fallback (with double-fire protection after touchend) 3159 this.productImage.addEventListener('click', (e) => { 3160 if (Date.now() - lastTouchTime < 500) return; 3161 this.onImageTap(e); 3162 }); 3163 3164 this.productImage.addEventListener('keydown', (e) => { 3165 if (e.key === 'Enter' || e.key === ' ') { 3166 e.preventDefault(); 3167 this.onImageTap(e); 3168 } 3169 }); 3170 } 3171 3172 // --- Variant select listeners --- 3173 if (this.variantSelectors.length > 0) { 3174 this.variantSelectors.forEach(select => { 3175 select.addEventListener('change', this.onVariantChange.bind(this)); 3176 }); 3177 this.updateProductDetails(this.getCurrentVariant()); 3178 } 3179 } 3180 3181 // ============================================================ 3182 // CHANGE THIS IF YOU WANT DIFFERENT TAP BEHAVIOR 3183 // Currently: navigates to the product page. 3184 // ============================================================ 3185 onImageTap(e) { 3186 const link = this.container.querySelector('.product-title-link'); 3187 if (link && link.href && link.href !== '#') { 3188 window.location.href = link.href; 3189 } 3190 } 3191 // ============================================================ 3192 3193 onVariantChange() { 3194 const selectedOptions = Array.from(this.variantSelectors).map(s => s.value); 3195 const matchedVariant = this.findMatchingVariant(selectedOptions); 3196 3197 if (matchedVariant) { 3198 this.masterSelect.value = matchedVariant.id; 3199 this.updateProductDetails(matchedVariant); 3200 if (this.statusElement) this.statusElement.textContent = ''; 3201 } else { 3202 if (this.statusElement) { 3203 this.statusElement.textContent = 'No available variant matches your selection'; 3204 } 3205 this.updateProductDetails(null); 3206 } 3207 } 3208 3209 findMatchingVariant(selectedOptions) { 3210 return this.productVariants.find(variant => { 3211 if (!variant.options || variant.options.length !== selectedOptions.length) return false;
3212 return selectedOptions.every((val, i) => variant.options[i] === val); 3213 }); 3214 } 3215 3216 getCurrentVariant() { 3217 if (!this.masterSelect) return null; 3218 const id = this.masterSelect.value; 3219 if (!id) return null; 3220 return this.productVariants.find(v => String(v.id) === String(id)) || null; 3221 } 3222 3223 // Shopify CDN: insert _WIDTHx before extension for a properly sized image 3224 sizedImageUrl(src, width) { 3225 if (!src) return src; 3226 return src.replace(/(\.[a-z]{3,4})(\?|$)/i, `_${width}x$1$2`); 3227 } 3228 3229 updateProductDetails(variant) { 3230 this.container.setAttribute('aria-busy', 'true'); 3231 3232 if (!variant) { 3233 if (this.addToCartButton) this.addToCartButton.disabled = true; 3234 if (this.addToCartText) this.addToCartText.textContent = 'Unavailable'; 3235 if (this.notifyMeButton) this.notifyMeButton.style.display = 'none'; 3236 if (this.priceWrapper) this.priceWrapper.classList.remove('sale'); 3237 if (this.comparePriceElement) this.comparePriceElement.style.display = 'none'; 3238 if (this.saleTag) this.saleTag.style.display = 'none'; 3239 this.container.setAttribute('aria-busy', 'false'); 3240 return; 3241 } 3242 3243 // 1. Image 3244 if (this.productImage) { 3245 if (variant.featured_image && variant.featured_image.src) { 3246 const sized = this.sizedImageUrl(variant.featured_image.src, 300); 3247 const variantOptions = variant.options ? variant.options.join(' - ') : ''; 3248 this.productImage.src = sized; 3249 this.productImage.srcset = ''; 3250 this.productImage.alt = variant.featured_image.alt 3251 ? variant.featured_image.alt 3252 : (this.productTitle + (variantOptions ? ' - ' + variantOptions : '')); 3253 } else if (this.mainImageUrl) { 3254 this.productImage.src = this.mainImageUrl; 3255 this.productImage.srcset = ''; 3256 this.productImage.alt = this.productTitle; 3257 } 3258 } 3259 3260 // 2. Price 3261 const moneyFormat = "${{amount}}"; 3262 const formatMoney = (cents, format) => { 3263 if (typeof cents === 'string') cents = cents.replace('.', ''); 3264 let value = ''; 3265 const placeholderRegex = /\{\{\s*(\w+)\s*\}\}/; 3266 const formatString = (format || moneyFormat).replace(/<[^>]*>/g, ''); 3267 3268 function formatWithDelimiters(number, precision, thousands, decimal) { 3269 precision = precision ?? 2; 3270 thousands = thousands ?? ','; 3271 decimal = decimal ?? '.'; 3272 if (isNaN(number) || number == null) return 0; 3273 number = (number / 100.0).toFixed(precision); 3274 const parts = number.split('.'); 3275 const dollars = parts[0].replace(/(\d)(?=(\d\d\d)+(?!\d))/g, '$1' + thousands); 3276 const centsPart = parts[1] ? (decimal + parts[1]) : ''; 3277 return dollars + centsPart; 3278 } 3279 3280 switch (formatString.match(placeholderRegex)?.[1]) { 3281 case 'amount': value = formatWithDelimiters(cents, 2); break; 3282 case 'amount_no_decimals': value = formatWithDelimiters(cents, 0); break; 3283 case 'amount_with_comma_separator': value = formatWithDelimiters(cents, 2, '.', ','); break; 3284 case 'amount_no_decimals_with_comma_separator': value = formatWithDelimiters(cents, 0, '.', ','); break; 3285 case 'amount_with_apostrophe_separator': value = formatWithDelimiters(cents, 2, "'", "."); break; 3286 case 'amount_no_decimals_with_space_separator': value = formatWithDelimiters(cents, 0, " ", ","); break; 3287 case 'amount_with_space_separator': value = formatWithDelimiters(cents, 2, " ", ","); break; 3288 default: value = formatWithDelimiters(cents, 2); 3289 } 3290 try { 3291 return formatString.replace(placeholderRegex, value); 3292 } catch (e) { 3293 const fallback = (cents / 100.0).toFixed(2); 3294 return formatString.includes('') 3295 ? formatString.replace(placeholderRegex, fallback) 3296 : fallback; 3297 } 3298 }; 3299 3300 if (this.currentPriceElement) { 3301 this.currentPriceElement.textContent = formatMoney(variant.price, moneyFormat); 3302 } 3303 if (this.comparePriceElement && this.priceWrapper) { 3304 if (variant.compare_at_price && variant.compare_at_price > variant.price) { 3305 this.comparePriceElement.textContent = formatMoney(variant.compare_at_price, moneyFormat); 3306 this.comparePriceElement.style.display = ''; 3307 this.priceWrapper.classList.add('sale'); 3308 } else { 3309 this.comparePriceElement.textContent = ''; 3310 this.comparePriceElement.style.display = 'none'; 3311 this.priceWrapper.classList.remove('sale'); 3312 } 3313 } 3314 3315 // 3. Sale tag 3316 if (this.saleTag) { 3317 const isDiscounted = variant.compare_at_price && variant.compare_at_price > variant.price; 3318 if (isDiscounted && variant.available) { 3319 this.saleTag.style.display = 'block'; 3320 const discount = Math.round((variant.compare_at_price - variant.price) * 100.0 / variant.compare_at_price); 3321 const span = this.saleTag.querySelector('span'); 3322 if (span) span.textContent = discount + '%'; 3323 this.saleTag.setAttribute('aria-label', 'Save ' + discount + '%'); 3324 this.saleTag.setAttribute('role', 'status'); 3325 } else { 3326 this.saleTag.style.display = 'none'; 3327 } 3328 } 3329 3330 // 4. Add to cart 3331 if (this.addToCartButton && this.addToCartText) { 3332 if (variant.available) { 3333 this.addToCartButton.disabled = false;
3334 this.addToCartText.innerHTML = 'Add to Cart <i class="cart-icon"></i>'; 3335 this.addToCartButton.setAttribute('aria-label', 'Add to Cart - Add ' + this.productTitle + ' to cart'); 3336 if (this.notifyMeButton) this.notifyMeButton.style.display = 'none'; 3337 } else { 3338 this.addToCartButton.disabled = true; 3339 this.addToCartText.textContent = 'Sold Out'; 3340 this.addToCartButton.setAttribute('aria-label', 'Sold Out - ' + this.productTitle + ' is sold out'); 3341 if (this.notifyMeButton) this.notifyMeButton.style.display = 'block'; 3342 } 3343 } 3344 if (this.notifyMeButton) { 3345 this.notifyMeButton.setAttribute('data-variant-id', variant.id); 3346 } 3347 3348 this.container.setAttribute('aria-busy', 'false'); 3349 } 3350 } 3351 3352 function initProductCards(root) { 3353 root = root || document; 3354 root.querySelectorAll('.product-card-wrapper[data-product-id]').forEach(cardContainer => { 3355 if (cardContainer.dataset.variantSelectorInit === 'true') return; 3356 cardContainer.dataset.variantSelectorInit = 'true'; 3357 new ProductCardVariantSelector(cardContainer); 3358 }); 3359 } 3360 3361 if (document.readyState === 'loading') { 3362 document.addEventListener('DOMContentLoaded', () => initProductCards()); 3363 } else { 3364 initProductCards(); 3365 } 3366 3367 document.addEventListener('shopify:section:load', (e) => initProductCards(e.target)); 3368})(); 3369</script>
3369<div class="product-card-wrapper" data-product-id="8025540657474" aria-busy="false"> 3370 3371 <div class="product-image" id="ProductImageWrapper-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025540657474"><!-- WISHLIST BUTTON --> 3372 <div class='xb-wishlist__btn-custom'> 3373 <div 3374 class='xb-wishlist__add' 3375 xb-product-id='8025540657474' 3376 xb-product-title='Immune Strength Essential Oil Blend' 3377 xb-product-variant='44111359082818' 3378 xb-is-in-stock='true' 3379 xb-product-handle='immune-strength-essential-oil-blends' 3380 > 3381 <button aria-label="Add Immune Strength Essential Oil Blend to wishlist" aria-pressed="false"> 3382 <svg 3383 xmlns='http://www.w3.org/2000/svg' 3384 width='20' 3385 height='20' 3386 viewBox='0 0 24 24' 3387 fill='none' 3388 stroke='#FF4A71' 3389 stroke-width='2' 3390 stroke-linecap='round' 3391 stroke-linejoin='round' 3392 aria-hidden='true' 3393 focusable='false' 3394 > 3395 <path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"></path> 3396 </svg> 3397 </button> 3398 </div> 3399 3400 <div class="xb-wishlist__loading" xb-product-id="8025540657474"> 3401 <span class="loading-spinner"></span> 3402 </div> 3403 3404 <div class='xb-wishlist__remove' xb-product-id='8025540657474' xb-is-in-stock='true'> 3405 <button aria-label="Remove Immune Strength Essential Oil Blend from wishlist" aria-pressed="true"> 3406 <svg 3407 xmlns='http://www.w3.org/2000/svg' 3408 width='20' 3409 height='20'
3410 viewBox='0 0 24 24' 3411 fill='#FF4A71' 3412 stroke='#FF4A71' 3413 stroke-width='2' 3414 stroke-linecap='round' 3415 stroke-linejoin='round' 3416 aria-hidden='true' 3417 focusable='false' 3418 > 3419 <path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"></path> 3420 </svg> 3421 </button> 3422 </div> 3423 </div><img 3424 id="ProductImage-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025540657474" 3425 class="main-product-image" 3426 src="//www.rockymountainoils.com/cdn/shop/files/immune-strength-essential-oil-blend-15ml-1.jpg?crop=center&height=300&v=1770737264&width=300" 3427 alt="Immune Strength Essential Oil Blend - 15ml - Rocky Mountain Oils" 3428 width="300" 3429 height="300" 3430 loading="lazy" 3431 /></div> 3432 3433 <div class="product-content"> 3434 <div class="product-title"> 3435 <a href="/products/immune-strength-essential-oil-blends" class="product-title-link" aria-label="View Immune Strength Essential Oil Blend"> 3436 <h2>Immune Strength Essential Oil Blend</h2> 3437 </a> 3438 </div><div> 3439 <div class="product-subtitle"> 3440 Herbal-citrus aroma; natural immunity boost; antimicrobial. 3441 </div> 3442 </div><div class="yotpo-widget-instance" data-yotpo-instance-id="503375" data-yotpo-product-id="8025540657474" data-yotpo-cart-product-id="" data-yotpo-section-id="index"></div><!-- START Variant Selection Form --> 3443 <div class="product-data-store" style="display:none;" 3444 data-main-image-url="//www.rockymountainoils.com/cdn/shop/files/immune-strength-essential-oil-blend-4oz-2.webp?v=1770737264&width=300" 3445 data-product-title="Immune Strength Essential Oil Blend" 3446 id="DataStore-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025540657474"> 3447 </div> 3448 3449
3449<script id="VariantsJson-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025540657474" type="application/json"> 3450 [{"id":44111359082818,"title":"15ml","option1":"15ml","option2":null,"option3":null,"sku":"IMMNEA-B15","requires_shipping":true,"taxable":true,"featured_image":{"id":44075374641474,"product_id":8025540657474,"position":2,"created_at":"2024-02-09T08:30:28-07:00","updated_at":"2026-02-10T08:27:44-07:00","alt":"Immune Strength Essential Oil Blend - 15ml - Rocky Mountain Oils","width":528,"height":528,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/immune-strength-essential-oil-blend-15ml-1.jpg?v=1770737264","variant_ids":[44111359082818]},"available":true,"name":"Immune Strength Essential Oil Blend - 15ml","public_title":"15ml","options":["15ml"],"price":2762,"weight":45,"compare_at_price":null,"inventory_management":"shopify","barcode":"053176178011","featured_media":{"alt":"Immune Strength Essential Oil Blend - 15ml - Rocky Mountain Oils","id":36550385434946,"position":2,"preview_image":{"aspect_ratio":1.0,"height":528,"width":528,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/immune-strength-essential-oil-blend-15ml-1.jpg?v=1770737264"}},"requires_selling_plan":false,"selling_plan_allocations":[{"price_adjustments":[{"position":1,"price":1933}],"price":1933,"compare_at_price":2762,"per_delivery_price":1933,"selling_plan_id":691785924975,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":2348},{"position":2,"price":2210}],"price":2348,"compare_at_price":2762,"per_delivery_price":2348,"selling_plan_id":691785957743,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":2486},{"position":2,"price":2348}],"price":2486,"compare_at_price":2762,"per_delivery_price":2486,"selling_plan_id":691785990511,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":2624},{"position":2,"price":2486}],"price":2624,"compare_at_price":2762,"per_delivery_price":2624,"selling_plan_id":691786023279,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":2486},{"position":2,"price":2348}],"price":2486,"compare_at_price":2762,"per_delivery_price":2486,"selling_plan_id":691786088815,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":2624},{"position":2,"price":2486}],"price":2624,"compare_at_price":2762,"per_delivery_price":2624,"selling_plan_id":691786121583,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":2348},{"position":2,"price":2210}],"price":2348,"compare_at_price":2762,"per_delivery_price":2348,"selling_plan_id":691795362159,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":2486},{"position":2,"price":2348}],"price":2486,"compare_at_price":2762,"per_delivery_price":2486,"selling_plan_id":691795394927,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":2624},{"position":2,"price":2486}],"price":2624,"compare_at_price":2762,"per_delivery_price":2624,"selling_plan_id":691795427695,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"}],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":44276022083906,"title":"5ml","option1":"5ml","option2":null,"option3":null,"sku":"IMMNEA-B5","requires_shipping":true,"taxable":true,"featured_image":{"id":60161056801135,"product_id":8025540657474,"position":3,"created_at":"2025-05-13T06:46:08-06:00","updated_at":"2026-02-01T00:03:51-07:00","alt":"Immune Strength Essential Oil Blend Neat, Rocky Mountain Oils","width":919,"height":919,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/Immune_Strength_5ml.webp?v=1769929431","variant_ids":[44276022083906]},"available":false,"name":"Immune Strength Essential Oil Blend - 5ml","public_title":"5ml","options":["5ml"],"price":2045,"weight":28,"compare_at_price":null,"inventory_management":"shopify","barcode":"053176178028","featured_media":{"alt":"Immune Strength Essential Oil Blend Neat, Rocky Mountain Oils","id":51869838770543,"position":3,"preview_image":{"aspect_ratio":1.0,"height":919,"width":919,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/Immune_Strength_5ml.webp?v=1769929431"}},"requires_selling_plan":false,"selling_plan_allocations":[{"price_adjustments":[{"position":1,"price":1432}],"price":1432,"compare_at_price":2045,"per_delivery_price":1432,"selling_plan_id":691785924975,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":1738},{"position":2,"price":1636}],"price":1738,"compare_at_price":2045,"per_delivery_price":1738,"selling_plan_id":691785957743,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":1841},{"position":2,"price":1738}],"price":1841,"compare_at_price":2045,"per_delivery_price":1841,"selling_plan_id":691785990511,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":1943},{"position":2,"price":1841}],"price":1943,"compare_at_price":2045,"per_delivery_price":1943,"selling_plan_id":691786023279,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":1841},{"position":2,"price":1738}],"price":1841,"compare_at_price":2045,"per_delivery_price":1841,"selling_plan_id":691786088815,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":1943},{"position":2,"price":1841}],"price":1943,"compare_at_price":2045,"per_delivery_price":1943,"selling_plan_id":691786121583,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":1738},{"position":2,"price":1636}],"price":1738,"compare_at_price":2045,"per_delivery_price":1738,"selling_plan_id":691795362159,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":1841},{"position":2,"price":1738}],"price":1841,"compare_at_price":2045,"per_delivery_price":1841,"selling_plan_id":691795394927,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":1943},{"position":2,"price":1841}],"price":1943,"compare_at_price":2045,"per_delivery_price":1943,"selling_plan_id":691795427695,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"}],"quantity_rule":{"min":1,"max":null,"increment":1}}
3450,{"id":47559382892866,"title":"4oz","option1":"4oz","option2":null,"option3":null,"sku":"IMMNEA-4OZ","requires_shipping":true,"taxable":true,"featured_image":{"id":46227694289218,"product_id":8025540657474,"position":1,"created_at":"2024-07-12T14:16:32-06:00","updated_at":"2026-02-10T08:27:44-07:00","alt":"Immune Strength Essential Oil Blend - 4oz - Rocky Mountain Oils","width":839,"height":839,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/immune-strength-essential-oil-blend-4oz-2.webp?v=1770737264","variant_ids":[47559382892866]},"available":true,"name":"Immune Strength Essential Oil Blend - 4oz","public_title":"4oz","options":["4oz"],"price":9995,"weight":113,"compare_at_price":null,"inventory_management":"shopify","barcode":"053176183701","featured_media":{"alt":"Immune Strength Essential Oil Blend - 4oz - Rocky Mountain Oils","id":38713479921986,"position":1,"preview_image":{"aspect_ratio":1.0,"height":839,"width":839,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/immune-strength-essential-oil-blend-4oz-2.webp?v=1770737264"}},"requires_selling_plan":false,"selling_plan_allocations":[{"price_adjustments":[{"position":1,"price":6997}],"price":6997,"compare_at_price":9995,"per_delivery_price":6997,"selling_plan_id":691785924975,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":8496},{"position":2,"price":7996}],"price":8496,"compare_at_price":9995,"per_delivery_price":8496,"selling_plan_id":691785957743,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":8996},{"position":2,"price":8496}],"price":8996,"compare_at_price":9995,"per_delivery_price":8996,"selling_plan_id":691785990511,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":9495},{"position":2,"price":8996}],"price":9495,"compare_at_price":9995,"per_delivery_price":9495,"selling_plan_id":691786023279,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":8996},{"position":2,"price":8496}],"price":8996,"compare_at_price":9995,"per_delivery_price":8996,"selling_plan_id":691786088815,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":9495},{"position":2,"price":8996}],"price":9495,"compare_at_price":9995,"per_delivery_price":9495,"selling_plan_id":691786121583,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":8496},{"position":2,"price":7996}],"price":8496,"compare_at_price":9995,"per_delivery_price":8496,"selling_plan_id":691795362159,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":8996},{"position":2,"price":8496}],"price":8996,"compare_at_price":9995,"per_delivery_price":8996,"selling_plan_id":691795394927,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":9495},{"position":2,"price":8996}],"price":9495,"compare_at_price":9995,"per_delivery_price":9495,"selling_plan_id":691795427695,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"}],"quantity_rule":{"min":1,"max":null,"increment":1}}] 3451 </script>
3451<form method="post" action="/cart/add" id="product-form-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025540657474" accept-charset="UTF-8" class="product-variants product-form" enctype="multipart/form-data" data-productid="8025540657474" novalidate="novalidate" data-type="add-to-cart-form"><input type="hidden" name="form_type" value="product" /><input type="hidden" name="utf8" value="â" /><div class="product-price-option"> 3452 <div class="product-price" id="ProductPrice-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025540657474" aria-live="polite" aria-atomic="true"> 3453 <span class="compare-at-price" id="ComparePrice-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025540657474" style="display: none;"></span> 3454 <span class="current-price" id="CurrentPrice-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025540657474">$27.62</span> 3455 3456 3457 </div> 3458 3459 3460 <div class="product-option"> 3461 <label for="Option-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025540657474-0" class="visually-hidden"> 3462 Select Size for Immune Strength Essential Oil Blend 3463 </label> 3464 <select 3465 id="Option-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025540657474-0" 3466 class="variant-select" 3467 name="options[Size]" 3468 form="product-form-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025540657474" 3469 data-index="option0" 3470 ><option 3471 value="15ml" 3472 selected="selected" 3473 > 3474 15ml 3475 </option><option 3476 value="5ml" 3477 3478 > 3479 5ml 3480 </option><option 3481 value="4oz" 3482 3483 > 3484 4oz 3485 </option></select> 3486 </div> 3487 3488 </div><label for="ProductSelect-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025540657474" class="visually-hidden"> 3489 Choose variant for Immune Strength Essential Oil Blend 3490 </label> 3491 <select 3492 name="id" 3493 data-productid="8025540657474" 3494 id="ProductSelect-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025540657474" 3495 class="product-variants-select no-js-only" 3496 ><option 3497 value="44111359082818" 3498 selected="selected" 3499 3500 > 3501 15ml - $27.62 3502 </option><option 3503 value="44276022083906" 3504 3505 disabled="disabled" 3506 > 3507 5ml - $20.45 - Sold Out 3508 </option><option 3509 value="47559382892866" 3510 3511 3512 > 3513 4oz - $99.95 3514 </option></select> 3515 3516 <div class="product-addtocart" id="AddToCartWrapper-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025540657474"> 3517 <input type="hidden" name="quantity" value="1"> 3518 3519 3520 <div class="visually-hidden" role="status" id="variant-status-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025540657474" aria-live="assertive"></div> 3521
3522 <span id="cart-action-desc-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025540657474" class="visually-hidden">Adds item to your shopping cart</span> 3523 3524 <button 3525 class="addtocart-btn add-to-cart" 3526 type="submit" 3527 name="add" 3528 aria-label="Add to Cart - Add Immune Strength Essential Oil Blend to cart" 3529 aria-describedby="cart-action-desc-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025540657474" 3530 id="AddToCart-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025540657474" 3531 3532 > 3533 <span id="AddToCartText-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025540657474">Add to Cart <i class="cart-icon" aria-hidden="true"></i></span> 3534 </button> 3535 </div><input type="hidden" name="product-id" value="8025540657474" /><input type="hidden" name="section-id" value="template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1" /></form><!-- END Variant Selection Form --></div>
3535<script type="application/ld+json"> 3536 { 3537 "@context": "http://schema.org/", 3538 "@type": "Product", 3539 "name": "Immune Strength Essential Oil Blend", 3540 "url": "https:\/\/www.rockymountainoils.com\/products\/immune-strength-essential-oil-blends","image": [ 3541 "https:\/\/www.rockymountainoils.com\/cdn\/shop\/files\/immune-strength-essential-oil-blend-15ml-1.jpg?v=1770737264\u0026width=528" 3542 ], 3543 "description": "Boost your immune system naturally with our powerful Immune Strength Essential Oil Blend. This carefully crafted combination of 11 essential oils, including Clove Bud, Cinnamon Bark, Lemon, and Oregano, supports immune health and promotes overall well-being.\nUse Immune Strength to cleanse surfaces, purify air, and create a sense of calm. Its antimicrobial and antifungal properties make it ideal for homemade cleaning products or diluted topical use. Diffuse during cold and flu season to help ward off germs naturally.","sku": "IMMNEA-B15", 3544 "brand": { 3545 "@type": "Brand", 3546 "name": "Rocky Mountain Oils" 3547 }, 3548 "offers": { 3549 "@type": "AggregateOffer", 3550 "availability": "http://schema.org/InStock", 3551 "priceCurrency": "USD", 3552 "highPrice": 99.95, 3553 "lowPrice": 20.45, 3554 "offerCount": 3, 3555 "offers": [{ 3556 "@type" : "Offer","sku": "IMMNEA-B15","gtin12": "053176178011","availability" : "http://schema.org/InStock", 3557 "price" : 27.62, 3558 "priceCurrency" : "USD", 3559 "priceValidUntil": "2026-12-31", 3560 "url" : "https:\/\/www.rockymountainoils.com\/products\/immune-strength-essential-oil-blends?variant=44111359082818" 3561 }, 3562{ 3563 "@type" : "Offer","sku": "IMMNEA-B5","gtin12": "053176178028","availability" : "http://schema.org/OutOfStock", 3564 "price" : 20.45, 3565 "priceCurrency" : "USD", 3566 "priceValidUntil": "2026-12-31", 3567 "url" : "https:\/\/www.rockymountainoils.com\/products\/immune-strength-essential-oil-blends?variant=44276022083906" 3568 }, 3569{ 3570 "@type" : "Offer","sku": "IMMNEA-4OZ","gtin12": "053176183701","availability" : "http://schema.org/InStock", 3571 "price" : 99.95, 3572 "priceCurrency" : "USD", 3573 "priceValidUntil": "2026-12-31", 3574 "url" : "https:\/\/www.rockymountainoils.com\/products\/immune-strength-essential-oil-blends?variant=47559382892866" 3575 } 3576] 3577 } 3578 } 3579 </script>
3579</div> 3580 3581<style> 3582/* Ensure visually-hidden utility exists even if theme lacks it */ 3583.visually-hidden { 3584 position: absolute !important; 3585 width: 1px !important; 3586 height: 1px !important; 3587 padding: 0 !important; 3588 margin: -1px !important; 3589 overflow: hidden !important; 3590 clip: rect(0, 0, 0, 0) !important; 3591 white-space: nowrap !important; 3592 border: 0 !important; 3593} 3594 3595/* Ensure the main product image is tappable on iOS */ 3596.main-product-image { 3597 cursor: pointer; 3598 -webkit-tap-highlight-color: rgba(0,0,0,0.05); 3599 touch-action: manipulation; 3600} 3601 3602/* ULTIMATE FIX - Override anything that hides select text */ 3603.product-variants-select, 3604.product-variants-select.no-js-only, 3605select.product-variants-select, 3606select[id*="ProductSelect-"] { 3607 color: #1a1a1a !important; 3608 opacity: 1 !important; 3609 background-color: #ffffff !important; 3610 -webkit-text-fill-color: #1a1a1a !important; 3611} 3612 3613.product-variants-select option, 3614select[id*="ProductSelect-"] option { 3615 color: #1a1a1a !important; 3616 background-color: #ffffff !important; 3617 -webkit-text-fill-color: #1a1a1a !important; 3618} 3619 3620.product-variants-select option:checked, 3621select[id*="ProductSelect-"] option:checked { 3622 color: #1a1a1a !important; 3623 background-color: #e8f0fe !important; 3624} 3625 3626.product-variants-select option:disabled, 3627select[id*="ProductSelect-"] option:disabled { 3628 color: #6c6c6c !important; 3629 background-color: #f5f5f5 !important; 3630 -webkit-text-fill-color: #6c6c6c !important; 3631 opacity: 1 !important; 3632} 3633 3634.product-variants-select:focus, 3635select[id*="ProductSelect-"]:focus { 3636 color: #1a1a1a !important; 3637 outline: 3px solid #000000ff !important; 3638} 3639</style> 3640 </div><div class="item"> 3641
3641<script> 3642(function() { 3643 class ProductCardVariantSelector { 3644 constructor(container) { 3645 this.container = container; 3646 if (!this.container) return; 3647 3648 this.form = this.container.querySelector('.product-form'); 3649 this.variantSelectors = this.container.querySelectorAll('.variant-select'); 3650 this.masterSelect = this.container.querySelector('.product-variants-select'); 3651 this.productImage = this.container.querySelector('.main-product-image'); 3652 this.priceWrapper = this.container.querySelector('[id^="ProductPrice-"]'); 3653 this.currentPriceElement = this.container.querySelector('[id^="CurrentPrice-"]'); 3654 this.comparePriceElement = this.container.querySelector('[id^="ComparePrice-"]'); 3655 this.addToCartButton = this.container.querySelector('[id^="AddToCart-"]'); 3656 this.addToCartText = this.container.querySelector('[id^="AddToCartText-"]'); 3657 this.notifyMeButton = this.container.querySelector('[id^="NotifyMe-"]'); 3658 this.variantsJsonScript = this.container.querySelector('[id^="VariantsJson-"]'); 3659 this.dataStore = this.container.querySelector('[id^="DataStore-"]'); 3660 this.saleTag = this.container.querySelector('.hc-sale-tag'); 3661 this.statusElement = this.container.querySelector('[id^="variant-status-"]'); 3662 3663 if (!this.masterSelect || !this.variantsJsonScript) return; 3664 3665 try { 3666 this.productVariants = JSON.parse(this.variantsJsonScript.textContent); 3667 } catch (e) { return; } 3668 3669 this.mainImageUrl = this.dataStore ? this.dataStore.dataset.mainImageUrl : null; 3670 this.productTitle = this.dataStore ? this.dataStore.dataset.productTitle : ''; 3671 3672 this.init(); 3673 } 3674 3675 init() { 3676 // --- iOS-safe image tap handling (works on iPhone 16, 17 Pro Max, etc.) --- 3677 if (this.productImage) { 3678 let touchStartX = 0, touchStartY = 0, touchMoved = false; 3679 let lastTouchTime = 0; 3680 3681 this.productImage.style.cursor = 'pointer'; 3682 this.productImage.setAttribute('role', 'button'); 3683 this.productImage.setAttribute('tabindex', '0'); 3684 3685 this.productImage.addEventListener('touchstart', (e) => { 3686 const t = e.touches[0]; 3687 touchStartX = t.clientX; 3688 touchStartY = t.clientY; 3689 touchMoved = false; 3690 }, { passive: true }); 3691 3692 this.productImage.addEventListener('touchmove', (e) => { 3693 const t = e.touches[0]; 3694 if (Math.abs(t.clientX - touchStartX) > 10 || 3695 Math.abs(t.clientY - touchStartY) > 10) { 3696 touchMoved = true; 3697 } 3698 }, { passive: true }); 3699 3700 this.productImage.addEventListener('touchend', (e) => { 3701 if (touchMoved) return; 3702 lastTouchTime = Date.now(); 3703 e.preventDefault(); 3704 this.onImageTap(e); 3705 }, { passive: false }); 3706 3707 // Desktop / non-touch fallback (with double-fire protection after touchend) 3708 this.productImage.addEventListener('click', (e) => { 3709 if (Date.now() - lastTouchTime < 500) return; 3710 this.onImageTap(e); 3711 }); 3712 3713 this.productImage.addEventListener('keydown', (e) => { 3714 if (e.key === 'Enter' || e.key === ' ') { 3715 e.preventDefault(); 3716 this.onImageTap(e); 3717 } 3718 }); 3719 } 3720 3721 // --- Variant select listeners --- 3722 if (this.variantSelectors.length > 0) { 3723 this.variantSelectors.forEach(select => { 3724 select.addEventListener('change', this.onVariantChange.bind(this)); 3725 }); 3726 this.updateProductDetails(this.getCurrentVariant()); 3727 } 3728 } 3729 3730 // ============================================================ 3731 // CHANGE THIS IF YOU WANT DIFFERENT TAP BEHAVIOR 3732 // Currently: navigates to the product page. 3733 // ============================================================ 3734 onImageTap(e) { 3735 const link = this.container.querySelector('.product-title-link'); 3736 if (link && link.href && link.href !== '#') { 3737 window.location.href = link.href; 3738 } 3739 } 3740 // ============================================================ 3741 3742 onVariantChange() { 3743 const selectedOptions = Array.from(this.variantSelectors).map(s => s.value); 3744 const matchedVariant = this.findMatchingVariant(selectedOptions); 3745 3746 if (matchedVariant) { 3747 this.masterSelect.value = matchedVariant.id; 3748 this.updateProductDetails(matchedVariant); 3749 if (this.statusElement) this.statusElement.textContent = ''; 3750 } else { 3751 if (this.statusElement) { 3752 this.statusElement.textContent = 'No available variant matches your selection'; 3753 } 3754 this.updateProductDetails(null); 3755 } 3756 } 3757 3758 findMatchingVariant(selectedOptions) { 3759 return this.productVariants.find(variant => { 3760 if (!variant.options || variant.options.length !== selectedOptions.length) return false;
3761 return selectedOptions.every((val, i) => variant.options[i] === val); 3762 }); 3763 } 3764 3765 getCurrentVariant() { 3766 if (!this.masterSelect) return null; 3767 const id = this.masterSelect.value; 3768 if (!id) return null; 3769 return this.productVariants.find(v => String(v.id) === String(id)) || null; 3770 } 3771 3772 // Shopify CDN: insert _WIDTHx before extension for a properly sized image 3773 sizedImageUrl(src, width) { 3774 if (!src) return src; 3775 return src.replace(/(\.[a-z]{3,4})(\?|$)/i, `_${width}x$1$2`); 3776 } 3777 3778 updateProductDetails(variant) { 3779 this.container.setAttribute('aria-busy', 'true'); 3780 3781 if (!variant) { 3782 if (this.addToCartButton) this.addToCartButton.disabled = true; 3783 if (this.addToCartText) this.addToCartText.textContent = 'Unavailable'; 3784 if (this.notifyMeButton) this.notifyMeButton.style.display = 'none'; 3785 if (this.priceWrapper) this.priceWrapper.classList.remove('sale'); 3786 if (this.comparePriceElement) this.comparePriceElement.style.display = 'none'; 3787 if (this.saleTag) this.saleTag.style.display = 'none'; 3788 this.container.setAttribute('aria-busy', 'false'); 3789 return; 3790 } 3791 3792 // 1. Image 3793 if (this.productImage) { 3794 if (variant.featured_image && variant.featured_image.src) { 3795 const sized = this.sizedImageUrl(variant.featured_image.src, 300); 3796 const variantOptions = variant.options ? variant.options.join(' - ') : ''; 3797 this.productImage.src = sized; 3798 this.productImage.srcset = ''; 3799 this.productImage.alt = variant.featured_image.alt 3800 ? variant.featured_image.alt 3801 : (this.productTitle + (variantOptions ? ' - ' + variantOptions : '')); 3802 } else if (this.mainImageUrl) { 3803 this.productImage.src = this.mainImageUrl; 3804 this.productImage.srcset = ''; 3805 this.productImage.alt = this.productTitle; 3806 } 3807 } 3808 3809 // 2. Price 3810 const moneyFormat = "${{amount}}"; 3811 const formatMoney = (cents, format) => { 3812 if (typeof cents === 'string') cents = cents.replace('.', ''); 3813 let value = ''; 3814 const placeholderRegex = /\{\{\s*(\w+)\s*\}\}/; 3815 const formatString = (format || moneyFormat).replace(/<[^>]*>/g, ''); 3816 3817 function formatWithDelimiters(number, precision, thousands, decimal) { 3818 precision = precision ?? 2; 3819 thousands = thousands ?? ','; 3820 decimal = decimal ?? '.'; 3821 if (isNaN(number) || number == null) return 0; 3822 number = (number / 100.0).toFixed(precision); 3823 const parts = number.split('.'); 3824 const dollars = parts[0].replace(/(\d)(?=(\d\d\d)+(?!\d))/g, '$1' + thousands); 3825 const centsPart = parts[1] ? (decimal + parts[1]) : ''; 3826 return dollars + centsPart; 3827 } 3828 3829 switch (formatString.match(placeholderRegex)?.[1]) { 3830 case 'amount': value = formatWithDelimiters(cents, 2); break; 3831 case 'amount_no_decimals': value = formatWithDelimiters(cents, 0); break; 3832 case 'amount_with_comma_separator': value = formatWithDelimiters(cents, 2, '.', ','); break; 3833 case 'amount_no_decimals_with_comma_separator': value = formatWithDelimiters(cents, 0, '.', ','); break; 3834 case 'amount_with_apostrophe_separator': value = formatWithDelimiters(cents, 2, "'", "."); break; 3835 case 'amount_no_decimals_with_space_separator': value = formatWithDelimiters(cents, 0, " ", ","); break; 3836 case 'amount_with_space_separator': value = formatWithDelimiters(cents, 2, " ", ","); break; 3837 default: value = formatWithDelimiters(cents, 2); 3838 } 3839 try { 3840 return formatString.replace(placeholderRegex, value); 3841 } catch (e) { 3842 const fallback = (cents / 100.0).toFixed(2); 3843 return formatString.includes('') 3844 ? formatString.replace(placeholderRegex, fallback) 3845 : fallback; 3846 } 3847 }; 3848 3849 if (this.currentPriceElement) { 3850 this.currentPriceElement.textContent = formatMoney(variant.price, moneyFormat); 3851 } 3852 if (this.comparePriceElement && this.priceWrapper) { 3853 if (variant.compare_at_price && variant.compare_at_price > variant.price) { 3854 this.comparePriceElement.textContent = formatMoney(variant.compare_at_price, moneyFormat); 3855 this.comparePriceElement.style.display = ''; 3856 this.priceWrapper.classList.add('sale'); 3857 } else { 3858 this.comparePriceElement.textContent = ''; 3859 this.comparePriceElement.style.display = 'none'; 3860 this.priceWrapper.classList.remove('sale'); 3861 } 3862 } 3863 3864 // 3. Sale tag 3865 if (this.saleTag) { 3866 const isDiscounted = variant.compare_at_price && variant.compare_at_price > variant.price; 3867 if (isDiscounted && variant.available) { 3868 this.saleTag.style.display = 'block'; 3869 const discount = Math.round((variant.compare_at_price - variant.price) * 100.0 / variant.compare_at_price); 3870 const span = this.saleTag.querySelector('span'); 3871 if (span) span.textContent = discount + '%'; 3872 this.saleTag.setAttribute('aria-label', 'Save ' + discount + '%'); 3873 this.saleTag.setAttribute('role', 'status'); 3874 } else { 3875 this.saleTag.style.display = 'none'; 3876 } 3877 } 3878 3879 // 4. Add to cart 3880 if (this.addToCartButton && this.addToCartText) { 3881 if (variant.available) { 3882 this.addToCartButton.disabled = false;
3883 this.addToCartText.innerHTML = 'Add to Cart <i class="cart-icon"></i>'; 3884 this.addToCartButton.setAttribute('aria-label', 'Add to Cart - Add ' + this.productTitle + ' to cart'); 3885 if (this.notifyMeButton) this.notifyMeButton.style.display = 'none'; 3886 } else { 3887 this.addToCartButton.disabled = true; 3888 this.addToCartText.textContent = 'Sold Out'; 3889 this.addToCartButton.setAttribute('aria-label', 'Sold Out - ' + this.productTitle + ' is sold out'); 3890 if (this.notifyMeButton) this.notifyMeButton.style.display = 'block'; 3891 } 3892 } 3893 if (this.notifyMeButton) { 3894 this.notifyMeButton.setAttribute('data-variant-id', variant.id); 3895 } 3896 3897 this.container.setAttribute('aria-busy', 'false'); 3898 } 3899 } 3900 3901 function initProductCards(root) { 3902 root = root || document; 3903 root.querySelectorAll('.product-card-wrapper[data-product-id]').forEach(cardContainer => { 3904 if (cardContainer.dataset.variantSelectorInit === 'true') return; 3905 cardContainer.dataset.variantSelectorInit = 'true'; 3906 new ProductCardVariantSelector(cardContainer); 3907 }); 3908 } 3909 3910 if (document.readyState === 'loading') { 3911 document.addEventListener('DOMContentLoaded', () => initProductCards()); 3912 } else { 3913 initProductCards(); 3914 } 3915 3916 document.addEventListener('shopify:section:load', (e) => initProductCards(e.target)); 3917})(); 3918</script>
3918<div class="product-card-wrapper" data-product-id="8025540854082" aria-busy="false"> 3919 3920 <div class="product-image" id="ProductImageWrapper-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025540854082"><!-- WISHLIST BUTTON --> 3921 <div class='xb-wishlist__btn-custom'> 3922 <div 3923 class='xb-wishlist__add' 3924 xb-product-id='8025540854082' 3925 xb-product-title='Lavender Essential Oil' 3926 xb-product-variant='44111360459074' 3927 xb-is-in-stock='true' 3928 xb-product-handle='lavender-essential-oil' 3929 > 3930 <button aria-label="Add Lavender Essential Oil to wishlist" aria-pressed="false"> 3931 <svg 3932 xmlns='http://www.w3.org/2000/svg' 3933 width='20' 3934 height='20' 3935 viewBox='0 0 24 24' 3936 fill='none' 3937 stroke='#FF4A71' 3938 stroke-width='2' 3939 stroke-linecap='round' 3940 stroke-linejoin='round' 3941 aria-hidden='true' 3942 focusable='false' 3943 > 3944 <path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"></path> 3945 </svg> 3946 </button> 3947 </div> 3948 3949 <div class="xb-wishlist__loading" xb-product-id="8025540854082"> 3950 <span class="loading-spinner"></span> 3951 </div> 3952 3953 <div class='xb-wishlist__remove' xb-product-id='8025540854082' xb-is-in-stock='true'> 3954 <button aria-label="Remove Lavender Essential Oil from wishlist" aria-pressed="true"> 3955 <svg 3956 xmlns='http://www.w3.org/2000/svg' 3957 width='20' 3958 height='20'
3959 viewBox='0 0 24 24' 3960 fill='#FF4A71' 3961 stroke='#FF4A71' 3962 stroke-width='2' 3963 stroke-linecap='round' 3964 stroke-linejoin='round' 3965 aria-hidden='true' 3966 focusable='false' 3967 > 3968 <path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"></path> 3969 </svg> 3970 </button> 3971 </div> 3972 </div><img 3973 id="ProductImage-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025540854082" 3974 class="main-product-image" 3975 src="//www.rockymountainoils.com/cdn/shop/files/lavender-essential-oil-15ml-1.jpg?crop=center&height=300&v=1765782112&width=300" 3976 alt="Lavender Essential Oil - 15ml - Rocky Mountain Oils" 3977 width="300" 3978 height="300" 3979 loading="lazy" 3980 /></div> 3981 3982 <div class="product-content"> 3983 <div class="product-title"> 3984 <a href="/products/lavender-essential-oil" class="product-title-link" aria-label="View Lavender Essential Oil"> 3985 <h2>Lavender Essential Oil</h2> 3986 </a> 3987 </div><div> 3988 <div class="product-subtitle"> 3989 Gentle floral aroma; calming, enhances sleep & great for the skin. 3990 </div> 3991 </div><div class="yotpo-widget-instance" data-yotpo-instance-id="503375" data-yotpo-product-id="8025540854082" data-yotpo-cart-product-id="" data-yotpo-section-id="index"></div><!-- START Variant Selection Form --> 3992 <div class="product-data-store" style="display:none;" 3993 data-main-image-url="//www.rockymountainoils.com/cdn/shop/files/lavender-essential-oil-15ml-1.jpg?v=1765782112&width=300" 3994 data-product-title="Lavender Essential Oil" 3995 id="DataStore-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025540854082"> 3996 </div> 3997 3998
3998<script id="VariantsJson-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025540854082" type="application/json"> 3999 [{"id":44111360459074,"title":"15ml","option1":"15ml","option2":null,"option3":null,"sku":"LAVGRE-S15","requires_shipping":true,"taxable":true,"featured_image":{"id":43452351381826,"product_id":8025540854082,"position":1,"created_at":"2023-11-28T08:20:25-07:00","updated_at":"2025-12-15T00:01:52-07:00","alt":"Lavender Essential Oil - 15ml - Rocky Mountain Oils","width":638,"height":638,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/lavender-essential-oil-15ml-1.jpg?v=1765782112","variant_ids":[44111360459074]},"available":true,"name":"Lavender Essential Oil - 15ml","public_title":"15ml","options":["15ml"],"price":2095,"weight":45,"compare_at_price":null,"inventory_management":"shopify","barcode":"053176181462","featured_media":{"alt":"Lavender Essential Oil - 15ml - Rocky Mountain Oils","id":35909114036546,"position":1,"preview_image":{"aspect_ratio":1.0,"height":638,"width":638,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/lavender-essential-oil-15ml-1.jpg?v=1765782112"}},"requires_selling_plan":false,"selling_plan_allocations":[{"price_adjustments":[{"position":1,"price":1467}],"price":1467,"compare_at_price":2095,"per_delivery_price":1467,"selling_plan_id":691785924975,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":1781},{"position":2,"price":1676}],"price":1781,"compare_at_price":2095,"per_delivery_price":1781,"selling_plan_id":691785957743,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":1886},{"position":2,"price":1781}],"price":1886,"compare_at_price":2095,"per_delivery_price":1886,"selling_plan_id":691785990511,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":1990},{"position":2,"price":1886}],"price":1990,"compare_at_price":2095,"per_delivery_price":1990,"selling_plan_id":691786023279,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":1886},{"position":2,"price":1781}],"price":1886,"compare_at_price":2095,"per_delivery_price":1886,"selling_plan_id":691786088815,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":1990},{"position":2,"price":1886}],"price":1990,"compare_at_price":2095,"per_delivery_price":1990,"selling_plan_id":691786121583,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":1781},{"position":2,"price":1676}],"price":1781,"compare_at_price":2095,"per_delivery_price":1781,"selling_plan_id":691795362159,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":1886},{"position":2,"price":1781}],"price":1886,"compare_at_price":2095,"per_delivery_price":1886,"selling_plan_id":691795394927,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":1990},{"position":2,"price":1886}],"price":1990,"compare_at_price":2095,"per_delivery_price":1990,"selling_plan_id":691795427695,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"}],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":48687729115458,"title":"5ml","option1":"5ml","option2":null,"option3":null,"sku":"LAVGRE-S5","requires_shipping":true,"taxable":true,"featured_image":{"id":60161056735599,"product_id":8025540854082,"position":3,"created_at":"2025-05-13T06:46:08-06:00","updated_at":"2025-12-15T00:01:52-07:00","alt":"Lavender Essential Oil, Rocky Mountain Oils","width":1080,"height":1080,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/Lavender_5ml.webp?v=1765782112","variant_ids":[48687729115458]},"available":true,"name":"Lavender Essential Oil - 5ml","public_title":"5ml","options":["5ml"],"price":1195,"weight":28,"compare_at_price":null,"inventory_management":"shopify","barcode":"053176181776","featured_media":{"alt":"Lavender Essential Oil, Rocky Mountain Oils","id":51869838705007,"position":3,"preview_image":{"aspect_ratio":1.0,"height":1080,"width":1080,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/Lavender_5ml.webp?v=1765782112"}},"requires_selling_plan":false,"selling_plan_allocations":[{"price_adjustments":[{"position":1,"price":837}],"price":837,"compare_at_price":1195,"per_delivery_price":837,"selling_plan_id":691785924975,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":1016},{"position":2,"price":956}],"price":1016,"compare_at_price":1195,"per_delivery_price":1016,"selling_plan_id":691785957743,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":1076},{"position":2,"price":1016}],"price":1076,"compare_at_price":1195,"per_delivery_price":1076,"selling_plan_id":691785990511,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":1135},{"position":2,"price":1076}],"price":1135,"compare_at_price":1195,"per_delivery_price":1135,"selling_plan_id":691786023279,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":1076},{"position":2,"price":1016}],"price":1076,"compare_at_price":1195,"per_delivery_price":1076,"selling_plan_id":691786088815,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":1135},{"position":2,"price":1076}],"price":1135,"compare_at_price":1195,"per_delivery_price":1135,"selling_plan_id":691786121583,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":1016},{"position":2,"price":956}],"price":1016,"compare_at_price":1195,"per_delivery_price":1016,"selling_plan_id":691795362159,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":1076},{"position":2,"price":1016}],"price":1076,"compare_at_price":1195,"per_delivery_price":1076,"selling_plan_id":691795394927,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":1135},{"position":2,"price":1076}],"price":1135,"compare_at_price":1195,"per_delivery_price":1135,"selling_plan_id":691795427695,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"}],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":48687729082690,"title":"4oz","option1":"4oz","option2":null,"option3":null,"sku":"LAVGRE-4OZ","requires_shipping":true,"taxable":true,"featured_image":{"id":44365299745090,"product_id":8025540854082,"position":6,"created_at":"2024-03-06T13:41:17-07:00","updated_at":"2025-12-14T00:38:12-07:00","alt":"Lavender Essential Oil - 4oz - Rocky Mountain Oils","width":723,"height":723,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/lavender-essential-oil-4oz-3.jpg?v=1765697892","variant_ids":[48687729
3999082690]},"available":true,"name":"Lavender Essential Oil - 4oz","public_title":"4oz","options":["4oz"],"price":4995,"weight":113,"compare_at_price":null,"inventory_management":"shopify","barcode":"053176183145","featured_media":{"alt":"Lavender Essential Oil - 4oz - Rocky Mountain Oils","id":36844206522690,"position":6,"preview_image":{"aspect_ratio":1.0,"height":723,"width":723,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/lavender-essential-oil-4oz-3.jpg?v=1765697892"}},"requires_selling_plan":false,"selling_plan_allocations":[{"price_adjustments":[{"position":1,"price":3497}],"price":3497,"compare_at_price":4995,"per_delivery_price":3497,"selling_plan_id":691785924975,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":4246},{"position":2,"price":3996}],"price":4246,"compare_at_price":4995,"per_delivery_price":4246,"selling_plan_id":691785957743,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":4496},{"position":2,"price":4246}],"price":4496,"compare_at_price":4995,"per_delivery_price":4496,"selling_plan_id":691785990511,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":4745},{"position":2,"price":4496}],"price":4745,"compare_at_price":4995,"per_delivery_price":4745,"selling_plan_id":691786023279,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":4496},{"position":2,"price":4246}],"price":4496,"compare_at_price":4995,"per_delivery_price":4496,"selling_plan_id":691786088815,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":4745},{"position":2,"price":4496}],"price":4745,"compare_at_price":4995,"per_delivery_price":4745,"selling_plan_id":691786121583,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":4246},{"position":2,"price":3996}],"price":4246,"compare_at_price":4995,"per_delivery_price":4246,"selling_plan_id":691795362159,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":4496},{"position":2,"price":4246}],"price":4496,"compare_at_price":4995,"per_delivery_price":4496,"selling_plan_id":691795394927,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":4745},{"position":2,"price":4496}],"price":4745,"compare_at_price":4995,"per_delivery_price":4745,"selling_plan_id":691795427695,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"}],"quantity_rule":{"min":1,"max":null,"increment":1}}] 4000 </script>
4000<form method="post" action="/cart/add" id="product-form-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025540854082" accept-charset="UTF-8" class="product-variants product-form" enctype="multipart/form-data" data-productid="8025540854082" novalidate="novalidate" data-type="add-to-cart-form"><input type="hidden" name="form_type" value="product" /><input type="hidden" name="utf8" value="â" /><div class="product-price-option"> 4001 <div class="product-price" id="ProductPrice-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025540854082" aria-live="polite" aria-atomic="true"> 4002 <span class="compare-at-price" id="ComparePrice-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025540854082" style="display: none;"></span> 4003 <span class="current-price" id="CurrentPrice-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025540854082">$20.95</span> 4004 4005 4006 </div> 4007 4008 4009 <div class="product-option"> 4010 <label for="Option-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025540854082-0" class="visually-hidden"> 4011 Select Size for Lavender Essential Oil 4012 </label> 4013 <select 4014 id="Option-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025540854082-0" 4015 class="variant-select" 4016 name="options[Size]" 4017 form="product-form-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025540854082" 4018 data-index="option0" 4019 ><option 4020 value="15ml" 4021 selected="selected" 4022 > 4023 15ml 4024 </option><option 4025 value="5ml" 4026 4027 > 4028 5ml 4029 </option><option 4030 value="4oz" 4031 4032 > 4033 4oz 4034 </option></select> 4035 </div> 4036 4037 </div><label for="ProductSelect-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025540854082" class="visually-hidden"> 4038 Choose variant for Lavender Essential Oil 4039 </label> 4040 <select 4041 name="id" 4042 data-productid="8025540854082" 4043 id="ProductSelect-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025540854082" 4044 class="product-variants-select no-js-only" 4045 ><option 4046 value="44111360459074" 4047 selected="selected" 4048 4049 > 4050 15ml - $20.95 4051 </option><option 4052 value="48687729115458" 4053 4054 4055 > 4056 5ml - $11.95 4057 </option><option 4058 value="48687729082690" 4059 4060 4061 > 4062 4oz - $49.95 4063 </option></select> 4064 4065 <div class="product-addtocart" id="AddToCartWrapper-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025540854082"> 4066 <input type="hidden" name="quantity" value="1"> 4067 4068 4069 <div class="visually-hidden" role="status" id="variant-status-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025540854082" aria-live="assertive"></div> 4070
4071 <span id="cart-action-desc-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025540854082" class="visually-hidden">Adds item to your shopping cart</span> 4072 4073 <button 4074 class="addtocart-btn add-to-cart" 4075 type="submit" 4076 name="add" 4077 aria-label="Add to Cart - Add Lavender Essential Oil to cart" 4078 aria-describedby="cart-action-desc-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025540854082" 4079 id="AddToCart-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025540854082" 4080 4081 > 4082 <span id="AddToCartText-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025540854082">Add to Cart <i class="cart-icon" aria-hidden="true"></i></span> 4083 </button> 4084 </div><input type="hidden" name="product-id" value="8025540854082" /><input type="hidden" name="section-id" value="template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1" /></form><!-- END Variant Selection Form --></div>
4084<script type="application/ld+json"> 4085 { 4086 "@context": "http://schema.org/", 4087 "@type": "Product", 4088 "name": "Lavender Essential Oil", 4089 "url": "https:\/\/www.rockymountainoils.com\/products\/lavender-essential-oil","image": [ 4090 "https:\/\/www.rockymountainoils.com\/cdn\/shop\/files\/lavender-essential-oil-15ml-1.jpg?v=1765782112\u0026width=638" 4091 ], 4092 "description": "Lavender Essential Oil from Rocky Mountain Oils offers a versatile and soothing aromatic experience. Steam-distilled from Lavandula angustifolia flowers sourced from premium growing regions, this 100% pure essential oil boasts a medium-strength floral, herbaceous, and slightly woody aroma.\nIts calming properties help reduce stress and encourage sound sleep, contributing to a greater sense of peace and well-being. It also offers benefits for skin care and pain relief. This multipurpose oil can be used in diffusers, applied topically when diluted, or added to DIY products for aromatherapy, massage, and household cleaning.\n\n\n","sku": "LAVGRE-S15", 4093 "brand": { 4094 "@type": "Brand", 4095 "name": "Rocky Mountain Oils" 4096 }, 4097 "offers": { 4098 "@type": "AggregateOffer", 4099 "availability": "http://schema.org/InStock", 4100 "priceCurrency": "USD", 4101 "highPrice": 49.95, 4102 "lowPrice": 11.95, 4103 "offerCount": 3, 4104 "offers": [{ 4105 "@type" : "Offer","sku": "LAVGRE-S15","gtin12": "053176181462","availability" : "http://schema.org/InStock", 4106 "price" : 20.95, 4107 "priceCurrency" : "USD", 4108 "priceValidUntil": "2026-12-31", 4109 "url" : "https:\/\/www.rockymountainoils.com\/products\/lavender-essential-oil?variant=44111360459074" 4110 }, 4111{ 4112 "@type" : "Offer","sku": "LAVGRE-S5","gtin12": "053176181776","availability" : "http://schema.org/InStock", 4113 "price" : 11.95, 4114 "priceCurrency" : "USD", 4115 "priceValidUntil": "2026-12-31", 4116 "url" : "https:\/\/www.rockymountainoils.com\/products\/lavender-essential-oil?variant=48687729115458" 4117 }, 4118{ 4119 "@type" : "Offer","sku": "LAVGRE-4OZ","gtin12": "053176183145","availability" : "http://schema.org/InStock", 4120 "price" : 49.95, 4121 "priceCurrency" : "USD", 4122 "priceValidUntil": "2026-12-31", 4123 "url" : "https:\/\/www.rockymountainoils.com\/products\/lavender-essential-oil?variant=48687729082690" 4124 } 4125] 4126 } 4127 } 4128 </script>
4128</div> 4129 4130<style> 4131/* Ensure visually-hidden utility exists even if theme lacks it */ 4132.visually-hidden { 4133 position: absolute !important; 4134 width: 1px !important; 4135 height: 1px !important; 4136 padding: 0 !important; 4137 margin: -1px !important; 4138 overflow: hidden !important; 4139 clip: rect(0, 0, 0, 0) !important; 4140 white-space: nowrap !important; 4141 border: 0 !important; 4142} 4143 4144/* Ensure the main product image is tappable on iOS */ 4145.main-product-image { 4146 cursor: pointer; 4147 -webkit-tap-highlight-color: rgba(0,0,0,0.05); 4148 touch-action: manipulation; 4149} 4150 4151/* ULTIMATE FIX - Override anything that hides select text */ 4152.product-variants-select, 4153.product-variants-select.no-js-only, 4154select.product-variants-select, 4155select[id*="ProductSelect-"] { 4156 color: #1a1a1a !important; 4157 opacity: 1 !important; 4158 background-color: #ffffff !important; 4159 -webkit-text-fill-color: #1a1a1a !important; 4160} 4161 4162.product-variants-select option, 4163select[id*="ProductSelect-"] option { 4164 color: #1a1a1a !important; 4165 background-color: #ffffff !important; 4166 -webkit-text-fill-color: #1a1a1a !important; 4167} 4168 4169.product-variants-select option:checked, 4170select[id*="ProductSelect-"] option:checked { 4171 color: #1a1a1a !important; 4172 background-color: #e8f0fe !important; 4173} 4174 4175.product-variants-select option:disabled, 4176select[id*="ProductSelect-"] option:disabled { 4177 color: #6c6c6c !important; 4178 background-color: #f5f5f5 !important; 4179 -webkit-text-fill-color: #6c6c6c !important; 4180 opacity: 1 !important; 4181} 4182 4183.product-variants-select:focus, 4184select[id*="ProductSelect-"]:focus { 4185 color: #1a1a1a !important; 4186 outline: 3px solid #000000ff !important; 4187} 4188</style> 4189 </div><div class="item"> 4190
4190<script> 4191(function() { 4192 class ProductCardVariantSelector { 4193 constructor(container) { 4194 this.container = container; 4195 if (!this.container) return; 4196 4197 this.form = this.container.querySelector('.product-form'); 4198 this.variantSelectors = this.container.querySelectorAll('.variant-select'); 4199 this.masterSelect = this.container.querySelector('.product-variants-select'); 4200 this.productImage = this.container.querySelector('.main-product-image'); 4201 this.priceWrapper = this.container.querySelector('[id^="ProductPrice-"]'); 4202 this.currentPriceElement = this.container.querySelector('[id^="CurrentPrice-"]'); 4203 this.comparePriceElement = this.container.querySelector('[id^="ComparePrice-"]'); 4204 this.addToCartButton = this.container.querySelector('[id^="AddToCart-"]'); 4205 this.addToCartText = this.container.querySelector('[id^="AddToCartText-"]'); 4206 this.notifyMeButton = this.container.querySelector('[id^="NotifyMe-"]'); 4207 this.variantsJsonScript = this.container.querySelector('[id^="VariantsJson-"]'); 4208 this.dataStore = this.container.querySelector('[id^="DataStore-"]'); 4209 this.saleTag = this.container.querySelector('.hc-sale-tag'); 4210 this.statusElement = this.container.querySelector('[id^="variant-status-"]'); 4211 4212 if (!this.masterSelect || !this.variantsJsonScript) return; 4213 4214 try { 4215 this.productVariants = JSON.parse(this.variantsJsonScript.textContent); 4216 } catch (e) { return; } 4217 4218 this.mainImageUrl = this.dataStore ? this.dataStore.dataset.mainImageUrl : null; 4219 this.productTitle = this.dataStore ? this.dataStore.dataset.productTitle : ''; 4220 4221 this.init(); 4222 } 4223 4224 init() { 4225 // --- iOS-safe image tap handling (works on iPhone 16, 17 Pro Max, etc.) --- 4226 if (this.productImage) { 4227 let touchStartX = 0, touchStartY = 0, touchMoved = false; 4228 let lastTouchTime = 0; 4229 4230 this.productImage.style.cursor = 'pointer'; 4231 this.productImage.setAttribute('role', 'button'); 4232 this.productImage.setAttribute('tabindex', '0'); 4233 4234 this.productImage.addEventListener('touchstart', (e) => { 4235 const t = e.touches[0]; 4236 touchStartX = t.clientX; 4237 touchStartY = t.clientY; 4238 touchMoved = false; 4239 }, { passive: true }); 4240 4241 this.productImage.addEventListener('touchmove', (e) => { 4242 const t = e.touches[0]; 4243 if (Math.abs(t.clientX - touchStartX) > 10 || 4244 Math.abs(t.clientY - touchStartY) > 10) { 4245 touchMoved = true; 4246 } 4247 }, { passive: true }); 4248 4249 this.productImage.addEventListener('touchend', (e) => { 4250 if (touchMoved) return; 4251 lastTouchTime = Date.now(); 4252 e.preventDefault(); 4253 this.onImageTap(e); 4254 }, { passive: false }); 4255 4256 // Desktop / non-touch fallback (with double-fire protection after touchend) 4257 this.productImage.addEventListener('click', (e) => { 4258 if (Date.now() - lastTouchTime < 500) return; 4259 this.onImageTap(e); 4260 }); 4261 4262 this.productImage.addEventListener('keydown', (e) => { 4263 if (e.key === 'Enter' || e.key === ' ') { 4264 e.preventDefault(); 4265 this.onImageTap(e); 4266 } 4267 }); 4268 } 4269 4270 // --- Variant select listeners --- 4271 if (this.variantSelectors.length > 0) { 4272 this.variantSelectors.forEach(select => { 4273 select.addEventListener('change', this.onVariantChange.bind(this)); 4274 }); 4275 this.updateProductDetails(this.getCurrentVariant()); 4276 } 4277 } 4278 4279 // ============================================================ 4280 // CHANGE THIS IF YOU WANT DIFFERENT TAP BEHAVIOR 4281 // Currently: navigates to the product page. 4282 // ============================================================ 4283 onImageTap(e) { 4284 const link = this.container.querySelector('.product-title-link'); 4285 if (link && link.href && link.href !== '#') { 4286 window.location.href = link.href; 4287 } 4288 } 4289 // ============================================================ 4290 4291 onVariantChange() { 4292 const selectedOptions = Array.from(this.variantSelectors).map(s => s.value); 4293 const matchedVariant = this.findMatchingVariant(selectedOptions); 4294 4295 if (matchedVariant) { 4296 this.masterSelect.value = matchedVariant.id; 4297 this.updateProductDetails(matchedVariant); 4298 if (this.statusElement) this.statusElement.textContent = ''; 4299 } else { 4300 if (this.statusElement) { 4301 this.statusElement.textContent = 'No available variant matches your selection'; 4302 } 4303 this.updateProductDetails(null); 4304 } 4305 } 4306 4307 findMatchingVariant(selectedOptions) { 4308 return this.productVariants.find(variant => { 4309 if (!variant.options || variant.options.length !== selectedOptions.length) return false;
4310 return selectedOptions.every((val, i) => variant.options[i] === val); 4311 }); 4312 } 4313 4314 getCurrentVariant() { 4315 if (!this.masterSelect) return null; 4316 const id = this.masterSelect.value; 4317 if (!id) return null; 4318 return this.productVariants.find(v => String(v.id) === String(id)) || null; 4319 } 4320 4321 // Shopify CDN: insert _WIDTHx before extension for a properly sized image 4322 sizedImageUrl(src, width) { 4323 if (!src) return src; 4324 return src.replace(/(\.[a-z]{3,4})(\?|$)/i, `_${width}x$1$2`); 4325 } 4326 4327 updateProductDetails(variant) { 4328 this.container.setAttribute('aria-busy', 'true'); 4329 4330 if (!variant) { 4331 if (this.addToCartButton) this.addToCartButton.disabled = true; 4332 if (this.addToCartText) this.addToCartText.textContent = 'Unavailable'; 4333 if (this.notifyMeButton) this.notifyMeButton.style.display = 'none'; 4334 if (this.priceWrapper) this.priceWrapper.classList.remove('sale'); 4335 if (this.comparePriceElement) this.comparePriceElement.style.display = 'none'; 4336 if (this.saleTag) this.saleTag.style.display = 'none'; 4337 this.container.setAttribute('aria-busy', 'false'); 4338 return; 4339 } 4340 4341 // 1. Image 4342 if (this.productImage) { 4343 if (variant.featured_image && variant.featured_image.src) { 4344 const sized = this.sizedImageUrl(variant.featured_image.src, 300); 4345 const variantOptions = variant.options ? variant.options.join(' - ') : ''; 4346 this.productImage.src = sized; 4347 this.productImage.srcset = ''; 4348 this.productImage.alt = variant.featured_image.alt 4349 ? variant.featured_image.alt 4350 : (this.productTitle + (variantOptions ? ' - ' + variantOptions : '')); 4351 } else if (this.mainImageUrl) { 4352 this.productImage.src = this.mainImageUrl; 4353 this.productImage.srcset = ''; 4354 this.productImage.alt = this.productTitle; 4355 } 4356 } 4357 4358 // 2. Price 4359 const moneyFormat = "${{amount}}"; 4360 const formatMoney = (cents, format) => { 4361 if (typeof cents === 'string') cents = cents.replace('.', ''); 4362 let value = ''; 4363 const placeholderRegex = /\{\{\s*(\w+)\s*\}\}/; 4364 const formatString = (format || moneyFormat).replace(/<[^>]*>/g, ''); 4365 4366 function formatWithDelimiters(number, precision, thousands, decimal) { 4367 precision = precision ?? 2; 4368 thousands = thousands ?? ','; 4369 decimal = decimal ?? '.'; 4370 if (isNaN(number) || number == null) return 0; 4371 number = (number / 100.0).toFixed(precision); 4372 const parts = number.split('.'); 4373 const dollars = parts[0].replace(/(\d)(?=(\d\d\d)+(?!\d))/g, '$1' + thousands); 4374 const centsPart = parts[1] ? (decimal + parts[1]) : ''; 4375 return dollars + centsPart; 4376 } 4377 4378 switch (formatString.match(placeholderRegex)?.[1]) { 4379 case 'amount': value = formatWithDelimiters(cents, 2); break; 4380 case 'amount_no_decimals': value = formatWithDelimiters(cents, 0); break; 4381 case 'amount_with_comma_separator': value = formatWithDelimiters(cents, 2, '.', ','); break; 4382 case 'amount_no_decimals_with_comma_separator': value = formatWithDelimiters(cents, 0, '.', ','); break; 4383 case 'amount_with_apostrophe_separator': value = formatWithDelimiters(cents, 2, "'", "."); break; 4384 case 'amount_no_decimals_with_space_separator': value = formatWithDelimiters(cents, 0, " ", ","); break; 4385 case 'amount_with_space_separator': value = formatWithDelimiters(cents, 2, " ", ","); break; 4386 default: value = formatWithDelimiters(cents, 2); 4387 } 4388 try { 4389 return formatString.replace(placeholderRegex, value); 4390 } catch (e) { 4391 const fallback = (cents / 100.0).toFixed(2); 4392 return formatString.includes('') 4393 ? formatString.replace(placeholderRegex, fallback) 4394 : fallback; 4395 } 4396 }; 4397 4398 if (this.currentPriceElement) { 4399 this.currentPriceElement.textContent = formatMoney(variant.price, moneyFormat); 4400 } 4401 if (this.comparePriceElement && this.priceWrapper) { 4402 if (variant.compare_at_price && variant.compare_at_price > variant.price) { 4403 this.comparePriceElement.textContent = formatMoney(variant.compare_at_price, moneyFormat); 4404 this.comparePriceElement.style.display = ''; 4405 this.priceWrapper.classList.add('sale'); 4406 } else { 4407 this.comparePriceElement.textContent = ''; 4408 this.comparePriceElement.style.display = 'none'; 4409 this.priceWrapper.classList.remove('sale'); 4410 } 4411 } 4412 4413 // 3. Sale tag 4414 if (this.saleTag) { 4415 const isDiscounted = variant.compare_at_price && variant.compare_at_price > variant.price; 4416 if (isDiscounted && variant.available) { 4417 this.saleTag.style.display = 'block'; 4418 const discount = Math.round((variant.compare_at_price - variant.price) * 100.0 / variant.compare_at_price); 4419 const span = this.saleTag.querySelector('span'); 4420 if (span) span.textContent = discount + '%'; 4421 this.saleTag.setAttribute('aria-label', 'Save ' + discount + '%'); 4422 this.saleTag.setAttribute('role', 'status'); 4423 } else { 4424 this.saleTag.style.display = 'none'; 4425 } 4426 } 4427 4428 // 4. Add to cart 4429 if (this.addToCartButton && this.addToCartText) { 4430 if (variant.available) { 4431 this.addToCartButton.disabled = false;
4432 this.addToCartText.innerHTML = 'Add to Cart <i class="cart-icon"></i>'; 4433 this.addToCartButton.setAttribute('aria-label', 'Add to Cart - Add ' + this.productTitle + ' to cart'); 4434 if (this.notifyMeButton) this.notifyMeButton.style.display = 'none'; 4435 } else { 4436 this.addToCartButton.disabled = true; 4437 this.addToCartText.textContent = 'Sold Out'; 4438 this.addToCartButton.setAttribute('aria-label', 'Sold Out - ' + this.productTitle + ' is sold out'); 4439 if (this.notifyMeButton) this.notifyMeButton.style.display = 'block'; 4440 } 4441 } 4442 if (this.notifyMeButton) { 4443 this.notifyMeButton.setAttribute('data-variant-id', variant.id); 4444 } 4445 4446 this.container.setAttribute('aria-busy', 'false'); 4447 } 4448 } 4449 4450 function initProductCards(root) { 4451 root = root || document; 4452 root.querySelectorAll('.product-card-wrapper[data-product-id]').forEach(cardContainer => { 4453 if (cardContainer.dataset.variantSelectorInit === 'true') return; 4454 cardContainer.dataset.variantSelectorInit = 'true'; 4455 new ProductCardVariantSelector(cardContainer); 4456 }); 4457 } 4458 4459 if (document.readyState === 'loading') { 4460 document.addEventListener('DOMContentLoaded', () => initProductCards()); 4461 } else { 4462 initProductCards(); 4463 } 4464 4465 document.addEventListener('shopify:section:load', (e) => initProductCards(e.target)); 4466})(); 4467</script>
4467<div class="product-card-wrapper" data-product-id="8025578078530" aria-busy="false"> 4468 4469 <div class="product-image" id="ProductImageWrapper-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025578078530"><!-- WISHLIST BUTTON --> 4470 <div class='xb-wishlist__btn-custom'> 4471 <div 4472 class='xb-wishlist__add' 4473 xb-product-id='8025578078530' 4474 xb-product-title='Lemon Essential Oil' 4475 xb-product-variant='52948354269551' 4476 xb-is-in-stock='true' 4477 xb-product-handle='lemon-essential-oil' 4478 > 4479 <button aria-label="Add Lemon Essential Oil to wishlist" aria-pressed="false"> 4480 <svg 4481 xmlns='http://www.w3.org/2000/svg' 4482 width='20' 4483 height='20' 4484 viewBox='0 0 24 24' 4485 fill='none' 4486 stroke='#FF4A71' 4487 stroke-width='2' 4488 stroke-linecap='round' 4489 stroke-linejoin='round' 4490 aria-hidden='true' 4491 focusable='false' 4492 > 4493 <path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"></path> 4494 </svg> 4495 </button> 4496 </div> 4497 4498 <div class="xb-wishlist__loading" xb-product-id="8025578078530"> 4499 <span class="loading-spinner"></span> 4500 </div> 4501 4502 <div class='xb-wishlist__remove' xb-product-id='8025578078530' xb-is-in-stock='true'> 4503 <button aria-label="Remove Lemon Essential Oil from wishlist" aria-pressed="true"> 4504 <svg 4505 xmlns='http://www.w3.org/2000/svg' 4506 width='20' 4507 height='20'
4508 viewBox='0 0 24 24' 4509 fill='#FF4A71' 4510 stroke='#FF4A71' 4511 stroke-width='2' 4512 stroke-linecap='round' 4513 stroke-linejoin='round' 4514 aria-hidden='true' 4515 focusable='false' 4516 > 4517 <path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"></path> 4518 </svg> 4519 </button> 4520 </div> 4521 </div><img 4522 id="ProductImage-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025578078530" 4523 class="main-product-image" 4524 src="//www.rockymountainoils.com/cdn/shop/files/Lemon5mlSingle_2ef8b857-d992-46b4-b392-dd46c4ad9d7f.jpg?crop=center&height=300&v=1705937062&width=300" 4525 alt=" Essentials Kit" 4526 width="300" 4527 height="300" 4528 loading="lazy" 4529 /></div> 4530 4531 <div class="product-content"> 4532 <div class="product-title"> 4533 <a href="/products/lemon-essential-oil" class="product-title-link" aria-label="View Lemon Essential Oil"> 4534 <h2>Lemon Essential Oil</h2> 4535 </a> 4536 </div><div> 4537 <div class="product-subtitle"> 4538 Smells like a fresh lemon; helps reduce stress & improves focus. 4539 </div> 4540 </div><div class="yotpo-widget-instance" data-yotpo-instance-id="503375" data-yotpo-product-id="8025578078530" data-yotpo-cart-product-id="" data-yotpo-section-id="index"></div><!-- START Variant Selection Form --> 4541 <div class="product-data-store" style="display:none;" 4542 data-main-image-url="//www.rockymountainoils.com/cdn/shop/files/Lemon5mlSingle_2ef8b857-d992-46b4-b392-dd46c4ad9d7f.jpg?v=1705937062&width=300" 4543 data-product-title="Lemon Essential Oil" 4544 id="DataStore-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025578078530"> 4545 </div> 4546 4547
4547<script id="VariantsJson-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025578078530" type="application/json"> 4548 [{"id":52948354269551,"title":"5ml","option1":"5ml","option2":null,"option3":null,"sku":"LEMUSA-S5","requires_shipping":true,"taxable":true,"featured_image":{"id":43885289177410,"product_id":8025578078530,"position":1,"created_at":"2024-01-22T08:24:21-07:00","updated_at":"2024-01-22T08:24:22-07:00","alt":" Essentials Kit","width":570,"height":570,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/Lemon5mlSingle_2ef8b857-d992-46b4-b392-dd46c4ad9d7f.jpg?v=1705937062","variant_ids":[52948354269551]},"available":true,"name":"Lemon Essential Oil - 5ml","public_title":"5ml","options":["5ml"],"price":495,"weight":113,"compare_at_price":null,"inventory_management":"shopify","barcode":"053176176024","featured_media":{"alt":" Essentials Kit","id":36355664314690,"position":1,"preview_image":{"aspect_ratio":1.0,"height":570,"width":570,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/Lemon5mlSingle_2ef8b857-d992-46b4-b392-dd46c4ad9d7f.jpg?v=1705937062"}},"requires_selling_plan":false,"selling_plan_allocations":[{"price_adjustments":[{"position":1,"price":347}],"price":347,"compare_at_price":495,"per_delivery_price":347,"selling_plan_id":691785924975,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":421},{"position":2,"price":396}],"price":421,"compare_at_price":495,"per_delivery_price":421,"selling_plan_id":691785957743,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":446},{"position":2,"price":421}],"price":446,"compare_at_price":495,"per_delivery_price":446,"selling_plan_id":691785990511,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":470},{"position":2,"price":446}],"price":470,"compare_at_price":495,"per_delivery_price":470,"selling_plan_id":691786023279,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":446},{"position":2,"price":421}],"price":446,"compare_at_price":495,"per_delivery_price":446,"selling_plan_id":691786088815,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":470},{"position":2,"price":446}],"price":470,"compare_at_price":495,"per_delivery_price":470,"selling_plan_id":691786121583,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":421},{"position":2,"price":396}],"price":421,"compare_at_price":495,"per_delivery_price":421,"selling_plan_id":691795362159,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":446},{"position":2,"price":421}],"price":446,"compare_at_price":495,"per_delivery_price":446,"selling_plan_id":691795394927,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":470},{"position":2,"price":446}],"price":470,"compare_at_price":495,"per_delivery_price":470,"selling_plan_id":691795427695,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"}],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":44299085513026,"title":"15ml","option1":"15ml","option2":null,"option3":null,"sku":"LEMUSA-S15","requires_shipping":true,"taxable":true,"featured_image":{"id":43885239075138,"product_id":8025578078530,"position":2,"created_at":"2024-01-22T08:16:04-07:00","updated_at":"2026-04-09T07:57:57-06:00","alt":"Most Popular Lemon Essential Oil ","width":570,"height":570,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/Lemon15mlSingle.jpg?v=1775743077","variant_ids":[44299085513026]},"available":true,"name":"Lemon Essential Oil - 15ml","public_title":"15ml","options":["15ml"],"price":995,"weight":45,"compare_at_price":null,"inventory_management":"shopify","barcode":"053176176017","featured_media":{"alt":"Most Popular Lemon Essential Oil ","id":36355612705090,"position":2,"preview_image":{"aspect_ratio":1.0,"height":570,"width":570,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/Lemon15mlSingle.jpg?v=1775743077"}},"requires_selling_plan":false,"selling_plan_allocations":[{"price_adjustments":[{"position":1,"price":697}],"price":697,"compare_at_price":995,"per_delivery_price":697,"selling_plan_id":691785924975,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":846},{"position":2,"price":796}],"price":846,"compare_at_price":995,"per_delivery_price":846,"selling_plan_id":691785957743,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":896},{"position":2,"price":846}],"price":896,"compare_at_price":995,"per_delivery_price":896,"selling_plan_id":691785990511,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":945},{"position":2,"price":896}],"price":945,"compare_at_price":995,"per_delivery_price":945,"selling_plan_id":691786023279,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":896},{"position":2,"price":846}],"price":896,"compare_at_price":995,"per_delivery_price":896,"selling_plan_id":691786088815,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":945},{"position":2,"price":896}],"price":945,"compare_at_price":995,"per_delivery_price":945,"selling_plan_id":691786121583,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":846},{"position":2,"price":796}],"price":846,"compare_at_price":995,"per_delivery_price":846,"selling_plan_id":691795362159,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":896},{"position":2,"price":846}],"price":896,"compare_at_price":995,"per_delivery_price":896,"selling_plan_id":691795394927,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":945},{"position":2,"price":896}],"price":945,"compare_at_price":995,"per_delivery_price":945,"selling_plan_id":691795427695,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"}],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":48687870640450,"title":"4oz","option1":"4oz","option2":null,"option3":null,"sku":"LEMUSA-4OZ","requires_shipping":true,"taxable":true,"featured_image":{"id":44364455280962,"product_id":8025578078530,"position":4,"created_at":"2024-03-06T11:22:34-07:00","updated_at":"2026-04-09T07:57:57-06:00","alt":"Lemon Essential Oil - 4oz - Rocky Mountain Oils","width":715,"he
4548ight":715,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/lemon-essential-oil-4oz-2.jpg?v=1775743077","variant_ids":[48687870640450]},"available":false,"name":"Lemon Essential Oil - 4oz","public_title":"4oz","options":["4oz"],"price":2995,"weight":113,"compare_at_price":null,"inventory_management":"shopify","barcode":"053176176024","featured_media":{"alt":"Lemon Essential Oil - 4oz - Rocky Mountain Oils","id":36843347378498,"position":4,"preview_image":{"aspect_ratio":1.0,"height":715,"width":715,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/lemon-essential-oil-4oz-2.jpg?v=1775743077"}},"requires_selling_plan":false,"selling_plan_allocations":[{"price_adjustments":[{"position":1,"price":2097}],"price":2097,"compare_at_price":2995,"per_delivery_price":2097,"selling_plan_id":691785924975,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":2546},{"position":2,"price":2396}],"price":2546,"compare_at_price":2995,"per_delivery_price":2546,"selling_plan_id":691785957743,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":2696},{"position":2,"price":2546}],"price":2696,"compare_at_price":2995,"per_delivery_price":2696,"selling_plan_id":691785990511,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":2845},{"position":2,"price":2696}],"price":2845,"compare_at_price":2995,"per_delivery_price":2845,"selling_plan_id":691786023279,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":2696},{"position":2,"price":2546}],"price":2696,"compare_at_price":2995,"per_delivery_price":2696,"selling_plan_id":691786088815,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":2845},{"position":2,"price":2696}],"price":2845,"compare_at_price":2995,"per_delivery_price":2845,"selling_plan_id":691786121583,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":2546},{"position":2,"price":2396}],"price":2546,"compare_at_price":2995,"per_delivery_price":2546,"selling_plan_id":691795362159,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":2696},{"position":2,"price":2546}],"price":2696,"compare_at_price":2995,"per_delivery_price":2696,"selling_plan_id":691795394927,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":2845},{"position":2,"price":2696}],"price":2845,"compare_at_price":2995,"per_delivery_price":2845,"selling_plan_id":691795427695,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"}],"quantity_rule":{"min":1,"max":null,"increment":1}}] 4549 </script>
4549<form method="post" action="/cart/add" id="product-form-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025578078530" accept-charset="UTF-8" class="product-variants product-form" enctype="multipart/form-data" data-productid="8025578078530" novalidate="novalidate" data-type="add-to-cart-form"><input type="hidden" name="form_type" value="product" /><input type="hidden" name="utf8" value="â" /><div class="product-price-option"> 4550 <div class="product-price" id="ProductPrice-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025578078530" aria-live="polite" aria-atomic="true"> 4551 <span class="compare-at-price" id="ComparePrice-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025578078530" style="display: none;"></span> 4552 <span class="current-price" id="CurrentPrice-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025578078530">$4.95</span> 4553 4554 4555 </div> 4556 4557 4558 <div class="product-option"> 4559 <label for="Option-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025578078530-0" class="visually-hidden"> 4560 Select Size for Lemon Essential Oil 4561 </label> 4562 <select 4563 id="Option-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025578078530-0" 4564 class="variant-select" 4565 name="options[Size]" 4566 form="product-form-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025578078530" 4567 data-index="option0" 4568 ><option 4569 value="5ml" 4570 selected="selected" 4571 > 4572 5ml 4573 </option><option 4574 value="15ml" 4575 4576 > 4577 15ml 4578 </option><option 4579 value="4oz" 4580 4581 > 4582 4oz 4583 </option></select> 4584 </div> 4585 4586 </div><label for="ProductSelect-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025578078530" class="visually-hidden"> 4587 Choose variant for Lemon Essential Oil 4588 </label> 4589 <select 4590 name="id" 4591 data-productid="8025578078530" 4592 id="ProductSelect-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025578078530" 4593 class="product-variants-select no-js-only" 4594 ><option 4595 value="52948354269551" 4596 selected="selected" 4597 4598 > 4599 5ml - $4.95 4600 </option><option 4601 value="44299085513026" 4602 4603 4604 > 4605 15ml - $9.95 4606 </option><option 4607 value="48687870640450" 4608 4609 disabled="disabled" 4610 > 4611 4oz - $29.95 - Sold Out 4612 </option></select> 4613 4614 <div class="product-addtocart" id="AddToCartWrapper-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025578078530"> 4615 <input type="hidden" name="quantity" value="1"> 4616 4617 4618 <div class="visually-hidden" role="status" id="variant-status-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025578078530" aria-l
4618ive="assertive"></div> 4619 4620 <span id="cart-action-desc-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025578078530" class="visually-hidden">Adds item to your shopping cart</span> 4621 4622 <button 4623 class="addtocart-btn add-to-cart" 4624 type="submit" 4625 name="add" 4626 aria-label="Add to Cart - Add Lemon Essential Oil to cart" 4627 aria-describedby="cart-action-desc-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025578078530" 4628 id="AddToCart-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025578078530" 4629 4630 > 4631 <span id="AddToCartText-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025578078530">Add to Cart <i class="cart-icon" aria-hidden="true"></i></span> 4632 </button> 4633 </div><input type="hidden" name="product-id" value="8025578078530" /><input type="hidden" name="section-id" value="template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1" /></form><!-- END Variant Selection Form --></div>
4633<script type="application/ld+json"> 4634 { 4635 "@context": "http://schema.org/", 4636 "@type": "Product", 4637 "name": "Lemon Essential Oil", 4638 "url": "https:\/\/www.rockymountainoils.com\/products\/lemon-essential-oil","image": [ 4639 "https:\/\/www.rockymountainoils.com\/cdn\/shop\/files\/Lemon5mlSingle_2ef8b857-d992-46b4-b392-dd46c4ad9d7f.jpg?v=1705937062\u0026width=570" 4640 ], 4641 "description": "Lemon Essential Oil offers a bright, invigorating scent that energizes and refreshes. Cold-pressed from lemon peels, this versatile oil is packed with antioxidants like vitamin C and limonene. It helps reduce stress, improve focus, and promote a clearer complexion when diluted and applied topically. Lemon oil is also excellent for natural cleaning and air purification.","sku": "LEMUSA-S5", 4642 "brand": { 4643 "@type": "Brand", 4644 "name": "Rocky Mountain Oils" 4645 }, 4646 "offers": { 4647 "@type": "AggregateOffer", 4648 "availability": "http://schema.org/InStock", 4649 "priceCurrency": "USD", 4650 "highPrice": 29.95, 4651 "lowPrice": 4.95, 4652 "offerCount": 3, 4653 "offers": [{ 4654 "@type" : "Offer","sku": "LEMUSA-S5","gtin12": "053176176024","availability" : "http://schema.org/InStock", 4655 "price" : 4.95, 4656 "priceCurrency" : "USD", 4657 "priceValidUntil": "2026-12-31", 4658 "url" : "https:\/\/www.rockymountainoils.com\/products\/lemon-essential-oil?variant=52948354269551" 4659 }, 4660{ 4661 "@type" : "Offer","sku": "LEMUSA-S15","gtin12": "053176176017","availability" : "http://schema.org/InStock", 4662 "price" : 9.95, 4663 "priceCurrency" : "USD", 4664 "priceValidUntil": "2026-12-31", 4665 "url" : "https:\/\/www.rockymountainoils.com\/products\/lemon-essential-oil?variant=44299085513026" 4666 }, 4667{ 4668 "@type" : "Offer","sku": "LEMUSA-4OZ","gtin12": "053176176024","availability" : "http://schema.org/OutOfStock", 4669 "price" : 29.95, 4670 "priceCurrency" : "USD", 4671 "priceValidUntil": "2026-12-31", 4672 "url" : "https:\/\/www.rockymountainoils.com\/products\/lemon-essential-oil?variant=48687870640450" 4673 } 4674] 4675 } 4676 } 4677 </script>
4677</div> 4678 4679<style> 4680/* Ensure visually-hidden utility exists even if theme lacks it */ 4681.visually-hidden { 4682 position: absolute !important; 4683 width: 1px !important; 4684 height: 1px !important; 4685 padding: 0 !important; 4686 margin: -1px !important; 4687 overflow: hidden !important; 4688 clip: rect(0, 0, 0, 0) !important; 4689 white-space: nowrap !important; 4690 border: 0 !important; 4691} 4692 4693/* Ensure the main product image is tappable on iOS */ 4694.main-product-image { 4695 cursor: pointer; 4696 -webkit-tap-highlight-color: rgba(0,0,0,0.05); 4697 touch-action: manipulation; 4698} 4699 4700/* ULTIMATE FIX - Override anything that hides select text */ 4701.product-variants-select, 4702.product-variants-select.no-js-only, 4703select.product-variants-select, 4704select[id*="ProductSelect-"] { 4705 color: #1a1a1a !important; 4706 opacity: 1 !important; 4707 background-color: #ffffff !important; 4708 -webkit-text-fill-color: #1a1a1a !important; 4709} 4710 4711.product-variants-select option, 4712select[id*="ProductSelect-"] option { 4713 color: #1a1a1a !important; 4714 background-color: #ffffff !important; 4715 -webkit-text-fill-color: #1a1a1a !important; 4716} 4717 4718.product-variants-select option:checked, 4719select[id*="ProductSelect-"] option:checked { 4720 color: #1a1a1a !important; 4721 background-color: #e8f0fe !important; 4722} 4723 4724.product-variants-select option:disabled, 4725select[id*="ProductSelect-"] option:disabled { 4726 color: #6c6c6c !important; 4727 background-color: #f5f5f5 !important; 4728 -webkit-text-fill-color: #6c6c6c !important; 4729 opacity: 1 !important; 4730} 4731 4732.product-variants-select:focus, 4733select[id*="ProductSelect-"]:focus { 4734 color: #1a1a1a !important; 4735 outline: 3px solid #000000ff !important; 4736} 4737</style> 4738 </div><div class="item"> 4739
4739<script> 4740(function() { 4741 class ProductCardVariantSelector { 4742 constructor(container) { 4743 this.container = container; 4744 if (!this.container) return; 4745 4746 this.form = this.container.querySelector('.product-form'); 4747 this.variantSelectors = this.container.querySelectorAll('.variant-select'); 4748 this.masterSelect = this.container.querySelector('.product-variants-select'); 4749 this.productImage = this.container.querySelector('.main-product-image'); 4750 this.priceWrapper = this.container.querySelector('[id^="ProductPrice-"]'); 4751 this.currentPriceElement = this.container.querySelector('[id^="CurrentPrice-"]'); 4752 this.comparePriceElement = this.container.querySelector('[id^="ComparePrice-"]'); 4753 this.addToCartButton = this.container.querySelector('[id^="AddToCart-"]'); 4754 this.addToCartText = this.container.querySelector('[id^="AddToCartText-"]'); 4755 this.notifyMeButton = this.container.querySelector('[id^="NotifyMe-"]'); 4756 this.variantsJsonScript = this.container.querySelector('[id^="VariantsJson-"]'); 4757 this.dataStore = this.container.querySelector('[id^="DataStore-"]'); 4758 this.saleTag = this.container.querySelector('.hc-sale-tag'); 4759 this.statusElement = this.container.querySelector('[id^="variant-status-"]'); 4760 4761 if (!this.masterSelect || !this.variantsJsonScript) return; 4762 4763 try { 4764 this.productVariants = JSON.parse(this.variantsJsonScript.textContent); 4765 } catch (e) { return; } 4766 4767 this.mainImageUrl = this.dataStore ? this.dataStore.dataset.mainImageUrl : null; 4768 this.productTitle = this.dataStore ? this.dataStore.dataset.productTitle : ''; 4769 4770 this.init(); 4771 } 4772 4773 init() { 4774 // --- iOS-safe image tap handling (works on iPhone 16, 17 Pro Max, etc.) --- 4775 if (this.productImage) { 4776 let touchStartX = 0, touchStartY = 0, touchMoved = false; 4777 let lastTouchTime = 0; 4778 4779 this.productImage.style.cursor = 'pointer'; 4780 this.productImage.setAttribute('role', 'button'); 4781 this.productImage.setAttribute('tabindex', '0'); 4782 4783 this.productImage.addEventListener('touchstart', (e) => { 4784 const t = e.touches[0]; 4785 touchStartX = t.clientX; 4786 touchStartY = t.clientY; 4787 touchMoved = false; 4788 }, { passive: true }); 4789 4790 this.productImage.addEventListener('touchmove', (e) => { 4791 const t = e.touches[0]; 4792 if (Math.abs(t.clientX - touchStartX) > 10 || 4793 Math.abs(t.clientY - touchStartY) > 10) { 4794 touchMoved = true; 4795 } 4796 }, { passive: true }); 4797 4798 this.productImage.addEventListener('touchend', (e) => { 4799 if (touchMoved) return; 4800 lastTouchTime = Date.now(); 4801 e.preventDefault(); 4802 this.onImageTap(e); 4803 }, { passive: false }); 4804 4805 // Desktop / non-touch fallback (with double-fire protection after touchend) 4806 this.productImage.addEventListener('click', (e) => { 4807 if (Date.now() - lastTouchTime < 500) return; 4808 this.onImageTap(e); 4809 }); 4810 4811 this.productImage.addEventListener('keydown', (e) => { 4812 if (e.key === 'Enter' || e.key === ' ') { 4813 e.preventDefault(); 4814 this.onImageTap(e); 4815 } 4816 }); 4817 } 4818 4819 // --- Variant select listeners --- 4820 if (this.variantSelectors.length > 0) { 4821 this.variantSelectors.forEach(select => { 4822 select.addEventListener('change', this.onVariantChange.bind(this)); 4823 }); 4824 this.updateProductDetails(this.getCurrentVariant()); 4825 } 4826 } 4827 4828 // ============================================================ 4829 // CHANGE THIS IF YOU WANT DIFFERENT TAP BEHAVIOR 4830 // Currently: navigates to the product page. 4831 // ============================================================ 4832 onImageTap(e) { 4833 const link = this.container.querySelector('.product-title-link'); 4834 if (link && link.href && link.href !== '#') { 4835 window.location.href = link.href; 4836 } 4837 } 4838 // ============================================================ 4839 4840 onVariantChange() { 4841 const selectedOptions = Array.from(this.variantSelectors).map(s => s.value); 4842 const matchedVariant = this.findMatchingVariant(selectedOptions); 4843 4844 if (matchedVariant) { 4845 this.masterSelect.value = matchedVariant.id; 4846 this.updateProductDetails(matchedVariant); 4847 if (this.statusElement) this.statusElement.textContent = ''; 4848 } else { 4849 if (this.statusElement) { 4850 this.statusElement.textContent = 'No available variant matches your selection'; 4851 } 4852 this.updateProductDetails(null); 4853 } 4854 } 4855 4856 findMatchingVariant(selectedOptions) { 4857 return this.productVariants.find(variant => { 4858 if (!variant.options || variant.options.length !== selectedOptions.length) return false;
4859 return selectedOptions.every((val, i) => variant.options[i] === val); 4860 }); 4861 } 4862 4863 getCurrentVariant() { 4864 if (!this.masterSelect) return null; 4865 const id = this.masterSelect.value; 4866 if (!id) return null; 4867 return this.productVariants.find(v => String(v.id) === String(id)) || null; 4868 } 4869 4870 // Shopify CDN: insert _WIDTHx before extension for a properly sized image 4871 sizedImageUrl(src, width) { 4872 if (!src) return src; 4873 return src.replace(/(\.[a-z]{3,4})(\?|$)/i, `_${width}x$1$2`); 4874 } 4875 4876 updateProductDetails(variant) { 4877 this.container.setAttribute('aria-busy', 'true'); 4878 4879 if (!variant) { 4880 if (this.addToCartButton) this.addToCartButton.disabled = true; 4881 if (this.addToCartText) this.addToCartText.textContent = 'Unavailable'; 4882 if (this.notifyMeButton) this.notifyMeButton.style.display = 'none'; 4883 if (this.priceWrapper) this.priceWrapper.classList.remove('sale'); 4884 if (this.comparePriceElement) this.comparePriceElement.style.display = 'none'; 4885 if (this.saleTag) this.saleTag.style.display = 'none'; 4886 this.container.setAttribute('aria-busy', 'false'); 4887 return; 4888 } 4889 4890 // 1. Image 4891 if (this.productImage) { 4892 if (variant.featured_image && variant.featured_image.src) { 4893 const sized = this.sizedImageUrl(variant.featured_image.src, 300); 4894 const variantOptions = variant.options ? variant.options.join(' - ') : ''; 4895 this.productImage.src = sized; 4896 this.productImage.srcset = ''; 4897 this.productImage.alt = variant.featured_image.alt 4898 ? variant.featured_image.alt 4899 : (this.productTitle + (variantOptions ? ' - ' + variantOptions : '')); 4900 } else if (this.mainImageUrl) { 4901 this.productImage.src = this.mainImageUrl; 4902 this.productImage.srcset = ''; 4903 this.productImage.alt = this.productTitle; 4904 } 4905 } 4906 4907 // 2. Price 4908 const moneyFormat = "${{amount}}"; 4909 const formatMoney = (cents, format) => { 4910 if (typeof cents === 'string') cents = cents.replace('.', ''); 4911 let value = ''; 4912 const placeholderRegex = /\{\{\s*(\w+)\s*\}\}/; 4913 const formatString = (format || moneyFormat).replace(/<[^>]*>/g, ''); 4914 4915 function formatWithDelimiters(number, precision, thousands, decimal) { 4916 precision = precision ?? 2; 4917 thousands = thousands ?? ','; 4918 decimal = decimal ?? '.'; 4919 if (isNaN(number) || number == null) return 0; 4920 number = (number / 100.0).toFixed(precision); 4921 const parts = number.split('.'); 4922 const dollars = parts[0].replace(/(\d)(?=(\d\d\d)+(?!\d))/g, '$1' + thousands); 4923 const centsPart = parts[1] ? (decimal + parts[1]) : ''; 4924 return dollars + centsPart; 4925 } 4926 4927 switch (formatString.match(placeholderRegex)?.[1]) { 4928 case 'amount': value = formatWithDelimiters(cents, 2); break; 4929 case 'amount_no_decimals': value = formatWithDelimiters(cents, 0); break; 4930 case 'amount_with_comma_separator': value = formatWithDelimiters(cents, 2, '.', ','); break; 4931 case 'amount_no_decimals_with_comma_separator': value = formatWithDelimiters(cents, 0, '.', ','); break; 4932 case 'amount_with_apostrophe_separator': value = formatWithDelimiters(cents, 2, "'", "."); break; 4933 case 'amount_no_decimals_with_space_separator': value = formatWithDelimiters(cents, 0, " ", ","); break; 4934 case 'amount_with_space_separator': value = formatWithDelimiters(cents, 2, " ", ","); break; 4935 default: value = formatWithDelimiters(cents, 2); 4936 } 4937 try { 4938 return formatString.replace(placeholderRegex, value); 4939 } catch (e) { 4940 const fallback = (cents / 100.0).toFixed(2); 4941 return formatString.includes('') 4942 ? formatString.replace(placeholderRegex, fallback) 4943 : fallback; 4944 } 4945 }; 4946 4947 if (this.currentPriceElement) { 4948 this.currentPriceElement.textContent = formatMoney(variant.price, moneyFormat); 4949 } 4950 if (this.comparePriceElement && this.priceWrapper) { 4951 if (variant.compare_at_price && variant.compare_at_price > variant.price) { 4952 this.comparePriceElement.textContent = formatMoney(variant.compare_at_price, moneyFormat); 4953 this.comparePriceElement.style.display = ''; 4954 this.priceWrapper.classList.add('sale'); 4955 } else { 4956 this.comparePriceElement.textContent = ''; 4957 this.comparePriceElement.style.display = 'none'; 4958 this.priceWrapper.classList.remove('sale'); 4959 } 4960 } 4961 4962 // 3. Sale tag 4963 if (this.saleTag) { 4964 const isDiscounted = variant.compare_at_price && variant.compare_at_price > variant.price; 4965 if (isDiscounted && variant.available) { 4966 this.saleTag.style.display = 'block'; 4967 const discount = Math.round((variant.compare_at_price - variant.price) * 100.0 / variant.compare_at_price); 4968 const span = this.saleTag.querySelector('span'); 4969 if (span) span.textContent = discount + '%'; 4970 this.saleTag.setAttribute('aria-label', 'Save ' + discount + '%'); 4971 this.saleTag.setAttribute('role', 'status'); 4972 } else { 4973 this.saleTag.style.display = 'none'; 4974 } 4975 } 4976 4977 // 4. Add to cart 4978 if (this.addToCartButton && this.addToCartText) { 4979 if (variant.available) { 4980 this.addToCartButton.disabled = false;
4981 this.addToCartText.innerHTML = 'Add to Cart <i class="cart-icon"></i>'; 4982 this.addToCartButton.setAttribute('aria-label', 'Add to Cart - Add ' + this.productTitle + ' to cart'); 4983 if (this.notifyMeButton) this.notifyMeButton.style.display = 'none'; 4984 } else { 4985 this.addToCartButton.disabled = true; 4986 this.addToCartText.textContent = 'Sold Out'; 4987 this.addToCartButton.setAttribute('aria-label', 'Sold Out - ' + this.productTitle + ' is sold out'); 4988 if (this.notifyMeButton) this.notifyMeButton.style.display = 'block'; 4989 } 4990 } 4991 if (this.notifyMeButton) { 4992 this.notifyMeButton.setAttribute('data-variant-id', variant.id); 4993 } 4994 4995 this.container.setAttribute('aria-busy', 'false'); 4996 } 4997 } 4998 4999 function initProductCards(root) { 5000 root = root || document; 5001 root.querySelectorAll('.product-card-wrapper[data-product-id]').forEach(cardContainer => { 5002 if (cardContainer.dataset.variantSelectorInit === 'true') return; 5003 cardContainer.dataset.variantSelectorInit = 'true'; 5004 new ProductCardVariantSelector(cardContainer); 5005 }); 5006 } 5007 5008 if (document.readyState === 'loading') { 5009 document.addEventListener('DOMContentLoaded', () => initProductCards()); 5010 } else { 5011 initProductCards(); 5012 } 5013 5014 document.addEventListener('shopify:section:load', (e) => initProductCards(e.target)); 5015})(); 5016</script>
5016<div class="product-card-wrapper" data-product-id="8025568411970" aria-busy="false"> 5017 5018 <div class="product-image" id="ProductImageWrapper-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025568411970"><!-- WISHLIST BUTTON --> 5019 <div class='xb-wishlist__btn-custom'> 5020 <div 5021 class='xb-wishlist__add' 5022 xb-product-id='8025568411970' 5023 xb-product-title='Orange Essential Oil' 5024 xb-product-variant='52948343062895' 5025 xb-is-in-stock='true' 5026 xb-product-handle='orange-essential-oil' 5027 > 5028 <button aria-label="Add Orange Essential Oil to wishlist" aria-pressed="false"> 5029 <svg 5030 xmlns='http://www.w3.org/2000/svg' 5031 width='20' 5032 height='20' 5033 viewBox='0 0 24 24' 5034 fill='none' 5035 stroke='#FF4A71' 5036 stroke-width='2' 5037 stroke-linecap='round' 5038 stroke-linejoin='round' 5039 aria-hidden='true' 5040 focusable='false' 5041 > 5042 <path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"></path> 5043 </svg> 5044 </button> 5045 </div> 5046 5047 <div class="xb-wishlist__loading" xb-product-id="8025568411970"> 5048 <span class="loading-spinner"></span> 5049 </div> 5050 5051 <div class='xb-wishlist__remove' xb-product-id='8025568411970' xb-is-in-stock='true'> 5052 <button aria-label="Remove Orange Essential Oil from wishlist" aria-pressed="true"> 5053 <svg 5054 xmlns='http://www.w3.org/2000/svg' 5055 width='20' 5056 height='20'
5057 viewBox='0 0 24 24' 5058 fill='#FF4A71' 5059 stroke='#FF4A71' 5060 stroke-width='2' 5061 stroke-linecap='round' 5062 stroke-linejoin='round' 5063 aria-hidden='true' 5064 focusable='false' 5065 > 5066 <path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"></path> 5067 </svg> 5068 </button> 5069 </div> 5070 </div><img 5071 id="ProductImage-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025568411970" 5072 class="main-product-image" 5073 src="//www.rockymountainoils.com/cdn/shop/files/Orange5mlSingle_3db481fb-970c-441f-a6ca-c72cdd913abd.jpg?crop=center&height=300&v=1722538170&width=300" 5074 alt="Orange Essential Oil" 5075 width="300" 5076 height="300" 5077 loading="lazy" 5078 /></div> 5079 5080 <div class="product-content"> 5081 <div class="product-title"> 5082 <a href="/products/orange-essential-oil" class="product-title-link" aria-label="View Orange Essential Oil"> 5083 <h2>Orange Essential Oil</h2> 5084 </a> 5085 </div><div> 5086 <div class="product-subtitle"> 5087 Sweet, mellow citrus aroma promotes calm & boosts immunity. 5088 </div> 5089 </div><div class="yotpo-widget-instance" data-yotpo-instance-id="503375" data-yotpo-product-id="8025568411970" data-yotpo-cart-product-id="" data-yotpo-section-id="index"></div><!-- START Variant Selection Form --> 5090 <div class="product-data-store" style="display:none;" 5091 data-main-image-url="//www.rockymountainoils.com/cdn/shop/files/Orange5mlSingle_3db481fb-970c-441f-a6ca-c72cdd913abd.jpg?v=1722538170&width=300" 5092 data-product-title="Orange Essential Oil" 5093 id="DataStore-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025568411970"> 5094 </div> 5095 5096
5096<script id="VariantsJson-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025568411970" type="application/json"> 5097 [{"id":52948343062895,"title":"5ml","option1":"5ml","option2":null,"option3":null,"sku":"ORAUSA-S5","requires_shipping":true,"taxable":true,"featured_image":{"id":46464341180738,"product_id":8025568411970,"position":1,"created_at":"2024-08-01T12:49:08-06:00","updated_at":"2024-08-01T12:49:30-06:00","alt":null,"width":547,"height":547,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/Orange5mlSingle_3db481fb-970c-441f-a6ca-c72cdd913abd.jpg?v=1722538170","variant_ids":[52948343062895]},"available":true,"name":"Orange Essential Oil - 5ml","public_title":"5ml","options":["5ml"],"price":495,"weight":113,"compare_at_price":null,"inventory_management":"shopify","barcode":"053176176321","featured_media":{"alt":null,"id":38890527719746,"position":1,"preview_image":{"aspect_ratio":1.0,"height":547,"width":547,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/Orange5mlSingle_3db481fb-970c-441f-a6ca-c72cdd913abd.jpg?v=1722538170"}},"requires_selling_plan":false,"selling_plan_allocations":[{"price_adjustments":[{"position":1,"price":347}],"price":347,"compare_at_price":495,"per_delivery_price":347,"selling_plan_id":691785924975,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":421},{"position":2,"price":396}],"price":421,"compare_at_price":495,"per_delivery_price":421,"selling_plan_id":691785957743,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":446},{"position":2,"price":421}],"price":446,"compare_at_price":495,"per_delivery_price":446,"selling_plan_id":691785990511,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":470},{"position":2,"price":446}],"price":470,"compare_at_price":495,"per_delivery_price":470,"selling_plan_id":691786023279,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":446},{"position":2,"price":421}],"price":446,"compare_at_price":495,"per_delivery_price":446,"selling_plan_id":691786088815,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":470},{"position":2,"price":446}],"price":470,"compare_at_price":495,"per_delivery_price":470,"selling_plan_id":691786121583,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":421},{"position":2,"price":396}],"price":421,"compare_at_price":495,"per_delivery_price":421,"selling_plan_id":691795362159,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":446},{"position":2,"price":421}],"price":446,"compare_at_price":495,"per_delivery_price":446,"selling_plan_id":691795394927,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":470},{"position":2,"price":446}],"price":470,"compare_at_price":495,"per_delivery_price":470,"selling_plan_id":691795427695,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"}],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":48682130342210,"title":"4oz","option1":"4oz","option2":null,"option3":null,"sku":"ORAUSA-4OZ","requires_shipping":true,"taxable":true,"featured_image":{"id":44364627673410,"product_id":8025568411970,"position":2,"created_at":"2024-03-06T11:50:58-07:00","updated_at":"2026-01-07T14:14:29-07:00","alt":"Orange Essential Oil - 4oz - Rocky Mountain Oils","width":722,"height":722,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/orange-essential-oil-4oz-1.jpg?v=1767820469","variant_ids":[48682130342210]},"available":false,"name":"Orange Essential Oil - 4oz","public_title":"4oz","options":["4oz"],"price":2395,"weight":113,"compare_at_price":null,"inventory_management":"shopify","barcode":"053176183183","featured_media":{"alt":"Orange Essential Oil - 4oz - Rocky Mountain Oils","id":36843523014978,"position":2,"preview_image":{"aspect_ratio":1.0,"height":722,"width":722,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/orange-essential-oil-4oz-1.jpg?v=1767820469"}},"requires_selling_plan":false,"selling_plan_allocations":[{"price_adjustments":[{"position":1,"price":1677}],"price":1677,"compare_at_price":2395,"per_delivery_price":1677,"selling_plan_id":691785924975,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":2036},{"position":2,"price":1916}],"price":2036,"compare_at_price":2395,"per_delivery_price":2036,"selling_plan_id":691785957743,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":2156},{"position":2,"price":2036}],"price":2156,"compare_at_price":2395,"per_delivery_price":2156,"selling_plan_id":691785990511,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":2275},{"position":2,"price":2156}],"price":2275,"compare_at_price":2395,"per_delivery_price":2275,"selling_plan_id":691786023279,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":2156},{"position":2,"price":2036}],"price":2156,"compare_at_price":2395,"per_delivery_price":2156,"selling_plan_id":691786088815,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":2275},{"position":2,"price":2156}],"price":2275,"compare_at_price":2395,"per_delivery_price":2275,"selling_plan_id":691786121583,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":2036},{"position":2,"price":1916}],"price":2036,"compare_at_price":2395,"per_delivery_price":2036,"selling_plan_id":691795362159,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":2156},{"position":2,"price":2036}],"price":2156,"compare_at_price":2395,"per_delivery_price":2156,"selling_plan_id":691795394927,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":2275},{"position":2,"price":2156}],"price":2275,"compare_at_price":2395,"per_delivery_price":2275,"selling_plan_id":691795427695,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"}],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":44111541993794,"title":"15ml","option1":"15ml","option2":null,"option3":null,"sku":"ORAPRE-S15","requires_shipping":true,"taxable":true,"featured_image":{"id":43885356089666,"product_id":8025568411970,"position":3,"created_at":"2024-01-22T08:40:08-07:00","updated_at":"2026-01-07T14:14:29-07:00","alt":"Orange Essential Oil 15ml","width":570,"height":570,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/orange15mlwebsite.png?v=1767820469","variant_ids":[44111541993794]},"available":true,"name":"Orange Essential Oil - 15ml","public_title":"15ml","options":["15ml"],"price":895,"weight":45,"compare_at_price":null,"inventory_management":"shopify","barcode":"053176176314","featured_media":{"alt":"Orange Essential Oil 15ml","id":36355732439362,"position":3,"preview_image":{"aspect_ratio":1.0,"height":570,"width":570,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/orange15mlwebsite.png?v=1767820469"}},"requires_selling_plan":false,"selling_plan_allocations":[{"price_adjustments":[{"position":1,"price":627}],"price":627,"compare_at_price":895,"per_delivery_price":627,"selling_plan_id":691785924975,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":761},{"position":2,"price":716}],"price":761,"compare_at_price":895,"per_delivery_price":761,"selling_plan_id":691785957743,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":806},{"position":2,"price":761}],"price":806,"compare_at_price":895,"per_delivery_price":806,"selling_plan_id":691785990511,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":850},{"position":2,"price":806}],"price":850,"compare_at_price":895,"per_delivery_price":850,"selling_plan_id":691786023279,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":806},{"position":2,"price":761}],"price":806,"compare_at_price":895,"per_delivery_price":806,"selling_plan_id":691786088815,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":850},{"position":2,"price":806}],"price":850,"compare_at_price":895,"per_delivery_price":850,"selling_plan_id":691786121583,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":761},{"position":2,"price":716}],"price":761,"compare_at_price":895,"per_delivery_price":761,"selling_plan_id":691795362159,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":806},{"position":2,"price":761}],"price":806,"compare_at_price":895,"per_delivery_price":806,"selling_plan_id":691795394927,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":850},{"position":2,"price":806}],"price":850,"compare_at_price":895,"per_delivery_price":850,"selling_plan_id":691795427695,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"}],"quantity_rule":{"min":1,"max":null,"increment":1}}] 5098 </script>
5098<form method="post" action="/cart/add" id="product-form-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025568411970" accept-charset="UTF-8" class="product-variants product-form" enctype="multipart/form-data" data-productid="8025568411970" novalidate="novalidate" data-type="add-to-cart-form"><input type="hidden" name="form_type" value="product" /><input type="hidden" name="utf8" value="â" /><div class="product-price-option"> 5099 <div class="product-price" id="ProductPrice-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025568411970" aria-live="polite" aria-atomic="true"> 5100 <span class="compare-at-price" id="ComparePrice-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025568411970" style="display: none;"></span> 5101 <span class="current-price" id="CurrentPrice-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025568411970">$4.95</span> 5102 5103 5104 </div> 5105 5106 5107 <div class="product-option"> 5108 <label for="Option-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025568411970-0" class="visually-hidden"> 5109 Select Size for Orange Essential Oil 5110 </label> 5111 <select 5112 id="Option-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025568411970-0" 5113 class="variant-select" 5114 name="options[Size]" 5115 form="product-form-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025568411970" 5116 data-index="option0" 5117 ><option 5118 value="5ml" 5119 selected="selected" 5120 > 5121 5ml 5122 </option><option 5123 value="4oz" 5124 5125 > 5126 4oz 5127 </option><option 5128 value="15ml" 5129 5130 > 5131 15ml 5132 </option></select> 5133 </div> 5134 5135 </div><label for="ProductSelect-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025568411970" class="visually-hidden"> 5136 Choose variant for Orange Essential Oil 5137 </label> 5138 <select 5139 name="id" 5140 data-productid="8025568411970" 5141 id="ProductSelect-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025568411970" 5142 class="product-variants-select no-js-only" 5143 ><option 5144 value="52948343062895" 5145 selected="selected" 5146 5147 > 5148 5ml - $4.95 5149 </option><option 5150 value="48682130342210" 5151 5152 disabled="disabled" 5153 > 5154 4oz - $23.95 - Sold Out 5155 </option><option 5156 value="44111541993794" 5157 5158 5159 > 5160 15ml - $8.95 5161 </option></select> 5162 5163 <div class="product-addtocart" id="AddToCartWrapper-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025568411970"> 5164 <input type="hidden" name="quantity" value="1"> 5165 5166 5167 <div class="visually-hidden" role="status" id="variant-status-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025568411970" aria-l
5167ive="assertive"></div> 5168 5169 <span id="cart-action-desc-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025568411970" class="visually-hidden">Adds item to your shopping cart</span> 5170 5171 <button 5172 class="addtocart-btn add-to-cart" 5173 type="submit" 5174 name="add" 5175 aria-label="Add to Cart - Add Orange Essential Oil to cart" 5176 aria-describedby="cart-action-desc-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025568411970" 5177 id="AddToCart-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025568411970" 5178 5179 > 5180 <span id="AddToCartText-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025568411970">Add to Cart <i class="cart-icon" aria-hidden="true"></i></span> 5181 </button> 5182 </div><input type="hidden" name="product-id" value="8025568411970" /><input type="hidden" name="section-id" value="template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1" /></form><!-- END Variant Selection Form --></div>
5182<script type="application/ld+json"> 5183 { 5184 "@context": "http://schema.org/", 5185 "@type": "Product", 5186 "name": "Orange Essential Oil", 5187 "url": "https:\/\/www.rockymountainoils.com\/products\/orange-essential-oil","image": [ 5188 "https:\/\/www.rockymountainoils.com\/cdn\/shop\/files\/Orange5mlSingle_3db481fb-970c-441f-a6ca-c72cdd913abd.jpg?v=1722538170\u0026width=547" 5189 ], 5190 "description": "Rocky Mountain Oils' Orange Essential Oil is a versatile and uplifting citrus oil cold-pressed from orange peels. This sweet, mellow-scented oil is known for its mood-boosting and calming properties, making it ideal for reducing stress. It's also a natural antimicrobial and anti-inflammatory agent, supporting immune health and digestion.\nOrange Essential Oil offers numerous benefits for skin and hair care. Its refreshing aroma can enhance mental clarity and energy levels when diffused. This multi-purpose oil is perfect for aromatherapy, DIY cleaning products, and topical applications when diluted with a carrier oil. Safe for use around children, Orange Essential Oil is an excellent addition to any natural wellness routine.\n\n","sku": "ORAUSA-S5", 5191 "brand": { 5192 "@type": "Brand", 5193 "name": "Rocky Mountain Oils" 5194 }, 5195 "offers": { 5196 "@type": "AggregateOffer", 5197 "availability": "http://schema.org/InStock", 5198 "priceCurrency": "USD", 5199 "highPrice": 23.95, 5200 "lowPrice": 4.95, 5201 "offerCount": 3, 5202 "offers": [{ 5203 "@type" : "Offer","sku": "ORAUSA-S5","gtin12": "053176176321","availability" : "http://schema.org/InStock", 5204 "price" : 4.95, 5205 "priceCurrency" : "USD", 5206 "priceValidUntil": "2026-12-31", 5207 "url" : "https:\/\/www.rockymountainoils.com\/products\/orange-essential-oil?variant=52948343062895" 5208 }, 5209{ 5210 "@type" : "Offer","sku": "ORAUSA-4OZ","gtin12": "053176183183","availability" : "http://schema.org/OutOfStock", 5211 "price" : 23.95, 5212 "priceCurrency" : "USD", 5213 "priceValidUntil": "2026-12-31", 5214 "url" : "https:\/\/www.rockymountainoils.com\/products\/orange-essential-oil?variant=48682130342210" 5215 }, 5216{ 5217 "@type" : "Offer","sku": "ORAPRE-S15","gtin12": "053176176314","availability" : "http://schema.org/InStock", 5218 "price" : 8.95, 5219 "priceCurrency" : "USD", 5220 "priceValidUntil": "2026-12-31", 5221 "url" : "https:\/\/www.rockymountainoils.com\/products\/orange-essential-oil?variant=44111541993794" 5222 } 5223] 5224 } 5225 } 5226 </script>
5226</div> 5227 5228<style> 5229/* Ensure visually-hidden utility exists even if theme lacks it */ 5230.visually-hidden { 5231 position: absolute !important; 5232 width: 1px !important; 5233 height: 1px !important; 5234 padding: 0 !important; 5235 margin: -1px !important; 5236 overflow: hidden !important; 5237 clip: rect(0, 0, 0, 0) !important; 5238 white-space: nowrap !important; 5239 border: 0 !important; 5240} 5241 5242/* Ensure the main product image is tappable on iOS */ 5243.main-product-image { 5244 cursor: pointer; 5245 -webkit-tap-highlight-color: rgba(0,0,0,0.05); 5246 touch-action: manipulation; 5247} 5248 5249/* ULTIMATE FIX - Override anything that hides select text */ 5250.product-variants-select, 5251.product-variants-select.no-js-only, 5252select.product-variants-select, 5253select[id*="ProductSelect-"] { 5254 color: #1a1a1a !important; 5255 opacity: 1 !important; 5256 background-color: #ffffff !important; 5257 -webkit-text-fill-color: #1a1a1a !important; 5258} 5259 5260.product-variants-select option, 5261select[id*="ProductSelect-"] option { 5262 color: #1a1a1a !important; 5263 background-color: #ffffff !important; 5264 -webkit-text-fill-color: #1a1a1a !important; 5265} 5266 5267.product-variants-select option:checked, 5268select[id*="ProductSelect-"] option:checked { 5269 color: #1a1a1a !important; 5270 background-color: #e8f0fe !important; 5271} 5272 5273.product-variants-select option:disabled, 5274select[id*="ProductSelect-"] option:disabled { 5275 color: #6c6c6c !important; 5276 background-color: #f5f5f5 !important; 5277 -webkit-text-fill-color: #6c6c6c !important; 5278 opacity: 1 !important; 5279} 5280 5281.product-variants-select:focus, 5282select[id*="ProductSelect-"]:focus { 5283 color: #1a1a1a !important; 5284 outline: 3px solid #000000ff !important; 5285} 5286</style> 5287 </div><div class="item"> 5288
5288<script> 5289(function() { 5290 class ProductCardVariantSelector { 5291 constructor(container) { 5292 this.container = container; 5293 if (!this.container) return; 5294 5295 this.form = this.container.querySelector('.product-form'); 5296 this.variantSelectors = this.container.querySelectorAll('.variant-select'); 5297 this.masterSelect = this.container.querySelector('.product-variants-select'); 5298 this.productImage = this.container.querySelector('.main-product-image'); 5299 this.priceWrapper = this.container.querySelector('[id^="ProductPrice-"]'); 5300 this.currentPriceElement = this.container.querySelector('[id^="CurrentPrice-"]'); 5301 this.comparePriceElement = this.container.querySelector('[id^="ComparePrice-"]'); 5302 this.addToCartButton = this.container.querySelector('[id^="AddToCart-"]'); 5303 this.addToCartText = this.container.querySelector('[id^="AddToCartText-"]'); 5304 this.notifyMeButton = this.container.querySelector('[id^="NotifyMe-"]'); 5305 this.variantsJsonScript = this.container.querySelector('[id^="VariantsJson-"]'); 5306 this.dataStore = this.container.querySelector('[id^="DataStore-"]'); 5307 this.saleTag = this.container.querySelector('.hc-sale-tag'); 5308 this.statusElement = this.container.querySelector('[id^="variant-status-"]'); 5309 5310 if (!this.masterSelect || !this.variantsJsonScript) return; 5311 5312 try { 5313 this.productVariants = JSON.parse(this.variantsJsonScript.textContent); 5314 } catch (e) { return; } 5315 5316 this.mainImageUrl = this.dataStore ? this.dataStore.dataset.mainImageUrl : null; 5317 this.productTitle = this.dataStore ? this.dataStore.dataset.productTitle : ''; 5318 5319 this.init(); 5320 } 5321 5322 init() { 5323 // --- iOS-safe image tap handling (works on iPhone 16, 17 Pro Max, etc.) --- 5324 if (this.productImage) { 5325 let touchStartX = 0, touchStartY = 0, touchMoved = false; 5326 let lastTouchTime = 0; 5327 5328 this.productImage.style.cursor = 'pointer'; 5329 this.productImage.setAttribute('role', 'button'); 5330 this.productImage.setAttribute('tabindex', '0'); 5331 5332 this.productImage.addEventListener('touchstart', (e) => { 5333 const t = e.touches[0]; 5334 touchStartX = t.clientX; 5335 touchStartY = t.clientY; 5336 touchMoved = false; 5337 }, { passive: true }); 5338 5339 this.productImage.addEventListener('touchmove', (e) => { 5340 const t = e.touches[0]; 5341 if (Math.abs(t.clientX - touchStartX) > 10 || 5342 Math.abs(t.clientY - touchStartY) > 10) { 5343 touchMoved = true; 5344 } 5345 }, { passive: true }); 5346 5347 this.productImage.addEventListener('touchend', (e) => { 5348 if (touchMoved) return; 5349 lastTouchTime = Date.now(); 5350 e.preventDefault(); 5351 this.onImageTap(e); 5352 }, { passive: false }); 5353 5354 // Desktop / non-touch fallback (with double-fire protection after touchend) 5355 this.productImage.addEventListener('click', (e) => { 5356 if (Date.now() - lastTouchTime < 500) return; 5357 this.onImageTap(e); 5358 }); 5359 5360 this.productImage.addEventListener('keydown', (e) => { 5361 if (e.key === 'Enter' || e.key === ' ') { 5362 e.preventDefault(); 5363 this.onImageTap(e); 5364 } 5365 }); 5366 } 5367 5368 // --- Variant select listeners --- 5369 if (this.variantSelectors.length > 0) { 5370 this.variantSelectors.forEach(select => { 5371 select.addEventListener('change', this.onVariantChange.bind(this)); 5372 }); 5373 this.updateProductDetails(this.getCurrentVariant()); 5374 } 5375 } 5376 5377 // ============================================================ 5378 // CHANGE THIS IF YOU WANT DIFFERENT TAP BEHAVIOR 5379 // Currently: navigates to the product page. 5380 // ============================================================ 5381 onImageTap(e) { 5382 const link = this.container.querySelector('.product-title-link'); 5383 if (link && link.href && link.href !== '#') { 5384 window.location.href = link.href; 5385 } 5386 } 5387 // ============================================================ 5388 5389 onVariantChange() { 5390 const selectedOptions = Array.from(this.variantSelectors).map(s => s.value); 5391 const matchedVariant = this.findMatchingVariant(selectedOptions); 5392 5393 if (matchedVariant) { 5394 this.masterSelect.value = matchedVariant.id; 5395 this.updateProductDetails(matchedVariant); 5396 if (this.statusElement) this.statusElement.textContent = ''; 5397 } else { 5398 if (this.statusElement) { 5399 this.statusElement.textContent = 'No available variant matches your selection'; 5400 } 5401 this.updateProductDetails(null); 5402 } 5403 } 5404 5405 findMatchingVariant(selectedOptions) { 5406 return this.productVariants.find(variant => { 5407 if (!variant.options || variant.options.length !== selectedOptions.length) return false;
5408 return selectedOptions.every((val, i) => variant.options[i] === val); 5409 }); 5410 } 5411 5412 getCurrentVariant() { 5413 if (!this.masterSelect) return null; 5414 const id = this.masterSelect.value; 5415 if (!id) return null; 5416 return this.productVariants.find(v => String(v.id) === String(id)) || null; 5417 } 5418 5419 // Shopify CDN: insert _WIDTHx before extension for a properly sized image 5420 sizedImageUrl(src, width) { 5421 if (!src) return src; 5422 return src.replace(/(\.[a-z]{3,4})(\?|$)/i, `_${width}x$1$2`); 5423 } 5424 5425 updateProductDetails(variant) { 5426 this.container.setAttribute('aria-busy', 'true'); 5427 5428 if (!variant) { 5429 if (this.addToCartButton) this.addToCartButton.disabled = true; 5430 if (this.addToCartText) this.addToCartText.textContent = 'Unavailable'; 5431 if (this.notifyMeButton) this.notifyMeButton.style.display = 'none'; 5432 if (this.priceWrapper) this.priceWrapper.classList.remove('sale'); 5433 if (this.comparePriceElement) this.comparePriceElement.style.display = 'none'; 5434 if (this.saleTag) this.saleTag.style.display = 'none'; 5435 this.container.setAttribute('aria-busy', 'false'); 5436 return; 5437 } 5438 5439 // 1. Image 5440 if (this.productImage) { 5441 if (variant.featured_image && variant.featured_image.src) { 5442 const sized = this.sizedImageUrl(variant.featured_image.src, 300); 5443 const variantOptions = variant.options ? variant.options.join(' - ') : ''; 5444 this.productImage.src = sized; 5445 this.productImage.srcset = ''; 5446 this.productImage.alt = variant.featured_image.alt 5447 ? variant.featured_image.alt 5448 : (this.productTitle + (variantOptions ? ' - ' + variantOptions : '')); 5449 } else if (this.mainImageUrl) { 5450 this.productImage.src = this.mainImageUrl; 5451 this.productImage.srcset = ''; 5452 this.productImage.alt = this.productTitle; 5453 } 5454 } 5455 5456 // 2. Price 5457 const moneyFormat = "${{amount}}"; 5458 const formatMoney = (cents, format) => { 5459 if (typeof cents === 'string') cents = cents.replace('.', ''); 5460 let value = ''; 5461 const placeholderRegex = /\{\{\s*(\w+)\s*\}\}/; 5462 const formatString = (format || moneyFormat).replace(/<[^>]*>/g, ''); 5463 5464 function formatWithDelimiters(number, precision, thousands, decimal) { 5465 precision = precision ?? 2; 5466 thousands = thousands ?? ','; 5467 decimal = decimal ?? '.'; 5468 if (isNaN(number) || number == null) return 0; 5469 number = (number / 100.0).toFixed(precision); 5470 const parts = number.split('.'); 5471 const dollars = parts[0].replace(/(\d)(?=(\d\d\d)+(?!\d))/g, '$1' + thousands); 5472 const centsPart = parts[1] ? (decimal + parts[1]) : ''; 5473 return dollars + centsPart; 5474 } 5475 5476 switch (formatString.match(placeholderRegex)?.[1]) { 5477 case 'amount': value = formatWithDelimiters(cents, 2); break; 5478 case 'amount_no_decimals': value = formatWithDelimiters(cents, 0); break; 5479 case 'amount_with_comma_separator': value = formatWithDelimiters(cents, 2, '.', ','); break; 5480 case 'amount_no_decimals_with_comma_separator': value = formatWithDelimiters(cents, 0, '.', ','); break; 5481 case 'amount_with_apostrophe_separator': value = formatWithDelimiters(cents, 2, "'", "."); break; 5482 case 'amount_no_decimals_with_space_separator': value = formatWithDelimiters(cents, 0, " ", ","); break; 5483 case 'amount_with_space_separator': value = formatWithDelimiters(cents, 2, " ", ","); break; 5484 default: value = formatWithDelimiters(cents, 2); 5485 } 5486 try { 5487 return formatString.replace(placeholderRegex, value); 5488 } catch (e) { 5489 const fallback = (cents / 100.0).toFixed(2); 5490 return formatString.includes('') 5491 ? formatString.replace(placeholderRegex, fallback) 5492 : fallback; 5493 } 5494 }; 5495 5496 if (this.currentPriceElement) { 5497 this.currentPriceElement.textContent = formatMoney(variant.price, moneyFormat); 5498 } 5499 if (this.comparePriceElement && this.priceWrapper) { 5500 if (variant.compare_at_price && variant.compare_at_price > variant.price) { 5501 this.comparePriceElement.textContent = formatMoney(variant.compare_at_price, moneyFormat); 5502 this.comparePriceElement.style.display = ''; 5503 this.priceWrapper.classList.add('sale'); 5504 } else { 5505 this.comparePriceElement.textContent = ''; 5506 this.comparePriceElement.style.display = 'none'; 5507 this.priceWrapper.classList.remove('sale'); 5508 } 5509 } 5510 5511 // 3. Sale tag 5512 if (this.saleTag) { 5513 const isDiscounted = variant.compare_at_price && variant.compare_at_price > variant.price; 5514 if (isDiscounted && variant.available) { 5515 this.saleTag.style.display = 'block'; 5516 const discount = Math.round((variant.compare_at_price - variant.price) * 100.0 / variant.compare_at_price); 5517 const span = this.saleTag.querySelector('span'); 5518 if (span) span.textContent = discount + '%'; 5519 this.saleTag.setAttribute('aria-label', 'Save ' + discount + '%'); 5520 this.saleTag.setAttribute('role', 'status'); 5521 } else { 5522 this.saleTag.style.display = 'none'; 5523 } 5524 } 5525 5526 // 4. Add to cart 5527 if (this.addToCartButton && this.addToCartText) { 5528 if (variant.available) { 5529 this.addToCartButton.disabled = false;
5530 this.addToCartText.innerHTML = 'Add to Cart <i class="cart-icon"></i>'; 5531 this.addToCartButton.setAttribute('aria-label', 'Add to Cart - Add ' + this.productTitle + ' to cart'); 5532 if (this.notifyMeButton) this.notifyMeButton.style.display = 'none'; 5533 } else { 5534 this.addToCartButton.disabled = true; 5535 this.addToCartText.textContent = 'Sold Out'; 5536 this.addToCartButton.setAttribute('aria-label', 'Sold Out - ' + this.productTitle + ' is sold out'); 5537 if (this.notifyMeButton) this.notifyMeButton.style.display = 'block'; 5538 } 5539 } 5540 if (this.notifyMeButton) { 5541 this.notifyMeButton.setAttribute('data-variant-id', variant.id); 5542 } 5543 5544 this.container.setAttribute('aria-busy', 'false'); 5545 } 5546 } 5547 5548 function initProductCards(root) { 5549 root = root || document; 5550 root.querySelectorAll('.product-card-wrapper[data-product-id]').forEach(cardContainer => { 5551 if (cardContainer.dataset.variantSelectorInit === 'true') return; 5552 cardContainer.dataset.variantSelectorInit = 'true'; 5553 new ProductCardVariantSelector(cardContainer); 5554 }); 5555 } 5556 5557 if (document.readyState === 'loading') { 5558 document.addEventListener('DOMContentLoaded', () => initProductCards()); 5559 } else { 5560 initProductCards(); 5561 } 5562 5563 document.addEventListener('shopify:section:load', (e) => initProductCards(e.target)); 5564})(); 5565</script>
5565<div class="product-card-wrapper" data-product-id="8025578602818" aria-busy="false"> 5566 5567 <div class="product-image" id="ProductImageWrapper-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025578602818"><!-- WISHLIST BUTTON --> 5568 <div class='xb-wishlist__btn-custom'> 5569 <div 5570 class='xb-wishlist__add' 5571 xb-product-id='8025578602818' 5572 xb-product-title='Peppermint Essential Oil' 5573 xb-product-variant='44111590523202' 5574 xb-is-in-stock='true' 5575 xb-product-handle='peppermint-essential-oil' 5576 > 5577 <button aria-label="Add Peppermint Essential Oil to wishlist" aria-pressed="false"> 5578 <svg 5579 xmlns='http://www.w3.org/2000/svg' 5580 width='20' 5581 height='20' 5582 viewBox='0 0 24 24' 5583 fill='none' 5584 stroke='#FF4A71' 5585 stroke-width='2' 5586 stroke-linecap='round' 5587 stroke-linejoin='round' 5588 aria-hidden='true' 5589 focusable='false' 5590 > 5591 <path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"></path> 5592 </svg> 5593 </button> 5594 </div> 5595 5596 <div class="xb-wishlist__loading" xb-product-id="8025578602818"> 5597 <span class="loading-spinner"></span> 5598 </div> 5599 5600 <div class='xb-wishlist__remove' xb-product-id='8025578602818' xb-is-in-stock='true'> 5601 <button aria-label="Remove Peppermint Essential Oil from wishlist" aria-pressed="true"> 5602 <svg 5603 xmlns='http://www.w3.org/2000/svg' 5604 width='20' 5605 height='20'
5606 viewBox='0 0 24 24' 5607 fill='#FF4A71' 5608 stroke='#FF4A71' 5609 stroke-width='2' 5610 stroke-linecap='round' 5611 stroke-linejoin='round' 5612 aria-hidden='true' 5613 focusable='false' 5614 > 5615 <path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"></path> 5616 </svg> 5617 </button> 5618 </div> 5619 </div><img 5620 id="ProductImage-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025578602818" 5621 class="main-product-image" 5622 src="//www.rockymountainoils.com/cdn/shop/files/Peppermint15mlwebsite_d09e348f-d8c6-468f-ae48-e457fb5e6084.png?crop=center&height=300&v=1757138804&width=300" 5623 alt="Affordable Peppermint Essential Oil 15ml" 5624 width="300" 5625 height="300" 5626 loading="lazy" 5627 /></div> 5628 5629 <div class="product-content"> 5630 <div class="product-title"> 5631 <a href="/products/peppermint-essential-oil" class="product-title-link" aria-label="View Peppermint Essential Oil"> 5632 <h2>Peppermint Essential Oil</h2> 5633 </a> 5634 </div><div> 5635 <div class="product-subtitle"> 5636 Strong minty, cool, and invigorating aroma 5637 </div> 5638 </div><div class="yotpo-widget-instance" data-yotpo-instance-id="503375" data-yotpo-product-id="8025578602818" data-yotpo-cart-product-id="" data-yotpo-section-id="index"></div><!-- START Variant Selection Form --> 5639 <div class="product-data-store" style="display:none;" 5640 data-main-image-url="//www.rockymountainoils.com/cdn/shop/files/Peppermint15mlwebsite_d09e348f-d8c6-468f-ae48-e457fb5e6084.png?v=1757138804&width=300" 5641 data-product-title="Peppermint Essential Oil" 5642 id="DataStore-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025578602818"> 5643 </div> 5644 5645
5645<script id="VariantsJson-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025578602818" type="application/json"> 5646 [{"id":44111590523202,"title":"15ml","option1":"15ml","option2":null,"option3":null,"sku":"PEPUSA-S15","requires_shipping":true,"taxable":true,"featured_image":{"id":43885337477442,"product_id":8025578602818,"position":1,"created_at":"2024-01-22T08:35:55-07:00","updated_at":"2025-09-06T00:06:44-06:00","alt":"Affordable Peppermint Essential Oil 15ml","width":570,"height":570,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/Peppermint15mlwebsite_d09e348f-d8c6-468f-ae48-e457fb5e6084.png?v=1757138804","variant_ids":[44111590523202]},"available":true,"name":"Peppermint Essential Oil - 15ml","public_title":"15ml","options":["15ml"],"price":1695,"weight":45,"compare_at_price":null,"inventory_management":"shopify","barcode":"053176176444","featured_media":{"alt":"Affordable Peppermint Essential Oil 15ml","id":36355713270082,"position":1,"preview_image":{"aspect_ratio":1.0,"height":570,"width":570,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/Peppermint15mlwebsite_d09e348f-d8c6-468f-ae48-e457fb5e6084.png?v=1757138804"}},"requires_selling_plan":false,"selling_plan_allocations":[{"price_adjustments":[{"position":1,"price":1187}],"price":1187,"compare_at_price":1695,"per_delivery_price":1187,"selling_plan_id":691785924975,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":1441},{"position":2,"price":1356}],"price":1441,"compare_at_price":1695,"per_delivery_price":1441,"selling_plan_id":691785957743,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":1526},{"position":2,"price":1441}],"price":1526,"compare_at_price":1695,"per_delivery_price":1526,"selling_plan_id":691785990511,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":1610},{"position":2,"price":1526}],"price":1610,"compare_at_price":1695,"per_delivery_price":1610,"selling_plan_id":691786023279,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":1526},{"position":2,"price":1441}],"price":1526,"compare_at_price":1695,"per_delivery_price":1526,"selling_plan_id":691786088815,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":1610},{"position":2,"price":1526}],"price":1610,"compare_at_price":1695,"per_delivery_price":1610,"selling_plan_id":691786121583,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":1441},{"position":2,"price":1356}],"price":1441,"compare_at_price":1695,"per_delivery_price":1441,"selling_plan_id":691795362159,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":1526},{"position":2,"price":1441}],"price":1526,"compare_at_price":1695,"per_delivery_price":1526,"selling_plan_id":691795394927,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":1610},{"position":2,"price":1526}],"price":1610,"compare_at_price":1695,"per_delivery_price":1610,"selling_plan_id":691795427695,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"}],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":48687360737602,"title":"4oz","option1":"4oz","option2":null,"option3":null,"sku":"PEPUSA-4OZ","requires_shipping":true,"taxable":true,"featured_image":{"id":43452627419458,"product_id":8025578602818,"position":3,"created_at":"2023-11-28T09:09:02-07:00","updated_at":"2025-09-06T00:06:44-06:00","alt":"Peppermint Essential Oil - 4oz - Rocky Mountain Oils","width":791,"height":791,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/peppermint-essential-oil-4oz-4.jpg?v=1757138804","variant_ids":[48687360737602]},"available":true,"name":"Peppermint Essential Oil - 4oz","public_title":"4oz","options":["4oz"],"price":4095,"weight":113,"compare_at_price":null,"inventory_management":"shopify","barcode":"053176183190","featured_media":{"alt":"Peppermint Essential Oil - 4oz - Rocky Mountain Oils","id":35909396431170,"position":3,"preview_image":{"aspect_ratio":1.0,"height":791,"width":791,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/peppermint-essential-oil-4oz-4.jpg?v=1757138804"}},"requires_selling_plan":false,"selling_plan_allocations":[{"price_adjustments":[{"position":1,"price":2867}],"price":2867,"compare_at_price":4095,"per_delivery_price":2867,"selling_plan_id":691785924975,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":3481},{"position":2,"price":3276}],"price":3481,"compare_at_price":4095,"per_delivery_price":3481,"selling_plan_id":691785957743,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":3686},{"position":2,"price":3481}],"price":3686,"compare_at_price":4095,"per_delivery_price":3686,"selling_plan_id":691785990511,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":3890},{"position":2,"price":3686}],"price":3890,"compare_at_price":4095,"per_delivery_price":3890,"selling_plan_id":691786023279,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":3686},{"position":2,"price":3481}],"price":3686,"compare_at_price":4095,"per_delivery_price":3686,"selling_plan_id":691786088815,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":3890},{"position":2,"price":3686}],"price":3890,"compare_at_price":4095,"per_delivery_price":3890,"selling_plan_id":691786121583,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":3481},{"position":2,"price":3276}],"price":3481,"compare_at_price":4095,"per_delivery_price":3481,"selling_plan_id":691795362159,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":3686},{"position":2,"price":3481}],"price":3686,"compare_at_price":4095,"per_delivery_price":3686,"selling_plan_id":691795394927,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":3890},{"position":2,"price":3686}],"price":3890,"compare_at_price":4095,"per_delivery_price":3890,"selling_plan_id":691795427695,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"}],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":48687360770370,"title":"5ml","option1":"5ml","option2":null,"option3":null,"sku":"PEPUSA-S5","requires_shipping":true,"taxable":true,"featured_image":{"id":43885332595010,"product_id":8025578602818,"position":5,"created_at":"2024-01-22T08:35:07-07:00","updated_at":"2025-04-11T00:02:05-06:00","alt":"Peppermint Essential Oil - 5ml - Rocky Mountain Oils","width":570,"height":570,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/Pep
5646permint5mlwebsite.png?v=1744351325","variant_ids":[48687360770370]},"available":true,"name":"Peppermint Essential Oil - 5ml","public_title":"5ml","options":["5ml"],"price":995,"weight":28,"compare_at_price":null,"inventory_management":"shopify","barcode":"053176176451","featured_media":{"alt":"Peppermint Essential Oil - 5ml - Rocky Mountain Oils","id":36355708485954,"position":5,"preview_image":{"aspect_ratio":1.0,"height":570,"width":570,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/Peppermint5mlwebsite.png?v=1744351325"}},"requires_selling_plan":false,"selling_plan_allocations":[{"price_adjustments":[{"position":1,"price":697}],"price":697,"compare_at_price":995,"per_delivery_price":697,"selling_plan_id":691785924975,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":846},{"position":2,"price":796}],"price":846,"compare_at_price":995,"per_delivery_price":846,"selling_plan_id":691785957743,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":896},{"position":2,"price":846}],"price":896,"compare_at_price":995,"per_delivery_price":896,"selling_plan_id":691785990511,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":945},{"position":2,"price":896}],"price":945,"compare_at_price":995,"per_delivery_price":945,"selling_plan_id":691786023279,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":896},{"position":2,"price":846}],"price":896,"compare_at_price":995,"per_delivery_price":896,"selling_plan_id":691786088815,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":945},{"position":2,"price":896}],"price":945,"compare_at_price":995,"per_delivery_price":945,"selling_plan_id":691786121583,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":846},{"position":2,"price":796}],"price":846,"compare_at_price":995,"per_delivery_price":846,"selling_plan_id":691795362159,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":896},{"position":2,"price":846}],"price":896,"compare_at_price":995,"per_delivery_price":896,"selling_plan_id":691795394927,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":945},{"position":2,"price":896}],"price":945,"compare_at_price":995,"per_delivery_price":945,"selling_plan_id":691795427695,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"}],"quantity_rule":{"min":1,"max":null,"increment":1}}] 5647 </script>
5647<form method="post" action="/cart/add" id="product-form-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025578602818" accept-charset="UTF-8" class="product-variants product-form" enctype="multipart/form-data" data-productid="8025578602818" novalidate="novalidate" data-type="add-to-cart-form"><input type="hidden" name="form_type" value="product" /><input type="hidden" name="utf8" value="â" /><div class="product-price-option"> 5648 <div class="product-price" id="ProductPrice-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025578602818" aria-live="polite" aria-atomic="true"> 5649 <span class="compare-at-price" id="ComparePrice-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025578602818" style="display: none;"></span> 5650 <span class="current-price" id="CurrentPrice-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025578602818">$16.95</span> 5651 5652 5653 </div> 5654 5655 5656 <div class="product-option"> 5657 <label for="Option-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025578602818-0" class="visually-hidden"> 5658 Select Size for Peppermint Essential Oil 5659 </label> 5660 <select 5661 id="Option-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025578602818-0" 5662 class="variant-select" 5663 name="options[Size]" 5664 form="product-form-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025578602818" 5665 data-index="option0" 5666 ><option 5667 value="15ml" 5668 selected="selected" 5669 > 5670 15ml 5671 </option><option 5672 value="4oz" 5673 5674 > 5675 4oz 5676 </option><option 5677 value="5ml" 5678 5679 > 5680 5ml 5681 </option></select> 5682 </div> 5683 5684 </div><label for="ProductSelect-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025578602818" class="visually-hidden"> 5685 Choose variant for Peppermint Essential Oil 5686 </label> 5687 <select 5688 name="id" 5689 data-productid="8025578602818" 5690 id="ProductSelect-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025578602818" 5691 class="product-variants-select no-js-only" 5692 ><option 5693 value="44111590523202" 5694 selected="selected" 5695 5696 > 5697 15ml - $16.95 5698 </option><option 5699 value="48687360737602" 5700 5701 5702 > 5703 4oz - $40.95 5704 </option><option 5705 value="48687360770370" 5706 5707 5708 > 5709 5ml - $9.95 5710 </option></select> 5711 5712 <div class="product-addtocart" id="AddToCartWrapper-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025578602818"> 5713 <input type="hidden" name="quantity" value="1"> 5714 5715 5716 <div class="visually-hidden" role="status" id="variant-status-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025578602818" aria-live="assertive"></div> 5717
5718 <span id="cart-action-desc-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025578602818" class="visually-hidden">Adds item to your shopping cart</span> 5719 5720 <button 5721 class="addtocart-btn add-to-cart" 5722 type="submit" 5723 name="add" 5724 aria-label="Add to Cart - Add Peppermint Essential Oil to cart" 5725 aria-describedby="cart-action-desc-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025578602818" 5726 id="AddToCart-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025578602818" 5727 5728 > 5729 <span id="AddToCartText-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025578602818">Add to Cart <i class="cart-icon" aria-hidden="true"></i></span> 5730 </button> 5731 </div><input type="hidden" name="product-id" value="8025578602818" /><input type="hidden" name="section-id" value="template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1" /></form><!-- END Variant Selection Form --></div>
5731<script type="application/ld+json"> 5732 { 5733 "@context": "http://schema.org/", 5734 "@type": "Product", 5735 "name": "Peppermint Essential Oil", 5736 "url": "https:\/\/www.rockymountainoils.com\/products\/peppermint-essential-oil","image": [ 5737 "https:\/\/www.rockymountainoils.com\/cdn\/shop\/files\/Peppermint15mlwebsite_d09e348f-d8c6-468f-ae48-e457fb5e6084.png?v=1757138804\u0026width=570" 5738 ], 5739 "description": "Peppermint essential oil offers a refreshing and potent solution for various wellness needs. Its cooling properties make it excellent for pain relief when properly diluted, soothing sore muscles and easing headaches. The invigorating scent can boost mental clarity and energy levels, while also helping to alleviate digestive discomfort. Whether diffused for aromatherapy or applied topically, this versatile oil provides natural support for body and mind.\n\n\n\nAdd peppermint essential oil to DIY cleaning sprays to refresh your home and keep it free from germs. Use this oil to boost your mental health as well as encourage creativity and self-confidence. Diffuser peppermint essential oil to uplift your mood, ease tensions, and calm overwhelming emotions.\nOur peppermint essential oil is extracted from the plantâs leaf using steam distillation. This is the most common way to extract oils from a plant. By combining gentle pressure and heated steam, steam distillation releases the essential oil from the plant and into the steam vapor.\nLearn More About Peppermint\n\n\n\nThe statements contained herein have not been evaluated by the Food and Drug Administration. Neither Rocky Mountain Oils nor its products are intended for the purpose of diagnosing, treating, curing or preventing any disease. If you are pregnant, nursing, taking medication, or have a medical condition, consult your physician before using these products.","sku": "PEPUSA-S15", 5740 "brand": { 5741 "@type": "Brand", 5742 "name": "Rocky Mountain Oils" 5743 }, 5744 "offers": { 5745 "@type": "AggregateOffer", 5746 "availability": "http://schema.org/InStock", 5747 "priceCurrency": "USD", 5748 "highPrice": 40.95, 5749 "lowPrice": 9.95, 5750 "offerCount": 3, 5751 "offers": [{ 5752 "@type" : "Offer","sku": "PEPUSA-S15","gtin12": "053176176444","availability" : "http://schema.org/InStock", 5753 "price" : 16.95, 5754 "priceCurrency" : "USD", 5755 "priceValidUntil": "2026-12-31", 5756 "url" : "https:\/\/www.rockymountainoils.com\/products\/peppermint-essential-oil?variant=44111590523202" 5757 }, 5758{ 5759 "@type" : "Offer","sku": "PEPUSA-4OZ","gtin12": "053176183190","availability" : "http://schema.org/InStock", 5760 "price" : 40.95, 5761 "priceCurrency" : "USD", 5762 "priceValidUntil": "2026-12-31", 5763 "url" : "https:\/\/www.rockymountainoils.com\/products\/peppermint-essential-oil?variant=48687360737602" 5764 }, 5765{ 5766 "@type" : "Offer","sku": "PEPUSA-S5","gtin12": "053176176451","availability" : "http://schema.org/InStock", 5767 "price" : 9.95, 5768 "priceCurrency" : "USD", 5769 "priceValidUntil": "2026-12-31", 5770 "url" : "https:\/\/www.rockymountainoils.com\/products\/peppermint-essential-oil?variant=48687360770370" 5771 } 5772] 5773 } 5774 } 5775 </script>
5775</div> 5776 5777<style> 5778/* Ensure visually-hidden utility exists even if theme lacks it */ 5779.visually-hidden { 5780 position: absolute !important; 5781 width: 1px !important; 5782 height: 1px !important; 5783 padding: 0 !important; 5784 margin: -1px !important; 5785 overflow: hidden !important; 5786 clip: rect(0, 0, 0, 0) !important; 5787 white-space: nowrap !important; 5788 border: 0 !important; 5789} 5790 5791/* Ensure the main product image is tappable on iOS */ 5792.main-product-image { 5793 cursor: pointer; 5794 -webkit-tap-highlight-color: rgba(0,0,0,0.05); 5795 touch-action: manipulation; 5796} 5797 5798/* ULTIMATE FIX - Override anything that hides select text */ 5799.product-variants-select, 5800.product-variants-select.no-js-only, 5801select.product-variants-select, 5802select[id*="ProductSelect-"] { 5803 color: #1a1a1a !important; 5804 opacity: 1 !important; 5805 background-color: #ffffff !important; 5806 -webkit-text-fill-color: #1a1a1a !important; 5807} 5808 5809.product-variants-select option, 5810select[id*="ProductSelect-"] option { 5811 color: #1a1a1a !important; 5812 background-color: #ffffff !important; 5813 -webkit-text-fill-color: #1a1a1a !important; 5814} 5815 5816.product-variants-select option:checked, 5817select[id*="ProductSelect-"] option:checked { 5818 color: #1a1a1a !important; 5819 background-color: #e8f0fe !important; 5820} 5821 5822.product-variants-select option:disabled, 5823select[id*="ProductSelect-"] option:disabled { 5824 color: #6c6c6c !important; 5825 background-color: #f5f5f5 !important; 5826 -webkit-text-fill-color: #6c6c6c !important; 5827 opacity: 1 !important; 5828} 5829 5830.product-variants-select:focus, 5831select[id*="ProductSelect-"]:focus { 5832 color: #1a1a1a !important; 5833 outline: 3px solid #000000ff !important; 5834} 5835</style> 5836 </div><div class="item"> 5837
5837<script> 5838(function() { 5839 class ProductCardVariantSelector { 5840 constructor(container) { 5841 this.container = container; 5842 if (!this.container) return; 5843 5844 this.form = this.container.querySelector('.product-form'); 5845 this.variantSelectors = this.container.querySelectorAll('.variant-select'); 5846 this.masterSelect = this.container.querySelector('.product-variants-select'); 5847 this.productImage = this.container.querySelector('.main-product-image'); 5848 this.priceWrapper = this.container.querySelector('[id^="ProductPrice-"]'); 5849 this.currentPriceElement = this.container.querySelector('[id^="CurrentPrice-"]'); 5850 this.comparePriceElement = this.container.querySelector('[id^="ComparePrice-"]'); 5851 this.addToCartButton = this.container.querySelector('[id^="AddToCart-"]'); 5852 this.addToCartText = this.container.querySelector('[id^="AddToCartText-"]'); 5853 this.notifyMeButton = this.container.querySelector('[id^="NotifyMe-"]'); 5854 this.variantsJsonScript = this.container.querySelector('[id^="VariantsJson-"]'); 5855 this.dataStore = this.container.querySelector('[id^="DataStore-"]'); 5856 this.saleTag = this.container.querySelector('.hc-sale-tag'); 5857 this.statusElement = this.container.querySelector('[id^="variant-status-"]'); 5858 5859 if (!this.masterSelect || !this.variantsJsonScript) return; 5860 5861 try { 5862 this.productVariants = JSON.parse(this.variantsJsonScript.textContent); 5863 } catch (e) { return; } 5864 5865 this.mainImageUrl = this.dataStore ? this.dataStore.dataset.mainImageUrl : null; 5866 this.productTitle = this.dataStore ? this.dataStore.dataset.productTitle : ''; 5867 5868 this.init(); 5869 } 5870 5871 init() { 5872 // --- iOS-safe image tap handling (works on iPhone 16, 17 Pro Max, etc.) --- 5873 if (this.productImage) { 5874 let touchStartX = 0, touchStartY = 0, touchMoved = false; 5875 let lastTouchTime = 0; 5876 5877 this.productImage.style.cursor = 'pointer'; 5878 this.productImage.setAttribute('role', 'button'); 5879 this.productImage.setAttribute('tabindex', '0'); 5880 5881 this.productImage.addEventListener('touchstart', (e) => { 5882 const t = e.touches[0]; 5883 touchStartX = t.clientX; 5884 touchStartY = t.clientY; 5885 touchMoved = false; 5886 }, { passive: true }); 5887 5888 this.productImage.addEventListener('touchmove', (e) => { 5889 const t = e.touches[0]; 5890 if (Math.abs(t.clientX - touchStartX) > 10 || 5891 Math.abs(t.clientY - touchStartY) > 10) { 5892 touchMoved = true; 5893 } 5894 }, { passive: true }); 5895 5896 this.productImage.addEventListener('touchend', (e) => { 5897 if (touchMoved) return; 5898 lastTouchTime = Date.now(); 5899 e.preventDefault(); 5900 this.onImageTap(e); 5901 }, { passive: false }); 5902 5903 // Desktop / non-touch fallback (with double-fire protection after touchend) 5904 this.productImage.addEventListener('click', (e) => { 5905 if (Date.now() - lastTouchTime < 500) return; 5906 this.onImageTap(e); 5907 }); 5908 5909 this.productImage.addEventListener('keydown', (e) => { 5910 if (e.key === 'Enter' || e.key === ' ') { 5911 e.preventDefault(); 5912 this.onImageTap(e); 5913 } 5914 }); 5915 } 5916 5917 // --- Variant select listeners --- 5918 if (this.variantSelectors.length > 0) { 5919 this.variantSelectors.forEach(select => { 5920 select.addEventListener('change', this.onVariantChange.bind(this)); 5921 }); 5922 this.updateProductDetails(this.getCurrentVariant()); 5923 } 5924 } 5925 5926 // ============================================================ 5927 // CHANGE THIS IF YOU WANT DIFFERENT TAP BEHAVIOR 5928 // Currently: navigates to the product page. 5929 // ============================================================ 5930 onImageTap(e) { 5931 const link = this.container.querySelector('.product-title-link'); 5932 if (link && link.href && link.href !== '#') { 5933 window.location.href = link.href; 5934 } 5935 } 5936 // ============================================================ 5937 5938 onVariantChange() { 5939 const selectedOptions = Array.from(this.variantSelectors).map(s => s.value); 5940 const matchedVariant = this.findMatchingVariant(selectedOptions); 5941 5942 if (matchedVariant) { 5943 this.masterSelect.value = matchedVariant.id; 5944 this.updateProductDetails(matchedVariant); 5945 if (this.statusElement) this.statusElement.textContent = ''; 5946 } else { 5947 if (this.statusElement) { 5948 this.statusElement.textContent = 'No available variant matches your selection'; 5949 } 5950 this.updateProductDetails(null); 5951 } 5952 } 5953 5954 findMatchingVariant(selectedOptions) { 5955 return this.productVariants.find(variant => { 5956 if (!variant.options || variant.options.length !== selectedOptions.length) return false;
5957 return selectedOptions.every((val, i) => variant.options[i] === val); 5958 }); 5959 } 5960 5961 getCurrentVariant() { 5962 if (!this.masterSelect) return null; 5963 const id = this.masterSelect.value; 5964 if (!id) return null; 5965 return this.productVariants.find(v => String(v.id) === String(id)) || null; 5966 } 5967 5968 // Shopify CDN: insert _WIDTHx before extension for a properly sized image 5969 sizedImageUrl(src, width) { 5970 if (!src) return src; 5971 return src.replace(/(\.[a-z]{3,4})(\?|$)/i, `_${width}x$1$2`); 5972 } 5973 5974 updateProductDetails(variant) { 5975 this.container.setAttribute('aria-busy', 'true'); 5976 5977 if (!variant) { 5978 if (this.addToCartButton) this.addToCartButton.disabled = true; 5979 if (this.addToCartText) this.addToCartText.textContent = 'Unavailable'; 5980 if (this.notifyMeButton) this.notifyMeButton.style.display = 'none'; 5981 if (this.priceWrapper) this.priceWrapper.classList.remove('sale'); 5982 if (this.comparePriceElement) this.comparePriceElement.style.display = 'none'; 5983 if (this.saleTag) this.saleTag.style.display = 'none'; 5984 this.container.setAttribute('aria-busy', 'false'); 5985 return; 5986 } 5987 5988 // 1. Image 5989 if (this.productImage) { 5990 if (variant.featured_image && variant.featured_image.src) { 5991 const sized = this.sizedImageUrl(variant.featured_image.src, 300); 5992 const variantOptions = variant.options ? variant.options.join(' - ') : ''; 5993 this.productImage.src = sized; 5994 this.productImage.srcset = ''; 5995 this.productImage.alt = variant.featured_image.alt 5996 ? variant.featured_image.alt 5997 : (this.productTitle + (variantOptions ? ' - ' + variantOptions : '')); 5998 } else if (this.mainImageUrl) { 5999 this.productImage.src = this.mainImageUrl; 6000 this.productImage.srcset = ''; 6001 this.productImage.alt = this.productTitle; 6002 } 6003 } 6004 6005 // 2. Price 6006 const moneyFormat = "${{amount}}"; 6007 const formatMoney = (cents, format) => { 6008 if (typeof cents === 'string') cents = cents.replace('.', ''); 6009 let value = ''; 6010 const placeholderRegex = /\{\{\s*(\w+)\s*\}\}/; 6011 const formatString = (format || moneyFormat).replace(/<[^>]*>/g, ''); 6012 6013 function formatWithDelimiters(number, precision, thousands, decimal) { 6014 precision = precision ?? 2; 6015 thousands = thousands ?? ','; 6016 decimal = decimal ?? '.'; 6017 if (isNaN(number) || number == null) return 0; 6018 number = (number / 100.0).toFixed(precision); 6019 const parts = number.split('.'); 6020 const dollars = parts[0].replace(/(\d)(?=(\d\d\d)+(?!\d))/g, '$1' + thousands); 6021 const centsPart = parts[1] ? (decimal + parts[1]) : ''; 6022 return dollars + centsPart; 6023 } 6024 6025 switch (formatString.match(placeholderRegex)?.[1]) { 6026 case 'amount': value = formatWithDelimiters(cents, 2); break; 6027 case 'amount_no_decimals': value = formatWithDelimiters(cents, 0); break; 6028 case 'amount_with_comma_separator': value = formatWithDelimiters(cents, 2, '.', ','); break; 6029 case 'amount_no_decimals_with_comma_separator': value = formatWithDelimiters(cents, 0, '.', ','); break; 6030 case 'amount_with_apostrophe_separator': value = formatWithDelimiters(cents, 2, "'", "."); break; 6031 case 'amount_no_decimals_with_space_separator': value = formatWithDelimiters(cents, 0, " ", ","); break; 6032 case 'amount_with_space_separator': value = formatWithDelimiters(cents, 2, " ", ","); break; 6033 default: value = formatWithDelimiters(cents, 2); 6034 } 6035 try { 6036 return formatString.replace(placeholderRegex, value); 6037 } catch (e) { 6038 const fallback = (cents / 100.0).toFixed(2); 6039 return formatString.includes('') 6040 ? formatString.replace(placeholderRegex, fallback) 6041 : fallback; 6042 } 6043 }; 6044 6045 if (this.currentPriceElement) { 6046 this.currentPriceElement.textContent = formatMoney(variant.price, moneyFormat); 6047 } 6048 if (this.comparePriceElement && this.priceWrapper) { 6049 if (variant.compare_at_price && variant.compare_at_price > variant.price) { 6050 this.comparePriceElement.textContent = formatMoney(variant.compare_at_price, moneyFormat); 6051 this.comparePriceElement.style.display = ''; 6052 this.priceWrapper.classList.add('sale'); 6053 } else { 6054 this.comparePriceElement.textContent = ''; 6055 this.comparePriceElement.style.display = 'none'; 6056 this.priceWrapper.classList.remove('sale'); 6057 } 6058 } 6059 6060 // 3. Sale tag 6061 if (this.saleTag) { 6062 const isDiscounted = variant.compare_at_price && variant.compare_at_price > variant.price; 6063 if (isDiscounted && variant.available) { 6064 this.saleTag.style.display = 'block'; 6065 const discount = Math.round((variant.compare_at_price - variant.price) * 100.0 / variant.compare_at_price); 6066 const span = this.saleTag.querySelector('span'); 6067 if (span) span.textContent = discount + '%'; 6068 this.saleTag.setAttribute('aria-label', 'Save ' + discount + '%'); 6069 this.saleTag.setAttribute('role', 'status'); 6070 } else { 6071 this.saleTag.style.display = 'none'; 6072 } 6073 } 6074 6075 // 4. Add to cart 6076 if (this.addToCartButton && this.addToCartText) { 6077 if (variant.available) { 6078 this.addToCartButton.disabled = false;
6079 this.addToCartText.innerHTML = 'Add to Cart <i class="cart-icon"></i>'; 6080 this.addToCartButton.setAttribute('aria-label', 'Add to Cart - Add ' + this.productTitle + ' to cart'); 6081 if (this.notifyMeButton) this.notifyMeButton.style.display = 'none'; 6082 } else { 6083 this.addToCartButton.disabled = true; 6084 this.addToCartText.textContent = 'Sold Out'; 6085 this.addToCartButton.setAttribute('aria-label', 'Sold Out - ' + this.productTitle + ' is sold out'); 6086 if (this.notifyMeButton) this.notifyMeButton.style.display = 'block'; 6087 } 6088 } 6089 if (this.notifyMeButton) { 6090 this.notifyMeButton.setAttribute('data-variant-id', variant.id); 6091 } 6092 6093 this.container.setAttribute('aria-busy', 'false'); 6094 } 6095 } 6096 6097 function initProductCards(root) { 6098 root = root || document; 6099 root.querySelectorAll('.product-card-wrapper[data-product-id]').forEach(cardContainer => { 6100 if (cardContainer.dataset.variantSelectorInit === 'true') return; 6101 cardContainer.dataset.variantSelectorInit = 'true'; 6102 new ProductCardVariantSelector(cardContainer); 6103 }); 6104 } 6105 6106 if (document.readyState === 'loading') { 6107 document.addEventListener('DOMContentLoaded', () => initProductCards()); 6108 } else { 6109 initProductCards(); 6110 } 6111 6112 document.addEventListener('shopify:section:load', (e) => initProductCards(e.target)); 6113})(); 6114</script>
6114<div class="product-card-wrapper" data-product-id="8025569132866" aria-busy="false"> 6115 6116 <div class="product-image" id="ProductImageWrapper-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025569132866"><!-- WISHLIST BUTTON --> 6117 <div class='xb-wishlist__btn-custom'> 6118 <div 6119 class='xb-wishlist__add' 6120 xb-product-id='8025569132866' 6121 xb-product-title='Purify Essential Oil Blend' 6122 xb-product-variant='44111543894338' 6123 xb-is-in-stock='true' 6124 xb-product-handle='purify-essential-oil' 6125 > 6126 <button aria-label="Add Purify Essential Oil Blend to wishlist" aria-pressed="false"> 6127 <svg 6128 xmlns='http://www.w3.org/2000/svg' 6129 width='20' 6130 height='20' 6131 viewBox='0 0 24 24' 6132 fill='none' 6133 stroke='#FF4A71' 6134 stroke-width='2' 6135 stroke-linecap='round' 6136 stroke-linejoin='round' 6137 aria-hidden='true' 6138 focusable='false' 6139 > 6140 <path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"></path> 6141 </svg> 6142 </button> 6143 </div> 6144 6145 <div class="xb-wishlist__loading" xb-product-id="8025569132866"> 6146 <span class="loading-spinner"></span> 6147 </div> 6148 6149 <div class='xb-wishlist__remove' xb-product-id='8025569132866' xb-is-in-stock='true'> 6150 <button aria-label="Remove Purify Essential Oil Blend from wishlist" aria-pressed="true"> 6151 <svg 6152 xmlns='http://www.w3.org/2000/svg' 6153 width='20' 6154 height='20'
6155 viewBox='0 0 24 24' 6156 fill='#FF4A71' 6157 stroke='#FF4A71' 6158 stroke-width='2' 6159 stroke-linecap='round' 6160 stroke-linejoin='round' 6161 aria-hidden='true' 6162 focusable='false' 6163 > 6164 <path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"></path> 6165 </svg> 6166 </button> 6167 </div> 6168 </div><img 6169 id="ProductImage-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025569132866" 6170 class="main-product-image" 6171 src="//www.rockymountainoils.com/cdn/shop/files/purify-essential-oil-blend-neat-15ml-1.png?crop=center&height=300&v=1765782157&width=300" 6172 alt="Purify Essential Oil Blend Neat - 15ml - Rocky Mountain Oils" 6173 width="300" 6174 height="300" 6175 loading="lazy" 6176 /></div> 6177 6178 <div class="product-content"> 6179 <div class="product-title"> 6180 <a href="/products/purify-essential-oil" class="product-title-link" aria-label="View Purify Essential Oil Blend"> 6181 <h2>Purify Essential Oil Blend</h2> 6182 </a> 6183 </div><div> 6184 <div class="product-subtitle"> 6185 Helps deodorize, disinfect, and freshen any space. 6186 </div> 6187 </div><div class="yotpo-widget-instance" data-yotpo-instance-id="503375" data-yotpo-product-id="8025569132866" data-yotpo-cart-product-id="" data-yotpo-section-id="index"></div><!-- START Variant Selection Form --> 6188 <div class="product-data-store" style="display:none;" 6189 data-main-image-url="//www.rockymountainoils.com/cdn/shop/files/purify-essential-oil-blend-neat-15ml-1.png?v=1765782157&width=300" 6190 data-product-title="Purify Essential Oil Blend" 6191 id="DataStore-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025569132866"> 6192 </div> 6193 6194
6194<script id="VariantsJson-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025569132866" type="application/json"> 6195 [{"id":44111543894338,"title":"15ml","option1":"15ml","option2":null,"option3":null,"sku":"PURNEA-B15","requires_shipping":true,"taxable":true,"featured_image":{"id":44621295485250,"product_id":8025569132866,"position":1,"created_at":"2024-03-27T10:18:42-06:00","updated_at":"2025-12-15T00:02:37-07:00","alt":"Purify Essential Oil Blend Neat - 15ml - Rocky Mountain Oils","width":574,"height":574,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/purify-essential-oil-blend-neat-15ml-1.png?v=1765782157","variant_ids":[44111543894338]},"available":true,"name":"Purify Essential Oil Blend - 15ml","public_title":"15ml","options":["15ml"],"price":2045,"weight":45,"compare_at_price":null,"inventory_management":"shopify","barcode":"053176178523","featured_media":{"alt":"Purify Essential Oil Blend Neat - 15ml - Rocky Mountain Oils","id":37105234837826,"position":1,"preview_image":{"aspect_ratio":1.0,"height":574,"width":574,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/purify-essential-oil-blend-neat-15ml-1.png?v=1765782157"}},"requires_selling_plan":false,"selling_plan_allocations":[{"price_adjustments":[{"position":1,"price":1432}],"price":1432,"compare_at_price":2045,"per_delivery_price":1432,"selling_plan_id":691785924975,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":1738},{"position":2,"price":1636}],"price":1738,"compare_at_price":2045,"per_delivery_price":1738,"selling_plan_id":691785957743,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":1841},{"position":2,"price":1738}],"price":1841,"compare_at_price":2045,"per_delivery_price":1841,"selling_plan_id":691785990511,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":1943},{"position":2,"price":1841}],"price":1943,"compare_at_price":2045,"per_delivery_price":1943,"selling_plan_id":691786023279,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":1841},{"position":2,"price":1738}],"price":1841,"compare_at_price":2045,"per_delivery_price":1841,"selling_plan_id":691786088815,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":1943},{"position":2,"price":1841}],"price":1943,"compare_at_price":2045,"per_delivery_price":1943,"selling_plan_id":691786121583,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":1738},{"position":2,"price":1636}],"price":1738,"compare_at_price":2045,"per_delivery_price":1738,"selling_plan_id":691795362159,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":1841},{"position":2,"price":1738}],"price":1841,"compare_at_price":2045,"per_delivery_price":1841,"selling_plan_id":691795394927,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":1943},{"position":2,"price":1841}],"price":1943,"compare_at_price":2045,"per_delivery_price":1943,"selling_plan_id":691795427695,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"}],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":48953396101442,"title":"5ml","option1":"5ml","option2":null,"option3":null,"sku":"PURNEA-B5","requires_shipping":true,"taxable":true,"featured_image":{"id":44621301154114,"product_id":8025569132866,"position":4,"created_at":"2024-03-27T10:19:10-06:00","updated_at":"2025-12-15T00:02:37-07:00","alt":"Purify Essential Oil Blend Neat - 5ml - Rocky Mountain Oils","width":562,"height":562,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/purify-essential-oil-blend-neat-5ml-1.png?v=1765782157","variant_ids":[48953396101442]},"available":true,"name":"Purify Essential Oil Blend - 5ml","public_title":"5ml","options":["5ml"],"price":1020,"weight":28,"compare_at_price":null,"inventory_management":"shopify","barcode":"053176178530","featured_media":{"alt":"Purify Essential Oil Blend Neat - 5ml - Rocky Mountain Oils","id":37105240080706,"position":4,"preview_image":{"aspect_ratio":1.0,"height":562,"width":562,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/purify-essential-oil-blend-neat-5ml-1.png?v=1765782157"}},"requires_selling_plan":false,"selling_plan_allocations":[{"price_adjustments":[{"position":1,"price":714}],"price":714,"compare_at_price":1020,"per_delivery_price":714,"selling_plan_id":691785924975,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":867},{"position":2,"price":816}],"price":867,"compare_at_price":1020,"per_delivery_price":867,"selling_plan_id":691785957743,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":918},{"position":2,"price":867}],"price":918,"compare_at_price":1020,"per_delivery_price":918,"selling_plan_id":691785990511,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":969},{"position":2,"price":918}],"price":969,"compare_at_price":1020,"per_delivery_price":969,"selling_plan_id":691786023279,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":918},{"position":2,"price":867}],"price":918,"compare_at_price":1020,"per_delivery_price":918,"selling_plan_id":691786088815,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":969},{"position":2,"price":918}],"price":969,"compare_at_price":1020,"per_delivery_price":969,"selling_plan_id":691786121583,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":867},{"position":2,"price":816}],"price":867,"compare_at_price":1020,"per_delivery_price":867,"selling_plan_id":691795362159,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":918},{"position":2,"price":867}],"price":918,"compare_at_price":1020,"per_delivery_price":918,"selling_plan_id":691795394927,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":969},{"position":2,"price":918}],"price":969,"compare_at_price":1020,"per_delivery_price":969,"selling_plan_id":691795427695,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"}],"quantity_rule":{"min":1,"max":null,"increment":1}}] 6196 </script>
6196<form method="post" action="/cart/add" id="product-form-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025569132866" accept-charset="UTF-8" class="product-variants product-form" enctype="multipart/form-data" data-productid="8025569132866" novalidate="novalidate" data-type="add-to-cart-form"><input type="hidden" name="form_type" value="product" /><input type="hidden" name="utf8" value="â" /><div class="product-price-option"> 6197 <div class="product-price" id="ProductPrice-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025569132866" aria-live="polite" aria-atomic="true"> 6198 <span class="compare-at-price" id="ComparePrice-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025569132866" style="display: none;"></span> 6199 <span class="current-price" id="CurrentPrice-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025569132866">$20.45</span> 6200 6201 6202 </div> 6203 6204 6205 <div class="product-option"> 6206 <label for="Option-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025569132866-0" class="visually-hidden"> 6207 Select Size for Purify Essential Oil Blend 6208 </label> 6209 <select 6210 id="Option-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025569132866-0" 6211 class="variant-select" 6212 name="options[Size]" 6213 form="product-form-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025569132866" 6214 data-index="option0" 6215 ><option 6216 value="15ml" 6217 selected="selected" 6218 > 6219 15ml 6220 </option><option 6221 value="5ml" 6222 6223 > 6224 5ml 6225 </option></select> 6226 </div> 6227 6228 </div><label for="ProductSelect-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025569132866" class="visually-hidden"> 6229 Choose variant for Purify Essential Oil Blend 6230 </label> 6231 <select 6232 name="id" 6233 data-productid="8025569132866" 6234 id="ProductSelect-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025569132866" 6235 class="product-variants-select no-js-only" 6236 ><option 6237 value="44111543894338" 6238 selected="selected" 6239 6240 > 6241 15ml - $20.45 6242 </option><option 6243 value="48953396101442" 6244 6245 6246 > 6247 5ml - $10.20 6248 </option></select> 6249 6250 <div class="product-addtocart" id="AddToCartWrapper-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025569132866"> 6251 <input type="hidden" name="quantity" value="1"> 6252 6253 6254 <div class="visually-hidden" role="status" id="variant-status-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025569132866" aria-live="assertive"></div> 6255 6256 <span id="cart-action-desc-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025569132866" class="visually-hidden">Adds item to your shopping cart</span> 6257 6258 <button 6259 class="addtocart-btn add-to-cart" 6260 type="submit" 6261 name="add" 6262 aria-label="Add to Cart - Add Purify Essential Oil Blend to cart" 6263 aria-describedby="cart-action-desc-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025569132866" 6264 id="AddToCart-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025569132866" 6265 6266 >
6267 <span id="AddToCartText-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025569132866">Add to Cart <i class="cart-icon" aria-hidden="true"></i></span> 6268 </button> 6269 </div><input type="hidden" name="product-id" value="8025569132866" /><input type="hidden" name="section-id" value="template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1" /></form><!-- END Variant Selection Form --></div>
6269<script type="application/ld+json"> 6270 { 6271 "@context": "http://schema.org/", 6272 "@type": "Product", 6273 "name": "Purify Essential Oil Blend", 6274 "url": "https:\/\/www.rockymountainoils.com\/products\/purify-essential-oil","image": [ 6275 "https:\/\/www.rockymountainoils.com\/cdn\/shop\/files\/purify-essential-oil-blend-neat-15ml-1.png?v=1765782157\u0026width=574" 6276 ], 6277 "description": "Purify Essential Oil Blend combines potent air-purifying oils to naturally cleanse your home. This powerful blend of lemongrass, tea tree, rosemary, lavender, myrtle, and citronella essential oils deodorizes, disinfects, and freshens any space without harsh chemicals.\nUse Purify to eliminate odors, help sanitize surfaces, deter insects, and create a clean, inviting atmosphere. Its aromatherapeutic properties can also help reduce stress and promote a sense of calm. Versatile and effective, Purify is an essential addition to your natural cleaning toolkit.","sku": "PURNEA-B15", 6278 "brand": { 6279 "@type": "Brand", 6280 "name": "Rocky Mountain Oils" 6281 }, 6282 "offers": { 6283 "@type": "AggregateOffer", 6284 "availability": "http://schema.org/InStock", 6285 "priceCurrency": "USD", 6286 "highPrice": 20.45, 6287 "lowPrice": 10.2, 6288 "offerCount": 2, 6289 "offers": [{ 6290 "@type" : "Offer","sku": "PURNEA-B15","gtin12": "053176178523","availability" : "http://schema.org/InStock", 6291 "price" : 20.45, 6292 "priceCurrency" : "USD", 6293 "priceValidUntil": "2026-12-31", 6294 "url" : "https:\/\/www.rockymountainoils.com\/products\/purify-essential-oil?variant=44111543894338" 6295 }, 6296{ 6297 "@type" : "Offer","sku": "PURNEA-B5","gtin12": "053176178530","availability" : "http://schema.org/InStock", 6298 "price" : 10.2, 6299 "priceCurrency" : "USD", 6300 "priceValidUntil": "2026-12-31", 6301 "url" : "https:\/\/www.rockymountainoils.com\/products\/purify-essential-oil?variant=48953396101442" 6302 } 6303] 6304 } 6305 } 6306 </script>
6306</div> 6307 6308<style> 6309/* Ensure visually-hidden utility exists even if theme lacks it */ 6310.visually-hidden { 6311 position: absolute !important; 6312 width: 1px !important; 6313 height: 1px !important; 6314 padding: 0 !important; 6315 margin: -1px !important; 6316 overflow: hidden !important; 6317 clip: rect(0, 0, 0, 0) !important; 6318 white-space: nowrap !important; 6319 border: 0 !important; 6320} 6321 6322/* Ensure the main product image is tappable on iOS */ 6323.main-product-image { 6324 cursor: pointer; 6325 -webkit-tap-highlight-color: rgba(0,0,0,0.05); 6326 touch-action: manipulation; 6327} 6328 6329/* ULTIMATE FIX - Override anything that hides select text */ 6330.product-variants-select, 6331.product-variants-select.no-js-only, 6332select.product-variants-select, 6333select[id*="ProductSelect-"] { 6334 color: #1a1a1a !important; 6335 opacity: 1 !important; 6336 background-color: #ffffff !important; 6337 -webkit-text-fill-color: #1a1a1a !important; 6338} 6339 6340.product-variants-select option, 6341select[id*="ProductSelect-"] option { 6342 color: #1a1a1a !important; 6343 background-color: #ffffff !important; 6344 -webkit-text-fill-color: #1a1a1a !important; 6345} 6346 6347.product-variants-select option:checked, 6348select[id*="ProductSelect-"] option:checked { 6349 color: #1a1a1a !important; 6350 background-color: #e8f0fe !important; 6351} 6352 6353.product-variants-select option:disabled, 6354select[id*="ProductSelect-"] option:disabled { 6355 color: #6c6c6c !important; 6356 background-color: #f5f5f5 !important; 6357 -webkit-text-fill-color: #6c6c6c !important; 6358 opacity: 1 !important; 6359} 6360 6361.product-variants-select:focus, 6362select[id*="ProductSelect-"]:focus { 6363 color: #1a1a1a !important; 6364 outline: 3px solid #000000ff !important; 6365} 6366</style> 6367 </div><div class="item"> 6368
6368<script> 6369(function() { 6370 class ProductCardVariantSelector { 6371 constructor(container) { 6372 this.container = container; 6373 if (!this.container) return; 6374 6375 this.form = this.container.querySelector('.product-form'); 6376 this.variantSelectors = this.container.querySelectorAll('.variant-select'); 6377 this.masterSelect = this.container.querySelector('.product-variants-select'); 6378 this.productImage = this.container.querySelector('.main-product-image'); 6379 this.priceWrapper = this.container.querySelector('[id^="ProductPrice-"]'); 6380 this.currentPriceElement = this.container.querySelector('[id^="CurrentPrice-"]'); 6381 this.comparePriceElement = this.container.querySelector('[id^="ComparePrice-"]'); 6382 this.addToCartButton = this.container.querySelector('[id^="AddToCart-"]'); 6383 this.addToCartText = this.container.querySelector('[id^="AddToCartText-"]'); 6384 this.notifyMeButton = this.container.querySelector('[id^="NotifyMe-"]'); 6385 this.variantsJsonScript = this.container.querySelector('[id^="VariantsJson-"]'); 6386 this.dataStore = this.container.querySelector('[id^="DataStore-"]'); 6387 this.saleTag = this.container.querySelector('.hc-sale-tag'); 6388 this.statusElement = this.container.querySelector('[id^="variant-status-"]'); 6389 6390 if (!this.masterSelect || !this.variantsJsonScript) return; 6391 6392 try { 6393 this.productVariants = JSON.parse(this.variantsJsonScript.textContent); 6394 } catch (e) { return; } 6395 6396 this.mainImageUrl = this.dataStore ? this.dataStore.dataset.mainImageUrl : null; 6397 this.productTitle = this.dataStore ? this.dataStore.dataset.productTitle : ''; 6398 6399 this.init(); 6400 } 6401 6402 init() { 6403 // --- iOS-safe image tap handling (works on iPhone 16, 17 Pro Max, etc.) --- 6404 if (this.productImage) { 6405 let touchStartX = 0, touchStartY = 0, touchMoved = false; 6406 let lastTouchTime = 0; 6407 6408 this.productImage.style.cursor = 'pointer'; 6409 this.productImage.setAttribute('role', 'button'); 6410 this.productImage.setAttribute('tabindex', '0'); 6411 6412 this.productImage.addEventListener('touchstart', (e) => { 6413 const t = e.touches[0]; 6414 touchStartX = t.clientX; 6415 touchStartY = t.clientY; 6416 touchMoved = false; 6417 }, { passive: true }); 6418 6419 this.productImage.addEventListener('touchmove', (e) => { 6420 const t = e.touches[0]; 6421 if (Math.abs(t.clientX - touchStartX) > 10 || 6422 Math.abs(t.clientY - touchStartY) > 10) { 6423 touchMoved = true; 6424 } 6425 }, { passive: true }); 6426 6427 this.productImage.addEventListener('touchend', (e) => { 6428 if (touchMoved) return; 6429 lastTouchTime = Date.now(); 6430 e.preventDefault(); 6431 this.onImageTap(e); 6432 }, { passive: false }); 6433 6434 // Desktop / non-touch fallback (with double-fire protection after touchend) 6435 this.productImage.addEventListener('click', (e) => { 6436 if (Date.now() - lastTouchTime < 500) return; 6437 this.onImageTap(e); 6438 }); 6439 6440 this.productImage.addEventListener('keydown', (e) => { 6441 if (e.key === 'Enter' || e.key === ' ') { 6442 e.preventDefault(); 6443 this.onImageTap(e); 6444 } 6445 }); 6446 } 6447 6448 // --- Variant select listeners --- 6449 if (this.variantSelectors.length > 0) { 6450 this.variantSelectors.forEach(select => { 6451 select.addEventListener('change', this.onVariantChange.bind(this)); 6452 }); 6453 this.updateProductDetails(this.getCurrentVariant()); 6454 } 6455 } 6456 6457 // ============================================================ 6458 // CHANGE THIS IF YOU WANT DIFFERENT TAP BEHAVIOR 6459 // Currently: navigates to the product page. 6460 // ============================================================ 6461 onImageTap(e) { 6462 const link = this.container.querySelector('.product-title-link'); 6463 if (link && link.href && link.href !== '#') { 6464 window.location.href = link.href; 6465 } 6466 } 6467 // ============================================================ 6468 6469 onVariantChange() { 6470 const selectedOptions = Array.from(this.variantSelectors).map(s => s.value); 6471 const matchedVariant = this.findMatchingVariant(selectedOptions); 6472 6473 if (matchedVariant) { 6474 this.masterSelect.value = matchedVariant.id; 6475 this.updateProductDetails(matchedVariant); 6476 if (this.statusElement) this.statusElement.textContent = ''; 6477 } else { 6478 if (this.statusElement) { 6479 this.statusElement.textContent = 'No available variant matches your selection'; 6480 } 6481 this.updateProductDetails(null); 6482 } 6483 } 6484 6485 findMatchingVariant(selectedOptions) { 6486 return this.productVariants.find(variant => { 6487 if (!variant.options || variant.options.length !== selectedOptions.length) return false;
6488 return selectedOptions.every((val, i) => variant.options[i] === val); 6489 }); 6490 } 6491 6492 getCurrentVariant() { 6493 if (!this.masterSelect) return null; 6494 const id = this.masterSelect.value; 6495 if (!id) return null; 6496 return this.productVariants.find(v => String(v.id) === String(id)) || null; 6497 } 6498 6499 // Shopify CDN: insert _WIDTHx before extension for a properly sized image 6500 sizedImageUrl(src, width) { 6501 if (!src) return src; 6502 return src.replace(/(\.[a-z]{3,4})(\?|$)/i, `_${width}x$1$2`); 6503 } 6504 6505 updateProductDetails(variant) { 6506 this.container.setAttribute('aria-busy', 'true'); 6507 6508 if (!variant) { 6509 if (this.addToCartButton) this.addToCartButton.disabled = true; 6510 if (this.addToCartText) this.addToCartText.textContent = 'Unavailable'; 6511 if (this.notifyMeButton) this.notifyMeButton.style.display = 'none'; 6512 if (this.priceWrapper) this.priceWrapper.classList.remove('sale'); 6513 if (this.comparePriceElement) this.comparePriceElement.style.display = 'none'; 6514 if (this.saleTag) this.saleTag.style.display = 'none'; 6515 this.container.setAttribute('aria-busy', 'false'); 6516 return; 6517 } 6518 6519 // 1. Image 6520 if (this.productImage) { 6521 if (variant.featured_image && variant.featured_image.src) { 6522 const sized = this.sizedImageUrl(variant.featured_image.src, 300); 6523 const variantOptions = variant.options ? variant.options.join(' - ') : ''; 6524 this.productImage.src = sized; 6525 this.productImage.srcset = ''; 6526 this.productImage.alt = variant.featured_image.alt 6527 ? variant.featured_image.alt 6528 : (this.productTitle + (variantOptions ? ' - ' + variantOptions : '')); 6529 } else if (this.mainImageUrl) { 6530 this.productImage.src = this.mainImageUrl; 6531 this.productImage.srcset = ''; 6532 this.productImage.alt = this.productTitle; 6533 } 6534 } 6535 6536 // 2. Price 6537 const moneyFormat = "${{amount}}"; 6538 const formatMoney = (cents, format) => { 6539 if (typeof cents === 'string') cents = cents.replace('.', ''); 6540 let value = ''; 6541 const placeholderRegex = /\{\{\s*(\w+)\s*\}\}/; 6542 const formatString = (format || moneyFormat).replace(/<[^>]*>/g, ''); 6543 6544 function formatWithDelimiters(number, precision, thousands, decimal) { 6545 precision = precision ?? 2; 6546 thousands = thousands ?? ','; 6547 decimal = decimal ?? '.'; 6548 if (isNaN(number) || number == null) return 0; 6549 number = (number / 100.0).toFixed(precision); 6550 const parts = number.split('.'); 6551 const dollars = parts[0].replace(/(\d)(?=(\d\d\d)+(?!\d))/g, '$1' + thousands); 6552 const centsPart = parts[1] ? (decimal + parts[1]) : ''; 6553 return dollars + centsPart; 6554 } 6555 6556 switch (formatString.match(placeholderRegex)?.[1]) { 6557 case 'amount': value = formatWithDelimiters(cents, 2); break; 6558 case 'amount_no_decimals': value = formatWithDelimiters(cents, 0); break; 6559 case 'amount_with_comma_separator': value = formatWithDelimiters(cents, 2, '.', ','); break; 6560 case 'amount_no_decimals_with_comma_separator': value = formatWithDelimiters(cents, 0, '.', ','); break; 6561 case 'amount_with_apostrophe_separator': value = formatWithDelimiters(cents, 2, "'", "."); break; 6562 case 'amount_no_decimals_with_space_separator': value = formatWithDelimiters(cents, 0, " ", ","); break; 6563 case 'amount_with_space_separator': value = formatWithDelimiters(cents, 2, " ", ","); break; 6564 default: value = formatWithDelimiters(cents, 2); 6565 } 6566 try { 6567 return formatString.replace(placeholderRegex, value); 6568 } catch (e) { 6569 const fallback = (cents / 100.0).toFixed(2); 6570 return formatString.includes('') 6571 ? formatString.replace(placeholderRegex, fallback) 6572 : fallback; 6573 } 6574 }; 6575 6576 if (this.currentPriceElement) { 6577 this.currentPriceElement.textContent = formatMoney(variant.price, moneyFormat); 6578 } 6579 if (this.comparePriceElement && this.priceWrapper) { 6580 if (variant.compare_at_price && variant.compare_at_price > variant.price) { 6581 this.comparePriceElement.textContent = formatMoney(variant.compare_at_price, moneyFormat); 6582 this.comparePriceElement.style.display = ''; 6583 this.priceWrapper.classList.add('sale'); 6584 } else { 6585 this.comparePriceElement.textContent = ''; 6586 this.comparePriceElement.style.display = 'none'; 6587 this.priceWrapper.classList.remove('sale'); 6588 } 6589 } 6590 6591 // 3. Sale tag 6592 if (this.saleTag) { 6593 const isDiscounted = variant.compare_at_price && variant.compare_at_price > variant.price; 6594 if (isDiscounted && variant.available) { 6595 this.saleTag.style.display = 'block'; 6596 const discount = Math.round((variant.compare_at_price - variant.price) * 100.0 / variant.compare_at_price); 6597 const span = this.saleTag.querySelector('span'); 6598 if (span) span.textContent = discount + '%'; 6599 this.saleTag.setAttribute('aria-label', 'Save ' + discount + '%'); 6600 this.saleTag.setAttribute('role', 'status'); 6601 } else { 6602 this.saleTag.style.display = 'none'; 6603 } 6604 } 6605 6606 // 4. Add to cart 6607 if (this.addToCartButton && this.addToCartText) { 6608 if (variant.available) { 6609 this.addToCartButton.disabled = false;
6610 this.addToCartText.innerHTML = 'Add to Cart <i class="cart-icon"></i>'; 6611 this.addToCartButton.setAttribute('aria-label', 'Add to Cart - Add ' + this.productTitle + ' to cart'); 6612 if (this.notifyMeButton) this.notifyMeButton.style.display = 'none'; 6613 } else { 6614 this.addToCartButton.disabled = true; 6615 this.addToCartText.textContent = 'Sold Out'; 6616 this.addToCartButton.setAttribute('aria-label', 'Sold Out - ' + this.productTitle + ' is sold out'); 6617 if (this.notifyMeButton) this.notifyMeButton.style.display = 'block'; 6618 } 6619 } 6620 if (this.notifyMeButton) { 6621 this.notifyMeButton.setAttribute('data-variant-id', variant.id); 6622 } 6623 6624 this.container.setAttribute('aria-busy', 'false'); 6625 } 6626 } 6627 6628 function initProductCards(root) { 6629 root = root || document; 6630 root.querySelectorAll('.product-card-wrapper[data-product-id]').forEach(cardContainer => { 6631 if (cardContainer.dataset.variantSelectorInit === 'true') return; 6632 cardContainer.dataset.variantSelectorInit = 'true'; 6633 new ProductCardVariantSelector(cardContainer); 6634 }); 6635 } 6636 6637 if (document.readyState === 'loading') { 6638 document.addEventListener('DOMContentLoaded', () => initProductCards()); 6639 } else { 6640 initProductCards(); 6641 } 6642 6643 document.addEventListener('shopify:section:load', (e) => initProductCards(e.target)); 6644})(); 6645</script>
6645<div class="product-card-wrapper" data-product-id="8025569296706" aria-busy="false"> 6646 6647 <div class="product-image" id="ProductImageWrapper-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025569296706"><!-- WISHLIST BUTTON --> 6648 <div class='xb-wishlist__btn-custom'> 6649 <div 6650 class='xb-wishlist__add' 6651 xb-product-id='8025569296706' 6652 xb-product-title='Rosemary Essential Oil' 6653 xb-product-variant='44111544451394' 6654 xb-is-in-stock='true' 6655 xb-product-handle='rosemary-essential-oil' 6656 > 6657 <button aria-label="Add Rosemary Essential Oil to wishlist" aria-pressed="false"> 6658 <svg 6659 xmlns='http://www.w3.org/2000/svg' 6660 width='20' 6661 height='20' 6662 viewBox='0 0 24 24' 6663 fill='none' 6664 stroke='#FF4A71' 6665 stroke-width='2' 6666 stroke-linecap='round' 6667 stroke-linejoin='round' 6668 aria-hidden='true' 6669 focusable='false' 6670 > 6671 <path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"></path> 6672 </svg> 6673 </button> 6674 </div> 6675 6676 <div class="xb-wishlist__loading" xb-product-id="8025569296706"> 6677 <span class="loading-spinner"></span> 6678 </div> 6679 6680 <div class='xb-wishlist__remove' xb-product-id='8025569296706' xb-is-in-stock='true'> 6681 <button aria-label="Remove Rosemary Essential Oil from wishlist" aria-pressed="true"> 6682 <svg 6683 xmlns='http://www.w3.org/2000/svg' 6684 width='20' 6685 height='20'
6686 viewBox='0 0 24 24' 6687 fill='#FF4A71' 6688 stroke='#FF4A71' 6689 stroke-width='2' 6690 stroke-linecap='round' 6691 stroke-linejoin='round' 6692 aria-hidden='true' 6693 focusable='false' 6694 > 6695 <path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"></path> 6696 </svg> 6697 </button> 6698 </div> 6699 </div><img 6700 id="ProductImage-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025569296706" 6701 class="main-product-image" 6702 src="//www.rockymountainoils.com/cdn/shop/files/Rosemary15mlSingle.jpg?crop=center&height=300&v=1765177444&width=300" 6703 alt="Rosemary Essential Oil 15ml" 6704 width="300" 6705 height="300" 6706 loading="lazy" 6707 /></div> 6708 6709 <div class="product-content"> 6710 <div class="product-title"> 6711 <a href="/products/rosemary-essential-oil" class="product-title-link" aria-label="View Rosemary Essential Oil"> 6712 <h2>Rosemary Essential Oil</h2> 6713 </a> 6714 </div><div> 6715 <div class="product-subtitle"> 6716 Herbaceous, woodsy; promotes hair growth; relieves sore muscle. 6717 </div> 6718 </div><div class="yotpo-widget-instance" data-yotpo-instance-id="503375" data-yotpo-product-id="8025569296706" data-yotpo-cart-product-id="" data-yotpo-section-id="index"></div><!-- START Variant Selection Form --> 6719 <div class="product-data-store" style="display:none;" 6720 data-main-image-url="//www.rockymountainoils.com/cdn/shop/files/Rosemary15mlSingle.jpg?v=1765177444&width=300" 6721 data-product-title="Rosemary Essential Oil" 6722 id="DataStore-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025569296706"> 6723 </div> 6724 6725
6725<script id="VariantsJson-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025569296706" type="application/json"> 6726 [{"id":44111544451394,"title":"15ml","option1":"15ml","option2":null,"option3":null,"sku":"ROSHUN-S15","requires_shipping":true,"taxable":true,"featured_image":{"id":43885244776770,"product_id":8025569296706,"position":1,"created_at":"2024-01-22T08:17:19-07:00","updated_at":"2025-12-08T00:04:04-07:00","alt":"Rosemary Essential Oil 15ml","width":570,"height":570,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/Rosemary15mlSingle.jpg?v=1765177444","variant_ids":[44111544451394]},"available":true,"name":"Rosemary Essential Oil - 15ml","public_title":"15ml","options":["15ml"],"price":1195,"weight":45,"compare_at_price":null,"inventory_management":"shopify","barcode":"053176176581","featured_media":{"alt":"Rosemary Essential Oil 15ml","id":36355618799938,"position":1,"preview_image":{"aspect_ratio":1.0,"height":570,"width":570,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/Rosemary15mlSingle.jpg?v=1765177444"}},"requires_selling_plan":false,"selling_plan_allocations":[{"price_adjustments":[{"position":1,"price":837}],"price":837,"compare_at_price":1195,"per_delivery_price":837,"selling_plan_id":691785924975,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":1016},{"position":2,"price":956}],"price":1016,"compare_at_price":1195,"per_delivery_price":1016,"selling_plan_id":691785957743,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":1076},{"position":2,"price":1016}],"price":1076,"compare_at_price":1195,"per_delivery_price":1076,"selling_plan_id":691785990511,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":1135},{"position":2,"price":1076}],"price":1135,"compare_at_price":1195,"per_delivery_price":1135,"selling_plan_id":691786023279,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":1076},{"position":2,"price":1016}],"price":1076,"compare_at_price":1195,"per_delivery_price":1076,"selling_plan_id":691786088815,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":1135},{"position":2,"price":1076}],"price":1135,"compare_at_price":1195,"per_delivery_price":1135,"selling_plan_id":691786121583,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":1016},{"position":2,"price":956}],"price":1016,"compare_at_price":1195,"per_delivery_price":1016,"selling_plan_id":691795362159,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":1076},{"position":2,"price":1016}],"price":1076,"compare_at_price":1195,"per_delivery_price":1076,"selling_plan_id":691795394927,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":1135},{"position":2,"price":1076}],"price":1135,"compare_at_price":1195,"per_delivery_price":1135,"selling_plan_id":691795427695,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"}],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":48687666659650,"title":"4oz","option1":"4oz","option2":null,"option3":null,"sku":"ROSHUN-4OZ","requires_shipping":true,"taxable":true,"featured_image":{"id":44364646547778,"product_id":8025569296706,"position":3,"created_at":"2024-03-06T11:53:42-07:00","updated_at":"2025-12-08T00:04:04-07:00","alt":"Rosemary Essential Oil - 4oz - Rocky Mountain Oils","width":774,"height":774,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/rosemary-essential-oil-4oz-1.jpg?v=1765177444","variant_ids":[48687666659650]},"available":true,"name":"Rosemary Essential Oil - 4oz","public_title":"4oz","options":["4oz"],"price":4095,"weight":113,"compare_at_price":null,"inventory_management":"shopify","barcode":"053176183220","featured_media":{"alt":"Rosemary Essential Oil - 4oz - Rocky Mountain Oils","id":36843541922114,"position":3,"preview_image":{"aspect_ratio":1.0,"height":774,"width":774,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/rosemary-essential-oil-4oz-1.jpg?v=1765177444"}},"requires_selling_plan":false,"selling_plan_allocations":[{"price_adjustments":[{"position":1,"price":2867}],"price":2867,"compare_at_price":4095,"per_delivery_price":2867,"selling_plan_id":691785924975,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":3481},{"position":2,"price":3276}],"price":3481,"compare_at_price":4095,"per_delivery_price":3481,"selling_plan_id":691785957743,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":3686},{"position":2,"price":3481}],"price":3686,"compare_at_price":4095,"per_delivery_price":3686,"selling_plan_id":691785990511,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":3890},{"position":2,"price":3686}],"price":3890,"compare_at_price":4095,"per_delivery_price":3890,"selling_plan_id":691786023279,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":3686},{"position":2,"price":3481}],"price":3686,"compare_at_price":4095,"per_delivery_price":3686,"selling_plan_id":691786088815,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":3890},{"position":2,"price":3686}],"price":3890,"compare_at_price":4095,"per_delivery_price":3890,"selling_plan_id":691786121583,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":3481},{"position":2,"price":3276}],"price":3481,"compare_at_price":4095,"per_delivery_price":3481,"selling_plan_id":691795362159,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":3686},{"position":2,"price":3481}],"price":3686,"compare_at_price":4095,"per_delivery_price":3686,"selling_plan_id":691795394927,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":3890},{"position":2,"price":3686}],"price":3890,"compare_at_price":4095,"per_delivery_price":3890,"selling_plan_id":691795427695,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"}],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":52948338508143,"title":"5ml","option1":"5ml","option2":null,"option3":null,"sku":"ROSHUN-S5","requires_shipping":true,"taxable":true,"featured_image":{"id":43885248414018,"product_id":8025569296706,"position":4,"created_at":"2024-01-22T08:17:45-07:00","updated_at":"2024-03-07T09:37:55-07:00","alt":"Rosemary Essential Oil - 5ml - Rocky Mountain Oils","width":571,"height":571,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/Rosemary5mlSingle.jpg?v=1709829475","variant_ids":[52948338508143]},"available":true,"name":"Rosemary Essential Oil - 5ml","public_title":"5ml","options":["5ml"],"price":695,"weight":45,"compare_at_price":null,"inventory_management":"shopify","barcode":"053176176598","featured_media":{"alt":"Rosemary Essential Oil - 5ml - Rocky Mountain Oils","id":36355622404418,"position":4,"preview_image":{"aspect_ratio":1.0,"height":571,"width":571,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/Rosemary5mlSingle.jpg?v=1709829475"}},"requires_selling_plan":false,"selling_plan_allocations":[{"price_adjustments":[{"position":1,"price":487}],"price":487,"compare_at_price":695,"per_delivery_price":487,"selling_plan_id":691785924975,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":591},{"position":2,"price":556}],"price":591,"compare_at_price":695,"per_delivery_price":591,"selling_plan_id":691785957743,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":626},{"position":2,"price":591}],"price":626,"compare_at_price":695,"per_delivery_price":626,"selling_plan_id":691785990511,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":660},{"position":2,"price":626}],"price":660,"compare_at_price":695,"per_delivery_price":660,"selling_plan_id":691786023279,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":626},{"position":2,"price":591}],"price":626,"compare_at_price":695,"per_delivery_price":626,"selling_plan_id":691786088815,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":660},{"position":2,"price":626}],"price":660,"compare_at_price":695,"per_delivery_price":660,"selling_plan_id":691786121583,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":591},{"position":2,"price":556}],"price":591,"compare_at_price":695,"per_delivery_price":591,"selling_plan_id":691795362159,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":626},{"position":2,"price":591}],"price":626,"compare_at_price":695,"per_delivery_price":626,"selling_plan_id":691795394927,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":660},{"position":2,"price":626}],"price":660,"compare_at_price":695,"per_delivery_price":660,"selling_plan_id":691795427695,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"}],"quantity_rule":{"min":1,"max":null,"increment":1}}] 6727 </script>
6727<form method="post" action="/cart/add" id="product-form-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025569296706" accept-charset="UTF-8" class="product-variants product-form" enctype="multipart/form-data" data-productid="8025569296706" novalidate="novalidate" data-type="add-to-cart-form"><input type="hidden" name="form_type" value="product" /><input type="hidden" name="utf8" value="â" /><div class="product-price-option"> 6728 <div class="product-price" id="ProductPrice-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025569296706" aria-live="polite" aria-atomic="true"> 6729 <span class="compare-at-price" id="ComparePrice-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025569296706" style="display: none;"></span> 6730 <span class="current-price" id="CurrentPrice-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025569296706">$11.95</span> 6731 6732 6733 </div> 6734 6735 6736 <div class="product-option"> 6737 <label for="Option-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025569296706-0" class="visually-hidden"> 6738 Select Size for Rosemary Essential Oil 6739 </label> 6740 <select 6741 id="Option-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025569296706-0" 6742 class="variant-select" 6743 name="options[Size]" 6744 form="product-form-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025569296706" 6745 data-index="option0" 6746 ><option 6747 value="15ml" 6748 selected="selected" 6749 > 6750 15ml 6751 </option><option 6752 value="4oz" 6753 6754 > 6755 4oz 6756 </option><option 6757 value="5ml" 6758 6759 > 6760 5ml 6761 </option></select> 6762 </div> 6763 6764 </div><label for="ProductSelect-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025569296706" class="visually-hidden"> 6765 Choose variant for Rosemary Essential Oil 6766 </label> 6767 <select 6768 name="id" 6769 data-productid="8025569296706" 6770 id="ProductSelect-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025569296706" 6771 class="product-variants-select no-js-only" 6772 ><option 6773 value="44111544451394" 6774 selected="selected" 6775 6776 > 6777 15ml - $11.95 6778 </option><option 6779 value="48687666659650" 6780 6781 6782 > 6783 4oz - $40.95 6784 </option><option 6785 value="52948338508143" 6786 6787 6788 > 6789 5ml - $6.95 6790 </option></select> 6791 6792 <div class="product-addtocart" id="AddToCartWrapper-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025569296706"> 6793 <input type="hidden" name="quantity" value="1"> 6794 6795 6796 <div class="visually-hidden" role="status" id="variant-status-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025569296706" aria-l
6796ive="assertive"></div> 6797 6798 <span id="cart-action-desc-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025569296706" class="visually-hidden">Adds item to your shopping cart</span> 6799 6800 <button 6801 class="addtocart-btn add-to-cart" 6802 type="submit" 6803 name="add" 6804 aria-label="Add to Cart - Add Rosemary Essential Oil to cart" 6805 aria-describedby="cart-action-desc-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025569296706" 6806 id="AddToCart-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025569296706" 6807 6808 > 6809 <span id="AddToCartText-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025569296706">Add to Cart <i class="cart-icon" aria-hidden="true"></i></span> 6810 </button> 6811 </div><input type="hidden" name="product-id" value="8025569296706" /><input type="hidden" name="section-id" value="template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1" /></form><!-- END Variant Selection Form --></div>
6811<script type="application/ld+json"> 6812 { 6813 "@context": "http://schema.org/", 6814 "@type": "Product", 6815 "name": "Rosemary Essential Oil", 6816 "url": "https:\/\/www.rockymountainoils.com\/products\/rosemary-essential-oil","image": [ 6817 "https:\/\/www.rockymountainoils.com\/cdn\/shop\/files\/Rosemary15mlSingle.jpg?v=1765177444\u0026width=570" 6818 ], 6819 "description": "Rosemary Essential Oil is a versatile oil steam distilled from the Rosmarinus officinalis bush. Known for its potential benefits in hair care routines, it may support a healthy-looking scalp. This oil's aroma is associated with feelings of focus and calmness. With its natural properties, Rosemary oil can be a valuable addition to skincare routines, potentially supporting a brighter and more youthful-looking complexion.","sku": "ROSHUN-S15", 6820 "brand": { 6821 "@type": "Brand", 6822 "name": "Rocky Mountain Oils" 6823 }, 6824 "offers": { 6825 "@type": "AggregateOffer", 6826 "availability": "http://schema.org/InStock", 6827 "priceCurrency": "USD", 6828 "highPrice": 40.95, 6829 "lowPrice": 6.95, 6830 "offerCount": 3, 6831 "offers": [{ 6832 "@type" : "Offer","sku": "ROSHUN-S15","gtin12": "053176176581","availability" : "http://schema.org/InStock", 6833 "price" : 11.95, 6834 "priceCurrency" : "USD", 6835 "priceValidUntil": "2026-12-31", 6836 "url" : "https:\/\/www.rockymountainoils.com\/products\/rosemary-essential-oil?variant=44111544451394" 6837 }, 6838{ 6839 "@type" : "Offer","sku": "ROSHUN-4OZ","gtin12": "053176183220","availability" : "http://schema.org/InStock", 6840 "price" : 40.95, 6841 "priceCurrency" : "USD", 6842 "priceValidUntil": "2026-12-31", 6843 "url" : "https:\/\/www.rockymountainoils.com\/products\/rosemary-essential-oil?variant=48687666659650" 6844 }, 6845{ 6846 "@type" : "Offer","sku": "ROSHUN-S5","gtin12": "053176176598","availability" : "http://schema.org/InStock", 6847 "price" : 6.95, 6848 "priceCurrency" : "USD", 6849 "priceValidUntil": "2026-12-31", 6850 "url" : "https:\/\/www.rockymountainoils.com\/products\/rosemary-essential-oil?variant=52948338508143" 6851 } 6852] 6853 } 6854 } 6855 </script>
6855</div> 6856 6857<style> 6858/* Ensure visually-hidden utility exists even if theme lacks it */ 6859.visually-hidden { 6860 position: absolute !important; 6861 width: 1px !important; 6862 height: 1px !important; 6863 padding: 0 !important; 6864 margin: -1px !important; 6865 overflow: hidden !important; 6866 clip: rect(0, 0, 0, 0) !important; 6867 white-space: nowrap !important; 6868 border: 0 !important; 6869} 6870 6871/* Ensure the main product image is tappable on iOS */ 6872.main-product-image { 6873 cursor: pointer; 6874 -webkit-tap-highlight-color: rgba(0,0,0,0.05); 6875 touch-action: manipulation; 6876} 6877 6878/* ULTIMATE FIX - Override anything that hides select text */ 6879.product-variants-select, 6880.product-variants-select.no-js-only, 6881select.product-variants-select, 6882select[id*="ProductSelect-"] { 6883 color: #1a1a1a !important; 6884 opacity: 1 !important; 6885 background-color: #ffffff !important; 6886 -webkit-text-fill-color: #1a1a1a !important; 6887} 6888 6889.product-variants-select option, 6890select[id*="ProductSelect-"] option { 6891 color: #1a1a1a !important; 6892 background-color: #ffffff !important; 6893 -webkit-text-fill-color: #1a1a1a !important; 6894} 6895 6896.product-variants-select option:checked, 6897select[id*="ProductSelect-"] option:checked { 6898 color: #1a1a1a !important; 6899 background-color: #e8f0fe !important; 6900} 6901 6902.product-variants-select option:disabled, 6903select[id*="ProductSelect-"] option:disabled { 6904 color: #6c6c6c !important; 6905 background-color: #f5f5f5 !important; 6906 -webkit-text-fill-color: #6c6c6c !important; 6907 opacity: 1 !important; 6908} 6909 6910.product-variants-select:focus, 6911select[id*="ProductSelect-"]:focus { 6912 color: #1a1a1a !important; 6913 outline: 3px solid #000000ff !important; 6914} 6915</style> 6916 </div><div class="item"> 6917
6917<script> 6918(function() { 6919 class ProductCardVariantSelector { 6920 constructor(container) { 6921 this.container = container; 6922 if (!this.container) return; 6923 6924 this.form = this.container.querySelector('.product-form'); 6925 this.variantSelectors = this.container.querySelectorAll('.variant-select'); 6926 this.masterSelect = this.container.querySelector('.product-variants-select'); 6927 this.productImage = this.container.querySelector('.main-product-image'); 6928 this.priceWrapper = this.container.querySelector('[id^="ProductPrice-"]'); 6929 this.currentPriceElement = this.container.querySelector('[id^="CurrentPrice-"]'); 6930 this.comparePriceElement = this.container.querySelector('[id^="ComparePrice-"]'); 6931 this.addToCartButton = this.container.querySelector('[id^="AddToCart-"]'); 6932 this.addToCartText = this.container.querySelector('[id^="AddToCartText-"]'); 6933 this.notifyMeButton = this.container.querySelector('[id^="NotifyMe-"]'); 6934 this.variantsJsonScript = this.container.querySelector('[id^="VariantsJson-"]'); 6935 this.dataStore = this.container.querySelector('[id^="DataStore-"]'); 6936 this.saleTag = this.container.querySelector('.hc-sale-tag'); 6937 this.statusElement = this.container.querySelector('[id^="variant-status-"]'); 6938 6939 if (!this.masterSelect || !this.variantsJsonScript) return; 6940 6941 try { 6942 this.productVariants = JSON.parse(this.variantsJsonScript.textContent); 6943 } catch (e) { return; } 6944 6945 this.mainImageUrl = this.dataStore ? this.dataStore.dataset.mainImageUrl : null; 6946 this.productTitle = this.dataStore ? this.dataStore.dataset.productTitle : ''; 6947 6948 this.init(); 6949 } 6950 6951 init() { 6952 // --- iOS-safe image tap handling (works on iPhone 16, 17 Pro Max, etc.) --- 6953 if (this.productImage) { 6954 let touchStartX = 0, touchStartY = 0, touchMoved = false; 6955 let lastTouchTime = 0; 6956 6957 this.productImage.style.cursor = 'pointer'; 6958 this.productImage.setAttribute('role', 'button'); 6959 this.productImage.setAttribute('tabindex', '0'); 6960 6961 this.productImage.addEventListener('touchstart', (e) => { 6962 const t = e.touches[0]; 6963 touchStartX = t.clientX; 6964 touchStartY = t.clientY; 6965 touchMoved = false; 6966 }, { passive: true }); 6967 6968 this.productImage.addEventListener('touchmove', (e) => { 6969 const t = e.touches[0]; 6970 if (Math.abs(t.clientX - touchStartX) > 10 || 6971 Math.abs(t.clientY - touchStartY) > 10) { 6972 touchMoved = true; 6973 } 6974 }, { passive: true }); 6975 6976 this.productImage.addEventListener('touchend', (e) => { 6977 if (touchMoved) return; 6978 lastTouchTime = Date.now(); 6979 e.preventDefault(); 6980 this.onImageTap(e); 6981 }, { passive: false }); 6982 6983 // Desktop / non-touch fallback (with double-fire protection after touchend) 6984 this.productImage.addEventListener('click', (e) => { 6985 if (Date.now() - lastTouchTime < 500) return; 6986 this.onImageTap(e); 6987 }); 6988 6989 this.productImage.addEventListener('keydown', (e) => { 6990 if (e.key === 'Enter' || e.key === ' ') { 6991 e.preventDefault(); 6992 this.onImageTap(e); 6993 } 6994 }); 6995 } 6996 6997 // --- Variant select listeners --- 6998 if (this.variantSelectors.length > 0) { 6999 this.variantSelectors.forEach(select => { 7000 select.addEventListener('change', this.onVariantChange.bind(this)); 7001 }); 7002 this.updateProductDetails(this.getCurrentVariant()); 7003 } 7004 } 7005 7006 // ============================================================ 7007 // CHANGE THIS IF YOU WANT DIFFERENT TAP BEHAVIOR 7008 // Currently: navigates to the product page. 7009 // ============================================================ 7010 onImageTap(e) { 7011 const link = this.container.querySelector('.product-title-link'); 7012 if (link && link.href && link.href !== '#') { 7013 window.location.href = link.href; 7014 } 7015 } 7016 // ============================================================ 7017 7018 onVariantChange() { 7019 const selectedOptions = Array.from(this.variantSelectors).map(s => s.value); 7020 const matchedVariant = this.findMatchingVariant(selectedOptions); 7021 7022 if (matchedVariant) { 7023 this.masterSelect.value = matchedVariant.id; 7024 this.updateProductDetails(matchedVariant); 7025 if (this.statusElement) this.statusElement.textContent = ''; 7026 } else { 7027 if (this.statusElement) { 7028 this.statusElement.textContent = 'No available variant matches your selection'; 7029 } 7030 this.updateProductDetails(null); 7031 } 7032 } 7033 7034 findMatchingVariant(selectedOptions) { 7035 return this.productVariants.find(variant => { 7036 if (!variant.options || variant.options.length !== selectedOptions.length) return false;
7037 return selectedOptions.every((val, i) => variant.options[i] === val); 7038 }); 7039 } 7040 7041 getCurrentVariant() { 7042 if (!this.masterSelect) return null; 7043 const id = this.masterSelect.value; 7044 if (!id) return null; 7045 return this.productVariants.find(v => String(v.id) === String(id)) || null; 7046 } 7047 7048 // Shopify CDN: insert _WIDTHx before extension for a properly sized image 7049 sizedImageUrl(src, width) { 7050 if (!src) return src; 7051 return src.replace(/(\.[a-z]{3,4})(\?|$)/i, `_${width}x$1$2`); 7052 } 7053 7054 updateProductDetails(variant) { 7055 this.container.setAttribute('aria-busy', 'true'); 7056 7057 if (!variant) { 7058 if (this.addToCartButton) this.addToCartButton.disabled = true; 7059 if (this.addToCartText) this.addToCartText.textContent = 'Unavailable'; 7060 if (this.notifyMeButton) this.notifyMeButton.style.display = 'none'; 7061 if (this.priceWrapper) this.priceWrapper.classList.remove('sale'); 7062 if (this.comparePriceElement) this.comparePriceElement.style.display = 'none'; 7063 if (this.saleTag) this.saleTag.style.display = 'none'; 7064 this.container.setAttribute('aria-busy', 'false'); 7065 return; 7066 } 7067 7068 // 1. Image 7069 if (this.productImage) { 7070 if (variant.featured_image && variant.featured_image.src) { 7071 const sized = this.sizedImageUrl(variant.featured_image.src, 300); 7072 const variantOptions = variant.options ? variant.options.join(' - ') : ''; 7073 this.productImage.src = sized; 7074 this.productImage.srcset = ''; 7075 this.productImage.alt = variant.featured_image.alt 7076 ? variant.featured_image.alt 7077 : (this.productTitle + (variantOptions ? ' - ' + variantOptions : '')); 7078 } else if (this.mainImageUrl) { 7079 this.productImage.src = this.mainImageUrl; 7080 this.productImage.srcset = ''; 7081 this.productImage.alt = this.productTitle; 7082 } 7083 } 7084 7085 // 2. Price 7086 const moneyFormat = "${{amount}}"; 7087 const formatMoney = (cents, format) => { 7088 if (typeof cents === 'string') cents = cents.replace('.', ''); 7089 let value = ''; 7090 const placeholderRegex = /\{\{\s*(\w+)\s*\}\}/; 7091 const formatString = (format || moneyFormat).replace(/<[^>]*>/g, ''); 7092 7093 function formatWithDelimiters(number, precision, thousands, decimal) { 7094 precision = precision ?? 2; 7095 thousands = thousands ?? ','; 7096 decimal = decimal ?? '.'; 7097 if (isNaN(number) || number == null) return 0; 7098 number = (number / 100.0).toFixed(precision); 7099 const parts = number.split('.'); 7100 const dollars = parts[0].replace(/(\d)(?=(\d\d\d)+(?!\d))/g, '$1' + thousands); 7101 const centsPart = parts[1] ? (decimal + parts[1]) : ''; 7102 return dollars + centsPart; 7103 } 7104 7105 switch (formatString.match(placeholderRegex)?.[1]) { 7106 case 'amount': value = formatWithDelimiters(cents, 2); break; 7107 case 'amount_no_decimals': value = formatWithDelimiters(cents, 0); break; 7108 case 'amount_with_comma_separator': value = formatWithDelimiters(cents, 2, '.', ','); break; 7109 case 'amount_no_decimals_with_comma_separator': value = formatWithDelimiters(cents, 0, '.', ','); break; 7110 case 'amount_with_apostrophe_separator': value = formatWithDelimiters(cents, 2, "'", "."); break; 7111 case 'amount_no_decimals_with_space_separator': value = formatWithDelimiters(cents, 0, " ", ","); break; 7112 case 'amount_with_space_separator': value = formatWithDelimiters(cents, 2, " ", ","); break; 7113 default: value = formatWithDelimiters(cents, 2); 7114 } 7115 try { 7116 return formatString.replace(placeholderRegex, value); 7117 } catch (e) { 7118 const fallback = (cents / 100.0).toFixed(2); 7119 return formatString.includes('') 7120 ? formatString.replace(placeholderRegex, fallback) 7121 : fallback; 7122 } 7123 }; 7124 7125 if (this.currentPriceElement) { 7126 this.currentPriceElement.textContent = formatMoney(variant.price, moneyFormat); 7127 } 7128 if (this.comparePriceElement && this.priceWrapper) { 7129 if (variant.compare_at_price && variant.compare_at_price > variant.price) { 7130 this.comparePriceElement.textContent = formatMoney(variant.compare_at_price, moneyFormat); 7131 this.comparePriceElement.style.display = ''; 7132 this.priceWrapper.classList.add('sale'); 7133 } else { 7134 this.comparePriceElement.textContent = ''; 7135 this.comparePriceElement.style.display = 'none'; 7136 this.priceWrapper.classList.remove('sale'); 7137 } 7138 } 7139 7140 // 3. Sale tag 7141 if (this.saleTag) { 7142 const isDiscounted = variant.compare_at_price && variant.compare_at_price > variant.price; 7143 if (isDiscounted && variant.available) { 7144 this.saleTag.style.display = 'block'; 7145 const discount = Math.round((variant.compare_at_price - variant.price) * 100.0 / variant.compare_at_price); 7146 const span = this.saleTag.querySelector('span'); 7147 if (span) span.textContent = discount + '%'; 7148 this.saleTag.setAttribute('aria-label', 'Save ' + discount + '%'); 7149 this.saleTag.setAttribute('role', 'status'); 7150 } else { 7151 this.saleTag.style.display = 'none'; 7152 } 7153 } 7154 7155 // 4. Add to cart 7156 if (this.addToCartButton && this.addToCartText) { 7157 if (variant.available) { 7158 this.addToCartButton.disabled = false;
7159 this.addToCartText.innerHTML = 'Add to Cart <i class="cart-icon"></i>'; 7160 this.addToCartButton.setAttribute('aria-label', 'Add to Cart - Add ' + this.productTitle + ' to cart'); 7161 if (this.notifyMeButton) this.notifyMeButton.style.display = 'none'; 7162 } else { 7163 this.addToCartButton.disabled = true; 7164 this.addToCartText.textContent = 'Sold Out'; 7165 this.addToCartButton.setAttribute('aria-label', 'Sold Out - ' + this.productTitle + ' is sold out'); 7166 if (this.notifyMeButton) this.notifyMeButton.style.display = 'block'; 7167 } 7168 } 7169 if (this.notifyMeButton) { 7170 this.notifyMeButton.setAttribute('data-variant-id', variant.id); 7171 } 7172 7173 this.container.setAttribute('aria-busy', 'false'); 7174 } 7175 } 7176 7177 function initProductCards(root) { 7178 root = root || document; 7179 root.querySelectorAll('.product-card-wrapper[data-product-id]').forEach(cardContainer => { 7180 if (cardContainer.dataset.variantSelectorInit === 'true') return; 7181 cardContainer.dataset.variantSelectorInit = 'true'; 7182 new ProductCardVariantSelector(cardContainer); 7183 }); 7184 } 7185 7186 if (document.readyState === 'loading') { 7187 document.addEventListener('DOMContentLoaded', () => initProductCards()); 7188 } else { 7189 initProductCards(); 7190 } 7191 7192 document.addEventListener('shopify:section:load', (e) => initProductCards(e.target)); 7193})(); 7194</script>
7194<div class="product-card-wrapper" data-product-id="8025567330626" aria-busy="false"> 7195 7196 <div class="product-image" id="ProductImageWrapper-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025567330626"><!-- WISHLIST BUTTON --> 7197 <div class='xb-wishlist__btn-custom'> 7198 <div 7199 class='xb-wishlist__add' 7200 xb-product-id='8025567330626' 7201 xb-product-title='Sacred Frankincense Essential Oil' 7202 xb-product-variant='44111529771330' 7203 xb-is-in-stock='true' 7204 xb-product-handle='frankincense-sacred-essential-oil' 7205 > 7206 <button aria-label="Add Sacred Frankincense Essential Oil to wishlist" aria-pressed="false"> 7207 <svg 7208 xmlns='http://www.w3.org/2000/svg' 7209 width='20' 7210 height='20' 7211 viewBox='0 0 24 24' 7212 fill='none' 7213 stroke='#FF4A71' 7214 stroke-width='2' 7215 stroke-linecap='round' 7216 stroke-linejoin='round' 7217 aria-hidden='true' 7218 focusable='false' 7219 > 7220 <path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"></path> 7221 </svg> 7222 </button> 7223 </div> 7224 7225 <div class="xb-wishlist__loading" xb-product-id="8025567330626"> 7226 <span class="loading-spinner"></span> 7227 </div> 7228 7229 <div class='xb-wishlist__remove' xb-product-id='8025567330626' xb-is-in-stock='true'> 7230 <button aria-label="Remove Sacred Frankincense Essential Oil from wishlist" aria-pressed="true"> 7231 <svg 7232 xmlns='http://www.w3.org/2000/svg' 7233 width='20' 7234 height='20'
7235 viewBox='0 0 24 24' 7236 fill='#FF4A71' 7237 stroke='#FF4A71' 7238 stroke-width='2' 7239 stroke-linecap='round' 7240 stroke-linejoin='round' 7241 aria-hidden='true' 7242 focusable='false' 7243 > 7244 <path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"></path> 7245 </svg> 7246 </button> 7247 </div> 7248 </div><img 7249 id="ProductImage-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025567330626" 7250 class="main-product-image" 7251 src="//www.rockymountainoils.com/cdn/shop/files/sacred-frankincense-essential-oil-15ml-2.jpg?crop=center&height=300&v=1767821511&width=300" 7252 alt=" Sacred Frankincense Essential Oil - 15ml - Rocky Mountain Oils" 7253 width="300" 7254 height="300" 7255 loading="lazy" 7256 /></div> 7257 7258 <div class="product-content"> 7259 <div class="product-title"> 7260 <a href="/products/frankincense-sacred-essential-oil" class="product-title-link" aria-label="View Sacred Frankincense Essential Oil"> 7261 <h2>Sacred Frankincense Essential Oil</h2> 7262 </a> 7263 </div><div> 7264 <div class="product-subtitle"> 7265 Rich, balsamic aroma with woody and spicy-sweet notes 7266 </div> 7267 </div><div class="yotpo-widget-instance" data-yotpo-instance-id="503375" data-yotpo-product-id="8025567330626" data-yotpo-cart-product-id="" data-yotpo-section-id="index"></div><!-- START Variant Selection Form --> 7268 <div class="product-data-store" style="display:none;" 7269 data-main-image-url="//www.rockymountainoils.com/cdn/shop/files/sacred-frankincense-essential-oil-15ml-2.jpg?v=1767821511&width=300" 7270 data-product-title="Sacred Frankincense Essential Oil" 7271 id="DataStore-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025567330626"> 7272 </div> 7273 7274
7274<script id="VariantsJson-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025567330626" type="application/json"> 7275 [{"id":44111529771330,"title":"15ml","option1":"15ml","option2":null,"option3":null,"sku":"FRAOMA-S15","requires_shipping":true,"taxable":true,"featured_image":{"id":44621360398658,"product_id":8025567330626,"position":1,"created_at":"2024-03-27T10:24:31-06:00","updated_at":"2026-01-07T14:31:51-07:00","alt":" Sacred Frankincense Essential Oil - 15ml - Rocky Mountain Oils","width":587,"height":587,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/sacred-frankincense-essential-oil-15ml-2.jpg?v=1767821511","variant_ids":[44111529771330]},"available":true,"name":"Sacred Frankincense Essential Oil - 15ml","public_title":"15ml","options":["15ml"],"price":9995,"weight":45,"compare_at_price":null,"inventory_management":"shopify","barcode":"053176175737","featured_media":{"alt":" Sacred Frankincense Essential Oil - 15ml - Rocky Mountain Oils","id":37105300275522,"position":1,"preview_image":{"aspect_ratio":1.0,"height":587,"width":587,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/sacred-frankincense-essential-oil-15ml-2.jpg?v=1767821511"}},"requires_selling_plan":false,"selling_plan_allocations":[{"price_adjustments":[{"position":1,"price":6997}],"price":6997,"compare_at_price":9995,"per_delivery_price":6997,"selling_plan_id":691785924975,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":8496},{"position":2,"price":7996}],"price":8496,"compare_at_price":9995,"per_delivery_price":8496,"selling_plan_id":691785957743,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":8996},{"position":2,"price":8496}],"price":8996,"compare_at_price":9995,"per_delivery_price":8996,"selling_plan_id":691785990511,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":9495},{"position":2,"price":8996}],"price":9495,"compare_at_price":9995,"per_delivery_price":9495,"selling_plan_id":691786023279,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":8996},{"position":2,"price":8496}],"price":8996,"compare_at_price":9995,"per_delivery_price":8996,"selling_plan_id":691786088815,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":9495},{"position":2,"price":8996}],"price":9495,"compare_at_price":9995,"per_delivery_price":9495,"selling_plan_id":691786121583,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":8496},{"position":2,"price":7996}],"price":8496,"compare_at_price":9995,"per_delivery_price":8496,"selling_plan_id":691795362159,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":8996},{"position":2,"price":8496}],"price":8996,"compare_at_price":9995,"per_delivery_price":8996,"selling_plan_id":691795394927,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":9495},{"position":2,"price":8996}],"price":9495,"compare_at_price":9995,"per_delivery_price":9495,"selling_plan_id":691795427695,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"}],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":44276013269314,"title":"5ml","option1":"5ml","option2":null,"option3":null,"sku":"FRAOMA-S5","requires_shipping":true,"taxable":true,"featured_image":{"id":44621362299202,"product_id":8025567330626,"position":3,"created_at":"2024-03-27T10:24:42-06:00","updated_at":"2026-01-07T14:31:51-07:00","alt":"Sacred Frankincense Essential Oil - 5ml - Rocky Mountain Oils","width":588,"height":588,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/sacred-frankincense-essential-oil-5ml-2.jpg?v=1767821511","variant_ids":[44276013269314]},"available":true,"name":"Sacred Frankincense Essential Oil - 5ml","public_title":"5ml","options":["5ml"],"price":4995,"weight":28,"compare_at_price":null,"inventory_management":"shopify","barcode":"053176175744","featured_media":{"alt":"Sacred Frankincense Essential Oil - 5ml - Rocky Mountain Oils","id":37105302012226,"position":3,"preview_image":{"aspect_ratio":1.0,"height":588,"width":588,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/sacred-frankincense-essential-oil-5ml-2.jpg?v=1767821511"}},"requires_selling_plan":false,"selling_plan_allocations":[{"price_adjustments":[{"position":1,"price":3497}],"price":3497,"compare_at_price":4995,"per_delivery_price":3497,"selling_plan_id":691785924975,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":4246},{"position":2,"price":3996}],"price":4246,"compare_at_price":4995,"per_delivery_price":4246,"selling_plan_id":691785957743,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":4496},{"position":2,"price":4246}],"price":4496,"compare_at_price":4995,"per_delivery_price":4496,"selling_plan_id":691785990511,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":4745},{"position":2,"price":4496}],"price":4745,"compare_at_price":4995,"per_delivery_price":4745,"selling_plan_id":691786023279,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":4496},{"position":2,"price":4246}],"price":4496,"compare_at_price":4995,"per_delivery_price":4496,"selling_plan_id":691786088815,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":4745},{"position":2,"price":4496}],"price":4745,"compare_at_price":4995,"per_delivery_price":4745,"selling_plan_id":691786121583,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":4246},{"position":2,"price":3996}],"price":4246,"compare_at_price":4995,"per_delivery_price":4246,"selling_plan_id":691795362159,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":4496},{"position":2,"price":4246}],"price":4496,"compare_at_price":4995,"per_delivery_price":4496,"selling_plan_id":691795394927,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":4745},{"position":2,"price":4496}],"price":4745,"compare_at_price":4995,"per_delivery_price":4745,"selling_plan_id":691795427695,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"}],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":47468641616194,"title":"4oz","option1":"4oz","option2":null,"option3":null,"sku":"FRAOMA-4OZ","requires_shipping":true,"taxable":true,"featured_image":{"id":43532700549442,"product_id":8025567330626,"position":4,"created_at":"2023-12-07T14:20:00-07:00","updated_at":"2026-01-07T14:31:51-07:00","alt":"Sacred Frankincense Essential Oil - 4oz - Rocky Mountain Oils","width":865,"height":865,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/sacred-frankincense-essential-oil-4oz-1.webp?v=1767821511","variant_ids":[47468641616194]},"available":true,"name":"Sacred Frankincense Essential Oil - 4oz","public_title":"4oz","options":["4oz"],"price":24995,"weight":113,"compare_at_price":null,"inventory_management":"shopify","barcode":"053176183237","featured_media":{"alt":"Sacred Frankincense Essential Oil - 4oz - Rocky Mountain Oils","id":35991431446850,"position":4,"preview_image":{"aspect_ratio":1.0,"height":865,"width":865,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/sacred-frankincense-essential-oil-4oz-1.webp?v=1767821511"}},"requires_selling_plan":false,"selling_plan_allocations":[{"price_adjustments":[{"position":1,"price":17497}],"price":17497,"compare_at_price":24995,"per_delivery_price":17497,"selling_plan_id":691785924975,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":21246},{"position":2,"price":19996}],"price":21246,"compare_at_price":24995,"per_delivery_price":21246,"selling_plan_id":691785957743,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":22496},{"position":2,"price":21246}],"price":22496,"compare_at_price":24995,"per_delivery_price":22496,"selling_plan_id":691785990511,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":23745},{"position":2,"price":22496}],"price":23745,"compare_at_price":24995,"per_delivery_price":23745,"selling_plan_id":691786023279,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":22496},{"position":2,"price":21246}],"price":22496,"compare_at_price":24995,"per_delivery_price":22496,"selling_plan_id":691786088815,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":23745},{"position":2,"price":22496}],"price":23745,"compare_at_price":24995,"per_delivery_price":23745,"selling_plan_id":691786121583,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":21246},{"position":2,"price":19996}],"price":21246,"compare_at_price":24995,"per_delivery_price":21246,"selling_plan_id":691795362159,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":22496},{"position":2,"price":21246}],"price":22496,"compare_at_price":24995,"per_delivery_price":22496,"selling_plan_id":691795394927,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":23745},{"position":2,"price":22496}],"price":23745,"compare_at_price":24995,"per_delivery_price":23745,"selling_plan_id":691795427695,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"}],"quantity_rule":{"min":1,"max":null,"increment":1}}] 7276 </script>
7276<form method="post" action="/cart/add" id="product-form-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025567330626" accept-charset="UTF-8" class="product-variants product-form" enctype="multipart/form-data" data-productid="8025567330626" novalidate="novalidate" data-type="add-to-cart-form"><input type="hidden" name="form_type" value="product" /><input type="hidden" name="utf8" value="â" /><div class="product-price-option"> 7277 <div class="product-price" id="ProductPrice-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025567330626" aria-live="polite" aria-atomic="true"> 7278 <span class="compare-at-price" id="ComparePrice-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025567330626" style="display: none;"></span> 7279 <span class="current-price" id="CurrentPrice-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025567330626">$99.95</span> 7280 7281 7282 </div> 7283 7284 7285 <div class="product-option"> 7286 <label for="Option-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025567330626-0" class="visually-hidden"> 7287 Select Size for Sacred Frankincense Essential Oil 7288 </label> 7289 <select 7290 id="Option-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025567330626-0" 7291 class="variant-select" 7292 name="options[Size]" 7293 form="product-form-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025567330626" 7294 data-index="option0" 7295 ><option 7296 value="15ml" 7297 selected="selected" 7298 > 7299 15ml 7300 </option><option 7301 value="5ml" 7302 7303 > 7304 5ml 7305 </option><option 7306 value="4oz" 7307 7308 > 7309 4oz 7310 </option></select> 7311 </div> 7312 7313 </div><label for="ProductSelect-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025567330626" class="visually-hidden"> 7314 Choose variant for Sacred Frankincense Essential Oil 7315 </label> 7316 <select 7317 name="id" 7318 data-productid="8025567330626" 7319 id="ProductSelect-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025567330626" 7320 class="product-variants-select no-js-only" 7321 ><option 7322 value="44111529771330" 7323 selected="selected" 7324 7325 > 7326 15ml - $99.95 7327 </option><option 7328 value="44276013269314" 7329 7330 7331 > 7332 5ml - $49.95 7333 </option><option 7334 value="47468641616194" 7335 7336 7337 > 7338 4oz - $249.95 7339 </option></select> 7340 7341 <div class="product-addtocart" id="AddToCartWrapper-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025567330626"> 7342 <input type="hidden" name="quantity" value="1"> 7343 7344 7345 <div class="visually-hidden" role="status" id="variant-status-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025567330626" aria-l
7345ive="assertive"></div> 7346 7347 <span id="cart-action-desc-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025567330626" class="visually-hidden">Adds item to your shopping cart</span> 7348 7349 <button 7350 class="addtocart-btn add-to-cart" 7351 type="submit" 7352 name="add" 7353 aria-label="Add to Cart - Add Sacred Frankincense Essential Oil to cart" 7354 aria-describedby="cart-action-desc-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025567330626" 7355 id="AddToCart-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025567330626" 7356 7357 > 7358 <span id="AddToCartText-template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1-8025567330626">Add to Cart <i class="cart-icon" aria-hidden="true"></i></span> 7359 </button> 7360 </div><input type="hidden" name="product-id" value="8025567330626" /><input type="hidden" name="section-id" value="template--27595751620975__bce15c58-b759-44db-bb1e-8af07c58c1d1" /></form><!-- END Variant Selection Form --></div>
7360<script type="application/ld+json"> 7361 { 7362 "@context": "http://schema.org/", 7363 "@type": "Product", 7364 "name": "Sacred Frankincense Essential Oil", 7365 "url": "https:\/\/www.rockymountainoils.com\/products\/frankincense-sacred-essential-oil","image": [ 7366 "https:\/\/www.rockymountainoils.com\/cdn\/shop\/files\/sacred-frankincense-essential-oil-15ml-2.jpg?v=1767821511\u0026width=587" 7367 ], 7368 "description": "Experience serenity and healing with Sacred Frankincense Essential Oil. Steam-distilled from the rare Boswellia sacra tree, this potent oil boasts a rich, balsamic aroma with warming notes of wood and spice. Known for its potent properties, Sacred Frankincense promotes cellular regeneration, helping to reduce the appearance of scars, fine lines, and sun damage. It may also boost the immune system and create a sense of grounding and peace.\nThis highly sought-after oil contains 20% more alpha-pinene compounds than other Frankincense varieties, lending it potent anti-inflammatory benefits. Try it in skincare for a youthful glow, diffuse it for a grounding atmosphere, or inhale its serene scent to balance emotions and relieve stress.\n\n","sku": "FRAOMA-S15", 7369 "brand": { 7370 "@type": "Brand", 7371 "name": "Rocky Mountain Oils" 7372 }, 7373 "offers": { 7374 "@type": "AggregateOffer", 7375 "availability": "http://schema.org/InStock", 7376 "priceCurrency": "USD", 7377 "highPrice": 249.95, 7378 "lowPrice": 49.95, 7379 "offerCount": 3, 7380 "offers": [{ 7381 "@type" : "Offer","sku": "FRAOMA-S15","gtin12": "053176175737","availability" : "http://schema.org/InStock", 7382 "price" : 99.95, 7383 "priceCurrency" : "USD", 7384 "priceValidUntil": "2026-12-31", 7385 "url" : "https:\/\/www.rockymountainoils.com\/products\/frankincense-sacred-essential-oil?variant=44111529771330" 7386 }, 7387{ 7388 "@type" : "Offer","sku": "FRAOMA-S5","gtin12": "053176175744","availability" : "http://schema.org/InStock", 7389 "price" : 49.95, 7390 "priceCurrency" : "USD", 7391 "priceValidUntil": "2026-12-31", 7392 "url" : "https:\/\/www.rockymountainoils.com\/products\/frankincense-sacred-essential-oil?variant=44276013269314" 7393 }, 7394{ 7395 "@type" : "Offer","sku": "FRAOMA-4OZ","gtin12": "053176183237","availability" : "http://schema.org/InStock", 7396 "price" : 249.95, 7397 "priceCurrency" : "USD", 7398 "priceValidUntil": "2026-12-31", 7399 "url" : "https:\/\/www.rockymountainoils.com\/products\/frankincense-sacred-essential-oil?variant=47468641616194" 7400 } 7401] 7402 } 7403 } 7404 </script>
7404</div> 7405 7406<style> 7407/* Ensure visually-hidden utility exists even if theme lacks it */ 7408.visually-hidden { 7409 position: absolute !important; 7410 width: 1px !important; 7411 height: 1px !important; 7412 padding: 0 !important; 7413 margin: -1px !important; 7414 overflow: hidden !important; 7415 clip: rect(0, 0, 0, 0) !important; 7416 white-space: nowrap !important; 7417 border: 0 !important; 7418} 7419 7420/* Ensure the main product image is tappable on iOS */ 7421.main-product-image { 7422 cursor: pointer; 7423 -webkit-tap-highlight-color: rgba(0,0,0,0.05); 7424 touch-action: manipulation; 7425} 7426 7427/* ULTIMATE FIX - Override anything that hides select text */ 7428.product-variants-select, 7429.product-variants-select.no-js-only, 7430select.product-variants-select, 7431select[id*="ProductSelect-"] { 7432 color: #1a1a1a !important; 7433 opacity: 1 !important; 7434 background-color: #ffffff !important; 7435 -webkit-text-fill-color: #1a1a1a !important; 7436} 7437 7438.product-variants-select option, 7439select[id*="ProductSelect-"] option { 7440 color: #1a1a1a !important; 7441 background-color: #ffffff !important; 7442 -webkit-text-fill-color: #1a1a1a !important; 7443} 7444 7445.product-variants-select option:checked, 7446select[id*="ProductSelect-"] option:checked { 7447 color: #1a1a1a !important; 7448 background-color: #e8f0fe !important; 7449} 7450 7451.product-variants-select option:disabled, 7452select[id*="ProductSelect-"] option:disabled { 7453 color: #6c6c6c !important; 7454 background-color: #f5f5f5 !important; 7455 -webkit-text-fill-color: #6c6c6c !important; 7456 opacity: 1 !important; 7457} 7458 7459.product-variants-select:focus, 7460select[id*="ProductSelect-"]:focus { 7461 color: #1a1a1a !important; 7462 outline: 3px solid #000000ff !important; 7463} 7464</style> 7465 </div></div> 7466 </div> 7467 </div> 7468</section> 7469 7470</section><section id="shopify-section-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040" class="shopify-section section"><link href="//www.rockymountainoils.com/cdn/shop/t/383/assets/product-slider.css?v=100911957534726869481785434252" rel="stylesheet" type="text/css" media="all" /> 7471 7472<section class="TopSeller"> 7473 <div class="container"> 7474 <div class="TopSeller_Wrap"> 7475 7476 <div class="sec-heading text-center"> 7477 7478 <h2>Rare Luxury Oils</h2> 7479 7480 <a href="/collections/rare-luxury-oils" class="viewAllBtn" aria-label="View all Rare Luxury Oils products"> 7481 View all <i role="img" aria-hidden="true"></i> 7482 </a> 7483 </div> 7484 7485 <div class="owl-carousel carousel-fade owl-theme slider-section ProductsSlider" id="ProductsSlider"><div class="item"> 7486
7486<script> 7487(function() { 7488 class ProductCardVariantSelector { 7489 constructor(container) { 7490 this.container = container; 7491 if (!this.container) return; 7492 7493 this.form = this.container.querySelector('.product-form'); 7494 this.variantSelectors = this.container.querySelectorAll('.variant-select'); 7495 this.masterSelect = this.container.querySelector('.product-variants-select'); 7496 this.productImage = this.container.querySelector('.main-product-image'); 7497 this.priceWrapper = this.container.querySelector('[id^="ProductPrice-"]'); 7498 this.currentPriceElement = this.container.querySelector('[id^="CurrentPrice-"]'); 7499 this.comparePriceElement = this.container.querySelector('[id^="ComparePrice-"]'); 7500 this.addToCartButton = this.container.querySelector('[id^="AddToCart-"]'); 7501 this.addToCartText = this.container.querySelector('[id^="AddToCartText-"]'); 7502 this.notifyMeButton = this.container.querySelector('[id^="NotifyMe-"]'); 7503 this.variantsJsonScript = this.container.querySelector('[id^="VariantsJson-"]'); 7504 this.dataStore = this.container.querySelector('[id^="DataStore-"]'); 7505 this.saleTag = this.container.querySelector('.hc-sale-tag'); 7506 this.statusElement = this.container.querySelector('[id^="variant-status-"]'); 7507 7508 if (!this.masterSelect || !this.variantsJsonScript) return; 7509 7510 try { 7511 this.productVariants = JSON.parse(this.variantsJsonScript.textContent); 7512 } catch (e) { return; } 7513 7514 this.mainImageUrl = this.dataStore ? this.dataStore.dataset.mainImageUrl : null; 7515 this.productTitle = this.dataStore ? this.dataStore.dataset.productTitle : ''; 7516 7517 this.init(); 7518 } 7519 7520 init() { 7521 // --- iOS-safe image tap handling (works on iPhone 16, 17 Pro Max, etc.) --- 7522 if (this.productImage) { 7523 let touchStartX = 0, touchStartY = 0, touchMoved = false; 7524 let lastTouchTime = 0; 7525 7526 this.productImage.style.cursor = 'pointer'; 7527 this.productImage.setAttribute('role', 'button'); 7528 this.productImage.setAttribute('tabindex', '0'); 7529 7530 this.productImage.addEventListener('touchstart', (e) => { 7531 const t = e.touches[0]; 7532 touchStartX = t.clientX; 7533 touchStartY = t.clientY; 7534 touchMoved = false; 7535 }, { passive: true }); 7536 7537 this.productImage.addEventListener('touchmove', (e) => { 7538 const t = e.touches[0]; 7539 if (Math.abs(t.clientX - touchStartX) > 10 || 7540 Math.abs(t.clientY - touchStartY) > 10) { 7541 touchMoved = true; 7542 } 7543 }, { passive: true }); 7544 7545 this.productImage.addEventListener('touchend', (e) => { 7546 if (touchMoved) return; 7547 lastTouchTime = Date.now(); 7548 e.preventDefault(); 7549 this.onImageTap(e); 7550 }, { passive: false }); 7551 7552 // Desktop / non-touch fallback (with double-fire protection after touchend) 7553 this.productImage.addEventListener('click', (e) => { 7554 if (Date.now() - lastTouchTime < 500) return; 7555 this.onImageTap(e); 7556 }); 7557 7558 this.productImage.addEventListener('keydown', (e) => { 7559 if (e.key === 'Enter' || e.key === ' ') { 7560 e.preventDefault(); 7561 this.onImageTap(e); 7562 } 7563 }); 7564 } 7565 7566 // --- Variant select listeners --- 7567 if (this.variantSelectors.length > 0) { 7568 this.variantSelectors.forEach(select => { 7569 select.addEventListener('change', this.onVariantChange.bind(this)); 7570 }); 7571 this.updateProductDetails(this.getCurrentVariant()); 7572 } 7573 } 7574 7575 // ============================================================ 7576 // CHANGE THIS IF YOU WANT DIFFERENT TAP BEHAVIOR 7577 // Currently: navigates to the product page. 7578 // ============================================================ 7579 onImageTap(e) { 7580 const link = this.container.querySelector('.product-title-link'); 7581 if (link && link.href && link.href !== '#') { 7582 window.location.href = link.href; 7583 } 7584 } 7585 // ============================================================ 7586 7587 onVariantChange() { 7588 const selectedOptions = Array.from(this.variantSelectors).map(s => s.value); 7589 const matchedVariant = this.findMatchingVariant(selectedOptions); 7590 7591 if (matchedVariant) { 7592 this.masterSelect.value = matchedVariant.id; 7593 this.updateProductDetails(matchedVariant); 7594 if (this.statusElement) this.statusElement.textContent = ''; 7595 } else { 7596 if (this.statusElement) { 7597 this.statusElement.textContent = 'No available variant matches your selection'; 7598 } 7599 this.updateProductDetails(null); 7600 } 7601 } 7602 7603 findMatchingVariant(selectedOptions) { 7604 return this.productVariants.find(variant => { 7605 if (!variant.options || variant.options.length !== selectedOptions.length) return false;
7606 return selectedOptions.every((val, i) => variant.options[i] === val); 7607 }); 7608 } 7609 7610 getCurrentVariant() { 7611 if (!this.masterSelect) return null; 7612 const id = this.masterSelect.value; 7613 if (!id) return null; 7614 return this.productVariants.find(v => String(v.id) === String(id)) || null; 7615 } 7616 7617 // Shopify CDN: insert _WIDTHx before extension for a properly sized image 7618 sizedImageUrl(src, width) { 7619 if (!src) return src; 7620 return src.replace(/(\.[a-z]{3,4})(\?|$)/i, `_${width}x$1$2`); 7621 } 7622 7623 updateProductDetails(variant) { 7624 this.container.setAttribute('aria-busy', 'true'); 7625 7626 if (!variant) { 7627 if (this.addToCartButton) this.addToCartButton.disabled = true; 7628 if (this.addToCartText) this.addToCartText.textContent = 'Unavailable'; 7629 if (this.notifyMeButton) this.notifyMeButton.style.display = 'none'; 7630 if (this.priceWrapper) this.priceWrapper.classList.remove('sale'); 7631 if (this.comparePriceElement) this.comparePriceElement.style.display = 'none'; 7632 if (this.saleTag) this.saleTag.style.display = 'none'; 7633 this.container.setAttribute('aria-busy', 'false'); 7634 return; 7635 } 7636 7637 // 1. Image 7638 if (this.productImage) { 7639 if (variant.featured_image && variant.featured_image.src) { 7640 const sized = this.sizedImageUrl(variant.featured_image.src, 300); 7641 const variantOptions = variant.options ? variant.options.join(' - ') : ''; 7642 this.productImage.src = sized; 7643 this.productImage.srcset = ''; 7644 this.productImage.alt = variant.featured_image.alt 7645 ? variant.featured_image.alt 7646 : (this.productTitle + (variantOptions ? ' - ' + variantOptions : '')); 7647 } else if (this.mainImageUrl) { 7648 this.productImage.src = this.mainImageUrl; 7649 this.productImage.srcset = ''; 7650 this.productImage.alt = this.productTitle; 7651 } 7652 } 7653 7654 // 2. Price 7655 const moneyFormat = "${{amount}}"; 7656 const formatMoney = (cents, format) => { 7657 if (typeof cents === 'string') cents = cents.replace('.', ''); 7658 let value = ''; 7659 const placeholderRegex = /\{\{\s*(\w+)\s*\}\}/; 7660 const formatString = (format || moneyFormat).replace(/<[^>]*>/g, ''); 7661 7662 function formatWithDelimiters(number, precision, thousands, decimal) { 7663 precision = precision ?? 2; 7664 thousands = thousands ?? ','; 7665 decimal = decimal ?? '.'; 7666 if (isNaN(number) || number == null) return 0; 7667 number = (number / 100.0).toFixed(precision); 7668 const parts = number.split('.'); 7669 const dollars = parts[0].replace(/(\d)(?=(\d\d\d)+(?!\d))/g, '$1' + thousands); 7670 const centsPart = parts[1] ? (decimal + parts[1]) : ''; 7671 return dollars + centsPart; 7672 } 7673 7674 switch (formatString.match(placeholderRegex)?.[1]) { 7675 case 'amount': value = formatWithDelimiters(cents, 2); break; 7676 case 'amount_no_decimals': value = formatWithDelimiters(cents, 0); break; 7677 case 'amount_with_comma_separator': value = formatWithDelimiters(cents, 2, '.', ','); break; 7678 case 'amount_no_decimals_with_comma_separator': value = formatWithDelimiters(cents, 0, '.', ','); break; 7679 case 'amount_with_apostrophe_separator': value = formatWithDelimiters(cents, 2, "'", "."); break; 7680 case 'amount_no_decimals_with_space_separator': value = formatWithDelimiters(cents, 0, " ", ","); break; 7681 case 'amount_with_space_separator': value = formatWithDelimiters(cents, 2, " ", ","); break; 7682 default: value = formatWithDelimiters(cents, 2); 7683 } 7684 try { 7685 return formatString.replace(placeholderRegex, value); 7686 } catch (e) { 7687 const fallback = (cents / 100.0).toFixed(2); 7688 return formatString.includes('') 7689 ? formatString.replace(placeholderRegex, fallback) 7690 : fallback; 7691 } 7692 }; 7693 7694 if (this.currentPriceElement) { 7695 this.currentPriceElement.textContent = formatMoney(variant.price, moneyFormat); 7696 } 7697 if (this.comparePriceElement && this.priceWrapper) { 7698 if (variant.compare_at_price && variant.compare_at_price > variant.price) { 7699 this.comparePriceElement.textContent = formatMoney(variant.compare_at_price, moneyFormat); 7700 this.comparePriceElement.style.display = ''; 7701 this.priceWrapper.classList.add('sale'); 7702 } else { 7703 this.comparePriceElement.textContent = ''; 7704 this.comparePriceElement.style.display = 'none'; 7705 this.priceWrapper.classList.remove('sale'); 7706 } 7707 } 7708 7709 // 3. Sale tag 7710 if (this.saleTag) { 7711 const isDiscounted = variant.compare_at_price && variant.compare_at_price > variant.price; 7712 if (isDiscounted && variant.available) { 7713 this.saleTag.style.display = 'block'; 7714 const discount = Math.round((variant.compare_at_price - variant.price) * 100.0 / variant.compare_at_price); 7715 const span = this.saleTag.querySelector('span'); 7716 if (span) span.textContent = discount + '%'; 7717 this.saleTag.setAttribute('aria-label', 'Save ' + discount + '%'); 7718 this.saleTag.setAttribute('role', 'status'); 7719 } else { 7720 this.saleTag.style.display = 'none'; 7721 } 7722 } 7723 7724 // 4. Add to cart 7725 if (this.addToCartButton && this.addToCartText) { 7726 if (variant.available) { 7727 this.addToCartButton.disabled = false;
7728 this.addToCartText.innerHTML = 'Add to Cart <i class="cart-icon"></i>'; 7729 this.addToCartButton.setAttribute('aria-label', 'Add to Cart - Add ' + this.productTitle + ' to cart'); 7730 if (this.notifyMeButton) this.notifyMeButton.style.display = 'none'; 7731 } else { 7732 this.addToCartButton.disabled = true; 7733 this.addToCartText.textContent = 'Sold Out'; 7734 this.addToCartButton.setAttribute('aria-label', 'Sold Out - ' + this.productTitle + ' is sold out'); 7735 if (this.notifyMeButton) this.notifyMeButton.style.display = 'block'; 7736 } 7737 } 7738 if (this.notifyMeButton) { 7739 this.notifyMeButton.setAttribute('data-variant-id', variant.id); 7740 } 7741 7742 this.container.setAttribute('aria-busy', 'false'); 7743 } 7744 } 7745 7746 function initProductCards(root) { 7747 root = root || document; 7748 root.querySelectorAll('.product-card-wrapper[data-product-id]').forEach(cardContainer => { 7749 if (cardContainer.dataset.variantSelectorInit === 'true') return; 7750 cardContainer.dataset.variantSelectorInit = 'true'; 7751 new ProductCardVariantSelector(cardContainer); 7752 }); 7753 } 7754 7755 if (document.readyState === 'loading') { 7756 document.addEventListener('DOMContentLoaded', () => initProductCards()); 7757 } else { 7758 initProductCards(); 7759 } 7760 7761 document.addEventListener('shopify:section:load', (e) => initProductCards(e.target)); 7762})(); 7763</script>
7763<div class="product-card-wrapper" data-product-id="8025567330626" aria-busy="false"> 7764 7765 <div class="product-image" id="ProductImageWrapper-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025567330626"><!-- WISHLIST BUTTON --> 7766 <div class='xb-wishlist__btn-custom'> 7767 <div 7768 class='xb-wishlist__add' 7769 xb-product-id='8025567330626' 7770 xb-product-title='Sacred Frankincense Essential Oil' 7771 xb-product-variant='44111529771330' 7772 xb-is-in-stock='true' 7773 xb-product-handle='frankincense-sacred-essential-oil' 7774 > 7775 <button aria-label="Add Sacred Frankincense Essential Oil to wishlist" aria-pressed="false"> 7776 <svg 7777 xmlns='http://www.w3.org/2000/svg' 7778 width='20' 7779 height='20' 7780 viewBox='0 0 24 24' 7781 fill='none' 7782 stroke='#FF4A71' 7783 stroke-width='2' 7784 stroke-linecap='round' 7785 stroke-linejoin='round' 7786 aria-hidden='true' 7787 focusable='false' 7788 > 7789 <path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"></path> 7790 </svg> 7791 </button> 7792 </div> 7793 7794 <div class="xb-wishlist__loading" xb-product-id="8025567330626"> 7795 <span class="loading-spinner"></span> 7796 </div> 7797 7798 <div class='xb-wishlist__remove' xb-product-id='8025567330626' xb-is-in-stock='true'> 7799 <button aria-label="Remove Sacred Frankincense Essential Oil from wishlist" aria-pressed="true"> 7800 <svg 7801 xmlns='http://www.w3.org/2000/svg' 7802 width='20' 7803 height='20'
7804 viewBox='0 0 24 24' 7805 fill='#FF4A71' 7806 stroke='#FF4A71' 7807 stroke-width='2' 7808 stroke-linecap='round' 7809 stroke-linejoin='round' 7810 aria-hidden='true' 7811 focusable='false' 7812 > 7813 <path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"></path> 7814 </svg> 7815 </button> 7816 </div> 7817 </div><img 7818 id="ProductImage-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025567330626" 7819 class="main-product-image" 7820 src="//www.rockymountainoils.com/cdn/shop/files/sacred-frankincense-essential-oil-15ml-2.jpg?crop=center&height=300&v=1767821511&width=300" 7821 alt=" Sacred Frankincense Essential Oil - 15ml - Rocky Mountain Oils" 7822 width="300" 7823 height="300" 7824 loading="lazy" 7825 /></div> 7826 7827 <div class="product-content"> 7828 <div class="product-title"> 7829 <a href="/products/frankincense-sacred-essential-oil" class="product-title-link" aria-label="View Sacred Frankincense Essential Oil"> 7830 <h2>Sacred Frankincense Essential Oil</h2> 7831 </a> 7832 </div><div> 7833 <div class="product-subtitle"> 7834 Rich, balsamic aroma with woody and spicy-sweet notes 7835 </div> 7836 </div><div class="yotpo-widget-instance" data-yotpo-instance-id="503375" data-yotpo-product-id="8025567330626" data-yotpo-cart-product-id="" data-yotpo-section-id="index"></div><!-- START Variant Selection Form --> 7837 <div class="product-data-store" style="display:none;" 7838 data-main-image-url="//www.rockymountainoils.com/cdn/shop/files/sacred-frankincense-essential-oil-15ml-2.jpg?v=1767821511&width=300" 7839 data-product-title="Sacred Frankincense Essential Oil" 7840 id="DataStore-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025567330626"> 7841 </div> 7842 7843
7843<script id="VariantsJson-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025567330626" type="application/json"> 7844 [{"id":44111529771330,"title":"15ml","option1":"15ml","option2":null,"option3":null,"sku":"FRAOMA-S15","requires_shipping":true,"taxable":true,"featured_image":{"id":44621360398658,"product_id":8025567330626,"position":1,"created_at":"2024-03-27T10:24:31-06:00","updated_at":"2026-01-07T14:31:51-07:00","alt":" Sacred Frankincense Essential Oil - 15ml - Rocky Mountain Oils","width":587,"height":587,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/sacred-frankincense-essential-oil-15ml-2.jpg?v=1767821511","variant_ids":[44111529771330]},"available":true,"name":"Sacred Frankincense Essential Oil - 15ml","public_title":"15ml","options":["15ml"],"price":9995,"weight":45,"compare_at_price":null,"inventory_management":"shopify","barcode":"053176175737","featured_media":{"alt":" Sacred Frankincense Essential Oil - 15ml - Rocky Mountain Oils","id":37105300275522,"position":1,"preview_image":{"aspect_ratio":1.0,"height":587,"width":587,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/sacred-frankincense-essential-oil-15ml-2.jpg?v=1767821511"}},"requires_selling_plan":false,"selling_plan_allocations":[{"price_adjustments":[{"position":1,"price":6997}],"price":6997,"compare_at_price":9995,"per_delivery_price":6997,"selling_plan_id":691785924975,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":8496},{"position":2,"price":7996}],"price":8496,"compare_at_price":9995,"per_delivery_price":8496,"selling_plan_id":691785957743,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":8996},{"position":2,"price":8496}],"price":8996,"compare_at_price":9995,"per_delivery_price":8996,"selling_plan_id":691785990511,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":9495},{"position":2,"price":8996}],"price":9495,"compare_at_price":9995,"per_delivery_price":9495,"selling_plan_id":691786023279,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":8996},{"position":2,"price":8496}],"price":8996,"compare_at_price":9995,"per_delivery_price":8996,"selling_plan_id":691786088815,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":9495},{"position":2,"price":8996}],"price":9495,"compare_at_price":9995,"per_delivery_price":9495,"selling_plan_id":691786121583,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":8496},{"position":2,"price":7996}],"price":8496,"compare_at_price":9995,"per_delivery_price":8496,"selling_plan_id":691795362159,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":8996},{"position":2,"price":8496}],"price":8996,"compare_at_price":9995,"per_delivery_price":8996,"selling_plan_id":691795394927,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":9495},{"position":2,"price":8996}],"price":9495,"compare_at_price":9995,"per_delivery_price":9495,"selling_plan_id":691795427695,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"}],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":44276013269314,"title":"5ml","option1":"5ml","option2":null,"option3":null,"sku":"FRAOMA-S5","requires_shipping":true,"taxable":true,"featured_image":{"id":44621362299202,"product_id":8025567330626,"position":3,"created_at":"2024-03-27T10:24:42-06:00","updated_at":"2026-01-07T14:31:51-07:00","alt":"Sacred Frankincense Essential Oil - 5ml - Rocky Mountain Oils","width":588,"height":588,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/sacred-frankincense-essential-oil-5ml-2.jpg?v=1767821511","variant_ids":[44276013269314]},"available":true,"name":"Sacred Frankincense Essential Oil - 5ml","public_title":"5ml","options":["5ml"],"price":4995,"weight":28,"compare_at_price":null,"inventory_management":"shopify","barcode":"053176175744","featured_media":{"alt":"Sacred Frankincense Essential Oil - 5ml - Rocky Mountain Oils","id":37105302012226,"position":3,"preview_image":{"aspect_ratio":1.0,"height":588,"width":588,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/sacred-frankincense-essential-oil-5ml-2.jpg?v=1767821511"}},"requires_selling_plan":false,"selling_plan_allocations":[{"price_adjustments":[{"position":1,"price":3497}],"price":3497,"compare_at_price":4995,"per_delivery_price":3497,"selling_plan_id":691785924975,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":4246},{"position":2,"price":3996}],"price":4246,"compare_at_price":4995,"per_delivery_price":4246,"selling_plan_id":691785957743,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":4496},{"position":2,"price":4246}],"price":4496,"compare_at_price":4995,"per_delivery_price":4496,"selling_plan_id":691785990511,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":4745},{"position":2,"price":4496}],"price":4745,"compare_at_price":4995,"per_delivery_price":4745,"selling_plan_id":691786023279,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":4496},{"position":2,"price":4246}],"price":4496,"compare_at_price":4995,"per_delivery_price":4496,"selling_plan_id":691786088815,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":4745},{"position":2,"price":4496}],"price":4745,"compare_at_price":4995,"per_delivery_price":4745,"selling_plan_id":691786121583,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":4246},{"position":2,"price":3996}],"price":4246,"compare_at_price":4995,"per_delivery_price":4246,"selling_plan_id":691795362159,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":4496},{"position":2,"price":4246}],"price":4496,"compare_at_price":4995,"per_delivery_price":4496,"selling_plan_id":691795394927,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":4745},{"position":2,"price":4496}],"price":4745,"compare_at_price":4995,"per_delivery_price":4745,"selling_plan_id":691795427695,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"}],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":47468641616194,"title":"4oz","option1":"4oz","option2":null,"option3":null,"sku":"FRAOMA-4OZ","requires_shipping":true,"taxable":true,"featured_image":{"id":43532700549442,"product_id":8025567330626,"position":4,"created_at":"2023-12-07T14:20:00-07:00","updated_at":"2026-01-07T14:31:51-07:00","alt":"Sacred Frankincense Essential Oil - 4oz - Rocky Mountain Oils","width":865,"height":865,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/sacred-frankincense-essential-oil-4oz-1.webp?v=1767821511","variant_ids":[47468641616194]},"available":true,"name":"Sacred Frankincense Essential Oil - 4oz","public_title":"4oz","options":["4oz"],"price":24995,"weight":113,"compare_at_price":null,"inventory_management":"shopify","barcode":"053176183237","featured_media":{"alt":"Sacred Frankincense Essential Oil - 4oz - Rocky Mountain Oils","id":35991431446850,"position":4,"preview_image":{"aspect_ratio":1.0,"height":865,"width":865,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/sacred-frankincense-essential-oil-4oz-1.webp?v=1767821511"}},"requires_selling_plan":false,"selling_plan_allocations":[{"price_adjustments":[{"position":1,"price":17497}],"price":17497,"compare_at_price":24995,"per_delivery_price":17497,"selling_plan_id":691785924975,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":21246},{"position":2,"price":19996}],"price":21246,"compare_at_price":24995,"per_delivery_price":21246,"selling_plan_id":691785957743,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":22496},{"position":2,"price":21246}],"price":22496,"compare_at_price":24995,"per_delivery_price":22496,"selling_plan_id":691785990511,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":23745},{"position":2,"price":22496}],"price":23745,"compare_at_price":24995,"per_delivery_price":23745,"selling_plan_id":691786023279,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":22496},{"position":2,"price":21246}],"price":22496,"compare_at_price":24995,"per_delivery_price":22496,"selling_plan_id":691786088815,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":23745},{"position":2,"price":22496}],"price":23745,"compare_at_price":24995,"per_delivery_price":23745,"selling_plan_id":691786121583,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":21246},{"position":2,"price":19996}],"price":21246,"compare_at_price":24995,"per_delivery_price":21246,"selling_plan_id":691795362159,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":22496},{"position":2,"price":21246}],"price":22496,"compare_at_price":24995,"per_delivery_price":22496,"selling_plan_id":691795394927,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":23745},{"position":2,"price":22496}],"price":23745,"compare_at_price":24995,"per_delivery_price":23745,"selling_plan_id":691795427695,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"}],"quantity_rule":{"min":1,"max":null,"increment":1}}] 7845 </script>
7845<form method="post" action="/cart/add" id="product-form-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025567330626" accept-charset="UTF-8" class="product-variants product-form" enctype="multipart/form-data" data-productid="8025567330626" novalidate="novalidate" data-type="add-to-cart-form"><input type="hidden" name="form_type" value="product" /><input type="hidden" name="utf8" value="â" /><div class="product-price-option"> 7846 <div class="product-price" id="ProductPrice-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025567330626" aria-live="polite" aria-atomic="true"> 7847 <span class="compare-at-price" id="ComparePrice-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025567330626" style="display: none;"></span> 7848 <span class="current-price" id="CurrentPrice-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025567330626">$99.95</span> 7849 7850 7851 </div> 7852 7853 7854 <div class="product-option"> 7855 <label for="Option-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025567330626-0" class="visually-hidden"> 7856 Select Size for Sacred Frankincense Essential Oil 7857 </label> 7858 <select 7859 id="Option-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025567330626-0" 7860 class="variant-select" 7861 name="options[Size]" 7862 form="product-form-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025567330626" 7863 data-index="option0" 7864 ><option 7865 value="15ml" 7866 selected="selected" 7867 > 7868 15ml 7869 </option><option 7870 value="5ml" 7871 7872 > 7873 5ml 7874 </option><option 7875 value="4oz" 7876 7877 > 7878 4oz 7879 </option></select> 7880 </div> 7881 7882 </div><label for="ProductSelect-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025567330626" class="visually-hidden"> 7883 Choose variant for Sacred Frankincense Essential Oil 7884 </label> 7885 <select 7886 name="id" 7887 data-productid="8025567330626" 7888 id="ProductSelect-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025567330626" 7889 class="product-variants-select no-js-only" 7890 ><option 7891 value="44111529771330" 7892 selected="selected" 7893 7894 > 7895 15ml - $99.95 7896 </option><option 7897 value="44276013269314" 7898 7899 7900 > 7901 5ml - $49.95 7902 </option><option 7903 value="47468641616194" 7904 7905 7906 > 7907 4oz - $249.95 7908 </option></select> 7909 7910 <div class="product-addtocart" id="AddToCartWrapper-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025567330626"> 7911 <input type="hidden" name="quantity" value="1"> 7912 7913 7914 <div class="visually-hidden" role="status" id="variant-status-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025567330626" aria-l
7914ive="assertive"></div> 7915 7916 <span id="cart-action-desc-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025567330626" class="visually-hidden">Adds item to your shopping cart</span> 7917 7918 <button 7919 class="addtocart-btn add-to-cart" 7920 type="submit" 7921 name="add" 7922 aria-label="Add to Cart - Add Sacred Frankincense Essential Oil to cart" 7923 aria-describedby="cart-action-desc-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025567330626" 7924 id="AddToCart-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025567330626" 7925 7926 > 7927 <span id="AddToCartText-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025567330626">Add to Cart <i class="cart-icon" aria-hidden="true"></i></span> 7928 </button> 7929 </div><input type="hidden" name="product-id" value="8025567330626" /><input type="hidden" name="section-id" value="template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040" /></form><!-- END Variant Selection Form --></div>
7929<script type="application/ld+json"> 7930 { 7931 "@context": "http://schema.org/", 7932 "@type": "Product", 7933 "name": "Sacred Frankincense Essential Oil", 7934 "url": "https:\/\/www.rockymountainoils.com\/products\/frankincense-sacred-essential-oil","image": [ 7935 "https:\/\/www.rockymountainoils.com\/cdn\/shop\/files\/sacred-frankincense-essential-oil-15ml-2.jpg?v=1767821511\u0026width=587" 7936 ], 7937 "description": "Experience serenity and healing with Sacred Frankincense Essential Oil. Steam-distilled from the rare Boswellia sacra tree, this potent oil boasts a rich, balsamic aroma with warming notes of wood and spice. Known for its potent properties, Sacred Frankincense promotes cellular regeneration, helping to reduce the appearance of scars, fine lines, and sun damage. It may also boost the immune system and create a sense of grounding and peace.\nThis highly sought-after oil contains 20% more alpha-pinene compounds than other Frankincense varieties, lending it potent anti-inflammatory benefits. Try it in skincare for a youthful glow, diffuse it for a grounding atmosphere, or inhale its serene scent to balance emotions and relieve stress.\n\n","sku": "FRAOMA-S15", 7938 "brand": { 7939 "@type": "Brand", 7940 "name": "Rocky Mountain Oils" 7941 }, 7942 "offers": { 7943 "@type": "AggregateOffer", 7944 "availability": "http://schema.org/InStock", 7945 "priceCurrency": "USD", 7946 "highPrice": 249.95, 7947 "lowPrice": 49.95, 7948 "offerCount": 3, 7949 "offers": [{ 7950 "@type" : "Offer","sku": "FRAOMA-S15","gtin12": "053176175737","availability" : "http://schema.org/InStock", 7951 "price" : 99.95, 7952 "priceCurrency" : "USD", 7953 "priceValidUntil": "2026-12-31", 7954 "url" : "https:\/\/www.rockymountainoils.com\/products\/frankincense-sacred-essential-oil?variant=44111529771330" 7955 }, 7956{ 7957 "@type" : "Offer","sku": "FRAOMA-S5","gtin12": "053176175744","availability" : "http://schema.org/InStock", 7958 "price" : 49.95, 7959 "priceCurrency" : "USD", 7960 "priceValidUntil": "2026-12-31", 7961 "url" : "https:\/\/www.rockymountainoils.com\/products\/frankincense-sacred-essential-oil?variant=44276013269314" 7962 }, 7963{ 7964 "@type" : "Offer","sku": "FRAOMA-4OZ","gtin12": "053176183237","availability" : "http://schema.org/InStock", 7965 "price" : 249.95, 7966 "priceCurrency" : "USD", 7967 "priceValidUntil": "2026-12-31", 7968 "url" : "https:\/\/www.rockymountainoils.com\/products\/frankincense-sacred-essential-oil?variant=47468641616194" 7969 } 7970] 7971 } 7972 } 7973 </script>
7973</div> 7974 7975<style> 7976/* Ensure visually-hidden utility exists even if theme lacks it */ 7977.visually-hidden { 7978 position: absolute !important; 7979 width: 1px !important; 7980 height: 1px !important; 7981 padding: 0 !important; 7982 margin: -1px !important; 7983 overflow: hidden !important; 7984 clip: rect(0, 0, 0, 0) !important; 7985 white-space: nowrap !important; 7986 border: 0 !important; 7987} 7988 7989/* Ensure the main product image is tappable on iOS */ 7990.main-product-image { 7991 cursor: pointer; 7992 -webkit-tap-highlight-color: rgba(0,0,0,0.05); 7993 touch-action: manipulation; 7994} 7995 7996/* ULTIMATE FIX - Override anything that hides select text */ 7997.product-variants-select, 7998.product-variants-select.no-js-only, 7999select.product-variants-select, 8000select[id*="ProductSelect-"] { 8001 color: #1a1a1a !important; 8002 opacity: 1 !important; 8003 background-color: #ffffff !important; 8004 -webkit-text-fill-color: #1a1a1a !important; 8005} 8006 8007.product-variants-select option, 8008select[id*="ProductSelect-"] option { 8009 color: #1a1a1a !important; 8010 background-color: #ffffff !important; 8011 -webkit-text-fill-color: #1a1a1a !important; 8012} 8013 8014.product-variants-select option:checked, 8015select[id*="ProductSelect-"] option:checked { 8016 color: #1a1a1a !important; 8017 background-color: #e8f0fe !important; 8018} 8019 8020.product-variants-select option:disabled, 8021select[id*="ProductSelect-"] option:disabled { 8022 color: #6c6c6c !important; 8023 background-color: #f5f5f5 !important; 8024 -webkit-text-fill-color: #6c6c6c !important; 8025 opacity: 1 !important; 8026} 8027 8028.product-variants-select:focus, 8029select[id*="ProductSelect-"]:focus { 8030 color: #1a1a1a !important; 8031 outline: 3px solid #000000ff !important; 8032} 8033</style> 8034 </div><div class="item"> 8035
8035<script> 8036(function() { 8037 class ProductCardVariantSelector { 8038 constructor(container) { 8039 this.container = container; 8040 if (!this.container) return; 8041 8042 this.form = this.container.querySelector('.product-form'); 8043 this.variantSelectors = this.container.querySelectorAll('.variant-select'); 8044 this.masterSelect = this.container.querySelector('.product-variants-select'); 8045 this.productImage = this.container.querySelector('.main-product-image'); 8046 this.priceWrapper = this.container.querySelector('[id^="ProductPrice-"]'); 8047 this.currentPriceElement = this.container.querySelector('[id^="CurrentPrice-"]'); 8048 this.comparePriceElement = this.container.querySelector('[id^="ComparePrice-"]'); 8049 this.addToCartButton = this.container.querySelector('[id^="AddToCart-"]'); 8050 this.addToCartText = this.container.querySelector('[id^="AddToCartText-"]'); 8051 this.notifyMeButton = this.container.querySelector('[id^="NotifyMe-"]'); 8052 this.variantsJsonScript = this.container.querySelector('[id^="VariantsJson-"]'); 8053 this.dataStore = this.container.querySelector('[id^="DataStore-"]'); 8054 this.saleTag = this.container.querySelector('.hc-sale-tag'); 8055 this.statusElement = this.container.querySelector('[id^="variant-status-"]'); 8056 8057 if (!this.masterSelect || !this.variantsJsonScript) return; 8058 8059 try { 8060 this.productVariants = JSON.parse(this.variantsJsonScript.textContent); 8061 } catch (e) { return; } 8062 8063 this.mainImageUrl = this.dataStore ? this.dataStore.dataset.mainImageUrl : null; 8064 this.productTitle = this.dataStore ? this.dataStore.dataset.productTitle : ''; 8065 8066 this.init(); 8067 } 8068 8069 init() { 8070 // --- iOS-safe image tap handling (works on iPhone 16, 17 Pro Max, etc.) --- 8071 if (this.productImage) { 8072 let touchStartX = 0, touchStartY = 0, touchMoved = false; 8073 let lastTouchTime = 0; 8074 8075 this.productImage.style.cursor = 'pointer'; 8076 this.productImage.setAttribute('role', 'button'); 8077 this.productImage.setAttribute('tabindex', '0'); 8078 8079 this.productImage.addEventListener('touchstart', (e) => { 8080 const t = e.touches[0]; 8081 touchStartX = t.clientX; 8082 touchStartY = t.clientY; 8083 touchMoved = false; 8084 }, { passive: true }); 8085 8086 this.productImage.addEventListener('touchmove', (e) => { 8087 const t = e.touches[0]; 8088 if (Math.abs(t.clientX - touchStartX) > 10 || 8089 Math.abs(t.clientY - touchStartY) > 10) { 8090 touchMoved = true; 8091 } 8092 }, { passive: true }); 8093 8094 this.productImage.addEventListener('touchend', (e) => { 8095 if (touchMoved) return; 8096 lastTouchTime = Date.now(); 8097 e.preventDefault(); 8098 this.onImageTap(e); 8099 }, { passive: false }); 8100 8101 // Desktop / non-touch fallback (with double-fire protection after touchend) 8102 this.productImage.addEventListener('click', (e) => { 8103 if (Date.now() - lastTouchTime < 500) return; 8104 this.onImageTap(e); 8105 }); 8106 8107 this.productImage.addEventListener('keydown', (e) => { 8108 if (e.key === 'Enter' || e.key === ' ') { 8109 e.preventDefault(); 8110 this.onImageTap(e); 8111 } 8112 }); 8113 } 8114 8115 // --- Variant select listeners --- 8116 if (this.variantSelectors.length > 0) { 8117 this.variantSelectors.forEach(select => { 8118 select.addEventListener('change', this.onVariantChange.bind(this)); 8119 }); 8120 this.updateProductDetails(this.getCurrentVariant()); 8121 } 8122 } 8123 8124 // ============================================================ 8125 // CHANGE THIS IF YOU WANT DIFFERENT TAP BEHAVIOR 8126 // Currently: navigates to the product page. 8127 // ============================================================ 8128 onImageTap(e) { 8129 const link = this.container.querySelector('.product-title-link'); 8130 if (link && link.href && link.href !== '#') { 8131 window.location.href = link.href; 8132 } 8133 } 8134 // ============================================================ 8135 8136 onVariantChange() { 8137 const selectedOptions = Array.from(this.variantSelectors).map(s => s.value); 8138 const matchedVariant = this.findMatchingVariant(selectedOptions); 8139 8140 if (matchedVariant) { 8141 this.masterSelect.value = matchedVariant.id; 8142 this.updateProductDetails(matchedVariant); 8143 if (this.statusElement) this.statusElement.textContent = ''; 8144 } else { 8145 if (this.statusElement) { 8146 this.statusElement.textContent = 'No available variant matches your selection'; 8147 } 8148 this.updateProductDetails(null); 8149 } 8150 } 8151 8152 findMatchingVariant(selectedOptions) { 8153 return this.productVariants.find(variant => { 8154 if (!variant.options || variant.options.length !== selectedOptions.length) return false;
8155 return selectedOptions.every((val, i) => variant.options[i] === val); 8156 }); 8157 } 8158 8159 getCurrentVariant() { 8160 if (!this.masterSelect) return null; 8161 const id = this.masterSelect.value; 8162 if (!id) return null; 8163 return this.productVariants.find(v => String(v.id) === String(id)) || null; 8164 } 8165 8166 // Shopify CDN: insert _WIDTHx before extension for a properly sized image 8167 sizedImageUrl(src, width) { 8168 if (!src) return src; 8169 return src.replace(/(\.[a-z]{3,4})(\?|$)/i, `_${width}x$1$2`); 8170 } 8171 8172 updateProductDetails(variant) { 8173 this.container.setAttribute('aria-busy', 'true'); 8174 8175 if (!variant) { 8176 if (this.addToCartButton) this.addToCartButton.disabled = true; 8177 if (this.addToCartText) this.addToCartText.textContent = 'Unavailable'; 8178 if (this.notifyMeButton) this.notifyMeButton.style.display = 'none'; 8179 if (this.priceWrapper) this.priceWrapper.classList.remove('sale'); 8180 if (this.comparePriceElement) this.comparePriceElement.style.display = 'none'; 8181 if (this.saleTag) this.saleTag.style.display = 'none'; 8182 this.container.setAttribute('aria-busy', 'false'); 8183 return; 8184 } 8185 8186 // 1. Image 8187 if (this.productImage) { 8188 if (variant.featured_image && variant.featured_image.src) { 8189 const sized = this.sizedImageUrl(variant.featured_image.src, 300); 8190 const variantOptions = variant.options ? variant.options.join(' - ') : ''; 8191 this.productImage.src = sized; 8192 this.productImage.srcset = ''; 8193 this.productImage.alt = variant.featured_image.alt 8194 ? variant.featured_image.alt 8195 : (this.productTitle + (variantOptions ? ' - ' + variantOptions : '')); 8196 } else if (this.mainImageUrl) { 8197 this.productImage.src = this.mainImageUrl; 8198 this.productImage.srcset = ''; 8199 this.productImage.alt = this.productTitle; 8200 } 8201 } 8202 8203 // 2. Price 8204 const moneyFormat = "${{amount}}"; 8205 const formatMoney = (cents, format) => { 8206 if (typeof cents === 'string') cents = cents.replace('.', ''); 8207 let value = ''; 8208 const placeholderRegex = /\{\{\s*(\w+)\s*\}\}/; 8209 const formatString = (format || moneyFormat).replace(/<[^>]*>/g, ''); 8210 8211 function formatWithDelimiters(number, precision, thousands, decimal) { 8212 precision = precision ?? 2; 8213 thousands = thousands ?? ','; 8214 decimal = decimal ?? '.'; 8215 if (isNaN(number) || number == null) return 0; 8216 number = (number / 100.0).toFixed(precision); 8217 const parts = number.split('.'); 8218 const dollars = parts[0].replace(/(\d)(?=(\d\d\d)+(?!\d))/g, '$1' + thousands); 8219 const centsPart = parts[1] ? (decimal + parts[1]) : ''; 8220 return dollars + centsPart; 8221 } 8222 8223 switch (formatString.match(placeholderRegex)?.[1]) { 8224 case 'amount': value = formatWithDelimiters(cents, 2); break; 8225 case 'amount_no_decimals': value = formatWithDelimiters(cents, 0); break; 8226 case 'amount_with_comma_separator': value = formatWithDelimiters(cents, 2, '.', ','); break; 8227 case 'amount_no_decimals_with_comma_separator': value = formatWithDelimiters(cents, 0, '.', ','); break; 8228 case 'amount_with_apostrophe_separator': value = formatWithDelimiters(cents, 2, "'", "."); break; 8229 case 'amount_no_decimals_with_space_separator': value = formatWithDelimiters(cents, 0, " ", ","); break; 8230 case 'amount_with_space_separator': value = formatWithDelimiters(cents, 2, " ", ","); break; 8231 default: value = formatWithDelimiters(cents, 2); 8232 } 8233 try { 8234 return formatString.replace(placeholderRegex, value); 8235 } catch (e) { 8236 const fallback = (cents / 100.0).toFixed(2); 8237 return formatString.includes('') 8238 ? formatString.replace(placeholderRegex, fallback) 8239 : fallback; 8240 } 8241 }; 8242 8243 if (this.currentPriceElement) { 8244 this.currentPriceElement.textContent = formatMoney(variant.price, moneyFormat); 8245 } 8246 if (this.comparePriceElement && this.priceWrapper) { 8247 if (variant.compare_at_price && variant.compare_at_price > variant.price) { 8248 this.comparePriceElement.textContent = formatMoney(variant.compare_at_price, moneyFormat); 8249 this.comparePriceElement.style.display = ''; 8250 this.priceWrapper.classList.add('sale'); 8251 } else { 8252 this.comparePriceElement.textContent = ''; 8253 this.comparePriceElement.style.display = 'none'; 8254 this.priceWrapper.classList.remove('sale'); 8255 } 8256 } 8257 8258 // 3. Sale tag 8259 if (this.saleTag) { 8260 const isDiscounted = variant.compare_at_price && variant.compare_at_price > variant.price; 8261 if (isDiscounted && variant.available) { 8262 this.saleTag.style.display = 'block'; 8263 const discount = Math.round((variant.compare_at_price - variant.price) * 100.0 / variant.compare_at_price); 8264 const span = this.saleTag.querySelector('span'); 8265 if (span) span.textContent = discount + '%'; 8266 this.saleTag.setAttribute('aria-label', 'Save ' + discount + '%'); 8267 this.saleTag.setAttribute('role', 'status'); 8268 } else { 8269 this.saleTag.style.display = 'none'; 8270 } 8271 } 8272 8273 // 4. Add to cart 8274 if (this.addToCartButton && this.addToCartText) { 8275 if (variant.available) { 8276 this.addToCartButton.disabled = false;
8277 this.addToCartText.innerHTML = 'Add to Cart <i class="cart-icon"></i>'; 8278 this.addToCartButton.setAttribute('aria-label', 'Add to Cart - Add ' + this.productTitle + ' to cart'); 8279 if (this.notifyMeButton) this.notifyMeButton.style.display = 'none'; 8280 } else { 8281 this.addToCartButton.disabled = true; 8282 this.addToCartText.textContent = 'Sold Out'; 8283 this.addToCartButton.setAttribute('aria-label', 'Sold Out - ' + this.productTitle + ' is sold out'); 8284 if (this.notifyMeButton) this.notifyMeButton.style.display = 'block'; 8285 } 8286 } 8287 if (this.notifyMeButton) { 8288 this.notifyMeButton.setAttribute('data-variant-id', variant.id); 8289 } 8290 8291 this.container.setAttribute('aria-busy', 'false'); 8292 } 8293 } 8294 8295 function initProductCards(root) { 8296 root = root || document; 8297 root.querySelectorAll('.product-card-wrapper[data-product-id]').forEach(cardContainer => { 8298 if (cardContainer.dataset.variantSelectorInit === 'true') return; 8299 cardContainer.dataset.variantSelectorInit = 'true'; 8300 new ProductCardVariantSelector(cardContainer); 8301 }); 8302 } 8303 8304 if (document.readyState === 'loading') { 8305 document.addEventListener('DOMContentLoaded', () => initProductCards()); 8306 } else { 8307 initProductCards(); 8308 } 8309 8310 document.addEventListener('shopify:section:load', (e) => initProductCards(e.target)); 8311})(); 8312</script>
8312<div class="product-card-wrapper" data-product-id="8025567494466" aria-busy="false"> 8313 8314 <div class="product-image" id="ProductImageWrapper-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025567494466"><!-- WISHLIST BUTTON --> 8315 <div class='xb-wishlist__btn-custom'> 8316 <div 8317 class='xb-wishlist__add' 8318 xb-product-id='8025567494466' 8319 xb-product-title='Helichrysum italicum Essential Oil' 8320 xb-product-variant='44111532425538' 8321 xb-is-in-stock='true' 8322 xb-product-handle='helichrysum-italicum-essential-oil' 8323 > 8324 <button aria-label="Add Helichrysum italicum Essential Oil to wishlist" aria-pressed="false"> 8325 <svg 8326 xmlns='http://www.w3.org/2000/svg' 8327 width='20' 8328 height='20' 8329 viewBox='0 0 24 24' 8330 fill='none' 8331 stroke='#FF4A71' 8332 stroke-width='2' 8333 stroke-linecap='round' 8334 stroke-linejoin='round' 8335 aria-hidden='true' 8336 focusable='false' 8337 > 8338 <path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"></path> 8339 </svg> 8340 </button> 8341 </div> 8342 8343 <div class="xb-wishlist__loading" xb-product-id="8025567494466"> 8344 <span class="loading-spinner"></span> 8345 </div> 8346 8347 <div class='xb-wishlist__remove' xb-product-id='8025567494466' xb-is-in-stock='true'> 8348 <button aria-label="Remove Helichrysum italicum Essential Oil from wishlist" aria-pressed="true"> 8349 <svg 8350 xmlns='http://www.w3.org/2000/svg' 8351 width='20' 8352 height='20'
8353 viewBox='0 0 24 24' 8354 fill='#FF4A71' 8355 stroke='#FF4A71' 8356 stroke-width='2' 8357 stroke-linecap='round' 8358 stroke-linejoin='round' 8359 aria-hidden='true' 8360 focusable='false' 8361 > 8362 <path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"></path> 8363 </svg> 8364 </button> 8365 </div> 8366 </div><img 8367 id="ProductImage-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025567494466" 8368 class="main-product-image" 8369 src="//www.rockymountainoils.com/cdn/shop/files/helichrysum-italicum-essential-oil-15ml-1.jpg?crop=center&height=300&v=1769670122&width=300" 8370 alt="Helichrysum italicum Essential Oil - Helichrysum Essential Oil" 8371 width="300" 8372 height="300" 8373 loading="lazy" 8374 /></div> 8375 8376 <div class="product-content"> 8377 <div class="product-title"> 8378 <a href="/products/helichrysum-italicum-essential-oil" class="product-title-link" aria-label="View Helichrysum italicum Essential Oil"> 8379 <h2>Helichrysum italicum Essential Oil</h2> 8380 </a> 8381 </div><div> 8382 <div class="product-subtitle"> 8383 Herbal, earthy; good for skin regeneration & wounds. 8384 </div> 8385 </div><div class="yotpo-widget-instance" data-yotpo-instance-id="503375" data-yotpo-product-id="8025567494466" data-yotpo-cart-product-id="" data-yotpo-section-id="index"></div><!-- START Variant Selection Form --> 8386 <div class="product-data-store" style="display:none;" 8387 data-main-image-url="//www.rockymountainoils.com/cdn/shop/files/helichrysum-italicum-essential-oil-15ml-1.jpg?v=1769670122&width=300" 8388 data-product-title="Helichrysum italicum Essential Oil" 8389 id="DataStore-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025567494466"> 8390 </div> 8391 8392
8392<script id="VariantsJson-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025567494466" type="application/json"> 8393 [{"id":44111532425538,"title":"15ml","option1":"15ml","option2":null,"option3":null,"sku":"HELCRO-S15","requires_shipping":true,"taxable":true,"featured_image":{"id":44126478205250,"product_id":8025567494466,"position":1,"created_at":"2024-02-14T14:10:54-07:00","updated_at":"2026-01-29T00:02:02-07:00","alt":"Helichrysum italicum Essential Oil - Helichrysum Essential Oil","width":617,"height":617,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/helichrysum-italicum-essential-oil-15ml-1.jpg?v=1769670122","variant_ids":[44111532425538]},"available":true,"name":"Helichrysum italicum Essential Oil - 15ml","public_title":"15ml","options":["15ml"],"price":15995,"weight":45,"compare_at_price":null,"inventory_management":"shopify","barcode":"053176175874","featured_media":{"alt":"Helichrysum italicum Essential Oil - Helichrysum Essential Oil","id":36602306330946,"position":1,"preview_image":{"aspect_ratio":1.0,"height":617,"width":617,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/helichrysum-italicum-essential-oil-15ml-1.jpg?v=1769670122"}},"requires_selling_plan":false,"selling_plan_allocations":[{"price_adjustments":[{"position":1,"price":11197}],"price":11197,"compare_at_price":15995,"per_delivery_price":11197,"selling_plan_id":691785924975,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":13596},{"position":2,"price":12796}],"price":13596,"compare_at_price":15995,"per_delivery_price":13596,"selling_plan_id":691785957743,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":14396},{"position":2,"price":13596}],"price":14396,"compare_at_price":15995,"per_delivery_price":14396,"selling_plan_id":691785990511,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":15195},{"position":2,"price":14396}],"price":15195,"compare_at_price":15995,"per_delivery_price":15195,"selling_plan_id":691786023279,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":14396},{"position":2,"price":13596}],"price":14396,"compare_at_price":15995,"per_delivery_price":14396,"selling_plan_id":691786088815,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":15195},{"position":2,"price":14396}],"price":15195,"compare_at_price":15995,"per_delivery_price":15195,"selling_plan_id":691786121583,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":13596},{"position":2,"price":12796}],"price":13596,"compare_at_price":15995,"per_delivery_price":13596,"selling_plan_id":691795362159,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":14396},{"position":2,"price":13596}],"price":14396,"compare_at_price":15995,"per_delivery_price":14396,"selling_plan_id":691795394927,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":15195},{"position":2,"price":14396}],"price":15195,"compare_at_price":15995,"per_delivery_price":15195,"selling_plan_id":691795427695,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"}],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":52064202457455,"title":"1ml","option1":"1ml","option2":null,"option3":null,"sku":"HELCRO-1ML","requires_shipping":true,"taxable":true,"featured_image":{"id":60328887124335,"product_id":8025567494466,"position":8,"created_at":"2025-06-30T23:35:19-06:00","updated_at":"2026-01-29T00:02:02-07:00","alt":"Small brown bottle with a black cap of Helichrysum italicum essential oil on a white background, featuring a red 'LIMITED TIME ONLY!' banner.","width":1080,"height":1080,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/Helichrysum_Italicum_1ml.webp?v=1769670122","variant_ids":[52064202457455]},"available":true,"name":"Helichrysum italicum Essential Oil - 1ml","public_title":"1ml","options":["1ml"],"price":1795,"weight":25,"compare_at_price":null,"inventory_management":"shopify","barcode":"053176184760","featured_media":{"alt":"Small brown bottle with a black cap of Helichrysum italicum essential oil on a white background, featuring a red 'LIMITED TIME ONLY!' banner.","id":51984769057135,"position":8,"preview_image":{"aspect_ratio":1.0,"height":1080,"width":1080,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/Helichrysum_Italicum_1ml.webp?v=1769670122"}},"requires_selling_plan":false,"selling_plan_allocations":[{"price_adjustments":[{"position":1,"price":1257}],"price":1257,"compare_at_price":1795,"per_delivery_price":1257,"selling_plan_id":691785924975,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":1526},{"position":2,"price":1436}],"price":1526,"compare_at_price":1795,"per_delivery_price":1526,"selling_plan_id":691785957743,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":1616},{"position":2,"price":1526}],"price":1616,"compare_at_price":1795,"per_delivery_price":1616,"selling_plan_id":691785990511,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":1705},{"position":2,"price":1616}],"price":1705,"compare_at_price":1795,"per_delivery_price":1705,"selling_plan_id":691786023279,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":1616},{"position":2,"price":1526}],"price":1616,"compare_at_price":1795,"per_delivery_price":1616,"selling_plan_id":691786088815,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":1705},{"position":2,"price":1616}],"price":1705,"compare_at_price":1795,"per_delivery_price":1705,"selling_plan_id":691786121583,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":1526},{"position":2,"price":1436}],"price":1526,"compare_at_price":1795,"per_delivery_price":1526,"selling_plan_id":691795362159,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":1616},{"position":2,"price":1526}],"price":1616,"compare_at_price":1795,"per_delivery_price":1616,"selling_plan_id":691795394927,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":1705},{"position":2,"price":1616}],"price":1705,"compare_at_price":1795,"per_delivery_price":1705,"selling_plan_id":691795427695,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"}],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":48953635078466,"title":"5ml","option1":"5ml","option2":null,"option3":null,"sku":"HELCRO-S5","requires_shipping":true,"taxable":true,"featured_image":{"id":44126471487810,"product_id":8025567494466,"position":4,"created_at":"2024-02-14T14:10:10-07:00","updated_at":"2026-01-29T00:02:02-07:00","alt":"Helichrysum Essential Oil - 5ml - Rocky Mountain Oils","width":583,"height":583,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/helichrysum-italicum-essential-oil-5ml-1.jpg?v=1769670122","variant_ids":[48953635078466]},"available":true,"name":"Helichrysum italicum Essential Oil - 5ml","public_title":"5ml","options":["5ml"],"price":7995,"weight":28,"compare_at_price":null,"inventory_management":"shopify","barcode":"053176175881","featured_media":{"alt":"Helichrysum Essential Oil - 5ml - Rocky Mountain Oils","id":36602298696002,"position":4,"preview_image":{"aspect_ratio":1.0,"height":583,"width":583,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/helichrysum-italicum-essential-oil-5ml-1.jpg?v=1769670122"}},"requires_selling_plan":false,"selling_plan_allocations":[{"price_adjustments":[{"position":1,"price":5597}],"price":5597,"compare_at_price":7995,"per_delivery_price":5597,"selling_plan_id":691785924975,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":6796},{"position":2,"price":6396}],"price":6796,"compare_at_price":7995,"per_delivery_price":6796,"selling_plan_id":691785957743,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":7196},{"position":2,"price":6796}],"price":7196,"compare_at_price":7995,"per_delivery_price":7196,"selling_plan_id":691785990511,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":7595},{"position":2,"price":7196}],"price":7595,"compare_at_price":7995,"per_delivery_price":7595,"selling_plan_id":691786023279,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":7196},{"position":2,"price":6796}],"price":7196,"compare_at_price":7995,"per_delivery_price":7196,"selling_plan_id":691786088815,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":7595},{"position":2,"price":7196}],"price":7595,"compare_at_price":7995,"per_delivery_price":7595,"selling_plan_id":691786121583,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":6796},{"position":2,"price":6396}],"price":6796,"compare_at_price":7995,"per_delivery_price":6796,"selling_plan_id":691795362159,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":7196},{"position":2,"price":6796}],"price":7196,"compare_at_price":7995,"per_delivery_price":7196,"selling_plan_id":691795394927,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":7595},{"position":2,"price":7196}],"price":7595,"compare_at_price":7995,"per_delivery_price":7595,"selling_plan_id":691795427695,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"}],"quantity_rule":{"min":1,"max":null,"increment":1}}] 8394 </script>
8394<form method="post" action="/cart/add" id="product-form-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025567494466" accept-charset="UTF-8" class="product-variants product-form" enctype="multipart/form-data" data-productid="8025567494466" novalidate="novalidate" data-type="add-to-cart-form"><input type="hidden" name="form_type" value="product" /><input type="hidden" name="utf8" value="â" /><div class="product-price-option"> 8395 <div class="product-price" id="ProductPrice-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025567494466" aria-live="polite" aria-atomic="true"> 8396 <span class="compare-at-price" id="ComparePrice-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025567494466" style="display: none;"></span> 8397 <span class="current-price" id="CurrentPrice-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025567494466">$159.95</span> 8398 8399 8400 </div> 8401 8402 8403 <div class="product-option"> 8404 <label for="Option-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025567494466-0" class="visually-hidden"> 8405 Select Size for Helichrysum italicum Essential Oil 8406 </label> 8407 <select 8408 id="Option-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025567494466-0" 8409 class="variant-select" 8410 name="options[Size]" 8411 form="product-form-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025567494466" 8412 data-index="option0" 8413 ><option 8414 value="15ml" 8415 selected="selected" 8416 > 8417 15ml 8418 </option><option 8419 value="1ml" 8420 8421 > 8422 1ml 8423 </option><option 8424 value="5ml" 8425 8426 > 8427 5ml 8428 </option></select> 8429 </div> 8430 8431 </div><label for="ProductSelect-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025567494466" class="visually-hidden"> 8432 Choose variant for Helichrysum italicum Essential Oil 8433 </label> 8434 <select 8435 name="id" 8436 data-productid="8025567494466" 8437 id="ProductSelect-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025567494466" 8438 class="product-variants-select no-js-only" 8439 ><option 8440 value="44111532425538" 8441 selected="selected" 8442 8443 > 8444 15ml - $159.95 8445 </option><option 8446 value="52064202457455" 8447 8448 8449 > 8450 1ml - $17.95 8451 </option><option 8452 value="48953635078466" 8453 8454 8455 > 8456 5ml - $79.95 8457 </option></select> 8458 8459 <div class="product-addtocart" id="AddToCartWrapper-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025567494466"> 8460 <input type="hidden" name="quantity" value="1"> 8461 8462 8463 <div class="visually-hidden" role="status" id="variant-status-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025567494466" aria-l
8463ive="assertive"></div> 8464 8465 <span id="cart-action-desc-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025567494466" class="visually-hidden">Adds item to your shopping cart</span> 8466 8467 <button 8468 class="addtocart-btn add-to-cart" 8469 type="submit" 8470 name="add" 8471 aria-label="Add to Cart - Add Helichrysum italicum Essential Oil to cart" 8472 aria-describedby="cart-action-desc-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025567494466" 8473 id="AddToCart-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025567494466" 8474 8475 > 8476 <span id="AddToCartText-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025567494466">Add to Cart <i class="cart-icon" aria-hidden="true"></i></span> 8477 </button> 8478 </div><input type="hidden" name="product-id" value="8025567494466" /><input type="hidden" name="section-id" value="template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040" /></form><!-- END Variant Selection Form --></div>
8478<script type="application/ld+json"> 8479 { 8480 "@context": "http://schema.org/", 8481 "@type": "Product", 8482 "name": "Helichrysum italicum Essential Oil", 8483 "url": "https:\/\/www.rockymountainoils.com\/products\/helichrysum-italicum-essential-oil","image": [ 8484 "https:\/\/www.rockymountainoils.com\/cdn\/shop\/files\/helichrysum-italicum-essential-oil-15ml-1.jpg?v=1769670122\u0026width=617" 8485 ], 8486 "description": "Helichrysum italicum Essential Oil, also known as Immortelle or Everlasting Flower, is steam distilled from the flowers and leaves of the Helichrysum plant. This precious oil offers a rich, floral scent with herbal notes.\nHelichrysum contains beneficial compounds that may support skin health and overall wellness. Its soothing aroma can help create a calming atmosphere when diffused. For topical use, dilute with a carrier oil to enjoy its skin-nourishing properties.\n\n","sku": "HELCRO-S15", 8487 "brand": { 8488 "@type": "Brand", 8489 "name": "Rocky Mountain Oils" 8490 }, 8491 "offers": { 8492 "@type": "AggregateOffer", 8493 "availability": "http://schema.org/InStock", 8494 "priceCurrency": "USD", 8495 "highPrice": 159.95, 8496 "lowPrice": 17.95, 8497 "offerCount": 3, 8498 "offers": [{ 8499 "@type" : "Offer","sku": "HELCRO-S15","gtin12": "053176175874","availability" : "http://schema.org/InStock", 8500 "price" : 159.95, 8501 "priceCurrency" : "USD", 8502 "priceValidUntil": "2026-12-31", 8503 "url" : "https:\/\/www.rockymountainoils.com\/products\/helichrysum-italicum-essential-oil?variant=44111532425538" 8504 }, 8505{ 8506 "@type" : "Offer","sku": "HELCRO-1ML","gtin12": "053176184760","availability" : "http://schema.org/InStock", 8507 "price" : 17.95, 8508 "priceCurrency" : "USD", 8509 "priceValidUntil": "2026-12-31", 8510 "url" : "https:\/\/www.rockymountainoils.com\/products\/helichrysum-italicum-essential-oil?variant=52064202457455" 8511 }, 8512{ 8513 "@type" : "Offer","sku": "HELCRO-S5","gtin12": "053176175881","availability" : "http://schema.org/InStock", 8514 "price" : 79.95, 8515 "priceCurrency" : "USD", 8516 "priceValidUntil": "2026-12-31", 8517 "url" : "https:\/\/www.rockymountainoils.com\/products\/helichrysum-italicum-essential-oil?variant=48953635078466" 8518 } 8519] 8520 } 8521 } 8522 </script>
8522</div> 8523 8524<style> 8525/* Ensure visually-hidden utility exists even if theme lacks it */ 8526.visually-hidden { 8527 position: absolute !important; 8528 width: 1px !important; 8529 height: 1px !important; 8530 padding: 0 !important; 8531 margin: -1px !important; 8532 overflow: hidden !important; 8533 clip: rect(0, 0, 0, 0) !important; 8534 white-space: nowrap !important; 8535 border: 0 !important; 8536} 8537 8538/* Ensure the main product image is tappable on iOS */ 8539.main-product-image { 8540 cursor: pointer; 8541 -webkit-tap-highlight-color: rgba(0,0,0,0.05); 8542 touch-action: manipulation; 8543} 8544 8545/* ULTIMATE FIX - Override anything that hides select text */ 8546.product-variants-select, 8547.product-variants-select.no-js-only, 8548select.product-variants-select, 8549select[id*="ProductSelect-"] { 8550 color: #1a1a1a !important; 8551 opacity: 1 !important; 8552 background-color: #ffffff !important; 8553 -webkit-text-fill-color: #1a1a1a !important; 8554} 8555 8556.product-variants-select option, 8557select[id*="ProductSelect-"] option { 8558 color: #1a1a1a !important; 8559 background-color: #ffffff !important; 8560 -webkit-text-fill-color: #1a1a1a !important; 8561} 8562 8563.product-variants-select option:checked, 8564select[id*="ProductSelect-"] option:checked { 8565 color: #1a1a1a !important; 8566 background-color: #e8f0fe !important; 8567} 8568 8569.product-variants-select option:disabled, 8570select[id*="ProductSelect-"] option:disabled { 8571 color: #6c6c6c !important; 8572 background-color: #f5f5f5 !important; 8573 -webkit-text-fill-color: #6c6c6c !important; 8574 opacity: 1 !important; 8575} 8576 8577.product-variants-select:focus, 8578select[id*="ProductSelect-"]:focus { 8579 color: #1a1a1a !important; 8580 outline: 3px solid #000000ff !important; 8581} 8582</style> 8583 </div><div class="item"> 8584
8584<script> 8585(function() { 8586 class ProductCardVariantSelector { 8587 constructor(container) { 8588 this.container = container; 8589 if (!this.container) return; 8590 8591 this.form = this.container.querySelector('.product-form'); 8592 this.variantSelectors = this.container.querySelectorAll('.variant-select'); 8593 this.masterSelect = this.container.querySelector('.product-variants-select'); 8594 this.productImage = this.container.querySelector('.main-product-image'); 8595 this.priceWrapper = this.container.querySelector('[id^="ProductPrice-"]'); 8596 this.currentPriceElement = this.container.querySelector('[id^="CurrentPrice-"]'); 8597 this.comparePriceElement = this.container.querySelector('[id^="ComparePrice-"]'); 8598 this.addToCartButton = this.container.querySelector('[id^="AddToCart-"]'); 8599 this.addToCartText = this.container.querySelector('[id^="AddToCartText-"]'); 8600 this.notifyMeButton = this.container.querySelector('[id^="NotifyMe-"]'); 8601 this.variantsJsonScript = this.container.querySelector('[id^="VariantsJson-"]'); 8602 this.dataStore = this.container.querySelector('[id^="DataStore-"]'); 8603 this.saleTag = this.container.querySelector('.hc-sale-tag'); 8604 this.statusElement = this.container.querySelector('[id^="variant-status-"]'); 8605 8606 if (!this.masterSelect || !this.variantsJsonScript) return; 8607 8608 try { 8609 this.productVariants = JSON.parse(this.variantsJsonScript.textContent); 8610 } catch (e) { return; } 8611 8612 this.mainImageUrl = this.dataStore ? this.dataStore.dataset.mainImageUrl : null; 8613 this.productTitle = this.dataStore ? this.dataStore.dataset.productTitle : ''; 8614 8615 this.init(); 8616 } 8617 8618 init() { 8619 // --- iOS-safe image tap handling (works on iPhone 16, 17 Pro Max, etc.) --- 8620 if (this.productImage) { 8621 let touchStartX = 0, touchStartY = 0, touchMoved = false; 8622 let lastTouchTime = 0; 8623 8624 this.productImage.style.cursor = 'pointer'; 8625 this.productImage.setAttribute('role', 'button'); 8626 this.productImage.setAttribute('tabindex', '0'); 8627 8628 this.productImage.addEventListener('touchstart', (e) => { 8629 const t = e.touches[0]; 8630 touchStartX = t.clientX; 8631 touchStartY = t.clientY; 8632 touchMoved = false; 8633 }, { passive: true }); 8634 8635 this.productImage.addEventListener('touchmove', (e) => { 8636 const t = e.touches[0]; 8637 if (Math.abs(t.clientX - touchStartX) > 10 || 8638 Math.abs(t.clientY - touchStartY) > 10) { 8639 touchMoved = true; 8640 } 8641 }, { passive: true }); 8642 8643 this.productImage.addEventListener('touchend', (e) => { 8644 if (touchMoved) return; 8645 lastTouchTime = Date.now(); 8646 e.preventDefault(); 8647 this.onImageTap(e); 8648 }, { passive: false }); 8649 8650 // Desktop / non-touch fallback (with double-fire protection after touchend) 8651 this.productImage.addEventListener('click', (e) => { 8652 if (Date.now() - lastTouchTime < 500) return; 8653 this.onImageTap(e); 8654 }); 8655 8656 this.productImage.addEventListener('keydown', (e) => { 8657 if (e.key === 'Enter' || e.key === ' ') { 8658 e.preventDefault(); 8659 this.onImageTap(e); 8660 } 8661 }); 8662 } 8663 8664 // --- Variant select listeners --- 8665 if (this.variantSelectors.length > 0) { 8666 this.variantSelectors.forEach(select => { 8667 select.addEventListener('change', this.onVariantChange.bind(this)); 8668 }); 8669 this.updateProductDetails(this.getCurrentVariant()); 8670 } 8671 } 8672 8673 // ============================================================ 8674 // CHANGE THIS IF YOU WANT DIFFERENT TAP BEHAVIOR 8675 // Currently: navigates to the product page. 8676 // ============================================================ 8677 onImageTap(e) { 8678 const link = this.container.querySelector('.product-title-link'); 8679 if (link && link.href && link.href !== '#') { 8680 window.location.href = link.href; 8681 } 8682 } 8683 // ============================================================ 8684 8685 onVariantChange() { 8686 const selectedOptions = Array.from(this.variantSelectors).map(s => s.value); 8687 const matchedVariant = this.findMatchingVariant(selectedOptions); 8688 8689 if (matchedVariant) { 8690 this.masterSelect.value = matchedVariant.id; 8691 this.updateProductDetails(matchedVariant); 8692 if (this.statusElement) this.statusElement.textContent = ''; 8693 } else { 8694 if (this.statusElement) { 8695 this.statusElement.textContent = 'No available variant matches your selection'; 8696 } 8697 this.updateProductDetails(null); 8698 } 8699 } 8700 8701 findMatchingVariant(selectedOptions) { 8702 return this.productVariants.find(variant => { 8703 if (!variant.options || variant.options.length !== selectedOptions.length) return false;
8704 return selectedOptions.every((val, i) => variant.options[i] === val); 8705 }); 8706 } 8707 8708 getCurrentVariant() { 8709 if (!this.masterSelect) return null; 8710 const id = this.masterSelect.value; 8711 if (!id) return null; 8712 return this.productVariants.find(v => String(v.id) === String(id)) || null; 8713 } 8714 8715 // Shopify CDN: insert _WIDTHx before extension for a properly sized image 8716 sizedImageUrl(src, width) { 8717 if (!src) return src; 8718 return src.replace(/(\.[a-z]{3,4})(\?|$)/i, `_${width}x$1$2`); 8719 } 8720 8721 updateProductDetails(variant) { 8722 this.container.setAttribute('aria-busy', 'true'); 8723 8724 if (!variant) { 8725 if (this.addToCartButton) this.addToCartButton.disabled = true; 8726 if (this.addToCartText) this.addToCartText.textContent = 'Unavailable'; 8727 if (this.notifyMeButton) this.notifyMeButton.style.display = 'none'; 8728 if (this.priceWrapper) this.priceWrapper.classList.remove('sale'); 8729 if (this.comparePriceElement) this.comparePriceElement.style.display = 'none'; 8730 if (this.saleTag) this.saleTag.style.display = 'none'; 8731 this.container.setAttribute('aria-busy', 'false'); 8732 return; 8733 } 8734 8735 // 1. Image 8736 if (this.productImage) { 8737 if (variant.featured_image && variant.featured_image.src) { 8738 const sized = this.sizedImageUrl(variant.featured_image.src, 300); 8739 const variantOptions = variant.options ? variant.options.join(' - ') : ''; 8740 this.productImage.src = sized; 8741 this.productImage.srcset = ''; 8742 this.productImage.alt = variant.featured_image.alt 8743 ? variant.featured_image.alt 8744 : (this.productTitle + (variantOptions ? ' - ' + variantOptions : '')); 8745 } else if (this.mainImageUrl) { 8746 this.productImage.src = this.mainImageUrl; 8747 this.productImage.srcset = ''; 8748 this.productImage.alt = this.productTitle; 8749 } 8750 } 8751 8752 // 2. Price 8753 const moneyFormat = "${{amount}}"; 8754 const formatMoney = (cents, format) => { 8755 if (typeof cents === 'string') cents = cents.replace('.', ''); 8756 let value = ''; 8757 const placeholderRegex = /\{\{\s*(\w+)\s*\}\}/; 8758 const formatString = (format || moneyFormat).replace(/<[^>]*>/g, ''); 8759 8760 function formatWithDelimiters(number, precision, thousands, decimal) { 8761 precision = precision ?? 2; 8762 thousands = thousands ?? ','; 8763 decimal = decimal ?? '.'; 8764 if (isNaN(number) || number == null) return 0; 8765 number = (number / 100.0).toFixed(precision); 8766 const parts = number.split('.'); 8767 const dollars = parts[0].replace(/(\d)(?=(\d\d\d)+(?!\d))/g, '$1' + thousands); 8768 const centsPart = parts[1] ? (decimal + parts[1]) : ''; 8769 return dollars + centsPart; 8770 } 8771 8772 switch (formatString.match(placeholderRegex)?.[1]) { 8773 case 'amount': value = formatWithDelimiters(cents, 2); break; 8774 case 'amount_no_decimals': value = formatWithDelimiters(cents, 0); break; 8775 case 'amount_with_comma_separator': value = formatWithDelimiters(cents, 2, '.', ','); break; 8776 case 'amount_no_decimals_with_comma_separator': value = formatWithDelimiters(cents, 0, '.', ','); break; 8777 case 'amount_with_apostrophe_separator': value = formatWithDelimiters(cents, 2, "'", "."); break; 8778 case 'amount_no_decimals_with_space_separator': value = formatWithDelimiters(cents, 0, " ", ","); break; 8779 case 'amount_with_space_separator': value = formatWithDelimiters(cents, 2, " ", ","); break; 8780 default: value = formatWithDelimiters(cents, 2); 8781 } 8782 try { 8783 return formatString.replace(placeholderRegex, value); 8784 } catch (e) { 8785 const fallback = (cents / 100.0).toFixed(2); 8786 return formatString.includes('') 8787 ? formatString.replace(placeholderRegex, fallback) 8788 : fallback; 8789 } 8790 }; 8791 8792 if (this.currentPriceElement) { 8793 this.currentPriceElement.textContent = formatMoney(variant.price, moneyFormat); 8794 } 8795 if (this.comparePriceElement && this.priceWrapper) { 8796 if (variant.compare_at_price && variant.compare_at_price > variant.price) { 8797 this.comparePriceElement.textContent = formatMoney(variant.compare_at_price, moneyFormat); 8798 this.comparePriceElement.style.display = ''; 8799 this.priceWrapper.classList.add('sale'); 8800 } else { 8801 this.comparePriceElement.textContent = ''; 8802 this.comparePriceElement.style.display = 'none'; 8803 this.priceWrapper.classList.remove('sale'); 8804 } 8805 } 8806 8807 // 3. Sale tag 8808 if (this.saleTag) { 8809 const isDiscounted = variant.compare_at_price && variant.compare_at_price > variant.price; 8810 if (isDiscounted && variant.available) { 8811 this.saleTag.style.display = 'block'; 8812 const discount = Math.round((variant.compare_at_price - variant.price) * 100.0 / variant.compare_at_price); 8813 const span = this.saleTag.querySelector('span'); 8814 if (span) span.textContent = discount + '%'; 8815 this.saleTag.setAttribute('aria-label', 'Save ' + discount + '%'); 8816 this.saleTag.setAttribute('role', 'status'); 8817 } else { 8818 this.saleTag.style.display = 'none'; 8819 } 8820 } 8821 8822 // 4. Add to cart 8823 if (this.addToCartButton && this.addToCartText) { 8824 if (variant.available) { 8825 this.addToCartButton.disabled = false;
8826 this.addToCartText.innerHTML = 'Add to Cart <i class="cart-icon"></i>'; 8827 this.addToCartButton.setAttribute('aria-label', 'Add to Cart - Add ' + this.productTitle + ' to cart'); 8828 if (this.notifyMeButton) this.notifyMeButton.style.display = 'none'; 8829 } else { 8830 this.addToCartButton.disabled = true; 8831 this.addToCartText.textContent = 'Sold Out'; 8832 this.addToCartButton.setAttribute('aria-label', 'Sold Out - ' + this.productTitle + ' is sold out'); 8833 if (this.notifyMeButton) this.notifyMeButton.style.display = 'block'; 8834 } 8835 } 8836 if (this.notifyMeButton) { 8837 this.notifyMeButton.setAttribute('data-variant-id', variant.id); 8838 } 8839 8840 this.container.setAttribute('aria-busy', 'false'); 8841 } 8842 } 8843 8844 function initProductCards(root) { 8845 root = root || document; 8846 root.querySelectorAll('.product-card-wrapper[data-product-id]').forEach(cardContainer => { 8847 if (cardContainer.dataset.variantSelectorInit === 'true') return; 8848 cardContainer.dataset.variantSelectorInit = 'true'; 8849 new ProductCardVariantSelector(cardContainer); 8850 }); 8851 } 8852 8853 if (document.readyState === 'loading') { 8854 document.addEventListener('DOMContentLoaded', () => initProductCards()); 8855 } else { 8856 initProductCards(); 8857 } 8858 8859 document.addEventListener('shopify:section:load', (e) => initProductCards(e.target)); 8860})(); 8861</script>
8861<div class="product-card-wrapper" data-product-id="8025539838274" aria-busy="false"> 8862 8863 <div class="product-image" id="ProductImageWrapper-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025539838274"><!-- WISHLIST BUTTON --> 8864 <div class='xb-wishlist__btn-custom'> 8865 <div 8866 class='xb-wishlist__add' 8867 xb-product-id='8025539838274' 8868 xb-product-title='Sandalwood Essential Oil' 8869 xb-product-variant='44111352037698' 8870 xb-is-in-stock='true' 8871 xb-product-handle='sandalwood-essential-oil' 8872 > 8873 <button aria-label="Add Sandalwood Essential Oil to wishlist" aria-pressed="false"> 8874 <svg 8875 xmlns='http://www.w3.org/2000/svg' 8876 width='20' 8877 height='20' 8878 viewBox='0 0 24 24' 8879 fill='none' 8880 stroke='#FF4A71' 8881 stroke-width='2' 8882 stroke-linecap='round' 8883 stroke-linejoin='round' 8884 aria-hidden='true' 8885 focusable='false' 8886 > 8887 <path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"></path> 8888 </svg> 8889 </button> 8890 </div> 8891 8892 <div class="xb-wishlist__loading" xb-product-id="8025539838274"> 8893 <span class="loading-spinner"></span> 8894 </div> 8895 8896 <div class='xb-wishlist__remove' xb-product-id='8025539838274' xb-is-in-stock='true'> 8897 <button aria-label="Remove Sandalwood Essential Oil from wishlist" aria-pressed="true"> 8898 <svg 8899 xmlns='http://www.w3.org/2000/svg' 8900 width='20' 8901 height='20'
8902 viewBox='0 0 24 24' 8903 fill='#FF4A71' 8904 stroke='#FF4A71' 8905 stroke-width='2' 8906 stroke-linecap='round' 8907 stroke-linejoin='round' 8908 aria-hidden='true' 8909 focusable='false' 8910 > 8911 <path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"></path> 8912 </svg> 8913 </button> 8914 </div> 8915 </div><img 8916 id="ProductImage-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025539838274" 8917 class="main-product-image" 8918 src="//www.rockymountainoils.com/cdn/shop/files/sandalwood-essential-oil-15ml-1.jpg?crop=center&height=300&v=1773761002&width=300" 8919 alt="Sandalwood Essential Oil - 15ml" 8920 width="300" 8921 height="300" 8922 loading="lazy" 8923 /></div> 8924 8925 <div class="product-content"> 8926 <div class="product-title"> 8927 <a href="/products/sandalwood-essential-oil" class="product-title-link" aria-label="View Sandalwood Essential Oil"> 8928 <h2>Sandalwood Essential Oil</h2> 8929 </a> 8930 </div><div> 8931 <div class="product-subtitle"> 8932 Deep, woodsy, earthy; popular scents for men; reduces stress. 8933 </div> 8934 </div><div class="yotpo-widget-instance" data-yotpo-instance-id="503375" data-yotpo-product-id="8025539838274" data-yotpo-cart-product-id="" data-yotpo-section-id="index"></div><!-- START Variant Selection Form --> 8935 <div class="product-data-store" style="display:none;" 8936 data-main-image-url="//www.rockymountainoils.com/cdn/shop/files/sandalwood-essential-oil-15ml-1.jpg?v=1773761002&width=300" 8937 data-product-title="Sandalwood Essential Oil" 8938 id="DataStore-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025539838274"> 8939 </div> 8940 8941
8941<script id="VariantsJson-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025539838274" type="application/json"> 8942 [{"id":44111352037698,"title":"15ml","option1":"15ml","option2":null,"option3":null,"sku":"SANIND-S15","requires_shipping":true,"taxable":true,"featured_image":{"id":43452497068354,"product_id":8025539838274,"position":1,"created_at":"2023-11-28T08:46:51-07:00","updated_at":"2026-03-17T09:23:22-06:00","alt":"Sandalwood Essential Oil - 15ml","width":660,"height":660,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/sandalwood-essential-oil-15ml-1.jpg?v=1773761002","variant_ids":[44111352037698]},"available":true,"name":"Sandalwood Essential Oil - 15ml","public_title":"15ml","options":["15ml"],"price":13495,"weight":45,"compare_at_price":null,"inventory_management":"shopify","barcode":"053176176642","featured_media":{"alt":"Sandalwood Essential Oil - 15ml","id":35909263982914,"position":1,"preview_image":{"aspect_ratio":1.0,"height":660,"width":660,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/sandalwood-essential-oil-15ml-1.jpg?v=1773761002"}},"requires_selling_plan":false,"selling_plan_allocations":[{"price_adjustments":[{"position":1,"price":9447}],"price":9447,"compare_at_price":13495,"per_delivery_price":9447,"selling_plan_id":691785924975,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":11471},{"position":2,"price":10796}],"price":11471,"compare_at_price":13495,"per_delivery_price":11471,"selling_plan_id":691785957743,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":12146},{"position":2,"price":11471}],"price":12146,"compare_at_price":13495,"per_delivery_price":12146,"selling_plan_id":691785990511,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":12820},{"position":2,"price":12146}],"price":12820,"compare_at_price":13495,"per_delivery_price":12820,"selling_plan_id":691786023279,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":12146},{"position":2,"price":11471}],"price":12146,"compare_at_price":13495,"per_delivery_price":12146,"selling_plan_id":691786088815,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":12820},{"position":2,"price":12146}],"price":12820,"compare_at_price":13495,"per_delivery_price":12820,"selling_plan_id":691786121583,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":11471},{"position":2,"price":10796}],"price":11471,"compare_at_price":13495,"per_delivery_price":11471,"selling_plan_id":691795362159,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":12146},{"position":2,"price":11471}],"price":12146,"compare_at_price":13495,"per_delivery_price":12146,"selling_plan_id":691795394927,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":12820},{"position":2,"price":12146}],"price":12820,"compare_at_price":13495,"per_delivery_price":12820,"selling_plan_id":691795427695,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"}],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":44276030538050,"title":"5ml","option1":"5ml","option2":null,"option3":null,"sku":"SANIND-S5","requires_shipping":true,"taxable":true,"featured_image":{"id":44621390709058,"product_id":8025539838274,"position":2,"created_at":"2024-03-27T10:27:37-06:00","updated_at":"2026-03-17T09:23:22-06:00","alt":"reliable sandalwood essential oil - 5ml ","width":579,"height":579,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/sandalwood-essential-oil-5ml-1.jpg?v=1773761002","variant_ids":[44276030538050]},"available":true,"name":"Sandalwood Essential Oil - 5ml","public_title":"5ml","options":["5ml"],"price":6795,"weight":28,"compare_at_price":null,"inventory_management":"shopify","barcode":"0531761766
894259","featured_media":{"alt":"reliable sandalwood essential oil - 5ml ","id":37105330291010,"position":2,"preview_image":{"aspect_ratio":1.0,"height":579,"width":579,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/sandalwood-essential-oil-5ml-1.jpg?v=1773761002"}},"requires_selling_plan":false,"selling_plan_allocations":[{"price_adjustments":[{"position":1,"price":4757}],"price":4757,"compare_at_price":6795,"per_delivery_price":4757,"selling_plan_id":691785924975,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":5776},{"position":2,"price":5436}],"price":5776,"compare_at_price":6795,"per_delivery_price":5776,"selling_plan_id":691785957743,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":6116},{"position":2,"price":5776}],"price":6116,"compare_at_price":6795,"per_delivery_price":6116,"selling_plan_id":691785990511,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":6455},{"position":2,"price":6116}],"price":6455,"compare_at_price":6795,"per_delivery_price":6455,"selling_plan_id":691786023279,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":6116},{"position":2,"price":5776}],"price":6116,"compare_at_price":6795,"per_delivery_price":6116,"selling_plan_id":691786088815,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":6455},{"position":2,"price":6116}],"price":6455,"compare_at_price":6795,"per_delivery_price":6455,"selling_plan_id":691786121583,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":5776},{"position":2,"price":5436}],"price":5776,"compare_at_price":6795,"per_delivery_price":5776,"selling_plan_id":691795362159,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":6116},{"position":2,"price":5776}],"price":6116,"compare_at_price":6795,"per_delivery_price":6116,"selling_plan_id":691795394927,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":6455},{"position":2,"price":6116}],"price":6455,"compare_at_price":6795,"per_delivery_price":6455,"selling_plan_id":691795427695,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"}],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":52064210354543,"title":"1ml","option1":"1ml","option2":null,"option3":null,"sku":"SANIND-1ML","requires_shipping":true,"taxable":true,"featured_image":{"id":60328890302831,"product_id":8025539838274,"position":3,"created_at":"2025-06-30T23:36:45-06:00","updated_at":"2026-03-17T09:23:22-06:00","alt":"Small bottle labeled 'Sandalwood' with a red 'LIMITED TIME ONLY!' banner on a light gray background","width":1080,"height":1080,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/Sandalwood_1ml.webp?v=1773761002","variant_ids":[52064210354543]},"available":false,"name":"Sandalwood Essential Oil - 1ml","public_title":"1ml","options":["1ml"],"price":1695,"weight":45,"compare_at_price":null,"inventory_management":"shopify","barcode":"053176184777","featured_media":{"alt":"Small bottle labeled 'Sandalwood' with a red 'LIMITED TIME ONLY!' banner on a light gray background","id":51984772235631,"position":3,"preview_image":{"aspect_ratio":1.0,"height":1080,"width":1080,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/Sandalwood_1ml.webp?v=1773761002"}},"requires_selling_plan":false,"selling_plan_allocations":[{"price_adjustments":[{"position":1,"price":1187}],"price":1187,"compare_at_price":1695,"per_delivery_price":1187,"selling_plan_id":691785924975,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":1441},{"position":2,"price":1356}],"price":1441,"compare_at_price":1695,"per_delivery_price":1441,"selling_plan_id":691785957743,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":1526},{"position":2,"price":1441}],"price":1526,"compare_at_price":1695,"per_delivery_price":1526,"selling_plan_id":691785990511,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":1610},{"position":2,"price":1526}],"price":1610,"compare_at_price":1695,"per_delivery_price":1610,"selling_plan_id":691786023279,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":1526},{"position":2,"price":1441}],"price":1526,"compare_at_price":1695,"per_delivery_price":1526,"selling_plan_id":691786088815,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":1610},{"position":2,"price":1526}],"price":1610,"compare_at_price":1695,"per_delivery_price":1610,"selling_plan_id":691786121583,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":1441},{"position":2,"price":1356}],"price":1441,"compare_at_price":1695,"per_delivery_price":1441,"selling_plan_id":691795362159,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":1526},{"position":2,"price":1441}],"price":1526,"compare_at_price":1695,"per_delivery_price":1526,"selling_plan_id":691795394927,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":1610},{"position":2,"price":1526}],"price":1610,"compare_at_price":1695,"per_delivery_price":1610,"selling_plan_id":691795427695,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"}],"quantity_rule":{"min":1,"max":null,"increment":1}}] 8943 </script>
8943<form method="post" action="/cart/add" id="product-form-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025539838274" accept-charset="UTF-8" class="product-variants product-form" enctype="multipart/form-data" data-productid="8025539838274" novalidate="novalidate" data-type="add-to-cart-form"><input type="hidden" name="form_type" value="product" /><input type="hidden" name="utf8" value="â" /><div class="product-price-option"> 8944 <div class="product-price" id="ProductPrice-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025539838274" aria-live="polite" aria-atomic="true"> 8945 <span class="compare-at-price" id="ComparePrice-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025539838274" style="display: none;"></span> 8946 <span class="current-price" id="CurrentPrice-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025539838274">$134.95</span> 8947 8948 8949 </div> 8950 8951 8952 <div class="product-option"> 8953 <label for="Option-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025539838274-0" class="visually-hidden"> 8954 Select Size for Sandalwood Essential Oil 8955 </label> 8956 <select 8957 id="Option-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025539838274-0" 8958 class="variant-select" 8959 name="options[Size]" 8960 form="product-form-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025539838274" 8961 data-index="option0" 8962 ><option 8963 value="15ml" 8964 selected="selected" 8965 > 8966 15ml 8967 </option><option 8968 value="5ml" 8969 8970 > 8971 5ml 8972 </option><option 8973 value="1ml" 8974 8975 > 8976 1ml 8977 </option></select> 8978 </div> 8979 8980 </div><label for="ProductSelect-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025539838274" class="visually-hidden"> 8981 Choose variant for Sandalwood Essential Oil 8982 </label> 8983 <select 8984 name="id" 8985 data-productid="8025539838274" 8986 id="ProductSelect-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025539838274" 8987 class="product-variants-select no-js-only" 8988 ><option 8989 value="44111352037698" 8990 selected="selected" 8991 8992 > 8993 15ml - $134.95 8994 </option><option 8995 value="44276030538050" 8996 8997 8998 > 8999 5ml - $67.95 9000 </option><option 9001 value="52064210354543" 9002 9003 disabled="disabled" 9004 > 9005 1ml - $16.95 - Sold Out 9006 </option></select> 9007 9008 <div class="product-addtocart" id="AddToCartWrapper-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025539838274"> 9009 <input type="hidden" name="quantity" value="1"> 9010 9011 9012 <div class="visually-hidden" role="status" id="variant-status-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025539838274" aria-live="assertive"></div> 9013
9014 <span id="cart-action-desc-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025539838274" class="visually-hidden">Adds item to your shopping cart</span> 9015 9016 <button 9017 class="addtocart-btn add-to-cart" 9018 type="submit" 9019 name="add" 9020 aria-label="Add to Cart - Add Sandalwood Essential Oil to cart" 9021 aria-describedby="cart-action-desc-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025539838274" 9022 id="AddToCart-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025539838274" 9023 9024 > 9025 <span id="AddToCartText-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025539838274">Add to Cart <i class="cart-icon" aria-hidden="true"></i></span> 9026 </button> 9027 </div><input type="hidden" name="product-id" value="8025539838274" /><input type="hidden" name="section-id" value="template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040" /></form><!-- END Variant Selection Form --></div>
9027<script type="application/ld+json"> 9028 { 9029 "@context": "http://schema.org/", 9030 "@type": "Product", 9031 "name": "Sandalwood Essential Oil", 9032 "url": "https:\/\/www.rockymountainoils.com\/products\/sandalwood-essential-oil","image": [ 9033 "https:\/\/www.rockymountainoils.com\/cdn\/shop\/files\/sandalwood-essential-oil-15ml-1.jpg?v=1773761002\u0026width=660" 9034 ], 9035 "description": "Sandalwood essential oil offers a rich, grounding aroma that may help promote a sense of calm and centeredness. Steam distilled from the wood of the Santalum album tree, this luxurious oil is prized for its versatile uses and alluring scent.\nThe deep, woody fragrance of Sandalwood can help create a peaceful atmosphere, potentially supporting relaxation and emotional balance. Many find it beneficial for enhancing focus and mental clarity. Its warm, slightly sweet aroma makes it popular in personal care products and aromatherapy practices.","sku": "SANIND-S15", 9036 "brand": { 9037 "@type": "Brand", 9038 "name": "Rocky Mountain Oils" 9039 }, 9040 "offers": { 9041 "@type": "AggregateOffer", 9042 "availability": "http://schema.org/InStock", 9043 "priceCurrency": "USD", 9044 "highPrice": 134.95, 9045 "lowPrice": 16.95, 9046 "offerCount": 3, 9047 "offers": [{ 9048 "@type" : "Offer","sku": "SANIND-S15","gtin12": "053176176642","availability" : "http://schema.org/InStock", 9049 "price" : 134.95, 9050 "priceCurrency" : "USD", 9051 "priceValidUntil": "2026-12-31", 9052 "url" : "https:\/\/www.rockymountainoils.com\/products\/sandalwood-essential-oil?variant=44111352037698" 9053 }, 9054{ 9055 "@type" : "Offer","sku": "SANIND-S5","gtin12": "053176176659","availability" : "http://schema.org/InStock", 9056 "price" : 67.95, 9057 "priceCurrency" : "USD", 9058 "priceValidUntil": "2026-12-31", 9059 "url" : "https:\/\/www.rockymountainoils.com\/products\/sandalwood-essential-oil?variant=44276030538050" 9060 }, 9061{ 9062 "@type" : "Offer","sku": "SANIND-1ML","gtin12": "053176184777","availability" : "http://schema.org/OutOfStock", 9063 "price" : 16.95, 9064 "priceCurrency" : "USD", 9065 "priceValidUntil": "2026-12-31", 9066 "url" : "https:\/\/www.rockymountainoils.com\/products\/sandalwood-essential-oil?variant=52064210354543" 9067 } 9068] 9069 } 9070 } 9071 </script>
9071</div> 9072 9073<style> 9074/* Ensure visually-hidden utility exists even if theme lacks it */ 9075.visually-hidden { 9076 position: absolute !important; 9077 width: 1px !important; 9078 height: 1px !important; 9079 padding: 0 !important; 9080 margin: -1px !important; 9081 overflow: hidden !important; 9082 clip: rect(0, 0, 0, 0) !important; 9083 white-space: nowrap !important; 9084 border: 0 !important; 9085} 9086 9087/* Ensure the main product image is tappable on iOS */ 9088.main-product-image { 9089 cursor: pointer; 9090 -webkit-tap-highlight-color: rgba(0,0,0,0.05); 9091 touch-action: manipulation; 9092} 9093 9094/* ULTIMATE FIX - Override anything that hides select text */ 9095.product-variants-select, 9096.product-variants-select.no-js-only, 9097select.product-variants-select, 9098select[id*="ProductSelect-"] { 9099 color: #1a1a1a !important; 9100 opacity: 1 !important; 9101 background-color: #ffffff !important; 9102 -webkit-text-fill-color: #1a1a1a !important; 9103} 9104 9105.product-variants-select option, 9106select[id*="ProductSelect-"] option { 9107 color: #1a1a1a !important; 9108 background-color: #ffffff !important; 9109 -webkit-text-fill-color: #1a1a1a !important; 9110} 9111 9112.product-variants-select option:checked, 9113select[id*="ProductSelect-"] option:checked { 9114 color: #1a1a1a !important; 9115 background-color: #e8f0fe !important; 9116} 9117 9118.product-variants-select option:disabled, 9119select[id*="ProductSelect-"] option:disabled { 9120 color: #6c6c6c !important; 9121 background-color: #f5f5f5 !important; 9122 -webkit-text-fill-color: #6c6c6c !important; 9123 opacity: 1 !important; 9124} 9125 9126.product-variants-select:focus, 9127select[id*="ProductSelect-"]:focus { 9128 color: #1a1a1a !important; 9129 outline: 3px solid #000000ff !important; 9130} 9131</style> 9132 </div><div class="item"> 9133
9133<script> 9134(function() { 9135 class ProductCardVariantSelector { 9136 constructor(container) { 9137 this.container = container; 9138 if (!this.container) return; 9139 9140 this.form = this.container.querySelector('.product-form'); 9141 this.variantSelectors = this.container.querySelectorAll('.variant-select'); 9142 this.masterSelect = this.container.querySelector('.product-variants-select'); 9143 this.productImage = this.container.querySelector('.main-product-image'); 9144 this.priceWrapper = this.container.querySelector('[id^="ProductPrice-"]'); 9145 this.currentPriceElement = this.container.querySelector('[id^="CurrentPrice-"]'); 9146 this.comparePriceElement = this.container.querySelector('[id^="ComparePrice-"]'); 9147 this.addToCartButton = this.container.querySelector('[id^="AddToCart-"]'); 9148 this.addToCartText = this.container.querySelector('[id^="AddToCartText-"]'); 9149 this.notifyMeButton = this.container.querySelector('[id^="NotifyMe-"]'); 9150 this.variantsJsonScript = this.container.querySelector('[id^="VariantsJson-"]'); 9151 this.dataStore = this.container.querySelector('[id^="DataStore-"]'); 9152 this.saleTag = this.container.querySelector('.hc-sale-tag'); 9153 this.statusElement = this.container.querySelector('[id^="variant-status-"]'); 9154 9155 if (!this.masterSelect || !this.variantsJsonScript) return; 9156 9157 try { 9158 this.productVariants = JSON.parse(this.variantsJsonScript.textContent); 9159 } catch (e) { return; } 9160 9161 this.mainImageUrl = this.dataStore ? this.dataStore.dataset.mainImageUrl : null; 9162 this.productTitle = this.dataStore ? this.dataStore.dataset.productTitle : ''; 9163 9164 this.init(); 9165 } 9166 9167 init() { 9168 // --- iOS-safe image tap handling (works on iPhone 16, 17 Pro Max, etc.) --- 9169 if (this.productImage) { 9170 let touchStartX = 0, touchStartY = 0, touchMoved = false; 9171 let lastTouchTime = 0; 9172 9173 this.productImage.style.cursor = 'pointer'; 9174 this.productImage.setAttribute('role', 'button'); 9175 this.productImage.setAttribute('tabindex', '0'); 9176 9177 this.productImage.addEventListener('touchstart', (e) => { 9178 const t = e.touches[0]; 9179 touchStartX = t.clientX; 9180 touchStartY = t.clientY; 9181 touchMoved = false; 9182 }, { passive: true }); 9183 9184 this.productImage.addEventListener('touchmove', (e) => { 9185 const t = e.touches[0]; 9186 if (Math.abs(t.clientX - touchStartX) > 10 || 9187 Math.abs(t.clientY - touchStartY) > 10) { 9188 touchMoved = true; 9189 } 9190 }, { passive: true }); 9191 9192 this.productImage.addEventListener('touchend', (e) => { 9193 if (touchMoved) return; 9194 lastTouchTime = Date.now(); 9195 e.preventDefault(); 9196 this.onImageTap(e); 9197 }, { passive: false }); 9198 9199 // Desktop / non-touch fallback (with double-fire protection after touchend) 9200 this.productImage.addEventListener('click', (e) => { 9201 if (Date.now() - lastTouchTime < 500) return; 9202 this.onImageTap(e); 9203 }); 9204 9205 this.productImage.addEventListener('keydown', (e) => { 9206 if (e.key === 'Enter' || e.key === ' ') { 9207 e.preventDefault(); 9208 this.onImageTap(e); 9209 } 9210 }); 9211 } 9212 9213 // --- Variant select listeners --- 9214 if (this.variantSelectors.length > 0) { 9215 this.variantSelectors.forEach(select => { 9216 select.addEventListener('change', this.onVariantChange.bind(this)); 9217 }); 9218 this.updateProductDetails(this.getCurrentVariant()); 9219 } 9220 } 9221 9222 // ============================================================ 9223 // CHANGE THIS IF YOU WANT DIFFERENT TAP BEHAVIOR 9224 // Currently: navigates to the product page. 9225 // ============================================================ 9226 onImageTap(e) { 9227 const link = this.container.querySelector('.product-title-link'); 9228 if (link && link.href && link.href !== '#') { 9229 window.location.href = link.href; 9230 } 9231 } 9232 // ============================================================ 9233 9234 onVariantChange() { 9235 const selectedOptions = Array.from(this.variantSelectors).map(s => s.value); 9236 const matchedVariant = this.findMatchingVariant(selectedOptions); 9237 9238 if (matchedVariant) { 9239 this.masterSelect.value = matchedVariant.id; 9240 this.updateProductDetails(matchedVariant); 9241 if (this.statusElement) this.statusElement.textContent = ''; 9242 } else { 9243 if (this.statusElement) { 9244 this.statusElement.textContent = 'No available variant matches your selection'; 9245 } 9246 this.updateProductDetails(null); 9247 } 9248 } 9249 9250 findMatchingVariant(selectedOptions) { 9251 return this.productVariants.find(variant => { 9252 if (!variant.options || variant.options.length !== selectedOptions.length) return false;
9253 return selectedOptions.every((val, i) => variant.options[i] === val); 9254 }); 9255 } 9256 9257 getCurrentVariant() { 9258 if (!this.masterSelect) return null; 9259 const id = this.masterSelect.value; 9260 if (!id) return null; 9261 return this.productVariants.find(v => String(v.id) === String(id)) || null; 9262 } 9263 9264 // Shopify CDN: insert _WIDTHx before extension for a properly sized image 9265 sizedImageUrl(src, width) { 9266 if (!src) return src; 9267 return src.replace(/(\.[a-z]{3,4})(\?|$)/i, `_${width}x$1$2`); 9268 } 9269 9270 updateProductDetails(variant) { 9271 this.container.setAttribute('aria-busy', 'true'); 9272 9273 if (!variant) { 9274 if (this.addToCartButton) this.addToCartButton.disabled = true; 9275 if (this.addToCartText) this.addToCartText.textContent = 'Unavailable'; 9276 if (this.notifyMeButton) this.notifyMeButton.style.display = 'none'; 9277 if (this.priceWrapper) this.priceWrapper.classList.remove('sale'); 9278 if (this.comparePriceElement) this.comparePriceElement.style.display = 'none'; 9279 if (this.saleTag) this.saleTag.style.display = 'none'; 9280 this.container.setAttribute('aria-busy', 'false'); 9281 return; 9282 } 9283 9284 // 1. Image 9285 if (this.productImage) { 9286 if (variant.featured_image && variant.featured_image.src) { 9287 const sized = this.sizedImageUrl(variant.featured_image.src, 300); 9288 const variantOptions = variant.options ? variant.options.join(' - ') : ''; 9289 this.productImage.src = sized; 9290 this.productImage.srcset = ''; 9291 this.productImage.alt = variant.featured_image.alt 9292 ? variant.featured_image.alt 9293 : (this.productTitle + (variantOptions ? ' - ' + variantOptions : '')); 9294 } else if (this.mainImageUrl) { 9295 this.productImage.src = this.mainImageUrl; 9296 this.productImage.srcset = ''; 9297 this.productImage.alt = this.productTitle; 9298 } 9299 } 9300 9301 // 2. Price 9302 const moneyFormat = "${{amount}}"; 9303 const formatMoney = (cents, format) => { 9304 if (typeof cents === 'string') cents = cents.replace('.', ''); 9305 let value = ''; 9306 const placeholderRegex = /\{\{\s*(\w+)\s*\}\}/; 9307 const formatString = (format || moneyFormat).replace(/<[^>]*>/g, ''); 9308 9309 function formatWithDelimiters(number, precision, thousands, decimal) { 9310 precision = precision ?? 2; 9311 thousands = thousands ?? ','; 9312 decimal = decimal ?? '.'; 9313 if (isNaN(number) || number == null) return 0; 9314 number = (number / 100.0).toFixed(precision); 9315 const parts = number.split('.'); 9316 const dollars = parts[0].replace(/(\d)(?=(\d\d\d)+(?!\d))/g, '$1' + thousands); 9317 const centsPart = parts[1] ? (decimal + parts[1]) : ''; 9318 return dollars + centsPart; 9319 } 9320 9321 switch (formatString.match(placeholderRegex)?.[1]) { 9322 case 'amount': value = formatWithDelimiters(cents, 2); break; 9323 case 'amount_no_decimals': value = formatWithDelimiters(cents, 0); break; 9324 case 'amount_with_comma_separator': value = formatWithDelimiters(cents, 2, '.', ','); break; 9325 case 'amount_no_decimals_with_comma_separator': value = formatWithDelimiters(cents, 0, '.', ','); break; 9326 case 'amount_with_apostrophe_separator': value = formatWithDelimiters(cents, 2, "'", "."); break; 9327 case 'amount_no_decimals_with_space_separator': value = formatWithDelimiters(cents, 0, " ", ","); break; 9328 case 'amount_with_space_separator': value = formatWithDelimiters(cents, 2, " ", ","); break; 9329 default: value = formatWithDelimiters(cents, 2); 9330 } 9331 try { 9332 return formatString.replace(placeholderRegex, value); 9333 } catch (e) { 9334 const fallback = (cents / 100.0).toFixed(2); 9335 return formatString.includes('') 9336 ? formatString.replace(placeholderRegex, fallback) 9337 : fallback; 9338 } 9339 }; 9340 9341 if (this.currentPriceElement) { 9342 this.currentPriceElement.textContent = formatMoney(variant.price, moneyFormat); 9343 } 9344 if (this.comparePriceElement && this.priceWrapper) { 9345 if (variant.compare_at_price && variant.compare_at_price > variant.price) { 9346 this.comparePriceElement.textContent = formatMoney(variant.compare_at_price, moneyFormat); 9347 this.comparePriceElement.style.display = ''; 9348 this.priceWrapper.classList.add('sale'); 9349 } else { 9350 this.comparePriceElement.textContent = ''; 9351 this.comparePriceElement.style.display = 'none'; 9352 this.priceWrapper.classList.remove('sale'); 9353 } 9354 } 9355 9356 // 3. Sale tag 9357 if (this.saleTag) { 9358 const isDiscounted = variant.compare_at_price && variant.compare_at_price > variant.price; 9359 if (isDiscounted && variant.available) { 9360 this.saleTag.style.display = 'block'; 9361 const discount = Math.round((variant.compare_at_price - variant.price) * 100.0 / variant.compare_at_price); 9362 const span = this.saleTag.querySelector('span'); 9363 if (span) span.textContent = discount + '%'; 9364 this.saleTag.setAttribute('aria-label', 'Save ' + discount + '%'); 9365 this.saleTag.setAttribute('role', 'status'); 9366 } else { 9367 this.saleTag.style.display = 'none'; 9368 } 9369 } 9370 9371 // 4. Add to cart 9372 if (this.addToCartButton && this.addToCartText) { 9373 if (variant.available) { 9374 this.addToCartButton.disabled = false;
9375 this.addToCartText.innerHTML = 'Add to Cart <i class="cart-icon"></i>'; 9376 this.addToCartButton.setAttribute('aria-label', 'Add to Cart - Add ' + this.productTitle + ' to cart'); 9377 if (this.notifyMeButton) this.notifyMeButton.style.display = 'none'; 9378 } else { 9379 this.addToCartButton.disabled = true; 9380 this.addToCartText.textContent = 'Sold Out'; 9381 this.addToCartButton.setAttribute('aria-label', 'Sold Out - ' + this.productTitle + ' is sold out'); 9382 if (this.notifyMeButton) this.notifyMeButton.style.display = 'block'; 9383 } 9384 } 9385 if (this.notifyMeButton) { 9386 this.notifyMeButton.setAttribute('data-variant-id', variant.id); 9387 } 9388 9389 this.container.setAttribute('aria-busy', 'false'); 9390 } 9391 } 9392 9393 function initProductCards(root) { 9394 root = root || document; 9395 root.querySelectorAll('.product-card-wrapper[data-product-id]').forEach(cardContainer => { 9396 if (cardContainer.dataset.variantSelectorInit === 'true') return; 9397 cardContainer.dataset.variantSelectorInit = 'true'; 9398 new ProductCardVariantSelector(cardContainer); 9399 }); 9400 } 9401 9402 if (document.readyState === 'loading') { 9403 document.addEventListener('DOMContentLoaded', () => initProductCards()); 9404 } else { 9405 initProductCards(); 9406 } 9407 9408 document.addEventListener('shopify:section:load', (e) => initProductCards(e.target)); 9409})(); 9410</script>
9410<div class="product-card-wrapper" data-product-id="8025537380674" aria-busy="false"> 9411 9412 <div class="product-image" id="ProductImageWrapper-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025537380674"><!-- WISHLIST BUTTON --> 9413 <div class='xb-wishlist__btn-custom'> 9414 <div 9415 class='xb-wishlist__add' 9416 xb-product-id='8025537380674' 9417 xb-product-title='Rose Essential Oil' 9418 xb-product-variant='44111325430082' 9419 xb-is-in-stock='true' 9420 xb-product-handle='rose-essential-oil' 9421 > 9422 <button aria-label="Add Rose Essential Oil to wishlist" aria-pressed="false"> 9423 <svg 9424 xmlns='http://www.w3.org/2000/svg' 9425 width='20' 9426 height='20' 9427 viewBox='0 0 24 24' 9428 fill='none' 9429 stroke='#FF4A71' 9430 stroke-width='2' 9431 stroke-linecap='round' 9432 stroke-linejoin='round' 9433 aria-hidden='true' 9434 focusable='false' 9435 > 9436 <path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"></path> 9437 </svg> 9438 </button> 9439 </div> 9440 9441 <div class="xb-wishlist__loading" xb-product-id="8025537380674"> 9442 <span class="loading-spinner"></span> 9443 </div> 9444 9445 <div class='xb-wishlist__remove' xb-product-id='8025537380674' xb-is-in-stock='true'> 9446 <button aria-label="Remove Rose Essential Oil from wishlist" aria-pressed="true"> 9447 <svg 9448 xmlns='http://www.w3.org/2000/svg' 9449 width='20' 9450 height='20'
9451 viewBox='0 0 24 24' 9452 fill='#FF4A71' 9453 stroke='#FF4A71' 9454 stroke-width='2' 9455 stroke-linecap='round' 9456 stroke-linejoin='round' 9457 aria-hidden='true' 9458 focusable='false' 9459 > 9460 <path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"></path> 9461 </svg> 9462 </button> 9463 </div> 9464 </div><img 9465 id="ProductImage-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025537380674" 9466 class="main-product-image" 9467 src="//www.rockymountainoils.com/cdn/shop/files/rose-essential-oil-5ml-1.jpg?crop=center&height=300&v=1754576332&width=300" 9468 alt="Rose Essential Oil - 5ml - Rocky Mountain Oils" 9469 width="300" 9470 height="300" 9471 loading="lazy" 9472 /></div> 9473 9474 <div class="product-content"> 9475 <div class="product-title"> 9476 <a href="/products/rose-essential-oil" class="product-title-link" aria-label="View Rose Essential Oil"> 9477 <h2>Rose Essential Oil</h2> 9478 </a> 9479 </div><div> 9480 <div class="product-subtitle"> 9481 Uplifting floral aroma; soothes grief and promotes healing. 9482 </div> 9483 </div><div class="yotpo-widget-instance" data-yotpo-instance-id="503375" data-yotpo-product-id="8025537380674" data-yotpo-cart-product-id="" data-yotpo-section-id="index"></div><!-- START Variant Selection Form --> 9484 <div class="product-data-store" style="display:none;" 9485 data-main-image-url="//www.rockymountainoils.com/cdn/shop/files/rose-essential-oil-5ml-1.jpg?v=1754576332&width=300" 9486 data-product-title="Rose Essential Oil" 9487 id="DataStore-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025537380674"> 9488 </div> 9489 9490
9490<script id="VariantsJson-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025537380674" type="application/json"> 9491 [{"id":44111325430082,"title":"5ml","option1":"5ml","option2":null,"option3":null,"sku":"ROSBUL-S5","requires_shipping":true,"taxable":true,"featured_image":{"id":44621338870082,"product_id":8025537380674,"position":1,"created_at":"2024-03-27T10:22:18-06:00","updated_at":"2025-08-07T08:18:52-06:00","alt":"Rose Essential Oil - 5ml - Rocky Mountain Oils","width":513,"height":513,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/rose-essential-oil-5ml-1.jpg?v=1754576332","variant_ids":[44111325430082]},"available":true,"name":"Rose Essential Oil - 5ml","public_title":"5ml","options":["5ml"],"price":19995,"weight":28,"compare_at_price":null,"inventory_management":"shopify","barcode":"053176176550","featured_media":{"alt":"Rose Essential Oil - 5ml - Rocky Mountain Oils","id":37105278517570,"position":1,"preview_image":{"aspect_ratio":1.0,"height":513,"width":513,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/rose-essential-oil-5ml-1.jpg?v=1754576332"}},"requires_selling_plan":false,"selling_plan_allocations":[{"price_adjustments":[{"position":1,"price":13997}],"price":13997,"compare_at_price":19995,"per_delivery_price":13997,"selling_plan_id":691785924975,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":16996},{"position":2,"price":15996}],"price":16996,"compare_at_price":19995,"per_delivery_price":16996,"selling_plan_id":691785957743,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":17996},{"position":2,"price":16996}],"price":17996,"compare_at_price":19995,"per_delivery_price":17996,"selling_plan_id":691785990511,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":18995},{"position":2,"price":17996}],"price":18995,"compare_at_price":19995,"per_delivery_price":18995,"selling_plan_id":691786023279,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":17996},{"position":2,"price":16996}],"price":17996,"compare_at_price":19995,"per_delivery_price":17996,"selling_plan_id":691786088815,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":18995},{"position":2,"price":17996}],"price":18995,"compare_at_price":19995,"per_delivery_price":18995,"selling_plan_id":691786121583,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":16996},{"position":2,"price":15996}],"price":16996,"compare_at_price":19995,"per_delivery_price":16996,"selling_plan_id":691795362159,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":17996},{"position":2,"price":16996}],"price":17996,"compare_at_price":19995,"per_delivery_price":17996,"selling_plan_id":691795394927,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":18995},{"position":2,"price":17996}],"price":18995,"compare_at_price":19995,"per_delivery_price":18995,"selling_plan_id":691795427695,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"}],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":52064215433583,"title":"1ml","option1":"1ml","option2":null,"option3":null,"sku":"ROSBUL-1ML","requires_shipping":true,"taxable":true,"featured_image":{"id":60328894595439,"product_id":8025537380674,"position":4,"created_at":"2025-06-30T23:38:07-06:00","updated_at":"2025-08-07T08:18:52-06:00","alt":"Small brown bottle with a black cap of Rose essential oil on a white background, featuring a 'LIMITED TIME ONLY!' banner.","width":1080,"height":1080,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/Rose_1ml_a8716da6-eb41-492b-a6f7-9eef6fdac771.webp?v=1754576332","variant_ids":[52064215433583]},"available":true,"name":"Rose Essential Oil - 1ml","public_title":"1ml","options":["1ml"],"price":4295,"weight":28,"compare_at_price":null,"inventory_management":"shopify","barcode":"053176184784","featured_media":{"alt":"Small brown bottle with a black cap of Rose essential oil on a white background, featuring a 'LIMITED TIME ONLY!' banner.","id":51984776036719,"position":4,"preview_image":{"aspect_ratio":1.0,"height":1080,"width":1080,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/Rose_1ml_a8716da6-eb41-492b-a6f7-9eef6fdac771.webp?v=1754576332"}},"requires_selling_plan":false,"selling_plan_allocations":[{"price_adjustments":[{"position":1,"price":3007}],"price":3007,"compare_at_price":4295,"per_delivery_price":3007,"selling_plan_id":691785924975,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":3651},{"position":2,"price":3436}],"price":3651,"compare_at_price":4295,"per_delivery_price":3651,"selling_plan_id":691785957743,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":3866},{"position":2,"price":3651}],"price":3866,"compare_at_price":4295,"per_delivery_price":3866,"selling_plan_id":691785990511,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":4080},{"position":2,"price":3866}],"price":4080,"compare_at_price":4295,"per_delivery_price":4080,"selling_plan_id":691786023279,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":3866},{"position":2,"price":3651}],"price":3866,"compare_at_price":4295,"per_delivery_price":3866,"selling_plan_id":691786088815,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":4080},{"position":2,"price":3866}],"price":4080,"compare_at_price":4295,"per_delivery_price":4080,"selling_plan_id":691786121583,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":3651},{"position":2,"price":3436}],"price":3651,"compare_at_price":4295,"per_delivery_price":3651,"selling_plan_id":691795362159,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":3866},{"position":2,"price":3651}],"price":3866,"compare_at_price":4295,"per_delivery_price":3866,"selling_plan_id":691795394927,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":4080},{"position":2,"price":3866}],"price":4080,"compare_at_price":4295,"per_delivery_price":4080,"selling_plan_id":691795427695,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"}],"quantity_rule":{"min":1,"max":null,"increment":1}}] 9492 </script>
9492<form method="post" action="/cart/add" id="product-form-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025537380674" accept-charset="UTF-8" class="product-variants product-form" enctype="multipart/form-data" data-productid="8025537380674" novalidate="novalidate" data-type="add-to-cart-form"><input type="hidden" name="form_type" value="product" /><input type="hidden" name="utf8" value="â" /><div class="product-price-option"> 9493 <div class="product-price" id="ProductPrice-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025537380674" aria-live="polite" aria-atomic="true"> 9494 <span class="compare-at-price" id="ComparePrice-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025537380674" style="display: none;"></span> 9495 <span class="current-price" id="CurrentPrice-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025537380674">$199.95</span> 9496 9497 9498 </div> 9499 9500 9501 <div class="product-option"> 9502 <label for="Option-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025537380674-0" class="visually-hidden"> 9503 Select Size for Rose Essential Oil 9504 </label> 9505 <select 9506 id="Option-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025537380674-0" 9507 class="variant-select" 9508 name="options[Size]" 9509 form="product-form-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025537380674" 9510 data-index="option0" 9511 ><option 9512 value="5ml" 9513 selected="selected" 9514 > 9515 5ml 9516 </option><option 9517 value="1ml" 9518 9519 > 9520 1ml 9521 </option></select> 9522 </div> 9523 9524 </div><label for="ProductSelect-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025537380674" class="visually-hidden"> 9525 Choose variant for Rose Essential Oil 9526 </label> 9527 <select 9528 name="id" 9529 data-productid="8025537380674" 9530 id="ProductSelect-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025537380674" 9531 class="product-variants-select no-js-only" 9532 ><option 9533 value="44111325430082" 9534 selected="selected" 9535 9536 > 9537 5ml - $199.95 9538 </option><option 9539 value="52064215433583" 9540 9541 9542 > 9543 1ml - $42.95 9544 </option></select> 9545 9546 <div class="product-addtocart" id="AddToCartWrapper-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025537380674"> 9547 <input type="hidden" name="quantity" value="1"> 9548 9549 9550 <div class="visually-hidden" role="status" id="variant-status-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025537380674" aria-live="assertive"></div> 9551 9552 <span id="cart-action-desc-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025537380674" class="visually-hidden">Adds item to your shopping cart</span> 9553 9554 <button 9555 class="addtocart-btn add-to-cart" 9556 type="submit" 9557 name="add" 9558 aria-label="Add to Cart - Add Rose Essential Oil to cart" 9559 aria-describedby="cart-action-desc-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025537380674" 9560 id="AddToCart-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025537380674" 9561 9562 >
9563 <span id="AddToCartText-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025537380674">Add to Cart <i class="cart-icon" aria-hidden="true"></i></span> 9564 </button> 9565 </div><input type="hidden" name="product-id" value="8025537380674" /><input type="hidden" name="section-id" value="template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040" /></form><!-- END Variant Selection Form --></div>
9565<script type="application/ld+json"> 9566 { 9567 "@context": "http://schema.org/", 9568 "@type": "Product", 9569 "name": "Rose Essential Oil", 9570 "url": "https:\/\/www.rockymountainoils.com\/products\/rose-essential-oil","image": [ 9571 "https:\/\/www.rockymountainoils.com\/cdn\/shop\/files\/rose-essential-oil-5ml-1.jpg?v=1754576332\u0026width=513" 9572 ], 9573 "description": "Indulge in the exquisite aroma of pure Rose Essential Oil. Known as the \"Queen of Essential Oils,\" this luxurious oil offers a captivating scent that uplifts the senses and creates a romantic ambiance. Steam distilled from rose petals, it carries a deep, floral fragrance that's both soothing and invigorating.\nRose Essential Oil is prized for its potential to support skin health, offering moisturizing properties that may help promote a radiant complexion. Its enchanting aroma can be used in natural perfumes, home cleaning products, and personal care items to add a touch of elegance and grace to your daily routine.","sku": "ROSBUL-S5", 9574 "brand": { 9575 "@type": "Brand", 9576 "name": "Rocky Mountain Oils" 9577 }, 9578 "offers": { 9579 "@type": "AggregateOffer", 9580 "availability": "http://schema.org/InStock", 9581 "priceCurrency": "USD", 9582 "highPrice": 199.95, 9583 "lowPrice": 42.95, 9584 "offerCount": 2, 9585 "offers": [{ 9586 "@type" : "Offer","sku": "ROSBUL-S5","gtin12": "053176176550","availability" : "http://schema.org/InStock", 9587 "price" : 199.95, 9588 "priceCurrency" : "USD", 9589 "priceValidUntil": "2026-12-31", 9590 "url" : "https:\/\/www.rockymountainoils.com\/products\/rose-essential-oil?variant=44111325430082" 9591 }, 9592{ 9593 "@type" : "Offer","sku": "ROSBUL-1ML","gtin12": "053176184784","availability" : "http://schema.org/InStock", 9594 "price" : 42.95, 9595 "priceCurrency" : "USD", 9596 "priceValidUntil": "2026-12-31", 9597 "url" : "https:\/\/www.rockymountainoils.com\/products\/rose-essential-oil?variant=52064215433583" 9598 } 9599] 9600 } 9601 } 9602 </script>
9602</div> 9603 9604<style> 9605/* Ensure visually-hidden utility exists even if theme lacks it */ 9606.visually-hidden { 9607 position: absolute !important; 9608 width: 1px !important; 9609 height: 1px !important; 9610 padding: 0 !important; 9611 margin: -1px !important; 9612 overflow: hidden !important; 9613 clip: rect(0, 0, 0, 0) !important; 9614 white-space: nowrap !important; 9615 border: 0 !important; 9616} 9617 9618/* Ensure the main product image is tappable on iOS */ 9619.main-product-image { 9620 cursor: pointer; 9621 -webkit-tap-highlight-color: rgba(0,0,0,0.05); 9622 touch-action: manipulation; 9623} 9624 9625/* ULTIMATE FIX - Override anything that hides select text */ 9626.product-variants-select, 9627.product-variants-select.no-js-only, 9628select.product-variants-select, 9629select[id*="ProductSelect-"] { 9630 color: #1a1a1a !important; 9631 opacity: 1 !important; 9632 background-color: #ffffff !important; 9633 -webkit-text-fill-color: #1a1a1a !important; 9634} 9635 9636.product-variants-select option, 9637select[id*="ProductSelect-"] option { 9638 color: #1a1a1a !important; 9639 background-color: #ffffff !important; 9640 -webkit-text-fill-color: #1a1a1a !important; 9641} 9642 9643.product-variants-select option:checked, 9644select[id*="ProductSelect-"] option:checked { 9645 color: #1a1a1a !important; 9646 background-color: #e8f0fe !important; 9647} 9648 9649.product-variants-select option:disabled, 9650select[id*="ProductSelect-"] option:disabled { 9651 color: #6c6c6c !important; 9652 background-color: #f5f5f5 !important; 9653 -webkit-text-fill-color: #6c6c6c !important; 9654 opacity: 1 !important; 9655} 9656 9657.product-variants-select:focus, 9658select[id*="ProductSelect-"]:focus { 9659 color: #1a1a1a !important; 9660 outline: 3px solid #000000ff !important; 9661} 9662</style> 9663 </div><div class="item"> 9664
9664<script> 9665(function() { 9666 class ProductCardVariantSelector { 9667 constructor(container) { 9668 this.container = container; 9669 if (!this.container) return; 9670 9671 this.form = this.container.querySelector('.product-form'); 9672 this.variantSelectors = this.container.querySelectorAll('.variant-select'); 9673 this.masterSelect = this.container.querySelector('.product-variants-select'); 9674 this.productImage = this.container.querySelector('.main-product-image'); 9675 this.priceWrapper = this.container.querySelector('[id^="ProductPrice-"]'); 9676 this.currentPriceElement = this.container.querySelector('[id^="CurrentPrice-"]'); 9677 this.comparePriceElement = this.container.querySelector('[id^="ComparePrice-"]'); 9678 this.addToCartButton = this.container.querySelector('[id^="AddToCart-"]'); 9679 this.addToCartText = this.container.querySelector('[id^="AddToCartText-"]'); 9680 this.notifyMeButton = this.container.querySelector('[id^="NotifyMe-"]'); 9681 this.variantsJsonScript = this.container.querySelector('[id^="VariantsJson-"]'); 9682 this.dataStore = this.container.querySelector('[id^="DataStore-"]'); 9683 this.saleTag = this.container.querySelector('.hc-sale-tag'); 9684 this.statusElement = this.container.querySelector('[id^="variant-status-"]'); 9685 9686 if (!this.masterSelect || !this.variantsJsonScript) return; 9687 9688 try { 9689 this.productVariants = JSON.parse(this.variantsJsonScript.textContent); 9690 } catch (e) { return; } 9691 9692 this.mainImageUrl = this.dataStore ? this.dataStore.dataset.mainImageUrl : null; 9693 this.productTitle = this.dataStore ? this.dataStore.dataset.productTitle : ''; 9694 9695 this.init(); 9696 } 9697 9698 init() { 9699 // --- iOS-safe image tap handling (works on iPhone 16, 17 Pro Max, etc.) --- 9700 if (this.productImage) { 9701 let touchStartX = 0, touchStartY = 0, touchMoved = false; 9702 let lastTouchTime = 0; 9703 9704 this.productImage.style.cursor = 'pointer'; 9705 this.productImage.setAttribute('role', 'button'); 9706 this.productImage.setAttribute('tabindex', '0'); 9707 9708 this.productImage.addEventListener('touchstart', (e) => { 9709 const t = e.touches[0]; 9710 touchStartX = t.clientX; 9711 touchStartY = t.clientY; 9712 touchMoved = false; 9713 }, { passive: true }); 9714 9715 this.productImage.addEventListener('touchmove', (e) => { 9716 const t = e.touches[0]; 9717 if (Math.abs(t.clientX - touchStartX) > 10 || 9718 Math.abs(t.clientY - touchStartY) > 10) { 9719 touchMoved = true; 9720 } 9721 }, { passive: true }); 9722 9723 this.productImage.addEventListener('touchend', (e) => { 9724 if (touchMoved) return; 9725 lastTouchTime = Date.now(); 9726 e.preventDefault(); 9727 this.onImageTap(e); 9728 }, { passive: false }); 9729 9730 // Desktop / non-touch fallback (with double-fire protection after touchend) 9731 this.productImage.addEventListener('click', (e) => { 9732 if (Date.now() - lastTouchTime < 500) return; 9733 this.onImageTap(e); 9734 }); 9735 9736 this.productImage.addEventListener('keydown', (e) => { 9737 if (e.key === 'Enter' || e.key === ' ') { 9738 e.preventDefault(); 9739 this.onImageTap(e); 9740 } 9741 }); 9742 } 9743 9744 // --- Variant select listeners --- 9745 if (this.variantSelectors.length > 0) { 9746 this.variantSelectors.forEach(select => { 9747 select.addEventListener('change', this.onVariantChange.bind(this)); 9748 }); 9749 this.updateProductDetails(this.getCurrentVariant()); 9750 } 9751 } 9752 9753 // ============================================================ 9754 // CHANGE THIS IF YOU WANT DIFFERENT TAP BEHAVIOR 9755 // Currently: navigates to the product page. 9756 // ============================================================ 9757 onImageTap(e) { 9758 const link = this.container.querySelector('.product-title-link'); 9759 if (link && link.href && link.href !== '#') { 9760 window.location.href = link.href; 9761 } 9762 } 9763 // ============================================================ 9764 9765 onVariantChange() { 9766 const selectedOptions = Array.from(this.variantSelectors).map(s => s.value); 9767 const matchedVariant = this.findMatchingVariant(selectedOptions); 9768 9769 if (matchedVariant) { 9770 this.masterSelect.value = matchedVariant.id; 9771 this.updateProductDetails(matchedVariant); 9772 if (this.statusElement) this.statusElement.textContent = ''; 9773 } else { 9774 if (this.statusElement) { 9775 this.statusElement.textContent = 'No available variant matches your selection'; 9776 } 9777 this.updateProductDetails(null); 9778 } 9779 } 9780 9781 findMatchingVariant(selectedOptions) { 9782 return this.productVariants.find(variant => { 9783 if (!variant.options || variant.options.length !== selectedOptions.length) return false;
9784 return selectedOptions.every((val, i) => variant.options[i] === val); 9785 }); 9786 } 9787 9788 getCurrentVariant() { 9789 if (!this.masterSelect) return null; 9790 const id = this.masterSelect.value; 9791 if (!id) return null; 9792 return this.productVariants.find(v => String(v.id) === String(id)) || null; 9793 } 9794 9795 // Shopify CDN: insert _WIDTHx before extension for a properly sized image 9796 sizedImageUrl(src, width) { 9797 if (!src) return src; 9798 return src.replace(/(\.[a-z]{3,4})(\?|$)/i, `_${width}x$1$2`); 9799 } 9800 9801 updateProductDetails(variant) { 9802 this.container.setAttribute('aria-busy', 'true'); 9803 9804 if (!variant) { 9805 if (this.addToCartButton) this.addToCartButton.disabled = true; 9806 if (this.addToCartText) this.addToCartText.textContent = 'Unavailable'; 9807 if (this.notifyMeButton) this.notifyMeButton.style.display = 'none'; 9808 if (this.priceWrapper) this.priceWrapper.classList.remove('sale'); 9809 if (this.comparePriceElement) this.comparePriceElement.style.display = 'none'; 9810 if (this.saleTag) this.saleTag.style.display = 'none'; 9811 this.container.setAttribute('aria-busy', 'false'); 9812 return; 9813 } 9814 9815 // 1. Image 9816 if (this.productImage) { 9817 if (variant.featured_image && variant.featured_image.src) { 9818 const sized = this.sizedImageUrl(variant.featured_image.src, 300); 9819 const variantOptions = variant.options ? variant.options.join(' - ') : ''; 9820 this.productImage.src = sized; 9821 this.productImage.srcset = ''; 9822 this.productImage.alt = variant.featured_image.alt 9823 ? variant.featured_image.alt 9824 : (this.productTitle + (variantOptions ? ' - ' + variantOptions : '')); 9825 } else if (this.mainImageUrl) { 9826 this.productImage.src = this.mainImageUrl; 9827 this.productImage.srcset = ''; 9828 this.productImage.alt = this.productTitle; 9829 } 9830 } 9831 9832 // 2. Price 9833 const moneyFormat = "${{amount}}"; 9834 const formatMoney = (cents, format) => { 9835 if (typeof cents === 'string') cents = cents.replace('.', ''); 9836 let value = ''; 9837 const placeholderRegex = /\{\{\s*(\w+)\s*\}\}/; 9838 const formatString = (format || moneyFormat).replace(/<[^>]*>/g, ''); 9839 9840 function formatWithDelimiters(number, precision, thousands, decimal) { 9841 precision = precision ?? 2; 9842 thousands = thousands ?? ','; 9843 decimal = decimal ?? '.'; 9844 if (isNaN(number) || number == null) return 0; 9845 number = (number / 100.0).toFixed(precision); 9846 const parts = number.split('.'); 9847 const dollars = parts[0].replace(/(\d)(?=(\d\d\d)+(?!\d))/g, '$1' + thousands); 9848 const centsPart = parts[1] ? (decimal + parts[1]) : ''; 9849 return dollars + centsPart; 9850 } 9851 9852 switch (formatString.match(placeholderRegex)?.[1]) { 9853 case 'amount': value = formatWithDelimiters(cents, 2); break; 9854 case 'amount_no_decimals': value = formatWithDelimiters(cents, 0); break; 9855 case 'amount_with_comma_separator': value = formatWithDelimiters(cents, 2, '.', ','); break; 9856 case 'amount_no_decimals_with_comma_separator': value = formatWithDelimiters(cents, 0, '.', ','); break; 9857 case 'amount_with_apostrophe_separator': value = formatWithDelimiters(cents, 2, "'", "."); break; 9858 case 'amount_no_decimals_with_space_separator': value = formatWithDelimiters(cents, 0, " ", ","); break; 9859 case 'amount_with_space_separator': value = formatWithDelimiters(cents, 2, " ", ","); break; 9860 default: value = formatWithDelimiters(cents, 2); 9861 } 9862 try { 9863 return formatString.replace(placeholderRegex, value); 9864 } catch (e) { 9865 const fallback = (cents / 100.0).toFixed(2); 9866 return formatString.includes('') 9867 ? formatString.replace(placeholderRegex, fallback) 9868 : fallback; 9869 } 9870 }; 9871 9872 if (this.currentPriceElement) { 9873 this.currentPriceElement.textContent = formatMoney(variant.price, moneyFormat); 9874 } 9875 if (this.comparePriceElement && this.priceWrapper) { 9876 if (variant.compare_at_price && variant.compare_at_price > variant.price) { 9877 this.comparePriceElement.textContent = formatMoney(variant.compare_at_price, moneyFormat); 9878 this.comparePriceElement.style.display = ''; 9879 this.priceWrapper.classList.add('sale'); 9880 } else { 9881 this.comparePriceElement.textContent = ''; 9882 this.comparePriceElement.style.display = 'none'; 9883 this.priceWrapper.classList.remove('sale'); 9884 } 9885 } 9886 9887 // 3. Sale tag 9888 if (this.saleTag) { 9889 const isDiscounted = variant.compare_at_price && variant.compare_at_price > variant.price; 9890 if (isDiscounted && variant.available) { 9891 this.saleTag.style.display = 'block'; 9892 const discount = Math.round((variant.compare_at_price - variant.price) * 100.0 / variant.compare_at_price); 9893 const span = this.saleTag.querySelector('span'); 9894 if (span) span.textContent = discount + '%'; 9895 this.saleTag.setAttribute('aria-label', 'Save ' + discount + '%'); 9896 this.saleTag.setAttribute('role', 'status'); 9897 } else { 9898 this.saleTag.style.display = 'none'; 9899 } 9900 } 9901 9902 // 4. Add to cart 9903 if (this.addToCartButton && this.addToCartText) { 9904 if (variant.available) { 9905 this.addToCartButton.disabled = false;
9906 this.addToCartText.innerHTML = 'Add to Cart <i class="cart-icon"></i>'; 9907 this.addToCartButton.setAttribute('aria-label', 'Add to Cart - Add ' + this.productTitle + ' to cart'); 9908 if (this.notifyMeButton) this.notifyMeButton.style.display = 'none'; 9909 } else { 9910 this.addToCartButton.disabled = true; 9911 this.addToCartText.textContent = 'Sold Out'; 9912 this.addToCartButton.setAttribute('aria-label', 'Sold Out - ' + this.productTitle + ' is sold out'); 9913 if (this.notifyMeButton) this.notifyMeButton.style.display = 'block'; 9914 } 9915 } 9916 if (this.notifyMeButton) { 9917 this.notifyMeButton.setAttribute('data-variant-id', variant.id); 9918 } 9919 9920 this.container.setAttribute('aria-busy', 'false'); 9921 } 9922 } 9923 9924 function initProductCards(root) { 9925 root = root || document; 9926 root.querySelectorAll('.product-card-wrapper[data-product-id]').forEach(cardContainer => { 9927 if (cardContainer.dataset.variantSelectorInit === 'true') return; 9928 cardContainer.dataset.variantSelectorInit = 'true'; 9929 new ProductCardVariantSelector(cardContainer); 9930 }); 9931 } 9932 9933 if (document.readyState === 'loading') { 9934 document.addEventListener('DOMContentLoaded', () => initProductCards()); 9935 } else { 9936 initProductCards(); 9937 } 9938 9939 document.addEventListener('shopify:section:load', (e) => initProductCards(e.target)); 9940})(); 9941</script>
9941<div class="product-card-wrapper" data-product-id="8025532334402" aria-busy="false"> 9942 9943 <div class="product-image" id="ProductImageWrapper-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025532334402"><!-- WISHLIST BUTTON --> 9944 <div class='xb-wishlist__btn-custom'> 9945 <div 9946 class='xb-wishlist__add' 9947 xb-product-id='8025532334402' 9948 xb-product-title='Jasmine Essential Oil' 9949 xb-product-variant='44111282209090' 9950 xb-is-in-stock='true' 9951 xb-product-handle='jasmine-essential-oil' 9952 > 9953 <button aria-label="Add Jasmine Essential Oil to wishlist" aria-pressed="false"> 9954 <svg 9955 xmlns='http://www.w3.org/2000/svg' 9956 width='20' 9957 height='20' 9958 viewBox='0 0 24 24' 9959 fill='none' 9960 stroke='#FF4A71' 9961 stroke-width='2' 9962 stroke-linecap='round' 9963 stroke-linejoin='round' 9964 aria-hidden='true' 9965 focusable='false' 9966 > 9967 <path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"></path> 9968 </svg> 9969 </button> 9970 </div> 9971 9972 <div class="xb-wishlist__loading" xb-product-id="8025532334402"> 9973 <span class="loading-spinner"></span> 9974 </div> 9975 9976 <div class='xb-wishlist__remove' xb-product-id='8025532334402' xb-is-in-stock='true'> 9977 <button aria-label="Remove Jasmine Essential Oil from wishlist" aria-pressed="true"> 9978 <svg 9979 xmlns='http://www.w3.org/2000/svg' 9980 width='20' 9981 height='20'
9982 viewBox='0 0 24 24' 9983 fill='#FF4A71' 9984 stroke='#FF4A71' 9985 stroke-width='2' 9986 stroke-linecap='round' 9987 stroke-linejoin='round' 9988 aria-hidden='true' 9989 focusable='false' 9990 > 9991 <path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"></path> 9992 </svg> 9993 </button> 9994 </div> 9995 </div><img 9996 id="ProductImage-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025532334402" 9997 class="main-product-image" 9998 src="//www.rockymountainoils.com/cdn/shop/files/jasmine-essential-oil-5ml-1.jpg?crop=center&height=300&v=1769779286&width=300" 9999 alt="Jasmine Essential Oil - 5ml - Rocky Mountain Oils" 10000 width="300" 10001 height="300" 10002 loading="lazy" 10003 /></div> 10004 10005 <div class="product-content"> 10006 <div class="product-title"> 10007 <a href="/products/jasmine-essential-oil" class="product-title-link" aria-label="View Jasmine Essential Oil"> 10008 <h2>Jasmine Essential Oil</h2> 10009 </a> 10010 </div><div> 10011 <div class="product-subtitle"> 10012 Rich, floral scent; helps reverse fatigue. 10013 </div> 10014 </div><div class="yotpo-widget-instance" data-yotpo-instance-id="503375" data-yotpo-product-id="8025532334402" data-yotpo-cart-product-id="" data-yotpo-section-id="index"></div><!-- START Variant Selection Form --> 10015 <div class="product-data-store" style="display:none;" 10016 data-main-image-url="//www.rockymountainoils.com/cdn/shop/files/jasmine-essential-oil-5ml-1.jpg?v=1769779286&width=300" 10017 data-product-title="Jasmine Essential Oil" 10018 id="DataStore-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025532334402"> 10019 </div> 10020 10021
10021<script id="VariantsJson-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025532334402" type="application/json"> 10022 [{"id":44111282209090,"title":"5ml","option1":"5ml","option2":null,"option3":null,"sku":"JASIND-S5","requires_shipping":true,"taxable":true,"featured_image":{"id":44126452187458,"product_id":8025532334402,"position":1,"created_at":"2024-02-14T14:08:26-07:00","updated_at":"2026-01-30T06:21:26-07:00","alt":"Jasmine Essential Oil - 5ml - Rocky Mountain Oils","width":513,"height":513,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/jasmine-essential-oil-5ml-1.jpg?v=1769779286","variant_ids":[44111282209090]},"available":true,"name":"Jasmine Essential Oil - 5ml","public_title":"5ml","options":["5ml"],"price":7695,"weight":28,"compare_at_price":null,"inventory_management":"shopify","barcode":"053176175942","featured_media":{"alt":"Jasmine Essential Oil - 5ml - Rocky Mountain Oils","id":36602280051010,"position":1,"preview_image":{"aspect_ratio":1.0,"height":513,"width":513,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/jasmine-essential-oil-5ml-1.jpg?v=1769779286"}},"requires_selling_plan":false,"selling_plan_allocations":[{"price_adjustments":[{"position":1,"price":5387}],"price":5387,"compare_at_price":7695,"per_delivery_price":5387,"selling_plan_id":691785924975,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":6541},{"position":2,"price":6156}],"price":6541,"compare_at_price":7695,"per_delivery_price":6541,"selling_plan_id":691785957743,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":6926},{"position":2,"price":6541}],"price":6926,"compare_at_price":7695,"per_delivery_price":6926,"selling_plan_id":691785990511,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":7310},{"position":2,"price":6926}],"price":7310,"compare_at_price":7695,"per_delivery_price":7310,"selling_plan_id":691786023279,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":6926},{"position":2,"price":6541}],"price":6926,"compare_at_price":7695,"per_delivery_price":6926,"selling_plan_id":691786088815,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":7310},{"position":2,"price":6926}],"price":7310,"compare_at_price":7695,"per_delivery_price":7310,"selling_plan_id":691786121583,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":6541},{"position":2,"price":6156}],"price":6541,"compare_at_price":7695,"per_delivery_price":6541,"selling_plan_id":691795362159,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":6926},{"position":2,"price":6541}],"price":6926,"compare_at_price":7695,"per_delivery_price":6926,"selling_plan_id":691795394927,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":7310},{"position":2,"price":6926}],"price":7310,"compare_at_price":7695,"per_delivery_price":7310,"selling_plan_id":691795427695,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"}],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":52064259408239,"title":"1ml","option1":"1ml","option2":null,"option3":null,"sku":"JASIND-1ML","requires_shipping":true,"taxable":true,"featured_image":{"id":60328924021103,"product_id":8025532334402,"position":3,"created_at":"2025-06-30T23:50:15-06:00","updated_at":"2026-01-30T06:21:26-07:00","alt":"Small black bottle of Jasmine essential oil with a purple label on a white background, featuring a 'LIMITED TIME ONLY!' banner.","width":1080,"height":1080,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/Jasmine_1ml.webp?v=1769779286","variant_ids":[52064259408239]},"available":false,"name":"Jasmine Essential Oil - 1ml","public_title":"1ml","options":["1ml"],"price":1695,"weight":28,"compare_at_price":null,"inventory_management":"shopify","barcode":"053176184814","featured_media":{"alt":"Small black bottle of Jasmine essential oil with a purple label on a white background, featuring a 'LIMITED TIME ONLY!' banner.","id":51984803365231,"position":3,"preview_image":{"aspect_ratio":1.0,"height":1080,"width":1080,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/Jasmine_1ml.webp?v=1769779286"}},"requires_selling_plan":false,"selling_plan_allocations":[{"price_adjustments":[{"position":1,"price":1187}],"price":1187,"compare_at_price":1695,"per_delivery_price":1187,"selling_plan_id":691785924975,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":1441},{"position":2,"price":1356}],"price":1441,"compare_at_price":1695,"per_delivery_price":1441,"selling_plan_id":691785957743,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":1526},{"position":2,"price":1441}],"price":1526,"compare_at_price":1695,"per_delivery_price":1526,"selling_plan_id":691785990511,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":1610},{"position":2,"price":1526}],"price":1610,"compare_at_price":1695,"per_delivery_price":1610,"selling_plan_id":691786023279,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":1526},{"position":2,"price":1441}],"price":1526,"compare_at_price":1695,"per_delivery_price":1526,"selling_plan_id":691786088815,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":1610},{"position":2,"price":1526}],"price":1610,"compare_at_price":1695,"per_delivery_price":1610,"selling_plan_id":691786121583,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":1441},{"position":2,"price":1356}],"price":1441,"compare_at_price":1695,"per_delivery_price":1441,"selling_plan_id":691795362159,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":1526},{"position":2,"price":1441}],"price":1526,"compare_at_price":1695,"per_delivery_price":1526,"selling_plan_id":691795394927,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":1610},{"position":2,"price":1526}],"price":1610,"compare_at_price":1695,"per_delivery_price":1610,"selling_plan_id":691795427695,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"}],"quantity_rule":{"min":1,"max":null,"increment":1}}] 10023 </script>
10023<form method="post" action="/cart/add" id="product-form-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025532334402" accept-charset="UTF-8" class="product-variants product-form" enctype="multipart/form-data" data-productid="8025532334402" novalidate="novalidate" data-type="add-to-cart-form"><input type="hidden" name="form_type" value="product" /><input type="hidden" name="utf8" value="â" /><div class="product-price-option"> 10024 <div class="product-price" id="ProductPrice-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025532334402" aria-live="polite" aria-atomic="true"> 10025 <span class="compare-at-price" id="ComparePrice-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025532334402" style="display: none;"></span> 10026 <span class="current-price" id="CurrentPrice-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025532334402">$76.95</span> 10027 10028 10029 </div> 10030 10031 10032 <div class="product-option"> 10033 <label for="Option-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025532334402-0" class="visually-hidden"> 10034 Select Size for Jasmine Essential Oil 10035 </label> 10036 <select 10037 id="Option-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025532334402-0" 10038 class="variant-select" 10039 name="options[Size]" 10040 form="product-form-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025532334402" 10041 data-index="option0" 10042 ><option 10043 value="5ml" 10044 selected="selected" 10045 > 10046 5ml 10047 </option><option 10048 value="1ml" 10049 10050 > 10051 1ml 10052 </option></select> 10053 </div> 10054 10055 </div><label for="ProductSelect-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025532334402" class="visually-hidden"> 10056 Choose variant for Jasmine Essential Oil 10057 </label> 10058 <select 10059 name="id" 10060 data-productid="8025532334402" 10061 id="ProductSelect-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025532334402" 10062 class="product-variants-select no-js-only" 10063 ><option 10064 value="44111282209090" 10065 selected="selected" 10066 10067 > 10068 5ml - $76.95 10069 </option><option 10070 value="52064259408239" 10071 10072 disabled="disabled" 10073 > 10074 1ml - $16.95 - Sold Out 10075 </option></select> 10076 10077 <div class="product-addtocart" id="AddToCartWrapper-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025532334402"> 10078 <input type="hidden" name="quantity" value="1"> 10079 10080 10081 <div class="visually-hidden" role="status" id="variant-status-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025532334402" aria-live="assertive"></div> 10082 10083 <span id="cart-action-desc-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025532334402" class="visually-hidden">Adds item to your shopping cart</span> 10084 10085 <button 10086 class="addtocart-btn add-to-cart" 10087 type="submit" 10088 name="add" 10089 aria-label="Add to Cart - Add Jasmine Essential Oil to cart" 10090 aria-describedby="cart-action-desc-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025532334402" 10091 id="AddToCart-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025532334402" 10092 10093 >
10094 <span id="AddToCartText-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025532334402">Add to Cart <i class="cart-icon" aria-hidden="true"></i></span> 10095 </button> 10096 </div><input type="hidden" name="product-id" value="8025532334402" /><input type="hidden" name="section-id" value="template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040" /></form><!-- END Variant Selection Form --></div>
10096<script type="application/ld+json"> 10097 { 10098 "@context": "http://schema.org/", 10099 "@type": "Product", 10100 "name": "Jasmine Essential Oil", 10101 "url": "https:\/\/www.rockymountainoils.com\/products\/jasmine-essential-oil","image": [ 10102 "https:\/\/www.rockymountainoils.com\/cdn\/shop\/files\/jasmine-essential-oil-5ml-1.jpg?v=1769779286\u0026width=513" 10103 ], 10104 "description": "Jasmine Essential Oil offers a luxurious, sweet floral scent that can transform your space and mood. This precious oil is steam distilled from Jasminum grandiflorum flowers, capturing their enchanting aroma and beneficial properties.\nJasmine Essential Oil may help promote feelings of calm and relaxation. Its soothing scent can be used in aromatherapy to create a peaceful atmosphere, potentially easing tension and supporting emotional balance. When diluted properly, it may also contribute to skin health and overall well-being.","sku": "JASIND-S5", 10105 "brand": { 10106 "@type": "Brand", 10107 "name": "Rocky Mountain Oils" 10108 }, 10109 "offers": { 10110 "@type": "AggregateOffer", 10111 "availability": "http://schema.org/InStock", 10112 "priceCurrency": "USD", 10113 "highPrice": 76.95, 10114 "lowPrice": 16.95, 10115 "offerCount": 2, 10116 "offers": [{ 10117 "@type" : "Offer","sku": "JASIND-S5","gtin12": "053176175942","availability" : "http://schema.org/InStock", 10118 "price" : 76.95, 10119 "priceCurrency" : "USD", 10120 "priceValidUntil": "2026-12-31", 10121 "url" : "https:\/\/www.rockymountainoils.com\/products\/jasmine-essential-oil?variant=44111282209090" 10122 }, 10123{ 10124 "@type" : "Offer","sku": "JASIND-1ML","gtin12": "053176184814","availability" : "http://schema.org/OutOfStock", 10125 "price" : 16.95, 10126 "priceCurrency" : "USD", 10127 "priceValidUntil": "2026-12-31", 10128 "url" : "https:\/\/www.rockymountainoils.com\/products\/jasmine-essential-oil?variant=52064259408239" 10129 } 10130] 10131 } 10132 } 10133 </script>
10133</div> 10134 10135<style> 10136/* Ensure visually-hidden utility exists even if theme lacks it */ 10137.visually-hidden { 10138 position: absolute !important; 10139 width: 1px !important; 10140 height: 1px !important; 10141 padding: 0 !important; 10142 margin: -1px !important; 10143 overflow: hidden !important; 10144 clip: rect(0, 0, 0, 0) !important; 10145 white-space: nowrap !important; 10146 border: 0 !important; 10147} 10148 10149/* Ensure the main product image is tappable on iOS */ 10150.main-product-image { 10151 cursor: pointer; 10152 -webkit-tap-highlight-color: rgba(0,0,0,0.05); 10153 touch-action: manipulation; 10154} 10155 10156/* ULTIMATE FIX - Override anything that hides select text */ 10157.product-variants-select, 10158.product-variants-select.no-js-only, 10159select.product-variants-select, 10160select[id*="ProductSelect-"] { 10161 color: #1a1a1a !important; 10162 opacity: 1 !important; 10163 background-color: #ffffff !important; 10164 -webkit-text-fill-color: #1a1a1a !important; 10165} 10166 10167.product-variants-select option, 10168select[id*="ProductSelect-"] option { 10169 color: #1a1a1a !important; 10170 background-color: #ffffff !important; 10171 -webkit-text-fill-color: #1a1a1a !important; 10172} 10173 10174.product-variants-select option:checked, 10175select[id*="ProductSelect-"] option:checked { 10176 color: #1a1a1a !important; 10177 background-color: #e8f0fe !important; 10178} 10179 10180.product-variants-select option:disabled, 10181select[id*="ProductSelect-"] option:disabled { 10182 color: #6c6c6c !important; 10183 background-color: #f5f5f5 !important; 10184 -webkit-text-fill-color: #6c6c6c !important; 10185 opacity: 1 !important; 10186} 10187 10188.product-variants-select:focus, 10189select[id*="ProductSelect-"]:focus { 10190 color: #1a1a1a !important; 10191 outline: 3px solid #000000ff !important; 10192} 10193</style> 10194 </div><div class="item"> 10195
10195<script> 10196(function() { 10197 class ProductCardVariantSelector { 10198 constructor(container) { 10199 this.container = container; 10200 if (!this.container) return; 10201 10202 this.form = this.container.querySelector('.product-form'); 10203 this.variantSelectors = this.container.querySelectorAll('.variant-select'); 10204 this.masterSelect = this.container.querySelector('.product-variants-select'); 10205 this.productImage = this.container.querySelector('.main-product-image'); 10206 this.priceWrapper = this.container.querySelector('[id^="ProductPrice-"]'); 10207 this.currentPriceElement = this.container.querySelector('[id^="CurrentPrice-"]'); 10208 this.comparePriceElement = this.container.querySelector('[id^="ComparePrice-"]'); 10209 this.addToCartButton = this.container.querySelector('[id^="AddToCart-"]'); 10210 this.addToCartText = this.container.querySelector('[id^="AddToCartText-"]'); 10211 this.notifyMeButton = this.container.querySelector('[id^="NotifyMe-"]'); 10212 this.variantsJsonScript = this.container.querySelector('[id^="VariantsJson-"]'); 10213 this.dataStore = this.container.querySelector('[id^="DataStore-"]'); 10214 this.saleTag = this.container.querySelector('.hc-sale-tag'); 10215 this.statusElement = this.container.querySelector('[id^="variant-status-"]'); 10216 10217 if (!this.masterSelect || !this.variantsJsonScript) return; 10218 10219 try { 10220 this.productVariants = JSON.parse(this.variantsJsonScript.textContent); 10221 } catch (e) { return; } 10222 10223 this.mainImageUrl = this.dataStore ? this.dataStore.dataset.mainImageUrl : null; 10224 this.productTitle = this.dataStore ? this.dataStore.dataset.productTitle : ''; 10225 10226 this.init(); 10227 } 10228 10229 init() { 10230 // --- iOS-safe image tap handling (works on iPhone 16, 17 Pro Max, etc.) --- 10231 if (this.productImage) { 10232 let touchStartX = 0, touchStartY = 0, touchMoved = false; 10233 let lastTouchTime = 0; 10234 10235 this.productImage.style.cursor = 'pointer'; 10236 this.productImage.setAttribute('role', 'button'); 10237 this.productImage.setAttribute('tabindex', '0'); 10238 10239 this.productImage.addEventListener('touchstart', (e) => { 10240 const t = e.touches[0]; 10241 touchStartX = t.clientX; 10242 touchStartY = t.clientY; 10243 touchMoved = false; 10244 }, { passive: true }); 10245 10246 this.productImage.addEventListener('touchmove', (e) => { 10247 const t = e.touches[0]; 10248 if (Math.abs(t.clientX - touchStartX) > 10 || 10249 Math.abs(t.clientY - touchStartY) > 10) { 10250 touchMoved = true; 10251 } 10252 }, { passive: true }); 10253 10254 this.productImage.addEventListener('touchend', (e) => { 10255 if (touchMoved) return; 10256 lastTouchTime = Date.now(); 10257 e.preventDefault(); 10258 this.onImageTap(e); 10259 }, { passive: false }); 10260 10261 // Desktop / non-touch fallback (with double-fire protection after touchend) 10262 this.productImage.addEventListener('click', (e) => { 10263 if (Date.now() - lastTouchTime < 500) return; 10264 this.onImageTap(e); 10265 }); 10266 10267 this.productImage.addEventListener('keydown', (e) => { 10268 if (e.key === 'Enter' || e.key === ' ') { 10269 e.preventDefault(); 10270 this.onImageTap(e); 10271 } 10272 }); 10273 } 10274 10275 // --- Variant select listeners --- 10276 if (this.variantSelectors.length > 0) { 10277 this.variantSelectors.forEach(select => { 10278 select.addEventListener('change', this.onVariantChange.bind(this)); 10279 }); 10280 this.updateProductDetails(this.getCurrentVariant()); 10281 } 10282 } 10283 10284 // ============================================================ 10285 // CHANGE THIS IF YOU WANT DIFFERENT TAP BEHAVIOR 10286 // Currently: navigates to the product page. 10287 // ============================================================ 10288 onImageTap(e) { 10289 const link = this.container.querySelector('.product-title-link'); 10290 if (link && link.href && link.href !== '#') { 10291 window.location.href = link.href; 10292 } 10293 } 10294 // ============================================================ 10295 10296 onVariantChange() { 10297 const selectedOptions = Array.from(this.variantSelectors).map(s => s.value); 10298 const matchedVariant = this.findMatchingVariant(selectedOptions); 10299 10300 if (matchedVariant) { 10301 this.masterSelect.value = matchedVariant.id; 10302 this.updateProductDetails(matchedVariant); 10303 if (this.statusElement) this.statusElement.textContent = ''; 10304 } else { 10305 if (this.statusElement) { 10306 this.statusElement.textContent = 'No available variant matches your selection'; 10307 } 10308 this.updateProductDetails(null); 10309 } 10310 } 10311 10312 findMatchingVariant(selectedOptions) { 10313 return this.productVariants.find(variant => { 10314 if (!variant.options || variant.options.length !== selectedOptions.length) return false;
10315 return selectedOptions.every((val, i) => variant.options[i] === val); 10316 }); 10317 } 10318 10319 getCurrentVariant() { 10320 if (!this.masterSelect) return null; 10321 const id = this.masterSelect.value; 10322 if (!id) return null; 10323 return this.productVariants.find(v => String(v.id) === String(id)) || null; 10324 } 10325 10326 // Shopify CDN: insert _WIDTHx before extension for a properly sized image 10327 sizedImageUrl(src, width) { 10328 if (!src) return src; 10329 return src.replace(/(\.[a-z]{3,4})(\?|$)/i, `_${width}x$1$2`); 10330 } 10331 10332 updateProductDetails(variant) { 10333 this.container.setAttribute('aria-busy', 'true'); 10334 10335 if (!variant) { 10336 if (this.addToCartButton) this.addToCartButton.disabled = true; 10337 if (this.addToCartText) this.addToCartText.textContent = 'Unavailable'; 10338 if (this.notifyMeButton) this.notifyMeButton.style.display = 'none'; 10339 if (this.priceWrapper) this.priceWrapper.classList.remove('sale'); 10340 if (this.comparePriceElement) this.comparePriceElement.style.display = 'none'; 10341 if (this.saleTag) this.saleTag.style.display = 'none'; 10342 this.container.setAttribute('aria-busy', 'false'); 10343 return; 10344 } 10345 10346 // 1. Image 10347 if (this.productImage) { 10348 if (variant.featured_image && variant.featured_image.src) { 10349 const sized = this.sizedImageUrl(variant.featured_image.src, 300); 10350 const variantOptions = variant.options ? variant.options.join(' - ') : ''; 10351 this.productImage.src = sized; 10352 this.productImage.srcset = ''; 10353 this.productImage.alt = variant.featured_image.alt 10354 ? variant.featured_image.alt 10355 : (this.productTitle + (variantOptions ? ' - ' + variantOptions : '')); 10356 } else if (this.mainImageUrl) { 10357 this.productImage.src = this.mainImageUrl; 10358 this.productImage.srcset = ''; 10359 this.productImage.alt = this.productTitle; 10360 } 10361 } 10362 10363 // 2. Price 10364 const moneyFormat = "${{amount}}"; 10365 const formatMoney = (cents, format) => { 10366 if (typeof cents === 'string') cents = cents.replace('.', ''); 10367 let value = ''; 10368 const placeholderRegex = /\{\{\s*(\w+)\s*\}\}/; 10369 const formatString = (format || moneyFormat).replace(/<[^>]*>/g, ''); 10370 10371 function formatWithDelimiters(number, precision, thousands, decimal) { 10372 precision = precision ?? 2; 10373 thousands = thousands ?? ','; 10374 decimal = decimal ?? '.'; 10375 if (isNaN(number) || number == null) return 0; 10376 number = (number / 100.0).toFixed(precision); 10377 const parts = number.split('.'); 10378 const dollars = parts[0].replace(/(\d)(?=(\d\d\d)+(?!\d))/g, '$1' + thousands); 10379 const centsPart = parts[1] ? (decimal + parts[1]) : ''; 10380 return dollars + centsPart; 10381 } 10382 10383 switch (formatString.match(placeholderRegex)?.[1]) { 10384 case 'amount': value = formatWithDelimiters(cents, 2); break; 10385 case 'amount_no_decimals': value = formatWithDelimiters(cents, 0); break; 10386 case 'amount_with_comma_separator': value = formatWithDelimiters(cents, 2, '.', ','); break; 10387 case 'amount_no_decimals_with_comma_separator': value = formatWithDelimiters(cents, 0, '.', ','); break; 10388 case 'amount_with_apostrophe_separator': value = formatWithDelimiters(cents, 2, "'", "."); break; 10389 case 'amount_no_decimals_with_space_separator': value = formatWithDelimiters(cents, 0, " ", ","); break; 10390 case 'amount_with_space_separator': value = formatWithDelimiters(cents, 2, " ", ","); break; 10391 default: value = formatWithDelimiters(cents, 2); 10392 } 10393 try { 10394 return formatString.replace(placeholderRegex, value); 10395 } catch (e) { 10396 const fallback = (cents / 100.0).toFixed(2); 10397 return formatString.includes('') 10398 ? formatString.replace(placeholderRegex, fallback) 10399 : fallback; 10400 } 10401 }; 10402 10403 if (this.currentPriceElement) { 10404 this.currentPriceElement.textContent = formatMoney(variant.price, moneyFormat); 10405 } 10406 if (this.comparePriceElement && this.priceWrapper) { 10407 if (variant.compare_at_price && variant.compare_at_price > variant.price) { 10408 this.comparePriceElement.textContent = formatMoney(variant.compare_at_price, moneyFormat); 10409 this.comparePriceElement.style.display = ''; 10410 this.priceWrapper.classList.add('sale'); 10411 } else { 10412 this.comparePriceElement.textContent = ''; 10413 this.comparePriceElement.style.display = 'none'; 10414 this.priceWrapper.classList.remove('sale'); 10415 } 10416 } 10417 10418 // 3. Sale tag 10419 if (this.saleTag) { 10420 const isDiscounted = variant.compare_at_price && variant.compare_at_price > variant.price; 10421 if (isDiscounted && variant.available) { 10422 this.saleTag.style.display = 'block'; 10423 const discount = Math.round((variant.compare_at_price - variant.price) * 100.0 / variant.compare_at_price); 10424 const span = this.saleTag.querySelector('span'); 10425 if (span) span.textContent = discount + '%'; 10426 this.saleTag.setAttribute('aria-label', 'Save ' + discount + '%'); 10427 this.saleTag.setAttribute('role', 'status'); 10428 } else { 10429 this.saleTag.style.display = 'none'; 10430 } 10431 } 10432 10433 // 4. Add to cart 10434 if (this.addToCartButton && this.addToCartText) { 10435 if (variant.available) { 10436 this.addToCartButton.disabled = false;
10437 this.addToCartText.innerHTML = 'Add to Cart <i class="cart-icon"></i>'; 10438 this.addToCartButton.setAttribute('aria-label', 'Add to Cart - Add ' + this.productTitle + ' to cart'); 10439 if (this.notifyMeButton) this.notifyMeButton.style.display = 'none'; 10440 } else { 10441 this.addToCartButton.disabled = true; 10442 this.addToCartText.textContent = 'Sold Out'; 10443 this.addToCartButton.setAttribute('aria-label', 'Sold Out - ' + this.productTitle + ' is sold out'); 10444 if (this.notifyMeButton) this.notifyMeButton.style.display = 'block'; 10445 } 10446 } 10447 if (this.notifyMeButton) { 10448 this.notifyMeButton.setAttribute('data-variant-id', variant.id); 10449 } 10450 10451 this.container.setAttribute('aria-busy', 'false'); 10452 } 10453 } 10454 10455 function initProductCards(root) { 10456 root = root || document; 10457 root.querySelectorAll('.product-card-wrapper[data-product-id]').forEach(cardContainer => { 10458 if (cardContainer.dataset.variantSelectorInit === 'true') return; 10459 cardContainer.dataset.variantSelectorInit = 'true'; 10460 new ProductCardVariantSelector(cardContainer); 10461 }); 10462 } 10463 10464 if (document.readyState === 'loading') { 10465 document.addEventListener('DOMContentLoaded', () => initProductCards()); 10466 } else { 10467 initProductCards(); 10468 } 10469 10470 document.addEventListener('shopify:section:load', (e) => initProductCards(e.target)); 10471})(); 10472</script>
10472<div class="product-card-wrapper" data-product-id="8025523618114" aria-busy="false"> 10473 10474 <div class="product-image" id="ProductImageWrapper-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025523618114"><!-- WISHLIST BUTTON --> 10475 <div class='xb-wishlist__btn-custom'> 10476 <div 10477 class='xb-wishlist__add' 10478 xb-product-id='8025523618114' 10479 xb-product-title='Blue Tansy Essential Oil' 10480 xb-product-variant='44111212314946' 10481 xb-is-in-stock='true' 10482 xb-product-handle='blue-tansy-essential-oil' 10483 > 10484 <button aria-label="Add Blue Tansy Essential Oil to wishlist" aria-pressed="false"> 10485 <svg 10486 xmlns='http://www.w3.org/2000/svg' 10487 width='20' 10488 height='20' 10489 viewBox='0 0 24 24' 10490 fill='none' 10491 stroke='#FF4A71' 10492 stroke-width='2' 10493 stroke-linecap='round' 10494 stroke-linejoin='round' 10495 aria-hidden='true' 10496 focusable='false' 10497 > 10498 <path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"></path> 10499 </svg> 10500 </button> 10501 </div> 10502 10503 <div class="xb-wishlist__loading" xb-product-id="8025523618114"> 10504 <span class="loading-spinner"></span> 10505 </div> 10506 10507 <div class='xb-wishlist__remove' xb-product-id='8025523618114' xb-is-in-stock='true'> 10508 <button aria-label="Remove Blue Tansy Essential Oil from wishlist" aria-pressed="true"> 10509 <svg 10510 xmlns='http://www.w3.org/2000/svg' 10511 width='20' 10512 height='20'
10513 viewBox='0 0 24 24' 10514 fill='#FF4A71' 10515 stroke='#FF4A71' 10516 stroke-width='2' 10517 stroke-linecap='round' 10518 stroke-linejoin='round' 10519 aria-hidden='true' 10520 focusable='false' 10521 > 10522 <path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"></path> 10523 </svg> 10524 </button> 10525 </div> 10526 </div><img 10527 id="ProductImage-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025523618114" 10528 class="main-product-image" 10529 src="//www.rockymountainoils.com/cdn/shop/files/blue-tansy-essential-oil-5ml-1.jpg?crop=center&height=300&v=1773761127&width=300" 10530 alt="blue tansy essential oil - 5ml" 10531 width="300" 10532 height="300" 10533 loading="lazy" 10534 /></div> 10535 10536 <div class="product-content"> 10537 <div class="product-title"> 10538 <a href="/products/blue-tansy-essential-oil" class="product-title-link" aria-label="View Blue Tansy Essential Oil"> 10539 <h2>Blue Tansy Essential Oil</h2> 10540 </a> 10541 </div><div> 10542 <div class="product-subtitle"> 10543 Sweet, herbaceous scent; great for skin & reduces inflammation. 10544 </div> 10545 </div><div class="yotpo-widget-instance" data-yotpo-instance-id="503375" data-yotpo-product-id="8025523618114" data-yotpo-cart-product-id="" data-yotpo-section-id="index"></div><!-- START Variant Selection Form --> 10546 <div class="product-data-store" style="display:none;" 10547 data-main-image-url="//www.rockymountainoils.com/cdn/shop/files/blue-tansy-essential-oil-5ml-1.jpg?v=1773761127&width=300" 10548 data-product-title="Blue Tansy Essential Oil" 10549 id="DataStore-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025523618114"> 10550 </div> 10551 10552
10552<script id="VariantsJson-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025523618114" type="application/json"> 10553 [{"id":44111212314946,"title":"5ml","option1":"5ml","option2":null,"option3":null,"sku":"BLUMOR-S5","requires_shipping":true,"taxable":true,"featured_image":{"id":43606271459650,"product_id":8025523618114,"position":1,"created_at":"2023-12-18T12:07:40-07:00","updated_at":"2026-03-17T09:25:27-06:00","alt":"blue tansy essential oil - 5ml","width":473,"height":473,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/blue-tansy-essential-oil-5ml-1.jpg?v=1773761127","variant_ids":[44111212314946]},"available":true,"name":"Blue Tansy Essential Oil - 5ml","public_title":"5ml","options":["5ml"],"price":7695,"weight":28,"compare_at_price":null,"inventory_management":"shopify","barcode":"053176175164","featured_media":{"alt":"blue tansy essential oil - 5ml","id":36066332803394,"position":1,"preview_image":{"aspect_ratio":1.0,"height":473,"width":473,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/blue-tansy-essential-oil-5ml-1.jpg?v=1773761127"}},"requires_selling_plan":false,"selling_plan_allocations":[{"price_adjustments":[{"position":1,"price":5387}],"price":5387,"compare_at_price":7695,"per_delivery_price":5387,"selling_plan_id":691785924975,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":6541},{"position":2,"price":6156}],"price":6541,"compare_at_price":7695,"per_delivery_price":6541,"selling_plan_id":691785957743,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":6926},{"position":2,"price":6541}],"price":6926,"compare_at_price":7695,"per_delivery_price":6926,"selling_plan_id":691785990511,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":7310},{"position":2,"price":6926}],"price":7310,"compare_at_price":7695,"per_delivery_price":7310,"selling_plan_id":691786023279,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":6926},{"position":2,"price":6541}],"price":6926,"compare_at_price":7695,"per_delivery_price":6926,"selling_plan_id":691786088815,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":7310},{"position":2,"price":6926}],"price":7310,"compare_at_price":7695,"per_delivery_price":7310,"selling_plan_id":691786121583,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":6541},{"position":2,"price":6156}],"price":6541,"compare_at_price":7695,"per_delivery_price":6541,"selling_plan_id":691795362159,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":6926},{"position":2,"price":6541}],"price":6926,"compare_at_price":7695,"per_delivery_price":6926,"selling_plan_id":691795394927,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":7310},{"position":2,"price":6926}],"price":7310,"compare_at_price":7695,"per_delivery_price":7310,"selling_plan_id":691795427695,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"}],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":52064222282095,"title":"1ml","option1":"1ml","option2":null,"option3":null,"sku":"BLUMOR-1ML","requires_shipping":true,"taxable":true,"featured_image":{"id":60328900329839,"product_id":8025523618114,"position":5,"created_at":"2025-06-30T23:40:23-06:00","updated_at":"2026-03-17T09:25:27-06:00","alt":"Black bottle with blue label of Blue Tansy essential oil on a white background.","width":1080,"height":1080,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/Blue_Tansy_1ml.webp?v=1773761127","variant_ids":[52064222282095]},"available":true,"name":"Blue Tansy Essential Oil - 1ml","public_title":"1ml","options":["1ml"],"price":1895,"weight":28,"compare_at_price":null,"inventory_management":"shopify","barcode":"053176184791","featured_media":{"alt":"Black bottle with blue label of Blue Tansy essential oil on a white background.","id":51984781214063,"position":5,"preview_image":{"aspect_ratio":1.0,"height":1080,"width":1080,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/Blue_Tansy_1ml.webp?v=1773761127"}},"requires_selling_plan":false,"selling_plan_allocations":[{"price_adjustments":[{"position":1,"price":1327}],"price":1327,"compare_at_price":1895,"per_delivery_price":1327,"selling_plan_id":691785924975,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":1611},{"position":2,"price":1516}],"price":1611,"compare_at_price":1895,"per_delivery_price":1611,"selling_plan_id":691785957743,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":1706},{"position":2,"price":1611}],"price":1706,"compare_at_price":1895,"per_delivery_price":1706,"selling_plan_id":691785990511,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":1800},{"position":2,"price":1706}],"price":1800,"compare_at_price":1895,"per_delivery_price":1800,"selling_plan_id":691786023279,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":1706},{"position":2,"price":1611}],"price":1706,"compare_at_price":1895,"per_delivery_price":1706,"selling_plan_id":691786088815,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":1800},{"position":2,"price":1706}],"price":1800,"compare_at_price":1895,"per_delivery_price":1800,"selling_plan_id":691786121583,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":1611},{"position":2,"price":1516}],"price":1611,"compare_at_price":1895,"per_delivery_price":1611,"selling_plan_id":691795362159,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":1706},{"position":2,"price":1611}],"price":1706,"compare_at_price":1895,"per_delivery_price":1706,"selling_plan_id":691795394927,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":1800},{"position":2,"price":1706}],"price":1800,"compare_at_price":1895,"per_delivery_price":1800,"selling_plan_id":691795427695,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"}],"quantity_rule":{"min":1,"max":null,"increment":1}}] 10554 </script>
10554<form method="post" action="/cart/add" id="product-form-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025523618114" accept-charset="UTF-8" class="product-variants product-form" enctype="multipart/form-data" data-productid="8025523618114" novalidate="novalidate" data-type="add-to-cart-form"><input type="hidden" name="form_type" value="product" /><input type="hidden" name="utf8" value="â" /><div class="product-price-option"> 10555 <div class="product-price" id="ProductPrice-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025523618114" aria-live="polite" aria-atomic="true"> 10556 <span class="compare-at-price" id="ComparePrice-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025523618114" style="display: none;"></span> 10557 <span class="current-price" id="CurrentPrice-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025523618114">$76.95</span> 10558 10559 10560 </div> 10561 10562 10563 <div class="product-option"> 10564 <label for="Option-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025523618114-0" class="visually-hidden"> 10565 Select Size for Blue Tansy Essential Oil 10566 </label> 10567 <select 10568 id="Option-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025523618114-0" 10569 class="variant-select" 10570 name="options[Size]" 10571 form="product-form-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025523618114" 10572 data-index="option0" 10573 ><option 10574 value="5ml" 10575 selected="selected" 10576 > 10577 5ml 10578 </option><option 10579 value="1ml" 10580 10581 > 10582 1ml 10583 </option></select> 10584 </div> 10585 10586 </div><label for="ProductSelect-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025523618114" class="visually-hidden"> 10587 Choose variant for Blue Tansy Essential Oil 10588 </label> 10589 <select 10590 name="id" 10591 data-productid="8025523618114" 10592 id="ProductSelect-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025523618114" 10593 class="product-variants-select no-js-only" 10594 ><option 10595 value="44111212314946" 10596 selected="selected" 10597 10598 > 10599 5ml - $76.95 10600 </option><option 10601 value="52064222282095" 10602 10603 10604 > 10605 1ml - $18.95 10606 </option></select> 10607 10608 <div class="product-addtocart" id="AddToCartWrapper-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025523618114"> 10609 <input type="hidden" name="quantity" value="1"> 10610 10611 10612 <div class="visually-hidden" role="status" id="variant-status-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025523618114" aria-live="assertive"></div> 10613 10614 <span id="cart-action-desc-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025523618114" class="visually-hidden">Adds item to your shopping cart</span> 10615 10616 <button 10617 class="addtocart-btn add-to-cart" 10618 type="submit" 10619 name="add" 10620 aria-label="Add to Cart - Add Blue Tansy Essential Oil to cart" 10621 aria-describedby="cart-action-desc-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025523618114" 10622 id="AddToCart-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025523618114" 10623 10624 >
10625 <span id="AddToCartText-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025523618114">Add to Cart <i class="cart-icon" aria-hidden="true"></i></span> 10626 </button> 10627 </div><input type="hidden" name="product-id" value="8025523618114" /><input type="hidden" name="section-id" value="template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040" /></form><!-- END Variant Selection Form --></div>
10627<script type="application/ld+json"> 10628 { 10629 "@context": "http://schema.org/", 10630 "@type": "Product", 10631 "name": "Blue Tansy Essential Oil", 10632 "url": "https:\/\/www.rockymountainoils.com\/products\/blue-tansy-essential-oil","image": [ 10633 "https:\/\/www.rockymountainoils.com\/cdn\/shop\/files\/blue-tansy-essential-oil-5ml-1.jpg?v=1773761127\u0026width=473" 10634 ], 10635 "description": "Blue Tansy Essential Oil offers a unique, soothing aroma that can help create a serene environment. This rare oil, steam distilled from the flowers and leaves of the Blue Tansy plant native to Morocco, is prized for its potential skincare benefits and aromatic properties.\nWhen diffused, Blue Tansy's distinct scent may help promote a relaxing atmosphere and support emotional balance. Its natural properties make it a popular choice for those seeking to enhance their self-care routines or create a tranquil space for meditation and relaxation.","sku": "BLUMOR-S5", 10636 "brand": { 10637 "@type": "Brand", 10638 "name": "Rocky Mountain Oils" 10639 }, 10640 "offers": { 10641 "@type": "AggregateOffer", 10642 "availability": "http://schema.org/InStock", 10643 "priceCurrency": "USD", 10644 "highPrice": 76.95, 10645 "lowPrice": 18.95, 10646 "offerCount": 2, 10647 "offers": [{ 10648 "@type" : "Offer","sku": "BLUMOR-S5","gtin12": "053176175164","availability" : "http://schema.org/InStock", 10649 "price" : 76.95, 10650 "priceCurrency" : "USD", 10651 "priceValidUntil": "2026-12-31", 10652 "url" : "https:\/\/www.rockymountainoils.com\/products\/blue-tansy-essential-oil?variant=44111212314946" 10653 }, 10654{ 10655 "@type" : "Offer","sku": "BLUMOR-1ML","gtin12": "053176184791","availability" : "http://schema.org/InStock", 10656 "price" : 18.95, 10657 "priceCurrency" : "USD", 10658 "priceValidUntil": "2026-12-31", 10659 "url" : "https:\/\/www.rockymountainoils.com\/products\/blue-tansy-essential-oil?variant=52064222282095" 10660 } 10661] 10662 } 10663 } 10664 </script>
10664</div> 10665 10666<style> 10667/* Ensure visually-hidden utility exists even if theme lacks it */ 10668.visually-hidden { 10669 position: absolute !important; 10670 width: 1px !important; 10671 height: 1px !important; 10672 padding: 0 !important; 10673 margin: -1px !important; 10674 overflow: hidden !important; 10675 clip: rect(0, 0, 0, 0) !important; 10676 white-space: nowrap !important; 10677 border: 0 !important; 10678} 10679 10680/* Ensure the main product image is tappable on iOS */ 10681.main-product-image { 10682 cursor: pointer; 10683 -webkit-tap-highlight-color: rgba(0,0,0,0.05); 10684 touch-action: manipulation; 10685} 10686 10687/* ULTIMATE FIX - Override anything that hides select text */ 10688.product-variants-select, 10689.product-variants-select.no-js-only, 10690select.product-variants-select, 10691select[id*="ProductSelect-"] { 10692 color: #1a1a1a !important; 10693 opacity: 1 !important; 10694 background-color: #ffffff !important; 10695 -webkit-text-fill-color: #1a1a1a !important; 10696} 10697 10698.product-variants-select option, 10699select[id*="ProductSelect-"] option { 10700 color: #1a1a1a !important; 10701 background-color: #ffffff !important; 10702 -webkit-text-fill-color: #1a1a1a !important; 10703} 10704 10705.product-variants-select option:checked, 10706select[id*="ProductSelect-"] option:checked { 10707 color: #1a1a1a !important; 10708 background-color: #e8f0fe !important; 10709} 10710 10711.product-variants-select option:disabled, 10712select[id*="ProductSelect-"] option:disabled { 10713 color: #6c6c6c !important; 10714 background-color: #f5f5f5 !important; 10715 -webkit-text-fill-color: #6c6c6c !important; 10716 opacity: 1 !important; 10717} 10718 10719.product-variants-select:focus, 10720select[id*="ProductSelect-"]:focus { 10721 color: #1a1a1a !important; 10722 outline: 3px solid #000000ff !important; 10723} 10724</style> 10725 </div><div class="item"> 10726
10726<script> 10727(function() { 10728 class ProductCardVariantSelector { 10729 constructor(container) { 10730 this.container = container; 10731 if (!this.container) return; 10732 10733 this.form = this.container.querySelector('.product-form'); 10734 this.variantSelectors = this.container.querySelectorAll('.variant-select'); 10735 this.masterSelect = this.container.querySelector('.product-variants-select'); 10736 this.productImage = this.container.querySelector('.main-product-image'); 10737 this.priceWrapper = this.container.querySelector('[id^="ProductPrice-"]'); 10738 this.currentPriceElement = this.container.querySelector('[id^="CurrentPrice-"]'); 10739 this.comparePriceElement = this.container.querySelector('[id^="ComparePrice-"]'); 10740 this.addToCartButton = this.container.querySelector('[id^="AddToCart-"]'); 10741 this.addToCartText = this.container.querySelector('[id^="AddToCartText-"]'); 10742 this.notifyMeButton = this.container.querySelector('[id^="NotifyMe-"]'); 10743 this.variantsJsonScript = this.container.querySelector('[id^="VariantsJson-"]'); 10744 this.dataStore = this.container.querySelector('[id^="DataStore-"]'); 10745 this.saleTag = this.container.querySelector('.hc-sale-tag'); 10746 this.statusElement = this.container.querySelector('[id^="variant-status-"]'); 10747 10748 if (!this.masterSelect || !this.variantsJsonScript) return; 10749 10750 try { 10751 this.productVariants = JSON.parse(this.variantsJsonScript.textContent); 10752 } catch (e) { return; } 10753 10754 this.mainImageUrl = this.dataStore ? this.dataStore.dataset.mainImageUrl : null; 10755 this.productTitle = this.dataStore ? this.dataStore.dataset.productTitle : ''; 10756 10757 this.init(); 10758 } 10759 10760 init() { 10761 // --- iOS-safe image tap handling (works on iPhone 16, 17 Pro Max, etc.) --- 10762 if (this.productImage) { 10763 let touchStartX = 0, touchStartY = 0, touchMoved = false; 10764 let lastTouchTime = 0; 10765 10766 this.productImage.style.cursor = 'pointer'; 10767 this.productImage.setAttribute('role', 'button'); 10768 this.productImage.setAttribute('tabindex', '0'); 10769 10770 this.productImage.addEventListener('touchstart', (e) => { 10771 const t = e.touches[0]; 10772 touchStartX = t.clientX; 10773 touchStartY = t.clientY; 10774 touchMoved = false; 10775 }, { passive: true }); 10776 10777 this.productImage.addEventListener('touchmove', (e) => { 10778 const t = e.touches[0]; 10779 if (Math.abs(t.clientX - touchStartX) > 10 || 10780 Math.abs(t.clientY - touchStartY) > 10) { 10781 touchMoved = true; 10782 } 10783 }, { passive: true }); 10784 10785 this.productImage.addEventListener('touchend', (e) => { 10786 if (touchMoved) return; 10787 lastTouchTime = Date.now(); 10788 e.preventDefault(); 10789 this.onImageTap(e); 10790 }, { passive: false }); 10791 10792 // Desktop / non-touch fallback (with double-fire protection after touchend) 10793 this.productImage.addEventListener('click', (e) => { 10794 if (Date.now() - lastTouchTime < 500) return; 10795 this.onImageTap(e); 10796 }); 10797 10798 this.productImage.addEventListener('keydown', (e) => { 10799 if (e.key === 'Enter' || e.key === ' ') { 10800 e.preventDefault(); 10801 this.onImageTap(e); 10802 } 10803 }); 10804 } 10805 10806 // --- Variant select listeners --- 10807 if (this.variantSelectors.length > 0) { 10808 this.variantSelectors.forEach(select => { 10809 select.addEventListener('change', this.onVariantChange.bind(this)); 10810 }); 10811 this.updateProductDetails(this.getCurrentVariant()); 10812 } 10813 } 10814 10815 // ============================================================ 10816 // CHANGE THIS IF YOU WANT DIFFERENT TAP BEHAVIOR 10817 // Currently: navigates to the product page. 10818 // ============================================================ 10819 onImageTap(e) { 10820 const link = this.container.querySelector('.product-title-link'); 10821 if (link && link.href && link.href !== '#') { 10822 window.location.href = link.href; 10823 } 10824 } 10825 // ============================================================ 10826 10827 onVariantChange() { 10828 const selectedOptions = Array.from(this.variantSelectors).map(s => s.value); 10829 const matchedVariant = this.findMatchingVariant(selectedOptions); 10830 10831 if (matchedVariant) { 10832 this.masterSelect.value = matchedVariant.id; 10833 this.updateProductDetails(matchedVariant); 10834 if (this.statusElement) this.statusElement.textContent = ''; 10835 } else { 10836 if (this.statusElement) { 10837 this.statusElement.textContent = 'No available variant matches your selection'; 10838 } 10839 this.updateProductDetails(null); 10840 } 10841 } 10842 10843 findMatchingVariant(selectedOptions) { 10844 return this.productVariants.find(variant => { 10845 if (!variant.options || variant.options.length !== selectedOptions.length) return false;
10846 return selectedOptions.every((val, i) => variant.options[i] === val); 10847 }); 10848 } 10849 10850 getCurrentVariant() { 10851 if (!this.masterSelect) return null; 10852 const id = this.masterSelect.value; 10853 if (!id) return null; 10854 return this.productVariants.find(v => String(v.id) === String(id)) || null; 10855 } 10856 10857 // Shopify CDN: insert _WIDTHx before extension for a properly sized image 10858 sizedImageUrl(src, width) { 10859 if (!src) return src; 10860 return src.replace(/(\.[a-z]{3,4})(\?|$)/i, `_${width}x$1$2`); 10861 } 10862 10863 updateProductDetails(variant) { 10864 this.container.setAttribute('aria-busy', 'true'); 10865 10866 if (!variant) { 10867 if (this.addToCartButton) this.addToCartButton.disabled = true; 10868 if (this.addToCartText) this.addToCartText.textContent = 'Unavailable'; 10869 if (this.notifyMeButton) this.notifyMeButton.style.display = 'none'; 10870 if (this.priceWrapper) this.priceWrapper.classList.remove('sale'); 10871 if (this.comparePriceElement) this.comparePriceElement.style.display = 'none'; 10872 if (this.saleTag) this.saleTag.style.display = 'none'; 10873 this.container.setAttribute('aria-busy', 'false'); 10874 return; 10875 } 10876 10877 // 1. Image 10878 if (this.productImage) { 10879 if (variant.featured_image && variant.featured_image.src) { 10880 const sized = this.sizedImageUrl(variant.featured_image.src, 300); 10881 const variantOptions = variant.options ? variant.options.join(' - ') : ''; 10882 this.productImage.src = sized; 10883 this.productImage.srcset = ''; 10884 this.productImage.alt = variant.featured_image.alt 10885 ? variant.featured_image.alt 10886 : (this.productTitle + (variantOptions ? ' - ' + variantOptions : '')); 10887 } else if (this.mainImageUrl) { 10888 this.productImage.src = this.mainImageUrl; 10889 this.productImage.srcset = ''; 10890 this.productImage.alt = this.productTitle; 10891 } 10892 } 10893 10894 // 2. Price 10895 const moneyFormat = "${{amount}}"; 10896 const formatMoney = (cents, format) => { 10897 if (typeof cents === 'string') cents = cents.replace('.', ''); 10898 let value = ''; 10899 const placeholderRegex = /\{\{\s*(\w+)\s*\}\}/; 10900 const formatString = (format || moneyFormat).replace(/<[^>]*>/g, ''); 10901 10902 function formatWithDelimiters(number, precision, thousands, decimal) { 10903 precision = precision ?? 2; 10904 thousands = thousands ?? ','; 10905 decimal = decimal ?? '.'; 10906 if (isNaN(number) || number == null) return 0; 10907 number = (number / 100.0).toFixed(precision); 10908 const parts = number.split('.'); 10909 const dollars = parts[0].replace(/(\d)(?=(\d\d\d)+(?!\d))/g, '$1' + thousands); 10910 const centsPart = parts[1] ? (decimal + parts[1]) : ''; 10911 return dollars + centsPart; 10912 } 10913 10914 switch (formatString.match(placeholderRegex)?.[1]) { 10915 case 'amount': value = formatWithDelimiters(cents, 2); break; 10916 case 'amount_no_decimals': value = formatWithDelimiters(cents, 0); break; 10917 case 'amount_with_comma_separator': value = formatWithDelimiters(cents, 2, '.', ','); break; 10918 case 'amount_no_decimals_with_comma_separator': value = formatWithDelimiters(cents, 0, '.', ','); break; 10919 case 'amount_with_apostrophe_separator': value = formatWithDelimiters(cents, 2, "'", "."); break; 10920 case 'amount_no_decimals_with_space_separator': value = formatWithDelimiters(cents, 0, " ", ","); break; 10921 case 'amount_with_space_separator': value = formatWithDelimiters(cents, 2, " ", ","); break; 10922 default: value = formatWithDelimiters(cents, 2); 10923 } 10924 try { 10925 return formatString.replace(placeholderRegex, value); 10926 } catch (e) { 10927 const fallback = (cents / 100.0).toFixed(2); 10928 return formatString.includes('') 10929 ? formatString.replace(placeholderRegex, fallback) 10930 : fallback; 10931 } 10932 }; 10933 10934 if (this.currentPriceElement) { 10935 this.currentPriceElement.textContent = formatMoney(variant.price, moneyFormat); 10936 } 10937 if (this.comparePriceElement && this.priceWrapper) { 10938 if (variant.compare_at_price && variant.compare_at_price > variant.price) { 10939 this.comparePriceElement.textContent = formatMoney(variant.compare_at_price, moneyFormat); 10940 this.comparePriceElement.style.display = ''; 10941 this.priceWrapper.classList.add('sale'); 10942 } else { 10943 this.comparePriceElement.textContent = ''; 10944 this.comparePriceElement.style.display = 'none'; 10945 this.priceWrapper.classList.remove('sale'); 10946 } 10947 } 10948 10949 // 3. Sale tag 10950 if (this.saleTag) { 10951 const isDiscounted = variant.compare_at_price && variant.compare_at_price > variant.price; 10952 if (isDiscounted && variant.available) { 10953 this.saleTag.style.display = 'block'; 10954 const discount = Math.round((variant.compare_at_price - variant.price) * 100.0 / variant.compare_at_price); 10955 const span = this.saleTag.querySelector('span'); 10956 if (span) span.textContent = discount + '%'; 10957 this.saleTag.setAttribute('aria-label', 'Save ' + discount + '%'); 10958 this.saleTag.setAttribute('role', 'status'); 10959 } else { 10960 this.saleTag.style.display = 'none'; 10961 } 10962 } 10963 10964 // 4. Add to cart 10965 if (this.addToCartButton && this.addToCartText) { 10966 if (variant.available) { 10967 this.addToCartButton.disabled = false;
10968 this.addToCartText.innerHTML = 'Add to Cart <i class="cart-icon"></i>'; 10969 this.addToCartButton.setAttribute('aria-label', 'Add to Cart - Add ' + this.productTitle + ' to cart'); 10970 if (this.notifyMeButton) this.notifyMeButton.style.display = 'none'; 10971 } else { 10972 this.addToCartButton.disabled = true; 10973 this.addToCartText.textContent = 'Sold Out'; 10974 this.addToCartButton.setAttribute('aria-label', 'Sold Out - ' + this.productTitle + ' is sold out'); 10975 if (this.notifyMeButton) this.notifyMeButton.style.display = 'block'; 10976 } 10977 } 10978 if (this.notifyMeButton) { 10979 this.notifyMeButton.setAttribute('data-variant-id', variant.id); 10980 } 10981 10982 this.container.setAttribute('aria-busy', 'false'); 10983 } 10984 } 10985 10986 function initProductCards(root) { 10987 root = root || document; 10988 root.querySelectorAll('.product-card-wrapper[data-product-id]').forEach(cardContainer => { 10989 if (cardContainer.dataset.variantSelectorInit === 'true') return; 10990 cardContainer.dataset.variantSelectorInit = 'true'; 10991 new ProductCardVariantSelector(cardContainer); 10992 }); 10993 } 10994 10995 if (document.readyState === 'loading') { 10996 document.addEventListener('DOMContentLoaded', () => initProductCards()); 10997 } else { 10998 initProductCards(); 10999 } 11000 11001 document.addEventListener('shopify:section:load', (e) => initProductCards(e.target)); 11002})(); 11003</script>
11003<div class="product-card-wrapper" data-product-id="8025534529858" aria-busy="false"> 11004 11005 <div class="product-image" id="ProductImageWrapper-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025534529858"><!-- WISHLIST BUTTON --> 11006 <div class='xb-wishlist__btn-custom'> 11007 <div 11008 class='xb-wishlist__add' 11009 xb-product-id='8025534529858' 11010 xb-product-title='Neroli Essential Oil' 11011 xb-product-variant='44111301673282' 11012 xb-is-in-stock='true' 11013 xb-product-handle='neroli-essential-oil' 11014 > 11015 <button aria-label="Add Neroli Essential Oil to wishlist" aria-pressed="false"> 11016 <svg 11017 xmlns='http://www.w3.org/2000/svg' 11018 width='20' 11019 height='20' 11020 viewBox='0 0 24 24' 11021 fill='none' 11022 stroke='#FF4A71' 11023 stroke-width='2' 11024 stroke-linecap='round' 11025 stroke-linejoin='round' 11026 aria-hidden='true' 11027 focusable='false' 11028 > 11029 <path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"></path> 11030 </svg> 11031 </button> 11032 </div> 11033 11034 <div class="xb-wishlist__loading" xb-product-id="8025534529858"> 11035 <span class="loading-spinner"></span> 11036 </div> 11037 11038 <div class='xb-wishlist__remove' xb-product-id='8025534529858' xb-is-in-stock='true'> 11039 <button aria-label="Remove Neroli Essential Oil from wishlist" aria-pressed="true"> 11040 <svg 11041 xmlns='http://www.w3.org/2000/svg' 11042 width='20' 11043 height='20'
11044 viewBox='0 0 24 24' 11045 fill='#FF4A71' 11046 stroke='#FF4A71' 11047 stroke-width='2' 11048 stroke-linecap='round' 11049 stroke-linejoin='round' 11050 aria-hidden='true' 11051 focusable='false' 11052 > 11053 <path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"></path> 11054 </svg> 11055 </button> 11056 </div> 11057 </div><img 11058 id="ProductImage-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025534529858" 11059 class="main-product-image" 11060 src="//www.rockymountainoils.com/cdn/shop/files/neroli-essential-oil-5ml.jpg?crop=center&height=300&v=1773761091&width=300" 11061 alt="Neroli Essential Oil 5ml" 11062 width="300" 11063 height="300" 11064 loading="lazy" 11065 /></div> 11066 11067 <div class="product-content"> 11068 <div class="product-title"> 11069 <a href="/products/neroli-essential-oil" class="product-title-link" aria-label="View Neroli Essential Oil"> 11070 <h2>Neroli Essential Oil</h2> 11071 </a> 11072 </div><div> 11073 <div class="product-subtitle"> 11074 Floral scent; kid-safe, boosts mood, anti-aging. 11075 </div> 11076 </div><div class="yotpo-widget-instance" data-yotpo-instance-id="503375" data-yotpo-product-id="8025534529858" data-yotpo-cart-product-id="" data-yotpo-section-id="index"></div><!-- START Variant Selection Form --> 11077 <div class="product-data-store" style="display:none;" 11078 data-main-image-url="//www.rockymountainoils.com/cdn/shop/files/neroli-essential-oil-5ml.jpg?v=1773761091&width=300" 11079 data-product-title="Neroli Essential Oil" 11080 id="DataStore-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025534529858"> 11081 </div> 11082 11083
11083<script id="VariantsJson-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025534529858" type="application/json"> 11084 [{"id":44111301673282,"title":"5ml","option1":"5ml","option2":null,"option3":null,"sku":"NERTUN-S5","requires_shipping":true,"taxable":true,"featured_image":{"id":44306699419970,"product_id":8025534529858,"position":1,"created_at":"2024-03-01T11:31:13-07:00","updated_at":"2026-03-17T09:24:51-06:00","alt":"Neroli Essential Oil 5ml","width":583,"height":583,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/neroli-essential-oil-5ml.jpg?v=1773761091","variant_ids":[44111301673282]},"available":true,"name":"Neroli Essential Oil - 5ml","public_title":"5ml","options":["5ml"],"price":8595,"weight":28,"compare_at_price":null,"inventory_management":"shopify","barcode":"053176176284","featured_media":{"alt":"Neroli Essential Oil 5ml","id":36784917283138,"position":1,"preview_image":{"aspect_ratio":1.0,"height":583,"width":583,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/neroli-essential-oil-5ml.jpg?v=1773761091"}},"requires_selling_plan":false,"selling_plan_allocations":[{"price_adjustments":[{"position":1,"price":6017}],"price":6017,"compare_at_price":8595,"per_delivery_price":6017,"selling_plan_id":691785924975,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":7306},{"position":2,"price":6876}],"price":7306,"compare_at_price":8595,"per_delivery_price":7306,"selling_plan_id":691785957743,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":7736},{"position":2,"price":7306}],"price":7736,"compare_at_price":8595,"per_delivery_price":7736,"selling_plan_id":691785990511,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":8165},{"position":2,"price":7736}],"price":8165,"compare_at_price":8595,"per_delivery_price":8165,"selling_plan_id":691786023279,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":7736},{"position":2,"price":7306}],"price":7736,"compare_at_price":8595,"per_delivery_price":7736,"selling_plan_id":691786088815,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":8165},{"position":2,"price":7736}],"price":8165,"compare_at_price":8595,"per_delivery_price":8165,"selling_plan_id":691786121583,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":7306},{"position":2,"price":6876}],"price":7306,"compare_at_price":8595,"per_delivery_price":7306,"selling_plan_id":691795362159,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":7736},{"position":2,"price":7306}],"price":7736,"compare_at_price":8595,"per_delivery_price":7736,"selling_plan_id":691795394927,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":8165},{"position":2,"price":7736}],"price":8165,"compare_at_price":8595,"per_delivery_price":8165,"selling_plan_id":691795427695,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"}],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":52064228901231,"title":"1ml","option1":"1ml","option2":null,"option3":null,"sku":"NERTUN-1ML","requires_shipping":true,"taxable":true,"featured_image":{"id":60328905310575,"product_id":8025534529858,"position":4,"created_at":"2025-06-30T23:42:28-06:00","updated_at":"2026-03-17T09:24:51-06:00","alt":"Small brown bottle with a black cap and yellow label of Neroli essential oil on a white background, with 'LIMITED TIME ONLY!' text above.","width":1080,"height":1080,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/Neroli_1ml.webp?v=1773761091","variant_ids":[52064228901231]},"available":false,"name":"Neroli Essential Oil - 1ml","public_title":"1ml","options":["1ml"],"price":1795,"weight":28,"compare_at_price":null,"inventory_management":"shopify","barcode":"053176184821","featured_media":{"alt":"Small brown bottle with a black cap and yellow label of Neroli essential oil on a white background, with 'LIMITED TIME ONLY!' text above.","id":51984786030959,"position":4,"preview_image":{"aspect_ratio":1.0,"height":1080,"width":1080,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/Neroli_1ml.webp?v=1773761091"}},"requires_selling_plan":false,"selling_plan_allocations":[{"price_adjustments":[{"position":1,"price":1257}],"price":1257,"compare_at_price":1795,"per_delivery_price":1257,"selling_plan_id":691785924975,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":1526},{"position":2,"price":1436}],"price":1526,"compare_at_price":1795,"per_delivery_price":1526,"selling_plan_id":691785957743,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":1616},{"position":2,"price":1526}],"price":1616,"compare_at_price":1795,"per_delivery_price":1616,"selling_plan_id":691785990511,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":1705},{"position":2,"price":1616}],"price":1705,"compare_at_price":1795,"per_delivery_price":1705,"selling_plan_id":691786023279,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":1616},{"position":2,"price":1526}],"price":1616,"compare_at_price":1795,"per_delivery_price":1616,"selling_plan_id":691786088815,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":1705},{"position":2,"price":1616}],"price":1705,"compare_at_price":1795,"per_delivery_price":1705,"selling_plan_id":691786121583,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":1526},{"position":2,"price":1436}],"price":1526,"compare_at_price":1795,"per_delivery_price":1526,"selling_plan_id":691795362159,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":1616},{"position":2,"price":1526}],"price":1616,"compare_at_price":1795,"per_delivery_price":1616,"selling_plan_id":691795394927,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":1705},{"position":2,"price":1616}],"price":1705,"compare_at_price":1795,"per_delivery_price":1705,"selling_plan_id":691795427695,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"}],"quantity_rule":{"min":1,"max":null,"increment":1}}] 11085 </script>
11085<form method="post" action="/cart/add" id="product-form-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025534529858" accept-charset="UTF-8" class="product-variants product-form" enctype="multipart/form-data" data-productid="8025534529858" novalidate="novalidate" data-type="add-to-cart-form"><input type="hidden" name="form_type" value="product" /><input type="hidden" name="utf8" value="â" /><div class="product-price-option"> 11086 <div class="product-price" id="ProductPrice-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025534529858" aria-live="polite" aria-atomic="true"> 11087 <span class="compare-at-price" id="ComparePrice-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025534529858" style="display: none;"></span> 11088 <span class="current-price" id="CurrentPrice-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025534529858">$85.95</span> 11089 11090 11091 </div> 11092 11093 11094 <div class="product-option"> 11095 <label for="Option-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025534529858-0" class="visually-hidden"> 11096 Select Size for Neroli Essential Oil 11097 </label> 11098 <select 11099 id="Option-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025534529858-0" 11100 class="variant-select" 11101 name="options[Size]" 11102 form="product-form-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025534529858" 11103 data-index="option0" 11104 ><option 11105 value="5ml" 11106 selected="selected" 11107 > 11108 5ml 11109 </option><option 11110 value="1ml" 11111 11112 > 11113 1ml 11114 </option></select> 11115 </div> 11116 11117 </div><label for="ProductSelect-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025534529858" class="visually-hidden"> 11118 Choose variant for Neroli Essential Oil 11119 </label> 11120 <select 11121 name="id" 11122 data-productid="8025534529858" 11123 id="ProductSelect-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025534529858" 11124 class="product-variants-select no-js-only" 11125 ><option 11126 value="44111301673282" 11127 selected="selected" 11128 11129 > 11130 5ml - $85.95 11131 </option><option 11132 value="52064228901231" 11133 11134 disabled="disabled" 11135 > 11136 1ml - $17.95 - Sold Out 11137 </option></select> 11138 11139 <div class="product-addtocart" id="AddToCartWrapper-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025534529858"> 11140 <input type="hidden" name="quantity" value="1"> 11141 11142 11143 <div class="visually-hidden" role="status" id="variant-status-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025534529858" aria-live="assertive"></div> 11144 11145 <span id="cart-action-desc-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025534529858" class="visually-hidden">Adds item to your shopping cart</span> 11146 11147 <button 11148 class="addtocart-btn add-to-cart" 11149 type="submit" 11150 name="add" 11151 aria-label="Add to Cart - Add Neroli Essential Oil to cart" 11152 aria-describedby="cart-action-desc-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025534529858" 11153 id="AddToCart-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025534529858" 11154 11155 >
11156 <span id="AddToCartText-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025534529858">Add to Cart <i class="cart-icon" aria-hidden="true"></i></span> 11157 </button> 11158 </div><input type="hidden" name="product-id" value="8025534529858" /><input type="hidden" name="section-id" value="template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040" /></form><!-- END Variant Selection Form --></div>
11158<script type="application/ld+json"> 11159 { 11160 "@context": "http://schema.org/", 11161 "@type": "Product", 11162 "name": "Neroli Essential Oil", 11163 "url": "https:\/\/www.rockymountainoils.com\/products\/neroli-essential-oil","image": [ 11164 "https:\/\/www.rockymountainoils.com\/cdn\/shop\/files\/neroli-essential-oil-5ml.jpg?v=1773761091\u0026width=583" 11165 ], 11166 "description": "Neroli Essential Oil offers a delightful blend of sweet floral and citrus notes with a hint of herbaceous warmth. Derived from the blossoms of the bitter orange tree, this luxurious oil is prized for its ability to uplift mood and promote a sense of calm. Neroli Essential Oil may help soothe the mind and support emotional well-being.\nKnown for its skin-nourishing properties, Neroli Essential Oil is popular in natural skincare routines. It may help improve the appearance of skin texture and tone when used regularly. The gentle, refreshing scent of Neroli Essential Oil can create a peaceful atmosphere in any space.","sku": "NERTUN-S5", 11167 "brand": { 11168 "@type": "Brand", 11169 "name": "Rocky Mountain Oils" 11170 }, 11171 "offers": { 11172 "@type": "AggregateOffer", 11173 "availability": "http://schema.org/InStock", 11174 "priceCurrency": "USD", 11175 "highPrice": 85.95, 11176 "lowPrice": 17.95, 11177 "offerCount": 2, 11178 "offers": [{ 11179 "@type" : "Offer","sku": "NERTUN-S5","gtin12": "053176176284","availability" : "http://schema.org/InStock", 11180 "price" : 85.95, 11181 "priceCurrency" : "USD", 11182 "priceValidUntil": "2026-12-31", 11183 "url" : "https:\/\/www.rockymountainoils.com\/products\/neroli-essential-oil?variant=44111301673282" 11184 }, 11185{ 11186 "@type" : "Offer","sku": "NERTUN-1ML","gtin12": "053176184821","availability" : "http://schema.org/OutOfStock", 11187 "price" : 17.95, 11188 "priceCurrency" : "USD", 11189 "priceValidUntil": "2026-12-31", 11190 "url" : "https:\/\/www.rockymountainoils.com\/products\/neroli-essential-oil?variant=52064228901231" 11191 } 11192] 11193 } 11194 } 11195 </script>
11195</div> 11196 11197<style> 11198/* Ensure visually-hidden utility exists even if theme lacks it */ 11199.visually-hidden { 11200 position: absolute !important; 11201 width: 1px !important; 11202 height: 1px !important; 11203 padding: 0 !important; 11204 margin: -1px !important; 11205 overflow: hidden !important; 11206 clip: rect(0, 0, 0, 0) !important; 11207 white-space: nowrap !important; 11208 border: 0 !important; 11209} 11210 11211/* Ensure the main product image is tappable on iOS */ 11212.main-product-image { 11213 cursor: pointer; 11214 -webkit-tap-highlight-color: rgba(0,0,0,0.05); 11215 touch-action: manipulation; 11216} 11217 11218/* ULTIMATE FIX - Override anything that hides select text */ 11219.product-variants-select, 11220.product-variants-select.no-js-only, 11221select.product-variants-select, 11222select[id*="ProductSelect-"] { 11223 color: #1a1a1a !important; 11224 opacity: 1 !important; 11225 background-color: #ffffff !important; 11226 -webkit-text-fill-color: #1a1a1a !important; 11227} 11228 11229.product-variants-select option, 11230select[id*="ProductSelect-"] option { 11231 color: #1a1a1a !important; 11232 background-color: #ffffff !important; 11233 -webkit-text-fill-color: #1a1a1a !important; 11234} 11235 11236.product-variants-select option:checked, 11237select[id*="ProductSelect-"] option:checked { 11238 color: #1a1a1a !important; 11239 background-color: #e8f0fe !important; 11240} 11241 11242.product-variants-select option:disabled, 11243select[id*="ProductSelect-"] option:disabled { 11244 color: #6c6c6c !important; 11245 background-color: #f5f5f5 !important; 11246 -webkit-text-fill-color: #6c6c6c !important; 11247 opacity: 1 !important; 11248} 11249 11250.product-variants-select:focus, 11251select[id*="ProductSelect-"]:focus { 11252 color: #1a1a1a !important; 11253 outline: 3px solid #000000ff !important; 11254} 11255</style> 11256 </div><div class="item"> 11257
11257<script> 11258(function() { 11259 class ProductCardVariantSelector { 11260 constructor(container) { 11261 this.container = container; 11262 if (!this.container) return; 11263 11264 this.form = this.container.querySelector('.product-form'); 11265 this.variantSelectors = this.container.querySelectorAll('.variant-select'); 11266 this.masterSelect = this.container.querySelector('.product-variants-select'); 11267 this.productImage = this.container.querySelector('.main-product-image'); 11268 this.priceWrapper = this.container.querySelector('[id^="ProductPrice-"]'); 11269 this.currentPriceElement = this.container.querySelector('[id^="CurrentPrice-"]'); 11270 this.comparePriceElement = this.container.querySelector('[id^="ComparePrice-"]'); 11271 this.addToCartButton = this.container.querySelector('[id^="AddToCart-"]'); 11272 this.addToCartText = this.container.querySelector('[id^="AddToCartText-"]'); 11273 this.notifyMeButton = this.container.querySelector('[id^="NotifyMe-"]'); 11274 this.variantsJsonScript = this.container.querySelector('[id^="VariantsJson-"]'); 11275 this.dataStore = this.container.querySelector('[id^="DataStore-"]'); 11276 this.saleTag = this.container.querySelector('.hc-sale-tag'); 11277 this.statusElement = this.container.querySelector('[id^="variant-status-"]'); 11278 11279 if (!this.masterSelect || !this.variantsJsonScript) return; 11280 11281 try { 11282 this.productVariants = JSON.parse(this.variantsJsonScript.textContent); 11283 } catch (e) { return; } 11284 11285 this.mainImageUrl = this.dataStore ? this.dataStore.dataset.mainImageUrl : null; 11286 this.productTitle = this.dataStore ? this.dataStore.dataset.productTitle : ''; 11287 11288 this.init(); 11289 } 11290 11291 init() { 11292 // --- iOS-safe image tap handling (works on iPhone 16, 17 Pro Max, etc.) --- 11293 if (this.productImage) { 11294 let touchStartX = 0, touchStartY = 0, touchMoved = false; 11295 let lastTouchTime = 0; 11296 11297 this.productImage.style.cursor = 'pointer'; 11298 this.productImage.setAttribute('role', 'button'); 11299 this.productImage.setAttribute('tabindex', '0'); 11300 11301 this.productImage.addEventListener('touchstart', (e) => { 11302 const t = e.touches[0]; 11303 touchStartX = t.clientX; 11304 touchStartY = t.clientY; 11305 touchMoved = false; 11306 }, { passive: true }); 11307 11308 this.productImage.addEventListener('touchmove', (e) => { 11309 const t = e.touches[0]; 11310 if (Math.abs(t.clientX - touchStartX) > 10 || 11311 Math.abs(t.clientY - touchStartY) > 10) { 11312 touchMoved = true; 11313 } 11314 }, { passive: true }); 11315 11316 this.productImage.addEventListener('touchend', (e) => { 11317 if (touchMoved) return; 11318 lastTouchTime = Date.now(); 11319 e.preventDefault(); 11320 this.onImageTap(e); 11321 }, { passive: false }); 11322 11323 // Desktop / non-touch fallback (with double-fire protection after touchend) 11324 this.productImage.addEventListener('click', (e) => { 11325 if (Date.now() - lastTouchTime < 500) return; 11326 this.onImageTap(e); 11327 }); 11328 11329 this.productImage.addEventListener('keydown', (e) => { 11330 if (e.key === 'Enter' || e.key === ' ') { 11331 e.preventDefault(); 11332 this.onImageTap(e); 11333 } 11334 }); 11335 } 11336 11337 // --- Variant select listeners --- 11338 if (this.variantSelectors.length > 0) { 11339 this.variantSelectors.forEach(select => { 11340 select.addEventListener('change', this.onVariantChange.bind(this)); 11341 }); 11342 this.updateProductDetails(this.getCurrentVariant()); 11343 } 11344 } 11345 11346 // ============================================================ 11347 // CHANGE THIS IF YOU WANT DIFFERENT TAP BEHAVIOR 11348 // Currently: navigates to the product page. 11349 // ============================================================ 11350 onImageTap(e) { 11351 const link = this.container.querySelector('.product-title-link'); 11352 if (link && link.href && link.href !== '#') { 11353 window.location.href = link.href; 11354 } 11355 } 11356 // ============================================================ 11357 11358 onVariantChange() { 11359 const selectedOptions = Array.from(this.variantSelectors).map(s => s.value); 11360 const matchedVariant = this.findMatchingVariant(selectedOptions); 11361 11362 if (matchedVariant) { 11363 this.masterSelect.value = matchedVariant.id; 11364 this.updateProductDetails(matchedVariant); 11365 if (this.statusElement) this.statusElement.textContent = ''; 11366 } else { 11367 if (this.statusElement) { 11368 this.statusElement.textContent = 'No available variant matches your selection'; 11369 } 11370 this.updateProductDetails(null); 11371 } 11372 } 11373 11374 findMatchingVariant(selectedOptions) { 11375 return this.productVariants.find(variant => { 11376 if (!variant.options || variant.options.length !== selectedOptions.length) return false;
11377 return selectedOptions.every((val, i) => variant.options[i] === val); 11378 }); 11379 } 11380 11381 getCurrentVariant() { 11382 if (!this.masterSelect) return null; 11383 const id = this.masterSelect.value; 11384 if (!id) return null; 11385 return this.productVariants.find(v => String(v.id) === String(id)) || null; 11386 } 11387 11388 // Shopify CDN: insert _WIDTHx before extension for a properly sized image 11389 sizedImageUrl(src, width) { 11390 if (!src) return src; 11391 return src.replace(/(\.[a-z]{3,4})(\?|$)/i, `_${width}x$1$2`); 11392 } 11393 11394 updateProductDetails(variant) { 11395 this.container.setAttribute('aria-busy', 'true'); 11396 11397 if (!variant) { 11398 if (this.addToCartButton) this.addToCartButton.disabled = true; 11399 if (this.addToCartText) this.addToCartText.textContent = 'Unavailable'; 11400 if (this.notifyMeButton) this.notifyMeButton.style.display = 'none'; 11401 if (this.priceWrapper) this.priceWrapper.classList.remove('sale'); 11402 if (this.comparePriceElement) this.comparePriceElement.style.display = 'none'; 11403 if (this.saleTag) this.saleTag.style.display = 'none'; 11404 this.container.setAttribute('aria-busy', 'false'); 11405 return; 11406 } 11407 11408 // 1. Image 11409 if (this.productImage) { 11410 if (variant.featured_image && variant.featured_image.src) { 11411 const sized = this.sizedImageUrl(variant.featured_image.src, 300); 11412 const variantOptions = variant.options ? variant.options.join(' - ') : ''; 11413 this.productImage.src = sized; 11414 this.productImage.srcset = ''; 11415 this.productImage.alt = variant.featured_image.alt 11416 ? variant.featured_image.alt 11417 : (this.productTitle + (variantOptions ? ' - ' + variantOptions : '')); 11418 } else if (this.mainImageUrl) { 11419 this.productImage.src = this.mainImageUrl; 11420 this.productImage.srcset = ''; 11421 this.productImage.alt = this.productTitle; 11422 } 11423 } 11424 11425 // 2. Price 11426 const moneyFormat = "${{amount}}"; 11427 const formatMoney = (cents, format) => { 11428 if (typeof cents === 'string') cents = cents.replace('.', ''); 11429 let value = ''; 11430 const placeholderRegex = /\{\{\s*(\w+)\s*\}\}/; 11431 const formatString = (format || moneyFormat).replace(/<[^>]*>/g, ''); 11432 11433 function formatWithDelimiters(number, precision, thousands, decimal) { 11434 precision = precision ?? 2; 11435 thousands = thousands ?? ','; 11436 decimal = decimal ?? '.'; 11437 if (isNaN(number) || number == null) return 0; 11438 number = (number / 100.0).toFixed(precision); 11439 const parts = number.split('.'); 11440 const dollars = parts[0].replace(/(\d)(?=(\d\d\d)+(?!\d))/g, '$1' + thousands); 11441 const centsPart = parts[1] ? (decimal + parts[1]) : ''; 11442 return dollars + centsPart; 11443 } 11444 11445 switch (formatString.match(placeholderRegex)?.[1]) { 11446 case 'amount': value = formatWithDelimiters(cents, 2); break; 11447 case 'amount_no_decimals': value = formatWithDelimiters(cents, 0); break; 11448 case 'amount_with_comma_separator': value = formatWithDelimiters(cents, 2, '.', ','); break; 11449 case 'amount_no_decimals_with_comma_separator': value = formatWithDelimiters(cents, 0, '.', ','); break; 11450 case 'amount_with_apostrophe_separator': value = formatWithDelimiters(cents, 2, "'", "."); break; 11451 case 'amount_no_decimals_with_space_separator': value = formatWithDelimiters(cents, 0, " ", ","); break; 11452 case 'amount_with_space_separator': value = formatWithDelimiters(cents, 2, " ", ","); break; 11453 default: value = formatWithDelimiters(cents, 2); 11454 } 11455 try { 11456 return formatString.replace(placeholderRegex, value); 11457 } catch (e) { 11458 const fallback = (cents / 100.0).toFixed(2); 11459 return formatString.includes('') 11460 ? formatString.replace(placeholderRegex, fallback) 11461 : fallback; 11462 } 11463 }; 11464 11465 if (this.currentPriceElement) { 11466 this.currentPriceElement.textContent = formatMoney(variant.price, moneyFormat); 11467 } 11468 if (this.comparePriceElement && this.priceWrapper) { 11469 if (variant.compare_at_price && variant.compare_at_price > variant.price) { 11470 this.comparePriceElement.textContent = formatMoney(variant.compare_at_price, moneyFormat); 11471 this.comparePriceElement.style.display = ''; 11472 this.priceWrapper.classList.add('sale'); 11473 } else { 11474 this.comparePriceElement.textContent = ''; 11475 this.comparePriceElement.style.display = 'none'; 11476 this.priceWrapper.classList.remove('sale'); 11477 } 11478 } 11479 11480 // 3. Sale tag 11481 if (this.saleTag) { 11482 const isDiscounted = variant.compare_at_price && variant.compare_at_price > variant.price; 11483 if (isDiscounted && variant.available) { 11484 this.saleTag.style.display = 'block'; 11485 const discount = Math.round((variant.compare_at_price - variant.price) * 100.0 / variant.compare_at_price); 11486 const span = this.saleTag.querySelector('span'); 11487 if (span) span.textContent = discount + '%'; 11488 this.saleTag.setAttribute('aria-label', 'Save ' + discount + '%'); 11489 this.saleTag.setAttribute('role', 'status'); 11490 } else { 11491 this.saleTag.style.display = 'none'; 11492 } 11493 } 11494 11495 // 4. Add to cart 11496 if (this.addToCartButton && this.addToCartText) { 11497 if (variant.available) { 11498 this.addToCartButton.disabled = false;
11499 this.addToCartText.innerHTML = 'Add to Cart <i class="cart-icon"></i>'; 11500 this.addToCartButton.setAttribute('aria-label', 'Add to Cart - Add ' + this.productTitle + ' to cart'); 11501 if (this.notifyMeButton) this.notifyMeButton.style.display = 'none'; 11502 } else { 11503 this.addToCartButton.disabled = true; 11504 this.addToCartText.textContent = 'Sold Out'; 11505 this.addToCartButton.setAttribute('aria-label', 'Sold Out - ' + this.productTitle + ' is sold out'); 11506 if (this.notifyMeButton) this.notifyMeButton.style.display = 'block'; 11507 } 11508 } 11509 if (this.notifyMeButton) { 11510 this.notifyMeButton.setAttribute('data-variant-id', variant.id); 11511 } 11512 11513 this.container.setAttribute('aria-busy', 'false'); 11514 } 11515 } 11516 11517 function initProductCards(root) { 11518 root = root || document; 11519 root.querySelectorAll('.product-card-wrapper[data-product-id]').forEach(cardContainer => { 11520 if (cardContainer.dataset.variantSelectorInit === 'true') return; 11521 cardContainer.dataset.variantSelectorInit = 'true'; 11522 new ProductCardVariantSelector(cardContainer); 11523 }); 11524 } 11525 11526 if (document.readyState === 'loading') { 11527 document.addEventListener('DOMContentLoaded', () => initProductCards()); 11528 } else { 11529 initProductCards(); 11530 } 11531 11532 document.addEventListener('shopify:section:load', (e) => initProductCards(e.target)); 11533})(); 11534</script>
11534<div class="product-card-wrapper" data-product-id="8025533776194" aria-busy="false"> 11535 11536 <div class="product-image" id="ProductImageWrapper-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025533776194"><!-- WISHLIST BUTTON --> 11537 <div class='xb-wishlist__btn-custom'> 11538 <div 11539 class='xb-wishlist__add' 11540 xb-product-id='8025533776194' 11541 xb-product-title='Melissa Essential Oil' 11542 xb-product-variant='44111294955842' 11543 xb-is-in-stock='true' 11544 xb-product-handle='melissa-essential-oil' 11545 > 11546 <button aria-label="Add Melissa Essential Oil to wishlist" aria-pressed="false"> 11547 <svg 11548 xmlns='http://www.w3.org/2000/svg' 11549 width='20' 11550 height='20' 11551 viewBox='0 0 24 24' 11552 fill='none' 11553 stroke='#FF4A71' 11554 stroke-width='2' 11555 stroke-linecap='round' 11556 stroke-linejoin='round' 11557 aria-hidden='true' 11558 focusable='false' 11559 > 11560 <path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"></path> 11561 </svg> 11562 </button> 11563 </div> 11564 11565 <div class="xb-wishlist__loading" xb-product-id="8025533776194"> 11566 <span class="loading-spinner"></span> 11567 </div> 11568 11569 <div class='xb-wishlist__remove' xb-product-id='8025533776194' xb-is-in-stock='true'> 11570 <button aria-label="Remove Melissa Essential Oil from wishlist" aria-pressed="true"> 11571 <svg 11572 xmlns='http://www.w3.org/2000/svg' 11573 width='20' 11574 height='20'
11575 viewBox='0 0 24 24' 11576 fill='#FF4A71' 11577 stroke='#FF4A71' 11578 stroke-width='2' 11579 stroke-linecap='round' 11580 stroke-linejoin='round' 11581 aria-hidden='true' 11582 focusable='false' 11583 > 11584 <path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"></path> 11585 </svg> 11586 </button> 11587 </div> 11588 </div><img 11589 id="ProductImage-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025533776194" 11590 class="main-product-image" 11591 src="//www.rockymountainoils.com/cdn/shop/files/melissa-essential-oil-5ml-1.jpg?crop=center&height=300&v=1764659300&width=300" 11592 alt="Melissa Essential Oil, 5ml, Rocky Mountain Oils" 11593 width="300" 11594 height="300" 11595 loading="lazy" 11596 /></div> 11597 11598 <div class="product-content"> 11599 <div class="product-title"> 11600 <a href="/products/melissa-essential-oil" class="product-title-link" aria-label="View Melissa Essential Oil"> 11601 <h2>Melissa Essential Oil</h2> 11602 </a> 11603 </div><div> 11604 <div class="product-subtitle"> 11605 Herbaceous, citrusy, sweet; helps with acne, psoriasis & eczema. 11606 </div> 11607 </div><div class="yotpo-widget-instance" data-yotpo-instance-id="503375" data-yotpo-product-id="8025533776194" data-yotpo-cart-product-id="" data-yotpo-section-id="index"></div><!-- START Variant Selection Form --> 11608 <div class="product-data-store" style="display:none;" 11609 data-main-image-url="//www.rockymountainoils.com/cdn/shop/files/melissa-essential-oil-5ml-1.jpg?v=1764659300&width=300" 11610 data-product-title="Melissa Essential Oil" 11611 id="DataStore-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025533776194"> 11612 </div> 11613 11614
11614<script id="VariantsJson-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025533776194" type="application/json"> 11615 [{"id":44111294955842,"title":"5ml","option1":"5ml","option2":null,"option3":null,"sku":"MELFRA-S5","requires_shipping":true,"taxable":true,"featured_image":{"id":44306593481026,"product_id":8025533776194,"position":1,"created_at":"2024-03-01T11:22:31-07:00","updated_at":"2025-12-02T00:08:20-07:00","alt":"Melissa Essential Oil, 5ml, Rocky Mountain Oils","width":540,"height":540,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/melissa-essential-oil-5ml-1.jpg?v=1764659300","variant_ids":[44111294955842]},"available":true,"name":"Melissa Essential Oil - 5ml","public_title":"5ml","options":["5ml"],"price":10895,"weight":28,"compare_at_price":null,"inventory_management":"shopify","barcode":"053176176185","featured_media":{"alt":"Melissa Essential Oil, 5ml, Rocky Mountain Oils","id":36784810950978,"position":1,"preview_image":{"aspect_ratio":1.0,"height":540,"width":540,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/melissa-essential-oil-5ml-1.jpg?v=1764659300"}},"requires_selling_plan":false,"selling_plan_allocations":[{"price_adjustments":[{"position":1,"price":7627}],"price":7627,"compare_at_price":10895,"per_delivery_price":7627,"selling_plan_id":691785924975,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":9261},{"position":2,"price":8716}],"price":9261,"compare_at_price":10895,"per_delivery_price":9261,"selling_plan_id":691785957743,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":9806},{"position":2,"price":9261}],"price":9806,"compare_at_price":10895,"per_delivery_price":9806,"selling_plan_id":691785990511,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":10350},{"position":2,"price":9806}],"price":10350,"compare_at_price":10895,"per_delivery_price":10350,"selling_plan_id":691786023279,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":9806},{"position":2,"price":9261}],"price":9806,"compare_at_price":10895,"per_delivery_price":9806,"selling_plan_id":691786088815,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":10350},{"position":2,"price":9806}],"price":10350,"compare_at_price":10895,"per_delivery_price":10350,"selling_plan_id":691786121583,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":9261},{"position":2,"price":8716}],"price":9261,"compare_at_price":10895,"per_delivery_price":9261,"selling_plan_id":691795362159,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":9806},{"position":2,"price":9261}],"price":9806,"compare_at_price":10895,"per_delivery_price":9806,"selling_plan_id":691795394927,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":10350},{"position":2,"price":9806}],"price":10350,"compare_at_price":10895,"per_delivery_price":10350,"selling_plan_id":691795427695,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"}],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":52064234307951,"title":"1ml","option1":"1ml","option2":null,"option3":null,"sku":"MELFRA-1ML","requires_shipping":true,"taxable":true,"featured_image":{"id":60328909111663,"product_id":8025533776194,"position":2,"created_at":"2025-06-30T23:44:10-06:00","updated_at":"2025-12-02T00:08:20-07:00","alt":"Small brown bottle with a black cap of Melissa essential oil on a white background, featuring a 'LIMITED TIME ONLY!' banner above.","width":1080,"height":1080,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/Melissa_1ml.webp?v=1764659300","variant_ids":[52064234307951]},"available":true,"name":"Melissa Essential Oil - 1ml","public_title":"1ml","options":["1ml"],"price":2195,"weight":28,"compare_at_price":null,"inventory_management":"shopify","barcode":"053176184807","featured_media":{"alt":"Small brown bottle with a black cap of Melissa essential oil on a white background, featuring a 'LIMITED TIME ONLY!' banner above.","id":51984789668207,"position":2,"preview_image":{"aspect_ratio":1.0,"height":1080,"width":1080,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/Melissa_1ml.webp?v=1764659300"}},"requires_selling_plan":false,"selling_plan_allocations":[{"price_adjustments":[{"position":1,"price":1537}],"price":1537,"compare_at_price":2195,"per_delivery_price":1537,"selling_plan_id":691785924975,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":1866},{"position":2,"price":1756}],"price":1866,"compare_at_price":2195,"per_delivery_price":1866,"selling_plan_id":691785957743,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":1976},{"position":2,"price":1866}],"price":1976,"compare_at_price":2195,"per_delivery_price":1976,"selling_plan_id":691785990511,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":2085},{"position":2,"price":1976}],"price":2085,"compare_at_price":2195,"per_delivery_price":2085,"selling_plan_id":691786023279,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":1976},{"position":2,"price":1866}],"price":1976,"compare_at_price":2195,"per_delivery_price":1976,"selling_plan_id":691786088815,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":2085},{"position":2,"price":1976}],"price":2085,"compare_at_price":2195,"per_delivery_price":2085,"selling_plan_id":691786121583,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":1866},{"position":2,"price":1756}],"price":1866,"compare_at_price":2195,"per_delivery_price":1866,"selling_plan_id":691795362159,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":1976},{"position":2,"price":1866}],"price":1976,"compare_at_price":2195,"per_delivery_price":1976,"selling_plan_id":691795394927,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":2085},{"position":2,"price":1976}],"price":2085,"compare_at_price":2195,"per_delivery_price":2085,"selling_plan_id":691795427695,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"}],"quantity_rule":{"min":1,"max":null,"increment":1}}] 11616 </script>
11616<form method="post" action="/cart/add" id="product-form-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025533776194" accept-charset="UTF-8" class="product-variants product-form" enctype="multipart/form-data" data-productid="8025533776194" novalidate="novalidate" data-type="add-to-cart-form"><input type="hidden" name="form_type" value="product" /><input type="hidden" name="utf8" value="â" /><div class="product-price-option"> 11617 <div class="product-price" id="ProductPrice-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025533776194" aria-live="polite" aria-atomic="true"> 11618 <span class="compare-at-price" id="ComparePrice-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025533776194" style="display: none;"></span> 11619 <span class="current-price" id="CurrentPrice-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025533776194">$108.95</span> 11620 11621 11622 </div> 11623 11624 11625 <div class="product-option"> 11626 <label for="Option-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025533776194-0" class="visually-hidden"> 11627 Select Size for Melissa Essential Oil 11628 </label> 11629 <select 11630 id="Option-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025533776194-0" 11631 class="variant-select" 11632 name="options[Size]" 11633 form="product-form-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025533776194" 11634 data-index="option0" 11635 ><option 11636 value="5ml" 11637 selected="selected" 11638 > 11639 5ml 11640 </option><option 11641 value="1ml" 11642 11643 > 11644 1ml 11645 </option></select> 11646 </div> 11647 11648 </div><label for="ProductSelect-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025533776194" class="visually-hidden"> 11649 Choose variant for Melissa Essential Oil 11650 </label> 11651 <select 11652 name="id" 11653 data-productid="8025533776194" 11654 id="ProductSelect-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025533776194" 11655 class="product-variants-select no-js-only" 11656 ><option 11657 value="44111294955842" 11658 selected="selected" 11659 11660 > 11661 5ml - $108.95 11662 </option><option 11663 value="52064234307951" 11664 11665 11666 > 11667 1ml - $21.95 11668 </option></select> 11669 11670 <div class="product-addtocart" id="AddToCartWrapper-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025533776194"> 11671 <input type="hidden" name="quantity" value="1"> 11672 11673 11674 <div class="visually-hidden" role="status" id="variant-status-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025533776194" aria-live="assertive"></div> 11675 11676 <span id="cart-action-desc-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025533776194" class="visually-hidden">Adds item to your shopping cart</span> 11677 11678 <button 11679 class="addtocart-btn add-to-cart" 11680 type="submit" 11681 name="add" 11682 aria-label="Add to Cart - Add Melissa Essential Oil to cart" 11683 aria-describedby="cart-action-desc-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025533776194" 11684 id="AddToCart-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025533776194" 11685 11686 >
11687 <span id="AddToCartText-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025533776194">Add to Cart <i class="cart-icon" aria-hidden="true"></i></span> 11688 </button> 11689 </div><input type="hidden" name="product-id" value="8025533776194" /><input type="hidden" name="section-id" value="template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040" /></form><!-- END Variant Selection Form --></div>
11689<script type="application/ld+json"> 11690 { 11691 "@context": "http://schema.org/", 11692 "@type": "Product", 11693 "name": "Melissa Essential Oil", 11694 "url": "https:\/\/www.rockymountainoils.com\/products\/melissa-essential-oil","image": [ 11695 "https:\/\/www.rockymountainoils.com\/cdn\/shop\/files\/melissa-essential-oil-5ml-1.jpg?v=1764659300\u0026width=540" 11696 ], 11697 "description": "Melissa Essential Oil, also known as Lemon Balm, offers a delightful herbaceous aroma with citrusy and sweet notes. This precious oil is steam distilled from the flowers of the Melissa plant, native to the Mediterranean region. Melissa Essential Oil is renowned for its ability to promote a sense of calm and emotional balance. Its soothing properties may help create a peaceful environment, perfect for relaxation and mindfulness practices.\nWhen used in skincare routines, Melissa Essential Oil may support overall skin health and appearance. Its natural properties can help maintain a clear, radiant complexion. Discover the versatile benefits of this luxurious essential oil for your aromatic and self-care needs.","sku": "MELFRA-S5", 11698 "brand": { 11699 "@type": "Brand", 11700 "name": "Rocky Mountain Oils" 11701 }, 11702 "offers": { 11703 "@type": "AggregateOffer", 11704 "availability": "http://schema.org/InStock", 11705 "priceCurrency": "USD", 11706 "highPrice": 108.95, 11707 "lowPrice": 21.95, 11708 "offerCount": 2, 11709 "offers": [{ 11710 "@type" : "Offer","sku": "MELFRA-S5","gtin12": "053176176185","availability" : "http://schema.org/InStock", 11711 "price" : 108.95, 11712 "priceCurrency" : "USD", 11713 "priceValidUntil": "2026-12-31", 11714 "url" : "https:\/\/www.rockymountainoils.com\/products\/melissa-essential-oil?variant=44111294955842" 11715 }, 11716{ 11717 "@type" : "Offer","sku": "MELFRA-1ML","gtin12": "053176184807","availability" : "http://schema.org/InStock", 11718 "price" : 21.95, 11719 "priceCurrency" : "USD", 11720 "priceValidUntil": "2026-12-31", 11721 "url" : "https:\/\/www.rockymountainoils.com\/products\/melissa-essential-oil?variant=52064234307951" 11722 } 11723] 11724 } 11725 } 11726 </script>
11726</div> 11727 11728<style> 11729/* Ensure visually-hidden utility exists even if theme lacks it */ 11730.visually-hidden { 11731 position: absolute !important; 11732 width: 1px !important; 11733 height: 1px !important; 11734 padding: 0 !important; 11735 margin: -1px !important; 11736 overflow: hidden !important; 11737 clip: rect(0, 0, 0, 0) !important; 11738 white-space: nowrap !important; 11739 border: 0 !important; 11740} 11741 11742/* Ensure the main product image is tappable on iOS */ 11743.main-product-image { 11744 cursor: pointer; 11745 -webkit-tap-highlight-color: rgba(0,0,0,0.05); 11746 touch-action: manipulation; 11747} 11748 11749/* ULTIMATE FIX - Override anything that hides select text */ 11750.product-variants-select, 11751.product-variants-select.no-js-only, 11752select.product-variants-select, 11753select[id*="ProductSelect-"] { 11754 color: #1a1a1a !important; 11755 opacity: 1 !important; 11756 background-color: #ffffff !important; 11757 -webkit-text-fill-color: #1a1a1a !important; 11758} 11759 11760.product-variants-select option, 11761select[id*="ProductSelect-"] option { 11762 color: #1a1a1a !important; 11763 background-color: #ffffff !important; 11764 -webkit-text-fill-color: #1a1a1a !important; 11765} 11766 11767.product-variants-select option:checked, 11768select[id*="ProductSelect-"] option:checked { 11769 color: #1a1a1a !important; 11770 background-color: #e8f0fe !important; 11771} 11772 11773.product-variants-select option:disabled, 11774select[id*="ProductSelect-"] option:disabled { 11775 color: #6c6c6c !important; 11776 background-color: #f5f5f5 !important; 11777 -webkit-text-fill-color: #6c6c6c !important; 11778 opacity: 1 !important; 11779} 11780 11781.product-variants-select:focus, 11782select[id*="ProductSelect-"]:focus { 11783 color: #1a1a1a !important; 11784 outline: 3px solid #000000ff !important; 11785} 11786</style> 11787 </div><div class="item"> 11788
11788<script> 11789(function() { 11790 class ProductCardVariantSelector { 11791 constructor(container) { 11792 this.container = container; 11793 if (!this.container) return; 11794 11795 this.form = this.container.querySelector('.product-form'); 11796 this.variantSelectors = this.container.querySelectorAll('.variant-select'); 11797 this.masterSelect = this.container.querySelector('.product-variants-select'); 11798 this.productImage = this.container.querySelector('.main-product-image'); 11799 this.priceWrapper = this.container.querySelector('[id^="ProductPrice-"]'); 11800 this.currentPriceElement = this.container.querySelector('[id^="CurrentPrice-"]'); 11801 this.comparePriceElement = this.container.querySelector('[id^="ComparePrice-"]'); 11802 this.addToCartButton = this.container.querySelector('[id^="AddToCart-"]'); 11803 this.addToCartText = this.container.querySelector('[id^="AddToCartText-"]'); 11804 this.notifyMeButton = this.container.querySelector('[id^="NotifyMe-"]'); 11805 this.variantsJsonScript = this.container.querySelector('[id^="VariantsJson-"]'); 11806 this.dataStore = this.container.querySelector('[id^="DataStore-"]'); 11807 this.saleTag = this.container.querySelector('.hc-sale-tag'); 11808 this.statusElement = this.container.querySelector('[id^="variant-status-"]'); 11809 11810 if (!this.masterSelect || !this.variantsJsonScript) return; 11811 11812 try { 11813 this.productVariants = JSON.parse(this.variantsJsonScript.textContent); 11814 } catch (e) { return; } 11815 11816 this.mainImageUrl = this.dataStore ? this.dataStore.dataset.mainImageUrl : null; 11817 this.productTitle = this.dataStore ? this.dataStore.dataset.productTitle : ''; 11818 11819 this.init(); 11820 } 11821 11822 init() { 11823 // --- iOS-safe image tap handling (works on iPhone 16, 17 Pro Max, etc.) --- 11824 if (this.productImage) { 11825 let touchStartX = 0, touchStartY = 0, touchMoved = false; 11826 let lastTouchTime = 0; 11827 11828 this.productImage.style.cursor = 'pointer'; 11829 this.productImage.setAttribute('role', 'button'); 11830 this.productImage.setAttribute('tabindex', '0'); 11831 11832 this.productImage.addEventListener('touchstart', (e) => { 11833 const t = e.touches[0]; 11834 touchStartX = t.clientX; 11835 touchStartY = t.clientY; 11836 touchMoved = false; 11837 }, { passive: true }); 11838 11839 this.productImage.addEventListener('touchmove', (e) => { 11840 const t = e.touches[0]; 11841 if (Math.abs(t.clientX - touchStartX) > 10 || 11842 Math.abs(t.clientY - touchStartY) > 10) { 11843 touchMoved = true; 11844 } 11845 }, { passive: true }); 11846 11847 this.productImage.addEventListener('touchend', (e) => { 11848 if (touchMoved) return; 11849 lastTouchTime = Date.now(); 11850 e.preventDefault(); 11851 this.onImageTap(e); 11852 }, { passive: false }); 11853 11854 // Desktop / non-touch fallback (with double-fire protection after touchend) 11855 this.productImage.addEventListener('click', (e) => { 11856 if (Date.now() - lastTouchTime < 500) return; 11857 this.onImageTap(e); 11858 }); 11859 11860 this.productImage.addEventListener('keydown', (e) => { 11861 if (e.key === 'Enter' || e.key === ' ') { 11862 e.preventDefault(); 11863 this.onImageTap(e); 11864 } 11865 }); 11866 } 11867 11868 // --- Variant select listeners --- 11869 if (this.variantSelectors.length > 0) { 11870 this.variantSelectors.forEach(select => { 11871 select.addEventListener('change', this.onVariantChange.bind(this)); 11872 }); 11873 this.updateProductDetails(this.getCurrentVariant()); 11874 } 11875 } 11876 11877 // ============================================================ 11878 // CHANGE THIS IF YOU WANT DIFFERENT TAP BEHAVIOR 11879 // Currently: navigates to the product page. 11880 // ============================================================ 11881 onImageTap(e) { 11882 const link = this.container.querySelector('.product-title-link'); 11883 if (link && link.href && link.href !== '#') { 11884 window.location.href = link.href; 11885 } 11886 } 11887 // ============================================================ 11888 11889 onVariantChange() { 11890 const selectedOptions = Array.from(this.variantSelectors).map(s => s.value); 11891 const matchedVariant = this.findMatchingVariant(selectedOptions); 11892 11893 if (matchedVariant) { 11894 this.masterSelect.value = matchedVariant.id; 11895 this.updateProductDetails(matchedVariant); 11896 if (this.statusElement) this.statusElement.textContent = ''; 11897 } else { 11898 if (this.statusElement) { 11899 this.statusElement.textContent = 'No available variant matches your selection'; 11900 } 11901 this.updateProductDetails(null); 11902 } 11903 } 11904 11905 findMatchingVariant(selectedOptions) { 11906 return this.productVariants.find(variant => { 11907 if (!variant.options || variant.options.length !== selectedOptions.length) return false;
11908 return selectedOptions.every((val, i) => variant.options[i] === val); 11909 }); 11910 } 11911 11912 getCurrentVariant() { 11913 if (!this.masterSelect) return null; 11914 const id = this.masterSelect.value; 11915 if (!id) return null; 11916 return this.productVariants.find(v => String(v.id) === String(id)) || null; 11917 } 11918 11919 // Shopify CDN: insert _WIDTHx before extension for a properly sized image 11920 sizedImageUrl(src, width) { 11921 if (!src) return src; 11922 return src.replace(/(\.[a-z]{3,4})(\?|$)/i, `_${width}x$1$2`); 11923 } 11924 11925 updateProductDetails(variant) { 11926 this.container.setAttribute('aria-busy', 'true'); 11927 11928 if (!variant) { 11929 if (this.addToCartButton) this.addToCartButton.disabled = true; 11930 if (this.addToCartText) this.addToCartText.textContent = 'Unavailable'; 11931 if (this.notifyMeButton) this.notifyMeButton.style.display = 'none'; 11932 if (this.priceWrapper) this.priceWrapper.classList.remove('sale'); 11933 if (this.comparePriceElement) this.comparePriceElement.style.display = 'none'; 11934 if (this.saleTag) this.saleTag.style.display = 'none'; 11935 this.container.setAttribute('aria-busy', 'false'); 11936 return; 11937 } 11938 11939 // 1. Image 11940 if (this.productImage) { 11941 if (variant.featured_image && variant.featured_image.src) { 11942 const sized = this.sizedImageUrl(variant.featured_image.src, 300); 11943 const variantOptions = variant.options ? variant.options.join(' - ') : ''; 11944 this.productImage.src = sized; 11945 this.productImage.srcset = ''; 11946 this.productImage.alt = variant.featured_image.alt 11947 ? variant.featured_image.alt 11948 : (this.productTitle + (variantOptions ? ' - ' + variantOptions : '')); 11949 } else if (this.mainImageUrl) { 11950 this.productImage.src = this.mainImageUrl; 11951 this.productImage.srcset = ''; 11952 this.productImage.alt = this.productTitle; 11953 } 11954 } 11955 11956 // 2. Price 11957 const moneyFormat = "${{amount}}"; 11958 const formatMoney = (cents, format) => { 11959 if (typeof cents === 'string') cents = cents.replace('.', ''); 11960 let value = ''; 11961 const placeholderRegex = /\{\{\s*(\w+)\s*\}\}/; 11962 const formatString = (format || moneyFormat).replace(/<[^>]*>/g, ''); 11963 11964 function formatWithDelimiters(number, precision, thousands, decimal) { 11965 precision = precision ?? 2; 11966 thousands = thousands ?? ','; 11967 decimal = decimal ?? '.'; 11968 if (isNaN(number) || number == null) return 0; 11969 number = (number / 100.0).toFixed(precision); 11970 const parts = number.split('.'); 11971 const dollars = parts[0].replace(/(\d)(?=(\d\d\d)+(?!\d))/g, '$1' + thousands); 11972 const centsPart = parts[1] ? (decimal + parts[1]) : ''; 11973 return dollars + centsPart; 11974 } 11975 11976 switch (formatString.match(placeholderRegex)?.[1]) { 11977 case 'amount': value = formatWithDelimiters(cents, 2); break; 11978 case 'amount_no_decimals': value = formatWithDelimiters(cents, 0); break; 11979 case 'amount_with_comma_separator': value = formatWithDelimiters(cents, 2, '.', ','); break; 11980 case 'amount_no_decimals_with_comma_separator': value = formatWithDelimiters(cents, 0, '.', ','); break; 11981 case 'amount_with_apostrophe_separator': value = formatWithDelimiters(cents, 2, "'", "."); break; 11982 case 'amount_no_decimals_with_space_separator': value = formatWithDelimiters(cents, 0, " ", ","); break; 11983 case 'amount_with_space_separator': value = formatWithDelimiters(cents, 2, " ", ","); break; 11984 default: value = formatWithDelimiters(cents, 2); 11985 } 11986 try { 11987 return formatString.replace(placeholderRegex, value); 11988 } catch (e) { 11989 const fallback = (cents / 100.0).toFixed(2); 11990 return formatString.includes('') 11991 ? formatString.replace(placeholderRegex, fallback) 11992 : fallback; 11993 } 11994 }; 11995 11996 if (this.currentPriceElement) { 11997 this.currentPriceElement.textContent = formatMoney(variant.price, moneyFormat); 11998 } 11999 if (this.comparePriceElement && this.priceWrapper) { 12000 if (variant.compare_at_price && variant.compare_at_price > variant.price) { 12001 this.comparePriceElement.textContent = formatMoney(variant.compare_at_price, moneyFormat); 12002 this.comparePriceElement.style.display = ''; 12003 this.priceWrapper.classList.add('sale'); 12004 } else { 12005 this.comparePriceElement.textContent = ''; 12006 this.comparePriceElement.style.display = 'none'; 12007 this.priceWrapper.classList.remove('sale'); 12008 } 12009 } 12010 12011 // 3. Sale tag 12012 if (this.saleTag) { 12013 const isDiscounted = variant.compare_at_price && variant.compare_at_price > variant.price; 12014 if (isDiscounted && variant.available) { 12015 this.saleTag.style.display = 'block'; 12016 const discount = Math.round((variant.compare_at_price - variant.price) * 100.0 / variant.compare_at_price); 12017 const span = this.saleTag.querySelector('span'); 12018 if (span) span.textContent = discount + '%'; 12019 this.saleTag.setAttribute('aria-label', 'Save ' + discount + '%'); 12020 this.saleTag.setAttribute('role', 'status'); 12021 } else { 12022 this.saleTag.style.display = 'none'; 12023 } 12024 } 12025 12026 // 4. Add to cart 12027 if (this.addToCartButton && this.addToCartText) { 12028 if (variant.available) { 12029 this.addToCartButton.disabled = false;
12030 this.addToCartText.innerHTML = 'Add to Cart <i class="cart-icon"></i>'; 12031 this.addToCartButton.setAttribute('aria-label', 'Add to Cart - Add ' + this.productTitle + ' to cart'); 12032 if (this.notifyMeButton) this.notifyMeButton.style.display = 'none'; 12033 } else { 12034 this.addToCartButton.disabled = true; 12035 this.addToCartText.textContent = 'Sold Out'; 12036 this.addToCartButton.setAttribute('aria-label', 'Sold Out - ' + this.productTitle + ' is sold out'); 12037 if (this.notifyMeButton) this.notifyMeButton.style.display = 'block'; 12038 } 12039 } 12040 if (this.notifyMeButton) { 12041 this.notifyMeButton.setAttribute('data-variant-id', variant.id); 12042 } 12043 12044 this.container.setAttribute('aria-busy', 'false'); 12045 } 12046 } 12047 12048 function initProductCards(root) { 12049 root = root || document; 12050 root.querySelectorAll('.product-card-wrapper[data-product-id]').forEach(cardContainer => { 12051 if (cardContainer.dataset.variantSelectorInit === 'true') return; 12052 cardContainer.dataset.variantSelectorInit = 'true'; 12053 new ProductCardVariantSelector(cardContainer); 12054 }); 12055 } 12056 12057 if (document.readyState === 'loading') { 12058 document.addEventListener('DOMContentLoaded', () => initProductCards()); 12059 } else { 12060 initProductCards(); 12061 } 12062 12063 document.addEventListener('shopify:section:load', (e) => initProductCards(e.target)); 12064})(); 12065</script>
12065<div class="product-card-wrapper" data-product-id="8025539084610" aria-busy="false"> 12066 12067 <div class="product-image" id="ProductImageWrapper-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025539084610"><!-- WISHLIST BUTTON --> 12068 <div class='xb-wishlist__btn-custom'> 12069 <div 12070 class='xb-wishlist__add' 12071 xb-product-id='8025539084610' 12072 xb-product-title='Vitex Berry (Chaste Berry) Essential Oil' 12073 xb-product-variant='44111346794818' 12074 xb-is-in-stock='true' 12075 xb-product-handle='vitex-berry-essential-oil' 12076 > 12077 <button aria-label="Add Vitex Berry (Chaste Berry) Essential Oil to wishlist" aria-pressed="false"> 12078 <svg 12079 xmlns='http://www.w3.org/2000/svg' 12080 width='20' 12081 height='20' 12082 viewBox='0 0 24 24' 12083 fill='none' 12084 stroke='#FF4A71' 12085 stroke-width='2' 12086 stroke-linecap='round' 12087 stroke-linejoin='round' 12088 aria-hidden='true' 12089 focusable='false' 12090 > 12091 <path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"></path> 12092 </svg> 12093 </button> 12094 </div> 12095 12096 <div class="xb-wishlist__loading" xb-product-id="8025539084610"> 12097 <span class="loading-spinner"></span> 12098 </div> 12099 12100 <div class='xb-wishlist__remove' xb-product-id='8025539084610' xb-is-in-stock='true'> 12101 <button aria-label="Remove Vitex Berry (Chaste Berry) Essential Oil from wishlist" aria-pressed="true"> 12102 <svg 12103 xmlns='http://www.w3.org/2000/svg' 12104 width='20' 12105 height='20'
12106 viewBox='0 0 24 24' 12107 fill='#FF4A71' 12108 stroke='#FF4A71' 12109 stroke-width='2' 12110 stroke-linecap='round' 12111 stroke-linejoin='round' 12112 aria-hidden='true' 12113 focusable='false' 12114 > 12115 <path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"></path> 12116 </svg> 12117 </button> 12118 </div> 12119 </div><img 12120 id="ProductImage-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025539084610" 12121 class="main-product-image" 12122 src="//www.rockymountainoils.com/cdn/shop/files/vitex-berry-essential-oil-5ml-1.jpg?crop=center&height=300&v=1765697381&width=300" 12123 alt="Vitex Berry Essential Oil - 5ml - Rocky Mountain Oils" 12124 width="300" 12125 height="300" 12126 loading="lazy" 12127 /></div> 12128 12129 <div class="product-content"> 12130 <div class="product-title"> 12131 <a href="/products/vitex-berry-essential-oil" class="product-title-link" aria-label="View Vitex Berry (Chaste Berry) Essential Oil"> 12132 <h2>Vitex Berry (Chaste Berry) Essential Oil</h2> 12133 </a> 12134 </div><div> 12135 <div class="product-subtitle"> 12136 Floral, herbal, earthy; for a more relaxed & peaceful state of mind. 12137 </div> 12138 </div><div class="yotpo-widget-instance" data-yotpo-instance-id="503375" data-yotpo-product-id="8025539084610" data-yotpo-cart-product-id="" data-yotpo-section-id="index"></div><!-- START Variant Selection Form --> 12139 <div class="product-data-store" style="display:none;" 12140 data-main-image-url="//www.rockymountainoils.com/cdn/shop/files/vitex-berry-essential-oil-5ml-1.jpg?v=1765697381&width=300" 12141 data-product-title="Vitex Berry (Chaste Berry) Essential Oil" 12142 id="DataStore-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025539084610"> 12143 </div> 12144 12145
12145<script id="VariantsJson-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025539084610" type="application/json"> 12146 [{"id":44111346794818,"title":"5ml","option1":"5ml","option2":null,"option3":null,"sku":"VITISL-S5","requires_shipping":true,"taxable":true,"featured_image":{"id":44621548650818,"product_id":8025539084610,"position":1,"created_at":"2024-03-27T10:42:21-06:00","updated_at":"2025-12-14T00:29:41-07:00","alt":"Vitex Berry Essential Oil - 5ml - Rocky Mountain Oils","width":584,"height":584,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/vitex-berry-essential-oil-5ml-1.jpg?v=1765697381","variant_ids":[44111346794818]},"available":true,"name":"Vitex Berry (Chaste Berry) Essential Oil - 5ml","public_title":"5ml","options":["5ml"],"price":6995,"weight":28,"compare_at_price":null,"inventory_management":"shopify","barcode":"053176176871","featured_media":{"alt":"Vitex Berry Essential Oil - 5ml - Rocky Mountain Oils","id":37105490362690,"position":1,"preview_image":{"aspect_ratio":1.0,"height":584,"width":584,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/vitex-berry-essential-oil-5ml-1.jpg?v=1765697381"}},"requires_selling_plan":false,"selling_plan_allocations":[{"price_adjustments":[{"position":1,"price":4897}],"price":4897,"compare_at_price":6995,"per_delivery_price":4897,"selling_plan_id":691785924975,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":5946},{"position":2,"price":5596}],"price":5946,"compare_at_price":6995,"per_delivery_price":5946,"selling_plan_id":691785957743,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":6296},{"position":2,"price":5946}],"price":6296,"compare_at_price":6995,"per_delivery_price":6296,"selling_plan_id":691785990511,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":6645},{"position":2,"price":6296}],"price":6645,"compare_at_price":6995,"per_delivery_price":6645,"selling_plan_id":691786023279,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":6296},{"position":2,"price":5946}],"price":6296,"compare_at_price":6995,"per_delivery_price":6296,"selling_plan_id":691786088815,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":6645},{"position":2,"price":6296}],"price":6645,"compare_at_price":6995,"per_delivery_price":6645,"selling_plan_id":691786121583,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":5946},{"position":2,"price":5596}],"price":5946,"compare_at_price":6995,"per_delivery_price":5946,"selling_plan_id":691795362159,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":6296},{"position":2,"price":5946}],"price":6296,"compare_at_price":6995,"per_delivery_price":6296,"selling_plan_id":691795394927,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":6645},{"position":2,"price":6296}],"price":6645,"compare_at_price":6995,"per_delivery_price":6645,"selling_plan_id":691795427695,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"}],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":52064239780207,"title":"1ml","option1":"1ml","option2":null,"option3":null,"sku":"VITISL-1ML","requires_shipping":true,"taxable":true,"featured_image":{"id":60328912290159,"product_id":8025539084610,"position":5,"created_at":"2025-06-30T23:45:40-06:00","updated_at":"2025-12-14T00:29:41-07:00","alt":"Small brown bottle with a black cap of Vitex Berry essential oil on a white background, featuring a 'Limited Time Only!' banner.","width":1080,"height":1080,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/Vitex_Berry_1ml.webp?v=1765697381","variant_ids":[52064239780207]},"available":true,"name":"Vitex Berry (Chaste Berry) Essential Oil - 1ml","public_title":"1ml","options":["1ml"],"price":1495,"weight":28,"compare_at_price":null,"inventory_management":"shopify","barcode":"053176184838","featured_media":{"alt":"Small brown bottle with a black cap of Vitex Berry essential oil on a white background, featuring a 'Limited Time Only!' banner.","id":51984792748399,"position":5,"preview_image":{"aspect_ratio":1.0,"height":1080,"width":1080,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/Vitex_Berry_1ml.webp?v=1765697381"}},"requires_selling_plan":false,"selling_plan_allocations":[{"price_adjustments":[{"position":1,"price":1047}],"price":1047,"compare_at_price":1495,"per_delivery_price":1047,"selling_plan_id":691785924975,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":1271},{"position":2,"price":1196}],"price":1271,"compare_at_price":1495,"per_delivery_price":1271,"selling_plan_id":691785957743,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":1346},{"position":2,"price":1271}],"price":1346,"compare_at_price":1495,"per_delivery_price":1346,"selling_plan_id":691785990511,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":1420},{"position":2,"price":1346}],"price":1420,"compare_at_price":1495,"per_delivery_price":1420,"selling_plan_id":691786023279,"selling_plan_group_id":"8c25b6d0c0826f628094dd16cf1174b8726e84be"},{"price_adjustments":[{"position":1,"price":1346},{"position":2,"price":1271}],"price":1346,"compare_at_price":1495,"per_delivery_price":1346,"selling_plan_id":691786088815,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":1420},{"position":2,"price":1346}],"price":1420,"compare_at_price":1495,"per_delivery_price":1420,"selling_plan_id":691786121583,"selling_plan_group_id":"2e18bf0a80c495d1b47281e6c0d9c37bcd01d20e"},{"price_adjustments":[{"position":1,"price":1271},{"position":2,"price":1196}],"price":1271,"compare_at_price":1495,"per_delivery_price":1271,"selling_plan_id":691795362159,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":1346},{"position":2,"price":1271}],"price":1346,"compare_at_price":1495,"per_delivery_price":1346,"selling_plan_id":691795394927,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"},{"price_adjustments":[{"position":1,"price":1420},{"position":2,"price":1346}],"price":1420,"compare_at_price":1495,"per_delivery_price":1420,"selling_plan_id":691795427695,"selling_plan_group_id":"e6b92494180d03273214edfc475ceef2a8ea3d0b"}],"quantity_rule":{"min":1,"max":null,"increment":1}}] 12147 </script>
12147<form method="post" action="/cart/add" id="product-form-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025539084610" accept-charset="UTF-8" class="product-variants product-form" enctype="multipart/form-data" data-productid="8025539084610" novalidate="novalidate" data-type="add-to-cart-form"><input type="hidden" name="form_type" value="product" /><input type="hidden" name="utf8" value="â" /><div class="product-price-option"> 12148 <div class="product-price" id="ProductPrice-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025539084610" aria-live="polite" aria-atomic="true"> 12149 <span class="compare-at-price" id="ComparePrice-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025539084610" style="display: none;"></span> 12150 <span class="current-price" id="CurrentPrice-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025539084610">$69.95</span> 12151 12152 12153 </div> 12154 12155 12156 <div class="product-option"> 12157 <label for="Option-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025539084610-0" class="visually-hidden"> 12158 Select Size for Vitex Berry (Chaste Berry) Essential Oil 12159 </label> 12160 <select 12161 id="Option-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025539084610-0" 12162 class="variant-select" 12163 name="options[Size]" 12164 form="product-form-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025539084610" 12165 data-index="option0" 12166 ><option 12167 value="5ml" 12168 selected="selected" 12169 > 12170 5ml 12171 </option><option 12172 value="1ml" 12173 12174 > 12175 1ml 12176 </option></select> 12177 </div> 12178 12179 </div><label for="ProductSelect-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025539084610" class="visually-hidden"> 12180 Choose variant for Vitex Berry (Chaste Berry) Essential Oil 12181 </label> 12182 <select 12183 name="id" 12184 data-productid="8025539084610" 12185 id="ProductSelect-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025539084610" 12186 class="product-variants-select no-js-only" 12187 ><option 12188 value="44111346794818" 12189 selected="selected" 12190 12191 > 12192 5ml - $69.95 12193 </option><option 12194 value="52064239780207" 12195 12196 12197 > 12198 1ml - $14.95 12199 </option></select> 12200 12201 <div class="product-addtocart" id="AddToCartWrapper-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025539084610"> 12202 <input type="hidden" name="quantity" value="1"> 12203 12204 12205 <div class="visually-hidden" role="status" id="variant-status-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025539084610" aria-live="assertive"></div> 12206 12207 <span id="cart-action-desc-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025539084610" class="visually-hidden">Adds item to your shopping cart</span> 12208 12209 <button 12210 class="addtocart-btn add-to-cart" 12211 type="submit" 12212 name="add" 12213 aria-label="Add to Cart - Add Vitex Berry (Chaste Berr
12213y) Essential Oil to cart" 12214 aria-describedby="cart-action-desc-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025539084610" 12215 id="AddToCart-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025539084610" 12216 12217 > 12218 <span id="AddToCartText-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-8025539084610">Add to Cart <i class="cart-icon" aria-hidden="true"></i></span> 12219 </button> 12220 </div><input type="hidden" name="product-id" value="8025539084610" /><input type="hidden" name="section-id" value="template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040" /></form><!-- END Variant Selection Form --></div>
12220<script type="application/ld+json"> 12221 { 12222 "@context": "http://schema.org/", 12223 "@type": "Product", 12224 "name": "Vitex Berry (Chaste Berry) Essential Oil", 12225 "url": "https:\/\/www.rockymountainoils.com\/products\/vitex-berry-essential-oil","image": [ 12226 "https:\/\/www.rockymountainoils.com\/cdn\/shop\/files\/vitex-berry-essential-oil-5ml-1.jpg?v=1765697381\u0026width=584" 12227 ], 12228 "description": "Vitex Berry Essential Oil offers a unique blend of floral, herbal, and earthy aromas with a hint of mint. This versatile oil is known for its ability to support emotional well-being and promote a sense of calm. Vitex Berry Essential Oil may help balance mood and encourage restful sleep, making it a valuable addition to your essential oil collection.","sku": "VITISL-S5", 12229 "brand": { 12230 "@type": "Brand", 12231 "name": "Rocky Mountain Oils" 12232 }, 12233 "offers": { 12234 "@type": "AggregateOffer", 12235 "availability": "http://schema.org/InStock", 12236 "priceCurrency": "USD", 12237 "highPrice": 69.95, 12238 "lowPrice": 14.95, 12239 "offerCount": 2, 12240 "offers": [{ 12241 "@type" : "Offer","sku": "VITISL-S5","gtin12": "053176176871","availability" : "http://schema.org/InStock", 12242 "price" : 69.95, 12243 "priceCurrency" : "USD", 12244 "priceValidUntil": "2026-12-31", 12245 "url" : "https:\/\/www.rockymountainoils.com\/products\/vitex-berry-essential-oil?variant=44111346794818" 12246 }, 12247{ 12248 "@type" : "Offer","sku": "VITISL-1ML","gtin12": "053176184838","availability" : "http://schema.org/InStock", 12249 "price" : 14.95, 12250 "priceCurrency" : "USD", 12251 "priceValidUntil": "2026-12-31", 12252 "url" : "https:\/\/www.rockymountainoils.com\/products\/vitex-berry-essential-oil?variant=52064239780207" 12253 } 12254] 12255 } 12256 } 12257 </script>
12257</div> 12258 12259<style> 12260/* Ensure visually-hidden utility exists even if theme lacks it */ 12261.visually-hidden { 12262 position: absolute !important; 12263 width: 1px !important; 12264 height: 1px !important; 12265 padding: 0 !important; 12266 margin: -1px !important; 12267 overflow: hidden !important; 12268 clip: rect(0, 0, 0, 0) !important; 12269 white-space: nowrap !important; 12270 border: 0 !important; 12271} 12272 12273/* Ensure the main product image is tappable on iOS */ 12274.main-product-image { 12275 cursor: pointer; 12276 -webkit-tap-highlight-color: rgba(0,0,0,0.05); 12277 touch-action: manipulation; 12278} 12279 12280/* ULTIMATE FIX - Override anything that hides select text */ 12281.product-variants-select, 12282.product-variants-select.no-js-only, 12283select.product-variants-select, 12284select[id*="ProductSelect-"] { 12285 color: #1a1a1a !important; 12286 opacity: 1 !important; 12287 background-color: #ffffff !important; 12288 -webkit-text-fill-color: #1a1a1a !important; 12289} 12290 12291.product-variants-select option, 12292select[id*="ProductSelect-"] option { 12293 color: #1a1a1a !important; 12294 background-color: #ffffff !important; 12295 -webkit-text-fill-color: #1a1a1a !important; 12296} 12297 12298.product-variants-select option:checked, 12299select[id*="ProductSelect-"] option:checked { 12300 color: #1a1a1a !important; 12301 background-color: #e8f0fe !important; 12302} 12303 12304.product-variants-select option:disabled, 12305select[id*="ProductSelect-"] option:disabled { 12306 color: #6c6c6c !important; 12307 background-color: #f5f5f5 !important; 12308 -webkit-text-fill-color: #6c6c6c !important; 12309 opacity: 1 !important; 12310} 12311 12312.product-variants-select:focus, 12313select[id*="ProductSelect-"]:focus { 12314 color: #1a1a1a !important; 12315 outline: 3px solid #000000ff !important; 12316} 12317</style> 12318 </div><div class="item"> 12319
12319<script> 12320(function() { 12321 class ProductCardVariantSelector { 12322 constructor(container) { 12323 this.container = container; 12324 if (!this.container) return; 12325 12326 this.form = this.container.querySelector('.product-form'); 12327 this.variantSelectors = this.container.querySelectorAll('.variant-select'); 12328 this.masterSelect = this.container.querySelector('.product-variants-select'); 12329 this.productImage = this.container.querySelector('.main-product-image'); 12330 this.priceWrapper = this.container.querySelector('[id^="ProductPrice-"]'); 12331 this.currentPriceElement = this.container.querySelector('[id^="CurrentPrice-"]'); 12332 this.comparePriceElement = this.container.querySelector('[id^="ComparePrice-"]'); 12333 this.addToCartButton = this.container.querySelector('[id^="AddToCart-"]'); 12334 this.addToCartText = this.container.querySelector('[id^="AddToCartText-"]'); 12335 this.notifyMeButton = this.container.querySelector('[id^="NotifyMe-"]'); 12336 this.variantsJsonScript = this.container.querySelector('[id^="VariantsJson-"]'); 12337 this.dataStore = this.container.querySelector('[id^="DataStore-"]'); 12338 this.saleTag = this.container.querySelector('.hc-sale-tag'); 12339 this.statusElement = this.container.querySelector('[id^="variant-status-"]'); 12340 12341 if (!this.masterSelect || !this.variantsJsonScript) return; 12342 12343 try { 12344 this.productVariants = JSON.parse(this.variantsJsonScript.textContent); 12345 } catch (e) { return; } 12346 12347 this.mainImageUrl = this.dataStore ? this.dataStore.dataset.mainImageUrl : null; 12348 this.productTitle = this.dataStore ? this.dataStore.dataset.productTitle : ''; 12349 12350 this.init(); 12351 } 12352 12353 init() { 12354 // --- iOS-safe image tap handling (works on iPhone 16, 17 Pro Max, etc.) --- 12355 if (this.productImage) { 12356 let touchStartX = 0, touchStartY = 0, touchMoved = false; 12357 let lastTouchTime = 0; 12358 12359 this.productImage.style.cursor = 'pointer'; 12360 this.productImage.setAttribute('role', 'button'); 12361 this.productImage.setAttribute('tabindex', '0'); 12362 12363 this.productImage.addEventListener('touchstart', (e) => { 12364 const t = e.touches[0]; 12365 touchStartX = t.clientX; 12366 touchStartY = t.clientY; 12367 touchMoved = false; 12368 }, { passive: true }); 12369 12370 this.productImage.addEventListener('touchmove', (e) => { 12371 const t = e.touches[0]; 12372 if (Math.abs(t.clientX - touchStartX) > 10 || 12373 Math.abs(t.clientY - touchStartY) > 10) { 12374 touchMoved = true; 12375 } 12376 }, { passive: true }); 12377 12378 this.productImage.addEventListener('touchend', (e) => { 12379 if (touchMoved) return; 12380 lastTouchTime = Date.now(); 12381 e.preventDefault(); 12382 this.onImageTap(e); 12383 }, { passive: false }); 12384 12385 // Desktop / non-touch fallback (with double-fire protection after touchend) 12386 this.productImage.addEventListener('click', (e) => { 12387 if (Date.now() - lastTouchTime < 500) return; 12388 this.onImageTap(e); 12389 }); 12390 12391 this.productImage.addEventListener('keydown', (e) => { 12392 if (e.key === 'Enter' || e.key === ' ') { 12393 e.preventDefault(); 12394 this.onImageTap(e); 12395 } 12396 }); 12397 } 12398 12399 // --- Variant select listeners --- 12400 if (this.variantSelectors.length > 0) { 12401 this.variantSelectors.forEach(select => { 12402 select.addEventListener('change', this.onVariantChange.bind(this)); 12403 }); 12404 this.updateProductDetails(this.getCurrentVariant()); 12405 } 12406 } 12407 12408 // ============================================================ 12409 // CHANGE THIS IF YOU WANT DIFFERENT TAP BEHAVIOR 12410 // Currently: navigates to the product page. 12411 // ============================================================ 12412 onImageTap(e) { 12413 const link = this.container.querySelector('.product-title-link'); 12414 if (link && link.href && link.href !== '#') { 12415 window.location.href = link.href; 12416 } 12417 } 12418 // ============================================================ 12419 12420 onVariantChange() { 12421 const selectedOptions = Array.from(this.variantSelectors).map(s => s.value); 12422 const matchedVariant = this.findMatchingVariant(selectedOptions); 12423 12424 if (matchedVariant) { 12425 this.masterSelect.value = matchedVariant.id; 12426 this.updateProductDetails(matchedVariant); 12427 if (this.statusElement) this.statusElement.textContent = ''; 12428 } else { 12429 if (this.statusElement) { 12430 this.statusElement.textContent = 'No available variant matches your selection'; 12431 } 12432 this.updateProductDetails(null); 12433 } 12434 } 12435 12436 findMatchingVariant(selectedOptions) { 12437 return this.productVariants.find(variant => { 12438 if (!variant.options || variant.options.length !== selectedOptions.length) return false;
12439 return selectedOptions.every((val, i) => variant.options[i] === val); 12440 }); 12441 } 12442 12443 getCurrentVariant() { 12444 if (!this.masterSelect) return null; 12445 const id = this.masterSelect.value; 12446 if (!id) return null; 12447 return this.productVariants.find(v => String(v.id) === String(id)) || null; 12448 } 12449 12450 // Shopify CDN: insert _WIDTHx before extension for a properly sized image 12451 sizedImageUrl(src, width) { 12452 if (!src) return src; 12453 return src.replace(/(\.[a-z]{3,4})(\?|$)/i, `_${width}x$1$2`); 12454 } 12455 12456 updateProductDetails(variant) { 12457 this.container.setAttribute('aria-busy', 'true'); 12458 12459 if (!variant) { 12460 if (this.addToCartButton) this.addToCartButton.disabled = true; 12461 if (this.addToCartText) this.addToCartText.textContent = 'Unavailable'; 12462 if (this.notifyMeButton) this.notifyMeButton.style.display = 'none'; 12463 if (this.priceWrapper) this.priceWrapper.classList.remove('sale'); 12464 if (this.comparePriceElement) this.comparePriceElement.style.display = 'none'; 12465 if (this.saleTag) this.saleTag.style.display = 'none'; 12466 this.container.setAttribute('aria-busy', 'false'); 12467 return; 12468 } 12469 12470 // 1. Image 12471 if (this.productImage) { 12472 if (variant.featured_image && variant.featured_image.src) { 12473 const sized = this.sizedImageUrl(variant.featured_image.src, 300); 12474 const variantOptions = variant.options ? variant.options.join(' - ') : ''; 12475 this.productImage.src = sized; 12476 this.productImage.srcset = ''; 12477 this.productImage.alt = variant.featured_image.alt 12478 ? variant.featured_image.alt 12479 : (this.productTitle + (variantOptions ? ' - ' + variantOptions : '')); 12480 } else if (this.mainImageUrl) { 12481 this.productImage.src = this.mainImageUrl; 12482 this.productImage.srcset = ''; 12483 this.productImage.alt = this.productTitle; 12484 } 12485 } 12486 12487 // 2. Price 12488 const moneyFormat = "${{amount}}"; 12489 const formatMoney = (cents, format) => { 12490 if (typeof cents === 'string') cents = cents.replace('.', ''); 12491 let value = ''; 12492 const placeholderRegex = /\{\{\s*(\w+)\s*\}\}/; 12493 const formatString = (format || moneyFormat).replace(/<[^>]*>/g, ''); 12494 12495 function formatWithDelimiters(number, precision, thousands, decimal) { 12496 precision = precision ?? 2; 12497 thousands = thousands ?? ','; 12498 decimal = decimal ?? '.'; 12499 if (isNaN(number) || number == null) return 0; 12500 number = (number / 100.0).toFixed(precision); 12501 const parts = number.split('.'); 12502 const dollars = parts[0].replace(/(\d)(?=(\d\d\d)+(?!\d))/g, '$1' + thousands); 12503 const centsPart = parts[1] ? (decimal + parts[1]) : ''; 12504 return dollars + centsPart; 12505 } 12506 12507 switch (formatString.match(placeholderRegex)?.[1]) { 12508 case 'amount': value = formatWithDelimiters(cents, 2); break; 12509 case 'amount_no_decimals': value = formatWithDelimiters(cents, 0); break; 12510 case 'amount_with_comma_separator': value = formatWithDelimiters(cents, 2, '.', ','); break; 12511 case 'amount_no_decimals_with_comma_separator': value = formatWithDelimiters(cents, 0, '.', ','); break; 12512 case 'amount_with_apostrophe_separator': value = formatWithDelimiters(cents, 2, "'", "."); break; 12513 case 'amount_no_decimals_with_space_separator': value = formatWithDelimiters(cents, 0, " ", ","); break; 12514 case 'amount_with_space_separator': value = formatWithDelimiters(cents, 2, " ", ","); break; 12515 default: value = formatWithDelimiters(cents, 2); 12516 } 12517 try { 12518 return formatString.replace(placeholderRegex, value); 12519 } catch (e) { 12520 const fallback = (cents / 100.0).toFixed(2); 12521 return formatString.includes('') 12522 ? formatString.replace(placeholderRegex, fallback) 12523 : fallback; 12524 } 12525 }; 12526 12527 if (this.currentPriceElement) { 12528 this.currentPriceElement.textContent = formatMoney(variant.price, moneyFormat); 12529 } 12530 if (this.comparePriceElement && this.priceWrapper) { 12531 if (variant.compare_at_price && variant.compare_at_price > variant.price) { 12532 this.comparePriceElement.textContent = formatMoney(variant.compare_at_price, moneyFormat); 12533 this.comparePriceElement.style.display = ''; 12534 this.priceWrapper.classList.add('sale'); 12535 } else { 12536 this.comparePriceElement.textContent = ''; 12537 this.comparePriceElement.style.display = 'none'; 12538 this.priceWrapper.classList.remove('sale'); 12539 } 12540 } 12541 12542 // 3. Sale tag 12543 if (this.saleTag) { 12544 const isDiscounted = variant.compare_at_price && variant.compare_at_price > variant.price; 12545 if (isDiscounted && variant.available) { 12546 this.saleTag.style.display = 'block'; 12547 const discount = Math.round((variant.compare_at_price - variant.price) * 100.0 / variant.compare_at_price); 12548 const span = this.saleTag.querySelector('span'); 12549 if (span) span.textContent = discount + '%'; 12550 this.saleTag.setAttribute('aria-label', 'Save ' + discount + '%'); 12551 this.saleTag.setAttribute('role', 'status'); 12552 } else { 12553 this.saleTag.style.display = 'none'; 12554 } 12555 } 12556 12557 // 4. Add to cart 12558 if (this.addToCartButton && this.addToCartText) { 12559 if (variant.available) { 12560 this.addToCartButton.disabled = false;
12561 this.addToCartText.innerHTML = 'Add to Cart <i class="cart-icon"></i>'; 12562 this.addToCartButton.setAttribute('aria-label', 'Add to Cart - Add ' + this.productTitle + ' to cart'); 12563 if (this.notifyMeButton) this.notifyMeButton.style.display = 'none'; 12564 } else { 12565 this.addToCartButton.disabled = true; 12566 this.addToCartText.textContent = 'Sold Out'; 12567 this.addToCartButton.setAttribute('aria-label', 'Sold Out - ' + this.productTitle + ' is sold out'); 12568 if (this.notifyMeButton) this.notifyMeButton.style.display = 'block'; 12569 } 12570 } 12571 if (this.notifyMeButton) { 12572 this.notifyMeButton.setAttribute('data-variant-id', variant.id); 12573 } 12574 12575 this.container.setAttribute('aria-busy', 'false'); 12576 } 12577 } 12578 12579 function initProductCards(root) { 12580 root = root || document; 12581 root.querySelectorAll('.product-card-wrapper[data-product-id]').forEach(cardContainer => { 12582 if (cardContainer.dataset.variantSelectorInit === 'true') return; 12583 cardContainer.dataset.variantSelectorInit = 'true'; 12584 new ProductCardVariantSelector(cardContainer); 12585 }); 12586 } 12587 12588 if (document.readyState === 'loading') { 12589 document.addEventListener('DOMContentLoaded', () => initProductCards()); 12590 } else { 12591 initProductCards(); 12592 } 12593 12594 document.addEventListener('shopify:section:load', (e) => initProductCards(e.target)); 12595})(); 12596</script>
12596<div class="product-card-wrapper" data-product-id="14725145461103" aria-busy="false"> 12597 12598 <div class="product-image" id="ProductImageWrapper-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-14725145461103"><!-- WISHLIST BUTTON --> 12599 <div class='xb-wishlist__btn-custom'> 12600 <div 12601 class='xb-wishlist__add' 12602 xb-product-id='14725145461103' 12603 xb-product-title='Moldavian Dragonhead Essential Oil' 12604 xb-product-variant='52681248309615' 12605 xb-is-in-stock='true' 12606 xb-product-handle='moldavian-dragonhead-essential-oil' 12607 > 12608 <button aria-label="Add Moldavian Dragonhead Essential Oil to wishlist" aria-pressed="false"> 12609 <svg 12610 xmlns='http://www.w3.org/2000/svg' 12611 width='20' 12612 height='20' 12613 viewBox='0 0 24 24' 12614 fill='none' 12615 stroke='#FF4A71' 12616 stroke-width='2' 12617 stroke-linecap='round' 12618 stroke-linejoin='round' 12619 aria-hidden='true' 12620 focusable='false' 12621 > 12622 <path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"></path> 12623 </svg> 12624 </button> 12625 </div> 12626 12627 <div class="xb-wishlist__loading" xb-product-id="14725145461103"> 12628 <span class="loading-spinner"></span> 12629 </div> 12630 12631 <div class='xb-wishlist__remove' xb-product-id='14725145461103' xb-is-in-stock='true'> 12632 <button aria-label="Remove Moldavian Dragonhead Essential Oil from wishlist" aria-pressed="true"> 12633 <svg 12634 xmlns='http://www.w3.org/2000/svg' 12635 width='20' 12636 height='20'
12637 viewBox='0 0 24 24' 12638 fill='#FF4A71' 12639 stroke='#FF4A71' 12640 stroke-width='2' 12641 stroke-linecap='round' 12642 stroke-linejoin='round' 12643 aria-hidden='true' 12644 focusable='false' 12645 > 12646 <path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"></path> 12647 </svg> 12648 </button> 12649 </div> 12650 </div><img 12651 id="ProductImage-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-14725145461103" 12652 class="main-product-image" 12653 src="//www.rockymountainoils.com/cdn/shop/files/Moldavian_Dragonhead_5ml_Neutral_2.webp?crop=center&height=300&v=1771434762&width=300" 12654 alt="Moldavian Dragonhead Essential Oil" 12655 width="300" 12656 height="300" 12657 loading="lazy" 12658 /></div> 12659 12660 <div class="product-content"> 12661 <div class="product-title"> 12662 <a href="/products/moldavian-dragonhead-essential-oil" class="product-title-link" aria-label="View Moldavian Dragonhead Essential Oil"> 12663 <h2>Moldavian Dragonhead Essential Oil</h2> 12664 </a> 12665 </div><div> 12666 <div class="product-subtitle"> 12667 Supports emotional balance and helps manage stress response. 12668 </div> 12669 </div><div class="yotpo-widget-instance" data-yotpo-instance-id="503375" data-yotpo-product-id="14725145461103" data-yotpo-cart-product-id="" data-yotpo-section-id="index"></div><!-- START Variant Selection Form --> 12670 <div class="product-data-store" style="display:none;" 12671 data-main-image-url="//www.rockymountainoils.com/cdn/shop/files/Moldavian_Dragonhead_5ml_Neutral_2.webp?v=1771434762&width=300" 12672 data-product-title="Moldavian Dragonhead Essential Oil" 12673 id="DataStore-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-14725145461103"> 12674 </div> 12675 12676
12676<script id="VariantsJson-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-14725145461103" type="application/json"> 12677 [{"id":52681248309615,"title":"5ml","option1":"5ml","option2":null,"option3":null,"sku":"MOLDRA-S5","requires_shipping":true,"taxable":true,"featured_image":{"id":61756657500527,"product_id":14725145461103,"position":1,"created_at":"2026-02-18T10:11:13-07:00","updated_at":"2026-02-18T10:12:42-07:00","alt":null,"width":1080,"height":1080,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/Moldavian_Dragonhead_5ml_Neutral_2.webp?v=1771434762","variant_ids":[52681248309615]},"available":true,"name":"Moldavian Dragonhead Essential Oil - 5ml","public_title":"5ml","options":["5ml"],"price":3995,"weight":25,"compare_at_price":null,"inventory_management":"shopify","barcode":"053176184999","featured_media":{"alt":null,"id":53152889536879,"position":1,"preview_image":{"aspect_ratio":1.0,"height":1080,"width":1080,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/Moldavian_Dragonhead_5ml_Neutral_2.webp?v=1771434762"}},"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":52681213509999,"title":"1ml","option1":"1ml","option2":null,"option3":null,"sku":"MOLDRA-1ML","requires_shipping":true,"taxable":true,"featured_image":{"id":60328950006127,"product_id":14725145461103,"position":5,"created_at":"2025-07-01T00:01:51-06:00","updated_at":"2026-02-18T10:12:42-07:00","alt":"A 1ml amber glass bottle of Moldavian Dragonhead essential oil with a label.","width":1080,"height":1080,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/Moldavian_Dragonhead_1ml.webp?v=1771434762","variant_ids":[52681213509999]},"available":true,"name":"Moldavian Dragonhead Essential Oil - 1ml","public_title":"1ml","options":["1ml"],"price":1395,"weight":25,"compare_at_price":null,"inventory_management":"shopify","barcode":"053176184845","featured_media":{"alt":"A 1ml amber glass bottle of Moldavian Dragonhead essential oil with a label.","id":51984828432751,"position":5,"preview_image":{"aspect_ratio":1.0,"height":1080,"width":1080,"src":"\/\/www.rockymountainoils.com\/cdn\/shop\/files\/Moldavian_Dragonhead_1ml.webp?v=1771434762"}},"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}}] 12678 </script>
12678<form method="post" action="/cart/add" id="product-form-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-14725145461103" accept-charset="UTF-8" class="product-variants product-form" enctype="multipart/form-data" data-productid="14725145461103" novalidate="novalidate" data-type="add-to-cart-form"><input type="hidden" name="form_type" value="product" /><input type="hidden" name="utf8" value="â" /><div class="product-price-option"> 12679 <div class="product-price" id="ProductPrice-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-14725145461103" aria-live="polite" aria-atomic="true"> 12680 <span class="compare-at-price" id="ComparePrice-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-14725145461103" style="display: none;"></span> 12681 <span class="current-price" id="CurrentPrice-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-14725145461103">$39.95</span> 12682 12683 12684 </div> 12685 12686 12687 <div class="product-option"> 12688 <label for="Option-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-14725145461103-0" class="visually-hidden"> 12689 Select Size for Moldavian Dragonhead Essential Oil 12690 </label> 12691 <select 12692 id="Option-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-14725145461103-0" 12693 class="variant-select" 12694 name="options[Size]" 12695 form="product-form-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-14725145461103" 12696 data-index="option0" 12697 ><option 12698 value="5ml" 12699 selected="selected" 12700 > 12701 5ml 12702 </option><option 12703 value="1ml" 12704 12705 > 12706 1ml 12707 </option></select> 12708 </div> 12709 12710 </div><label for="ProductSelect-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-14725145461103" class="visually-hidden"> 12711 Choose variant for Moldavian Dragonhead Essential Oil 12712 </label> 12713 <select 12714 name="id" 12715 data-productid="14725145461103" 12716 id="ProductSelect-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-14725145461103" 12717 class="product-variants-select no-js-only" 12718 ><option 12719 value="52681248309615" 12720 selected="selected" 12721 12722 > 12723 5ml - $39.95 12724 </option><option 12725 value="52681213509999" 12726 12727 12728 > 12729 1ml - $13.95 12730 </option></select> 12731 12732 <div class="product-addtocart" id="AddToCartWrapper-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-14725145461103"> 12733 <input type="hidden" name="quantity" value="1"> 12734 12735 12736 <div class="visually-hidden" role="status" id="variant-status-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-14725145461103" aria-live="assertive"></div> 12737 12738 <span id="cart-action-desc-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-14725145461103" class="visually-hidden">Adds item to your shopping cart</span> 12739 12740 <button 12741 class="addtocart-btn add-to-cart" 12742 type="submit" 12743 name="add" 12744 aria-label="Add to Cart - Add Moldavian Dragonhead Essential Oil to cart" 12745 aria-describedby="cart-action-desc-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-14725145461103" 12746 id="AddToCart-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-14725145461103" 12747 12748 >
12749 <span id="AddToCartText-template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040-14725145461103">Add to Cart <i class="cart-icon" aria-hidden="true"></i></span> 12750 </button> 12751 </div><input type="hidden" name="product-id" value="14725145461103" /><input type="hidden" name="section-id" value="template--27595751620975__484c91a6-5d74-4a29-84b5-f31c4cd78040" /></form><!-- END Variant Selection Form --></div>
12751<script type="application/ld+json"> 12752 { 12753 "@context": "http://schema.org/", 12754 "@type": "Product", 12755 "name": "Moldavian Dragonhead Essential Oil", 12756 "url": "https:\/\/www.rockymountainoils.com\/products\/moldavian-dragonhead-essential-oil","image": [ 12757 "https:\/\/www.rockymountainoils.com\/cdn\/shop\/files\/Moldavian_Dragonhead_5ml_Neutral_2.webp?v=1771434762\u0026width=1080" 12758 ], 12759 "description": "Moldavian Dragonhead essential oil is a rare and precious oil steam-distilled from the leaves and flowering tops of Dracocephalum moldavica. Similar to Melissa (Lemon Balm), this Bulgarian-sourced oil offers a sweet, lemony aroma that creates an uplifting atmosphere while helping to ease tension and promote emotional well-being.\nThis multipurpose oil supports the body's natural response to stress and helps create a sense of calm. Moldavian Dragonhead has been traditionally valued for its digestive support properties and ability to promote a positive mindset. Its thin consistency blends beautifully with citrus and floral oils for creating personalized aromatherapy experiences.","sku": "MOLDRA-S5", 12760 "brand": { 12761 "@type": "Brand", 12762 "name": "Rocky Mountain Oils" 12763 }, 12764 "offers": { 12765 "@type": "AggregateOffer", 12766 "availability": "http://schema.org/InStock", 12767 "priceCurrency": "USD", 12768 "highPrice": 39.95, 12769 "lowPrice": 13.95, 12770 "offerCount": 2, 12771 "offers": [{ 12772 "@type" : "Offer","sku": "MOLDRA-S5","gtin12": "053176184999","availability" : "http://schema.org/InStock", 12773 "price" : 39.95, 12774 "priceCurrency" : "USD", 12775 "priceValidUntil": "2026-12-31", 12776 "url" : "https:\/\/www.rockymountainoils.com\/products\/moldavian-dragonhead-essential-oil?variant=52681248309615" 12777 }, 12778{ 12779 "@type" : "Offer","sku": "MOLDRA-1ML","gtin12": "053176184845","availability" : "http://schema.org/InStock", 12780 "price" : 13.95, 12781 "priceCurrency" : "USD", 12782 "priceValidUntil": "2026-12-31", 12783 "url" : "https:\/\/www.rockymountainoils.com\/products\/moldavian-dragonhead-essential-oil?variant=52681213509999" 12784 } 12785] 12786 } 12787 } 12788 </script>
12788</div> 12789 12790<style> 12791/* Ensure visually-hidden utility exists even if theme lacks it */ 12792.visually-hidden { 12793 position: absolute !important; 12794 width: 1px !important; 12795 height: 1px !important; 12796 padding: 0 !important; 12797 margin: -1px !important; 12798 overflow: hidden !important; 12799 clip: rect(0, 0, 0, 0) !important; 12800 white-space: nowrap !important; 12801 border: 0 !important; 12802} 12803 12804/* Ensure the main product image is tappable on iOS */ 12805.main-product-image { 12806 cursor: pointer; 12807 -webkit-tap-highlight-color: rgba(0,0,0,0.05); 12808 touch-action: manipulation; 12809} 12810 12811/* ULTIMATE FIX - Override anything that hides select text */ 12812.product-variants-select, 12813.product-variants-select.no-js-only, 12814select.product-variants-select, 12815select[id*="ProductSelect-"] { 12816 color: #1a1a1a !important; 12817 opacity: 1 !important; 12818 background-color: #ffffff !important; 12819 -webkit-text-fill-color: #1a1a1a !important; 12820} 12821 12822.product-variants-select option, 12823select[id*="ProductSelect-"] option { 12824 color: #1a1a1a !important; 12825 background-color: #ffffff !important; 12826 -webkit-text-fill-color: #1a1a1a !important; 12827} 12828 12829.product-variants-select option:checked, 12830select[id*="ProductSelect-"] option:checked { 12831 color: #1a1a1a !important; 12832 background-color: #e8f0fe !important; 12833} 12834 12835.product-variants-select option:disabled, 12836select[id*="ProductSelect-"] option:disabled { 12837 color: #6c6c6c !important; 12838 background-color: #f5f5f5 !important; 12839 -webkit-text-fill-color: #6c6c6c !important; 12840 opacity: 1 !important; 12841} 12842 12843.product-variants-select:focus, 12844select[id*="ProductSelect-"]:focus { 12845 color: #1a1a1a !important; 12846 outline: 3px solid #000000ff !important; 12847} 12848</style> 12849 </div></div> 12850 </div> 12851 </div> 12852</section> 12853 12854</section><section id="shopify-section-template--27595751620975__4d8ca35c-1b82-4b7d-b459-c4dd417fa684" class="shopify-section section"><section class="AsSeenIn sec_pad"> 12855 <div class="AsSeenIn_logo_wrapper"> 12856 12857 <div class="sec-heading text-center"> 12858 <h3>As Seen In</h3> 12859 </div> 12860 12861 <div class="owl-carousel carousel-fade owl-theme slider-section" id="logosSlider"><div class="item"> 12862 12863 <img src="//www.rockymountainoils.com/cdn/shop/files/vogue_200x.webp?v=1720725519" width="179" height="47" alt="Vogue"> 12864 12865 </div><div class="item"> 12866 12867 <img src="//www.rockymountainoils.com/cdn/shop/files/women_200x.webp?v=1720725533" width="229" height="47" alt="Women's Health"> 12868 12869 </div><div class="item"> 12870 12871 <img src="//www.rockymountainoils.com/cdn/shop/files/Chicago_200x.webp?v=1720725548" width="303" height="47" alt="Chicago Tribune"> 12872 12873 </div><div class="item"> 12874 12875 <img src="//www.rockymountainoils.com/cdn/shop/files/the-new-york_200x.webp?v=1720725562" width="187" height="44" alt="The New York"> 12876 12877 </div><div class="item"> 12878 12879 <img src="//www.rockymountainoils.com/cdn/shop/files/outside_200x.webp?v=1720725575" width="180" height="47" alt="Outside"> 12880 12881 </div><div class="item"> 12882 12883 <img src="//www.rockymountainoils.com/cdn/shop/files/bustle_200x.webp?v=1720725588" width="132" height="37" alt="Bustle"> 12884 12885 </div><div class="item"> 12886 12887 <img src="//www.rockymountainoils.com/cdn/shop/files/spruce_200x.webp?v=1720725602" width="126" height="61" alt="The Spruce"> 12888 12889 </div></div> 12890 </div> 12891</section> 12892 12893 12894</section><section id="shopify-section-template--27595751620975__8e29f252-b649-4ab5-b0a5-9ff447a9346c" class="shopify-section section"><section class="mountainOils sec_pad"> 12895 <div class="SectionWrapper"> 12896 12897 <div class="sec-heading text-center"> 12898 <h3>Why Rocky Mountain Oils</h3> 12899 </div> 12900 12901 <div class="row"><div class="col-xl-3 col-lg-6"> 12902 <div class="oilsWrap"> 12903 <img src="//www.rockymountainoils.com/cdn/shop/files/saafe_192x192.webp?v=1720725642" width="199" height="193" alt="SAFE Promise"> 12904 <h4>SAFE Promise</h4> 12905 <p>Our S.A.A.F.E Promise is our guarantee to you that <strong><a href="https://www.rockymountainoils.com/collections/essential-oils">our essential oils</a></strong> are what we say they are: 100% pure, natural, and authentic. To verify the purity and quality of our oils, we provide you with the independent lab <strong><a href="/pages/get-gcms-test-results">GC/MS test</a></strong> results for each oil. We are passionate about providing you and your family with safe and effective natural resources to revitalize your health.</p> 12906 </div> 12907 </div>
12907<div class="col-xl-3 col-lg-6"> 12908 <div class="oilsWrap"> 12909 <img src="//www.rockymountainoils.com/cdn/shop/files/satisfaction_192x192.webp?v=1720725658" width="191" height="192" alt="Satisfaction Guarantee"> 12910 <h4>Satisfaction Guarantee</h4> 12911 <p>We are committed to providing you with 100% natural and pure essential oils and natural products that work for your health and wellness needs. Shop risk-free and discover the healing powers of nature with our <strong><a href="/pages/return-policy">90-Day Satisfaction Guarantee</a></strong> and free return.</p> 12912 </div> 12913 </div><div class="col-xl-3 col-lg-6"> 12914 <div class="oilsWrap"> 12915 <img src="//www.rockymountainoils.com/cdn/shop/files/vision_192x192.webp?v=1720725692" width="216" height="192" alt="Rocky Mountain Vision"> 12916 <h4>Rocky Mountain Vision</h4> 12917 <p>From the air you breathe to the oils you use, the Earth provides a whole pharmacy full of natural remedies essential to your wellbeing. Experience the healing powers of nature with essential oils that are <strong><a href="/pages/environmental-sustainability">sustainably</a></strong> sourced and 100% pure and authentic, just as Mother Nature intended.</p> 12918 </div> 12919 </div><div class="col-xl-3 col-lg-6"> 12920 <div class="oilsWrap"> 12921 <img src="//www.rockymountainoils.com/cdn/shop/files/quality_192x192.webp?v=1720725707" width="190" height="190" alt="Our Commitment To Quality"> 12922 <h4>Our Commitment To Quality</h4> 12923 <p>Our commitment to quality starts right from the beginning. All of our oils are sourced from farms around the globe that practice sustainable farming methods to ensure the quality and efficacy of the oil. Each oil is rigorously and independently tested before it reaches your hands.</p> 12924 </div> 12925 </div></div> 12926 12927 <div class="view-all-review"> 12928 <a href="/pages/quality" aria-label="Learn more about our quality standards">Learn More</a> 12929 </div> 12930 </div> 12931</section> 12932 12933 12934</section><div id="shopify-section-template--27595751620975__0e53a1d4-a07b-46d1-b116-e9b8d01fda20" class="shopify-section"><section class="Blogs sec_pad"> 12935 12936 <div class="sec-heading"> 12937 <h3>The Blend: A Blog by Rocky Mountain Oils</h3> 12938 </div> 12939 12940 <div class="owl-carousel carousel-fade owl-theme slider-section" id="BlogsSlider"> 12941 12942 <div class="blog_wrap"> 12943 <div class="blog_thumb"> 12944 <a href="/blogs/wellness/the-ultimate-diy-guide-crafting-wellness-rmos-most-popular-recipes" aria-label="The Ultimate DIY Guide: Crafting Wellness with Rocky Mountain Oilsâ Most Popular Recipes"> 12945 <img src="//www.rockymountainoils.com/cdn/shop/articles/Lead_gen_ads_eb4e2001-e9cf-40f4-a316-edcfea358215_350x250_crop_center.png?v=1781189576" alt="The Ultimate DIY Guide: Crafting Wellness with Rocky Mountain Oilsâ Most Popular Recipes" height="250" width="350"/></a> 12946 </div> 12947 <div class="blog_detail"> 12948 <a href="/blogs/wellness/the-ultimate-diy-guide-crafting-wellness-rmos-most-popular-recipes" aria-label="The Ultimate DIY Guide: Crafting Wellness with Rocky Mountain Oilsâ Most Popular Recipes"><h5>The Ultimate DIY Guide: Crafting Wellness with Rocky Mountain Oilsâ Most Popular Recipes</h5></a> 12949 <p>CLICK HERE TO DOWNLOAD Welcome to the aromatic realm of Rocky Mountain Oils, where nature meets self-care in our curated collection of DIY recipes! Dive deep into a world...</p> 12950 <a class="read_more" href="/blogs/wellness/the-ultimate-diy-guide-crafting-wellness-rmos-most-popular-recipes" aria-label="Read more about The Ultimate DIY Guide: Crafting Wellness with Rocky Mountain Oilsâ Most Popular Recipes">Read more</a> 12951 </div> 12952 </div> 12953 12954 <div class="blog_wrap"> 12955 <div class="blog_thumb"> 12956 <a href="/blogs/essential-oil-basics/frankincense-benefits" aria-label="Frankincense Benefits, Uses, and Myths: Unlocking Nature's Miracle"> 12957 <img src="//www.rockymountainoils.com/cdn/shop/articles/Blog_Post_Images_7_350x250_crop_center.webp?v=1774382466" alt="Frankincense Benefits, Uses, and Myths: Unlocking Nature's Miracle" height="250" width="350"/></a> 12958 </div> 12959 <div class="blog_detail"> 12960 <a href="/blogs/essential-oil-basics/frankincense-benefits" aria-label="Frankincense Benefits, Uses, and Myths: Unlocking Nature's Miracle"><h5>Frankincense Benefits, Uses, and Myths: Unlocking Nature's Miracle</h5></a> 12961 <p>Frankincense, often hailed as the "king of oils," has a rich history dating back thous
12961ands of years. Known for its distinctive aroma and profound healing properties, this resin has...</p> 12962 <a class="read_more" href="/blogs/essential-oil-basics/frankincense-benefits" aria-label="Read more about Frankincense Benefits, Uses, and Myths: Unlocking Nature's Miracle">Read more</a> 12963 </div> 12964 </div> 12965 12966 <div class="blog_wrap"> 12967 <div class="blog_thumb"> 12968 <a href="/blogs/essential-oil-basics/rosemary-essential-oil-for-hair" aria-label="Rosemary Essential Oil for Hair: Unlock 7 Transformative Tips"> 12969 <img src="//www.rockymountainoils.com/cdn/shop/articles/Blog_Post_Images_1_30b86c3a-f853-4515-a3c7-ad1ad25b0817_350x250_crop_center.webp?v=1776955509" alt="Rosemary Essential Oil for Hair: Unlock 7 Transformative Tips" height="250" width="350"/></a> 12970 </div> 12971 <div class="blog_detail"> 12972 <a href="/blogs/essential-oil-basics/rosemary-essential-oil-for-hair" aria-label="Rosemary Essential Oil for Hair: Unlock 7 Transformative Tips"><h5>Rosemary Essential Oil for Hair: Unlock 7 Transformative Tips</h5></a> 12973 <p>Introduction to Rosemary Oil Background and Benefits Rosemary oil is not just a kitchen staple; it's a powerhouse in hair care. This aromatic oil has been cherished for centuries,...</p> 12974 <a class="read_more" href="/blogs/essential-oil-basics/rosemary-essential-oil-for-hair" aria-label="Read more about Rosemary Essential Oil for Hair: Unlock 7 Transformative Tips">Read more</a> 12975 </div> 12976 </div> 12977 12978 <div class="blog_wrap"> 12979 <div class="blog_thumb"> 12980 <a href="/blogs/essential-oil-basics/myrrh-benefits" aria-label="Myrrh Benefits: 6 Surprising Health Benefits Unveiled"> 12981 <img src="//www.rockymountainoils.com/cdn/shop/articles/8_3ea1372b-e60d-4e0c-83e9-f0c79e78dcdc_350x250_crop_center.png?v=1774380135" alt="Myrrh Benefits: 6 Surprising Health Benefits Unveiled" height="250" width="350"/></a> 12982 </div> 12983 <div class="blog_detail"> 12984 <a href="/blogs/essential-oil-basics/myrrh-benefits" aria-label="Myrrh Benefits: 6 Surprising Health Benefits Unveiled"><h5>Myrrh Benefits: 6 Surprising Health Benefits Unveiled</h5></a> 12985 <p>Myrrh has been a symbol of health, spirituality, and protection for thousands of years. Originating from the resin of the Commiphora myrrha tree, myrrh's rich history intertwines with various...</p> 12986 <a class="read_more" href="/blogs/essential-oil-basics/myrrh-benefits" aria-label="Read more about Myrrh Benefits: 6 Surprising Health Benefits Unveiled">Read more</a> 12987 </div> 12988 </div> 12989 12990 <div class="blog_wrap"> 12991 <div class="blog_thumb"> 12992 <a href="/blogs/essential-oil-basics/what-oil-best-for-massage" aria-label="What Oil Is Best for Massage: Unforgettable Massage Experience"> 12993 <img src="//www.rockymountainoils.com/cdn/shop/articles/Blog_Post_Images_8_350x250_crop_center.webp?v=1776092784" alt="What Oil Is Best for Massage: Unforgettable Massage Experience" height="250" width="350"/></a> 12994 </div> 12995 <div class="blog_detail"> 12996 <a href="/blogs/essential-oil-basics/what-oil-best-for-massage" aria-label="What Oil Is Best for Massage: Unforgettable Massage Experience"><h5>What Oil Is Best for Massage: Unforgettable Massage Experience</h5></a> 12997 <p>Massages are not just about the techniques; they're about creating an experience that soothes the mind, body, and soul. One pivotal element that transforms a good massage into a...</p> 12998 <a class="read_more" href="/blogs/essential-oil-basics/what-oil-best-for-massage" aria-label="Read more about What Oil Is Best for Massage: Unforgettable Massage Experience">Read more</a> 12999 </div> 13000 </div> 13001 13002 <div class="blog_wrap"> 13003 <div class="blog_thumb"> 13004 <a href="/blogs/essential-oil-basics/how-to-make-oregano-oil" aria-label="How to Make Oregano Oil: Discover the Process in 6 Steps"> 13005 <img src="//www.rockymountainoils.com/cdn/shop/articles/Blog_Post_Images_12_bb2a5785-7e85-4580-a194-6c408264b3d5_350x250_crop_center.webp?v=1776967309" alt="How to Make Oregano Oil: Discover the Process in 6 Steps" height="250" width="350"/></a> 13006 </div> 13007 <div class="blog_detail"> 13008 <a href="/blogs/essential-oil-basics/how-to-make-oregano-oil" aria-label="How to Make Oregano Oil: Discover the Process in 6 Steps"><h5>How to Make Oregano Oil: Discover the Process in 6 Steps</h5></a> 13009 <p>Oregano oil is a powerhouse of wellness, revered for its antimicrobial and anti-inflammatory properties. Originating from the hills of the Mediterranean, this herbal oil has been a staple in...</p> 13010 <a class="read_more" href="/blogs/essential-oil-basics/how-to-make-oregano-oil" aria-label="Read more about How to Make Oregano Oil: Discover the Process in 6 Steps">Read more</a> 13011 </div> 13012 </div></div> 13013</section> 13014 13015 13016 13017</div><section id="shopify-section-template--27595751620975__1716229956fa6f0f11" class="shopify-section section"><div class="page-width"><div id="shopify-block-AbE0zaUJkelRDYkFQK__yotpo_product_reviews_ugc_reviews_carousel_ai79aY" class="shopify-block shopify-app-block"> 13018 13019<div 13020 class="yotpo-widget-instance" 13021 data-yotpo-instance-id="614364" 13022 data-yotpo-product-id=""> 13023</div> 13024 13025 13026 13027</div> 13028</div> 13029 13030 13031</section> 13032 </main> 13033 13034 <div id="shopify-section-footer" class="shopify-section"><footer class="site-footer"> 13035 <div class="footer-widgets-wrap sec_pad"> 13036 <div class="footer-widget footer-widget-logo"> 13037 <div class="footer-logo"><a href="https://www.rockymountainoils.com"> 13038 <img src="//www.rockymountainoils.com/cdn/shop/t/383/assets/rmo-logo.svg?v=119252189530219791611785434280" width="" class="img-fluid" width="120" height="44" alt="Rocky Mountain Oils"/> 13039 </a></div> 13040 <div class="footer-contact-detail"> 13041 <p>Rocky Mountain Oils provides 100% pure essential oils and essential oil products for home, health and beauty so that you can confidently care for yourself.</p> 13042 <p>Customer service hours: M-F 7:00am-4:00pm MST</p> 13043 <div class="flex-inline"> 13044 <p>
13044Send us an email: </p> 13045 <a href="mailto:[email protected]">[email protected]</a> 13046 </div> 13047 <div class="flex-inline"> 13048 <p>Call us: </p> 13049 <a href="tel:+18664938159">1 (866) 493-8159</a> 13050 </div> 13051 </div> 13052 </div> 13053 <div class="footer-widget footer-our-promise"> 13054 <div class="footer-widget-menu"> 13055 <h3>Our Promise To You</h3> 13056 <div class="p-images"> 13057 <a href="/pages/quality"><img src="//www.rockymountainoils.com/cdn/shop/t/383/assets/guarentee.svg?v=94899447874009353951785434197" alt="Guarentee S.A.A.F.E" width="110" height="110" /></a> 13058 <a href="/pages/return-policy"><img src="//www.rockymountainoils.com/cdn/shop/t/383/assets/90-day.svg?v=66437266506578418101785434120" alt="90 Day Risk Free Guarentee" width="110" height="115" /></a> 13059 </div> 13060 </div> 13061 </div><div class="footer-widget footer-widget-second"> 13062 <div class="footer-RMO-menu footer-widget-menu"> 13063 <h3>RMO</h3> 13064 <ul class="footer-menu"><li><a href="/pages/rewards" >Club Oil'ty Rewards</a></li><li><a href="https://www.rockymountainoils.com/products/membership" >Oil'ty Plus Membership</a></li><li><a href="/pages/rocky-mountain-impact-partners" >Rocky Mountain Impact Partners</a></li><li><a href="/pages/wholesale" >Wholesale Program</a></li><li><a href="/pages/subscribe-save" >Subscribe & Save</a></li><li><a href="/pages/get-gcms-test-results" >Your GC/MS Lookup</a></li></ul> 13065 </div> 13066 </div><div class="footer-widget footer-widget-third"> 13067 <div class="footer-RMO-menu footer-widget-menu"> 13068 <h3>Legal</h3> 13069 <ul class="footer-menu"><li><a href="/pages/accessibility-statement" >Accessibility Statement</a></li><li><a href="/pages/shipping-policy" >Shipping Policy</a></li><li><a href="/pages/return-policy" >Return Policy</a></li><li><a href="/pages/privacy-policy" >Privacy Policy</a></li><li><a href="/pages/oilty-tos" >Terms & conditions</a></li><li><a href="/pages/terms-of-service" >Terms of Service</a></li></ul> 13070 </div> 13071 </div><div class="footer-widget footer-widget-fourth"> 13072 <div class="footer-RMO-menu footer-widget-menu"> 13073 <p style="font-size: 18px">About</p> 13074 <ul class="footer-menu"><li><a href="/pages/our-story" >Our Story</a></li><li><a href="/pages/environmental-sustainability" >Sustainability</a></li><li><a href="/pages/we-promise" >We Promise</a></li></ul> 13075 </div> 13076 </div><div class="footer-widget footer-widget-last"> 13077 <p style="font-size: 18px">Sign up for our newsletter</p> 13078 <div class="newsletter-subscription"> 13079 <div style="overflow: hidden;"> 13080 <iframe src="https://rockymountainoils.attn.tv/p/Wdu/newsletter-signup" style="min-height: 340px;" width="380" height="340" title="Newsletter Signup"></iframe> 13081 </div> 13082 </div> 13083 </div></div> 13084 <div class="desclimer sec_pad"> 13085 <div class="footer-widgets-wrap"> 13086 <div class="copyright"> 13087 <p>© 2026. Rocky Mountain Oils, LLC All Rights Reserved</p> 13088 </div> 13089 <div class="desclimer-contect"> 13090 <p>The statements contained herein have not been evaluated by the Food and Drug Administration. Neither Rocky Mountain Oils nor its products are intended for the purpose of diagnosing, treating, curing, or preventing any disease. If you are pregnant, nursing, taking medication, or have a medical condition, consult your physician before using these products.</p> 13091 </div><div class="social-icons"> 13092 <ul class="social-icons-list"><li><a href="https://facebook.com/RockyMountainOils/" target="_blank" rel="noopener noreferrer" aria-label="Facebook (opens in new window)"><img src="//www.rockymountainoils.com/cdn/shop/t/383/assets/facebook.svg?v=21693137240248599311785434188" alt="Facebook" width="22" height="24"/></a></li><li><a href="https://pinterest.com/rmoessentialoil/" target="_blank" rel="noopener noreferrer" aria-label="Pinteres (opens in new window)"><img src="//www.rockymountainoils.com/cdn/shop/t/383/assets/pinterest.svg?v=114049474308600356991785434246" alt="Pinterest" width="22" height="24"/></a></li><li><a href="https://instagram.com/rockymountainoils/" target="_blank" rel="noopener noreferrer" aria-label="Instagram (opens in new window)"><img src="//www.rockymountainoils.com/cdn/shop/t/383/assets/instagram.svg?v=72458598320040896551785434205" alt="Instagram" width="22" height="24"/></a></li><li><a href="https://www.youtube.com/channel/UChhqiDDsyWcABEbZ0_Pk3og" target="_blank" rel="noopener noreferrer" aria-label="YouTube (opens in new window)"><img src="//www.rockymountainoils.com/cdn/shop/t/383/assets/youtube.svg?v=142282516816672010331785434334" alt="Youtube" width="22" height="24"/></a></li></ul> 13093 </div></div> 13094 </div> 13095 </footer> 13096 13097<style> #shopify-section-footer .footer-contact-detail a {font-weight: bold;} </style></div> 13098 <div class="overlay"></div> 13099 13100
13100<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js" integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM" crossorigin="anonymous" defer></script>
vendor: 1 bytes, line 13100
13100
13101<script src="//www.rockymountainoils.com/cdn/shop/t/383/assets/owl.carousel.min.js?v=131092467645937852031785434232" defer></script>
vendor: 1 bytes, line 13101
13101
13102<script src="//www.rockymountainoils.com/cdn/shop/t/383/assets/isotope.pkgd.min.js?v=181507024733179475121785434206" defer></script>
vendor: 1 bytes, line 13102
13102
13103<script src="//www.rockymountainoils.com/cdn/shop/t/383/assets/slick.min.js?v=180526013488596283431785434294" defer></script>
vendor: 1 bytes, line 13103
13103
13104<script src="//www.rockymountainoils.com/cdn/shop/t/383/assets/shopify-money.js?v=82255594563314818281785434292" defer></script>
vendor: 1 bytes, line 13104
13104
13105<script src="//www.rockymountainoils.com/cdn/shop/t/383/assets/script.js?v=28020244124196500251785944811" defer></script>
vendor: 1 bytes, line 13105
13105
13106<script src="//www.rockymountainoils.com/cdn/shop/t/383/assets/cart-sidebar.js?v=170066356698547187711790969353?v=1791062567" defer></script>
13106 13107 13108
13108<script> 13109 window.shopUrl = 'https://www.rockymountainoils.com'; 13110 window.routes = { 13111 cart_add_url: '/cart/add', 13112 cart_change_url: '/cart/change', 13113 cart_update_url: '/cart/update', 13114 cart_url: '/cart' 13115 }; 13116 13117 window.cartStrings = { 13118 error: `There was an error while updating your cart. Please try again.`, 13119 quantityError: `You can only add [quantity] of this item to your cart.` 13120 } 13121 13122 window.variantStrings = { 13123 addToCart: `Add to cart`, 13124 soldOut: `Sold out`, 13125 unavailable: `Unavailable`, 13126 } 13127 13128 window.accessibilityStrings = { 13129 imageAvailable: `Image [index] is now available in gallery view`, 13130 shareSuccess: `Link copied to clipboard`, 13131 pauseSlideshow: `Pause slideshow`, 13132 playSlideshow: `Play slideshow`, 13133 } 13134 13135 13136 yearly_free_status = 'false', 13137 yearly_free_product = '48170965172546' 13138 </script>
13138 13139 13140 13141
13141<script async src="https://cdn-widgetsrepository.yotpo.com/v1/loader/1mzqlpuEeK12ZA7oqhI7dA"></script>
13141 13142 13143
13143<script> 13144 var check_edd_data_from_liquid = '1'; 13145 </script>
13145 13146
13146<script src="//www.rockymountainoils.com/cdn/shop/t/383/assets/edd_specific_product_msg.js?v=136012229591074505521785434403" type="text/javascript"></script>
vendor: 2 bytes, line 13146
13146
13147<script src="//www.rockymountainoils.com/cdn/shop/t/383/assets/edd_collection_msg.js?v=130879527554976694821785434403" type="text/javascript"></script>
vendor: 2 bytes, line 13147
13147
13148<script src="//www.rockymountainoils.com/cdn/shop/t/383/assets/edd_product_tag_msg.js?v=8380619751686092641785434403" type="text/javascript"></script>
vendor: 2 bytes, line 13148
13148
13149<script src="//www.rockymountainoils.com/cdn/shop/t/383/assets/edd_product_vendor_msg.js?v=52388043027845322851785434402" type="text/javascript"></script>
vendor: 2 bytes, line 13149
13149
13150<script src="//www.rockymountainoils.com/cdn/shop/t/383/assets/edd_all_product_msg.js?v=108840368777819333221785434403" type="text/javascript"></script>
vendor: 2 bytes, line 13150
13150
13151<script src="//www.rockymountainoils.com/cdn/shop/t/383/assets/edd_exclude_product.js?v=50353361297173646151785434403" type="text/javascript"></script>
vendor: 2 bytes, line 13151
13151
13152<script src="//www.rockymountainoils.com/cdn/shop/t/383/assets/edd_general_settings.js?v=33170465555808707961785434403" type="text/javascript"></script>
13152 13153 13154 �� 13155
13156<script> 13157 13158 var edd_is_homepage = `1`; 13159 13160 if(edd_is_homepage == '1' ){ 13161 13162 13163 13164 }else{ 13165 13166 var edd_product_id = ``; 13167 var edd_product_title = ``; 13168 var edd_product_handle = ``; 13169 var edd_product_type = ``; 13170 var edd_product_vendor = ``; 13171 var edd_check_collection_id = ``; 13172 var edd_product_qty = ``; 13173 var edd_product_weight = ``; 13174 var product_avaiable = ``; 13175 var edd_product_tag = new Array(); 13176 var edd_collection_id = new Array(); 13177 13178 for (i = 0; i < document.getElementsByClassName("edd_product_tag").length; i++) { 13179 edd_product_tag.push(document.querySelector(".product_tag_"+i).innerText); 13180 } 13181 13182 13183 for (i = 0; i < document.getElementsByClassName("edd_product_collection").length; i++) { 13184 edd_collection_id.push(document.querySelector(".product_collection_"+i).innerText); 13185 } 13186 13187 } 13188 13189 var edd_zipcode_enable = '0'; 13190 var edd_zipcode_list = 'not_set'; 13191 13192 var product_have_qty = 0; 13193 var edd_message = 'not_set'; 13194 var edd_preview_design = 'not_set'; 13195 var set_specific_msg = 0; 13196 var is_exclude_product = '0'; 13197 var edd_data; 13198 var edd_store_country,edd_store_country_code ,edd_user_country ,edd_user_country_code,edd_app_plan,edd_country_name,edd_country_code,edd_store_id; 13199 //var edd_shop = delivery_shop = Shopify.shop; 13200 if(typeof delivery_shop !== 'undefined'){ 13201 edd_shop = delivery_shop; 13202 }else{ 13203 edd_shop = Shopify.shop; 13204 } 13205 13206 var is_set_msg_for_product = '0'; 13207 var is_set_msg_for_product_type = '0'; 13208 var is_set_msg_for_product_tag = '0'; 13209 var is_set_msg_for_product_vendor = '0'; 13210 var is_set_msg_for_all_product = '0'; 13211 var is_set_msg_for_collection = '0'; 13212 13213function setEDDCookie(cname, cvalue){ 13214 const d = new Date(); 13215 d.setTime(d.getTime() + (24 * 60 * 60 * 1000)); 13216 let expires = "expires="+d.toUTCString(); 13217 document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/"; 13218} 13219function getEDDCookie(cname){ 13220//console.log('***** get EDD cookie') 13221 let name = cname + "="; 13222 let decodedCookie = decodeURIComponent(document.cookie); 13223 let ca = decodedCookie.split(';'); 13224 for(let i = 0; i <ca.length; i++) { 13225 let c = ca[i]; 13226 while (c.charAt(0) == ' ') { 13227 c = c.substring(1); 13228 } 13229 if (c.indexOf(name) == 0) { 13230 return c.substring(name.length, c.length); 13231 } 13232 } 13233 return ""; 13234 } 13235 13236function checkEDDCookie($){ 13237 var check_edd_data = getEDDCookie("edd_data"); 13238 13239 if (check_edd_data != ""){ 13240 check_edd_data = JSON.parse(check_edd_data); 13241 //console.log('=> Cokkie set ') 13242 setEDDCountry(check_edd_data) 13243 13244 }else { 13245 //useedd_datarname = prompt("Please enter your name:", ""); 13246 checkUserCountry($); 13247 //console.log('=> cookie not set'); 13248 } 13249} 13250 13251function setEDDCountry(check_edd_data){ 13252 edd_store_country_name = check_edd_data.store_country_name; 13253 edd_store_country_code = check_edd_data.store_country_code; 13254 edd_user_country_name = check_edd_data.user_country_name; 13255 edd_user_country_code = check_edd_data.user_country_code; 13256 //edd_app_plan = edd_plan_info.plan; /* 06-10-2022 */ 13257 edd_app_plan = check_edd_data.plan; 13258 edd_store_id = check_edd_data.store_id; 13259 edd_trial_store = check_edd_data.trial_store; 13260 edd_allowed_store = check_edd_data.allowed_store; 13261 // console.log('edd_store_country '+edd_store_country_name) 13262 // console.log('edd_store_country_code '+edd_store_country_code) 13263 // console.log('edd_user_country '+edd_user_country_name) 13264 // console.log('edd_user_country_code '+edd_user_country_code) 13265 // console.log('edd_app_plan '+edd_app_plan) 13266 // console.log('edd_store_id '+edd_store_id) 13267 13268 if(edd_store_id > 2614 || edd_shop == 'purrfetto.myshopify.com' || edd_shop == 'estimated-delivery-date-time.myshopify.com'){ 13269 <!-- check product quantity --> 13270 console.log('Qty => based on product qty') 13271 if(edd_product_qty > 0){product_have_qty = 1;} 13272 }else{ 13273 <!-- check product avaiable --> 13274 console.log('Qty => based on product avaiable') 13275 if(product_avaiable == 'true'){product_have_qty = 1;} 13276 } 13277
13278 getSpecificEDDMsg(); 13279 13280 if(set_specific_msg == 1){ 13281 edd_country_name = edd_user_country_name; 13282 edd_country_code = edd_user_country_code; 13283 }else{ 13284 edd_country_name = edd_store_country_name; 13285 edd_country_code = edd_store_country_code; 13286 } 13287 13288 //console.log('product_avaiable '+product_avaiable+' product_have_qty '+product_have_qty) 13289 13290 13291} 13292 13293/* changelog */ 13294 function checkUserCountry($){ 13295 //console.log('=> get user country ajax ') 13296 $.ajax({ 13297 url: "//estimated-delivery-days.setubridgeapps.com/estimated-delivery-days/app/src/public/checkEDDPayment", 13298 data : {shop:edd_shop}, 13299 type:"POST", 13300 success: function(response){ 13301 edd_data = response; 13302 check_edd_data = JSON.parse(edd_data); 13303 13304 //console.log(typeof(edd_data)) 13305 13306 //console.log(edd_data) 13307 setEDDCountry(check_edd_data); 13308 13309 checkEddDataInterval = setInterval(function(){ 13310 var check_edd_data = getEDDCookie("edd_data"); 13311 13312 if (check_edd_data == ""){ 13313 setEDDCookie("edd_data", edd_data); 13314 clearInterval(checkEddDataInterval); 13315 } 13316 13317 },700); 13318 13319 13320 13321 13322 } 13323 }) 13324 } 13325/* changelog */ 13326 13327 13328var loadScriptInLiquidData = function (url, callback) { 13329 var script = document.createElement('script'); 13330 script.type = 'text/javascript'; 13331 if (script.readyState) { 13332 script.onreadystatechange = function () { 13333 if (script.readyState == 'loaded' || script.readyState == 'complete') { 13334 script.onreadystatechange = null; 13335 callback(); 13336 } 13337 }; 13338 } else { 13339 script.onload = function () { 13340 callback(); 13341 }; 13342 } 13343 script.src = url; 13344 document.getElementsByTagName('head') [0].appendChild(script); 13345 }; 13346 13347 /* check Jquery loaded in theme or not */ 13348 if((typeof jQuery === 'undefined') || (parseFloat(jQuery.fn.jquery) < 1.7)){ 13349 //console.log(' ***** add jquery ******') 13350 loadScriptInLiquidData('//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js', function () { 13351 jQuery191 = jQuery.noConflict(true); 13352 checkEDDCookie(jQuery191); 13353 }); 13354 13355 }else{ 13356 //console.log(' ***** jquery added ******') 13357 checkEDDCookie(jQuery); 13358 } 13359 13360 function getSpecificEDDMsg(){ 13361 //check exclude product 13362 if(typeof edd_exclude_product != 'undefined' && edd_exclude_product != 'not_set' && edd_exclude_product.filter(e => e.check_rule_for == edd_product_id).length > 0){ 13363 is_exclude_product = '1'; 13364 console.log('=> exclude product') 13365 } 13366 13367 else { 13368 // check edd message for product 13369 if(typeof edd_specific_product_msg != 'undefined' && edd_specific_product_msg != 'not_set' && edd_specific_product_msg.filter(e => e.check_rule_for == edd_product_id).length > 0){ 13370 console.log('Specific Mesage type => Product ') 13371 setEddMessageFromLiquid(edd_specific_product_msg,edd_product_id,'product'); 13372 //console.log('is_set_msg_for_product '+is_set_msg_for_product) 13373 } 13374 13375 // check edd message for collection 13376 if(set_specific_msg == 0 && typeof edd_collection_msg != 'undefined' && edd_collection_msg != 'not_set' ){ 13377 console.log('Specific Mesage type => Collection ') 13378 //setEddMessageFromLiquid(edd_collection_msg,edd_collection_id) 13379 for(i=0; i<edd_collection_id.length; i++){ 13380 setEddMessageFromLiquid(edd_collection_msg,edd_collection_id[i],'collection'); 13381 if(is_set_msg_for_collection == '1'){ 13382 break; 13383 } 13384 } 13385 } 13386 13387 // check edd message for product vendor 13388 if(set_specific_msg == 0 && typeof edd_product_vendor_msg != 'undefined' && edd_product_vendor_msg != 'not_set' && edd_product_vendor_msg.filter(e => e.check_rule_for == edd_product_vendor).length > 0){ 13389 console.log('Specific Mesage type => Product Vendor') 13390 setEddMessageFromLiquid(edd_product_vendor_msg,edd_product_vendor,'vendor') 13391 } 13392 13393 // check edd message for product tag 13394 if(set_specific_msg == 0 && typeof edd_product_tag_msg != 'undefined' && edd_product_tag_msg != 'not_set'){ 13395 console.log('Specific Mesage type => Product Tag') 13396 for(i=0; i<edd_product_tag.length; i++){ 13397 setEddMessageFromLiquid(edd_product_tag_msg,edd_product_tag[i],'tag'); 13398 if(is_set_msg_for_product_tag == '1'){ 13399 break; 13400 } 13401 } 13402 } 13403 13404 // check edd message for All product 13405 if(set_specific_msg == 0 && typeof edd_all_product_msg != 'undefined' && edd_all_product_msg != 'not_set' && edd_all_product_msg.filter(e => e.check_rule_for == 'all_product').length > 0){ 13406 console.log('Specific Mesage type => All Product') 13407 setEddMessageFromLiquid(edd_all_product_msg,'all_product','all_product') 13408 } 13409 } 13410 } 13411 13412 function setEddMessageFromLiquid(edd_msg_list,check_with,edd_rule_type){ 13413 13414 check_edd__in_out_stock_spe_c = edd_msg_list.filter(e => e.check_rule_for == check_with && e.is_instock == product_have_qty && e.country_code == edd_user_country_code) 13415 check_edd_both_edd_spe_c = edd_msg_list.filter(e => e.check_rule_for == check_with && e.is_instock == 2 && e.country_code == edd_user_country_code ) 13416 check_edd__in_out_stock_all_c = edd_msg_list.filter(e => e.check_rule_for == check_with && e.is_instock == product_have_qty && e.country_code == 'all_country') 13417 check_edd_both_edd_all_c = edd_msg_list.filter(e => e.check_rule_for == check_with && e.is_instock == 2 && e.country_code == 'all_country' ) 13418 13419 if(check_edd__in_out_stock_spe_c.length > 0){ 13420 if(typeof(check_edd__in_out_stock_spe_c[0].zipcode_enable) != "undefined"){ 13421 if(check_edd__in_out_stock_spe_c[0].zipcode_enable == "1"){
13422 edd_zipcode_enable = check_edd__in_out_stock_spe_c[0].zipcode_enable; 13423 edd_zipcode_list = check_edd__in_out_stock_spe_c[0].zipcode_list; 13424 } 13425 } 13426 edd_preview_design = check_edd__in_out_stock_spe_c[0].preview_design; 13427 edd_message = check_edd__in_out_stock_spe_c[0].message; 13428 set_specific_msg = 1; 13429 checkSpecificMsgFor(edd_rule_type); 13430 //console.log('message => '+edd_message) 13431 //console.log('edd_preview_design => '+edd_preview_design) 13432 } 13433 else if(check_edd_both_edd_spe_c.length > 0){ 13434 if(typeof(check_edd_both_edd_spe_c[0].zipcode_enable) != "undefined"){ 13435 if(check_edd_both_edd_spe_c[0].zipcode_enable == "1"){ 13436 // console.log("(check_edd_both_edd_spe_c[0].zipcode_enable",check_edd_both_edd_spe_c[0].zipcode_enable) 13437 13438 edd_zipcode_enable = check_edd_both_edd_spe_c[0].zipcode_enable; 13439 edd_zipcode_list = check_edd_both_edd_spe_c[0].zipcode_list; 13440 13441 // $(".deliverydate.sb_delivery").before(zipcode_widget); 13442 // $("body").append(zipcode_widget_css); 13443 // $(".deliverydate.sb_delivery").hide(); 13444 } 13445 } 13446 13447 edd_preview_design = check_edd_both_edd_spe_c[0].preview_design; 13448 edd_message = check_edd_both_edd_spe_c[0].message; 13449 set_specific_msg = 1; 13450 checkSpecificMsgFor(edd_rule_type); 13451 //console.log('message => '+edd_message) 13452 //console.log('edd_preview_design => '+edd_preview_design) 13453 } 13454 else if(check_edd__in_out_stock_all_c.length > 0){ 13455 if(typeof(check_edd__in_out_stock_all_c[0].zipcode_enable) != "undefined"){ 13456 if(check_edd__in_out_stock_all_c[0].zipcode_enable == "1"){ 13457 edd_zipcode_enable = check_edd__in_out_stock_all_c[0].zipcode_enable; 13458 edd_zipcode_list = check_edd__in_out_stock_all_c[0].zipcode_list; 13459 } 13460 } 13461 edd_preview_design = check_edd__in_out_stock_all_c[0].preview_design; 13462 edd_message = check_edd__in_out_stock_all_c[0].message; 13463 set_specific_msg = 1; 13464 checkSpecificMsgFor(edd_rule_type); 13465 //console.log('message => '+edd_message) 13466 //console.log('edd_preview_design => '+edd_preview_design) 13467 } 13468 else if(check_edd_both_edd_all_c.length > 0){ 13469 if(typeof(check_edd_both_edd_all_c[0].zipcode_enable) != "undefined"){ 13470 if(check_edd_both_edd_all_c[0].zipcode_enable == "1"){ 13471 edd_zipcode_enable = check_edd_both_edd_all_c[0].zipcode_enable; 13472 edd_zipcode_list = check_edd_both_edd_all_c[0].zipcode_list; 13473 } 13474 } 13475 edd_preview_design = check_edd_both_edd_all_c[0].preview_design; 13476 edd_message = check_edd_both_edd_all_c[0].message; 13477 set_specific_msg = 1; 13478 checkSpecificMsgFor(edd_rule_type); 13479 //console.log('message => '+edd_message) 13480 //console.log('edd_preview_design => '+edd_preview_design) 13481 } 13482 13483 13484 13485 } 13486 13487 function checkSpecificMsgFor(edd_rule_type){ 13488 if(edd_rule_type == 'product'){ 13489 is_set_msg_for_product = '1'; 13490 } 13491 if(edd_rule_type == 'collection'){ 13492 is_set_msg_for_collection = '1'; 13493 } 13494 if(edd_rule_type == 'tag'){ 13495 is_set_msg_for_product_tag = '1'; 13496 } 13497 if(edd_rule_type == 'vendor'){ 13498 is_set_msg_for_product_vendor = '1'; 13499 } 13500 if(edd_rule_type == 'all_product'){ 13501 is_set_msg_for_all_product = '1'; 13502 } 13503 } 13504</script>
13504 13505 13506
13506<script 13507 src="https://widgets.leadconnectorhq.com/loader.js" 13508 data-resources-url="https://widgets.leadconnectorhq.com/chat-widget/loader.js" 13509 data-widget-id="691c75f7540320b6d60c3355" > 13510</script>
13510 13511
13512<script> 13513 (function () { 13514 function apply(img) { 13515 if (img.getAttribute('width') && img.getAttribute('height')) return; 13516 if (img.naturalWidth && img.naturalHeight) { 13517 img.setAttribute('width', img.naturalWidth); 13518 img.setAttribute('height', img.naturalHeight); 13519 } 13520 } 13521 function hook(img) { 13522 if (img.complete) { 13523 apply(img); 13524 } else { 13525 img.addEventListener('load', function () { apply(this); }, { once: true }); 13526 } 13527 } 13528 function scan(root) { 13529 var imgs = (root || document).querySelectorAll('img:not([width]), img:not([height])'); 13530 for (var i = 0; i < imgs.length; i++) hook(imgs[i]); 13531 } 13532 function run() { 13533 scan(document); 13534 new MutationObserver(function (muts) { 13535 for (var i = 0; i < muts.length; i++) { 13536 var added = muts[i].addedNodes; 13537 for (var j = 0; j < added.length; j++) { 13538 var n = added[j]; 13539 if (n.nodeType !== 1) continue; 13540 if (n.tagName === 'IMG') hook(n); 13541 else if (n.querySelectorAll) scan(n); 13542 } 13543 } 13544 }).observe(document.body, { childList: true, subtree: true }); 13545 } 13546 if (document.readyState === 'loading') { 13547 document.addEventListener('DOMContentLoaded', run); 13548 } else { 13549 run(); 13550 } 13551 })(); 13552</script>
13552 13553 </div> 13554 <div id="shopify-block-AM05QbkZpaG5MWU93V__18228966181090706294" class="shopify-block shopify-app-block"> 13555 13556 13557
13557<script> 13558 window.lbupsellVersion = 2; 13559 </script>
13559 13560 13561 13562
13563<script> 13564 13565 13566 window.lbupsellToken = "52974d4670321ba2db8912023a9c10ac" 13567 13568 13569</script>
13569 13570
13571<script> 13572 13573 window.lbInitMode = "immediate"; 13574 13575 window.lbComponentSrc = "https://cdn.shopify.com/extensions/01a0ec21-7369-78a6-b9c0-c07227d664ec/lb-upsell-451/assets/lb-upsell-components.esm.js";</script>
13575 13576
13577<script type="text/javascript" src="https://cdn.shopify.com/extensions/01a0ec21-7369-78a6-b9c0-c07227d664ec/lb-upsell-451/assets/lb-utils.js" defer="defer"></script>
13577 13578 13579</div><div id="shopify-block-AZkhhZkNBUDVJSzlWN__12342438634123318931" class="shopify-block shopify-app-block"> 13580 13581 13582 13583 13584 13585 13586 13587 13588 13589<xb-wishlist-modal></xb-wishlist-modal> 13590 13591 13592<xb-wishlist-float></xb-wishlist-float> 13593 13594 13595<xb-wishlist-notification-popup></xb-wishlist-notification-popup> 13596 13597 13598<xb-wishlist-header-auto></xb-wishlist-header-auto> 13599 13600 13601 13602<xb-wishlist></xb-wishlist> 13603
13604<script> 13605 { 13606 const XBWishlistConfig = { 13607 url: {"updateTime":1770742429271,"url":"https://cdn.xobuilder.app/rocky-mountain-oils/wishlist/settings.json?t=1770742429271"}, 13608 currency: '${{amount}}', 13609 language: 'en', 13610 customerId: '', 13611 myShopify: 'rocky-mountain-oils.myshopify.com', 13612 productId: 'null', 13613 variantId: 'null', 13614 collectionSelector: '', 13615 cartItemSelector: '', 13616 primaryLocale: 'en', 13617 currentPage: 'index', 13618 lastActionTimes: {"6a79f26bccb8fbf63a29f2f5":1786376811931,"6a79fa7ec6b3b9433ca45237":1786378878476,"6a5ce0fa340159363376dc8e":1786381500802,"6a7a3e67c6b3b9433cac88d0":1786678315099,"6a7a4066c6b3b9433cacc377":1786396864728,"6a7a40e8c6b3b9433cacd062":1786396904552,"6a7a4fdaccb8fbf63a35166f":1786400730744,"6a7a5501c6b3b9433caec163":1786402049769,"6a7a55186f2befb4af14dfab":1786402151710,"6a7a550dc6b3b9433caec29a":1786403518155,"6a7a597d6f2befb4af156afe":1786403515891,"6a7a598778ed8db313341b53":1786403207931,"6a7a7acec6b3b9433cb28fdc":1786411726590,"6a7a7cb6ccb8fbf63a3f10c3":1786412261059,"6a7a8b8378ed8db3133907b2":1786416140483,"6a7a8dadc6b3b9433cb48562":1786416558917,"6a7a9de978ed8db3133b24a0":1786420713561,"6a7aa615c6b3b9433cb75908":1786422805980,"6a7b071a78ed8db31347fdee":1786447642778,"6a7b216578ed8db3134c176e":1788281671298,"6a7b25336f2befb4af2d95d4":1786455347700,"6a5d20cbdcd393ae84f07aee":1786464735810,"69e52eb7ebc922b1134b7c7f":1786458832767,"6a7b33246f2befb4af2f91d7":1786458935155,"6a7b3e6a6f2befb4af3187e9":1786462106844,"6a7b441accb8fbf63a59b77a":1786463392964,"6a5e64333401593633b239b5":1786464126705,"6a7b47ca6f2befb4af335fd2":1786464202165,"6a7b48ebccb8fbf63a5a5d68":1786464491320,"6a7b4d0cccb8fbf63a5b1b8f":1786465548414,"6a7b5ad4c6b3b9433cd07938":1786469076219,"6970bab216ffc49f8a4dcd72":1786469440136,"6a7b5c376f2befb4af3bc427":1786469945506,"6a7b75716f2befb4af3f3391":1786475889362,"6a7b79baccb8fbf63a614fdc":1786476986626,"6a7b87dcccb8fbf63a62e190":1786480628768,"6a7b8b2378ed8db3135bbfae":1786481861547,"6a7b91526f2befb4af4271bb":1786483026922,"6a7b9228ccb8fbf63a643670":1786483240626,"6a7b94d66f2befb4af42cabd":1786483933866,"6a7ba11eccb8fbf63a65e23f":1786487070631,"6a7ba883c6b3b9433ce00a58":1786488963649,"6a7bb579ccb8fbf63a684477":1786492442931,"6a7bc1e4ccb8fbf63a69a829":1786496385052,"6a7bd1c9c6b3b9433ce4be99":1786499529437,"6a7bdb196f2befb4af4ac80a":1786501913353,"6a7befc6ccb8fbf63a6eabb5":1786507206873,"6a7bf0d8c6b3b9433ce80065":1786507480128,"6a7bf467ccb8fbf63a6f3bba":1786508391410,"6a7c1313c6b3b9433ceb9854":1786516244960,"6a79f0a8c6b3b9433ca2fc14":1786533447528,"6a7c5c32ccb8fbf63a828260":1786534962110,"6a7c65f76f2befb4af5ca847":1786537463151,"6a7c6ed26f2befb4af5dcfa3":1786539730398,"69d9f72f712f8278d6a25aa1":1786556743904,"6a7ceba56f2befb4af6b79cb":1786925844824,"6a7cedfaccb8fbf63a92c657":1786572282702,"6a7d17906f2befb4af7a9aee":1786582928363,"6a7d1a716f2befb4af7adf62":1786583677781,"6a7d1d98c6b3b9433c10b2bc":1786584472145,"6a7d366fc6b3b9433c130bef":1786590831568,"6a7db150c6b3b9433c1fbaba":1786622288117,"6a7dde1dc6b3b9433c2500e9":1786739429033,"6a7df0b478ed8db313a6a01b":1786638516987,"6a7e30a878ed8db313ae670a":1786654888818,"6a7e34ed78ed8db313aed4d7":1786655981122,"6a7e50526f2befb4af9ce1fc":1786662994102,"6a7e536a78ed8db313b171b0":1786663786165,"6a7e5dc578ed8db313b2409d":1786668014941,"6a7e67f56f2befb4af9ee539":1786669106526,"6a7e770fc6b3b9433c351551":1786672911878,"6a7ef3e178ed8db313c1a9fd":1786704886871,"6a7f0ed3ccb8fbf63ad143f6":1786711771175,"6a7f148b6f2befb4afb286f2":1786713227093,"6a6ebc4c7ed61156b13edbde":1786713472755,"6a7f3da66f2befb4afb7d05f":1786723750100,"6a7f3e056f2befb4afb7d9a1":1786723845086,"6a7f3f26c6b3b9433c4b35c2":1786724134215,"6a7f5768b6ddbd49c8e36b05":1786730344131,"6a7f5c18bb838fed3d15a84a":1786731544433,"6a7f75dfbb838fed3d1888dc":1786738143006,"69b9e668ceefc8fcce192d27":1788116665875,"6a7f8d09b6ddbd49c8e99473":1786744073216,"6a7fa51cbb838fed3d1db406":1786750236274,"6a7fb2b797756202e418d7ce":1786753719683,"6a7fb46cb6ddbd49c8edd92e":1786754156054,"6970ba4f16ffc49f8a4dadcd":1786764638630,"6a80633097756202e42d1a63":1786798896345,"6a07f9109264b693554c709a":1786799625032,"6a806b0bb6ddbd49c801dbb7":1786800907932,"6a80825297756202e4316cb8":1786806866434,"6a809388bb838fed3d3fd285":1786811272736,"6a8095c3bb838fed3d4035ed":1786811911672,"69cc58f3d9f97351e0ef3e41":1786832420589,"6a80e62797756202e445f5a3":1786832423595,"6a8158f6b6ddbd49c82500c0":1786861814453,"6a815c42bb838fed3d5c35c4":1786862658918,"6a81c15bb6ddbd49c834e295":1787500028761,"6a2ead8afb72b28e72657ed8":1786890489458,"6a81eff7b6ddbd49c83c005b":1786900471143,"6a81f62538b5add0267a7292":1788516587747,"6a82044bbb838fed3d7631fc":1786905684023,"6a82336fb6ddbd49c84d3678":1786917743334,"6a823b37bb838fed3d7ef0cb":1786919766428,"6a82484d97756202e47a713d":1786923092123,"6a824a09b6ddbd49c855ff93":1786923529016,"6a824c19b6ddbd49c8564170":1786924057640,"6970b1d916ffc49f8a4b9e99":1786925916477,"6a82572cbb838fed3d8247a0":1786926892991,"6a82595ab6ddbd49c8580019":1786941038691,"6970c0a016ffc49f8a4f56ce":1786953128405,"6a825e6cbb838fed3d8340d1":1786928779885,"6a8271b138b5add026915ac6":1786933681645,"6a10f694ad2caa7c8a54cff0":1786933796750,"6a828ab1b6ddbd49c85ea0db":1786940081977,"6a82918dbb838fed3d898fc6":1786941837375,"6a8291febb838fed3d899f86":1786941950258,"6a6fe3262b74975ceecd1c97":1786946568501,"6a6ed45b1351873a2774c6c4":1786946191839,"6a8325adb6ddbd49c8728438":1786979759154,"6a836924b6ddbd49c87afde7":1786997028158,"6a83a95738b5add026b8532b":1787013810526,"6a83b9b997756202e4a8c8e4":1787017657946,"6a83ba1297756202e4a8e91a":1787019885135,"6a844f099baf80e29b96aa4c":1787055881872,"6a84739bc3128d9dc711a82a":1787066983212,"6a847e0d9baf80e29b9d213d":1787067917012,"6a848ef19baf80e29b9fd882":1787072241945,"6a84a7d49baf80e29ba33051":1787078745630,"6a84c237c1147c646516a8ba":1787085602792,"6a84d331c1147c64651922cf":1787089799408,"6a84e01c9baf80e29baa9cd0":1787093020326,"6a84f3fec3128d9dc72c4efb":1787098119087,"6a8516fdc3128d9dc72fd774":1787107069328,"6a857136479d1c6b27663019":1787130166805,"6a858fff479d1c6b276a0b5c":1787138047555,"6a85918adacd0791f9d6733a":1787138469235,"6a85b5a01efca7d4d5db6de7":1787147947392,"6a85b68c479d1c6b276f3eeb":1787149524362,"6a85e990dacd0791f9e436f6":1787160976639,"6a85ed0adacd0791f9e4dfae":1787161866736,"6a862029dacd0791f9f24dc8":1787175309766,"6a862b271efca7d4d5ee8e84":1787177767544,"6a863a881efca7d4d5f0b3ea":1787183681880,"6a867801dacd0791f9fd742d":1787197603781,"6a87099edacd0791f911cad1":1787234718236,"6a871f1e40e38e148760d7e2":1787240222097,"6a872464dacd0791f9182556":1787241882507,"6a873a671efca7d4d5146e4f":1787247750737,"6a873a9440e38e14876561dc":1787534778989,"6a873ce3479d1c6b27b31bfe":1787247846155,"6a87f726479d1c6b27cf4041":1787296457858,"6a88354d479d1c6b27d720db":1787311437786,"6a886d66dacd0791f948c82e":1787325798925,"6a8872241efca7d4d5431b51":1787327304443,"6a887b1e479d1c6b27e358b7":1787410261513,"6a888a2c40e38e14879979fa":1787333207239,"6a88c7e6dacd0791f9583216":1787349144077,"6970bab216ffc49f8a4dcd6f":1787353974558,"6a88e2fc40e38e1487a789e1":1787356922421,"6a7c8b77c6b3b9433cfc2f07":1791046152550,"6a80ddb1bb838fed3d4b14fb":1787369693790,"6a891b071efca7d4d55ebdc4":1787370247502,"6a8936f6479d1c6b2701edbd":1787377398636,"6a89b45f1efca7d4d57762c0":1787409503269,"6a89b76e40e38e1487cc5f71":1787410286082,"6a89b9cb479d1c6b2718d4d1":1787410987931,"6a89de1240e38e1487dab014":1787420178209,"6a8a12c9479d1c6b273507b7":1787433741394,"6a8a743b1efca7d4d5a1c7f1":1787458619916,"6a8a94c1479d1c6b274bbbf6":1787467402394,"6a8afa6f479d1c6b275acb75":1787492975338,"6a8b0a79479d1c6b275e0866":1787497081930,"6a8b2230479d1c6b2761fced":1787503152342,"6a8b4500dacd0791f9c7d74c":1787512064502,"6a8b4bc61efca7d4d5c4ca53":1787513798843,"6a8b4f6f479d1c6b276a65ec":1787514735333,"6a47277fb6c9d73365c26b3e":178752
136180016423,"6a8b7a1640e38e148720ebe6":1787525654155,"6a8b833f479d1c6b2771b758":1787528004114,"6a8b84abdacd0791f9d1b62c":1787528365373,"6a8b8f37479d1c6b277348c1":1787531543215,"6a8caa651efca7d4d5f76653":1787613848027,"6a8cb5251efca7d4d5f8c6f2":1787606309498,"6a8cbbe6479d1c6b279ecfcb":1787608375725,"6a8cc1f9479d1c6b279f92ec":1787609634698,"6a8cfa721efca7d4d501b233":1787624050828,"6a8dfdaf479d1c6b27cec376":1787690419084,"6a8ec7ea4897bdd801be101a":1787742186218,"6a8efbdd0f12dbd831468b3a":1787755489146,"6a8f15944976e645184e5bdc":1787762068084,"6a8f32cca34d8a9a07ffbe26":1787769548389,"6a8f52730f12dbd831526584":1788021827987,"6a8f5d984897bdd801d3c3d1":1787780507111,"6a8f740b0f12dbd83156ae1f":1787786253969,"6a8f9e410f12dbd8315b435c":1787797380901,"6a8fa04da34d8a9a070cf3f7":1787798316945,"6a900d150f12dbd8316a27d3":1787825429063,"6a90befc0f12dbd8318496a6":1787870974738,"6a90bf164897bdd801048207":1788808764833,"6a90e945a34d8a9a073c5fee":1787882002205,"6a90ebd7a34d8a9a073cc7c2":1787882485108,"6a910cdf0f12dbd8318fbb02":1787890911937,"6a91a7084976e64518a6d7cb":1787930376323,"6a3403a91f3cb5587a42928c":1787935577617,"6a91f2794976e64518b154e0":1787949689342,"69ae306ff3783889f0225e2f":1790539796062,"6a93032ea34d8a9a0783dbbd":1788019521787,"6a600b7ab10d8a892850b89b":1788023998616,"6a9338280f12dbd831d91502":1788033216589,"6a9338ac4897bdd8015923c6":1788034256153,"6a9347e14976e64518e071a6":1788037102185,"6a9355f7a34d8a9a078f4679":1788040720863,"6a93562b0f12dbd831dce70e":1788040812119,"6a935af9a34d8a9a078fdd2e":1788041977499,"6a935c160f12dbd831dd983b":1788042262381,"6a935d2ca34d8a9a07902366":1788049382569,"6a9367774897bdd8015f0811":1789478740984,"6a9396904897bdd8016532b3":1788057232445,"6a941d700f12dbd831f7ea00":1788091760988,"6a94245a0f12dbd831f8f3cc":1788093753459,"697fd472a9ab3bdac2d719ed":1788094314420,"6a94414a0f12dbd831fdb1be":1788101365604,"6a944df0a34d8a9a07b30f6f":1788104176013,"6a945cd0a34d8a9a07b58b2b":1788107984263,"6a9464e60f12dbd83103a923":1788110054058,"6a953f104897bdd801a8787a":1788165904797,"6a95968e0f12dbd8313786b0":1788188495788,"6a95b9350f12dbd8313d6e88":1788197654099,"6a95f8534976e645184c6008":1790870851709,"6a96059e4976e645184e39e6":1788216734657,"6a6feb1c2b74975ceece026c":1788216748398,"6a961c54a34d8a9a07ff533d":1788222549928,"6a964ac94976e645185797cc":1788234450281,"6970b2cd16ffc49f8a4be118":1790796561711,"6a96a9314897bdd801df8a8b":1788258611281,"69d57d646cbf5f843ac96429":1788276985064,"6a97118d4976e6451875aba0":1788285325057,"6a972174a34d8a9a07265be0":1788300072894,"6a973d2d4976e645187deb3e":1790279173029,"6a9740cc4897bdd801f71c53":1788297420895,"6a97450e0f12dbd831795121":1788298510408,"6a97d9a9a34d8a9a073f5b6a":1788336553827,"6a980c584897bdd8011130f0":1788349528754,"6a9828a5a34d8a9a074ba502":1788356929317,"6a983eca0f12dbd8319a06c3":1788362442740,"6a9877ad4976e64518ab75ec":1788377005204,"6a998543a34d8a9a077df353":1788446376076,"6a99efcda34d8a9a078c824c":1788473293979,"6a9a16654897bdd8015b63b5":1788483173991,"6a9a17014897bdd8015b722c":1788483366315,"6a9aa1fd04bcfa2dff082325":1788518912339,"6a9ac6ae04bcfa2dff0c988b":1788528302491,"6a9ada9f86d3036e0370649b":1788533407413,"6a9ae265d2b98feae1060416":1788535525818,"6a9b492604bcfa2dff1e162d":1788561769132,"697b617483a360d48c48d412":1788613359500,"6a9c5aea86d3036e03a0b84f":1788631786872,"6a9c677a86d3036e03a24919":1788635074885,"6a9c7ccbd2b98feae13902c8":1788640459666,"6a9cdd83b0ea1a6da97529e6":1788665329720,"6a9d210886d3036e03b7b8d6":1788682506211,"6a9d77b086d3036e03c3f4e1":1788704688584,"6970ba4f16ffc49f8a4db0cb":1788735336217,"6a9df01004bcfa2dff70ff24":1788735504942,"6a9dfaddb0ea1a6da99b1ea9":1788738304987,"6a9e2dafd2b98feae16f4419":1788751279079,"6a9e49b3b0ea1a6da9a3924a":1788758464222,"6a9ea9a4d2b98feae17f3a43":1788783026051,"6a9ec2ce04bcfa2dff8b56eb":1788793089813,"69ef7f6f4b092e9a82e1c414":1788818696761,"6a9f60ca86d3036e0304ec24":1788830104952,"6a9f6a67b0ea1a6da9cbec8d":1788832359173,"6a9f6bde04bcfa2dffa36d2b":1788832734075,"6a9fb98504bcfa2dffad6e28":1788852613125,"6aa0ab07d2b98feae1c92884":1788914439523,"6970b98d16ffc49f8a4d69e5":1788966873865,"6aa19023d2b98feae1eb6fe0":1788973099614,"6aa190a4d2b98feae1eb83de":1788973221421,"6aa21d7f04bcfa2dff0350a4":1789012674654,"6aa2af7304bcfa2dff1400c8":1789046643684,"6aa2b337d2b98feae10c8cc3":1790013575542,"6aa2c644b0ea1a6da940ae7d":1789052484870,"6aa2cef486d3036e037c5c82":1789054708656,"6aa3245b86d3036e03888d4f":1789076571947,"6aa3453eb0ea1a6da951ef7f":1789085029329,"6aa35016b0ea1a6da953568c":1789087766878,"6aa3569486d3036e038f052b":1789089497764,"6aa3608ab0ea1a6da95571c1":1789091978616,"6aa37928d2b98feae12686a9":1789098280143,"6aa3796cd2b98feae1268ee5":1789098989437,"6a50008d2a5f83e827af46fa":1790019074097,"6aa3ca8f04bcfa2dff3a440f":1
13618789119295585,"6aa424a904bcfa2dff474aaa":1789142699526,"6aa43172b0ea1a6da9725a2b":1789145458817,"6aa44a5e04bcfa2dff4e2f5c":1789151838086,"6aa48589b0ea1a6da980a965":1789166985171,"6aa488c486d3036e03bbc56d":1789167812290,"6aa49baa86d3036e03c849fb":1789172650692,"6aa4e29386d3036e03dd9690":1789190803206,"6aa5602fb0ea1a6da9b63acd":1789222959929,"6aa578800622b37bebec2179":1789229184174,"6aa57f2d0622b37bebedfa05":1789230893039,"6aa58537b0ea1a6da9c0a425":1789951265514,"6970ba4f16ffc49f8a4dacb6":1789264994663,"6aa6321ce21c92a180eae7f5":1789276700705,"6aa633b4e21c92a180eb153a":1789277108431,"6aa6a7d158fcfe4554991849":1789306833462,"6aa6cdbcb0ea1a6da9ed1441":1789316540979,"6aa6d1f4b0ea1a6da9ed986c":1789317620715,"6aa6f574b0ea1a6da9f242d1":1789326708383,"6aa703ba86d3036e032ed8ce":1789330362852,"6aa7246658fcfe4554a85ee3":1789338726988,"6aa75b45e21c92a1800de90b":1789352773592,"6aa7fdcb58fcfe4554c04534":1789394379972,"6aa804fc86d3036e034b381d":1789396233084,"6aa8119ce21c92a180231d48":1789399452502,"6aa81ce3e21c92a18025e493":1789402339981,"6aa82e3858fcfe4554c79fd0":1789406776278,"6a5a440d340159363324a5d8":1789411530367,"6a106e2346c5d01822bfe744":1789412085762,"6aa888e7e21c92a180335cfd":1789429995013,"6aa892e9e21c92a180348e0f":1789432687704,"6aa8a54ce21c92a18036d53f":1789437260158,"69b779a9ceefc8fccefa1ba3":1791054116540,"6aa8b3a6e21c92a18038adf0":1789440934203,"6aa8b4c086d3036e0361e352":1789441216487,"6a2e0c142461be33268c2150":1789468138554,"6aa921bbb0ea1a6da932deb1":1789469123328,"6aa9908be21c92a18052c508":1789497483651,"6aa9969be21c92a18053f9b1":1789499035860,"6aa9ad3ca739a3871ef5a727":1789504828154,"6aa9eaabb0ea1a6da94b2e7a":1789520556957,"6aa9ef59b0ea1a6da94bb75a":1789521753620,"6aaa512be21c92a180688b9f":1789546795624,"6aaa90e6e21c92a18070458a":1789563110337,"6aaacdcea739a3871e1938ed":1789578702029,"6aaae9bc7738000b53c432b7":1789585852061,"6aab14d409875cda30f483e2":1789596884420,"6aab162ce21c92a18082b522":1789597454723,"6aab1980a739a3871e23b963":1789598114123,"6aab1f5e09875cda30f57b57":1789600561389,"6aab403ab0ea1a6da9758974":1789780248133,"6aab404fa739a3871e272927":1789608017768,"6aab420d09875cda30f888f6":1789608462614,"6aabd34f11eb77ab966a80e3":1789645647273,"6aabe596a449d5304c4d6d91":1789650326993,"6aabe62e09edaff871535b1f":1789650478401,"6aabfaffe1de502a4f069532":1789655814881,"6aac934a11eb77ab96916aaf":1789694794805,"6aacf1f4e1de502a4f34aa4e":1789719181417,"6aa177f204bcfa2dffefbfa0":1789727631463,"6970c02316ffc49f8a4f2b1e":1789750674111,"6aad6e80e1de502a4f43e108":1789750912406,"6aad726da449d5304c8f3747":1789751917654,"6aad8de4e35232535248a454":1789759022479,"6aad9bec1c04290cdde7c7fa":1789762540914,"6aada49fa449d5304c950382":1789764767071,"6aadb8e2a449d5304c9790f6":1789769993325,"6aae23c744832b8faffe13b7":1789797319228,"6aae983a108e35b63512b1f9":1789827144190,"6970bab216ffc49f8a4dcd2c":1789835989543,"6aaec45650be43d066bfafdb":1789838422331,"6aaed7dee979f4331799d423":1789843422647,"6aaeeb3ae979f433179c5287":1789848378025,"6aaf22c3f777eba24564901f":1789862595786,"6aaf2a61e979f43317a4250a":1789864545638,"6aaf3d4591f40bf2be08fdbe":1789869383060,"6aaf4d64e979f43317a78478":1789873510421,"6aaf5758f777eba2456995a2":1789876184993,"6aaff2caf2550d40215a1fad":1789915850009,"6ab017a7f777eba2457f4e9c":1789925982355,"6ab03345f777eba24583f5f8":1789932358472,"6ab03caef2550d402164a8f5":1789934766623,"6ab062cae979f43317c8d492":1789944522624,"6ab062d991f40bf2be2b13c7":1789944688350,"6ab06dfff777eba2458a9aa4":1789951061602,"6ab07caaf777eba2458bf2d1":1789951146759,"6ab0818df777eba2458c6419":1789952397376,"6ab092b0f777eba2458e3547":1789956784962,"6ab0939df777eba2458e4f65":1789958776253,"6ab0b00491f40bf2be330c94":1789964293415,"6ab13d01ec20e54df3a603b9":1790000385277,"6ab14c987a6dfeb22dc664ea":1790004376973,"6ab150f5ec20e54df3a906b3":1790006503763,"6ab152b60dfab8a4a2539de9":1790005942379,"6ab171f0d592e530af04c371":1790013951857,"6ab1d923ec20e54df3bc5ab5":1790040355575,"6ab28c4dd592e530af29e9b0":1790086221387,"6ab29e8f7a6dfeb22df4be2c":1790090895482,"6ab2d35a0dfab8a4a2897196":1790104520293,"6ab32dd90dfab8a4a29960bb":1790127577991,"6ab33d860dfab8a4a29b37e3":1790131590821,"69cbda0fd
13618516b437add51626":1790178387274,"6ab407a6633ffa377f2ccbdb":1790183334366,"6ab445184a7dbf62f67ec395":1790199064485,"6ab4696c4a7dbf62f683e7e8":1790208364537,"6ab469896fd2bc3cbe911f7e":1790258493872,"6ab46979869f97b167633321":1790908108799,"6ab4452310427ae68c80e7ad":1790227687299,"6ab4da286fd2bc3cbe9f7467":1790237224864,"6ab57c9f726081bc3c2cfb75":1790278815335,"6ab5b9a6726081bc3c34b061":1790680174473,"6ab634a2557a9339b3e8d02b":1790325922518,"6ab6926b557a9339b3f7afc9":1790349931004,"6ab6af14557a9339b3fc9591":1790357290891,"6ab70cef92c9e94d44c42d0a":1790381295820,"6ab7b8f09e2ba8a85cd16768":1790425342051,"6ab7e8699e2ba8a85cd9e1a8":1790437518936,"6ab8ad9a92c9e94d44081477":1790489211359,"6ab90915627225ebbe0fb045":1790511532632,"6ab92b750980069f0953dcab":1790520181754,"6ab9433e7b514b9f163bc6d1":1790526270048,"6ab999fb627225ebbe2f946e":1790548805478,"6ab9a10213b9a06c79d2e396":1790550274679,"6aba456213c9b2eaac6b1d42":1790592354120,"6aba8d09627225ebbe63d04d":1790610697688,"6abaa7a0627225ebbe6b6096":1790617504184,"6a6aa2297ed61156b1a6c10f":1790626495712,"6abae380ff41ecfb68ac40ef":1790632832330,"6abb3aa67b514b9f16aa2ba7":1790655142797,"6abb3e537b514b9f16aadb97":1790657422157,"6abbcc897b514b9f16c68cab":1790692491422,"6abbf55b7b514b9f16cfe55b":1790702939778,"6abc2d129d7bba0bfa6ba61a":1790717203828,"6abc45457b514b9f16e17344":1790723402169,"6abc4e869d7bba0bfa736590":1790725767072,"6abc67387b514b9f16e75c9b":1790732088551,"6abc73c83e02b67763bc534f":1790735304680,"6abc7ca33e02b67763bdf7aa":1790737571115,"6abc83e09d7bba0bfa7d5214":1790739454346,"6abd474f55edbefa7c889e89":1790789458309,"6abdcd202110d00f11e5a499":1790824778647,"6abe6c815499a3dbe9e5c4c5":1790864852500,"6abe84e25499a3dbe9ea148f":1790870754931,"6abe8e405499a3dbe9ebb6f2":1790873154581,"6abeb1f75499a3dbe9f26354":1790882296811,"6abeb529226a81701aa0b71d":1790883113399,"6abed6342b6f1e6f70f640a0":1790891810968,"6abef3e22b6f1e6f70fbb32a":1790900161243,"6abf089c5499a3dbe901bf29":1790904476607,"6abf136d76d22dd5151161f4":1790907245250,"6975c05754758ca276581a9a":1790953370952,"6abfe89e957be9dde46509b0":1790961822065,"6abffc0c9703fc1074ac769f":1790966796557,"6ac0012ca72ade638119fa33":1790968231184,"6ac00976dd0de9c13b3bd0aa":1790972150645,"6ac083129703fc1074c28d12":1791001362082,"6ac0861f957be9dde484aca2":1791002144609,"6ac09423acbc0b2099df6270":1791005941077,"6ac0ee9df49428468cbd0a88":1791029362904,"6ac12eee22c1288dd187097c":1791045358188,"6ac166dd22c1288dd1970e2e":1791059677933} || {}, 13619 }; 13620 if (!window.xb_wishlist) { 13621 window.xb_wishlist = { 13622 ...XBWishlistConfig 13623 }; 13624 } else { 13625 window.xb_wishlist = { 13626 ...window.xb_wishlist, 13627 ...XBWishlistConfig 13628 }; 13629 } 13630 13631 function replaceWishlistTags() { 13632 const content = document.body.innerHTML; 13633 const pattern = /\[xb-wishlist-page([^\]]*)\]\[\/xb-wishlist-page\]/g; 13634 13635 if (pattern.test(content)) { 13636 document.body.innerHTML = content.replace(pattern, function (match, attributes) { 13637 return `<xb-wishlist-page ${attributes}></xb-wishlist-page>`; 13638 }); 13639 } 13640 } 13641 13642 if (document.readyState === 'loading') { 13643 document.addEventListener('DOMContentLoaded', replaceWishlistTags); 13644 } else { 13645 replaceWishlistTags(); 13646 } 13647 } 13648</script>
13648 13649
13650<script src='https://cdn.shopify.com/extensions/01a0f6ba-a52c-7168-beea-a9eac65e23fa/xb-wishlist-528/assets/xb-wishlist.js' defer></script>
vendor: 1 bytes, line 13650
13650
13651<script type='module' src='https://cdn.shopify.com/extensions/01a0f6ba-a52c-7168-beea-a9eac65e23fa/xb-wishlist-528/assets/collection.js' defer></script>
13651 13652 13653 13654 13655 13656 13657</div><div id="shopify-block-ARTg3djF4REhDLzg1M__16237003337219470499" class="shopify-block shopify-app-block"> 13658 13659 13660 13661 13662 13663 13664 13665 13666 13667 13668 13669 13670 13671 13672 13673 13674 13675 13676 13677 13678 13679
13680<script> 13681 var _ALConfig = _ALConfig || {}; 13682 _ALConfig = { 13683 'shop_name': '', 13684 'public_domain': null, 13685 'proxy_path_prefix': 'apps/loyalty', 13686 'widgetJsPath': 'https://loyalty-admin.appstle.com/app/loyalty-widget.bundle.js', 13687 'widgetCssPath': 'https://loyalty-admin.appstle.com/content/loyalty-widget.css', 13688 'pointEarnRules': [], 13689 'pointRedeemRules': [], 13690 'widget_setting': null, 13691 'product': null, 13692 'productCollections': [], 13693 'shop_labels': null, 13694 'pointRoundType': 'NO_ROUND' 13695 }; 13696 13697 // Shopify's market-aware account routes. Emitted from the Liquid `routes` object so links keep 13698 // the customer's current market/language prefix (e.g. /en-eu/account/login) instead of a 13699 // hard-coded /account/login, which Shopify resolves against the shop's primary market. 13700 _ALConfig.routes = { 13701 'root_url': "\/", 13702 'account_url': "\/account", 13703 'account_login_url': "\/account\/login", 13704 'account_register_url': "\/account\/register", 13705 'account_logout_url': "\/account\/logout" 13706 }; 13707 13708 13709 _ALConfig.shop_name = "Rocky Mountain Oils"; 13710 13711 13712 13713 _ALConfig.proxy_path_prefix = "apps\/loyalty"; 13714 13715 13716 13717 _ALConfig.currency = "USD"; 13718 13719 13720 13721 _ALConfig.storeCurrency = "USD"; 13722 13723 13724 13725 _ALConfig.pointRoundType = "NO_ROUND"; 13726 13727 13728 13729 _ALConfig.public_domain = "www.rockymountainoils.com"; 13730 13731 13732 13733 _ALConfig.widgetJsPath = "https:\/\/loyalty-admin.appstle.com\/app\/loyalty-widget.bundle.js?v=1790950436881"; 13734 13735 13736 13737 _ALConfig.widgetCssPath = "https:\/\/loyalty-admin.appstle.com\/content\/loyalty-widget.css?v=1790950436881"; 13738 13739 13740 13741 _ALConfig.referralEnabled = true; 13742 13743 13744 13745 _ALConfig.vipTierEnabled = true; 13746 13747 13748 13749 _ALConfig.vipTierSetting = {"id":1804,"shop":"rocky-mountain-oils.myshopify.com","type":"AMOUNT_SPENT","amountOfTimeToAchieveTier":"CUSTOM","startAt":"2026-09-30T09:50:27.760069Z","evaluationEndAt":null,"createAt":"2026-09-30T09:50:27.760094Z","updateAt":"2026-10-02T16:15:38.479909Z","isRunning":null,"vipIntervalType":"YEAR","vipInterval":1,"expiredAt":null,"allowedCustomerTags":null,"restrictCustomersWithTags":null,"timeToAchieveMilestone":"ONE_YEAR","milestoneInterval":1,"milestoneIntervalType":"YEAR"}; 13750 13751 13752 13753 _ALConfig.vipTiers = [{"id":5659,"shop":"rocky-mountain-oils.myshopify.com","name":"Preferred","milestone":0.0,"imageUrl":"https:\/\/cdn.sweettooth.io\/v1\/images\/vip_tiers\/vip-tier-1.svg?color=%236568FE\u0026theme=light","createAt":"2026-09-30T09:50:27.769537Z","updateAt":"2026-10-02T19:29:28.901895Z","allowedCustomerTags":"","vipIntervalType":null,"vipInterval":1,"expiredAt":null,"amountOfTimeToAchieveTier":"LIFETIME","restrictCustomersWithTags":"","status":true,"serial":0,"customerFacingLabel":"Earn 1 point per dollar spent.\u003cbr\u003e","additionalTags":"swell_vip_preferred","translations":null},{"id":5660,"shop":"rocky-mountain-oils.myshopify.com","name":"Premium","milestone":125.0,"imageUrl":"https:\/\/cdn.sweettooth.io\/v1\/images\/vip_tiers\/vip-tier-1.svg?color=%236568FE\u0026theme=light","createAt":"2026-09-30T09:50:27.769539Z","updateAt":"2026-10-02T19:40:04.669064Z","allowedCustomerTags":"","vipIntervalType":"YEAR","vipInterval":1,"expiredAt":null,"amountOfTimeToAchieveTier":"CUSTOM","restrictCustomersWithTags":"","status":true,"serial":1,"customerFacingLabel":"Spend $125 this calendar year.\u003cbr\u003e\u003cb\u003eEarn 1.25 points per dollar spent.\u003c\/b\u003e","additionalTags":"swell_vip_premium","translations":null},{"id":5661,"shop":"rocky-mountain-oils.myshopify.com","name":"Elite","milestone":300.0,"imageUrl":"https:\/\/cdn.sweettooth.io\/v1\/images\/vip_tiers\/vip-tier-1.svg?color=%236568FE\u0026theme=light","createAt":"2026-09-30T09:50:27.76954Z","updateAt":"2026-10-02T20:32:06.574394Z","allowedCustomerTags":"","vipIntervalType":"YEAR","vipInterval":1,"expiredAt":null,"amountOfTimeToAchieveTier":"CUSTOM","restrictCustomersWithTags":"","status":true,"serial":2,"customerFacingLabel":"Spend $300 this calendar year.\u003cbr\u003e\u003cb\u003eEarn 1.5 points per dollar spent.\u003c\/b\u003e","additionalTags":"swell_vip_elite","translations":null}]; 13754 13755 13756 13757 _ALConfig.pointEarnRules = [{"id":5297,"shop":"rocky-mountain-oils.myshopify.com","type":"STATIC_EARN_RULE","status":"ACTIVE","historicPurchaseDuration":"NONE","basePoints":0.0,"includeSubtotal":false,"includeTax":false,"excludeCollections":null,"name":"Leave a product review","customerNotification":"","createAt":"2026-10-02T13:45:18.600319Z","updateAt":"2026-10-02T19:04:56.457669Z","rewardInterval":"DAY","productId":null,"collectionId":null,"variantId":null,"productData":null,"collectionData":null,"customerFacingLabel":"20 points","socialUrl":"","disableForOnSellProduct":false,"autoApprovalDays":0,"enableInterval":false,"earnLimit":1,"activityType":"REGULAR","allowedCustomerTags":null,"includeShippingPoints":false,"eligibleForFirstOrder":false,"maximumPoints":null,"restrictCustomerTags":null,"customerFacingIconUrl":"","serial":1,"excludeOrderTags":null,"pointBasedOn":null,"excludeProducts":null,"givePointsToGuestCustomers":false,"allowedProductTags":null,"restrictProductTags":null,"rollBackPointsOnUnsubscribe":false,"addAdditionalPoints":false,"additionalPoints":null,"addAdditionalPhotoPoints":false,"additionalPhotoPoints":null,"addAdditionalVideoPoints":false,"additionalVideoPoints":null,"refundNotificationLabel":"","disablePointsForDiscountedProduct":false,"platformType":"BOTH","vipTierId":null,"earnType":"POINTS","minimumOrderValue":null,"allowedOrderTags":null,"excludeVariantIds":null,"rewardA
13757ssignType":"DYNAMIC","applyOnImportedCustomer":false,"enableBirthdayPromo":false,"promoPointsMultiplier":null,"ruleStartDate":null,"ruleEndDate":null,"translations":null,"appliesOn":"BOTH","manuallyApprovePoints":false,"showReviewProductDetails":true,"collectBirthYear":true},{"id":5296,"shop":"rocky-mountain-oils.myshopify.com","type":"STATIC_EARN_RULE","status":"ACTIVE","historicPurchaseDuration":"NONE","basePoints":0.0,"includeSubtotal":false,"includeTax":false,"excludeCollections":null,"name":"Leave a product photo review","customerNotification":"","createAt":"2026-10-02T13:45:13.580618Z","updateAt":"2026-10-02T19:04:51.623351Z","rewardInterval":"DAY","productId":null,"collectionId":null,"variantId":null,"productData":null,"collectionData":null,"customerFacingLabel":"25 points","socialUrl":"","disableForOnSellProduct":false,"autoApprovalDays":0,"enableInterval":false,"earnLimit":1,"activityType":"REGULAR","allowedCustomerTags":null,"includeShippingPoints":false,"eligibleForFirstOrder":false,"maximumPoints":null,"restrictCustomerTags":null,"customerFacingIconUrl":"","serial":2,"excludeOrderTags":null,"pointBasedOn":null,"excludeProducts":null,"givePointsToGuestCustomers":false,"allowedProductTags":null,"restrictProductTags":null,"rollBackPointsOnUnsubscribe":false,"addAdditionalPoints":false,"additionalPoints":null,"addAdditionalPhotoPoints":false,"additionalPhotoPoints":null,"addAdditionalVideoPoints":false,"additionalVideoPoints":null,"refundNotificationLabel":"","disablePointsForDiscountedProduct":false,"platformType":"BOTH","vipTierId":null,"earnType":"POINTS","minimumOrderValue":null,"allowedOrderTags":null,"excludeVariantIds":null,"rewardAssignType":"DYNAMIC","applyOnImportedCustomer":false,"enableBirthdayPromo":false,"promoPointsMultiplier":null,"ruleStartDate":null,"ruleEndDate":null,"translations":null,"appliesOn":"BOTH","manuallyApprovePoints":false,"showReviewProductDetails":true,"collectBirthYear":true},{"id":5295,"shop":"rocky-mountain-oils.myshopify.com","type":"STATIC_EARN_RULE","status":"ACTIVE","historicPurchaseDuration":"NONE","basePoints":0.0,"includeSubtotal":false,"includeTax":false,"excludeCollections":null,"name":"Leave a product video review","customerNotification":"","createAt":"2026-10-02T13:44:54.090861Z","updateAt":"2026-10-02T19:04:39.604308Z","rewardInterval":"DAY","productId":null,"collectionId":null,"variantId":null,"productData":null,"collectionData":null,"customerFacingLabel":"50 points","socialUrl":"","disableForOnSellProduct":false,"autoApprovalDays":0,"enableInterval":false,"earnLimit":1,"activityType":"REGULAR","allowedCustomerTags":null,"includeShippingPoints":false,"eligibleForFirstOrder":false,"maximumPoints":null,"restrictCustomerTags":null,"customerFacingIconUrl":"","serial":3,"excludeOrderTags":null,"pointBasedOn":null,"excludeProducts":null,"givePointsToGuestCustomers":false,"allowedProductTags":null,"restrictProductTags":null,"rollBackPointsOnUnsubscribe":false,"addAdditionalPoints":false,"additionalPoints":null,"addAdditionalPhotoPoints":false,"additionalPhotoPoints":null,"addAdditionalVideoPoints":false,"additionalVideoPoints":null,"refundNotificationLabel":"","disablePointsForDiscountedProduct":false,"platformType":"BOTH","vipTierId":null,"earnType":"POINTS","minimumOrderValue":null,"allowedOrderTags":null,"excludeVariantIds":null,"rewardAssignType":"DYNAMIC","applyOnImportedCustomer":false,"enableBirthdayPromo":false,"promoPointsMultiplier":null,"ruleStartDate":null,"ruleEndDate":null,"translations":null,"appliesOn":"BOTH","manuallyApprovePoints":false,"showReviewProductDetails":true,"collectBirthYear":true}]; 13758 13759 13760 13761 _ALConfig.pointRedeemRules = [{"id":6996,"shop":"rocky-mountain-oils.myshopify.com","name":"$5 off","type":"DISCOUNT_CODE","referralType":null,"status":"ACTIVE","redeemPoints":100.0,"discountType":"FIXED","discount":5.0,"minimumPurchaseAmount":0.0,"createAt":"2026-09-30T15:01:46.049907Z","updateAt":"2026-10-02T19:34:50.322477Z","maximumShippingRate":0.0,"productId":null,"variantId":null,"productData":null,"collectionId":null,"collectionData":null,"customerFacingLabel":"Redeem 100 points to receive a $5.00 discount","restrictCustomers":null,"restrictCustomersWithTags":null,"rewardInterval":"DAY","appliesOn":"ONE_TIME","combinedWithProductDiscount":true,"combinedWithShippingDiscount":true,"combinedWithOrderDiscount":true,"enableInterval":false,"redeemLimit":1,"enableNumberOfUsagesLimit":false,"numberOfUsagesLimit":null,"allowedCustomerTags":null,"earnRuleId":null,"vipTierId":null,"redeemLabel":"Get a {{discount}} discount on your entire order","customerFacingIconUrl":"","serial":0,"discountCodeForAllCustomer":false,"allowedCountries":null,"showInPosOnly":false,"redeemAllPoints":false,"enableMinimumPointsToRedeem":false,"requiredMinimumPointsToRedeem":0.0,"enableMaximumPointsToRedeem":false,"requiredMaximumPointsToRedeem":0.0,"enablePOS":false,"minimumPointsLabel":"Add minimum {{points}} points to redeem","maximumPointsLabel":"Maximum {{points}}
13761 points can be redeemed","applyDiscountOnce":true,"enableDiscountPrefix":false,"discountPrefixText":"","discountCodeNodeId":"gid:\/\/shopify\/DiscountCodeNode\/1789711810927","translations":null,"quantity":1,"applyToEachItem":false,"enableDiscountExpirationOverride":false,"discountExpirationValue":null,"discountExpirationType":null,"activationDelayDays":null,"excludeProductData":null},{"id":6995,"shop":"rocky-mountain-oils.myshopify.com","name":"$10 off","type":"DISCOUNT_CODE","referralType":null,"status":"ACTIVE","redeemPoints":200.0,"discountType":"FIXED","discount":10.0,"minimumPurchaseAmount":0.0,"createAt":"2026-09-30T15:00:57.82081Z","updateAt":"2026-10-02T19:34:58.803767Z","maximumShippingRate":0.0,"productId":null,"variantId":null,"productData":null,"collectionId":null,"collectionData":null,"customerFacingLabel":"Redeem 200 points to receive a $10.00 discount","restrictCustomers":null,"restrictCustomersWithTags":null,"rewardInterval":"DAY","appliesOn":"ONE_TIME","combinedWithProductDiscount":true,"combinedWithShippingDiscount":true,"combinedWithOrderDiscount":true,"enableInterval":false,"redeemLimit":1,"enableNumberOfUsagesLimit":false,"numberOfUsagesLimit":null,"allowedCustomerTags":null,"earnRuleId":null,"vipTierId":null,"redeemLabel":"Get a {{discount}} discount on your entire order","customerFacingIconUrl":"","serial":1,"discountCodeForAllCustomer":false,"allowedCountries":null,"showInPosOnly":false,"redeemAllPoints":false,"enableMinimumPointsToRedeem":false,"requiredMinimumPointsToRedeem":0.0,"enableMaximumPointsToRedeem":false,"requiredMaximumPointsToRedeem":0.0,"enablePOS":false,"minimumPointsLabel":"Add minimum {{points}} points to redeem","maximumPointsLabel":"Maximum {{points}} points can be redeemed","applyDiscountOnce":true,"enableDiscountPrefix":false,"discountPrefixText":"","discountCodeNodeId":"gid:\/\/shopify\/DiscountCodeNode\/1789711516015","translations":null,"quantity":1,"applyToEachItem":false,"enableDiscountExpirationOverride":false,"discountExpirationValue":null,"discountExpirationType":null,"activationDelayDays":null,"excludeProductData":null},{"id":6994,"shop":"rocky-mountain-oils.myshopify.com","name":"$15 off","type":"DISCOUNT_CODE","referralType":null,"status":"ACTIVE","redeemPoints":300.0,"discountType":"FIXED","discount":15.0,"minimumPurchaseAmount":0.0,"createAt":"2026-09-30T14:59:54.298157Z","updateAt":"2026-10-02T19:35:25.724936Z","maximumShippingRate":0.0,"productId":null,"variantId":null,"productData":null,"collectionId":null,"collectionData":null,"customerFacingLabel":"Redeem 300 points to receive a $15.00 discount","restrictCustomers":null,"restrictCustomersWithTags":null,"rewardInterval":"DAY","appliesOn":"ONE_TIME","combinedWithProductDiscount":true,"combinedWithShippingDiscount":true,"combinedWithOrderDiscount":true,"enableInterval":false,"redeemLimit":1,"enableNumberOfUsagesLimit":false,"numberOfUsagesLimit":null,"allowedCustomerTags":null,"earnRuleId":null,"vipTierId":null,"redeemLabel":"Get a {{discount}} discount on your entire order","customerFacingIconUrl":"","serial":2,"discountCodeForAllCustomer":false,"allowedCountries":null,"showInPosOnly":false,"redeemAllPoints":false,"enableMinimumPointsToRedeem":false,"requiredMinimumPointsToRedeem":0.0,"enableMaximumPointsToRedeem":false,"requiredMaximumPointsToRedeem":0.0,"enablePOS":false,"minimumPointsLabel":"Add minimum {{points}} points to redeem","maximumPointsLabel":"Maximum {{points}} points can be redeemed","applyDiscountOnce":true,"enableDiscountPrefix":false,"discountPrefixText":"","discountCodeNodeId":"gid:\/\/shopify\/DiscountCodeNode\/1789711221103","translations":null,"quantity":1,"applyToEachItem":false,"enableDiscountExpirationOverride":false,"discountExpirationValue":null,"discountExpirationType":null,"activationDelayDays":null,"excludeProductData":null},{"id":6992,"shop":"rocky-mountain-oils.myshopify.com","name":"$20 off","type":"DISCOUNT_CODE","referralType":null,"status":"ACTIVE","redeemPoints":400.0,"discountType":"FIXED","discount":20.0,"minimumPurchaseAmount":0.0,"createAt":"2026-09-30T14:57:46.567605Z","updateAt":"2026-10-02T19:35:17.783207Z","maximumShippingRate":0.0,"productId":null,"variantId":null,"productData":null,"collectionId":null,"collectionData":null,"customerFacingLabel":"Redeem 400 points to receive a $20.00 discount","restrictCustomers":null,"restrictCustomersWithTags":null,"rewardInterval":"DAY","appliesOn":"ONE_TIME","combinedWithProductDiscount":true,"combinedWithShippingDiscount":true,"combinedWithOrderDiscount":true,"enableInterval":false,"redeemLimit":1,"enableNumberOfUsagesLimit":false,"numberOfUsagesLimit":null,"allowedCustomerTags":null,"earnRuleId":null,"vipTierId":null,"redeemLabel":"Get a {{discount}} discount on your entire order","customerFacingIconUrl":"","serial":3,"discountCodeForAllCustomer":false,"allowedCountries":null,"showInPosOnly":false,"redeemAllPoints":false,"enableMinimumPointsToRedeem":false,"requiredMinimumPointsToRedeem":0.0,"enableMaximumPointsToRedeem":false,"requiredMaximumPointsToRedeem":0.0,"enablePOS":false,"minimumPointsLabel":"Add minimum {{points}} points to redeem","maximumPointsLabel":"Maximum {{points}}
13761 points can be redeemed","applyDiscountOnce":true,"enableDiscountPrefix":false,"discountPrefixText":"","discountCodeNodeId":"gid:\/\/shopify\/DiscountCodeNode\/1789710795119","translations":null,"quantity":1,"applyToEachItem":false,"enableDiscountExpirationOverride":false,"discountExpirationValue":null,"discountExpirationType":null,"activationDelayDays":null,"excludeProductData":null},{"id":6993,"shop":"rocky-mountain-oils.myshopify.com","name":"$25 off","type":"DISCOUNT_CODE","referralType":null,"status":"ACTIVE","redeemPoints":500.0,"discountType":"FIXED","discount":25.0,"minimumPurchaseAmount":0.0,"createAt":"2026-09-30T14:57:52.865876Z","updateAt":"2026-10-02T19:35:31.467536Z","maximumShippingRate":0.0,"productId":null,"variantId":null,"productData":null,"collectionId":null,"collectionData":null,"customerFacingLabel":"Redeem 500 points to receive a $25.00 discount","restrictCustomers":null,"restrictCustomersWithTags":null,"rewardInterval":"DAY","appliesOn":"ONE_TIME","combinedWithProductDiscount":true,"combinedWithShippingDiscount":true,"combinedWithOrderDiscount":true,"enableInterval":false,"redeemLimit":1,"enableNumberOfUsagesLimit":false,"numberOfUsagesLimit":null,"allowedCustomerTags":null,"earnRuleId":null,"vipTierId":null,"redeemLabel":"Get a {{discount}} discount on your entire order","customerFacingIconUrl":"","serial":4,"discountCodeForAllCustomer":false,"allowedCountries":null,"showInPosOnly":false,"redeemAllPoints":false,"enableMinimumPointsToRedeem":false,"requiredMinimumPointsToRedeem":0.0,"enableMaximumPointsToRedeem":false,"requiredMaximumPointsToRedeem":0.0,"enablePOS":false,"minimumPointsLabel":"Add minimum {{points}} points to redeem","maximumPointsLabel":"Maximum {{points}} points can be redeemed","applyDiscountOnce":true,"enableDiscountPrefix":false,"discountPrefixText":"","discountCodeNodeId":"gid:\/\/shopify\/DiscountCodeNode\/1789710827887","translations":null,"quantity":1,"applyToEachItem":false,"enableDiscountExpirationOverride":false,"discountExpirationValue":null,"discountExpirationType":null,"activationDelayDays":null,"excludeProductData":null},{"id":6991,"shop":"rocky-mountain-oils.myshopify.com","name":"$50 off","type":"DISCOUNT_CODE","referralType":null,"status":"ACTIVE","redeemPoints":1000.0,"discountType":"FIXED","discount":50.0,"minimumPurchaseAmount":0.0,"createAt":"2026-09-30T14:57:38.486413Z","updateAt":"2026-10-02T19:35:37.165087Z","maximumShippingRate":0.0,"productId":null,"variantId":null,"productData":null,"collectionId":null,"collectionData":null,"customerFacingLabel":"Redeem 1,000 points to receive a $50.00 discount","restrictCustomers":null,"restrictCustomersWithTags":null,"rewardInterval":"DAY","appliesOn":"ONE_TIME","combinedWithProductDiscount":true,"combinedWithShippingDiscount":true,"combinedWithOrderDiscount":true,"enableInterval":false,"redeemLimit":1,"enableNumberOfUsagesLimit":false,"numberOfUsagesLimit":null,"allowedCustomerTags":null,"earnRuleId":null,"vipTierId":null,"redeemLabel":"Get a {{discount}} discount on your entire order","customerFacingIconUrl":"","serial":5,"discountCodeForAllCustomer":false,"allowedCountries":null,"showInPosOnly":false,"redeemAllPoints":false,"enableMinimumPointsToRedeem":false,"requiredMinimumPointsToRedeem":0.0,"enableMaximumPointsToRedeem":false,"requiredMaximumPointsToRedeem":0.0,"enablePOS":false,"minimumPointsLabel":"Add minimum {{points}} points to redeem","maximumPointsLabel":"Maximum {{points}} points can be redeemed","applyDiscountOnce":true,"enableDiscountPrefix":false,"discountPrefixText":"","discountCodeNodeId":"gid:\/\/shopify\/DiscountCodeNode\/1789710762351","translations":null,"quantity":1,"applyToEachItem":false,"enableDiscountExpirationOverride":false,"discountExpirationValue":null,"discountExpirationType":null,"activationDelayDays":null,"excludeProductData":null}]; 13762 13763 13764 13765 _ALConfig.vipRewards = []; 13766 13767 13768 13769 _ALConfig.vipPointRewards = [{"id":5304,"shop":"rocky-mountain-oils.myshopify.com","type":"BIRTHDAY","status":"ACTIVE","historicPurchaseDuration":"NONE","basePoints":100.0,"includeSubtotal":false,"includeTax":false,"excludeCollections":null,"name":"Preferred Birthday Points","customerNotification":"{{points}} points added for birthday.","createAt":"2026-10-02T19:27:47.688643Z","updateAt":"2026-10-02T19:27:47.688644Z","rewardInterval":"DAY","productId":null,"collectionId":null,"variantId":null,"productData":null,"collectionData":null,"customerFacingLabel":"100 points for your Birthday","socialUrl":null,"disableForOnSellProduct":false,"autoApprovalDays":0,"enableInterval":false,"earnLimit":1,"activityType":"VIP","allowedCustomerTags":null,"includeShippingPoints":false,"eligibleForFirstOrder":false,"maximumPoints":null,"restrictCustomerTags":null,"customerFacingIconUrl":null,"serial":0,"excludeOrderTags":null,"pointBasedOn":"FLAT_PURCHASE","excludeProducts":null,"givePointsToGuestCustomers":false,"allowedProductTags":null,"restrictProductTags":null,"rollBackPointsOnUnsubscribe":false,"addAdditionalPoints":false,"additionalPoints":null,"addAdditionalPhotoPoints":false,"additionalPhotoPoints":null,"addAdditionalVideoPoints":false,"additionalVideoPoints":null,"refundNotificationLabel":"{{points}} points removed for refund.","disablePointsForDiscountedProduct":false,"platformType":"BOTH","vipTierId":5659,"earnType":"POINTS","minimumOrderValue":null,"allowedOrderTags":null,"excludeVariantIds":null,"rewardA
13769ssignType":"DYNAMIC","applyOnImportedCustomer":false,"enableBirthdayPromo":false,"promoPointsMultiplier":null,"ruleStartDate":null,"ruleEndDate":null,"translations":null,"appliesOn":"BOTH","manuallyApprovePoints":false,"showReviewProductDetails":true,"collectBirthYear":true},{"id":5303,"shop":"rocky-mountain-oils.myshopify.com","type":"BIRTHDAY","status":"ACTIVE","historicPurchaseDuration":"NONE","basePoints":150.0,"includeSubtotal":false,"includeTax":false,"excludeCollections":null,"name":"Premium Birthday Points","customerNotification":"{{points}} points added for birthday.","createAt":"2026-10-02T19:21:15.78764Z","updateAt":"2026-10-02T19:21:15.787642Z","rewardInterval":"DAY","productId":null,"collectionId":null,"variantId":null,"productData":null,"collectionData":null,"customerFacingLabel":"150 points for your Birthday","socialUrl":null,"disableForOnSellProduct":false,"autoApprovalDays":0,"enableInterval":false,"earnLimit":1,"activityType":"VIP","allowedCustomerTags":null,"includeShippingPoints":false,"eligibleForFirstOrder":false,"maximumPoints":null,"restrictCustomerTags":null,"customerFacingIconUrl":null,"serial":0,"excludeOrderTags":null,"pointBasedOn":"FLAT_PURCHASE","excludeProducts":null,"givePointsToGuestCustomers":false,"allowedProductTags":null,"restrictProductTags":null,"rollBackPointsOnUnsubscribe":false,"addAdditionalPoints":false,"additionalPoints":null,"addAdditionalPhotoPoints":false,"additionalPhotoPoints":null,"addAdditionalVideoPoints":false,"additionalVideoPoints":null,"refundNotificationLabel":"{{points}} points removed for refund.","disablePointsForDiscountedProduct":false,"platformType":"BOTH","vipTierId":5660,"earnType":"POINTS","minimumOrderValue":null,"allowedOrderTags":null,"excludeVariantIds":null,"rewardAssignType":"DYNAMIC","applyOnImportedCustomer":false,"enableBirthdayPromo":false,"promoPointsMultiplier":null,"ruleStartDate":null,"ruleEndDate":null,"translations":null,"appliesOn":"BOTH","manuallyApprovePoints":false,"showReviewProductDetails":true,"collectBirthYear":true},{"id":5161,"shop":"rocky-mountain-oils.myshopify.com","type":"BIRTHDAY","status":"ACTIVE","historicPurchaseDuration":"NONE","basePoints":200.0,"includeSubtotal":false,"includeTax":false,"excludeCollections":null,"name":"VIP Birthday Points","customerNotification":"{{points}} points added for birthday.","createAt":"2026-09-30T14:45:09.915012Z","updateAt":"2026-10-02T19:13:56.736117Z","rewardInterval":"DAY","productId":null,"collectionId":null,"variantId":null,"productData":null,"collectionData":null,"customerFacingLabel":"200 points for your Birthday","socialUrl":null,"disableForOnSellProduct":false,"autoApprovalDays":0,"enableInterval":false,"earnLimit":1,"activityType":"VIP","allowedCustomerTags":null,"includeShippingPoints":false,"eligibleForFirstOrder":false,"maximumPoints":null,"restrictCustomerTags":null,"customerFacingIconUrl":null,"serial":0,"excludeOrderTags":null,"pointBasedOn":"FLAT_PURCHASE","excludeProducts":null,"givePointsToGuestCustomers":false,"allowedProductTags":null,"restrictProductTags":null,"rollBackPointsOnUnsubscribe":false,"addAdditionalPoints":false,"additionalPoints":null,"addAdditionalPhotoPoints":false,"additionalPhotoPoints":null,"addAdditionalVideoPoints":false,"additionalVideoPoints":null,"refundNotificationLabel":"{{points}} points removed for refund.","disablePointsForDiscountedProduct":false,"platformType":"BOTH","vipTierId":5661,"earnType":"POINTS","minimumOrderValue":null,"allowedOrderTags":null,"excludeVariantIds":null,"rewardAssignType":"DYNAMIC","applyOnImportedCustomer":false,"enableBirthdayPromo":false,"promoPointsMultiplier":null,"ruleStartDate":null,"ruleEndDate":null,"translations":null,"appliesOn":"BOTH","manuallyApprovePoints":false,"showReviewProductDetails":true,"collectBirthYear":true}]; 13770 13771 13772 13773 _ALConfig.widget_setting = {"id":1804,"shop":"rocky-mountain-oils.myshopify.com","themePrimaryColor":null,"themeSecondaryColor":null,"widgetPosition":"RIGHT","showWidget":true,"widgetBackgroundColor":"#a4197a","widgetTextColor":"#ffffff","faq":null,"popupHeaderColor":"#a4197a","popupTilesColor":"#f8fafc","popupButtonColor":"#a4197a","popupIconColor":"#1f2937","popupLinksColor":"#2f5bd8","homeGreetings":null,"homeSignup":null,"popupButtonTextColor":"#ffffff","popupTilesTextColor":"#1f2937","popupDiscountCodeGenerated":null,"popupCopyDiscount":null,"popupCopiedDiscount":null,"widgetTitle":null,"customCss":null,"widgetCounterBackgroun
13773dColor":"#a4197a","widgetCounterTextColor":"#ffffff","logoUrl":"","notificationToastBackgroundColor":"#feeeff","notificationToastTextColor":"#a4197a","acquirePointsBackgroundColor":"#eef4ff","acquirePointsTextColor":"#1e3a8a","pointsBalanceBackgroundColor":"inherit","pointsBalanceTextColor":"#1f2937","allowedCustomersTag":"","widgetSettingJson":"{\"headerTextColor\":\"#ffffff\",\"widgetDateTimeFormat\":\"MMM D, YYYY, h:mm A\",\"showVIPSection\":true,\"dedicatedPageType\":\"DEDICATED_PAGE_V2\",\"referralRedirectUrl\":\"\",\"loaderIcon\":\"\",\"showLoyaltyOptOut\":false,\"cartWidgetSelector\":\"\",\"toastPosition\":\"bottom-center\",\"primaryDedicatedPageSectionBackgroundColor\":\"#feeeff\",\"reachVipMileStoneType\":\"TOTAL_AMOUNT\",\"createAccountLink\":\"\",\"cartDrawerWidgetPlacement\":\"BEFORE\",\"refreshOnAddToCart\":false,\"selectApplyRewardsDefault\":false,\"dateLocalFormat\":\"DEFAULT\",\"loyaltyPageMetaDescription\":\"\",\"enableMetaTagForNoIndexing\":false,\"hideToastNotification\":false,\"subheadingTextColor\":\"#ffffff\",\"hideAppstleLoaderIcon\":false,\"showRedeemSection\":true,\"loadScriptOnlyOnDedicatedPage\":false,\"hideRedeemRuleSectionOnEmpty\":true,\"widgetBackgroundImage\":\"\",\"vipTierBadgeBackgroun
13773dColor\":\"inherit\",\"enableEnhancedV2Styling\":true,\"showCustomerHistoryDescriptionToolTip\":false,\"checkoutAllowedCustomerTags\":\"\",\"secondaryDedicatedPageBackgroundColor\":\"#ffffff\",\"launcherDataType\":\"POINTS\",\"primaryDedicatedPageV2BackgroundColor\":\"#a4197a\",\"titleCount\":60,\"hideCheckoutBlockLoggedOutCustomers\":false,\"vipTierBadgeTextColor\":\"#000000\",\"popupButtonHoverColor\":\"#b4197a\",\"cartWidgetPlacement\":\"BEFORE\",\"showRewardSection\":true,\"primaryDedicatedPageBackgroundColor\":\"#a4197a\",\"showHowItWorksSection\":false,\"visitedIcon\":\"\",\"afterCopiedDiscountRedirectUrl\":\"\",\"showVipTierBadge\":false,\"loggedOutFlagAcquirePoints\":false,\"manageLoyaltyButtonUrl\":\"\",\"hideRulesForLoggedOutCustomer\":false,\"hideStoreCreditsBalance\":true,\"checkoutRestrictCustomerTags\":\"\",\"footerTextColor\":\"#757575\",\"hideExpirationDate\":false,\"dedicatedPageV2CardGap\":\"1.25rem\",\"showReferralSection\":true,\"cartWidgetRewardIcon\":\"\",\"hideEarnRuleSectionOnEmpty\":true,\"primaryDedicatedPageTextColor\":\"#000000\",\"showFAQSection\":true,\"showRangeForRedeemPoints\":false,\"dedicatedPageV2BorderRadius\":\"8px\",\"secondaryDedicatedPageSectionBackgroundColor\":\"#FFFFFF\",\"loyaltyPageMetaTitle\":\"\",\"applyDiscountCodeOnRedeem\":false,\"referralCustomRedirectUrl\":\"\",\"showWidgetScrollbar\":false,\"waysToEarnIcon\":\"\",\"vipTierBadgeSelector\":\"\",\"displayMethod\":\"TEXT_ICON\",\"hideFaqSection\":false,\"disableRuleCollapsible\":false,\"showEarnSection\":true,\"showTierName\":false,\"cartDrawerRedeemWidgetSelector\":\"\",\"checkoutRedeemLoginURL\":\"\",\"referralClaimGiftIcon\":\"\",\"widgetButtonLogoUrl\":\"\",\"disableLoyaltyBlocks\":false,\"hidePointsBalance\":false,\"descriptionCount\":500,\"exploreButtonCustomRedirect\":\"\",\"hideWidgetOnScroll\":false,\"customFontUrl\":\"\",\"hideWidgetLauncherOnMobile\":false,\"hideFreeProductDropdownProductTitle\":false,\"excludedPaths\":\"\/homepage,\/blogs\",\"showCartRedeemWidget\":false,\"customSignInLink\":\"\",\"referredCustomerRewardIcon\":\"\",\"enableAcquirePointsQuantitySelector\":false,\"showPoweredBy\":true,\"hideVipTierName\":false,\"showTransactionHistory\":true,\"waysToRedeemIcon\":\"\",\"secondaryDedicatedPageTextColor\":\"#4b5563\",\"customHtmlInject\":\"[]\",\"referringCustomerRewardIcon\":\"\",\"bodyTextColor\":\"#333333\"}","widgetButtonLogoUrl":"","showReferralSocialMedia":false,"referralSocialMediaInfo":null,"restrictedCustomersTag":"","blockWidgetOnPages":"","colorSettingsJson":"{\"popupLinksColor\":\"#2f5bd8\",\"popupHeaderColor\":\"#a4197a\",\"popupIconColor\":\"#1f2937\",\"acquirePointsBackgroundColor\":\"#eef4ff\",\"pointsBalanceBackgroundColor\":\"inherit\",\"pointsBalanceTextColor\":\"#1f2937\",\"widgetCounterBackgroundColor\":\"#a4197a\",\"popupButtonColor\":\"#a4197a\",\"popupTilesColor\":\"#f8fafc\",\"widgetBackgroundColor\":\"#a4197a\",\"notificationToastTextColor\":\"#a4197a\",\"widgetCounterTextColor\":\"#ffffff\",\"notificationToastBackgroundColor\":\"#feeeff\",\"popupTilesTextColor\":\"#1f2937\",\"popupButtonTextColor\":\"#ffffff\",\"widgetTextColor\":\"#ffffff\",\"acquirePointsTextColor\":\"#1e3a8a\"}","widgetType":"DEDICATED_PAGE","imageLinksJson":"{\"collectionDiscountRuleImage\":\"\",\"purchaseRuleImage\":\"\",\"buyProductFromCollectionRuleImage\":\"\",\"vipTierImage\":\"\",\"freeShippingRuleImage\":\"\",\"birthdayDiscountRuleImage\":\"\",\"referralBackgroundImage\":\"\",\"youtubeRuleImage\":\"\",\"referralReferenceImage\":\"\",\"birthdayRuleImage\":\"\",\"judgeMeReviewRuleImage\":\"\",\"pinterestRuleImage\":\"\",\"freeProductRuleImage\":\"\",\"productDiscountRuleImage\":\"\",\"faqIconImage\":\"\",\"looxIoReviewRuleImage\":\"\",\"stampedIoReviewRuleImage\":\"\",\"productReviewRuleImage\":\"\",\"discountRuleImage\":\"\",\"faqBackgroundImage\":\"\",\"tiktokRuleImage\":\"\",\"twitterRuleImage\":\"\",\"subscriptionRuleImage\":\"\",\"buyProductRuleImage\":\"\",\"createAccountRuleImage\":\"\",\"dynamicDiscountRuleImage\":\"\",\"visitShopRuleImage\":\"\",\"facebookRuleImage\":\"\",\"heroBackgroun
13773dImage\":\"\",\"instagramRuleImage\":\"\",\"okendoReviewRuleImage\":\"\",\"availableRewardsImage\":\"\"}","customerGreetingsIcon":null,"heroBackgroundImage":"","referralReferenceImage":"","referralBackgroundImage":"","purchaseRuleImage":"","subscriptionRuleImage":"","createAccountRuleImage":"","visitShopRuleImage":"","birthdayRuleImage":"","buyProductRuleImage":"","buyProductFromCollectionRuleImage":"","facebookRuleImage":"","pinterestRuleImage":"","instagramRuleImage":"","tiktokRuleImage":"","youtubeRuleImage":"","twitterRuleImage":"","stampedIoReviewRuleImage":"","looxIoReviewRuleImage":"","judgeMeReviewRuleImage":"","productReviewRuleImage":"","okendoReviewRuleImage":"","discountRuleImage":"","freeShippingRuleImage":"","freeProductRuleImage":"","productDiscountRuleImage":"","collectionDiscountRuleImage":"","dynamicDiscountRuleImage":"","birthdayDiscountRuleImage":"","availableRewardsImage":"","vipTierImage":"","faqBackgroundImage":"","showAcquirePoints":false,"acquirePointsSelector":null,"showPointsBalance":null,"pointsBalanceSelector":null,"showPoweredBy":true,"showWidgetScrollbar":false,"forceRedirectDedicatedPage":false,"historyDate":null,"historyActivityDetails":null,"historyPointsAdjustment":null,"historyStatus":null,"afterCopiedDiscountRedirectUrl":"","showVipTierBadge":false,"vipTierBadgeSelector":"","vipTierBadgeBackgroun
13773dColor":"inherit","vipTierBadgeTextColor":"#000000","faqIconImage":"","descriptionCount":500,"customHtmlInject":"[]","availablePoints":null,"showTransactionHistory":true,"showLoyaltyOptOut":false,"loyaltyOptoutActive":null,"loyaltyOptoutInactive":null,"createAccountLink":"","showReferralSection":true,"showRewardSection":true,"showRedeemSection":true,"showEarnSection":true,"showFAQSection":true,"showVIPSection":true,"showHowItWorksSection":false,"vipTierBenefits":null,"enrollLoyaltyProgramTitle":null,"enrollLoyaltyProgramDescription":null,"freeProductRewardAddToCart":null,"freeProductRewardAddedSuccessMessage":null,"enrolledSuccessMessage":null,"customFontUrl":"","visitedIcon":"","allowWidgetOnSpecificPages":"","referralRedirectUrl":"","showRangeForRedeemPoints":false,"hideAppstleLoaderIcon":false,"hideFreeProductDropdownProductTitle":false,"showToLoggedInCustomerOnly":false,"enableMetaTagForNoIndexing":false,"waysToEarnIcon":"","waysToRedeemIcon":"","loaderIcon":"","toastPosition":"bottom-center","widgetDateTimeFormat":"MMM D, YYYY, h:mm A","toastErrorMsg":null,"primaryDedicatedPageBackgroundColor":"#a4197a","secondaryDedicatedPageBackgroundColor":"#ffffff","titleCount":60,"programUpdateMessage":null,"primaryDedicatedPageSectionBackgroundColor":"#feeeff","secondaryDedicatedPageSectionBackgroundColor":"#FFFFFF","primaryDedicatedPageV2SectionBackgroundColor":null,"secondaryDedicatedPageV2SectionBackgroundColor":null,"primaryDedicatedPageV2BackgroundColor":"#a4197a","secondaryDedicatedPageV2BackgroundColor":null,"primaryDedicatedPageV2TextColor":null,"secondaryDedicatedPageV2TextColor":null,"dedicatedPageV2BorderColor":null,"dedicatedPageV2BorderRadius":"8px","dedicatedPageV2CardGap":"1.25rem","dedicatedPageV2SectionPadding":null,"refreshOnAddToCart":false,"showTierName":false,"customSignInLink":"","checkoutRedeemLoginDescription":null,"checkoutRedeemLoginURL":"","checkoutTotalAcquirePoints":null,"checkoutTotalAcquirePointsDescription":null,"reachVipMileStoneType":"TOTAL_AMOUNT","showCustomerHistoryDescriptionToolTip":false,"checkoutTotalStoreCreditAcquirePoints":null,"hideRulesForLoggedOutCustomer":false,"hideCheckoutBlockLoggedOutCustomers":false,"checkoutAllowedCustomerTags":"","checkoutRe
13773strictCustomerTags":"","hideWidgetLauncherOnMobile":false,"referringCustomerRewardIcon":"","referredCustomerRewardIcon":"","referralClaimGiftIcon":"","hideToastNotification":false,"dateLocalFormat":"DEFAULT","manageLoyaltyButtonUrl":"","rewardsDetailsExpireDate":null,"hideEarnRuleSectionOnEmpty":true,"hideRedeemRuleSectionOnEmpty":true,"hideStoreCreditsBalance":true,"hidePointsBalance":false,"popupButtonHoverColor":"#b4197a","headerTextColor":"#ffffff","subheadingTextColor":"#ffffff","bodyTextColor":"#333333","footerTextColor":"#757575","hideWidgetOnScroll":false,"loyaltyPageMetaTitle":"","loyaltyPageMetaDescription":"","hideExpirationDate":false,"disableLoyaltyBlocks":false,"loadScriptOnlyOnDedicatedPage":false,"excludedPaths":"\/homepage,\/blogs","hideFaqSection":false,"enableAcquirePointsQuantitySelector":false,"showCartRedeemWidget":false,"cartWidgetSelector":"","cartDrawerRedeemWidgetSelector":"","cartWidgetPlacement":"BEFORE","cartWidgetRewardIcon":"","cartDrawerWidgetPlacement":"BEFORE","dedicatedPageType":"DEDICATED_PAGE_V2","secondaryDedicatedPageTextColor":"#4b5563","primaryDedicatedPageTextColor":"#000000","displayMethod":"TEXT_ICON","launcherDataType":"POINTS","widgetBackgroundImage":"","hideVipTierName":false,"enableEnhancedV2Styling":true,"applyDiscountCodeOnRedeem":false,"dedicatedPageSectionOrders":"[\n {\n \"i
13773d\": \"hero\",\n \"title\": \"Hero\",\n \"visible\": true\n },\n {\n \"id\": \"howItWorks\",\n \"title\": \"How It Works\",\n \"visible\": true\n },\n {\n \"id\": \"rewards\",\n \"title\": \"Rewards\",\n \"visible\": true\n },\n {\n \"id\": \"waysToEarn\",\n \"title\": \"Ways To Earn\",\n \"visible\": true\n },\n {\n \"id\": \"waysToRedeem\",\n \"title\": \"Ways To Redeem\",\n \"visible\": true\n },\n {\n \"id\": \"vipProgram\",\n \"title\": \"Vip Program\",\n \"visible\": true\n },\n {\n \"id\": \"referralProgram\",\n \"title\": \"Referral Program\",\n \"visible\": true\n },\n {\n \"id\": \"transactionHistory\",\n \"title\": \"Transaction History\",\n \"visible\": true\n },\n {\n \"id\": \"faqs\",\n \"title\": \"Faqs\",\n \"visible\": true\n }\n]","disableRuleCollapsible":false,"referralCustomRedirectUrl":"","selectApplyRewardsDefault":false,"exploreButtonCustomRedirect":"","heroBackgroundMobileImage":null,"loggedOutFlagAcquirePoints":false,"taxesIncluded":false,"taxShipping":false,"awardPointsOnAmountPaidAfterStoreCredit":true}; 13774 13775 13776 13777 _ALConfig.referralLoyalty = {"referralType":"PURCHASE","referralRestrictedCustomerTags":"","referralGet":"Get $25.00 discount on any product","referredGet":"Get 25% discount on any product","referralAllowedCustomerTags":""}; 13778 13779 13780 13781 13782 _ALConfig.assetRev = "8b2317fe74421f010f6ff5dde4b2e2db"; 13783 13784 _ALConfig.storeFrontApiVersion = "2026-01"; 13785 _ALConfig.__appstleLoyaltyNativeFetch = window.fetch.bind(window); 13786 13787 13788 _ALConfig.pointsExpirationSetting = {"expirationInterval":3,"expirationIntervalType":"YEAR"}; 13789 13790 13791 13792 13793 13794 13795 _ALConfig.showStoreCreditRewards = false; 13796 13797 13798 13799 _ALConfig.customerId = null; 13800 _ALConfig.customerName = ''; 13801 _ALConfig.customerEmail = null; 13802 _ALConfig.customerStoreCreditBalance = null; 13803 _ALConfig.customerStoreCreditCurrency = null; 13804 _ALConfig.customerTags = []; 13805 _ALConfig.customerLoyalty = null; 13806 13807 13808 13809 _ALConfig.shop = "rocky-mountain-oils.myshopify.com"; 13810 _ALConfig.shopMoneyFormat = "${{amount}}"; 13811 _ALConfig.shopMoneyFormatWithCurrencyFormat = "${{amount}} USD"; 13812 13813 13814 13815 13816 _ALConfig.enableInactiveCustomer = true; 13817 13818 13819 13820 _ALConfig.allowCustomerOptIn = false; 13821 13822 13823 13824 _ALConfig.enableDiscountToApplyAutomatically = true; 13825 13826 13827 13828 _ALConfig.hasDedicatedPageAccess = true; 13829 13830 13831 13832 _ALConfig.themeEditorMode = false; 13833 13834 13835 13836 _ALConfig.shop_labels = {"popupRewardsDetailsHeadingText":"Your Rewards","rewardsExpirationLabel":"{{day}}d","acquirePointsLabel":"Earn {{totalPoints}} points when you buy this item","checkoutPendingPointsLabel":"with {{pendingPoints}} pending points.","homeSignup":"Sign up to \u003cstrong\u003e{{site_name}}'s store \u003c\/strong\u003e to start earning rewards","vipSpentAmountLabel":"Spend {{remainingAmount}} more this year","minimumPointsForRedeemText":"Minimum {{points}} points required for point redemption","checkoutAcquiredPointsLabel":"You have acquired {{acquiredPoints}} points from this order","cartWidgetLoginMessageLabel":"Log in to redeem your points for rewards.","popupDiscountCodeGenerated":"Use the below coupon to get your discount.","checkoutDiscountCodeApplyButtonLabel":"Apply","exploreLabel":"Explore","loyaltyPageHeroV2Heading":"Exclusive Rewards for Our Valued Members","availablePoints":"Available points {{ points }}","dedicatedPageUnavailableLabel":"Oops! This page is not available.","otherRulesRedirectActionLabel":"Claim","birthdayDayPlaceholderLabel":"Day","referralLinkSentDescription":"Your referral link has been sent","currentVipTierBadgeLabel":"You are a {{current_tier}} member","checkoutAvailableRewardsLabel":"Your Rewards","noteHeadingLabel":"Note","popupCopiedDiscount":"Applied to the Cart","referralFriendGetText":"They","cartWidgetRewardsButtonLabel":"Rewards","customerReferralClaimedStatus":"Claimed","popupReferralContentText":"Give your friends a reward and claim your own when they make a purchase.","storeCreditApplyGuideLabel":"Your Store Credit is ready at checkoutâmake sure the 'Apply store credit' checkbox is checked and verify the amount you're using.","storeCreditBalanceLabel":"Your Store Credits","faq":"[{\"title\":\"What is this? \",\"content\":\"\u003cp\u003eWeâre excited to show our appreciation through our exclusive rewards program! By creating an account, youâll earn points for various activities on our site, such as referrals and purchases. These points can be redeemed for discounts on future purchasesâthe more points you collect, the more you save!\u003c\/p\u003e\"},{\"title\":\"Who can join?\",\"content\":\"\u003cp\u003eAnyone with an account is automatically enrolled in the program.\u003c\/p\u003e\"},{\"title\":\"How do I earn points?\",\"content\":\"\u003cp\u003eYou can earn points through various activities, such as referring friends and making purchases. To explore all the ways you can earn points, click on the *Ways to Earn* tab in the menu.\u003c\/p\u003e\"},{\"title\":\"How do I redeem my points?\",\"content\":\"\u003cp\u003eSelect the *Ways to Redeem* tab. Here, you'll find a list of all the rewards we offer. If you have sufficient points, you can redeem them for a reward.\u003c\/p\u003e\"},{\"title\":\"Is there a limit to the number of points I can earn?\",\"content\":\"\u003cp\u003eNo. Go ahead and earn as many as you can.\u003c\/p\u003e\"},{\"title\":\"What do the 'approved', 'pending' and 'cancelled' statuses mean?\",\"content\":\"\u003cp\u003eApproved: These points can be redeemed on rewards immediately.\u003c\/p\u003e\u003cp\u003ePending: These points need to be verified before you can redeem them. This typically applies to purchases and referrals.\u003c\/p\u003e\u003cp\u003eCancelled: These points will not be added to your account. For example, this will happen if you cancel a purchase (the points will change from pending to cancelled)\u003c\/p\u003e\"},{\"title\":\"Do my points expire?\",\"content\":\"\u003cp\u003eYour points stay active as long as you keep earning. Points expire only if your account goes 3 years without earning any new points. Each time you earn points, whether from a purchase or another reward activity, the 3-year clock resets for your entire balance.\u003c\/p\u003e\"},{\"title\":\"How do VIP tiers work?\",\"content\":\"\u003cp\u003eTiers are based on how much you spend each calendar year (January 1 through December 31). As soon as your spending reaches $125, you're upgraded to Premium, and at $300 you're upgraded to Elite. Upgrades happen right away, with no waiting period.\u003c\/p\u003e\u003cp\u003eOnce you reach a tier, you keep it for a full 12 months. At the end of those 12 months, we review your spending for the current calendar year so far and place you in the tier that matches it.\u003c\/p\u003e\u003cp\u003eFor example, if you reach $125 in May, you'll move to Premium immediately and keep it until the following May. At that point, if you've spent at least $125 since January, you'll stay in Premium. If you haven't reached $125 yet, you'll return to Preferred and can move back up as soon as you hit $125 that year.\u003c\/p\u003e\"}]","dynamicPointsLabel":"Enter Points","loyaltyOptOutLabel":"Loyalty Program Updated","enrollLoyaltyProgramTitle":"Enroll Loyalty Program","howItWorksTitleDescription":"","rewardDetail
13836sHelpLabel":"Use the below coupon to get your discount","popupCopyDiscount":"Apply Code","howItWorksStep2Description":"Complete these activities to collect points","vipStatusLabel":"VIP Status","pendingStatusLabel":"Pending","checkoutTotalStoreCreditAcquirePoints":"Complete this purchase to earn up to {{totalStoreCreditPoints}} store credits.","acquirePointsLoggedOutText":"Loyalty Members earn {{totalPoints}} points when they purchase this item.","sendEmailHeadingText":"Send Referral Link","enrollLoyaltyProgramActionLabel":"Enroll Now","freeProductRewardAddedSuccessMessage":"Added to cart â your discount applies at checkout","birthdayYearPlaceholderLabel":"Year","cartWidgetLoginLinkLabel":"Log in","popupFAQHeadingText":"FAQ's","widgetTitle":"Loyalty Points","noCustomerHistoryDescriptionLabel":"Transactions will appear here after points are earned or redeemed.","claimReferralEmailFieldHintText":"Note: To redeem your reward, please create an account using the same email address.","checkoutToggleRedeemButtonLabel":"Redeem Rewards","rejectedStatusLabel":"Rejected","checkoutViewMoreDiscountCodeButtonLabel":"View More","perTransactionLimitExceedText":"Per transaction limit exceed. Cannot redeem more then {{shop_redeem_limit}} points","pointsBalanceLabel":"Your point balance: {{points}}","vipTierBenefits":"Benefits","popupRedeemRewardsHeadingText":"Redeem Rewards","howItWorksStep3Count":"03","transactionHistoryPaginationLabel":"Showing {{startItem}} to {{endItem}} of {{totalItems}} entries","vipRewardLabel":"Rewards","sendEmailButtonText":"Send Email","cartWidgetAvailableBalanceLabel":"You have: {{available_points}} points","checkoutRedeemLabel":"Redeem your Points","socialAlreadyClaimedLabel":"Already Claimed!","referredByText":"Referred by someone","loyaltyPageMetaTitle":"","birthdayActionLabel":"Submit","rewardDetailsButtonLabel":"Reward Details","authenticationLabel":"You need to sign in to access this feature","notEligibleLabel":"You are not eligible for this loyalty program.","popupReferralTitleText":"Referrals","popupEarnRewardsHeadingText":"Earn Rewards","popupAvailableRewardsContentText":"You have {{rewards}} rewards available","claimedStatusLabel":"Claimed","redeemActionLabel":"Redeem","checkoutRedeemLoginLabel":"Log in","createAccountLabel":"Join now","rewardDetailsTitleLabel":"Spend {{spend_amount}} and , get {{discount_amount}} {{discount_type}} discount","howItWorksTitle":"How it works","claimGiftHeaderText":"Claim Your Gift","yourReferralsHeadingLabel":"Your Referrals","noRefferralAvailableText":"No Referrals reward available","popupCardActionText":"Sign In","popupFAQAskedQuestionHeadingText":"Frequently Asked Questions","popupEarnTilesText":"Ways to earn","minimumAmountSpentForRedeemText":"Minimum {{amount_spent}} spent amount required for point redemption","birthdayUpdatedToastLabel":"Birthday Updated","historyPointsAdjustment":"Points\/Credits","referButtonLabel":"Refer Now","claimReferralGiftButtonText":"Claim Your Gift","historyActivityDetails":"Activity Details","widgetCopiedLabel":"Copied","sentDiscountCodeToEmailText":"Referral invitation accepted.","referralCustomerGetText":"You","sendRefferralLink":"Send Referral Link","howItWorksStep2Count":"02","popupRemainingPointsHeadingText":"Your points","referralLinkSentLabel":"Referral Link Sent","birthdayTitleLabel":"Enter your birthday","checkoutSelectRedeemRuleDropdownLabel":"Select Redeem Rule","noRedeemRulesLabel":"No Redeem Rules Found","minimumOrderCountForRedeemText":"Minimum {{order_count}} orders required for point redemption","enrolledSuccessMessage":"Enrolled Successfully","customerHistoryLabel":"Transaction history","redeemLimitExceedText":"Redeem Limit Exceed. Cannot redeem more then {{redeem_limit}} times per {{reward_interval}}","widgetDateTimeFormat":"MMM D, YYYY, h:mm A","pointExpirationDateLabel":"Expires: {{expiration_date}}","popupRedeemTilesText":"Ways to redeem","loyaltyOptOutSettingsLabel":"Settings","alreadyHaveAnAccountLabel":"Already have an account?","checkoutTotalAcquirePointsDescription":"Use your points to redeem a discount on your next order.","birthdayMonthPlaceholderL
13836abel":"Month","discountCodeLabel":"Discount Code","alreadyReferredErrorLabel":"Already have an account or already referred.","checkoutEmptyRewardsLabel":"You don't have any rewards available.","popupRewardPointContentText":"Earn points when you shop, then redeem them for rewards.","chooseAnOptionLabel":"Choose an Option","excludeCustomerLabel":"Exclude yourself from the Loyalty program.","noEarnRulesLabel":"No Earn Rules Found","emailValidationLabel":"Please provide a valid email","historyDate":"Date","popupAvailableRewardsHeadingText":"Your Rewards","customerHistoryDescriptionLabel":"See the list of your points\/credits earned and redeemed activity.","totalAcquiredStoreCreditsLabel":"You have earned {{currency}}{{totalStoreCreditPoints}} store credits on this order","claimReferralEmailFieldText":"Enter your email","subscribeRuleRedirectActionLabel":"Subscribe","loyaltyPageMetaDescription":"","claimRewardButtonLabel":"Claim Reward","checkoutRedeemLoginDescription":"to check your points balance and explore the exciting rewards available for redemption.","howItWorksStep2Title":"Earn points","loyaltyStatusLabel":"Loyalty Status","vipEarnPointLabel":"Earn {{points}} Points","vipCurrentTierLabel":"Your Current Tier","storeOnSaleForRedeemText":"Store on sale, to redeem point please try after {{shop_on_sale_end_date}}","popupCardHeadingText":"Start earning rewards","loyaltyPageHeroV2SubHeading":"Become a member and earn points, store credits \u0026 exclusive rewards every time you shop.","checkoutToggleAvailableRewardsButtonLabel":"Available Discounts","manageLoyaltyButtonLabel":"Manage Loyalty","howItWorksStep1Title":"Create an account","shareReferralLinkLabel":"Share Your Unique Link","popupWelcomeText":"Welcome {{customer_first_name}}","referYourFriendContentText":"When friends and family check out using the referral link below, they receive {{referred_reward}} and you receive a {{referral_reward}} reward","vipAchievableTierLabel":"{{milestone_type}} {{milestone}} to reach {{achievable_tier}}","shareSocialMediaLabel":"Share directly on your favorite platform:","homeGreetings":"Welcome, {{customer_first_name}}","loyaltyOptOutActiveLabel":"Loyalty program {{active_status}}.","dailyLimitExceedText":"Daily limit exceed. Cannot redeem more than {{redeem_limit}} points per day","popupCardContentText":"Sign in or create an account to start earning rewards.","rewardsDetailsExpireDate":"Expires at: {{expire_date}}","enrollLoyaltyProgramDescription":"Enroll our loyalty program to get rewards and incentives.","loyaltyPageHeroV2AuthenticatedHeading":"Hi, {{customer_first_name}}, you have {{points}} points","statusHeadingLabel":"Status","minimumRedeemRequiredPointsLabel":"","vipTierDetailsText":"The more you shop, the more you earn. Climb the tiers to earn more points per dollar.\u003cbr\u003e\u003csmall\u003eQualifying spend resets every January 1. Your tier status lasts a full year from the day you earn it.\u003c\/small\u003e","membershipRewardTitleLabel":"Appstle Membership","howItWorksStep1Description":"Become a member to receive rewards","birthdayProfileLabel":"Your Birthday","historyStatus":"Status","approvedStatusLabel":"Approved","discountAppliedLabel":"Please copy the discount and proceed to checkout and the discount will be applied automatically","acquireStoreCreditLabel":"Earn {{totalStoreCreditPoints}} store credits when you buy this item","toastErrorMsg":"Something went wrong","includeCustomerLabel":"Include yourself in the Loyalty program to earn points.","checkThankYouAcquiredPointsHeadingLabel":"Congratulations","popupCommunityContentText":"Earn rewards every time you shop.","customerReferralPendingStatus":"Pending","referredEmailHeadingLabel":"Email","currentVipTierText":"Your Current Tier","popupRewardPointTitleText":"Earn Rewards","socialMediaActionLabel":"Claim","howItWorksStep3Description":"Exchange points for exciting discounts","noCustomerHistoryLabel":"No History Found","freeProductRewardAddToCart":"Add to cart","creditRewardDetailsHelpLabel":"Apply these credits on the order page to get a discount on your purchase!","shareReferralEmailFieldText":"Enter your friend's email","howItWorksStep1Count":"01","vipTierTitleLabel":"VIP","referralCompletedText":"{{total_count}} referrals completed","discountAppliedAtCheckoutMessage":"Your discount will be applied at checkout â the cart may show the full price.","customerReferralRecurringStatus":"Recurring","reviewRuleRedirectActionLabel":"Review","referYourFriendTitleText":"Refer your friends","popupEarnPointDescriptionText":"Earn more points, and turn those points into awesome rewards!","popupCommunityHeadingText":"Rocky Mountain Oils","recurringStatusLabel":"Recurring","claimReferralGiftDescriptionText":"Someone has sent you a gift. Enter your email to claim it now.","programUpdateMessage":"Process initiated. Please wait for the page to reload","dynamicPointsHelpText":"Spend {{points}} points to get {{discount}} discount.","totalAcquiredPointsLabel":"You have earned {{totalAcquiredPoints}} points on this order","howItWorksStep3Title":"Redeem points","checkoutTotalAcquirePoints":"Complete this purchase to earn up to {{totalAcquiredPoints}} points"}; 13837 13838 13839 var loyaltyGlobalStyles = `<style> 13840body { 13841margin: 0 13842} 13843.appstle-loyalty-hidden { 13844display: none !important; 13845visibility: hidden !important; 13846} 13847</style>` 13848 document.querySelector('body').insertAdjacentHTML('beforeend', loyaltyGlobalStyles); 13849 13850 window.addEventListener('message', appstleLoyaltyIframeListener, false); 13851 window.addEventListener('kp_user_logged_out', function() { window.location.reload(); }); 13852 const removeFirstSlashFromURL = (url) => url ? url?.replace(/\\\//g, "/")?.replace(/^\/+/, "") : url; 13853 13854 13855 function applyDiscount(discountCode, shouldReload = false) { 13856 const encodedDiscountCode = encodeURIComponent(discountCode?.trim()); 13857 const discountURL = `${location?.origin}/discount/${encodedDiscountCode}`; 13858 fetch(discountURL).then(res => { 13859 if (res.ok) { 13860 console.log('Discount Code Applied'); 13861 const discountDetails = window?._ALConfig?.customerLoyalty?.rewards?.find((item) => item?.discountCode === discountCode) || null; 13862 if (discountCode && discountDetails) { 13863 const discountData = {discountCode: discountCode || discountDetails?.discountCode, description: discountDetails?.description, customerId: discountDetails?.customerId} 13864 document.dispatchEvent(new CustomEvent('AppstleLoyalty:AppliedDiscountCode', { detail: discountData })); 13865 window.dispatchEvent(new CustomEvent('AppstleLoyalty:AppliedDiscountCode', { detail: discountData })); 13866 } 13867 if (shouldReload) { 13868 window.location.reload(); 13869 } 13870 } else { 13871 console.log('Discount Code NOT Applied'); 13872 } 13873 }); 13874 } 13875 const applyDiscountAutomatically = (discountCode, shouldReload = false) => { 13876 (async () => { 13877 const encodedDiscountCode = encodeURIComponent(discountCode?.trim()); 13878 const discountURL = `${location.origin}/checkout?discount=${encodedDiscountCode}`; 13879 const cartURL = `${location.origin}/cart.js`; 13880 try { 13881 const discountRes = await fetch(discountURL); 13882 if(discountRes) { 13883 const cartRes = await fetch(cartURL); 13884 if (!cartRes.ok) return; 13885 const cart = await cartRes.json(); 13886 const discount_codes = cart && Array.isArray(cart?.['discount_codes']) ? cart?.['discount_codes'] : []; 13887 const hasDiscount = discount_codes.some(d => (d?.code || "").toLowerCase() === String(discountCode).toLowerCase()); 13888 if (hasDiscount && shouldReload) { 13889 window.location.reload(); 13890 } 13891 } 13892 } catch (err) { 13893 console.error("Error applying discount:", err); 13894 } 13895 })(); 13896 }; 13897 13898 const unescapeWidgetString = (str) => { 13899 if (!str || typeof str !== 'string') return ''; 13900 return str?.replace(/\\\//g, '/')?.replace(/\\\\/g, '\\'); 13901 }; 13902 // Resolves a market-aware account URL. Prefers the routes published above so the customer keeps 13903 // their market/language prefix; the shop root fallback keeps that prefix too when a single route 13904 // entry is blank. Safe to assign to location.href as-is - with new customer accounts Shopify 13905 // returns an absolute URL here, so never prefix an origin. 13906 const loyaltyAccountRoute = (key, fallbackPath) => { 13907 const route = _ALConfig?.routes?.[key]; 13908 if (route) return route; 13909 const shopRoot = _ALConfig?.routes?.root_url || window?.Shopify?.routes?.root || '/'; 13910 return (shopRoot?.replace(/\/+$/, '') ?? '') + fallbackPath; 13911 }; 13912 13913 // Shopify's /customer_authentication/login answers 400 Bad Request unless return_to is a 13914 // store-relative path with one leading slash, so coerce `return_to=apps/loyalty`, 13915 // `return_to=collections/all` or a same-store absolute URL into that shape. 13916 const normalizeLoyaltyReturnTo = (link) => { 13917 const match = /([?&]return_to=)([^&#]*)/i.exec(link || ''); 13918 // Only Shopify's own login route on this store - a third-party login app may legitimately want an absolute return_to. 13919 if (!match || !/(^|\/)customer_authentication\//i.test(link.slice(0, match.index))) return link; 13920 if (/^(https?:)?\/\//i.test(link)) { 13921 try { 13922 if (new URL(link, window.location.origin).host !== window.location.host) return link; 13923 } catch (e) { 13924 return link; 13925 } 13926 } 13927 let value = match[2]; 13928 try { 13929 for (let i = 0; i < 2 && /%[0-9a-f]{2}/i.test(value); i++) value = decodeURIComponent(value); 13930 } catch (e) { 13931 return link; 13932 } 13933 value = value.trim(); 13934 if (/^(https?:)?\/\//i.test(value)) { 13935 try { 13936 const parsed = new URL(value, window.location.origin); 13937 if (parsed.host !== window.location.host) return link; 13938 value = parsed.pathname + parsed.search + parsed.hash; 13939 } catch (e) { 13940 return link; 13941 } 13942 } 13943 value = '/' + value.replace(/^\/+/, ''); 13944 return link.slice(0, match.index) + match[1] + encodeURIComponent(value) + link.slice(match.index + match[0].length); 13945 }; 13946 13947 const formatUrlByLoyalty = (link) => { 13948 if (!link) return ''; 13949 const decodedLink = decodeURIComponent(link); 13950 const loyaltyPagePath = '/' + (_ALConfig?.hasDedicatedPageAccess ? _ALConfig?.proxy_path_prefix || 'apps/loyalty' : ''); 13951 let l = decodedLink?.replace("{{proxy_path_prefix}}", loyaltyPagePath)?.trim()?.replace(/\\\//g, '/')?.replace(/^\/+/, '') || ''; 13952 l = normalizeLoyaltyReturnTo(l?.replace(/([^:]\/)\/+/g, '$1') ?? ''); 13953 if (/^(https?:\/\/|\/\/|www\.)/i.test(l)) { 13954 return /^www\./i.test(l) ? 'https://' + l : l; 13955 } 13956 const shopRoot = window?.Shopify?.routes?.root ?? '/'; 13957 return (shopRoot?.replace(/\/+$/, '') ?? '') + '/' + l; 13958 }; 13959 13960 function isAppstleLoyaltyMessage(event) { 13961 if (event.origin !== window.location.origin) return false;
13962 return event.source === window || ['appstle_loyalty_iframe', 'appstle_loyalty_cart_widget_iframe'].some(id => { 13963 const frame = document.getElementById(id); 13964 return frame && event.source === frame.contentWindow; 13965 }); 13966 } 13967 13968 const loyaltyLabelHtmlPolicy = { 13969 ALLOWED_TAGS: ['a', 'b', 'blockquote', 'br', 'button', 'center', 'div', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 's', 'small', 'span', 'strong', 'sub', 'sup', 'u', 'ul'], 13970 ALLOWED_ATTR: ['alt', 'class', 'height', 'href', 'loading', 'rel', 'src', 'style', 'target', 'title', 'width'], 13971 ALLOW_DATA_ATTR: false, 13972 ALLOW_ARIA_ATTR: false 13973 }; 13974 const escapeLoyaltyAttribute = value => String(value ?? '').replace(/[&<>"']/g, char => ({ '&': '&', '<': '<', '>': '>', '"': '"', "'": ''' }[char])); 13975 const loyaltyNavigationUrl = value => { 13976 if (typeof value !== 'string' || !value.trim()) return null; 13977 try { 13978 const url = new URL(value, window.location.href); 13979 return ['https:', 'http:'].includes(url.protocol) && !url.username && !url.password ? url : null; 13980 } catch { 13981 return null; 13982 } 13983 }; 13984 // Follow the Bundles rich-label declaration filter, preserving native storefront layout 13985 // (relative offsets, negative margins and transforms) that the merchant already configures. 13986 const sanitizeLoyaltyLabelStyle = styleText => { 13987 const allowedProperty = /^(?:color|opacity|visibility|cursor|display|order|columns|aspect-ratio|box-shadow|box-sizing|line-height|letter-spacing|white-space|vertical-align|accent-color|caret-color|appearance|width|height|position|top|right|bottom|left|transform|(?:background|border(?!-image)|outline|font|text|margin|padding|flex|align|justify|place|grid|gap|row-gap|column|overflow|transition|list-style|word|min|max|object)(?:-[a-z]+)*)$/; 13988 const unsafeValue = /[{}<>\\]|\b(?:url|attr|env|image|image-set|element|src|expression)\s*\(/i; 13989 return String(styleText ?? '').split(';').filter(declaration => { 13990 const separator = declaration.indexOf(':'); 13991 if (separator < 0) return false; 13992 const property = declaration.slice(0, separator).trim().toLowerCase(); 13993 const value = declaration.slice(separator + 1).trim(); 13994 return (allowedProperty.test(property) || /^--[a-z0-9_-]+$/i.test(property)) && value && !unsafeValue.test(value) 13995 && (property !== 'position' || /^(?:relative|static)$/i.test(value)); 13996 }).join(';'); 13997 }; 13998 const sanitizeLoyaltyLabel = (value, purifier, allowLinks = true) => { 13999 if (!purifier) return escapeLoyaltyAttribute(value); 14000 const fragment = purifier.sanitize(String(value ?? ''), { 14001 ...loyaltyLabelHtmlPolicy, 14002 FORBID_TAGS: allowLinks ? [] : ['a', 'button'], 14003 RETURN_DOM_FRAGMENT: true 14004 }); 14005 fragment.querySelectorAll('[href], [src]').forEach(element => { 14006 for (const attribute of ['href', 'src']) { 14007 if (element.hasAttribute(attribute) && !loyaltyNavigationUrl(element.getAttribute(attribute))) element.removeAttribute(attribute); 14008 } 14009 }); 14010 fragment.querySelectorAll('[style]').forEach(element => { 14011 const style = sanitizeLoyaltyLabelStyle(element.getAttribute('style')); 14012 if (style) element.setAttribute('style', style); 14013 else element.removeAttribute('style'); 14014 }); 14015 fragment.querySelectorAll('[target]').forEach(element => { 14016 if (element.tagName !== 'A' || !['_blank', '_self'].includes(element.getAttribute('target'))) element.removeAttribute('target'); 14017 else if (element.getAttribute('target') === '_blank') { 14018 const rel = new Set((element.getAttribute('rel') || '').split(/\s+/).filter(Boolean)); 14019 rel.add('noopener'); 14020 element.setAttribute('rel', [...rel].join(' ')); 14021 } 14022 }); 14023 fragment.querySelectorAll('button').forEach(button => button.setAttribute('type', 'button')); 14024 const container = document.createElement('div'); 14025 container.appendChild(fragment); 14026 return container.innerHTML; 14027 }; 14028 let loyaltyHtmlSanitizer; 14029 window.appstleLoyaltyLoadSanitizer = () => loyaltyHtmlSanitizer ||= new Promise(resolve => { 14030 if (window.DOMPurify) return resolve(window.DOMPurify); 14031 const script = document.createElement('script'); 14032 script.src = 'https://cdn.jsdelivr.net/npm/[email protected]/dist/purify.min.js'; 14033 script.integrity = 'sha384-46dPGH1XlTmj7bc50bqLjTdORXs/3EP2QpA/6EWbelYWOY9VGp+87RT61S3Mcslb'; 14034 script.crossOrigin = 'anonymous'; 14035 const settle = purifier => { 14036 clearTimeout(timeout); 14037 resolve(purifier); 14038 }; 14039 const timeout = setTimeout(() => settle(null), 8000); 14040 script.onload = () => settle(window.DOMPurify); 14041 script.onerror = () => settle(null); 14042 document.head.appendChild(script); 14043 }); 14044 14045 function appstleLoyaltyIframeListener(event) { 14046 if (!isAppstleLoyaltyMessage(event)) return; 14047 const redirect = (link, fallback) => { 14048 try { 14049 const destination = link ? formatUrlByLoyalty(link) : fallback; 14050 const url = new URL(destination, window.location.origin); 14051 if (!['http:', 'https:'].includes(url.protocol) || url.username || url.password) return; 14052 window.location.href = destination; 14053 } catch (e) {} 14054 }; 14055 if (event.data === 'appstle_loyalty_message_to_redirect_to_account') { 14056 if (!_ALConfig?.widget_setting?.customSignInLink && typeof kpHandleLogin === 'function') { 14057 kpHandleLogin(window.location.href); 14058 } else { 14059 redirect(_ALConfig?.widget_setting?.customSignInLink, loyaltyAccountRoute('account_url', '/account')); 14060 } 14061 } else if (event.data === 'appstle_message_to_redirect_to_signup') { 14062 if (typeof kpHandleLogin === 'function') { 14063 kpHandleLogin(window.location.href); 14064 } else { 14065 redirect(null, loyaltyAccountRoute('account_register_url', '/account/register')); 14066 } 14067 } else if (event?.data && event?.data?.type === 'appstle_message_to_redirect_to_after_copied_discount_redirect_url' && typeof event?.data?.value === 'string') { 14068 try { 14069 const redirectUrl = new URL(event.data.value, window.location.origin); 14070 if (redirectUrl.origin !== window.location.origin || !['http:', 'https:'].includes(redirectUrl.protocol) || redirectUrl.username || redirectUrl.password) return; 14071 window.location.href = redirectUrl.href; 14072 } catch (e) { 14073 return; 14074 } 14075 } else if (event.data === 'appstle_message_to_redirect_to_custom_url') { 14076 redirect(_ALConfig?.widget_setting?.createAccountLink, loyaltyAccountRoute('account_register_url', '/account/register')); 14077 } else if (typeof event.data === 'string') { 14078 const parts = event.data.split('|'); 14079 if (parts.length !== 2 || !parts[1].trim()) return; 14080 const [command, discountCode] = parts; 14081 if (command === 'appstle_message_to_apply_discount_and_reload') applyDiscount(discountCode, true); 14082 else if (command === 'appstle_message_to_apply_discount') applyDiscount(discountCode, false); 14083 else if (command === 'appstle_message_to_automatic_apply_discount_and_refresh') applyDiscountAutomatically(discountCode, true); 14084 else if (command === 'appstle_message_to_automatic_apply_discount') applyDiscountAutomatically(discountCode, false); 14085 } 14086 } 14087 14088 14089 14090 14091 14092 14093 14094 14095 14096 14097 <!-- BEGIN app snippet: loyalty-snackbar --> 14098 const snackBarStyles = ` 14099#snackbar { 14100visibility: hidden; 14101min-width: 250px; 14102text-align: center; 14103position: fixed; 14104z-index: 9999999; 14105bottom: 90px; 14106font-size: 15px; 14107 14108} 14109 14110.left_snackbar { 14111left: 30px; 14112} 14113 14114#snackbar .icon { 14115display: flex 14116} 14117 14118#snackbar.show { 14119visibility: visible; 14120-webkit-animation: fadein 0.5s, fadeout 0.5s 2.5s; 14121animation: fadein 0.5s, fadeout 0.5s 2.5s; 14122} 14123 14124#snackbar .arrow_icon { 14125font-size: 25px; 14126} 14127 14128div.snackElement { 14129background-color: ${_ALConfig?.widget_setting?.notificationToastBackgroun
14129dColor || '#4EC33D'}; 14130color: ${_ALConfig?.widget_setting?.notificationToastTextColor || 'white'}; 14131border-radius: 16px; 14132width: 350px; 14133height: 94px; 14134position: relative; 14135overflow: hidden; 14136padding: 0; 14137margin-bottom: 10px; 14138text-align: left; 14139} 14140 14141svg.appstle-green-bubble { 14142position: absolute; 14143bottom: 0; 14144left: 0; 14145z-index: 0; 14146} 14147 14148svg.closeSnackBar { 14149position: absolute; 14150right: 16px; 14151top: 16px; 14152cursor: pointer; 14153} 14154 14155#snackbar .message { 14156padding-left: 74px; 14157font-size: 20px; 14158padding-top: 10px; 14159padding-right: 46px; 14160font-weight: bold; 14161} 14162 14163#snackbar .description { 14164width: 100%; 14165height: 100%; 14166display: flex; 14167justify-content: center; 14168align-items: center; 14169padding: 0 65px; 14170font-weight: 400; 14171line-height: 1; 14172font-size: 14px; 14173} 14174 14175@-webkit-keyframes fadein { 14176from { 14177bottom: 0; 14178opacity: 0; 14179} 14180to { 14181bottom: 30px; 14182opacity: 1; 14183} 14184} 14185 14186@keyframes fadein { 14187from { 14188bottom: 0; 14189opacity: 0; 14190} 14191to { 14192bottom: 30px; 14193opacity: 1; 14194} 14195} 14196 14197@-webkit-keyframes fadeout { 14198from { 14199bottom: 30px; 14200opacity: 1; 14201} 14202to { 14203bottom: 0; 14204opacity: 0; 14205} 14206} 14207 14208@keyframes fadeout { 14209from { 14210bottom: 30px; 14211opacity: 1; 14212} 14213to { 14214bottom: 0; 14215opacity: 0; 14216} 14217} 14218`; 14219 const snackBarStyle = document.createElement('style'); 14220 snackBarStyle.textContent = snackBarStyles; 14221 document.body.appendChild(snackBarStyle); 14222 const snackBarHtml = `<div id="snackbar"></div>`; 14223 document.querySelector('body').insertAdjacentHTML('beforeend', snackBarHtml); 14224 14225 window.addEventListener('message', toasterEventListener, false); 14226 14227 function toasterEventListener(event) { 14228 if (!isAppstleLoyaltyMessage(event)) return; 14229 if (typeof event.data === 'string' && event.data.startsWith('appstle_message_for_notification|')) { 14230 var message = event?.data?.split('|')[1]; 14231 showAppstleLoyaltyToaster(message); 14232 } 14233 } 14234 14235 let snackBarIndex = 0; 14236 async function showAppstleLoyaltyToaster(msg) { 14237 const purifier = await window.appstleLoyaltyLoadSanitizer(); 14238 var snackBar = document.getElementById('snackbar'); 14239 snackBar.classList.add('show'); 14240 snackBar.insertAdjacentHTML('beforeend', ` 14241 <div class="snackElement" id="elem${snackBarIndex}"> 14242 <div class="description"></div> 14243 <svg class="appstle-green-bubble" xmlns="http://www.w3.org/2000/svg" width="50" height="45" viewBox="0 0 84 75" fill="none"> 14244 <circle cx="20.6075" cy="9.29547" r="9.29547" fill="#2C7721"/> 14245 <circle cx="80.0986" cy="47.7167" r="3.71819" fill="#2C7721"/> 14246 <path d="M79.4438 11.0253C82.4971 18.5483 78.8737 27.1221 71.3507 30.1754C70.5208 30.5122 69.6781 30.7678 68.8315 30.9458C64.1204 31.9366 58.8591 33.2841 56.3382 37.3855C53.3951 42.1741 55.0036 48.3927 59.3496 51.9571C68.015 59.0642 75.0268 68.4315 79.3829 79.6187C92.9059 114.348 75.7149 153.464 40.9856 166.987C6.25636 180.51 -32.8599 163.319 -46.3829 128.59C-59.9059 93.8607 -42.7149 54.7445 -7.98562 41.2214C7.18342 35.3148 23.1894 35.2678 37.5341 39.9824C42.7299 41.69 48.6536 40.072 51.5174 35.4125L52.5823 33.68C54.694 30.2441 53.7172 25.8191 52.2006 22.0823C49.1473 14.5592 52.7707 5.98544 60.2937 2.93215C67.8167 -0.121136 76.3906 3.5023 79.4438 11.0253Z" fill="#2C7721"/> 14247 </svg> 14248 <svg class="closeSnackBar" onclick="closeSnackBar('elem${snackBarIndex}')" xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none"> 14249 <path d="M2.93934 18.9393C2.35355 19.5251 2.35355 20.4749 2.93934 21.0607C3.52513 21.6464 4.47487 21.6464 5.06066 21.0607L12 14.1213L18.9393 21.0607C19.5251 21.6465 20.4749 21.6465 21.0607 21.0607C21.6464 20.4749 21.6464 19.5251 21.0607 18.9393L14.1213 12L21.0607 5.06066C21.6464 4.47487 21.6464 3.52513 21.0607 2.93934C20.4749 2.35355 19.5251 2.35355 18.9393 2.93934L12 9.87868L5.06066 2.93934C4.47487 2.35356 3.52513 2.35356 2.93934 2.93934C2.35355 3.52513 2.35355 4.47488 2.93934 5.06066L9.87868 12L2.93934 18.9393Z" fill="white"/> 14250 </svg> 14251 </div>`); 14252 const description = document.getElementById(`elem${snackBarIndex}`).querySelector('.description'); 14253 if (purifier) description.innerHTML = purifier.sanitize(String(msg), { 14254 ALLOWED_TAGS: ['a', 'b', 'br', 'em', 'i', 'span', 'strong'], 14255 ALLOWED_ATTR: ['href', 'title', 'class'], 14256 }); 14257 else description.textContent = String(msg); 14258 const el = snackBarIndex; 14259 setTimeout(function() { 14260 if (document.getElementById(`elem${el}`)) 14261 document.getElementById(`elem${el}`).remove(); 14262 }, 5000); 14263 snackBarIndex++; 14264 14265 } 14266 14267 const closeSnackBar = (el) => document.getElementById(el).remove(); 14268 14269 document.addEventListener('DOMContentLoaded', () => { 14270 14271 }); 14272 14273<!-- END app snippet --> 14274 14275 14276 const executeLoyaltyWidget = () => { 14277 <!-- BEGIN app snippet: loyalty-widget --> 14278 const parseHtmlStringContent = (content) => { 14279 if (typeof content !== 'string') return content; 14280 try { 14281 const htmlDecoded = content?.replace(/\\\//g, '/'); 14282 return JSON.parse(`"${htmlDecoded}"`); 14283 } catch (error) { 14284 console.error('Error parsing content:', error); 14285 return content; 14286 } 14287 }; 14288 14289 const formatNumberByPointRoundType = num => { 14290 if (typeof num !== 'number') return num; 14291 const roundType = _ALConfig?.pointRoundType || "NO_ROUND"; 14292 const rounded = roundType === 'ROUND_UP' ? Math.ceil(num) : roundType === 'ROUND_DOWN' ? Math.floor(num) : num; 14293 return (Number.isInteger(rounded) || rounded % 1 === 0) ? rounded.toFixed(0) : rounded.toFixed(2); 14294 }; 14295 14296 const formatStoreCreditAmount = value => { 14297 try { 14298 const num = Number(value); 14299 const safe = Number.isFinite(num) ? num : 0; 14300 const format = (_ALConfig?.shopMoneyFormat || '')?.replace(/</g, '<')?.replace(/>/g, '>')?.replace(/<[^>]*>/g, ''); 14301 const tokenMatch = String(format)?.match?.(/\{\{\s*(amount[a-z_]*)\s*\}\}/i); 14302 const token = (tokenMatch?.[1] || 'amount')?.toLowerCase?.() || 'amount'; 14303 const decimals = token?.includes?.('no_decimals') ? 0 : 2; 14304 let thousands = ',', decimal = '.'; 14305 if (token?.includes?.('comma_separator')) { thousands = '.'; decimal = ','; } 14306 else if (token?.includes?.('space_separator')) { thousands = ' '; } 14307 else if (token?.includes?.('apostrophe_separator')) { thousands = "'"; } 14308 const sign = safe < 0 ? '-' : ''; 14309 const parts = Math.abs(safe)?.toFixed?.(decimals)?.split?.('.') || []; 14310 const intPart = (parts?.[0] || '0')?.replace?.(/\B(?=(\d{3})+(?!\d))/g, thousands) || '0'; 14311 const amount = decimals === 0 ? sign + intPart : sign + intPart + decimal + (parts?.[1] || '00'); 14312 return tokenMatch ? format?.replace(/\{\{\s*amount[a-z_]*\s*\}\}/gi, amount)?.trim() : amount; 14313 } catch (e) { 14314 return String(value ?? '0'); 14315 } 14316 }; 14317 14318 14319 const loyaltyWidgetStyles = ` 14320.appstle-loyalty-widget-close-icon { 14321width: 28px; 14322height: 28px; 14323opacity: 0; 14324position: absolute; 14325top: 50%; 14326left: 50%; 14327transform: translate(-50%, -50%); 14328transition: opacity 0.2s; 14329} 14330 14331.appstle-loyalty-button { 14332bottom: 24px; 14333z-index: 999; 14334border-radius: 12px; 14335position: fixed; 14336border: none; 14337transition: max-width 1s; 14338padding: 0 19px; 14339overflow: hidden; 14340height: 56px; 14341transform-origin: left; 14342max-width: 300px;
14343background-color: ${_ALConfig?.widget_setting?.widgetBackgroundColor || 'rgb(29, 78, 216)'}; 14344color: ${_ALConfig?.widget_setting?.widgetTextColor || 'white'}; 14345} 14346 14347.appstle-loyalty-right { 14348right: 40px; 14349} 14350 14351.appstle-loyalty-left { 14352left: 40px; 14353} 14354 14355#appstle_loyalty_iframe { 14356width: 1px; 14357min-width: 400px; 14358border: none; 14359height: 516px; 14360position: fixed; 14361bottom: 100px; 14362z-index: 1234567; 14363box-shadow: 0 4px 6px -1px rgb(0 0 0 / 10%), 0 2px 4px -2px rgb(0 0 0 / 10%); 14364background-color: white; 14365border-radius: 12px; 14366max-height: calc(100vh - 120px); 14367transform: scale(0) !important; 14368transition: all 0.5s; 14369transform-origin: bottom right; 14370max-width: 80vw; 14371} 14372 14373@media screen and (max-width: 800px) { 14374#appstle_loyalty_iframe { 14375left: 0; 14376height: 100vh; 14377top: 0; 14378min-width: 100%; 14379} 14380 14381#appstle_loyalty_iframe.open + .appstle-loyalty-button { 14382left: 50%; 14383transform: translateX(-50%); 14384} 14385 14386.appstle-loyalty-button { 14387transition: all 0.5s; 14388} 14389} 14390 14391#appstle_loyalty_iframe.open { 14392transform: scale(1) !important; 14393} 14394 14395#appstle_loyalty_iframe.open.show-close-icon + button .appstle-loyalty-widget-close-icon { 14396opacity: 1; 14397} 14398 14399#appstle_loyalty_iframe.open + button .appstle_loyalty_widget_button_wrapper { 14400color: transparent; 14401} 14402 14403.appstle_loyalty_widget_button_wrapper { 14404height: 100%; 14405width: 100%; 14406display: flex; 14407flex-wrap: nowrap; 14408align-items: center; 14409gap: 10px; 14410} 14411 14412.appstle-loyalty-widget-button-text { 14413flex-shrink: 0; 14414} 14415 14416.loyalty_widget_available_points { 14417display: none; 14418height: 100%; 14419width: auto; 14420flex-shrink: 0; 14421} 14422 14423.appstle_show_points .loyalty_widget_available_points { 14424display: flex; 14425align-items: center; 14426padding: 0 8px; 14427margin-right: -14px; 14428background-color: ${_ALConfig?.widget_setting?.widgetCounterBackgroundColor || 'rgba(29, 78, 216, 0.8)'}; 14429color: ${_ALConfig?.widget_setting?.widgetCounterTextColor || 'white'}; 14430} 14431 14432#appstle_loyalty_iframe.open.show-close-icon + button { 14433background-color: ${_ALConfig?.widget_setting?.widgetBackgroundColor || 'rgb(29, 78, 216)'}; 14434} 14435 14436#appstle_loyalty_iframe.open.show-close-icon + button .appstle-loyalty-widget-button-text-wrapper, 14437#appstle_loyalty_iframe.open.show-close-icon + button .loyalty_widget_available_points { 14438opacity: 0; 14439} 14440 14441#appstle_loyalty_iframe.open + button { 14442max-width: 56px; 14443} 14444 14445.loyalty-widget-buttonImage { 14446height: 24px; 14447width: 24px; 14448} 14449 14450.appstle-loyalty-widget-button-text-wrapper { 14451height: 100%; 14452display: flex; 14453gap: 4px; 14454align-items: center; 14455} 14456 14457.right_snackbar { 14458right: 30px; 14459} 14460 14461 14462`; 14463 const launcherStyles = document.createElement('style'); 14464 launcherStyles.id = 'appstle-loyalty-launcher-styles'; 14465 launcherStyles.textContent = loyaltyWidgetStyles; 14466 const customStyles = document.getElementById('appstle-loyalty-custom-styles'); 14467 if (customStyles) { 14468 customStyles.before(launcherStyles); 14469 } else { 14470 document.body.appendChild(launcherStyles); 14471 } 14472 const mainHTMLString = ` 14473<iframe id="appstle_loyalty_iframe" class="appslte-iframe" title="Appstle Loyalty Widget"></iframe> 14474<button id="appstle-loyalty-button" 14475 class="appstle-loyalty-button appstle-loyalty-hidden ${_ALConfig?.customerId ? `logged-in-customer-loyalty-button` : `logged-out-customer-loyalty-button`}" 14476 style="${_ALConfig.widget_setting.showWidget && _ALConfig.widget_setting.widgetType === 'LAUNCHER' ? `` : `display: none !important;`}"> 14477 <div class="appstle_loyalty_widget_button_wrapper"> 14478 <div class="appstle-loyalty-widget-button-text-wrapper"> 14479 14480 <span id="loyalty-widget-title" class="appstle-loyalty-widget-button-text"></span> 14481 </div> 14482 <div class="loyalty_widget_available_points"></div> 14483 </div> 14484 <svg class="appstle-loyalty-widget-close-icon" xmlns="http://www.w3.org/2000/svg" fill="none"
14485 viewBox="0 0 24 24" 14486 stroke-width="1.5" stroke="currentColor"> 14487 <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"></path> 14488 </svg> 14489</button>`; 14490 document.querySelector('body').insertAdjacentHTML('beforeend', mainHTMLString); 14491 const launcherLogo = document.querySelector('.loyalty-widget-buttonImage'); 14492 if (launcherLogo) launcherLogo.src = parseHtmlStringContent(_ALConfig?.widget_setting?.widgetButtonLogoUrl); 14493 window.addEventListener('message', widgetEventListener, false); 14494 14495 function widgetEventListener(event) { 14496 if (event.origin !== window.location.origin || 14497 (event.source !== window && event.source !== document.getElementById('appstle_loyalty_iframe')?.contentWindow)) return; 14498 if (event.data === 'appstle_message_for_showWidget') { 14499 } else if (event.data === 'appstle_widget_showHide') { 14500 toggleWidget(); 14501 } else if (event.data === 'refresh_appstle_loyalty_widget' && _ALConfig?.widget_setting?.widgetType === 'LAUNCHER') { 14502 loadAppstleLoyaltyWidget(); 14503 console.log('REFRESH WIDGET'); 14504 } else if (event.data === 'show_appstle_loyalty_widget') { 14505 loadAppstleLoyaltyWidget(); 14506 enableWidget(); 14507 } 14508 } 14509 14510 function removeAppstleLoyaltyWidget() { 14511 document.querySelector('#appstle-loyalty-button')?.classList?.add('appstle-loyalty-hidden'); 14512 document.querySelector('#appstle_loyalty_iframe')?.classList?.add('appstle-loyalty-hidden'); 14513 } 14514 14515 (function checkForWidgetRestrictions() {
14516 let isShowWidget = true; 14517 14518 if (_ALConfig?.customerLoyalty?.customerStatus === 'EXCLUDED') { 14519 isShowWidget = false; 14520 } 14521 if (!_ALConfig?.customerId) { 14522 isShowWidget = !(_ALConfig?.widget_setting?.restrictedCustomersTag || _ALConfig?.widget_setting?.allowedCustomersTag); 14523 } 14524 if (_ALConfig?.widget_setting?.allowedCustomersTag?.length && isShowWidget) { 14525 let allowedTags = _ALConfig?.widget_setting?.allowedCustomersTag.split(','); 14526 if (allowedTags?.length > 0 && !_ALConfig?.customerTags?.some((tag) => allowedTags?.some((allowedTag) => allowedTag?.trim()?.toLowerCase() === tag?.trim()?.toLowerCase()))) { 14527 isShowWidget = false; 14528 } 14529 } 14530 if (_ALConfig?.widget_setting?.restrictedCustomersTag?.length && isShowWidget) { 14531 let restrictedTags = _ALConfig?.widget_setting?.restrictedCustomersTag?.split(','); 14532 if (restrictedTags?.length > 0 && _ALConfig?.customerTags?.some((tag) => restrictedTags?.some((restrictedTag) => restrictedTag?.trim()?.toLowerCase() === tag?.trim()?.toLowerCase()))) { 14533 isShowWidget = false; 14534 } 14535 } 14536 if (_ALConfig?.widget_setting?.blockWidgetOnPages?.length && isShowWidget) { 14537 let restrictedPages = _ALConfig?.widget_setting?.blockWidgetOnPages?.split(','); 14538 const currentPage = window?.location?.pathname; 14539 if (restrictedPages?.length > 0) { 14540 if (restrictedPages?.includes('/homepage') && currentPage === '/') { 14541 isShowWidget = false; 14542 } else if (restrictedPages?.some((page) => currentPage?.includes(page))) { 14543 isShowWidget = false; 14544 } 14545 } 14546 } 14547 if (_ALConfig?.widget_setting?.allowWidgetOnSpecificPages?.length && isShowWidget) { 14548 let allowedPages = _ALConfig?.widget_setting?.allowWidgetOnSpecificPages?.split(','); 14549 const currentPage = window?.location?.pathname; 14550 if (allowedPages?.length > 0) { 14551 if (allowedPages?.includes('/homepage') && currentPage === '/') { 14552 isShowWidget = true; 14553 } else if (allowedPages?.some((page) => currentPage?.includes(page))) { 14554 isShowWidget = true; 14555 } else { 14556 isShowWidget = false; 14557 } 14558 } 14559 } 14560 if (!_ALConfig?.customerId && _ALConfig?.widget_setting?.showToLoggedInCustomerOnly) { 14561 isShowWidget = false; 14562 } 14563 window.__APPSTLE_LOYALTY_LAUNCHER_ALLOWED = !!isShowWidget; 14564 if (isShowWidget) { 14565 showAppstleLoyaltyWidget(); 14566 } else { 14567 removeAppstleLoyaltyWidget(); 14568 } 14569 })(); 14570 14571 function enableWidget() { 14572 document.querySelector('#appstle_loyalty_iframe')?.classList?.add('open'); 14573 document.querySelector('#appstle_loyalty_iframe')?.classList?.remove('appstle-loyalty-hidden'); 14574 setTimeout(function() { 14575 document.querySelector('#appstle_loyalty_iframe')?.classList?.toggle('show-close-icon'); 14576 }, 900); 14577 } 14578 14579 function showAppstleLoyaltyWidget() { 14580 const launcherAllowed = window?.['__APPSTLE_LOYALTY_LAUNCHER_ALLOWED'] !== false; 14581 document.querySelector('#appstle_loyalty_iframe')?.classList?.remove('appstle-loyalty-hidden'); 14582 const btn = document.querySelector('#appstle-loyalty-button'); 14583 if (!btn) return; 14584 if (launcherAllowed) { 14585 btn.classList.remove('appstle-loyalty-hidden'); 14586 } else { 14587 btn.classList.add('appstle-loyalty-hidden'); 14588 } 14589 } 14590 14591 14592 document.querySelector('.appstle-loyalty-button').addEventListener('click', toggleWidget); 14593 14594 if (_ALConfig?.widget_setting?.widgetPosition === 'LEFT') { 14595 document.getElementById('appstle_loyalty_iframe')?.classList?.add('appstle-loyalty-left'); 14596 document.querySelector('.appstle-loyalty-button')?.classList?.add('appstle-loyalty-left'); 14597 document.getElementById('appstle_loyalty_iframe')?.classList?.add('appstle-loyalty-left'); 14598 document.getElementById('snackbar')?.classList?.add('left_snackbar'); 14599 14600 } else { 14601 document.getElementById('appstle_loyalty_iframe')?.classList?.add('appstle-loyalty-right'); 14602 document.querySelector('.appstle-loyalty-button')?.classList?.add('appstle-loyalty-right'); 14603 document.getElementById('snackbar')?.classList?.add('right_snackbar'); 14604 } 14605 14606 14607 const alIframeSrc = `\x3chtml> 14608\x3chead> 14609 \x3cscript> 14610 window["isAppstleLoyaltyCustomerPortal"] = true; 14611 \x3c/script> 14612 <link rel="stylesheet" href="${escapeLoyaltyAttribute(_ALConfig.widgetCssPath)}"> 14613 \x3cscript defer type="text/javascript" src="${escapeLoyaltyAttribute(_ALConfig.widgetJsPath)}">\x3c/script> 14614 <style> 14615 #loyalty_spinner_container { 14616 position: absolute; 14617 top: 0; 14618 right: 0; 14619 bottom: 0; 14620 left: 0; 14621 display: flex; 14622 justify-content: center; 14623 align-items: center; 14624 height: 100%; 14625 width: 100%; 14626 z-index: 9999999999999999999999999; 14627 } 14628 #loyalty_spinner { 14629 height: 32px; 14630 width: 32px; 14631 animation: spin 1s linear infinite; 14632 border-radius: 9999px; 14633 border-width: 1px; 14634 border-style: solid; 14635 border-color: rgb(107 114 128); 14636 border-top-color: transparent; 14637 } 14638 @keyframes spin { 14639 100% { 14640 transform: rotate(360deg); 14641 } 14642 } 14643 </style> 14644 \x3c/head> 14645 \x3cbody> 14646 <div style="overflow: auto;" id="appstleLoyaltyWidget"> 14647 <div id="loyalty_spinner_container"> 14648 <div id="loyalty_spinner"></div> 14649 </div> 14650 </div> 14651 \x3c/body> 14652 \x3c/html>`; 14653 14654 14655 function toggleWidget() { 14656 loadAppstleLoyaltyWidget(); 14657 if (_ALConfig?.widget_setting?.widgetType?.toUpperCase() === 'LAUNCHER' && _ALConfig?.widget_setting?.forceRedirectDedicatedPage === true) { 14658 window.open(`/${_ALConfig?.proxy_path_prefix}`); 14659 } else {
14660 const isWidgetOpen = document.querySelector('#appstle_loyalty_iframe')?.classList?.toggle('open'); 14661 if (isWidgetOpen === false) { 14662 clearLoyaltyDeepLinkHash(); 14663 } 14664 showAppstleLoyaltyWidget(); 14665 setTimeout(function() { 14666 document.querySelector('#appstle_loyalty_iframe')?.classList?.toggle('show-close-icon'); 14667 }, 900); 14668 } 14669 } 14670 14671 const loadAppstleLoyaltyWidget = () => { 14672 var iframe = document.querySelectorAll('#appstle_loyalty_iframe'); 14673 iframe.forEach(function(item) { 14674 item.contentWindow.document.open('text/html', 'replace'); 14675 item.contentWindow._ALConfig = _ALConfig; 14676 item.contentWindow.__st = window.__st; 14677 item.contentWindow.Shopify = { shop: location.host }; 14678 item.contentWindow.appstle_public_domain = location.host; 14679 item.contentWindow.document.write(alIframeSrc); 14680 item.contentWindow.document.close(); 14681 }); 14682 }; 14683 14684 const launcherDataType = _ALConfig?.widget_setting?.launcherDataType || 'POINTS'; 14685 14686 const loyaltyButtonTitle = document.getElementById('loyalty-widget-title'); 14687 if (_ALConfig?.shop_labels?.widgetTitle) { 14688 const title = parseHtmlStringContent(_ALConfig?.shop_labels?.widgetTitle); 14689 loyaltyButtonTitle.textContent = title; 14690 window.appstleLoyaltyLoadSanitizer().then(purifier => { 14691 if (purifier) loyaltyButtonTitle.innerHTML = sanitizeLoyaltyLabel(title, purifier, false); 14692 }); 14693 } 14694 14695 (function() { 14696 const { customerLoyalty, widget_setting } = _ALConfig || {}; 14697 if (!customerLoyalty && !(launcherDataType === 'STORE_CREDITS' && _ALConfig?.customerId)) return; 14698 14699 const showTier = widget_setting?.showTierName; 14700 const launcherButtonElement = document.querySelector('#appstle-loyalty-button'); 14701 const pointsEl = document.querySelector('.loyalty_widget_available_points'); 14702 if (!pointsEl) return; 14703 14704 const fmt = new Intl.NumberFormat(); 14705 const { storeCreditBalance = 0, availablePoints = 0, currentVipTier = '' } = customerLoyalty || {}; 14706 14707 let displayValue; 14708 if (launcherDataType === 'STORE_CREDITS') { 14709 displayValue = formatStoreCreditAmount(_ALConfig?.customerStoreCreditBalance || storeCreditBalance || 0); 14710 } else if ((launcherDataType === 'VIP_TIER') && currentVipTier) { 14711 displayValue = String(currentVipTier); 14712 } else { 14713 const n = Number(availablePoints) || 0; 14714 displayValue = fmt.format(formatNumberByPointRoundType(n)); 14715 } 14716 pointsEl.textContent = displayValue; 14717 launcherButtonElement?.classList.add('appstle_show_points'); 14718 })(); 14719 14720 14721 const loyaltyDeepLinks = [ 14722 '#appstle-loyalty', 14723 '#appstle-refer', 14724 '#appstle-loyalty-earn-rewards', 14725 '#appstle-loyalty-redeem-rewards', 14726 '#appstle-loyalty-referrals', 14727 '#appstle-loyalty-vip-program' 14728 ]; 14729 14730 let lastLoyaltyWidgetUrl = location.href; 14731 14732 function hasLoyaltyDeepLink() { 14733 return loyaltyDeepLinks.some(hash => location?.hash?.includes(hash)); 14734 } 14735 14736 function clearLoyaltyDeepLinkHash() { 14737 if (!hasLoyaltyDeepLink()) { 14738 return; 14739 } 14740 window.history.replaceState({}, document.title, window.location.pathname + window.location.search); 14741 lastLoyaltyWidgetUrl = location.href; 14742 } 14743 14744 function handleDeepLink() { 14745 if (!_ALConfig?.widget_setting?.showWidget || !hasLoyaltyDeepLink()) { 14746 return; 14747 } 14748 loadAppstleLoyaltyWidget(); 14749 enableWidget(); 14750 setTimeout(() => { 14751 document.querySelector('#appstle_loyalty_iframe')?.classList?.add('show-close-icon'); 14752 }, 900); 14753 } 14754 14755 handleDeepLink(); 14756 14757 const widgetReferralUrl = new URL(window.location.href); 14758 if (_ALConfig?.referralEnabled && widgetReferralUrl?.searchParams.get('appstle_referral') && _ALConfig?.widget_setting?.widgetType === 'LAUNCHER') { 14759 const referralUrlObj = loyaltyNavigationUrl(_ALConfig?.widget_setting?.referralRedirectUrl); 14760 if (referralUrlObj) { 14761 let referralPath = referralUrlObj.pathname.replace(/\/+$/, ''); 14762 let currentPath = window.location.pathname.replace(/\/+$/, ''); 14763 if (referralPath && (referralUrlObj.origin !== window.location.origin || currentPath !== referralPath)) {
14764 widgetReferralUrl.searchParams.forEach((value, key) => referralUrlObj.searchParams.set(key, value)); 14765 window.open(referralUrlObj.href, '_self'); 14766 } 14767 } 14768 setTimeout(() => { 14769 loadAppstleLoyaltyWidget(); 14770 enableWidget(); 14771 }, 200); 14772 } 14773 14774 14775 (function observeURLChanges() { 14776 const handleUrlChange = () => { 14777 if (location.href !== lastLoyaltyWidgetUrl) { 14778 lastLoyaltyWidgetUrl = location.href; 14779 handleDeepLink(); 14780 } 14781 }; 14782 new MutationObserver(handleUrlChange).observe(document.body, { subtree: true, childList: true }); 14783 window.addEventListener('popstate', handleUrlChange); 14784 window.addEventListener('hashchange', handleUrlChange); 14785 })(); 14786 14787 const alDOMObserver = new MutationObserver(function(mutations_list) { 14788 mutations_list.forEach(function(mutation) { 14789 mutation.addedNodes.forEach(function(added_node) { 14790 if (added_node.id === 'appstle_loyalty_iframe') { 14791 var iframe = document.querySelectorAll('#appstle_loyalty_iframe'); 14792 iframe.forEach(function(item) { 14793 item.contentWindow.document.open('text/html', 'replace'); 14794 item.contentWindow._ALConfig = _ALConfig; 14795 item.contentWindow.__st = window.__st; 14796 item.contentWindow.Shopify = { shop: location.host }; 14797 item.contentWindow.appstle_public_domain = location.host; 14798 item.contentWindow.document.write(alIframeSrc); 14799 item.contentWindow.document.close(); 14800 }); 14801 alDOMObserver.disconnect(); 14802 } 14803 }); 14804 }); 14805 }); 14806 alDOMObserver.observe(document.querySelector('body'), { subtree: true, childList: true }); 14807 14808 14809 14810 14811<!-- END app snippet --> 14812 } 14813 14814 14815 14816 const storeCreditMismatch = _ALConfig?.customerId && _ALConfig?.customerStoreCreditBalance >= 0 && _ALConfig?.customerLoyalty?.storeCreditBalance >= 0 && _ALConfig?.customerLoyalty?.storeCreditBalance !== _ALConfig?.customerStoreCreditBalance; 14817 if (storeCreditMismatch && _ALConfig.shop === 'olineloyalty27.myshopify.com') { 14818 const updateCustomerUrl = `/${_ALConfig?.proxy_path_prefix || 'apps/loyalty'}/cp/api/update-customer`; 14819 try { 14820 fetch(updateCustomerUrl, { method: 'POST', headers: { 'X-Requested-With': 'XMLHttpRequest' } }) 14821 .then((response) => { 14822 if(response.ok) {} 14823 }) 14824 .catch(() => {}); 14825 } catch (err) {} 14826 } 14827 14828 <!-- BEGIN app snippet: loyalty-dedicated-page --> 14829 const dedicatedPageURL = new URL(window.location.href); 14830 const decodeUrl = (content) => { 14831 if (typeof content !== 'string') return content; 14832 try { 14833 const htmlDecoded = content?.replace(/\\\//g, '/'); 14834 return JSON.parse(`"${htmlDecoded}"`); 14835 } catch (error) { 14836 console.error('Error parsing content:', error); 14837 return content; 14838 } 14839 }; 14840 14841 if (dedicatedPageURL?.searchParams?.get('appstle_referral') && _ALConfig?.widget_setting?.widgetType === 'DEDICATED_PAGE') { 14842 const customUrl = decodeUrl(_ALConfig?.widget_setting?.referralCustomRedirectUrl); 14843 if (customUrl) { 14844 const normalizedCustomPath = customUrl.startsWith('/') ? customUrl : `/${customUrl}`; 14845 if (window.location.pathname !== normalizedCustomPath) { 14846 const redirectUrl = new URL(window.location.href); 14847 redirectUrl.pathname = normalizedCustomPath; 14848 window.open(redirectUrl.toString(), '_self'); 14849 } 14850 } 14851 else if (dedicatedPageURL?.searchParams?.get('appstle_referral') && _ALConfig?.widget_setting?.widgetType === 'DEDICATED_PAGE' && !window.location.href.includes(_ALConfig?.proxy_path_prefix)) { 14852 window.open(`${window.location.origin}/${_ALConfig?.proxy_path_prefix}${window.location.search}`, '_self'); 14853 } 14854 } 14855 14856 14857 const dedicatedPageEventListener = (event) => { 14858 if (event.origin !== window.location.origin || event.source !== window) return; 14859 if (event.data === 'refresh_appstle_loyalty_page') { 14860 initiateAppstleLoyaltyPage(); 14861 console.log('REFRESH PAGE'); 14862 } 14863 }; 14864 window.addEventListener('message', dedicatedPageEventListener, false); 14865 14866 function initiateAppstleLoyaltyPage() {
14867 if (document.querySelector('#appstleLoyaltyPage')) { 14868 const appstleLoyaltyPageElement = document.getElementById('appstleLoyaltyPage'); 14869 while (appstleLoyaltyPageElement.firstChild) { 14870 appstleLoyaltyPageElement.firstChild.remove(); 14871 } 14872 14873 14874 14875 14876 14877 document.title = decodeUrl(_ALConfig?.shop_labels?.loyaltyPageMetaTitle) || ''; 14878 14879 14880 14881 setTimeout(() => { 14882 let metaDescription = document.querySelector('meta[name="description"]'); 14883 if (metaDescription) { 14884 metaDescription.content = decodeUrl(_ALConfig?.shop_labels?.loyaltyPageMetaDescription) || ''; 14885 } else { 14886 metaDescription = document.createElement('meta'); 14887 metaDescription.name = 'description'; 14888 metaDescription.content = decodeUrl(_ALConfig?.shop_labels?.loyaltyPageMetaDescription) || ''; 14889 document.head.appendChild(metaDescription); 14890 } 14891 }, 500); 14892 14893 if (appstleLoyaltyPageElement) { 14894 14895 const loadDedicatedPageAsset = (createAsset, attempt, onSettle) => { 14896 const asset = createAsset(); 14897 let settled = false; 14898 const settle = () => { 14899 if (settled) return; 14900 settled = true; 14901 if (typeof onSettle === 'function') { 14902 onSettle(); 14903 } 14904 }; 14905 asset.onload = settle; 14906 asset.onerror = () => { 14907 asset.remove(); 14908 if (attempt < 4) { 14909 setTimeout(() => loadDedicatedPageAsset(createAsset, attempt + 1, onSettle), 1000 * Math.pow(2, attempt - 1)); 14910 } else { 14911 settle(); 14912 } 14913 }; 14914 } 14915 14916 const appendDedicatedPageWidgetScript = () => { 14917 loadDedicatedPageAsset(() => { 14918 const s = document.createElement('script'); 14919 s.setAttribute('src', _ALConfig?.widgetJsPath); 14920 s.async = false; 14921 document.body.appendChild(s); 14922 return s; 14923 }, 1); 14924 } 14925 14926 const executeDedicatedPageScript = () => { 14927 let widgetScriptAppended = false; 14928 const appendWidgetScriptOnce = () => { 14929 if (widgetScriptAppended) return; 14930 widgetScriptAppended = true; 14931 appendDedicatedPageWidgetScript(); 14932 }; 14933 try { 14934 const preload = document.createElement('link'); 14935 preload.rel = 'preload'; 14936 preload.as = 'script'; 14937 preload.href = _ALConfig?.widgetJsPath; 14938 document.head.appendChild(preload); 14939 } catch (e) {} 14940 loadDedicatedPageAsset(() => { 14941 const link = document.createElement('link'); 14942 link.type = 'text/css'; 14943 link.rel = 'stylesheet'; 14944 link.href = _ALConfig?.widgetCssPath; 14945 document.head.appendChild(link); 14946 return link; 14947 }, 1, appendWidgetScriptOnce); 14948 setTimeout(appendWidgetScriptOnce, 8000); 14949 } 14950 14951 try { 14952 const versionUrl = `${location.origin}/${_ALConfig?.proxy_path_prefix || 'apps/loyalty'}/app-loyalty-version`; 14953 fetch(versionUrl).then(res => res.json()).then(data => { 14954 if (data) { 14955 const widgetJsUrl = new URL(_ALConfig.widgetJsPath); 14956 const widgetCssUrl = new URL(_ALConfig.widgetCssPath); 14957 widgetJsUrl.searchParams.set('v', data); 14958 widgetCssUrl.searchParams.set('v', data); 14959 _ALConfig.widgetJsPath = widgetJsUrl.toString(); 14960 _ALConfig.widgetCssPath = widgetCssUrl.toString(); 14961 } 14962 }).catch(() => {}).finally(() => { 14963 executeDedicatedPageScript(); 14964 }); 14965 } catch (err) { 14966 executeDedicatedPageScript(); 14967 } 14968 14969 14970 } 14971 14972 } else { 14973 setTimeout(() => { 14974 initiateAppstleLoyaltyPage(); 14975 }, 2000); 14976 } 14977 } 14978 14979 const dedicatedPageReferralUrl = new URL(window.location.href)?.searchParams.get('appstle_referral'); 14980 14981 if (_ALConfig?.widget_setting?.showWidget === true) { 14982 initiateAppstleLoyaltyPage(); 14983 } 14984 14985 14986<!-- END app snippet --> 14987 14988 14989 <!-- BEGIN app snippet: loyalty-visit-shop --> 14990 (async function() { 14991 const isAvailableVisitShop = _ALConfig?.pointEarnRules?.length > 0 && _ALConfig?.pointEarnRules?.find((rule) => rule?.type === 'VISIT_SHOP' && rule?.status === 'ACTIVE'); 14992 if (_ALConfig?.customerId && isAvailableVisitShop) { 14993 if (!sessionStorage.getItem('syncVisitStore') && ((_ALConfig?.customerId && isAvailableVisitShop && isAvailableVisitShop?.id) || (_ALConfig?.referralEnabled && _ALConfig?.referralLoyalty?.referralType === 'VISIT_SHOP'))) { 14994 try { 14995 const response = await fetch(`/${_ALConfig?.proxy_path_prefix || 'apps/loyalty'}/cp/api/customer-visit-store`, { method: 'POST', headers: {'Content-Type': 'application/json', 'X-Requested-With': 'XMLHttpRequest'}, }); 14996 if (response?.ok) { 14997 sessionStorage.setItem('syncVisitStore', 'true'); 14998 } 14999 } catch (error) { 15000 console.error('Error:', error); 15001 } 15002 } 15003 } 15004 })(); 15005 15006<!-- END app snippet --> 15007 <!-- BEGIN app snippet: loyalty-custom-styles --> 15008 const loyaltyCustomStyles = document.createElement('style'); 15009 loyaltyCustomStyles.id = 'appstle-loyalty-custom-styles'; 15010 loyaltyCustomStyles.textContent = _ALConfig?.widget_setting?.customCss || ''; 15011 document.body.appendChild(loyaltyCustomStyles); 15012 15013<!-- END app snippet --> 15014 15015</script>
15015 15016 15017 15018
15018<script src="https://cdn.shopify.com/extensions/01a1013f-f11e-7ab3-8e03-558ce2a98cb1/appstle-loyalty-1456/assets/appstle-loyalty.js" defer></script>
15018 15019 <style> 15020.acquire-points-badge { 15021display: flex; 15022flex-direction: column; 15023max-width: max-content; 15024font-size: 14px; 15025font-weight: 500; 15026letter-spacing: 0.05em; 15027border-radius: 3px; 15028padding: 10px; 15029} 15030.loyalty-acquire-points-badge sup { 15031font-size: 10px; 15032margin-left: 3px; 15033} 15034.loyalty-point-balance { 15035font-size: 16px; 15036font-weight: 500; 15037letter-spacing: 0.05em; 15038max-width: max-content; 15039} 15040.loyalty-current-vip-tier-badge { 15041font-size: 16px; 15042font-weight: 500; 15043letter-spacing: 0.05em; 15044max-width: max-content; 15045} 15046.loyalty-acquire-points-logged-out-label, 15047.loyalty-acquire-earn-points-label, 15048.loyalty-acquire-store-credit-label { 15049color: inherit; 15050background-color: inherit; 15051} 15052 15053 15054.appstle_loyalty_cart_widget_wrapper { 15055position: relative !important; 15056max-width: 400px !important; 15057margin-left: auto !important; 15058} 15059@media screen and (max-width: 749px) { 15060.appstle_loyalty_cart_widget_wrapper { 15061position: relative !important; 15062max-width: 100% !important; 15063} 15064} 15065#appstle_loyalty_cart_widget_iframe { 15066display: none !important; 15067} 15068#appstle_loyalty_cart_widget_iframe.open { 15069display: block !important; 15070position: fixed !important; 15071top: 0 !important; 15072left: 0 !important; 15073width: 100% !important; 15074height: 100% !important; 15075border: none !important; 15076z-index: 99999999999999999999 !important; 15077} 15078.appstle_loyalty_cart_widget_wrapper { 15079margin-bottom: 12px !important; 15080} 15081.loyalty-cart-widget-button { 15082display: flex !important; 15083align-items: center !important; 15084justify-content: space-between !important; 15085flex-wrap: nowrap !important; 15086background-color: white !important; 15087gap: 1rem !important; 15088border-radius: 8px !important; 15089padding: 10px !important; 15090width: 100% !important; 15091border: 1px solid #e5e7eb !important; 15092} 15093.loyalty-cart-widget-points-store-credits-info { 15094display: flex !important; 15095align-items: center !important; 15096gap: 12px !important; 15097} 15098.loyalty-cart-widget-icon { 15099display: flex !important; 15100align-items: center !important; 15101justify-content: center !important; 15102width: 32px !important; 15103height: 32px !important; 15104background-color: #a4197a !important; 15105border-radius: 6px !important; 15106} 15107.loyalty-cart-widget-icon-image { 15108width: 20px !important; 15109height: 20px !important; 15110} 15111.loyalty-cart-widget-icon-svg { 15112fill: white !important; 15113} 15114.loyalty-cart-widget-available-balance-label { 15115font-size: 16px !important; 15116font-weight: 500 !important; 15117color: #1f2937 !important; 15118} 15119.loyalty-cart-widget-rewards-btn { 15120background-color: #a4197a !important; 15121color: #ffffff !important; 15122border: none !important; 15123min-width: 82px !important; 15124border-radius: 4px !important; 15125padding: 6px 12px !important; 15126font-size: 14px !important; 15127font-weight: 600 !important; 15128cursor: pointer !important; 15129transition: background-color 0.15s !important; 15130} 15131.loyalty-cart-widget-rewards-btn-disabled { 15132opacity: 0.5 !important; 15133pointer-events: none !important;
15134cursor: not-allowed !important; 15135} 15136</style> 15137 15138 15139 15140 15141</div><div id="shopify-block-AY3pVa3ZJR0E3aHF6e__10436698916776057164" class="shopify-block shopify-app-block">
15141<script id="subscription-helper"> 15142 15143 function appstleStringSetting(value) { 15144 if (typeof value !== 'string') return value; 15145 try { return JSON.parse('"' + value + '"'); } catch { return value; } 15146 } 15147 function appstleJsonSetting(value) { 15148 if (typeof value !== 'string') return value; 15149 try { return JSON.parse(value); } catch { return null; } 15150 } 15151 15152 if (!window.AppstleIncluded) { 15153 window.AppstleIncluded = true; 15154 window.RS = Window.RS || {}; 15155 15156 RS.Config = { 15157 "selectors": { 15158 "payment_button_selectors": "form[action$='/cart/add'] .shopify-payment-button", 15159 "subscriptionLinkSelector": appstleStringSetting(""), 15160 "atcButtonPlacement": appstleStringSetting("BEFORE"), 15161 "subscriptionLinkPlacement": appstleStringSetting("BEFORE"), 15162 "cartRowSelector": appstleStringSetting(""), 15163 "cartLineItemSelector": appstleStringSetting(""), 15164 "cartLineItemPerQuantityPriceSelector": appstleStringSetting(""), 15165 "cartLineItemTotalPriceSelector": appstleStringSetting(""), 15166 "cartLineItemSellingPlanNameSelector": appstleStringSetting(""), 15167 "cartSubTotalSelector" : appstleStringSetting(""), 15168 "cartLineItemPriceSelector": appstleStringSetting(""), 15169 "cartLineItemPlacement": appstleStringSetting("BEFORE"), 15170 "cartHiddenAttributesSelector": appstleStringSetting(""), 15171 "buildABoxDiscountSelector": appstleStringSetting(""), 15172 }, 15173 "baseUrl": appstleStringSetting("https:\/\/subscription-admin.appstle.com"), 15174 "usedTranslation": "true", 15175 "enableCartWidgetFeature": appstleStringSetting("false"), 15176 "storefrontAnalyticsForwardingEnabled": appstleJsonSetting("false"), 15177 "appstleStorefrontAnalyticsPath": appstleStringSetting("https:\/\/subscription-admin.appstle.com\/assets\/js\/appstle-storefront-analytics.min.js?shop=rocky-mountain-oils.myshopify.com\u0026v=1784182483761"), 15178 "useUrlWithCustomerId": appstleStringSetting("true"), 15179 "atcButtonSelector": appstleStringSetting(""), 15180 "moneyFormat": appstleStringSetting("${{amount}}"), 15181 "oneTimePurchaseText": appstleStringSetting("One Time Purchase"), 15182 "minimumQuantityMessage": appstleStringSetting(null), 15183 "tapToSelectText": appstleStringSetting("Tap To Select"), 15184 "bundleDiscountTextV2": appstleStringSetting("bundle discount extra: {{bundleDiscount}} off"), 15185 "productPageUnitPriceSelectorV2": appstleStringSetting(null), 15186 "monthsFrequencyTextV2": appstleStringSetting("Months"), 15187 "monthlyLabelTextV2": appstleStringSetting("Monthly"), 15188 "monthFrequencyTextV2": appstleStringSetting("Month"), 15189 "weeksFrequencyTextV2": appstleStringSetting("Weeks"), 15190 "weeklyLabelTextV2": appstleStringSetting("Weekly"), 15191 "weekFrequencyTextV2": appstleStringSetting("Week"), 15192 "daysFrequencyTextV2": appstleStringSetting("Days"), 15193 "dayFrequencyTextV2": appstleStringSetting("day"), 15194 "yearsFrequencyTextV2": appstleStringSetting("Years"), 15195 "yearlyLabelTextV2": appstleStringSetting("Yearly"), 15196 "yearFrequencyTextV2": appstleStringSetting("Year"), 15197 "offFrequencyTextV2": appstleStringSetting("Off"), 15198 "prepayLabelTextV2": appstleStringSetting("Prepay"), 15199 "prepaidLabelTextV2": appstleStringSetting("Prepaid"), 15200 "prepaidSaveBadgeTextV2": appstleStringSetting("SAVE {{selectedDiscountPercentage}}"), 15201 "onetimeDescriptionTextV2": appstleStringSetting(""), 15202 "atcButtonTextV2": appstleStringSetting(""), 15203 "oneTimeFrequencyTextV2": appstleStringSetting("One Time"), 15204 "cancelAnytimeLabelTextV2": appstleStringSetting("Cancel Anytime"), 15205 "noSubscriptionLabelTextV2": appstleStringSetting("No Subscription"), 15206 "addToShipmentButtonTextV2": appstleStringSetting("Add to Shipment"), 15207 "addToShipmentProcessingV2": appstleStringSetting("Processing..."), 15208 "addToShipmentSuccessTextV2": appstleStringSetting("Success"), 15209 "addToShipmentErrorTextV2": appstleStringSetting("Error"), 15210 "addToShipmentTooltipTextV2": appstleStringSetting("Please avoid double delivery charges! Login to add this product to an upcoming delivery."), 15211 "frequencyCombinedWidgetTextV2": appstleStringSetting("Frequency"), 15212 "selectDeliverOptionV2": appstleStringSetting("Select Delivery Option"), 15213 "subscribeAndSaveSuccessV2": appstleStringSetting("Subscription Selected"), 15214 "unsubscribeFrequencyTextV2": appstleStringSetting("One-time Purchase"), 15215 "deliveryEveryFrequencyTextV2": appstleStringSetting("Delivery Frequency"), 15216 "sellingPlanTitleTextNonPrepaid": appstleStringSetting("{{sellingPlanName}}"), 15217 "subscribeAndSaveInitalV2": appstleStringSetting("Subscribe and save"), 15218 "subscriptionDescriptionTextV2": appstleStringSetting(""), 15219 "atcButtonTextSelector": appstleStringSetting(""), 15220 "disableCartWidgetOnVariants": appstleStringSetting(""), 15221 "shop": appstleStringSetting("rocky-mountain-oils.myshopify.com"), 15222 "deliveryText": appstleStringSetting("delivery"), 15223 "purchaseOptionsText": appstleStringSetting("Purchase Options"), 15224 "manageSubscriptionButtonText": appstleStringSetting(null), 15225 "subscriptionOptionText": appstleStringSetting("Subscribe and save"), 15226 "sellingPlanSelectTitle": appstleStringSetting("DELIVERY FREQUENCY"), 15227 "subscriptionPriceDisplayText": appstleStringSetting(""), 15228 "tooltipTitle": appstleStringSetting("Subscription detail"), 15229 "showTooltipOnClick": appstleStringSetting("false"), 15230 "tooltipDesctiption": appstleStringSetting("\u003cstrong\u003eHave complete control of your subscriptions\u003c\\\/strong\u003e\u003cbr\\\/\u003e\u003cbr\\\/\u003eSkip, reschedule, edit, or cancel deliveries anytime, based on your needs."), 15231 "tooltipDescriptionOnPrepaidPlan": appstleStringSetting("\u003cb\u003ePrepaid Plan Details\u003c\\\/b\u003e\u003c\\\/br\u003e Total price: {{totalPrice}} ( Price for every delivery: {{pricePerDelivery}})"), 15232 "tooltipDescriptionOnMultipleDiscount": appstleStringSetting("\u003cb\u003eDiscount Details\u003c\\\/b\u003e\u003c\\\/br\u003e Initial discount is {{discountOne}} and then {{discountTwo}}"), 15233 "manualTranslation": appstleStringSetting("false"), 15234 "tooltipDescriptionCustomization": appstleStringSetting("{{{defaultTooltipDescription}}} \u003c\\\/br\u003e {{{prepaidDetails}}} \u003c\\\/br\u003e {{{discountDetails}}}"), 15235 "orderStatusManageSubscriptionTitle": appstleStringSetting("Subscription"), 15236 "orderStatusManageSubscriptionDescription": appstleStringSetting("Continue to your account to view and manage your subscriptions. Please use the same email address that you used to buy the subscription."), 15237 "orderStatusManageSubscriptionButtonText": appstleStringSetting("Manage your subscription"), 15238 "subscriptionOptionSelectedByDefault" : appstleJsonSetting("false"), 15239 "totalPricePerDeliveryText" : appstleStringSetting("{{prepaidPerDeliveryPrice}}\\\/delivery"), 15240 "memberOnlySellingPlansJson": appstleJsonSetting("{\"691785957743\":{\"shop\":\"rocky-mountain-oils.myshopify.com\",\"sellingPlanId\":691785957743,\"enableMemberInclusiveTag\":false,\"enableMemberExclusiveTag\":true,\"memberExclusiveTags\":\"\\\"Special Postcard Offer\\\"\"},\"691785924975\":{\"shop\":\"rocky-mountain-oils.myshopify.com\",\"sellingPlanId\":691785924975,\"enableMemberInclusiveTag\":true,\"memberInclusiveTags\":\"Special Postcard Offer\",\"enableMemberExclusiveTag\":false},\"691795362159\":{\"shop\":\"rocky-mountain-oils.myshopify.com\",\"sellingPlanId\":691795362159,\"enableMemberInclusiveTag\":false,\"enableMemberExclusiveTag\":true,\"memberExclusiveTags\":\"\\\"Special Postcard Offer\\\"\"}}"), 15241 "nonMemberOnlySellingPlansJson": appstleJsonSetting("{}"), 15242 "sellingPlansJson": appstleJsonSetting("[{\"frequencyCount\":1,\"frequencyInterval\":\"MONTH\",\"billingFrequencyCount\":1,\"billingFrequencyInterval\":\"MONTH\",\"frequencyName\":\"Special every 1 month\",\"discountOffer\":30.0,\"afterCycle1\":0,\"discountType\":\"PERCENTAGE\",\"discountEnabled\":true,\"discountEnabledMasked\":true,\"id\":\"gid:\/\/shopify\/SellingPlan\/691785924975\",\"frequencyType\":\"ON_PURCHASE_DAY\",\"specificDayEnabled\":false,\"cutOff\":0,\"prepaidFlag\":\"false\",\"idNew\":\"gid:\/\/shopify\/SellingPlan\/691785924975\",\"planType\":\"PAY_AS_YOU_GO\",\"deliveryPolicyPreAnchorBehavior\":\"ASAP\",\"freeTrialEnabled\":false,\"memberOnly\":true,\"nonMemberOnly\":false,\"memberInclusiveTags\":\"Special Postcard Offer\",\"formFieldJson\":\"[]\",\"frequencySequence\":0,\"groupName\":\"Z-Special Postcard Offer\",\"groupId\":78691795311,\"repeatingCycle\":false,\"inventoryPolicyReserve\":\"ON_SALE\",\"appstleCycles\":[]},{\"frequencyCount\":2,\"frequencyInterval\":\"MONTH\",\"billingFrequencyCount\":2,\"billingFrequencyInterval\":\"MONTH\",\"frequencyName\":\"Every 2 months\",\"frequencyDescription\":\"\",\"discountOffer\":10.0,\"discountOffer2\":15.0,\"afterCycle1\":0,\"afterCycle2\":4,\"discountType\":\"PERCENTAGE\",\"discountType2\":\"PERCENTAGE\",\"discountEnabled\":true,\"discountEnabled2\":true,\"discountEnabledMasked\":true,\"discountEnabled2Masked\":true,\"id\":\"gid:\/\/shopify\/SellingPlan\/691786088815\",\"frequencyType\":\"ON_PURCHASE_DAY\",\"specificDayEnabled\":false,\"cutOff\":0,\"prepaidFlag\":\"false\",\"idNew\":\"gid:\/\/shopify\/SellingPlan\/691786088815\",\"planType\":\"PAY_AS_YOU_GO\",\"deliveryPolicyPreAnchorBehavior\":\"ASAP\",\"freeTrialEnabled\":false,\"memberOnly\":false,\"nonMemberOnly\":false,\"formFieldJson\":\"[]\",\"frequencySequence\":1,\"groupName\":\"Z-Special Postcard Offer\",\"groupId\":78691795311,\"repeatingCycle\":false,\"inventoryPolicyReserve\":\"ON_SALE\",\"appstleCycles\":[{\"afterCycle\":8,\"discountType\":\"PERCENTAGE\",\"value\":2
152420.0,\"repeatingCycle\":false,\"preventDuplicationFreeProduct\":false},{\"afterCycle\":12,\"discountType\":\"PERCENTAGE\",\"value\":25.0,\"repeatingCycle\":false,\"preventDuplicationFreeProduct\":false},{\"afterCycle\":16,\"discountType\":\"PERCENTAGE\",\"value\":30.0,\"repeatingCycle\":false,\"preventDuplicationFreeProduct\":false}]},{\"frequencyCount\":3,\"frequencyInterval\":\"MONTH\",\"billingFrequencyCount\":3,\"billingFrequencyInterval\":\"MONTH\",\"frequencyName\":\"Every 3 months\",\"frequencyDescription\":\"\",\"discountOffer\":5.0,\"discountOffer2\":10.0,\"afterCycle1\":0,\"afterCycle2\":4,\"discountType\":\"PERCENTAGE\",\"discountType2\":\"PERCENTAGE\",\"discountEnabled\":true,\"discountEnabled2\":true,\"discountEnabledMasked\":true,\"discountEnabled2Masked\":true,\"id\":\"gid:\/\/shopify\/SellingPlan\/691786121583\",\"frequencyType\":\"ON_PURCHASE_DAY\",\"specificDayEnabled\":false,\"cutOff\":0,\"prepaidFlag\":\"false\",\"idNew\":\"gid:\/\/shopify\/SellingPlan\/691786121583\",\"planType\":\"PAY_AS_YOU_GO\",\"deliveryPolicyPreAnchorBehavior\":\"ASAP\",\"freeTrialEnabled\":false,\"memberOnly\":false,\"nonMemberOnly\":false,\"formFieldJson\":\"[]\",\"frequencySequence\":2,\"groupName\":\"Z-Special Postcard Offer\",\"groupId\":78691795311,\"repeatingCycle\":false,\"inventoryPolicyReserve\":\"ON_SALE\",\"appstleCycles\":[{\"afterCycle\":8,\"discountType\":\"PERCENTAGE\",\"value\":15.0,\"repeatingCycle\":false,\"preventDuplicationFreeProduct\":false},{\"afterCycle\":12,\"discountType\":\"PERCENTAGE\",\"value\":20.0,\"repeatingCycle\":false,\"preventDuplicationFreeProduct\":false},{\"afterCycle\":16,\"discountType\":\"PERCENTAGE\",\"value\":25.0,\"repeatingCycle\":false,\"preventDuplicationFreeProduct\":false},{\"afterCycle\":20,\"discountType\":\"PERCENTAGE\",\"value\":30.0,\"repeatingCycle\":false,\"preventDuplicationFreeProduct\":false}]},{\"frequencyCount\":1,\"frequencyInterval\":\"MONTH\",\"billingFrequencyCount\":1,\"billingFrequencyInterval\":\"MONTH\",\"frequencyName\":\"Every 1 month\",\"frequencyDescription\":\"\",\"discountOffer\":15.0,\"discountOffer2\":20.0,\"afterCycle1\":0,\"afterCycle2\":4,\"discountType\":\"PERCENTAGE\",\"discountType2\":\"PERCENTAGE\",\"discountEnabled\":true,\"discountEnabled2\":true,\"discountEnabledMasked\":true,\"discountEnabled2Masked\":true,\"id\":\"gid:\/\/shopify\/SellingPlan\/691785957743\",\"frequencyType\":\"ON_PURCHASE_DAY\",\"specificDayEnabled\":false,\"cutOff\":0,\"prepaidFlag\":\"false\",\"idNew\":\"gid:\/\/shopify\/SellingPlan\/691785957743\",\"planType\":\"PAY_AS_YOU_GO\",\"deliveryPolicyPreAnchorBehavior\":\"ASAP\",\"freeTrialEnabled\":false,\"memberOnly\":false,\"nonMemberOnly\":true,\"memberExclusiveTags\":\"\\\"Special Postcard Offer\\\"\",\"formFieldJson\":\"[]\",\"frequencySequence\":0,\"groupName\":\"Subscribe \\u0026 Save\",\"groupId\":78691828079,\"repeatingCycle\":false,\"inventoryPolicyReserve\":\"ON_SALE\",\"appstleCycles\":[{\"afterCycle\":8,\"discountType\":\"PERCENTAGE\",\"value\":25.0,\"repeatingCycle\":false,\"preventDuplicationFreeProduct\":false},{\"afterCycle\":12,\"discountType\":\"PERCENTAGE\",\"value\":30.0,\"repeatingCycle\":false,\"preventDuplicationFreeProduct\":false}]},{\"frequencyCount\":2,\"frequencyInterval\":\"MONTH\",\"billingFrequencyCount\":2,\"billingFrequencyInterval\":\"MONTH\",\"frequencyName\":\"Every 2 months\",\"frequencyDescription\":\"\",\"discountOffer\":10.0,\"discountOffer2\":15.0,\"afterCycle1\":0,\"afterCycle2\":4,\"discountType\":\"PERCENTAGE\",\"discountType2\":\"PERCENTAGE\",\"discountEnabled\":true,\"discountEnabled2\":true,\"discountEnabledMasked\":true,\"discountEnabled2Masked\":true,\"id\":\"gid:\/\/shopify\/SellingPlan\/691785990511\",\"frequencyType\":\"ON_PURCHASE_DAY\",\"specificDayEnabled\":false,\"cutOff\":0,\"prepaidFlag\":\"false\",\"idNew\":\"gid:\/\/shopify\/SellingPlan\/691785990511\",\"planType\":\"PAY_AS_YOU_GO\",\"deliveryPolicyPreAnchorBehavior\":\"ASAP\",\"freeTrialEnabled\":false,\"memberOnly\":false,\"nonMemberOnly\":false,\"formFieldJson\":\"null\",\"frequencySequence\":1,\"groupName\":\"Subscribe \\u0026 Save\",\"groupId\":78691828079,\"repeatingCycle\":false,\"inventoryPolicyReserve\":\"ON_SALE\",\"appstleCycles\":[{\"afterCycle\":8,\"discountType\":\"PERCENTAGE\",\"value\":2
152420.0,\"repeatingCycle\":false,\"preventDuplicationFreeProduct\":false},{\"afterCycle\":12,\"discountType\":\"PERCENTAGE\",\"value\":25.0,\"repeatingCycle\":false,\"preventDuplicationFreeProduct\":false},{\"afterCycle\":16,\"discountType\":\"PERCENTAGE\",\"value\":30.0,\"repeatingCycle\":false,\"preventDuplicationFreeProduct\":false}]},{\"frequencyCount\":3,\"frequencyInterval\":\"MONTH\",\"billingFrequencyCount\":3,\"billingFrequencyInterval\":\"MONTH\",\"frequencyName\":\"Every 3 months\",\"frequencyDescription\":\"\",\"discountOffer\":5.0,\"discountOffer2\":10.0,\"afterCycle1\":0,\"afterCycle2\":4,\"discountType\":\"PERCENTAGE\",\"discountType2\":\"PERCENTAGE\",\"discountEnabled\":true,\"discountEnabled2\":true,\"discountEnabledMasked\":true,\"discountEnabled2Masked\":true,\"id\":\"gid:\/\/shopify\/SellingPlan\/691786023279\",\"frequencyType\":\"ON_PURCHASE_DAY\",\"specificDayEnabled\":false,\"cutOff\":0,\"prepaidFlag\":\"false\",\"idNew\":\"gid:\/\/shopify\/SellingPlan\/691786023279\",\"planType\":\"PAY_AS_YOU_GO\",\"deliveryPolicyPreAnchorBehavior\":\"ASAP\",\"freeTrialEnabled\":false,\"memberOnly\":false,\"nonMemberOnly\":false,\"formFieldJson\":\"null\",\"frequencySequence\":2,\"groupName\":\"Subscribe \\u0026 Save\",\"groupId\":78691828079,\"repeatingCycle\":false,\"inventoryPolicyReserve\":\"ON_SALE\",\"appstleCycles\":[{\"afterCycle\":8,\"discountType\":\"PERCENTAGE\",\"value\":15.0,\"repeatingCycle\":false,\"preventDuplicationFreeProduct\":false},{\"afterCycle\":12,\"discountType\":\"PERCENTAGE\",\"value\":20.0,\"repeatingCycle\":false,\"preventDuplicationFreeProduct\":false},{\"afterCycle\":16,\"discountType\":\"PERCENTAGE\",\"value\":25.0,\"repeatingCycle\":false,\"preventDuplicationFreeProduct\":false},{\"afterCycle\":20,\"discountType\":\"PERCENTAGE\",\"value\":30.0,\"repeatingCycle\":false,\"preventDuplicationFreeProduct\":false}]},{\"frequencyCount\":1,\"frequencyInterval\":\"MONTH\",\"billingFrequencyCount\":1,\"billingFrequencyInterval\":\"MONTH\",\"frequencyName\":\"Every 1 month\",\"frequencyDescription\":\"\",\"discountOffer\":15.0,\"discountOffer2\":20.0,\"afterCycle1\":0,\"afterCycle2\":4,\"discountType\":\"PERCENTAGE\",\"discountType2\":\"PERCENTAGE\",\"discountEnabled\":true,\"discountEnabled2\":true,\"discountEnabledMasked\":true,\"discountEnabled2Masked\":true,\"id\":\"gid:\/\/shopify\/SellingPlan\/691795362159\",\"frequencyType\":\"ON_PURCHASE_DAY\",\"specificDayEnabled\":false,\"cutOff\":0,\"prepaidFlag\":\"false\",\"idNew\":\"gid:\/\/shopify\/SellingPlan\/691795362159\",\"planType\":\"PAY_AS_YOU_GO\",\"deliveryPolicyPreAnchorBehavior\":\"ASAP\",\"freeTrialEnabled\":false,\"memberOnly\":false,\"nonMemberOnly\":true,\"memberExclusiveTags\":\"\\\"Special Postcard Offer\\\"\",\"formFieldJson\":\"[]\",\"frequencySequence\":0,\"groupName\":\"Z2-Subscribe \\u0026 Save\",\"groupId\":78700937583,\"repeatingCycle\":false,\"inventoryPolicyReserve\":\"ON_SALE\",\"appstleCycles\":[{\"afterCycle\":8,\"discountType\":\"PERCENTAGE\",\"value\":25.0,\"repeatingCycle\":false,\"preventDuplicationFreeProduct\":false},{\"afterCycle\":12,\"discountType\":\"PERCENTAGE\",\"value\":30.0,\"repeatingCycle\":false,\"preventDuplicationFreeProduct\":false}]},{\"frequencyCount\":2,\"frequencyInterval\":\"MONTH\",\"billingFrequencyCount\":2,\"billingFrequencyInterval\":\"MONTH\",\"frequencyName\":\"Every 2 months\",\"frequencyDescription\":\"\",\"discountOffer\":10.0,\"discountOffer2\":15.0,\"afterCycle1\":0,\"afterCycle2\":4,\"discountType\":\"PERCENTAGE\",\"discountType2\":\"PERCENTAGE\",\"discountEnabled\":true,\"discountEnabled2\":true,\"discountEnabledMasked\":true,\"discountEnabled2Masked\":true,\"id\":\"gid:\/\/shopify\/SellingPlan\/691795394927\",\"frequencyType\":\"ON_PURCHASE_DAY\",\"specificDayEnabled\":false,\"cutOff\":0,\"prepaidFlag\":\"false\",\"idNew\":\"gid:\/\/shopify\/SellingPlan\/691795394927\",\"planType\":\"PAY_AS_YOU_GO\",\"deliveryPolicyPreAnchorBehavior\":\"ASAP\",\"freeTrialEnabled\":false,\"memberOnly\":false,\"nonMemberOnly\":false,\"formFieldJson\":\"null\",\"frequencySequence\":1,\"groupName\":\"Z2-Subscribe \\u0026 Save\",\"groupId\":78700937583,\"repeatingCycle\":false,\"inventoryPolicyReserve\":\"ON_SALE\",\"appstleCycles\":[{\"afterCycle\":8,\"discountType\":\"PERCENTAGE\",\"value\":2
152420.0,\"repeatingCycle\":false,\"preventDuplicationFreeProduct\":false},{\"afterCycle\":12,\"discountType\":\"PERCENTAGE\",\"value\":25.0,\"repeatingCycle\":false,\"preventDuplicationFreeProduct\":false},{\"afterCycle\":16,\"discountType\":\"PERCENTAGE\",\"value\":30.0,\"repeatingCycle\":false,\"preventDuplicationFreeProduct\":false}]},{\"frequencyCount\":3,\"frequencyInterval\":\"MONTH\",\"billingFrequencyCount\":3,\"billingFrequencyInterval\":\"MONTH\",\"frequencyName\":\"Every 3 months\",\"frequencyDescription\":\"\",\"discountOffer\":5.0,\"discountOffer2\":10.0,\"afterCycle1\":0,\"afterCycle2\":4,\"discountType\":\"PERCENTAGE\",\"discountType2\":\"PERCENTAGE\",\"discountEnabled\":true,\"discountEnabled2\":true,\"discountEnabledMasked\":true,\"discountEnabled2Masked\":true,\"id\":\"gid:\/\/shopify\/SellingPlan\/691795427695\",\"frequencyType\":\"ON_PURCHASE_DAY\",\"specificDayEnabled\":false,\"cutOff\":0,\"prepaidFlag\":\"false\",\"idNew\":\"gid:\/\/shopify\/SellingPlan\/691795427695\",\"planType\":\"PAY_AS_YOU_GO\",\"deliveryPolicyPreAnchorBehavior\":\"ASAP\",\"freeTrialEnabled\":false,\"memberOnly\":false,\"nonMemberOnly\":false,\"formFieldJson\":\"null\",\"frequencySequence\":2,\"groupName\":\"Z2-Subscribe \\u0026 Save\",\"groupId\":78700937583,\"repeatingCycle\":false,\"inventoryPolicyReserve\":\"ON_SALE\",\"appstleCycles\":[{\"afterCycle\":8,\"discountType\":\"PERCENTAGE\",\"value\":15.0,\"repeatingCycle\":false,\"preventDuplicationFreeProduct\":false},{\"afterCycle\":12,\"discountType\":\"PERCENTAGE\",\"value\":20.0,\"repeatingCycle\":false,\"preventDuplicationFreeProduct\":false},{\"afterCycle\":16,\"discountType\":\"PERCENTAGE\",\"value\":25.0,\"repeatingCycle\":false,\"preventDuplicationFreeProduct\":false},{\"afterCycle\":20,\"discountType\":\"PERCENTAGE\",\"value\":30.0,\"repeatingCycle\":false,\"preventDuplicationFreeProduct\":false}]},{\"frequencyCount\":1,\"frequencyInterval\":\"MONTH\",\"billingFrequencyCount\":1,\"billingFrequencyInterval\":\"MONTH\",\"frequencyName\":\"Every 1 month\",\"frequencyDescription\":\"\",\"afterCycle1\":0,\"afterCycle2\":0,\"discountEnabled\":false,\"discountEnabled2\":false,\"discountEnabledMasked\":false,\"discountEnabled2Masked\":false,\"id\":\"gid:\/\/shopify\/SellingPlan\/691797361007\",\"frequencyType\":\"ON_PURCHASE_DAY\",\"specificDayEnabled\":false,\"cutOff\":0,\"prepaidFlag\":\"false\",\"idNew\":\"gid:\/\/shopify\/SellingPlan\/691797361007\",\"planType\":\"PAY_AS_YOU_GO\",\"deliveryPolicyPreAnchorBehavior\":\"ASAP\",\"freeTrialEnabled\":false,\"memberOnly\":false,\"nonMemberOnly\":false,\"formFieldJson\":\"null\",\"frequencySequence\":0,\"groupName\":\"Oil\\u0027ty Plus Membership - Monthly\",\"groupId\":78702608751,\"repeatingCycle\":false,\"inventoryPolicyReserve\":\"ON_SALE\",\"appstleCycles\":[]},{\"frequencyCount\":1,\"frequencyInterval\":\"YEAR\",\"billingFrequencyCount\":1,\"billingFrequencyInterval\":\"YEAR\",\"frequencyName\":\"Every 1 year\",\"frequencyDescription\":\"\",\"afterCycle1\":0,\"afterCycle2\":0,\"discountEnabled\":false,\"discountEnabled2\":false,\"discountEnabledMasked\":false,\"discountEnabled2Masked\":false,\"id\":\"gid:\/\/shopify\/SellingPlan\/691797459311\",\"frequencyType\":\"ON_PURCHASE_DAY\",\"specificDayEnabled\":false,\"cutOff\":0,\"prepaidFlag\":\"false\",\"idNew\":\"gid:\/\/shopify\/SellingPlan\/691797459311\",\"planType\":\"PAY_AS_YOU_GO\",\"deliveryPolicyPreAnchorBehavior\":\"ASAP\",\"freeTrialEnabled\":false,\"memberOnly\":false,\"nonMemberOnly\":false,\"formFieldJson\":\"null\",\"frequencySequence\":0,\"groupName\":\"Oil\\u0027ty Plus Membership - Yearly\",\"groupId\":78702674287,\"repeatingCycle\":false,\"defaultSelectedPlan\":false,\"inventoryPolicyReserve\":\"ON_SALE\",\"appstleCycles\":[]},{\"frequencyCount\":1,\"frequencyInterval\":\"MONTH\",\"billingFrequencyCount\":1,\"billingFrequencyInterval\":\"MONTH\",\"frequencyName\":\"Monthly Subscription\",\"frequencyDescription\":\"\",\"afterCycle1\":0,\"afterCycle2\":0,\"discountEnabled\":false,\"discountEnabled2\":false,\"discountEnabledMasked\":false,\"discountEnabled2Masked\":false,\"id\":\"gid:\/\/shopify\/SellingPlan\/691886883183\",\"frequencyType\":\"ON_PURCHASE_DAY\",\"specificDayEnabled\":false,\"cutOff\":0,\"prepaidFlag\":\"false\",\"idNew\":\"gid:\/\/shopify\/SellingPlan\/691886883183\",\"planType\":\"PAY_AS_YOU_GO\",\"deliveryPolicyPreAnchorBehavior\":\"ASAP\",\"freeTrialEnabled\":false,\"memberOnly\":false,\"nonMemberOnly\":false,\"formFieldJson\":\"null\",\"frequencySequence\":0,\"groupName\":\"Mystery Bun
15242dle\",\"groupId\":78781710703,\"repeatingCycle\":false,\"defaultSelectedPlan\":false,\"inventoryPolicyReserve\":\"ON_SALE\",\"appstleCycles\":[]}]"), 15243 "widgetEnabled": appstleJsonSetting("false"), 15244 "showFreeGiftPrice" : appstleJsonSetting(true), 15245 "showFreeGiftComparePrice" : appstleJsonSetting(true), 15246 "enableFreeGiftLayout" : appstleJsonSetting(false), 15247 "freeGiftLabelText": appstleStringSetting("+ Free {{productName}}"), 15248 "freeGiftBadgeText": appstleStringSetting(""), 15249 "showTooltip" : appstleJsonSetting("true"), 15250 "showCartWidgetOnBundleItems" : appstleJsonSetting("false"), 15251 "prepaidOptionSelectedByDefault" : appstleJsonSetting("false"), 15252 "disablePassingSellingPlanAsLineProperties" : appstleJsonSetting("true"), 15253 "updateThemePrice" : appstleJsonSetting("false"), 15254 "sortByDefaultSequence": appstleJsonSetting("false"), 15255 "showSubOptionBeforeOneTime": appstleJsonSetting("false"), 15256 "detectVariantFromURLParams": appstleJsonSetting("false"), 15257 "disableQueryParamsUpdate": appstleJsonSetting("false"), 15258 "showStaticTooltip": appstleJsonSetting("false"), 15259 "showAppstleLink": appstleJsonSetting("true"), 15260 "sellingPlanTitleText" : appstleStringSetting("{{sellingPlanName}} ({{sellingPlanPrice}}\\\/delivery)"), 15261 "oneTimePriceText" : appstleStringSetting("{{price}}"), 15262 "selectedPayAsYouGoSellingPlanPriceText" : appstleStringSetting("{{price}}"), 15263 "selectedPrepaidSellingPlanPriceText" : appstleStringSetting(" {{totalPrice}}"), 15264 "selectedDiscountFormat" : appstleStringSetting("SAVE {{selectedDiscountPercentage}}"), 15265 "manageSubscriptionBtnFormat" : appstleStringSetting("\u003ca href='https:\\\/\\\/rocky-mountain-oils.myshopify.com\\\/apps\\\/subscriptions' class='appstle_manageSubBtn' \u003e\u003cbutton class='btn' style='padding: 2px 20px'\u003e{{manageSubscriptionButtonText}}\u003c\\\/button\u003e\u003c\\\/a\u003e\u003cbr\u003e\u003cbr\u003e"), 15266 "manageSubscriptionUrl" : appstleStringSetting("https:\\\/\\\/rocky-mountain-oils.myshopify.com\\\/apps\\\/subscriptions"), 15267 "appstlePlanId": appstleJsonSetting("164"), 15268 "showCheckoutSubscriptionBtn": appstleJsonSetting("true"), 15269 "priceSelector": appstleStringSetting(""), 15270 "reloadPriceSelector": appstleStringSetting(""), 15271 "landingPagePriceSelector": appstleStringSetting(""), 15272 "quickViewClickSelector": appstleStringSetting(""), 15273 "badgeTop": appstleStringSetting(""), 15274 "pricePlacement": appstleStringSetting("BEFORE"), 15275 "disableLoadingJquery": appstleJsonSetting("false"), 15276 "widgetEnabledOnSoldVariant": appstleStringSetting("false"), 15277 "switchRadioButtonWidget": appstleJsonSetting("false"), 15278 "appstlePlanName": appstleStringSetting("BUSINESS PREMIUM"), 15279 "appstlePlanFeatures": appstleJsonSetting("{\"analytics\": true, \"webhookAccess\": false, \"accessBundling\": true, \"enableAutoSync\": false, \"enableBundling\": true, \"enableSmsAlert\": true, \"accessBuildABox\": true, \"enableCampaigns\": true, \"enablePriceSync\": false, \"enableAutomation\": true, \"enableCartWidget\": true, \"accessAppstleMenu\": true, \"accessResendEmail\": true, \"enableAddressSync\": false, \"enableExternalApi\": false, \"enablePhasedRetry\": true, \"enableIntegrations\": true, \"enableQuickActions\": true, \"accessQuickCheckout\": true, \"accessSplitContract\": true, \"enableSummaryReports\": true, \"enableCustomEmailHtml\": true, \"enableWidgetPlacement\": true, \"enableCancellationFlow\": true, \"enableShippingProfiles\": true, \"accessZapierIntegration\": true, \"enableCustomEmailDomain\": true, \"enableDunningManagement\": true, \"enableExportActivityLog\": true, \"subscriptionOrderAmount\": 100000, \"accessGorgiasIntegration\": true, \"accessKlaviyoContactSync\": true, \"enableOrderConsolidation\": false, \"accessMechanicIntegration\": false, \"accessWidgetDe
15279signOptions\": true, \"enableImmediatePlaceOrder\": true, \"enableInventoryManagement\": true, \"accessMechanicsIntegration\": true, \"enableAdvancedSellingPlans\": true, \"accessOneTimeProductUpsells\": true, \"enableBillingIntervalChange\": true, \"enableProductSwapAutomation\": true, \"accessShopifyFlowIntegration\": true, \"enableCancellationManagement\": true, \"enableCustomerPortalSettings\": true, \"enableSubscriptionManagement\": true, \"accessKlaviyoEmailIntegration\": true, \"enableAdminNotificationAccess\": true, \"accessSubscriptionActivityLogs\": true, \"enableBackupPaymentMethodRetry\": true, \"accessSubscriberLoyaltyFeatures\": true, \"enableAddToExistingSubscription\": false, \"enableContractPriceModification\": true, \"enableTrackInventoryInSingleBAB\": true, \"accessManualSubscriptionCreation\": true, \"enableNextBillingDateModification\": true, \"accessCustomerPortalProductUpsells\": true, \"enableServerSideConversionTracking\": true, \"accessDiscountOnCancellationAttempt\": true, \"enableStorefrontAnalyticsForwarding\": true, \"accessAdvanceSubscriptionPlanOptions\": true, \"accessAdvancedCustomerPortalSettings\": true, \"enableAutoRetryOnPaymentMethodUpdate\": true}"), 15280 "formMappingAttributeName": appstleStringSetting(""), 15281 "formMappingAttributeSelector": appstleStringSetting(""), 15282 "quickViewModalPollingSelector": appstleStringSetting(""), 15283 "scriptLoadDelay": appstleStringSetting("0"), 15284 "formatMoneyOverride": appstleStringSetting("false"), 15285 "enableAddToExistingSubscriptionFeature": appstleStringSetting("false"), 15286 "displayAddToExistingSubscriptionButtonForNotLoggedInV2": appstleStringSetting(null), 15287 "showAddToSubscriptionButtonOnlyOnSubscriptionProducts": appstleStringSetting("false"), 15288 "appstle_app_proxy_path_prefix": appstleStringSetting("apps\\\/subscriptions"), 15289 "updatePriceOnQuantityChange": appstleStringSetting(""), 15290 "widgetParentSelector": appstleStringSetting(""), 15291 "quantitySelector": appstleStringSetting("quantity-input *"), 15292 "enableAddJSInterceptor": appstleStringSetting("false"), 15293 "isDevEnabled": appstleJsonSetting(false), 15294 "forceReloadWidgetSelector": appstleStringSetting(""), 15295 "forceReloadOnFreqChange": appstleJsonSetting("false"), 15296 "showPrepaidPlanSeparately": appstleJsonSetting("true"), 15297 "debugLogsEnabled": appstleJsonSetting(false), 15298 "isUseStorefrontAPI": appstleJsonSetting(true), 15299 "reBuyEnabled": appstleStringSetting("false"), 15300 "loyaltyDetailsLabelText": appstleStringSetting(null), 15301 "loyaltyPerkDescriptionTextV2": appstleStringSetting("{{#isDiscountTypeFreeProduct}}\u003cdiv style='display: flex;'\u003e\u003cdiv style='height: 60px; width: 60px; flex-shrink: 0; margin-right: 10px;'\u003e\u003cimg style='width: 100%' src={{{featured_image}}}\u003e\u003c\\\/img\u003e\u003c\\\/div\u003e\u003cdiv\u003eAfter {{{billingCycleBlock}}} orders,\u003cspan style='color: #ffc000;font-weight: 700;';\u003e get a FREE {{freeProductName}} \u003c\\\/span\u003e\u003c\\\/div\u003e\u003cdiv\u003e{{\\\/isDiscountTypeFreeProduct}}{{#isDiscountTypePercentage}}After \u003cspan class='appstle-loyalty-billing-cycle'\u003e\u003cspan class='appstle-loyalty-billing-cycle-count'\u003e{{{billingCycleBlock}}}\u003c\\\/span\u003e order\u003c\\\/span\u003e, \u003cspan class='appstle-loyalty-discount'\u003eget \u003cspan style='color: #ffc000;font-weight: 700;';\u003e{{{discount}}}% OFF your entire order\u003c\\\/span\u003e\u003c\\\/span\u003e.{{\\\/isDiscountTypePercentage}}{{#isDiscountTypeShipping}}After \u003cspan class='appstle-loyalty-billing-cycle'\u003e\u003cspan class='appstle-loyalty-billing-cycle-count'\u003e{{{billingCycleBlock}}}\u003c\\\/span\u003e order\u003c\\\/span\u003e, \u003cspan class='appstle-loyalty-discount'\u003eget \u003cspan style='color: #ffc000;font-weight: 700;';\u003eshipping at {{{formatDiscountedPrice}}}\u003c\\\/span\u003e\u003c\\\/span\u003e.{{\\\/isDiscountTypeShipping}}{{#isDiscountTypeFixed}}After \u003cspan class='appstle-loyalty-billing-cycle'\u003e\u003cspan class='appstle-loyalty-billing-cycle-count'\u003e{{{billingCycleBlock}}}\u003c\\\/span\u003e order\u003c\\\/span\u003e, \u003cspan class='appstle-loyalty-discount'\u003eget \u003cspan style='color: #ffc000;font-weight: 700;';\u003e{{{formatDiscountedPrice}}} OFF your entire order\u003c\\\/span\u003e\u003c\\\/span\u003e.{{\\\/isDiscountTypeFixed}}{{#isDiscountTypeFixedPrice}}After \u003cspan class='appstle-loyalty-billing-cycle'\u003e\u003cspan class='appstle-loyalty-billing-cycle-count'\u003e{{{billingCycleBlock}}}\u003c\\\/span\u003e order\u003c\\\/span\u003e, \u003cspan class='appstle-loyalty-discount'\u003eget this product at \u003cspan style='color: #ffc000;font-weight: 700;';\u003e{{{formatDiscountedPrice}}}\u003c\\\/span\u003e\u003c\\\/span\u003e.{{\\\/isDiscountTypeFixedPrice}}"), 15302 "widgetType": appstleStringSetting("WIDGET_TYPE_7"),
15303 "collectionWidgetType": appstleStringSetting("LEGACY"), 15304 "enableCompactProductPageWidget": appstleJsonSetting(false), 15305 "enableCartDrawerWidget": appstleJsonSetting(false), 15306 "cartDrawerWidgetStyle": appstleJsonSetting(false), 15307 "cartDrawerWidgetInlineStyle": appstleStringSetting(null), 15308 "cartDrawerWidgetPanelStyle": appstleStringSetting(null), 15309 "cartDrawerWidgetSegmentedStyle": appstleStringSetting(null), 15310 "showOneTimeComparePrice": appstleJsonSetting("false"), 15311 "showCompareAtPriceForSubscription": appstleJsonSetting(false), 15312 "showCombinedSellingPlanCartWidget": appstleJsonSetting("false"), 15313 "combinedCartWidgetSelector": appstleStringSetting(""), 15314 "removeUnsubscribeOption": appstleJsonSetting(false), 15315 "widgetTemplateHtml": "{% raw %}{% endraw %}", 15316 15317 "allWidgetTemplateHtml": "{\"WIDGET_TYPE_1\":\"{% raw %}{% endraw %}\",\"WIDGET_TYPE_6\":\"{% raw %}\u003cdiv id=\\\"appstle-widget-template\\\"\u003e\\n \u003cdiv class=\\\"appstle_sub_widget\\\" id=\\\"appstle_subscription_widget{{widgetId}}\\\"\u003e\\n\u003cdiv class=\\\"appstle_widget_title\\\"\u003e{{{purchaseOptionsText}}}\u003c\/div\u003e\\n \u003cdiv class=\\\"widgetSellingPlanWrapper\\\"\u003e\\n{{^requires_selling_plan}}\\n{{^showSubOptionBeforeOneTime}}\\n \u003cdiv class=\\\"appstle_input_wrapper appstle_onetime_block\\\"\u003e\\n \u003cinput type=\\\"radio\\\" id=\\\"appstle_selling_plan_label_1{{widgetId}}\\\" name=\\\"selling_plan\\\" value=\\\"\\\" class=\\\"appstleSellingPlan{{widgetId}}\\\" {{^subscriptionOptionSelectedDefault}}checked{{\/subscriptionOptionSelectedDefault}}\u003e\\n \u003clabel for=\\\"appstle_selling_plan_label_1{{widgetId}}\\\"\u003e\\n\u003cdiv class=\\\"appstle-selling-plan-name-wrapper\\\"\u003e\\n {{oneTimePuchaseText}}\\n\u003cdiv class=\\\"appstle-cancel-text\\\"\u003e{{{noSubscriptionLabelTextV2}}}\u003c\/div\u003e\\n\u003c\/div\u003e\\n \u003cdiv class=\\\"appstle-selling-plan-detail-wrapper\\\"\u003e\\n\u003cdiv class=\\\"appstle_span_wrapper\\\"\u003e\\n{{#showOneTimeComparePrice}}\\n\u003cspan class=\\\"appstle_lowercase appstle_sellingPlan_price appstle_onetime_amount_compare\\\"\u003e\\n {{{oneTimePuchaseComparePriceAmount}}}\\n\u003c\/span\u003e\\n{{\/showOneTimeComparePrice}}\\n\\n\u003cspan class=\\\"appstle_lowercase appstle_sellingPlan_price appstle_onetime_amount\\\"\u003e{{{oneTimePuchaseAmount}}}\u003c\/span\u003e\u003c\/div\u003e\\n\u003c\/div\u003e\\n \u003c\/label\u003e\\n \\n \u003c\/div\u003e\\n{{\/showSubOptionBeforeOneTime}}\\n{{\/requires_selling_plan}}\\n {{#sellingPlanVariants}}\\n \u003cdiv class=\\\"appstle_input_wrapper\\\"\u003e\\n \\n \u003cinput type=\\\"radio\\\" class=\\\"appstleSellingPlan{{widgetId}}\\\" id=\\\"{{sellingPlanId}}\\\" value=\\\"{{sellingPlanId}}\\\" name=\\\"selling_plan\\\" {{#isChecked}}checked{{\/isChecked}}\u003e\\n{{^prepaidFlag}}\\n \u003clabel for=\\\"{{sellingPlanId}}\\\"\u003e\\n\u003cdiv class=\\\"appstle-selling-plan-name-wrapper appstle-selling-plan-label-name\\\"\u003e\\n {{{name}}}\\n\u003cdiv class=\\\"appstle-cancel-text\\\"\u003e{{{cancelAnytimeLabelTextV2}}}\u003c\/div\u003e\\n\u003c\/div\u003e\\n\u003cdiv class=\\\"appstle-selling-plan-detail-wrapper\\\"\u003e\\n\u003cdiv class=\\\"appstle_span_wrapper\\\"\u003e\\n \u003cspan class=\\\"appstle_lowercase appstle_sellingPlan_formattedCompareAtPrice appstle_price_block\\\"\u003e{{{formattedCompareAtPrice}}}\u003c\/span\u003e\\n \u003cspan class=\\\"appstle_lowercase appstle_sellingPlan_price appstle_price_block\\\"\u003e{{{formattedPrice}}}\u003c\/span\u003e\\n\\n\\n\u003c\/div\u003e \\n\u003cspan class=\\\"appstle_lowercase appstle_sellingPlan_price appstle_formattext_block\\\"\u003e\u003c\/span\u003e\\n{{#showPricePerDay}}\u003cdiv class=\\\"appstle-perday-price\\\"\u003e{{{pricePerDay}}}
15317\u003c\/div\u003e{{\/showPricePerDay}}\\n\u003cdiv class=\\\"appstle-frequency-description\\\"\u003e\\n{{{frequencyDescription}}} \\n\u003c\/div\u003e\\n \u003c\/div\u003e\\n \u003c\/label\u003e\\n{{#showFormattedDiscountText}}\\n \u003cspan class=\\\"appstle_sellingPlan_discountText\\\"\u003e{{{formattedDiscountText}}}\u003c\/span\u003e\\n{{\/showFormattedDiscountText}}\\n\u003cdiv class=\\\"appstle-sm-hide appstle-frequency-description\\\"\u003e{{{frequencyDescription}}} \u003c\/div\u003e \\n{{\/prepaidFlag}}\\n{{#prepaidFlag}}\\n\u003clabel for=\\\"{{sellingPlanId}}\\\"\u003e\\n\u003cdiv class=\\\"appstle-selling-plan-name-wrapper appstle-selling-plan-label-name\\\"\u003e\\n {{{name}}}\\n\u003cdiv class=\\\"appstle-cancel-text\\\"\u003e{{{cancelAnytimeLabelTextV2}}}\u003c\/div\u003e\\n\u003c\/div\u003e\\n\u003cdiv class=\\\"appstle-selling-plan-detail-wrapper\\\"\u003e\\n\u003cdiv class=\\\"appstle_span_wrapper\\\"\u003e\\n \u003cspan class=\\\"appstle_lowercase appstle_sellingPlan_formattedCompareAtPrice appstle_price_block\\\"\u003e{{{formattedCompareAtPrice}}}\u003c\/span\u003e\\n \u003cspan class=\\\"appstle_lowercase appstle_sellingPlan_price appstle_price_block\\\"\u003e{{{totalPrice}}}\u003c\/span\u003e\\n\\n\u003c\/div\u003e \\n\u003cspan class=\\\"appstle_lowercase appstle_sellingPlan_price appstle_discount_block appstle_formattedPrepaidPerDeliveryPriceText\\\"\u003e{{{formattedPrepaidPerDeliveryPriceText}}}\u003c\/span\u003e\\n {{#showPricePerDay}}\u003cdiv class=\\\"appstle-perday-price\\\"\u003e{{{pricePerDay}}}\u003c\/div\u003e{{\/showPricePerDay}}\\n\u003cdiv class=\\\"\\\"\u003e\\n\u003cdiv class=\\\"appstle-frequency-description\\\"\u003e\\n{{{frequencyDescription}}} \\n\u003c\/div\u003e\\n\u003c\/div\u003e\\n\u003c\/div\u003e\\n\u003c\/label\u003e\\n{{#showFormattedDiscountText}}\\n \u003cspan class=\\\"appstle_sellingPlan_discountText\\\"\u003e{{{formattedDiscountText}}}\u003c\/span\u003e\\n{{\/showFormattedDiscountText}}\\n\u003cdiv class=\\\"appstle-sm-hide appstle-frequency-description\\\"\u003e{{{frequencyDescription}}} \u003c\/div\u003e \\n\\n{{\/prepaidFlag}}\\n \\n \u003c\/div\u003e\\n {{\/sellingPlanVariants}}\\n{{^requires_selling_plan}}\\n{{#showSubOptionBeforeOneTime}}\\n \u003cdiv class=\\\"appstle_input_wrapper appstle_onetime_block\\\"\u003e\\n \u003cinput type=\\\"radio\\\" id=\\\"appstle_selling_plan_label_1{{widgetId}}\\\" name=\\\"selling_plan\\\" value=\\\"\\\" class=\\\"appstleSellingPlan{{widgetId}}\\\" {{^subscriptionOptionSelectedDefault}}checked{{\/subscriptionOptionSelectedDefault}}\u003e\\n \u003clabel for=\\\"appstle_selling_plan_label_1{{widgetId}}\\\"\u003e\\n\u003cdiv class=\\\"appstle-selling-plan-name-wrapper\\\"\u003e\\n {{oneTimePuchaseText}}\\n\u003cdiv class=\\\"appstle-cancel-text\\\"\u003e{{{noSubscriptionLabelTextV2}}}\u003c\/div\u003e\\n\u003c\/div\u003e\\n\u003cdiv class=\\\"appstle-selling-plan-detail-wrapper\\\"\u003e\\n\u003cspan class=\\\"appstle_lowercase appstle_sellingPlan_price appstle_onetime_amount_compare\\\"\u003e{{{oneTimePuchaseComparePriceAmount}}}\u003c\/span\u003e\\n \u003cspan class=\\\"appstle_lowercase appstle_sellingPlan_price appstle_onetime_amount\\\"\u003e{{{oneTimePuchaseAmount}}}\u003c\/span\u003e\\n\\n\u003c\/div\u003e\\n \u003c\/label\u003e\\n \\n \u003c\/div\u003e\\n{{\/showSubOptionBeforeOneTime}}\\n{{\/requires_selling_plan}}\\n \u003c\/div\u003e\\n{{#showStaticTooltip}}\\n\u003cdiv class=\\\"appstle_tooltip_wrapper_static\\\"\u003e {{{toolTipDescription}}}\u003c\/div\u003e\\n{{\/showStaticTooltip}}\\n{{#showTooltip}}\\n\u003cdiv class=\\\"appstle-tootltip-parent\\\"\u003e\\n \u003cdiv data-appstle-icon=\\\"\\\" class=\\\"appstle_tooltip_wrapper\\\"\u003e\\n \u003csvg width=\\\"90\\\" height=\\\"90\\\" viewBox=\\\"0 0 90 90\\\" xmlns=\\\"http:\/\/www.w3.org\/2000\/svg\\\" class=\\\"tooltip_subscription_svg\\\"\u003e\\n \u003cpath\\n d=\\\"M45 0C20.1827 0 0 20.1827 0 45C0 69.8173 20.1827 90 45 90C69.8173 90 90 69.8174 90 45C90.0056 44.6025 89.9322 44.2078 89.7839 43.8389C89.6357 43.47 89.4156 43.1342 89.1365 42.8511C88.8573 42.568 88.5247 42.3432 88.158 42.1897C87.7912 42.0363 87.3976 41.9573 87 41.9573C86.6024 41.9573 86.2088 42.0363 85.842 42.1897C85.4753 42.3432 85.1427 42.568 84.8
15317635 42.8511C84.5844 43.1342 84.3643 43.47 84.2161 43.8389C84.0678 44.2078 83.9944 44.6025 84 45C84 66.5748 66.5747 84 45 84C23.4253 84 6 66.5747 6 45C6 23.4254 23.4253 6 45 6C56.1538 6 66.3012 10.5882 73.4375 18H65.4062C65.0087 17.9944 64.614 18.0678 64.2451 18.2161C63.8762 18.3643 63.5405 18.5844 63.2573 18.8635C62.9742 19.1427 62.7494 19.4753 62.596 19.842C62.4425 20.2088 62.3635 20.6024 62.3635 21C62.3635 21.3976 62.4425 21.7912 62.596 22.158C62.7494 22.5247 62.9742 22.8573 63.2573 23.1365C63.5405 23.4156 63.8762 23.6357 64.2451 23.7839C64.614 23.9322 65.0087 24.0056 65.4062 24H79.8125C80.6081 23.9999 81.3711 23.6838 81.9337 23.1212C82.4963 22.5586 82.8124 21.7956 82.8125 21V6.59375C82.821 6.18925 82.7476 5.78722 82.5966 5.41183C82.4457 5.03644 82.2205 4.69545 81.9344 4.40936C81.6483 4.12327 81.3073 3.898 80.9319 3.7471C80.5565 3.5962 80.1545 3.52277 79.75 3.53125C79.356 3.53941 78.9675 3.62511 78.6067 3.78344C78.2458 3.94177 77.9197 4.16963 77.6469 4.45402C77.3741 4.73841 77.16 5.07375 77.0168 5.44089C76.8737 5.80803 76.8042 6.19977 76.8125 6.59375V12.875C68.6156 4.86282 57.3081 0 45 0ZM43.75 20.75C43.356 20.7582 42.9675 20.8439 42.6067 21.0022C42.2458 21.1605 41.9197 21.3884 41.6469 21.6728C41.3741 21.9572 41.16 22.2925 41.0168 22.6596C40.8737 23.0268 40.8042 23.4185 40.8125 23.8125V47.375C40.8116 47.7693 40.8883 48.16 41.0385 48.5246C41.1886 48.8892 41.4092 49.2207 41.6875 49.5L54.0938 61.9375C54.6573 62.5011 55.4217 62.8177 56.2188 62.8177C57.0158 62.8177 57.7802 62.5011 58.3438 61.9375C58.9073 61.3739 59.224 60.6095 59.224 59.8125C59.224 59.0155 58.9073 58.2511 58.3438 57.6875L46.8125 46.1875V23.8125C46.821 23.408 46.7476 23.006 46.5966 22.6306C46.4457 22.2552 46.2205 21.9142 45.9344 21.6281C45.6483 21.342 45.3073 21.1168 44.9319 20.9658C44.5565 20.8149 44.1545 20.7415 43.75 20.75Z\\\"\\n \u003e\u003c\/path\u003e\\n \u003c\/svg\u003e\\n \u003cspan class=\\\"appstle_tooltip_title\\\"\u003e{{{tooltipTitle}}}\u003c\/span\u003e\\n \u003c\/div\u003e\\n\u003cdiv class=\\\"appstle_tooltip\\\"\u003e\\n \u003cdiv class=\\\"appstle_tooltip_content\\\"\u003e\\n {{{toolTipDescription}}}\\n \u003c\/div\u003e\\n {{#showAppstleLink}}\\n \u003cdiv class=\\\"appstle_tooltip_appstle\\\"\u003e\\n \u003ca href=\\\"https:\/\/appstle.com\\\" class=\\\"appstle_link\\\" target=\\\"_blank\\\"\u003e\\n POWERED BY APPSTLE \u003c\/a\u003e\\n \u003c\/div\u003e\\n {{\/showAppstleLink}}\\n \u003c\/div\u003e\\n\u003c\/div\u003e\\n{{\/showTooltip}}\\n\u003cstyle\u003e\\n.widgetSellingPlanWrapper {\\n display: grid;\\n grid-template-columns: repeat(2, minmax(0, 1fr));\\n gap: 1.5rem;\\n grid-auto-rows: 1fr;\\n margin-bottom: 6px;\\nmargin-top: 10px;\\n}\\n\\n.widgetSellingPlanWrapper input {\\n display: none;\\n}\\n\\n.widgetSellingPlanWrapper label {\\n border-radius: 10px;\\n border: 1px solid rgba(var(--color-foreground));\\n padding: 0.5rem;\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n display: block;\\n height: 100%;\\n width: 100%;\\n text-align: center;\\ncursor: pointer;\\n}\\n\\n.widgetSellingPlanWrapper input:checked+label {\\n background-color: rgba(var(--color-foreground)) !important;\\ncolor: rgba(var(--color-background)) !important;\\n}\\n.appstle_lowercase {\\n text-transform: lowercase;\\n}\\n\\n\\n.appstle_input_wrapper {\\n position: relative;\\n}\\n\\nspan.appstle_sellingPlan_discountText {\\n position: absolute;\\n background: rgba(var(--color-foreground));\\n color: rgba(var(--color-background));\\n border-radius: 3px;\\n padding: 1px 18px;\\n left: 50%;\\n display: block;\\n transform: translate(-50%, -50%);\\n white-space: nowrap;\\n}\\n\\nspan.appstle_sellingPlan_discountText:empty {\\n display: none !important;\\n}\\ndiv.appstle_span_wrapper{\\n\\tdisplay: flex;\\n\\tjustify-content: center;\\n}\\n\u003c\/style\u003e\\n\u003cstyle\u003e\\n.widgetSellingPlanWrapper {\\n grid-template-columns: repeat(3, minmax(0, 1fr)) !important;\\n gap: 0.8rem !important;\\n}\\n\\n.appstle_sub_widget {\\n max-width: 100%!important;\\n} \\n\\n.widgetSellingPlanWrapper label {\\n height: auto !important;\\n border: none !important;\\n padding: 14px 5px !important;\\n display: flex !important;\\n justify-content: center !important;
15317\\n align-items: center !important;\\n flex-direction: column;\\n max-width: 100% !important;\\n width: unset !important;\\nline-height: 20px;\\n}\\n\\n.appstle_how_does_it_work {\\n line-height: 16px !important;\\n margin: 6px 0px;\\n color: rgba(var(--color-background));\\n}\\n@media screen and (max-width: 800px) {\\n .appstle_how_does_it_work {\\n text-align: right;\\n }\\n}\\n\\nspan.appstle_lowercase.appstle_sellingPlan_price.appstle_formattext_block {\\ntext-align: right !important;\\n display: block;\\n}\\n\\n.appstle_span_wrapper {\\n align-items: baseline;\\n}\\n\\nspan.appstle_lowercase.appstle_sellingPlan_price.appstle_discount_block.appstle_formattedPrepaidPerDeliveryPriceText {\\n display: block;\\n text-align: right;\\n}\\n\\n.appstle_input_wrapper {\\n display: flex;\\n height: 100% !important;\\nflex-direction: column;\\n}\\n\\n.appstle_sub_widget input[type=radio]+label:before {\\n content: \\\"\\\";\\n position: absolute;\\n inset: 0;\\n border-radius: 12px;\\n padding: 2px;\\n background: #121212;\\n -webkit-mask: linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);\\n -webkit-mask-composite: xor;\\n mask-composite: exclude;\\n pointer-events: none;\\n z-index: 0;\\n transition: all 0.2s;\\n}\\n\\n.appstle_sub_widget input[type=radio]:checked+label:before {\\n content: \\\"\\\";\\n position: absolute;\\n inset: 0;\\n border-radius: 12px;\\n \/\/ padding: 4px;\\n\/\/ background: linear-gradient(to right,#Fef58f,#7A3900);\\n\/\/background: #E53D29;\\n border: 2px transparent;\\n -webkit-mask: linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);\\n -webkit-mask-composite: xor;\\n mask-composite: exclude;\\n pointer-events: none;\\n z-index: 0;\\n}\\n\\nspan.appstle_sellingPlan_discountText {\\n background: rgba(var(--color-foreground));\\n border-radius: 100px !important;\\n padding: 0px 8px !important;\\n height: 20px;\\n display: flex !important;\\n justify-content: center;\\n align-items: center;\\n letter-spacing: 1px;\\nz-index: 2;\\n}\\nspan.appstle_lowercase.appstle_sellingPlan_price.appstle_onetime_amount_compare {\\ntext-decoration: line-through;\\n}\\n\\n\\nspan.appstle-popular {\\n position: absolute;\\n top: -40px;\\n background: black;\\n color: rgba(var(--color-background));\\n z-index: -3;\\n border-radius: 10px;\\n padding: 0px 10px 29px 10px;\\nleft: 0;\\n}\\n\\n.widgetSellingPlanWrapper label {\\n border-radius: 14px;\\n}\\n\\n.widgetSellingPlanWrapper input:checked+label {\\n overflow: hidden;\\n}\\n\\n\\n.appstle-perday-price {\\ndisplay: none;\\n}\\n\\n .widgetSellingPlanWrapper {\\n grid-template-columns: repeat(1, minmax(0, 1fr)) !important;\\n}\\n\\n.widgetSellingPlanWrapper label {\\n flex-direction: row;\\n justify-content: space-between !important;\\n align-items: flex-start !important;\\nwidth: 100% !important;\\n}\\n\\n.widgetSellingPlanWrapper label {\\n text-align: left;\\n padding: 16px !important;\\nflex-basis: unset;\\n}\\n\\n.appstle_span_wrapper {\\n justify-content: flex-end !important;\\n}\\n\\n.appstle-perday-price {\\n text-align: right;\\n}\\n\\n.widgetSellingPlanWrapper {\\n gap: 15px !important;\\n}\\n\\nspan.appstle-popular {\\n width: calc(100% - 20px);\\n text-align: center;\\n letter-spacing: 2px;\\n top: -30px;\\nleft: 0;\\n}\\n\\nspan.appstle_sellingPlan_discountText { \\nleft: unset !important;\\n right: 15px;\\n transform: translate(0, -50%) !important;\\n}\\n.appstle-cancel-text {\\n text-align: left;\\n}\\n\\n.appstle_input_wrapper label {\\n text-align: left !important;\\n}\\n\\n.widgetSellingPlanWrapper input:checked+label {\\n width: 100% !important;\\n margin: 0 !important;\\n}\\n.appstle_input_wrapper {\\n width: 100% !important;\\nflex-direction: row;\\n}\\n.widgetSellingPlanWrapper input:checked+label+span {\\n background: rgba(var(--color-background)) !important;\\n color:rgba(var(--color-foreground)) !important;\\n border: 2px solid rgba(var(--color-foreground));\\n}\\n.appstle_onetime_block .appstle_span_wrapper {\\n grid-column: 2;\\n}\\n.appstle-frequency-description {\\n text-align: right !important;\\n}\\n\\n\\n.appstle-sm-hide {\\n display: none;\\n}\\n\\n@media screen and (min-width: 800px) {\\n.appstle-lg-show {\\n display: block;\\n}\\n.appstle-lg-hide {\\n display: none;\\n}\\n\\n}\\n\\nspan.appstle_lowercase.appstle_sellingPlan_formattedCompareAtPrice.appstle_price_block {\\n text-decoration: line-through;\\n display: block;\\n margin-right: 3px;\\n color: rgba(var(--color-foreground));\\n}\\n.widgetSellingPlanWrapper input:checked+label .appstle_sellingPlan_formattedCompareAtPrice {\\ncolor:rgba(var(--color-background));\\n} \\n\\n.appstle_span_wrapper \u003e * {\\nflex-shrink: 0\\n}\\n.appstle-selling-plan-detail-wrapper{\\ncolor: rgba(var(--color-foreground));\\n}\\n.widgetSellingPlanWrapper input:checked+label .appstle-selling-plan-detail-wrapper{\\ncolor: rgba(var(--color-background)) !important;\\n}\\n\\n\u003c\/style\u003e\\n\u003c\/div\u003e{% endraw %}\",\"WIDGET_TYPE_7\":\"{% raw %}{% endraw %}\",\"WIDGET_TYPE_8\":\"{% raw %}{% endraw %}\",\"WIDGET_TYPE_2\":\"{% raw %}{% endraw %}\",\"WIDGET_TYPE_3\":\"{% raw %}
15317\u003cdiv id=\\\"appstle-widget-template\\\"\u003e\\n \u003cdiv class=\\\"appstle_sub_widget\\\" id=\\\"appstle_subscription_widget{{widgetId}}\\\"\u003e\\n\u003cdiv class=\\\"appstle_widget_title\\\"\u003e{{{purchaseOptionsText}}}\u003c\/div\u003e\\n \u003cdiv class=\\\"widgetSellingPlanWrapper appstle_subscription_wrapper\\\"\u003e\\n{{#showSubOptionBeforeOneTime}}\\n {{#sellingPlanVariants}}\\n \u003cdiv class=\\\"appstle_input_wrapper appstle_subscription_option\\\"\u003e\\n \u003cinput type=\\\"radio\\\" class=\\\"appstleSellingPlan{{widgetId}}\\\" id=\\\"{{sellingPlanId}}\\\" value=\\\"{{sellingPlanId}}\\\" name=\\\"selling_plan\\\" {{#isChecked}}checked{{\/isChecked}}\u003e\\n {{^prepaidFlag}}\\n \u003clabel for=\\\"{{sellingPlanId}}\\\" class=\\\"appstle_widget_three\\\"\u003e\\n {{{name}}}\\n\u003cdiv class=\\\"appstle_span_wrapper\\\"\u003e\\n \u003cspan class=\\\"appstle_lowercase appstle_sellingPlan_price appstle_price_block\\\"\u003e{{{formattedPrice}}}\u003c\/span\u003e\\n{{#showSecondFormattedDiscountText}}{{^isFixedPrice}}\u003cspan class=\\\"appstle_lowercase appstle_sellingPlan_price appstle_discount_block\\\"\u003e\u0026nbsp;({{{secondFormattedDiscountText}}})\u003c\/span\u003e {{\/isFixedPrice}}{{\/showSecondFormattedDiscountText}}\\n\u003c\/div\u003e\\n \\n \u003c\/label\u003e\\n {{\/prepaidFlag}}\\n {{#prepaidFlag}}\\n \u003clabel for=\\\"{{sellingPlanId}}\\\" class=\\\"appstle_widget_three\\\"\u003e\\n {{{name}}}\\n\u003cdiv class=\\\"appstle_span_wrapper\\\"\u003e\\n \u003cspan class=\\\"appstle_lowercase appstle_sellingPlan_price appstle_price_block\\\"\u003e{{{totalPrice}}}\u003c\/span\u003e\\n {{#showSecondFormattedDiscountText}}{{^isFixedPrice}}\u003cspan class=\\\"appstle_lowercase appstle_sellingPlan_price appstle_discount_block\\\"\u003e\u0026nbsp;({{{secondFormattedDiscountText}}})\u003c\/span\u003e{{\/isFixedPrice}}{{\/showSecondFormattedDiscountText}}\\n {{#formattedPrepaidPerDeliveryPriceText}}\u003cspan class=\\\"appstle_formattedPrepaidPerDeliveryPriceText\\\"\u003e\u0026nbsp;({{{formattedPrepaidPerDeliveryPriceText}}})\u003c\/span\u003e{{\/formattedPrepaidPerDeliveryPriceText}}\\n \u003c\/div\u003e\\n \\n \u003c\/label\u003e\\n {{\/prepaidFlag}}\\n \\n \u003c\/div\u003e\\n {{\/sellingPlanVariants}}\\n{{\/showSubOptionBeforeOneTime}}\\n {{^requires_selling_plan}}\\n \u003cdiv class=\\\"appstle_input_wrapper appstle_onetime\\\"\u003e\\n \u003cinput type=\\\"radio\\\" id=\\\"appstle_selling_plan_label_1{{widgetId}}\\\" name=\\\"selling_plan\\\" value=\\\"{{sellingPlanId}}\\\" class=\\\"appstleSellingPlan{{widgetId}}\\\" {{^subscriptionOptionSelectedDefault}}checked{{\/subscriptionOptionSelectedDefault}}\u003e\\n \u003clabel for=\\\"appstle_selling_plan_label_1{{widgetId}}\\\" class=\\\"appstle_widget_three\\\"\u003e\\n {{oneTimePuchaseText}}\\n \u003cspan class=\\\"appstle_lowercase appstle_sellingPlan_price appstle_onetime_amount\\\"\u003e\\n{{#showOneTimeComparePrice}}\\n\u003cspan class=\\\"appstle_lowercase appstle_sellingPlan_price appstle_onetime_amount_compare\\\"\u003e\\n {{{oneTimePuchaseComparePriceAmount}}}\\n\u003c\/span\u003e\\n{{\/showOneTimeComparePrice}}\\n{{{oneTimePuchaseAmount}}}\u003c\/span\u003e\\n \u003c\/label\u003e\\n \\n \u003c\/div\u003e\\n {{\/requires_selling_plan}}\\n{{^showSubOptionBeforeOneTime}}\\n {{#sellingPlanVariants}}\\n \u003cdiv class=\\\"appstle_input_wrapper appstle_subscription_option\\\"\u003e\\n \u003cinput type=\\\"radio\\\" class=\\\"appstleSellingPlan{{widgetId}}\\\" id=\\\"{{sellingPlanId}}\\\" value=\\\"{{sellingPlanId}}\\\" name=\\\"selling_plan\\\" {{#isChecked}}checked{{\/isChecked}}\u003e\\n {{^prepaidFlag}}\\n \u003clabel for=\\\"{{sellingPlanId}}\\\" class=\\\"appstle_widget_three\\\"\u003e\\n {{{name}}}\\n\u003cdiv class=\\\"appstle_span_wrapper\\\"\u003e\\n \u003cspan class=\\\"appstle_lowercase appstle_sellingPlan_price appstle_price_block\\\"\u003e{{{formattedPrice}}}\u003c\/span\u003e\\n{{#showSecondFormattedDiscountText}}{{^isFixedPrice}}\u003cspan class=\\\"appstle_lowercase appstle_sellingPlan_price appstle_discount_block\\\"\u003e\u0026nbsp;({{{secondFormattedDiscountText}}})\u003c\/span\u003e {{\/isFixedPrice}}{{\/showSecondFormattedDiscountText}}\\n\u003c\/div\u003e\\n \\n \u003c\/label\u003e\\n {{\/prepaidFlag}}\\n {{#prepaidFlag}}\\n \u003clabel for=\\\"{{sellingPlanId}}\\\" class=\\\"appstle_widget_three\\\"\u003e\\n {{{name}}}\\n\u003cdiv class=\\\"appstle_span_wrapper\\\"\u003e\\n \u003cspan class=\\\"appstle_lowercase appstle_sellingPlan_price appstle_price_block\\\"\u003e{{{totalPrice}}}\u003c\/span\u003e\\n {{#showSecondFormattedDiscountText}}{{^isFixedPrice}}\u003cspan class=\\\"appstle_lowercase appstle_sellingPlan_price appstle_discount_block\\\"\u003e\u0026nbsp;({{{secondFormattedDiscountText}}})\u003c\/span\u003e{{\/isFixedPrice}}{{\/showSecondFormattedDiscountText}}\\n {{#formattedPrepaidPerDeliveryPriceText}}\u003cspan class=\\\"appstle_formattedPrepaidPerDeliveryPriceText\\\"\u003e\u0026nbsp;({{{formattedPrepaidPerDeliveryPriceText}}})\u003c\/span\u003e{{\/formattedPrepaidPerDeliveryPriceText}}\\n \u003c\/div\u003e\\n \\n \u003c\/label\u003e\\n {{\/prepaidFlag}}\\n \\n \u003c\/div\u003e\\n {{\/sellingPlanVariants}}\\n{{\/showSubOptionBeforeOneTime}}\\n \u003c\/div\u003e\\n{{#showStaticTooltip}}\\n\u003cdiv class=\\\"appstle_tooltip_wrapper_static\\\"\u003e{{{toolTipDescription}}}\u003c\/div\u003e\\n{{\/showStaticTooltip}}\\n{{#showTooltip}}\\n \u003cdiv data-appstle-icon=\\\"\\\" class=\\\"appstle_tooltip_wrapper\\\"\u003e\\n \u003csvg width=\\\"90\\\" height=\\\"90\\\" viewBox=\\\"0 0 90 90\\\" xmlns=\\\"http:\/\/www.w3.org\/2000\/svg\\\" class=\\\"tooltip_subscription_svg\\\"\u003e\\n \u003cpath\\n d=\\\"M45 0C20.1827 0 0 20.1827 0 45C0 69.8173 20.1827 90 45 90C69.8173 90 90 69.8174 90 45C90.0056 44.6025 89.9322 44.2078 89.7839 43.8389C89.6357 43.47 89.4156 43.1342 89.1365 42.8511C88.8573 42.568 88.5247 42.3432 88.158 42.1897C87.7912 42.0363 87.3976 41.9573 87 41.9573C86.6024 41.9573 86.2088 42.0363 85.842 42.1897C85.4753 42.3432 85.1427 42.568 84.8
15317635 42.8511C84.5844 43.1342 84.3643 43.47 84.2161 43.8389C84.0678 44.2078 83.9944 44.6025 84 45C84 66.5748 66.5747 84 45 84C23.4253 84 6 66.5747 6 45C6 23.4254 23.4253 6 45 6C56.1538 6 66.3012 10.5882 73.4375 18H65.4062C65.0087 17.9944 64.614 18.0678 64.2451 18.2161C63.8762 18.3643 63.5405 18.5844 63.2573 18.8635C62.9742 19.1427 62.7494 19.4753 62.596 19.842C62.4425 20.2088 62.3635 20.6024 62.3635 21C62.3635 21.3976 62.4425 21.7912 62.596 22.158C62.7494 22.5247 62.9742 22.8573 63.2573 23.1365C63.5405 23.4156 63.8762 23.6357 64.2451 23.7839C64.614 23.9322 65.0087 24.0056 65.4062 24H79.8125C80.6081 23.9999 81.3711 23.6838 81.9337 23.1212C82.4963 22.5586 82.8124 21.7956 82.8125 21V6.59375C82.821 6.18925 82.7476 5.78722 82.5966 5.41183C82.4457 5.03644 82.2205 4.69545 81.9344 4.40936C81.6483 4.12327 81.3073 3.898 80.9319 3.7471C80.5565 3.5962 80.1545 3.52277 79.75 3.53125C79.356 3.53941 78.9675 3.62511 78.6067 3.78344C78.2458 3.94177 77.9197 4.16963 77.6469 4.45402C77.3741 4.73841 77.16 5.07375 77.0168 5.44089C76.8737 5.80803 76.8042 6.19977 76.8125 6.59375V12.875C68.6156 4.86282 57.3081 0 45 0ZM43.75 20.75C43.356 20.7582 42.9675 20.8439 42.6067 21.0022C42.2458 21.1605 41.9197 21.3884 41.6469 21.6728C41.3741 21.9572 41.16 22.2925 41.0168 22.6596C40.8737 23.0268 40.8042 23.4185 40.8125 23.8125V47.375C40.8116 47.7693 40.8883 48.16 41.0385 48.5246C41.1886 48.8892 41.4092 49.2207 41.6875 49.5L54.0938 61.9375C54.6573 62.5011 55.4217 62.8177 56.2188 62.8177C57.0158 62.8177 57.7802 62.5011 58.3438 61.9375C58.9073 61.3739 59.224 60.6095 59.224 59.8125C59.224 59.0155 58.9073 58.2511 58.3438 57.6875L46.8125 46.1875V23.8125C46.821 23.408 46.7476 23.006 46.5966 22.6306C46.4457 22.2552 46.2205 21.9142 45.9344 21.6281C45.6483 21.342 45.3073 21.1168 44.9319 20.9658C44.5565 20.8149 44.1545 20.7415 43.75 20.75Z\\\"\\n \u003e\u003c\/path\u003e\\n \u003c\/svg\u003e\\n \u003cspan class=\\\"appstle_tooltip_title\\\"\u003e{{{tooltipTitle}}}\u003c\/span\u003e\\n \u003c\/div\u003e\\n\u003cdiv class=\\\"appstle_tooltip appstle_tooltip_hover\\\"\u003e\\n \u003cdiv class=\\\"appstle_tooltip_content\\\"\u003e\\n {{{toolTipDescription}}}\\n \u003c\/div\u003e\\n {{#showAppstleLink}}\\n \u003cdiv class=\\\"appstle_tooltip_appstle\\\"\u003e\\n \u003ca href=\\\"https:\/\/appstle.com\\\" class=\\\"appstle_link\\\" target=\\\"_blank\\\"\u003e\\n POWERED BY APPSTLE\\n \u003c\/a\u003e\\n \u003c\/div\u003e\\n{{\/showAppstleLink}}\\n \u003c\/div\u003e\\n{{\/showTooltip}}\\n\u003cstyle\u003e.widgetSellingPlanWrapper {\\n display: grid;\\n grid-template-columns: repeat(2, minmax(0, 1fr));\\n gap: 0.5rem;\\n grid-auto-rows: 1fr;\\n margin-bottom: 6px;\\n}\\n.widgetSellingPlanWrapper input {\\n display: none;\\n}\\n.widgetSellingPlanWrapper label {\\n border-radius: 8px;\\n border: 1px solid rgba(var(--color-foreground));\\n padding: 0.5rem;\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n display: block;\\n height: 100%;\\n width: 100%;\\n text-align: center;\\ncursor: pointer;\\ncolor: rgba(var(--color-foreground));\\n}\\n.widgetSellingPlanWrapper input:checked+label {\\n background-color: rgba(var(--color-foreground));\\n color: rgba(var(--color-background));\\n border: 1px solid rgba(var(--color-background)) !important;\\n}\\n.appstle_lowercase {\\n text-transform: lowercase;\\n}\\n.appstle_input_wrapper {\\n position: relative;\\n}\\nspan.appstle_sellingPlan_discountText {\\n position: absolute;\\n background-color: color: rgba(var(--color-foreground));\\n color: rgba(var(--color-background));\\n border-radius: 3px;\\n padding: 1px 18px;\\n left: 50%;\\n display: block;\\n transform: translate(-50%, -50%);\\n white-space: nowrap;\\n}\\nspan.appstle_sellingPlan_discountText:empty {\\n display: none !important;\\n}\\nspan.appstle_lowercase.appstle_sellingPlan_price {\\n color: rgba(var(--color-foreground));\\n}\\nspan.appstle_lowercase.appstle_sellingPlan_price.appstle_onetime_amount_compare {\\n color: rgba(var(--color-foreground));\\n text-decoration: line-through;\\n padding: 0 3px;\\n}\\n#appstle_subscription_widget0 .appstle_tooltip_wrapper {\\n margin-top: 8px;\\n margin-bottom: 16px;\\n}\\n.appstle_subscription_wrapper {\\n border: none !important;\\n}\\nlabel.appstle_widget_three {\\n display: flex;\\n flex-direction: column;\\n}\\n.widgetSellingPlanWrapper input:checked+label span {\\n color: rgba(var(--color-background)) !important;\\n}\\n.appstle_sub_widget .appstle_subscription_wrapper{\\n border-radius:unset !important;\\n}\\nspan.appstle_second_price_block:empty {\\n display: none !important;\\n}\\n\u003c\/style\u003e\\n\u003c\/div\u003e{% endraw %}\",\"WIDGET_TYPE_4\":\"{% raw %}
15317\u003cdiv id=\\\"appstle-widget-template\\\"\u003e\\n \u003cdiv class=\\\"appstle_sub_widget\\\" id=\\\"appstle_subscription_widget{{widgetId}}\\\"\u003e\\n\u003cdiv class=\\\"appstle_widget_title\\\"\u003e{{{purchaseOptionsText}}}\u003c\/div\u003e\\n \u003cdiv class=\\\"widgetSellingPlanWrapper\\\"\u003e\\n{{^requires_selling_plan}}\\n{{^showSubOptionBeforeOneTime}}\\n \u003cdiv class=\\\"appstle_input_wrapper\\\"\u003e\\n \u003cinput type=\\\"radio\\\" id=\\\"appstle_selling_plan_label_1{{widgetId}}\\\" name=\\\"selling_plan\\\" value=\\\"\\\" class=\\\"appstleSellingPlan{{widgetId}}\\\" {{^subscriptionOptionSelectedDefault}}checked{{\/subscriptionOptionSelectedDefault}}\u003e\\n \u003clabel for=\\\"appstle_selling_plan_label_1{{widgetId}}\\\"\u003e\\n {{oneTimePuchaseText}}\\n{{#showOneTimeComparePrice}}\\n\u003cspan class=\\\"appstle_lowercase appstle_sellingPlan_price appstle_onetime_amount_compare\\\"\u003e\\n {{{oneTimePuchaseComparePriceAmount}}}\\n\u003c\/span\u003e\\n{{\/showOneTimeComparePrice}}\\n \u003cspan class=\\\"appstle_lowercase appstle_sellingPlan_price appstle_onetime_amount\\\"\u003e{{{oneTimePuchaseAmount}}}\/{{{oneTimeFrequencyText}}}\u003c\/span\u003e\\n \u003c\/label\u003e\\n \u003c\/div\u003e\\n{{\/showSubOptionBeforeOneTime}}\\n{{\/requires_selling_plan}}\\n {{#sellingPlanVariants}}\\n \u003cdiv class=\\\"appstle_input_wrapper\\\"\u003e\\n \u003cspan class=\\\"appstle_sellingPlan_discountText\\\"\u003e{{{formattedDiscountText}}}\u003c\/span\u003e\\n \u003cinput type=\\\"radio\\\" class=\\\"appstleSellingPlan{{widgetId}}\\\" id=\\\"{{sellingPlanId}}\\\" value=\\\"{{sellingPlanId}}\\\" name=\\\"selling_plan\\\" {{#isChecked}}checked{{\/isChecked}}\u003e\\n{{^prepaidFlag}}\\n \u003clabel for=\\\"{{sellingPlanId}}\\\"\u003e\\n {{{name}}}\\n\u003cdiv class=\\\"appstle_span_wrapper\\\"\u003e\\n \u003cspan class=\\\"appstle_lowercase appstle_sellingPlan_price appstle_price_block\\\"\u003e{{{formattedPrice}}}\u003cspan\u003e\\n\u003cspan class=\\\"appstle_lowercase appstle_sellingPlan_price appstle_formattext_block\\\"\u003e\/{{{sellingPlanFrequencyText}}}{{#isFrequencySubsequent}}{{\/isFrequencySubsequent}}\u003c\/span\u003e\\n\u003c\/div\u003e\\n \u003c\/label\u003e\\n{{\/prepaidFlag}}\\n{{#prepaidFlag}}\\n\u003clabel for=\\\"{{sellingPlanId}}\\\"\u003e\\n {{{name}}}\\n\u003cdiv class=\\\"appstle_span_wrapper\\\"\u003e\\n \u003cspan class=\\\"appstle_lowercase appstle_sellingPlan_price appstle_price_block\\\"\u003e{{{totalPrice}}}\u003c\/span\u003e\\n\u003cspan class=\\\"appstle_lowercase appstle_sellingPlan_price appstle_discount_block appstle_formattedPrepaidPerDeliveryPriceText\\\"\u003e\u0026nbsp;{{{formattedPrepaidPerDeliveryPriceText}}}\u003c\/span\u003e\\n\u003c\/div\u003e\\n\u003c\/label\u003e\\n{{\/prepaidFlag}}\\n \u003c\/div\u003e\\n {{\/sellingPlanVariants}}\\n{{^requires_selling_plan}}\\n{{#showSubOptionBeforeOneTime}}\\n \u003cdiv class=\\\"appstle_input_wrapper\\\"\u003e\\n \u003cinput type=\\\"radio\\\" id=\\\"appstle_selling_plan_label_1{{widgetId}}\\\" name=\\\"selling_plan\\\" value=\\\"\\\" class=\\\"appstleSellingPlan{{widgetId}}\\\" {{^subscriptionOptionSelectedDefault}}checked{{\/subscriptionOptionSelectedDefault}}\u003e\\n \u003clabel for=\\\"appstle_selling_plan_label_1{{widgetId}}\\\"\u003e\\n {{oneTimePuchaseText}}\\n{{#showOneTimeComparePrice}}\\n\u003cspan class=\\\"appstle_lowercase appstle_sellingPlan_price appstle_onetime_amount_compare\\\"\u003e\\n {{{oneTimePuchaseComparePriceAmount}}}\\n\u003c\/span\u003e\\n{{\/showOneTimeComparePrice}}\\n \u003cspan class=\\\"appstle_lowercase appstle_sellingPlan_price appstle_onetime_amount\\\"\u003e{{{oneTimePuchaseAmount}}}\/{{{oneTimeFrequencyText}}}\u003c\/span\u003e\\n \u003c\/label\u003e\\n \u003c\/div\u003e\\n{{\/showSubOptionBeforeOneTime}}\\n{{\/requires_selling_plan}}\\n \u003c\/div\u003e\\n{{#showStaticTooltip}}\\n\u003cdiv class=\\\"appstle_tooltip_wrapper_static\\\"\u003e {{{toolTipDescription}}}\u003c\/div\u003e\\n{{\/showStaticTooltip}}\\n{{#showTooltip}}\\n \u003cdiv data-appstle-icon=\\\"\\\" class=\\\"appstle_tooltip_wrapper\\\"\u003e\\n \u003csvg width=\\\"90\\\" height=\\\"90\\\" viewBox=\\\"0 0 90 90\\\" xmlns=\\\"http:\/\/www.w3.org\/2000\/svg\\\" class=\\\"tooltip_subscription_svg\\\"\u003e\\n \u003cpath\\n d=\\\"M45 0C20.1827 0 0 20.1827 0 45C0 69.8173 20.1827 90 45 90C69.8173 90 90 69.8174 90 45C90.0056 44.6025 89.9322 44.2078 89.7839 43.8389C89.6357 43.47 89.4156 43.1342 89.1365 42.8511C88.8573 42.568 88.5247 42.3432 88.158 42.1897C87.7912 42.0363 87.3976 41.9573 87 41.9573C86.6024 41.9573 86.2088 42.0363 85.842 42.1897C85.4753 42.3432 85.1427 42.568 84.8
15317635 42.8511C84.5844 43.1342 84.3643 43.47 84.2161 43.8389C84.0678 44.2078 83.9944 44.6025 84 45C84 66.5748 66.5747 84 45 84C23.4253 84 6 66.5747 6 45C6 23.4254 23.4253 6 45 6C56.1538 6 66.3012 10.5882 73.4375 18H65.4062C65.0087 17.9944 64.614 18.0678 64.2451 18.2161C63.8762 18.3643 63.5405 18.5844 63.2573 18.8635C62.9742 19.1427 62.7494 19.4753 62.596 19.842C62.4425 20.2088 62.3635 20.6024 62.3635 21C62.3635 21.3976 62.4425 21.7912 62.596 22.158C62.7494 22.5247 62.9742 22.8573 63.2573 23.1365C63.5405 23.4156 63.8762 23.6357 64.2451 23.7839C64.614 23.9322 65.0087 24.0056 65.4062 24H79.8125C80.6081 23.9999 81.3711 23.6838 81.9337 23.1212C82.4963 22.5586 82.8124 21.7956 82.8125 21V6.59375C82.821 6.18925 82.7476 5.78722 82.5966 5.41183C82.4457 5.03644 82.2205 4.69545 81.9344 4.40936C81.6483 4.12327 81.3073 3.898 80.9319 3.7471C80.5565 3.5962 80.1545 3.52277 79.75 3.53125C79.356 3.53941 78.9675 3.62511 78.6067 3.78344C78.2458 3.94177 77.9197 4.16963 77.6469 4.45402C77.3741 4.73841 77.16 5.07375 77.0168 5.44089C76.8737 5.80803 76.8042 6.19977 76.8125 6.59375V12.875C68.6156 4.86282 57.3081 0 45 0ZM43.75 20.75C43.356 20.7582 42.9675 20.8439 42.6067 21.0022C42.2458 21.1605 41.9197 21.3884 41.6469 21.6728C41.3741 21.9572 41.16 22.2925 41.0168 22.6596C40.8737 23.0268 40.8042 23.4185 40.8125 23.8125V47.375C40.8116 47.7693 40.8883 48.16 41.0385 48.5246C41.1886 48.8892 41.4092 49.2207 41.6875 49.5L54.0938 61.9375C54.6573 62.5011 55.4217 62.8177 56.2188 62.8177C57.0158 62.8177 57.7802 62.5011 58.3438 61.9375C58.9073 61.3739 59.224 60.6095 59.224 59.8125C59.224 59.0155 58.9073 58.2511 58.3438 57.6875L46.8125 46.1875V23.8125C46.821 23.408 46.7476 23.006 46.5966 22.6306C46.4457 22.2552 46.2205 21.9142 45.9344 21.6281C45.6483 21.342 45.3073 21.1168 44.9319 20.9658C44.5565 20.8149 44.1545 20.7415 43.75 20.75Z\\\"\\n \u003e\u003c\/path\u003e\\n \u003c\/svg\u003e\\n \u003cspan class=\\\"appstle_tooltip_title\\\"\u003e{{{tooltipTitle}}}\u003c\/span\u003e\\n \u003c\/div\u003e\\n \u003cdiv class=\\\"appstle_tooltip\\\"\u003e\\n \u003cdiv class=\\\"appstle_tooltip_content\\\"\u003e\\n {{{toolTipDescription}}}\\n \u003c\/div\u003e\\n{{#showAppstleLink}}\\n \u003cdiv class=\\\"appstle_tooltip_appstle\\\"\u003e\\n \u003ca href=\\\"https:\/\/appstle.com\\\" class=\\\"appstle_link\\\" target=\\\"_blank\\\"\u003e\\n POWERED BY APPSTLE\\n \u003c\/a\u003e\\n \u003c\/div\u003e\\n{{\/showAppstleLink}}\\n \u003c\/div\u003e\\n{{\/showTooltip}}\\n\u003cstyle\u003e\\n.widgetSellingPlanWrapper {\\n display: grid;\\n grid-template-columns: repeat(2, minmax(0, 1fr));\\n gap: 16px;\\n grid-auto-rows: 1fr;\\n margin-bottom: 6px;\\nmargin-top: 10px\\n}\\n.widgetSellingPlanWrapper input {\\n display: none;\\n}\\n.widgetSellingPlanWrapper label {\\n border-radius: 10px;\\n border: 1px solid rgba(var(--color-foreground, 0, 0, 0));\\n padding: 0.5rem;\\n display: flex !important;\\n flex-direction: column;\\n justify-content: center;\\n align-items: center;\\n display: block;\\n height: 100%;\\n width: 100%;\\n text-align: center;\\ncursor: pointer;\\n}\\n.widgetSellingPlanWrapper input:checked+label {\\n background-color: rgba(var(--color-foreground, 0, 0, 0));\\n}\\n.appstle_lowercase {\\n text-transform: lowercase;\\n}\\n.appstle_input_wrapper {\\n position: relative;\\n}\\nspan.appstle_sellingPlan_discountText {\\n position: absolute;\\n font-size: 1.2rem;\\n background-color: rgba(var(--color-foreground, 0, 0, 0));\\n color: rgba(var(--color-background, 255, 255, 255));\\n border-radius: 3px;\\n border: 2px solid rgba(var(--color-background, 255, 255, 255));\\n padding: 1px 18px;\\n left: 50%;\\n display: block;\\n transform: translate(-50%, -50%);\\n white-space: nowrap;\\n}\\nspan.appstle_sellingPlan_discountText:empty {\\n display: none !important;\\n}\\nspan.appstle_lowercase.appstle_sellingPlan_price.appstle_onetime_amount_compare {\\ntext-decoration: line-through;\\n}\\n.appstle_tooltip_wrapper {\\n margin-bottom:10px;\\n}\\n.widgetSellingPlanWrapper input:checked+label {\\n background-color: rgba(var(--color-foreground, 0, 0, 0));\\n color: rgba(var(--color-background, 255, 255, 255));\\n border: 2px solid rgba(var(--color-background, 255, 255, 255)) !important;\\n}\\n\u003c\/style\u003e\\n\u003c\/div\u003e{% endraw %}\",\"WIDGET_TYPE_5\":\"{% raw %}
15317\u003cdiv id=\\\"appstle-widget-template\\\"\u003e\\n \u003cdiv class=\\\"appstle_sub_widget\\\" id=\\\"appstle_subscription_widget{{widgetId}}\\\"\u003e\\n\u003cdiv class=\\\"appstle_widget_title\\\"\u003e{{{purchaseOptionsText}}}\u003c\/div\u003e\\n \u003cdiv class=\\\"widgetSellingPlanWrapper\\\"\u003e\\n{{^showSubOptionBeforeOneTime}}\\n{{^requires_selling_plan}}\\n \u003cdiv class=\\\"appstle_input_wrapper\\\"\u003e\\n \u003cinput type=\\\"radio\\\" id=\\\"appstle_selling_plan_label_1{{widgetId}}\\\" name=\\\"selling_plan\\\" value=\\\"\\\" class=\\\"appstleSellingPlan{{widgetId}}\\\" {{^subscriptionOptionSelectedDefault}}checked{{\/subscriptionOptionSelectedDefault}}\/\u003e\\n \u003clabel for=\\\"appstle_selling_plan_label_1{{widgetId}}\\\"\u003e\\n {{{oneTimePuchaseText}}}\\n \u003c\/label\u003e\\n \\n \u003c\/div\u003e\\n{{\/requires_selling_plan}}\\n{{\/showSubOptionBeforeOneTime}}\\n {{#sellingPlanVariants}}\\n \u003cdiv class=\\\"appstle_input_wrapper\\\"\u003e\\n \u003cinput type=\\\"radio\\\" class=\\\"appstleSellingPlan{{widgetId}}\\\" id=\\\"{{sellingPlanId}}\\\" value=\\\"{{sellingPlanId}}\\\" name=\\\"selling_plan\\\" {{#isChecked}}checked{{\/isChecked}} \/\u003e\\n \u003clabel for=\\\"{{sellingPlanId}}\\\"\u003e\\n {{{name}}}\\n \u003c\/label\u003e\\n \\n \u003c\/div\u003e\\n {{\/sellingPlanVariants}}\\n{{#showSubOptionBeforeOneTime}}\\n{{^requires_selling_plan}}\\n \u003cdiv class=\\\"appstle_input_wrapper\\\"\u003e\\n \u003cinput type=\\\"radio\\\" id=\\\"appstle_selling_plan_label_1{{widgetId}}\\\" name=\\\"selling_plan\\\" value=\\\"\\\" class=\\\"appstleSellingPlan{{widgetId}}\\\" {{^subscriptionOptionSelectedDefault}}checked{{\/subscriptionOptionSelectedDefault}}\/\u003e\\n \u003clabel for=\\\"appstle_selling_plan_label_1{{widgetId}}\\\"\u003e\\n {{{oneTimePuchaseText}}}\\n \u003c\/label\u003e\\n \\n \u003c\/div\u003e\\n{{\/requires_selling_plan}}\\n{{\/showSubOptionBeforeOneTime}}\\n \u003c\/div\u003e\\n{{#showStaticTooltip}}\\n\u003cdiv class=\\\"appstle_tooltip_wrapper_static\\\"\u003e{{{toolTipDescription}}}\u003c\/div\u003e\\n{{\/showStaticTooltip}}\\n{{#showTooltip}}\\n \u003cdiv data-appstle-icon=\\\"\\\" class=\\\"appstle_tooltip_wrapper\\\"\u003e\\n \u003csvg width=\\\"90\\\" height=\\\"90\\\" viewBox=\\\"0 0 90 90\\\" xmlns=\\\"http:\/\/www.w3.org\/2000\/svg\\\" class=\\\"tooltip_subscription_svg\\\"\u003e\\n \u003cpath\\n d=\\\"M45 0C20.1827 0 0 20.1827 0 45C0 69.8173 20.1827 90 45 90C69.8173 90 90 69.8174 90 45C90.0056 44.6025 89.9322 44.2078 89.7839 43.8389C89.6357 43.47 89.4156 43.1342 89.1365 42.8511C88.8573 42.568 88.5247 42.3432 88.158 42.1897C87.7912 42.0363 87.3976 41.9573 87 41.9573C86.6024 41.9573 86.2088 42.0363 85.842 42.1897C85.4753 42.3432 85.1427 42.568 84.8635 42.8511C84.5844 43.1342 84.3643 43.47 84.2161 43.8389C84.0678 44.2078 83.9944 44.6025 84 45C84 66.5748 66.5747 84 45 84C23.4253 84 6 66.5747 6 45C6 23.4254 23.4253 6 45 6C56.1538 6 66.3012 10.5882 73.4375 18H65.4062C65.0087 17.9944 64.614 18.0678 64.2451 18.2161C63.8762 18.3643 63.5405 18.5844 63.2573 18.8635C62.9742 19.1427 62.7494 19.4753 62.596 19.842C62.4425 20.2088 62.3635 20.6024 62.3635 21C62.3635 21.3976 62.4425 21.7912 62.596 22.158C62.7494 22.5247 62.9742 22.8573 63.2573 23.1365C63.5405 23.4156 63.8762 23.6357 64.2451 23.7839C64.614 23.9322 65.0087 24.0056 65.4062 24H79.8125C80.6081 23.9999 81.3711 23.6838 81.9337 23.1212C82.4963 22.5586 82.8124 21.7956 82.8125 21V6.59375C82.821 6.18925 82.7476 5.78722 82.5966 5.41183C82.4457 5.03644 82.2205 4.69545 81.9344 4.40936C81.6483 4.12327 81.3073 3.898 80.9319 3.7471C80.5565 3.5962 80.1545 3.52277 79.75 3.53125C79.356 3.53941 78.9675 3.62511 78.6067 3.78344C78.2458 3.94177 77.9197 4.16963 77.6469 4.45402C77.3741 4.73841 77.16 5.07375 77.0168 5.44089C76.8737 5.80803 76.8042 6.19977 76.8125 6.59375V12.875C68.6156 4.86282 57.3081 0 45 0ZM43.75 20.75C43.356 20.7582 42.9675 20.8439 42.6067 21.0022C42.2458 21.1605 41.9197 21.3884 41.6469 21.6728C41.3741 21.9572 41.16 22.2925 41.0168 22.6596C40.8737 23.0268 40.8042 23.4185 40.8125 23.8125V47.375C40.8116 47.7693 40.8883 48.16 41.0385 48.5246C41.1886 48.8892 41.4092 49.2207 41.6875 49.5L54.0938 61.9375C54.6573 62.5011 55.4217 62.8177 56.2188 62.8177C57.0158 62.8177 57.7802 62.5011 58.3438 61.9375C58.9073 61.3739 59.224 60.6095 59.224 59.8125C59.224 59.0155 58.9073 58.2511 58.3438 57.6875L46.8125 46.1875V23.8125C46.821 23.408 46.7476 23.006 46.5966 22.6306C46.4457 22.2552 46.2205 21.9142 45.9344 21.6281C45.6483 21.342 45.3073 21.1168 44.9319 20.9658C44.5565 20.8149 44.1545 20.7415 43.75 20.75Z\\\"\\n \u003e\u003c\/path\u003e\\n \u003c\/svg\u003e\\n \u003cspan class=\\\"appstle_tooltip_title\\\"\u003e{{{tooltipTitle}}}\u003c\/span\u003e\\n \u003c\/div\u003e\\n\u003cdiv class=\\\"appstle_tooltip appstle_tooltip_hover\\\"\u003e\\n \u003cdiv class=\\\"appstle_tooltip_content\\\"\u003e\\n {{{toolTipDescription}}}\\n \u003c\/div\u003e\\n {{#showAppstleLink}}\\n \u003cdiv class=\\\"appstle_tooltip_appstle\\\"\u003e\\n \u003ca href=\\\"https:\/\/appstle.com\\\" class=\\\"appstle_link\\\" target=\\\"_blank\\\"\u003e\\n POWERED BY APPSTLE\\n \u003c\/a\u003e\\n \u003c\/div\u003e\\n {{\/showAppstleLink}}\\n \u003c\/div\u003e\\n{{\/showTooltip}}\\n \u003cstyle\u003e\\n .widgetSellingPlanWrapper {\\n display: grid;\\n grid-template-columns: repeat(2, minmax(0, 1fr));\\n gap: 8px;\\n grid-auto-rows: 1fr;\\n margin-bottom: 6px;\\n margin-top: 10px;\\n }\\n \\n .widgetSellingPlanWrapper input {\\n display: none;\\n }\\n \\n .widgetSellingPlanWrapper label {\\n border-radius: 4px;\\n border: 1px solid rgba(var(--color-foreground));\\n padding: 0.5rem;\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n display: block;\\n height: 100%;\\n width: 100%;\\n text-align: center;\\n \\t color: rgba(var(--color-foreground));\\ncursor: pointer;\\n }\\n \\n .widgetSellingPlanWrapper input:checked+label {\\n background-color: rgba(var(--color-foreground));\\n \\t color: rgba(var(--color-background));\\n }\\n .appstle_lowercase {\\n text-transform: lowercase;\\n }\\n \\n \\n .appstle_input_wrapper {\\n position: relative;\\n }\\n \\n span.appstle_sellingPlan_discountText {\\n position: absolute;\\n background-color: rgba(var(--color-foreground));\\n color: rgba(var(--color-background));\\n border-radius: 3px;\\n padding: 1px 18px;\\n left: 50%;\\n display: block;\\n transform: translate(-50%, -50%);\\n white-space: nowrap;\\n }\\n span.appstle_sellingPlan_discountText:empty {\\n display: none !important;\\n }\\n \u003c\/style\u003e\\n \u003c\/div\u003e{% endraw %}\"}", 15318 15319 15320 "bundle": {}, 15321 15322 15323 "labels": appstleStringSetting("{\\\"appstle.subscription.wg.cartHiddenAttributesSelectorV2\\\":\\\"\\\",\\\"appstle.subscription.wg.daysFrequencyTextV2\\\":\\\"Days\\\",\\\"appstle.subscription.wg.subscribeAndSaveSuccessV2\\\":\\\"Subscription Selected\\\",\\\"appstle.subscription.wg.addToShipmentSuccessTextV2\\\":\\\"Success\\\",\\\"appstle.subscription.wg.monthFrequencyTextV2\\\":\\\"Month\\\",\\\"appstle.subscription.wg.addToShipmentButtonTextV2\\\":\\\"Add to Shipment\\\",\\\"appstle.subscription.wg.onetimeDescriptionTextV2\\\":\\\"\\\",\\\"appstle.subscription.wg.oneTimePurchaseTextV2\\\":\\\"One Time Purchase\\\",\\\"appstle.subscription.wg.loyaltyPerkDescriptionTextV2\\\":\\\"{{#isDiscountTypeFreeProduct}}\u003cdiv style='display: flex;'\u003e\u003cdiv style='height: 60px; width: 60px; flex-shrink: 0; margin-right: 10px;'\u003e\u003cimg style='width: 100%' src={{{featured_image}}}\u003e\u003c\\\/img\u003e\u003c\\\/div\u003e\u003cdiv\u003eAfter {{{billingCycleBlock}}} orders,\u003cspan style='color: #ffc000;font-weight: 700;';\u003e get a FREE {{freeProductName}} \u003c\\\/span\u003e\u003c\\\/div\u003e\u003cdiv\u003e{{\\\/isDiscountTypeFreeProduct}}{{#isDiscountTypePercentage}}After \u003cspan class='appstle-loyalty-billing-cycle'\u003e\u003cspan class='appstle-loyalty-billing-cycle-count'\u003e{{{billingCycleBlock}}}\u003c\\\/span\u003e order\u003c\\\/span\u003e, \u003cspan class='appstle-loyalty-discount'\u003eget \u003cspan style='color: #ffc000;font-weight: 700;';\u003e{{{discount}}}% OFF your entire order\u003c\\\/span\u003e\u003c\\\/span\u003e.{{\\\/isDiscountTypePercentage}}{{#isDiscountTypeShipping}}After \u003cspan class='appstle-loyalty-billing-cycle'\u003e\u003cspan class='appstle-loyalty-billing-cycle-count'\u003e{{{billingCycleBlock}}}\u003c\\\/span\u003e order\u003c\\\/span\u003e, \u003cspan class='appstle-loyalty-discount'\u003eget \u003cspan style='color: #ffc000;font-weight: 700;';\u003eshipping at {{{formatDiscountedPrice}}}\u003c\\\/span\u003e\u003c\\\/span\u003e.{{\\\/isDiscountTypeShipping}}{{#isDiscountTypeFixed}}After \u003cspan class='appstle-loyalty-billing-cycle'\u003e\u003cspan class='appstle-loyalty-billing-cycle-count'\u003e{{{billingCycleBlock}}}\u003c\\\/span\u003e order\u003c\\\/span\u003e, \u003cspan class='appstle-loyalty-discount'\u003eget \u003cspan style='color: #ffc000;font-weight: 700;';\u003e{{{formatDiscountedPrice}}} OFF your entire order\u003c\\\/span\u003e\u003c\\\/span\u003e.{{\\\/isDiscountTypeFixed}}{{#isDiscountTypeFixedPrice}}After \u003cspan class='appstle-loyalty-billing-cycle'\u003e\u003cspan class='appstle-loyalty-billing-cycle-count'\u003e{{{billingCycleBlock}}}\u003c\\\/span\u003e order\u003c\\\/span\u003e, \u003cspan class='appstle-loyalty-discount'\u003eget this product at \u003cspan style='color: #ffc000;font-weight: 700;';\u003e{{{formatDiscountedPrice}}}\u003c\\\/span\u003e\u003c\\\/span\u003e.{{\\\/isDiscountTypeFixedPrice}}\\\",\\\"appstle.subscription.wg.bundleDiscountTextV2\\\":\\\"bundle discount extra: {{bundleDiscount}} off\\\",\\\"appstle.subscription.wg.atcButtonTextSelectorV2\\\":\\\"\\\",\\\"appstle.subscription.wg.oneTimeFrequencyTextV2\\\":\\\"One Time\\\",\\\"appstle.subscription.wg.allowFulfilmentCountViaPropertiesV2\\\":\\\"false\\\",\\\"appstle.subscription.wg.valdiateFormSelectorV2\\\":\\\"\\\",\\\"appstle.subscription.wg.monthsFrequencyTextV2\\\":\\\"Months\\\",\\\"appstle.subscription.wg.prepaidSaveBadgeTextV2\\\":\\\"SAVE {{selectedDiscountPercentage}}\\\",\\\"appstle.subscription.wg.manageSubscriptionButtonTextV2\\\":\\\"Manage Subscription\\\",\\\"appstle.subscription.wg.yearFrequencyTextV2\\\":\\\"Year\\\",\\\"appstle.subscription.wg.widgetPriceChangeListenerSelectorV2\\\":\\\"\\\",\\\"appstle.subscription.wg.atcButtonTextV2\\\":\\\"\\\",\\\"appstle.subscription.wg.noSubscriptionLabelTextV2\\\":\\\"No Subscription\\\",\\\"appstle.subscription.wg.cancelAnytimeLabelTextV2\\\":\\\"Cancel Anytime\\\",\\\"appstle.subscription.wg.addToShipmentErrorTextV2\\\":\\\"Error\\\",\\\"appstle.subscription.wg.weeksFrequencyTextV2\\\":\\\"Weeks\\\",\\\"appstle.subscription.wg.weeklyLabelTextV2\\\":\\\"Weekly\\\",\\\"appstle.subscription.wg.displayAddToExistingSubscriptionButtonForNotLoggedInV2\\\":\\\"false\\\",\\\"appstle.subscription.wg.addToShipmentProcessingV2\\\":\\\"Processing...\\\",\\\"appstle.subscription.wg.showWidgetStaticV2\\\":\\\"false\\\",\\\"appstle.subscription.wg.deliveryEveryFrequencyTextV2\\\":\\\"Delivery Frequency\\\",\\\"appstle.subscription.wg.subscribeAndSaveInitalV2\\\":\\\"Subscribe and save\\\",\\\"appstle.subscription.wg.allowRefreshOnCartPageV2\\\":\\\"false\\\",\\\"appstle.subscription.wg.prepaidLabelTextV2\\\":\\\"Prepaid\\\",\\\"appstle.subscription.wg.monthlyLabelTextV2\\\":\\\"Monthly\\\",\\\"appstle.subscription.wg.displayAddToExistingSubscriptionButtonToSubscribersOnlyV2\\\":\\\"false\\\",\\\"appstle.subscription.wg.yearsFrequencyTextV2\\\":\\\"Years\\\",\\\"appstle.subscription.wg.addToShipmentTooltipTextV2\\\":\\\"Please avoid double delivery charges! Login to add this product to an upcoming delivery.\\\",\\\"appstle.subscription.wg.weekFrequencyTextV2\\\":\\\"Week\\\",\\\"appstle.subscription.wg.unsubscribeFrequencyTextV2\\\":\\\"One-time Purchase\\\",\\\"appstle.subscription.wg.widgetVariantChangeListenerSelectorV2\\\":\\\"\\\",\\\"appstle.subscription.wg.atcButtonTextSelectorObserverV2\\\":\\\"\\\",\\\"appstle.subscription.wg.dayFrequencyTextV2\\\":\\\"day\\\",\\\"appstle.subscription.wg.showPrepidPerDeliveryProductPriceV2\\\":\\\"false\\\",\\\"appstle.subscription.wg.offFrequencyTextV2\\\":\\\"Off\\\",\\\"appstle.subscription.wg.prepayLabelTextV2\\\":\\\"Prepay\\\",\\\"appstle.subscription.wg.productPageUnitPriceSelectorV2\\\":\\\"\\\",\\\"appstle.subscription.wg.frequencyCombinedWidgetTextV2\\\":\\\"Frequency\\\",\\\"appstle.subscription.wg.showNewLoyaltyUI\\\":\\\"false\\\",\\\"appstle.subscription.wg.sellingPlanTitleTextNonPrepaid\\\":\\\"{{sellingPlanName}}\\\",\\\"appstle.subscription.wg.selectDeliverOptionV2\\\":\\\"Select Delivery Option\\\",\\\"appstle.subscription.wg.yearlyLabelTextV2\\\":\\\"Yearly\\\"}"), 15324 15325 "css": { 15326 "appstle_subscription_widget": { 15327 "margin-top": appstleStringSetting("") , 15328 "margin-bottom": appstleStringSetting(""), 15329 }, 15330 15331 "appstle_subscription_wrapper": { 15332 "border-width": appstleStringSetting(""), 15333 "border-color": appstleStringSetting(""), 15334 }, 15335 15336 "appstle_circle": { 15337 "border-color": appstleStringSetting(""), 15338 }, 15339 15340 "appstle_dot": { 15341 "background-color": appstleStringSetting(""), 15342 }, 15343 15344 "appstle_select": { 15345 "padding-top": appstleStringSetting(""), 15346 "padding-bottom": appstleStringSetting(""), 15347 "padding-left": appstleStringSetting(""), 15348 "padding-right": appstleStringSetting(""), 15349 "border-width": appstleStringSetting(""), 15350 "border-style": appstleStringSetting(""), 15351 "border-color": appstleStringSetting(""), 15352 "border-radius": appstleStringSetting(""), 15353 }, 15354 15355 "tooltip_subscription_svg": { 15356 "fill": appstleStringSetting(""), 15357 }, 15358 15359 "appstle_tooltip": { 15360 "color": appstleStringSetting(""), 15361 "background-color": appstleStringSetting(""), 15362 }, 15363 15364 "appstle_tooltip_border_top_color": { 15365 "border-top-color": appstleStringSetting(""), 15366 }, 15367 15368 "appstle_subscription_final_price": { 15369 "color": appstleStringSetting(""), 15370 }, 15371 "appstle_widget_text_color": { 15372 "color": appstleStringSetting(""), 15373 }, 15374 "appstle_selected_background": { 15375 "background": "transparent", 15376 }, 15377 "elementCSS": appstleStringSetting("[]"), 15378 "customCSS": appstleStringSetting(""), 15379 "customerPortalCss": appstleStringSetting(""), 15380 "externalStyleTag": appstleStringSetting(""), 15381 "themeCss": appstleStringSetting(""), 15382 } 15383 }; 15384 15385 15386 window.AppstleSubscription = window.AppstleSubscription || JSON.parse(JSON.stringify(RS)); 15387 15388 sessionStorage['appstleSubscriptionConfig'] = JSON.stringify(RS.Config); 15389 15390 15391 try { 15392 15393 window.appstle_build_a_box_labels = {"perDeliveryLabelTextV2":"\\\/delivery","variantNotAvailable":"Not Available","saveDiscountText":"{{discount}}","bundleSummaryTextV2":"Your bundle is empty. Please add products to your bundl
15393es to see bundle summary here.","freeProductLabelTextV2":"Free","bundleDescriptionTextV2":"Our bundle of all bundles, The Ultimate Superfood Bundle delivers exactly what it promises - a complete superfood solution. With 7 superfood blends each created to empower every aspect of your health and wellbeing - from immunity and gut health to energy \u0026 better focus.","productDetails":"Product Details","failedToAddMsgText":"Your cart can't have more than {{maxProduct}} products","cart":"Cart","reviewBundleTextV2":"Review Bundle","addButtonText":"Add","minimumQuantityToCheckoutV2":"Minimum {{quantity}} quantity to checkout","buildBoxErrormsgV2":"Build a Box token is Invalid, Please reach out to support.","continueShopping":"Continue Shopping","failedToAddTitleText":"Failed to add","spendAmountGetDiscount":"Spend {{amount}} get {{percent}}% discount","maxiumQuantityToCheckoutV2":"Maxium {{quantity}} quantity to checkout","contentsOnModalTextV2":"Contents","nextStepButtonTextV2":"Next Step","choosePlanLifeStyleTextV2":"Choose a plan to match your lifestyle","selectMinimumProductButtonText":"Please select {{minProduct}} minimum product","subtotal":"Subtotal","buyQuantityGetDiscount":"Buy {{quantity}} get {{percent}}% discount","loyaltyTablePercentageTextV2":"After \u003cspan class='appstle-loyalty-billing-cycle'\u003e\u003cspan class=''\u003e{{billingCycle}}\u003c\\\/span\u003e order\u003c\\\/span\u003e, \u003cspan class='appstle-loyalty-discount'\u003eget \u003cspan class='appstle-loyalty-discount-amount'\u003e{{discount}}% off\u003c\\\/span\u003e\u003c\\\/span\u003e.","loyaltyTablePriceTextV2":"After \u003cspan class='appstle-loyalty-billing-cycle'\u003e\u003cspan class=''\u003e{{billingCycle}}\u003c\\\/span\u003e order\u003c\\\/span\u003e, \u003cspan class='appstle-loyalty-discount'\u003eget at \u003cspan class='appstle-loyalty-discount-amount'\u003e{{price}}\u003c\\\/span\u003e\u003c\\\/span\u003e.","myDeliveryText":"My {{selectedSellingPlanDisplayName}} delivery","removeItem":"Remove","productsToProceedText":"Please select products to proceed","previousStepButtonTextV2":"Previous step","loadMoreTextV2":"Load more","selectedFrequencyLabelText":"Selected Frequency","addToCartButtonTextV2":"Add To Cart","basePriceFormatFieldV2":"{{unitPrice}}\\\/{{quantityUnit}}","title":"Build-A-Box","productPriceFormatField":"{{price}}","reviewOrdeDescriptionTextV2":"Check your items and select your required frequency plan","quantityLabelV2":"Quantity","minimumOrderAmountLabelTextV2":"Minimum order amount {{minOrderAmount}}.","subscriptionNotAvailableButtonV2":"Subscription not available","shoppingCart":"Shopping Cart","checkoutMessage":"Shipping and taxes calculated at checkout.","discountPopupCheckoutMessageV2":"Discount","selectedButtonTextV2":"Selected","congratsMessageText":null,"okBtnText":"Ok","tieredDiscount":"Tiered Discount","choosePlanLifeStyleDescriptionTextV2":"Cutoff each week to amend your meals is midnight on Thursday's. (Delivery Schedule is as follows: Gold Coast - Mondays | Brisbane \u0026 Sunshine Coast - Wednesdays)","orderNoteLabelTextV2":"Order Note","minimumToCheckoutV2":"Minimum {{quantity}} to checkout","loyaltyTableFixedTextV2":"After \u003cspan class='appstle-loyalty-billing-cycle'\u003e\u003cspan class=''\u003e{{billingCycle}}\u003c\\\/span\u003e order\u003c\\\/span\u003e, \u003cspan class='appstle-loyalty-discount'\u003eget \u003cspan class='appstle-loyalty-discount-amount'\u003e{{price}} off\u003c\\\/span\u003e\u003c\\\/span\u003e.","editQuantity":"Edit Quantity","chooseProductsTextV2":"Choose Products","loyaltyTableFreeProductTextV2":"After \u003cspan class='appstle-loyalty-billing-cycle'\u003e\u003cspan class=''\u003e{{billingCycle}}\u003c\\\/span\u003e order\u003c\\\/span\u003e, \u003cspan class='appstle-loyalty-discount'\u003eget \u003cspan class='appstle-loyalty-discount-amount'\u003eFREE PRODUCT ({{productName}})\u003c\\\/span\u003e\u003c\\\/span\u003e.","loyaltyTableShippingTextV2":"After \u003cspan class='appstle-loyalty-billing-cycle'\u003e\u003cspan class=''\u003e{{billingCycle}}\u003c\\\/span\u003e order\u003c\\\/span\u003e, \u003cspan class='appstle-loyalty-discount'\u003eget \u003cspan class='appstle-loyalty-discount-amount'\u003eshipping at {{price}}\u003c\\\/span\u003e\u003c\\\/span\u003e.","spentText":null,"quantityLabel":null,"addButtonV2":"Add","loyaltyTableFreeTrailTextV2":"Get \u003cspan class='appstle-loyalty-free-trial-discount'\u003e{{discount}} \u003cspan class='appstle-loyalty-free-trial-discount-count' style='text-transform: lowercase;'\u003e{{discountType}} \u003c\\\/span\u003e\u003c\\\/span\u003e \u003cspan class='appstle-loyalty-free-trial-text'\u003efree trial.\u003c\\\/span\u003e","bundleCheckoutTextV2":"Checkout","reviewOrderTextV2":"Review Order","goBackButtonText":"Go Back","selectPlanTextV2":"Select Plan","viewProduct":"View Product","oneTimePurchaseTextV2":"One Time Purchase","bundleOnModalTextV2":"Bundle","proceedToCheckoutButtonText":"Proceed to checkout","pleaseWaitLabelTextV2":"Please wait...","typeToSearchPlaceholderTextV2":"Type to search","selectedProgressLabelTextV2":"Selected","outOfStockTextV2":"Out of stock"}; 15394 15395 } catch (e) { 15396 console.error("Error parsing build a box labels:", e); 15397 } 15398 15399 15400 var _RSConfig = _RSConfig || {}; 15401 15402 _RSConfig.shop = "rocky-mountain-oils.myshopify.com"; 15403 15404 15405 15406 15407 15408 15409 _RSConfig.shopMoneyFormat = "${{amount}}"; 15410 _RSConfig.shopMoneyFormatWithCurrencyFormat = "${{amount}} USD"; 15411 15412 15413 15414 15415 } 15416 15417 15418 15419 _RSConfig.assetRev = "8ab4de6cd61912f7266d1a8cc6dcac54"; 15420 15421 15422</script>
15422 15423 15424<style id="appstle-payment-button-override"> 15425 .shopify-payment-button {display: none;} 15426</style>
15427<script> 15428 let appstleCount = 0 15429 function isAppstleJSInitiated() { 15430 appstleCount++; 15431 if (window?.["RSConfig"] || appstleCount > 20) { 15432 let appstleStyleElement = document.querySelector('#appstle-payment-button-override'); 15433 if (appstleStyleElement) { 15434 appstleStyleElement.remove(); 15435 } 15436 } else { 15437 setTimeout(isAppstleJSInitiated, 500) 15438 } 15439 } 15440 isAppstleJSInitiated(); 15441</script>
15441 15442
15443<script> 15444 var appstleExternalStyle = document.createElement('style'); 15445 appstleExternalStyle.textContent = appstleStringSetting(""); 15446 document.body.appendChild(appstleExternalStyle); 15447</script>
vendor: 1 bytes, line 15447
15447
15448<script> 15449 function pollAppstleInit() { 15450 if (window?.appstleInit) { 15451 window?.appstleInit() 15452 } else { 15453 setTimeout(pollAppstleInit, 30); 15454 } 15455 } 15456</script>
15456 15457 15458 15459 15460 15461 15462 15463 15464 15465 15466 15467 15468 15469 15470 15471 15472 15473 15474
15474<script src="https://subscription-admin.appstle.com/assets/js/appstle-subscription.min.js?shop=rocky-mountain-oils.myshopify.com&v=1784182483761" defer ></script>
15474 15475 15476 15477 15478 15479 15480 15481 15482 15483</div>
15483<script src="https://cdn.shopify.com/storefront/standard-actions.js" type="module" data-source-attribution="shopify.standard_actions"></script>
15483 15484</body> 15485</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.