1<!doctype html> 2<html lang="en"> 3<head > 4 <meta charset="utf-8"/> 5<meta name="title" content="Skin Trends Skincare and Cosmetics"/> 6<meta name="description" content="Expert Service in Skincare"/> 7<meta name="keywords" content="Skincare Products, Skin Treatments, Cosmetics, Organic skincare, Natural Skincare, Anti Aging, Acne, Hyperpigmentation, Rosacea, Dry Skin, Oily Skin, Repair, Revitalize"/> 8<meta name="robots" content="INDEX,FOLLOW"/> 9<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.0, user-scalable=0"/> 10<meta name="" content="text/html; charset=utf-8"/> 11<title>Skin Trends Skincare and Cosmetics</title> 12<link rel="stylesheet" type="text/css" media="all" href="https://www.skintrends.com/static/version1789630527/frontend/Hyva/skintrends/en_US/css/styles.css" /> 13<link rel="stylesheet" type="text/css" media="screen and (min-width: 320px)" href="https://www.skintrends.com/static/version1789630527/frontend/Hyva/skintrends/en_US/FishPig_WordPress/css/wordpress.css" /> 14<link rel="preload" as="font" crossorigin="anonymous" href="https://www.skintrends.com/static/version1789630527/frontend/Hyva/skintrends/en_US/fonts/opensans/light/opensans-300.woff2" /> 15<link rel="preload" as="font" crossorigin="anonymous" href="https://www.skintrends.com/static/version1789630527/frontend/Hyva/skintrends/en_US/fonts/opensans/regular/opensans-400.woff2" /> 16<link rel="preload" as="font" crossorigin="anonymous" href="https://www.skintrends.com/static/version1789630527/frontend/Hyva/skintrends/en_US/fonts/opensans/semibold/opensans-600.woff2" /> 17<link rel="preload" as="font" crossorigin="anonymous" href="https://www.skintrends.com/static/version1789630527/frontend/Hyva/skintrends/en_US/fonts/opensans/bold/opensans-700.woff2" /> 18<link rel="canonical" href="https://www.skintrends.com/blog/" /> 19<link rel="icon" type="image/x-icon" href="https://www.skintrends.com/media/favicon/stores/1/favicon_1.ico" /> 20<link rel="shortcut icon" type="image/x-icon" href="https://www.skintrends.com/media/favicon/stores/1/favicon_1.ico" /> 21<meta name="google-site-verification" content="VVSi3RmEFTdM9eoXNM35aa2yxFpo4d6sAVlNGnzS6Xo" /> 22<meta name="msvalidate.01" content="CD29BFD2778D421D8552A9C2048D700C" /> 23<meta name="alexaVerifyID" content="J_Dq6g38mz8M8Nue0GKKH9Sdw2E"/> 24<meta name="abstract" content="Contact Us! 813-280-1141 | [email protected] | Tampa Florida Skincare Product Store and Day Spa, skin care products, skin care treatments, skin care for women, skin care for men, skin care anti aging, skin care repair"> 25<meta name="author" content="Skin Trends" /> 26<meta name="category" content="day spa, skin care products, skin care treatments, skin care for women, skin care for men, skin care anti aging, skincare acne, skin care repair"> 27<meta name="coverage" content="Worldwide"> 28<meta name="classification" content="Business"/> 29<meta name="Copyright" content="Copyright (c) Skin Trends" /> 30<meta name="designer" content="Skin Trends"> 31<meta name="distribution" content="Global"/> 32<meta name="geo.region" content="US-FL" /> 33<meta name="geo.placename" content="Tampa" /> 34<meta name="geo.region" content="US-FL" /> 35<meta name="geo.position" content="28.0396786;-82.539368,90" /> 36<meta name="contact" content="[email protected]>"> 37<meta name="identifier-URL" content="https://www.skintrends.com/"> 38<meta http-equiv="Content-Language" content="en"> 39<meta name="language" content="english" /> 40<meta name="owner" content="Skin Trends | Beatrice Botbol"> 41<meta name="rating" content="General"/> 42<meta name="reply-to" content="[email protected]"> 43<meta name="resource-type" content="website"/> 44<meta name="subject" content= "Contact Us! 813-280-1141 | [email protected] | Tampa Florida Skincare And Cosmetics Day Spa, skin care products, skin care treatments, skin care for women, skin care for men, skin care anti aging, skincare acne, skin care repair" /> 45<meta name="summary" content="Contact Us! 813-280-1141 | [email protected] | Tampa Florida Skincare And Cosmetics day spa, skin care products, skin care treatments, skin care for women, skin care for men, skin care anti aging, skin care repair"> 46<meta name="topic" content="Contact Us Today! Contact Us! 813-280-1141 | [email protected] | Tampa Florida Skincare And Cosmetics Day Spa, skin care products, skin care treatments, skin care for women, skin care for men, skin care anti aging, skincare acne, skin care repair">
47<meta name="url" content="https://www.skintrends.com/"> 48<meta property="og:title" content="Skin Trends | Skin Care Repair Products & Cosmetics Tampa Florida"/> 49<meta property="og:type" content="Website"/> 50<meta property="og:description" content="Authorized Store offers discounts, rewards, free full size gifts w/purchase, free samples & free expert help. 51"/> 52<meta property="og:image" content="https://www.skintrends.com/media/logo/websites/1/logo.png"/> 53<meta property="og:url" content="https://www.skintrends.com/"/> 54<meta property="og:site_name" content="Skin Trends"/> 55<meta property="fb:page_id" content="166725586778685" /> 56<meta property="fb:admins" content="Beatrice Botbol"/> 57<meta property="og:email" content="[email protected]"/> 58<meta property="og:phone_number" content="+1-813-280-1141 "/> 59<meta property="og:fax_number" content="+1-813-280-1141"/> 60<meta property="og:latitude" content="28.0396786"/> 61<meta property="og:longitude" content="-82.539368,90"/> 62<meta property="og:street-address" content="15310 Amberly Dr. Suite 250"/> 63<meta property="og:locality" content="Tampa"/> 64<meta property="og:region" content="Florida"/> 65<meta property="og:postal-code" content="33647"/> 66<meta property="og:country-name" content="USA"/> 67<meta name="twitter:card" content="summary"> 68<meta name="twitter:url" content="https://www.skintrends.com/"> 69<meta name="twitter:title" content="Skin Trends | Skin Care Products & Cosmetics"> 70<meta name="twitter:description" content="Authorized Store offers discounts, rewards, free full size gifts w/purchase, free samples & free expert help."> 71<meta name="twitter:image:src" content="https://www.skintrends.com/media/logo/websites/1/logo.png"> 72<meta name="twitter:site" content="@skintrendsspa> 73<meta name="twitter:creator" content="@skintrendsspa"> 74<meta name="twitter:domain" content="https://www.skintrends.com/"> 75<link rel="author" href="https://plus.google.com/+Skintrends/posts"/> 76 77<!-- Google tag (gtag.js) --> 78
79<script type="text/javascript" src="https://www.skintrends.com/wp/fishpig/js/wp-includes/js/jquery/jquery-v9623fd4cc635caeae6836b59af63001e.min.js?ver=3.7.1" id="jquery-core-js"></script>
vendor: 1 bytes, line 79
79
80<script type="text/javascript" src="https://www.skintrends.com/wp/fishpig/js/wp-includes/js/jquery/jquery-migrate-v0e02eba21433fc48342f0770067076a8.min.js?ver=3.4.1" id="jquery-migrate-js"></script>
vendor: 1 bytes, line 80
80
81<script>/* Force jQuery to load with noGlobal=true */(function(n){window.module={exports:{}};var t=setInterval(function(){if(typeof requirejs!=='undefined'){clearInterval(t);requirejs(['jquery'],function($){window.__jQuery_magento=$;});}},n);})(20);</script>
vendor: 64 bytes, lines 81-82
81 82<script async src="https://www.googletagmanager.com/gtag/js?id=
82AW-1003136023
vendor: 13 bytes, line 82
82"></script>
83<script> 84
vendor: 138 bytes, lines 84-88
84window.dataLayer = window.dataLayer || []; 85 function gtag(){dataLayer.push(arguments);} 86 gtag('js', new Date()); 87 88 gtag('config', '
88AW-1003136023
vendor: 5 bytes, line 88
88');
89</script>
89 90<!--checkcheck--> 91<!--uk9fqmMivPFMuTTgvThOShbRfIlxzFhO--> 92<!--check-->
93<script>(function(w,d,t,r,u){var f,n,i;w[u]=w[u]||[],f=function(){var o={ti:"4046324"};o.q=w[u],w[u]=new UET(o),w[u].push("pageLoad")},n=d.createElement(t),n.src=r,n.async=1,n.onload=n.onreadystatechange=function(){var s=this.readyState;s&&s!=="loaded"&&s!=="complete"||(f(),n.onload=n.onreadystatechange=null)},i=d.getElementsByTagName(t)[0],i.parentNode.insertBefore(n,i)})(window,document,"script","//bat.bing.com/bat.js","uetq");</script>
93 94
95<script type='text/javascript'> 96window.__lo_site_id = 264982; 97 98 (function() { 99 var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true; 100 wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js'; 101 var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s); 102 })(); 103 </script>
103 104 105<style> 106 107@media (min-width: 768px) { 108 .standard-slider { 109 height: 364px; 110 overflow: hidden; 111 } 112} 113 114@media (min-width: 992px) { 115 .standard-slider { 116 height: 490px; 117 } 118} 119 120@media (min-width: 1200px) { 121 .standard-slider { 122 height: 506px; 123 } 124} 125 126@media (max-width: 767px) { 127 .standard-slider { 128 height: 262px; 129 overflow: hidden; 130 } 131} 132 133@media (max-width: 540px) { 134 .standard-slider { 135 height: 208px; 136 } 137} 138 139@media (max-width: 400px) { 140 .standard-slider { 141 height: 145px; 142 } 143} 144 145</style> 146 147 148 149
149<script> 150 function initComponentMobileCheck() { 151 return { 152 isMobile: true, 153 init() { 154 const matchMedia = window.matchMedia('(max-width: 1023px)'); 155 156 // set the initial value 157 this.isMobile = matchMedia.matches; 158 159 // trigger update value on changes 160 if(typeof matchMedia.onchange !== 'object') { 161 // fallback for iOS 12/13, where addEventListener does not accept an event type parameter 162 matchMedia.addListener((event) => this.isMobile = event.matches); 163 } else { 164 matchMedia.addEventListener( 165 "change", 166 (event) => this.isMobile = event.matches 167 ) 168 } 169 } 170 } 171 } 172</script>
172 173
173<script> (function (){ 174 window.partytown = { 175 debug: 1, 176 lib: '/static/version1789630527/frontend/Hyva/skintrends/en_US/Hyva_SkintrendsTheme/partytown/', 177 forward: [], 178 loadScriptsOnMainThread: [], 179 }; 180 })(); 181 /* Partytown 0.9.1 - MIT builder.io */ 182 const t={preserveBehavior:!1},e=e=>{if("string"==typeof e)return[e,t];const[n,r=t]=e;return[n,{...t,...r}]},n=Object.freeze((t=>{const e=new Set;let n=[];do{Object.getOwnPropertyNames(n).forEach((t=>{"function"==typeof n[t]&&e.add(t)}))}while((n=Object.getPrototypeOf(n))!==Object.prototype);return Array.from(e)})());!function(t,r,o,i,a,s,c,d,l,p,u=t,f){function h(){f||(f=1,"/"==(c=(s.lib||"/~partytown/")+(s.debug?"debug/":""))[0]&&(l=r.querySelectorAll('script[type="text/partytown"]'),i!=t?i.dispatchEvent(new CustomEvent("pt1",{detail:t})):(d=setTimeout(v,1e4),r.addEventListener("pt0",w),a?y(1):o.serviceWorker?o.serviceWorker.register(c+(s.swPath||"partytown-sw.js"),{scope:c}).then((function(t){t.active?y():t.installing&&t.installing.addEventListener("statechange",(function(t){"activated"==t.target.state&&y()}))}),console.error):v())))}function y(t){p=r.createElement(t?"script":"iframe"),t||(p.style.display="block",p.style.width="0",p.style.height="0",p.style.border="0",p.style.visibility="hidden",p.setAttribute("aria-hidden",!0)),p.src=c+"partytown-"+(t?"atomics.js?v=0.9.1":"sandbox-sw.html?"+Date.now()),r.querySelector(s.sandboxParent||"body").appendChild(p)}function v(n,o){for(w(),i==t&&(s.forward||[]).map((function(n){const[r]=e(n);delete t[r.split(".")[0]]})),n=0;n<l.length;n++)(o=r.createElement("script")).innerHTML=l[n].innerHTML,o.nonce=s.nonce,r.head.appendChild(o);p&&p.parentNode.removeChild(p)}function w(){clearTimeout(d)}s=t.partytown||{},i==t&&(s.forward||[]).map((function(r){const[o,{preserveBehavior:i}]=e(r);u=t,o.split(".").map((function(e,r,o){var a;u=u[o[r]]=r+1<o.length?u[o[r]]||(a=o[r+1],n.includes(a)?[]:{}):(()=>{let e=null;if(i){const{methodOrProperty:n,thisObject:r}=((t,e)=>{let n=t;for(let t=0;t<e.length-1;t+=1)n=n[e[t]];return{thisObject:n,methodOrProperty:e.length>0?n[e[e.length-1]]:void 0}})(t,o);"function"==typeof n&&(e=(...t)=>n.apply(r,...t))}return function(){let n;return e&&(n=e(arguments)),(t._ptf=t._ptf||[]).push(o,arguments),n}})()}))})),"complete"==r.readyState?h():(t.addEventListener("DOMContentLoaded",h),t.addEventListener("load",h))}(window,document,navigator,top,window.crossOriginIsolated);</script>
182 183<!-- Google Tag Manager by MagePal -->
184<script type="text/javascript"> 185 window.dataLayer = window.dataLayer || []; 186 187 188 function initMagepalGtmDatalayer_4f71f1c5e6503faecb6d9e35a59f2399() { 189 'use strict'; 190 191 let lastPushedCart = {}; 192 let lastPushedCustomer = {}; 193 194 function objectKeyExist(object) 195 { 196 const items = Array.isArray(object) ? object : Object.values(object); 197 return items.reduce((acc, v) => (acc || v.customer || v.cart), false); 198 // return _.some(object, function (o) { 199 // return !_.isEmpty(_.pick(o, ['customer', 'cart'])); 200 // }) 201 } 202 203 const isObject = x => x === Object(x); 204 const has = (x, p) => isObject(x) && x.hasOwnProperty(p); 205 const isEqual = (x, y) => JSON.stringify(x) === JSON.stringify(y); 206 207 //Update datalayer 208 function updateDataLayer(_gtmDataLayer, _dataObject, _forceUpdate) 209 { 210 let customer = {isLoggedIn : false}, 211 cart = {hasItems: false}; 212 213 if (_gtmDataLayer !== undefined && (!objectKeyExist(_gtmDataLayer) || _forceUpdate)) { 214 if (isObject(_dataObject) && has(_dataObject, 'customer')) { 215 customer = _dataObject.customer; 216 } 217 218 if (isObject(_dataObject) && has(_dataObject, 'cart')) { 219 cart = _dataObject.cart; 220 } 221 222 if (!isEqual(lastPushedCart, cart) || !isEqual(lastPushedCustomer, customer)) { 223 window.dispatchEvent(new CustomEvent('mpCustomerSession', {detail: [customer, cart, _gtmDataLayer]})); 224 //$('body').trigger('mpCustomerSession', [customer, cart, _gtmDataLayer]); 225 _gtmDataLayer.push({'event': 'mpCustomerSession', 'customer': customer, 'cart': cart}); 226 227 lastPushedCustomer = customer; 228 lastPushedCart = cart; 229 } 230 } 231 } 232 233 function isTrackingAllowed(config) 234 { 235 let allowServices = false, 236 allowedCookies, 237 allowedWebsites; 238 239 if (!config.isGdprEnabled || (!config.isGdprEnabled && !config.addJsInHeader)) { 240 allowServices = true; 241 } else if (config.isCookieRestrictionModeEnabled && config.gdprOption === 1) { 242 allowedCookies = hyva.getCookie(config.cookieName); 243 244 if (allowedCookies !== null) { 245 allowedWebsites = JSON.parse(allowedCookies); 246 247 if (allowedWebsites[config.currentWebsite] === 1) { 248 allowServices = true; 249 } 250 } 251 } else if (config.gdprOption === 2) { 252 allowServices = hyva.getCookie(config.cookieName) !== null; 253 } else if (config.gdprOption === 3) { 254 allowServices = hyva.getCookie(config.cookieName) === null; 255 } 256 257 return allowServices; 258 } 259 260 //load gtm 261 function initTracking(dataLayerName, accountId, containerCode) 262 { 263 window.dispatchEvent(new CustomEvent('gtm:beforeInitialize')); 264 265 (function (w, d, s, l, i) { 266 w[l] = w[l] || []; 267 w[l].push({ 268 'gtm.start': 269 new Date().getTime(), event: 'gtm.js' 270 }); 271 var f = d.getElementsByTagName(s)[0], 272 j = d.createElement(s), dl = l != dataLayerName ? '&l=' + l : ''; 273 j.type = "text/partytown"; 274 j.src = '//www.googletagmanager.com/gtm.js?id=' + i + dl + containerCode; 275 f.parentNode.insertBefore(j, f); 276 window.dispatchEvent(new CustomEvent('ptupdate')); 277 })(window, document, 'script', dataLayerName, accountId); 278 window.dispatchEvent(new CustomEvent('gtm:afterInitialize')); 279 } 280 281 function pushData(dataLayerName, dataLayer) 282 { 283 //if (_.isArray(dataLayer)) { 284 if (Array.isArray(dataLayer)) { 285 //_.each(dataLayer, function (data) { 286 dataLayer.forEach(function (data) { 287 window[dataLayerName].push(data); 288 }); 289 } 290 } 291 292 const config = { 293 dataLayer: "dataLayer", 294 gdprOption: 0, 295 isGdprEnabled: 0, 296 isCookieRestrictionModeEnabled: 0, 297 }; 298 299 config.currentWebsite = 1; 300 config.cookieName = "user_allowed_save_cookie"; 301 config.accountId = "GTM-X2GF"; 302 config.data = [{"ecommerce":{"currencyCode":"USD"},"pageType":"wordpress_postType_view","list":"other"}]; 303 config.addJsInHeader = 0; 304 config.containerCode = ""; 305 306 window[config.dataLayer] = window[config.dataLayer] || []; 307 308 if (has(config, 'accountId') && isTrackingAllowed(config)) { 309 pushData(config.dataLayer, config.data); 310 initTracking(config.dataLayer, config.accountId, config.containerCode); 311 } 312 313 const gtmDataLayer = window[config.dataLayer]; 314 315 window.addEventListener("private-content-loaded", event => { 316 const dataObject = event.detail.data['magepal-gtm-jsdatalayer'] || {}; 317 updateDataLayer(gtmDataLayer, dataObject, true) 318 }); 319
320 // dataObject.subscribe(function (_dataObject) { 321 // updateDataLayer(gtmDataLayer, _dataObject, true); 322 // }, this); 323 324 // if (!_.contains(customerData.getExpiredKeys(), 'magepal-gtm-jsdatalayer')) { 325 // updateDataLayer(gtmDataLayer, dataObject(), false); 326 // } 327 328 } 329 window.addEventListener('DOMContentLoaded', initMagepalGtmDatalayer_4f71f1c5e6503faecb6d9e35a59f2399); 330 331</script>
331 332<!-- End Google Tag Manager by MagePal --> 333 334 335 336 337<!--Custom Style--> 338 339
339<script> 340 window.addEventListener("load", (event) => { 341 <!-- Google tag (gtag.js) --> 342 const scriptLibrary = document.createElement('script'); 343 scriptLibrary.setAttribute( 344 'src', 345 'https://www.googletagmanager.com/gtag/js?id=G-F7PD8ZFL5E', 346 ); 347 document.head.appendChild(scriptLibrary); 348 }, false); 349 </script>
349 350
350<script defer> 351
vendor: 150 bytes, lines 351-354
351window.dataLayer = window.dataLayer || []; 352 function gtag(){dataLayer.push(arguments);} 353 gtag('js', new Date()); 354 gtag('config','
354G-F7PD8ZFL5E
vendor: 8 bytes, lines 354-355
354'); 355
355</script>
355 356 <div class="bss-script"></div> 357
357<script> 358 window.fetch = new Proxy(window.fetch, { 359 apply(fetch, that, args) { 360 const result = fetch.apply(that, args); 361 result.then((response) => { 362 if (response) { 363 setTimeout(function () { 364 const browserStorage = hyva.getBrowserStorage().getItem('mage-cache-storage'); 365 if (browserStorage) { 366 var data = JSON.parse(browserStorage); 367 if (data && data.cart !== undefined && data.cart.bss_ga4 !== undefined && data.cart.bss_ga4 !== "") { 368 var dataGa4 = JSON.parse(data.cart.bss_ga4); 369 const scriptElement = document.createElement("script"); 370 scriptElement.classList.add("bss-add-to-cart"); 371 scriptElement.innerHTML =`gtag(${JSON.stringify(dataGa4[0])},${JSON.stringify(dataGa4[1])}, ${JSON.stringify(dataGa4[2])})`; 372 let scriptAddToCart = document.querySelector('.bss-add-to-cart'); 373 if (scriptAddToCart) { 374 scriptAddToCart.remove(); 375 } 376 document.querySelector('.bss-script').append(scriptElement); 377 data.cart.bss_ga4 = ""; 378 hyva.getBrowserStorage().setItem('mage-cache-storage',JSON.stringify(data)); 379 } 380 } 381 }, 500); 382 } 383 }); 384 385 return result; 386 } 387 }); 388 389 document.addEventListener("toggle-cart", (event) => { 390 const browserStorage = hyva.getBrowserStorage().getItem('mage-cache-storage'); 391 if (browserStorage) { 392 var data = JSON.parse(browserStorage); 393 if (data.cart.items) { 394 let items = []; 395 let dataItems = data.cart.items; 396 for (const key in dataItems) { 397 let item_variant = ''; 398 if (dataItems[key].product_type === "configurable" && dataItems[key].options != null) { 399 let option = dataItems[key].options; 400 401 for (const key in option) { 402 let variantOption = option.label + ': ' + option.value; 403 item_variant = item_variant + variantOption + ','; 404 } 405 406 item_variant = item_variant.substring(0, item_variant.length - 1); 407 } 408 let dataItem = { 409 item_id: dataItems[key].product_sku, 410 item_name: dataItems[key].product_name, 411 index: parseInt(key) + 1, 412 item_variant: item_variant, 413 price: dataItems[key].product_price_value, 414 quantity: dataItems[key].qty 415 }; 416 items.push(dataItem); 417 } 418 419 let params = { 420 currency: data.cart.currency, 421 value: data.cart.subtotalAmount, 422 items: items 423 }; 424 425 const scriptElement = document.createElement("script"); 426 scriptElement.classList.add("bss-view-mini-cart"); 427 scriptElement.innerHTML =`gtag("event","view_cart",${JSON.stringify(params)})`; 428 let scriptViewMiniCart = document.querySelector('.bss-view-mini-cart'); 429 if (scriptViewMiniCart) { 430 scriptViewMiniCart.remove(); 431 } 432 433 document.querySelector('.bss-script').append(scriptElement); 434 } 435 } 436 }); 437 </script>
437 438 439 <meta property="og:type" content="og:product" /> 440 <meta property="og:title" content="Skin Trends Skincare and Cosmetics" /> 441 <meta property="og:image" content="https://www.skintrends.com/media/bss/logo/" /> 442 <meta property="og:description" content="(855) 851-1100 Skin Trends Professional Grade Skincare Products target all skin conditions with potent formulations that really work. Free Shipping, Free Samples, Always." /> 443 <meta property="og:url" content="https://www.skintrends.com/blog" /> 444 <meta name="twitter:card" content="summary" /> 445 <meta name="twitter:site" content="@skintrends1" /> 446 <meta name="twitter:title" content="Skin Trends Skincare and Cosmetics" /> 447 <meta name="twitter:description" content="(855) 851-1100 Skin Trends Professional Grade Skincare Products target all skin conditions with potent formulations that really work. Free Shipping, Free Samples, Always." /> 448 <meta name="twitter:image" content="https://www.skintrends.com/media/bss/logo/" /> 449
449<script type="application/ld+json"> {"@context":"http:\/\/schema.org","@type":"LocalBusiness","@id":"https:\/\/www.skintrends.com\/","name":"Skin Trends","image":"https:\/\/www.skintrends.com\/media\/bss\/logo\/","email":"[email protected]","priceRange":"","address":{"@type":"PostalAddress","streetAddress":"15310 Amberly Dr. Suite 250","addressLocality":"Tampa","postalCode":"33647","addressCountry":"USA"},"telephone":"+1-813-280-1141 "} </script>
449
449<script> 450 var BASE_URL = 'https://www.skintrends.com/'; 451 var THEME_PATH = 'https://www.skintrends.com/static/version1789630527/frontend/Hyva/skintrends/en_US'; 452 var COOKIE_CONFIG = { 453 "expires": null, 454 "path": "\u002F", 455 "domain": ".skintrends.com", 456 "secure": true, 457 "lifetime": "36000", 458 "cookie_restriction_enabled": false }; 459 var CURRENT_STORE_CODE = 'default'; 460 var CURRENT_WEBSITE_ID = '1'; 461 462 window.hyva = window.hyva || {} 463 464 window.cookie_consent_groups = window.cookie_consent_groups || {} 465 window.cookie_consent_groups['necessary'] = true; 466 467 window.cookie_consent_config = window.cookie_consent_config || {}; 468 window.cookie_consent_config['necessary'] = [].concat( 469 window.cookie_consent_config['necessary'] || [], 470 [ 471 'user_allowed_save_cookie', 472 'form_key', 473 'mage-messages', 474 'private_content_version', 475 'mage-cache-sessid', 476 'last_visited_store', 477 'section_data_ids' 478 ] 479 ); 480</script>
vendor: 1 bytes, line 480
480
481<script> 482 'use strict'; 483 (function( hyva, undefined ) { 484 485 function lifetimeToExpires(options, defaults) { 486 487 const lifetime = options.lifetime || defaults.lifetime; 488 489 if (lifetime) { 490 const date = new Date; 491 date.setTime(date.getTime() + lifetime * 1000); 492 return date; 493 } 494 495 return null; 496 } 497 498 function generateRandomString() { 499 500 const allowedCharacters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', 501 length = 16; 502 503 let formKey = '', 504 charactersLength = allowedCharacters.length; 505 506 for (let i = 0; i < length; i++) { 507 formKey += allowedCharacters[Math.round(Math.random() * (charactersLength - 1))] 508 } 509 510 return formKey; 511 } 512 513 const sessionCookieMarker = {noLifetime: true} 514 515 const cookieTempStorage = {}; 516 517 const internalCookie = { 518 get(name) { 519 const v = document.cookie.match('(^|;) ?' + name + '=([^;]*)(;|$)'); 520 return v ? v[2] : null; 521 }, 522 set(name, value, days, skipSetDomain) { 523 let expires, 524 path, 525 domain, 526 secure, 527 samesite; 528 529 const defaultCookieConfig = { 530 expires: null, 531 path: '/', 532 domain: null, 533 secure: false, 534 lifetime: null, 535 samesite: 'lax' 536 }; 537 538 const cookieConfig = window.COOKIE_CONFIG || {}; 539 540 expires = days && days !== sessionCookieMarker 541 ? lifetimeToExpires({lifetime: 24 * 60 * 60 * days, expires: null}, defaultCookieConfig) 542 : lifetimeToExpires(window.COOKIE_CONFIG, defaultCookieConfig) || defaultCookieConfig.expires; 543 544 path = cookieConfig.path || defaultCookieConfig.path; 545 domain = !skipSetDomain && (cookieConfig.domain || defaultCookieConfig.domain); 546 secure = cookieConfig.secure || defaultCookieConfig.secure; 547 samesite = cookieConfig.samesite || defaultCookieConfig.samesite; 548 549 document.cookie = name + "=" + encodeURIComponent(value) + 550 (expires && days !== sessionCookieMarker ? '; expires=' + expires.toGMTString() : '') + 551 (path ? '; path=' + path : '') + 552 (domain ? '; domain=' + domain : '') + 553 (secure ? '; secure' : '') + 554 (samesite ? '; samesite=' + samesite : 'lax'); 555 }, 556 isWebsiteAllowedToSaveCookie() { 557 const allowedCookies = this.get('user_allowed_save_cookie'); 558 if (allowedCookies) { 559 const allowedWebsites = JSON.parse(unescape(allowedCookies)); 560 561 return allowedWebsites[CURRENT_WEBSITE_ID] === 1; 562 } 563 return false; 564 }, 565 getGroupByCookieName(name) { 566 const cookieConsentConfig = window.cookie_consent_config || {}; 567 let group = null; 568 for (let prop in cookieConsentConfig) { 569 if (!cookieConsentConfig.hasOwnProperty(prop)) continue; 570 if (cookieConsentConfig[prop].includes(name)) { 571 group = prop; 572 break; 573 } 574 } 575 return group; 576 }, 577 isCookieAllowed(name) { 578 const cookieGroup = this.getGroupByCookieName(name); 579 return cookieGroup 580 ? window.cookie_consent_groups[cookieGroup] 581 : this.isWebsiteAllowedToSaveCookie(); 582 }, 583 saveTempStorageCookies() { 584 for (const [name, data] of Object.entries(cookieTempStorage)) { 585 if (this.isCookieAllowed(name)) { 586 this.set(name, data['value'], data['days'], data['skipSetDomain']); 587 delete cookieTempStorage[name]; 588 } 589 } 590 } 591 }; 592 593 hyva.getCookie = (name) => { 594 const cookieConfig = window.COOKIE_CONFIG || {}; 595 596 if (cookieConfig.cookie_restriction_enabled && ! internalCookie.isCookieAllowed(name)) { 597 return cookieTempStorage[name] ? cookieTempStorage[name]['value'] : null; 598 } 599 600 return internalCookie.get(name); 601 } 602 603 hyva.setCookie = (name, value, days, skipSetDomain) => { 604 const cookieConfig = window.COOKIE_CONFIG || {}; 605 606 if (cookieConfig.cookie_restriction_enabled && ! internalCookie.isCookieAllowed(name)) { 607 cookieTempStorage[name] = {value, days, skipSetDomain}; 608 return; 609 } 610 return internalCookie.set(name, value, days, skipSetDomain); 611 } 612 613 614 hyva.setSessionCookie = (name, value, skipSetDomain) => { 615 return hyva.setCookie(name, value, sessionCookieMarker, skipSetDomain) 616 } 617 618 hyva.getBrowserStorage = () => { 619 const browserStorage = window.localStorage || window.sessionStorage; 620 if (!browserStorage) { 621 console.warn('Browser Storage is unavailable'); 622 return false;
623 } 624 try { 625 browserStorage.setItem('storage_test', '1'); 626 browserStorage.removeItem('storage_test'); 627 } catch (error) { 628 console.warn('Browser Storage is not accessible', error); 629 return false; 630 } 631 return browserStorage; 632 } 633 634 hyva.postForm = (postParams) => { 635 const form = document.createElement("form"); 636 637 let data = postParams.data; 638 639 if (! postParams.skipUenc && ! data.uenc) { 640 data.uenc = btoa(window.location.href); 641 } 642 form.method = "POST"; 643 form.action = postParams.action; 644 645 Object.keys(postParams.data).map(key => { 646 const field = document.createElement("input"); 647 field.type = 'hidden' 648 field.value = postParams.data[key]; 649 field.name = key; 650 form.appendChild(field); 651 }); 652 653 const form_key = document.createElement("input"); 654 form_key.type = 'hidden'; 655 form_key.value = hyva.getFormKey(); 656 form_key.name="form_key"; 657 form.appendChild(form_key); 658 659 document.body.appendChild(form); 660 661 form.submit(); 662 } 663 664 hyva.getFormKey = function () { 665 let formKey = hyva.getCookie('form_key'); 666 667 if (!formKey) { 668 formKey = generateRandomString(); 669 hyva.setCookie('form_key', formKey); 670 } 671 672 return formKey; 673 } 674 675 hyva.formatPrice = (value, showSign, options = {}) => { 676 const formatter = new Intl.NumberFormat( 677 'en\u002DUS', 678 Object.assign({ 679 style: 'currency', 680 currency: 'USD', 681 signDisplay: showSign ? 'always' : 'auto' 682 }, options) 683 ); 684 return (typeof Intl.NumberFormat.prototype.formatToParts === 'function') ? 685 formatter.formatToParts(value).map(({type, value}) => { 686 switch (type) { 687 case 'currency': 688 return '\u0024' || value; 689 case 'minusSign': 690 return '- '; 691 case 'plusSign': 692 return '+ '; 693 default : 694 return value; 695 } 696 }).reduce((string, part) => string + part) : 697 formatter.format(value); 698 } 699 700 const formatStr = function (str, nStart) { 701 const args = Array.from(arguments).slice(2); 702 703 return str.replace(/(%+)([0-9]+)/g, (m, p, n) => { 704 const idx = parseInt(n) - nStart; 705 706 if (args[idx] === null || args[idx] === void 0) { 707 return m; 708 } 709 return p.length % 2 710 ? p.slice(0, -1).replace('%%', '%') + args[idx] 711 : p.replace('%%', '%') + n; 712 }) 713 } 714 715 hyva.str = function (string) { 716 const args = Array.from(arguments); 717 args.splice(1, 0, 1); 718 719 return formatStr.apply(undefined, args); 720 } 721 722 hyva.strf = function () { 723 const args = Array.from(arguments); 724 args.splice(1, 0, 0); 725 726 return formatStr.apply(undefined, args); 727 } 728 729 /** 730 * Take a html string as `content` parameter and 731 * extract an element from the DOM to replace in 732 * the current page under the same selector, 733 * defined by `targetSelector` 734 */ 735 hyva.replaceDomElement = (targetSelector, content) => { 736 // Parse the content and extract the DOM node using the `targetSelector` 737 const parser = new DOMParser(); 738 const doc = parser.parseFromString(content, 'text/html'); 739 const contentNode = doc.querySelector(targetSelector); 740 741 // Bail if content can't be found 742 if (!contentNode) { 743 return; 744 } 745 746 hyva.activateScripts(contentNode) 747 748 // Replace the old DOM node with the new content
749 document.querySelector(targetSelector).replaceWith(contentNode); 750 751 // Reload customerSectionData and display cookie-messages if present 752 window.dispatchEvent(new CustomEvent("reload-customer-section-data")); 753 hyva.initMessages(); 754 } 755 756 hyva.activateScripts = (contentNode) => { 757 // Extract all the script tags from the content. 758 // Script tags won't execute when inserted into a dom-element directly, 759 // therefore we need to inject them to the head of the document. 760 const tmpScripts = contentNode.getElementsByTagName('script'); 761 762 if (tmpScripts.length > 0) { 763 // Push all script tags into an array 764 // (to prevent dom manipulation while iterating over dom nodes) 765 const scripts = []; 766 for (let i = 0; i < tmpScripts.length; i++) { 767 scripts.push(tmpScripts[i]); 768 } 769 770 // Iterate over all script tags and duplicate+inject each into the head 771 for (let i = 0; i < scripts.length; i++) { 772 let script = document.createElement('script'); 773 script.innerHTML = scripts[i].innerHTML; 774 775 document.head.appendChild(script); 776 777 // Remove the original (non-executing) node from the content 778 scripts[i].parentNode.removeChild(scripts[i]); 779 } 780 } 781 return contentNode; 782 } 783 784 const replace = {['+']: '-', ['/']: '_', ['=']: ','}; 785 hyva.getUenc = () => btoa(window.location.href).replace(/[+/=]/g, match => replace[match]); 786 787 let currentTrap; 788 789 const focusableElements = (rootElement) => { 790 const selector = 'button, [href], input, select, textarea, details, [tabindex]:not([tabindex="-1"]'; 791 return Array.from(rootElement.querySelectorAll(selector)) 792 .filter(el => { 793 return el.style.display !== 'none' 794 && !el.disabled 795 && el.tabIndex !== -1 796 && (el.offsetWidth || el.offsetHeight || el.getClientRects().length) 797 }) 798 } 799 800 const focusTrap = (e) => { 801 const isTabPressed = e.key === 'Tab' || e.keyCode === 9; 802 if (!isTabPressed) return; 803 804 const focusable = focusableElements(currentTrap) 805 const firstFocusableElement = focusable[0] 806 const lastFocusableElement = focusable[focusable.length - 1] 807 808 e.shiftKey 809 ? document.activeElement === firstFocusableElement && (lastFocusableElement.focus(), e.preventDefault()) 810 : document.activeElement === lastFocusableElement && (firstFocusableElement.focus(), e.preventDefault()) 811 }; 812 813 hyva.releaseFocus = (rootElement) => { 814 if (currentTrap && (!rootElement || rootElement === currentTrap)) { 815 currentTrap.removeEventListener('keydown', focusTrap) 816 currentTrap = null 817 } 818 } 819 hyva.trapFocus = (rootElement) => { 820 if (!rootElement) return; 821 hyva.releaseFocus() 822 currentTrap = rootElement 823 rootElement.addEventListener('keydown', focusTrap) 824 const firstElement = focusableElements(rootElement)[0] 825 firstElement && firstElement.focus() 826 } 827 828 hyva.alpineInitialized = (fn) => window.addEventListener('alpine:initialized', fn, {once: true}) 829 window.addEventListener('user-allowed-save-cookie', () => internalCookie.saveTempStorageCookies()) 830 831 }( window.hyva = window.hyva || {} )); 832</script>
vendor: 1 bytes, line 832
832
833<script> 834 if (!window.IntersectionObserver) { 835 window.IntersectionObserver = function (callback) { 836 this.observe = el => el && callback(this.takeRecords()); 837 this.takeRecords = () => [{isIntersecting: true, intersectionRatio: 1}]; 838 this.disconnect = () => {}; 839 this.unobserve = () => {}; 840 } 841 } 842</script>
842 843<meta property="og:locale" content="en_US"/> 844<meta property="og:type" content="blog"/> 845<meta property="og:title" content="Skin Trends Skincare and Cosmetics"/> 846<meta property="og:description" content="Expert Service in Skincare"/> 847<meta property="og:url" content="https://www.skintrends.com/blog/"/> 848<meta property="og:site_name" content="Skin Trends Skincare and Cosmetics"/> 849 850<link rel='stylesheet' id='SFSImainCss-css' href='https://www.skintrends.com/wp/wp-content/plugins/ultimate-social-media-icons/css/sfsi-style.css?ver=2.9.4' type='text/css' media='all' /> 851 852<style id='wp-img-auto-sizes-contain-inline-css' type='text/css'> 853img:is([sizes=auto i],[sizes^="auto," i]){contain-intrinsic-size:3000px 1500px} 854/*# sourceURL=wp-img-auto-sizes-contain-inline-css */ 855</style> 856<style id='wp-block-library-inline-css' type='text/css'> 857:root{--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color);--wp-editor-canvas-background:#ddd;--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,160.5;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.wp-element-button{cursor:pointer}:root .has-very-light-gray-background-color{background-color:#eee}:root .has-very-dark-gray-background-color{background-color:#313131}:root .has-very-light-gray-color{color:#eee}:root .has-very-dark-gray-color{color:#313131}:root .has-vivid-green-cyan-to-vivid-cyan-blue-gradient-background{background:linear-gradient(135deg,#00d084,#0693e3)}:root .has-purple-crush-gradient-background{background:linear-gradient(135deg,#34e2e4,#4721fb 50%,#ab1dfe)}:root .has-hazy-dawn-gradient-background{background:linear-gradient(135deg,#faaca8,#dad0ec)}:root .has-subdued-olive-gradient-background{background:linear-gradient(135deg,#fafae1,#67a671)}:root .has-atomic-cream-gradient-background{background:linear-gradient(135deg,#fdd79a,#004a59)}:root .has-nightshade-gradient-background{background:linear-gradient(135deg,#330968,#31cdcf)}:root .has-midnight-gradient-background{background:linear-gradient(135deg,#020381,#2874fc)}:root{--wp--preset--font-size--normal:16px;
857--wp--preset--font-size--huge:42px}.has-regular-font-size{font-size:1em}.has-larger-font-size{font-size:2.625em}.has-normal-font-size{font-size:var(--wp--preset--font-size--normal)}.has-huge-font-size{font-size:var(--wp--preset--font-size--huge)}.has-text-align-center{text-align:center}.has-text-align-left{text-align:left}.has-text-align-right{text-align:right}.has-fit-text{white-space:nowrap!important}#end-resizable-editor-section{display:none}.aligncenter{clear:both}.items-justified-left{justify-content:flex-start}.items-justified-center{justify-content:center}.items-justified-right{justify-content:flex-end}.items-justified-space-between{justify-content:space-between}.screen-reader-text{border:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;word-wrap:normal!important}.screen-reader-text:focus{background-color:#ddd;clip-path:none;color:#444;display:block;font-size:1em;height:auto;left:5px;line-height:normal;padding:15px 23px 14px;text-decoration:none;top:5px;width:auto;z-index:100000}html :where(.has-border-color){border-style:solid}html :where([style*=border-top-color]){border-top-style:solid}html :where([style*=border-right-color]){border-right-style:solid}html :where([style*=border-bottom-color]){border-bottom-style:solid}html :where([style*=border-left-color]){border-left-style:solid}html :where([style*=border-width]){border-style:solid}html :where([style*=border-top-width]){border-top-style:solid}html :where([style*=border-right-width]){border-right-style:solid}html :where([style*=border-bottom-width]){border-bottom-style:solid}html :where([style*=border-left-width]){border-left-style:solid}html :where(img[class*=wp-image-]){height:auto;max-width:100%}:where(figure){margin:0 0 1em}html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:var(--wp-admin--admin-bar--height,0px)}@media screen and (max-width:600px){html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:0px}} 858/*wp_block_styles_on_demand_placeholder:6ac3e9a6597a4*/ 859/*# sourceURL=wp-block-library-inline-css */ 860</style> 861<style id='classic-theme-styles-inline-css' type='text/css'> 862/*! This file is auto-generated */ 863.wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none} 864/*# sourceURL=/wp-includes/css/classic-themes.min.css */ 865</style> 866<style type="text/css" aria-selected="true"> 867.sfsi_subscribe_Popinner { 868 width: 100% !important; 869 870 height: auto !important; 871 872 873 padding: 18px 0px !important; 874 875 background-color: #ffffff !important; 876} 877 878.sfsi_subscribe_Popinner form { 879 margin: 0 20px !important; 880} 881 882.sfsi_subscribe_Popinner h5 { 883 font-family: Helvetica,Arial,sans-serif !important; 884 885 font-weight: bold !important; 886 color: #000000 !important; 887 font-size: 16px !important; 888 text-align: center !important; margin: 0 0 10px !important; 889 padding: 0 !important; 890} 891 892.sfsi_subscription_form_field { 893 margin: 5px 0 !important; 894 width: 100% !important; 895 display: inline-flex; 896 display: -webkit-inline-flex; 897} 898 899.sfsi_subscription_form_field input { 900 width: 100% !important; 901 padding: 10px 0px !important; 902} 903 904.sfsi_subscribe_Popinner input[type=email] { 905 font-family: Helvetica,Arial,sans-serif !important; 906 font-style: normal !important; 907 908 font-size: 14px !important; 909 text-align: center !important; } 910 911.sfsi_subscribe_Popinner input[type=email]::-webkit-input-placeholder { 912 913 font-family: Helvetica,Arial,sans-serif !important; 914 font-style: normal !important; 915 916 font-size: 14px !important; 917 text-align: center !important; } 918 919.sfsi_subscribe_Popinner input[type=email]:-moz-placeholder { 920 /* Firefox 18- */ 921 font-family: Helvetica,Arial,sans-serif !important; 922 font-style: normal !important; 923 924 font-size: 14px !important; 925 text-align: center !important; 926} 927 928.sfsi_subscribe_Popinner input[type=email]::-moz-placeholder { 929 /* Firefox 19+ */ 930 font-family: Helvetica,Arial,sans-serif !important; 931 font-style: normal !important; 932 933 font-size: 14px !important; text-align: center !important; } 934 935.sfsi_subscribe_Popinner input[type=email]:-ms-input-placeholder { 936 937 font-family: Helvetica,Arial,sans-serif !important; 938 font-style: normal !important; 939 940 font-size: 14px !important ; 941 text-align: center !important; } 942 943.sfsi_subscribe_Popinner input[type=submit] { 944 945 font-family: Helvetica,Arial,sans-serif !important; 946 font-weight: bold !important; 947 color: #000000 !important; 948 font-size: 16px !important; 949 text-align: center !important; 950 background-color: #dedede !important; } 951 952.sfsi_shortcode_container { 953 float: left; 954 } 955 956 .sfsi_shortcode_container .norm_row .sfsi_wDiv { 957 position: relative !important; 958 } 959 960 .sfsi_shortcode_container .sfsi_holders { 961 display: none; 962 } 963 964 </style> 965</head> 966<body id="html-body" class="amasty-mega-menu wordpress-posttype-view page-layout-2columns-left home blog wp-theme-fishpig sfsi_actvite_theme_default"> 967 968<!-- Google Tag Manager by MagePal -->
vendor: 62 bytes, lines 968-969
968 969<noscript><iframe src="//www.googletagmanager.com/ns.html?id=
969GTM-X2GF
vendor: 83 bytes, lines 969-970
969" 970height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
971<!-- End Google Tag Manager by MagePal --> 972 973
973<script> 974 (function () { 975 'use strict'; 976 977 window.amRecaptchaModel = { 978 formsToProtect: "\u0023review_form,form\u005Baction\u002A\u003D\u0022customer\u002Faccount\u002Fcreatepost\u0022\u005D,form\u005Baction\u002A\u003D\u0022newsletter\u002Fsubscriber\u002Fnew\u0022\u005D,form\u005Baction\u002A\u003D\u0022contact\u002Findex\u002Fpost\u0022\u005D,form\u005Baction\u002A\u003D\u0022customer\u002Faccount\u002Fforgotpasswordpost\u0022\u005D,form\u005Bx\u002Ddata\u003D\u0022initReviewForm\u0028\u0029\u0022\u005D,.form.password.forget", 979 isEnabledOnPayments: "", 980 checkoutRecaptchaValidateUrl: "https://www.skintrends.com/amcapthca/checkout/validate/", 981 invisibleCaptchaCustomForm: "\u002D1", 982 recaptchaConfig: { 983 lang: "hl\u003Den" || 'hl=en', 984 theme: "light", 985 badge: "bottomright", 986 sitekey: "6LcP2lIpAAAAALmIQHIfBg4SkGQYyTizRgiZD47S", 987 size: "invisible" 988 }, 989 url: 'https://www.google.com/recaptcha/api.js', 990 isCaptchaScriptLoaded: false, 991 isInvisible: "invisible" === 'invisible', 992 993 /** 994 * Submit event 995 * 996 * @param {Object} $event 997 * @return {void} 998 */ 999 execute: function ($event) { 1000 const eventTarget = $event?.target; 1001 if (this.isCaptchaScriptLoaded) { 1002 this.executeCaptcha(eventTarget); 1003 } else { 1004 window.addEventListener('amcaptcha-script-loaded', () => { 1005 this.isCaptchaScriptLoaded = true; 1006 this.executeCaptcha(eventTarget); 1007 this.initAmcaptchaBadges(); 1008 }); 1009 1010 this.loadRecaptchaScript(); 1011 } 1012 }, 1013 1014 /** 1015 * Execute original submit 1016 * 1017 * @param {Object} $event 1018 * @param {HTMLElement} $el 1019 * @return {void} 1020 */ 1021 recaptchaCallback: function ($event, $el) { 1022 this.shouldExecuteCallback($event, $el) && $el.dispatchEvent(new CustomEvent('amrecaptcha-executable-callback')); 1023 }, 1024 1025 /** 1026 * Reset captcha 1027 * 1028 * @param {Object} $event 1029 * @param {HTMLElement} $el 1030 */ 1031 expiredCallback: function($event, $el) { 1032 this.shouldExecuteCallback($event, $el) && grecaptcha.reset($event.detail.widgetId); 1033 }, 1034 1035 /** 1036 * Checks if event is fired on submitted element 1037 * 1038 * @param {Object} $event 1039 * @param {HTMLElement} $el 1040 * @return {boolean} 1041 */ 1042 shouldExecuteCallback: function($event, $el) { 1043 const eventWidgetId = $event.detail.widgetId; 1044 const elementWidgetId = $el.dataset.amCaptchaWidgetId || $el.closest('form')?.dataset.amCaptchaWidgetId; 1045 1046 return eventWidgetId === elementWidgetId; 1047 }, 1048 1049 /** 1050 * Run captcha for widget by id 1051 * 1052 * @param {HTMLElement} eventTarget 1053 * @return {void} 1054 */ 1055 executeCaptcha: function(eventTarget) { 1056 if (!eventTarget.dataset.hasOwnProperty('amCaptchaRendered')) { 1057 this.bindCaptchaGlobalCallbacks(eventTarget); 1058 this.renderCaptcha(eventTarget); 1059 eventTarget.dataset.amCaptchaRendered = ''; 1060 } 1061 1062 const widgetId = this.getWidgetId(eventTarget); 1063 1064 if (!widgetId) { 1065 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages([ 1066 { 1067 type: "error", 1068 text: 'Recaptcha\u0020cannot\u0020properly\u0020validate\u0020form.' 1069 } 1070 ]); 1071 return; 1072 } 1073 1074 window.dispatchEvent(new CustomEvent('amcaptcha-loading-start')); 1075 grecaptcha.reset(widgetId); 1076 1077 if (!this.isInvisible) { 1078 this.stopAmcaptchaLoading(); 1079 return; 1080 } 1081 1082 grecaptcha.execute(widgetId) 1083 .then(() => this.stopAmcaptchaLoading()) 1084 .catch(() => this.stopAmcaptchaLoading()); 1085 }, 1086 1087 /** 1088 * Add recaptcha script to page 1089 * 1090 * @return {void} 1091 */ 1092 loadRecaptchaScript: function () { 1093 const lang = window.amRecaptchaModel.recaptchaConfig.lang; 1094 const url = `${window.amRecaptchaModel.url}?onload=amRecaptchaLoadCallback&render=explicit&${lang}`; 1095 const script = document.createElement('script'); 1096 1097 script.type = 'text/javascript'; 1098 script.src = url; 1099 script.async = true; 1100 document.head.appendChild(script); 1101 }, 1102 1103 /** 1104 * Stop loader on page 1105 * 1106 * @return {void} 1107 */ 1108 stopAmcaptchaLoading: function () { 1109 window.dispatchEvent(new CustomEvent('amcaptcha-loading-stop')); 1110 }, 1111 1112 /** 1113 * Add attributes to hide captcha badge 1114 * 1115 * @return {void} 1116 */ 1117 initAmcaptchaBadges: function () { 1118 if (!this.isInvisible) { 1119 return; 1120 } 1121 1122 document.querySelectorAll('.grecaptcha-badge')?.forEach(captchaBadge => { 1123 captchaBadge?.setAttribute('x-data', '{ visible: true }'); 1124 captchaBadge?.setAttribute('x-on:amcaptcha-loading-start.window', 'visible = true'); 1125 captchaBadge?.setAttribute('x-on:amcaptcha-loading-stop.window', 'visible = false'); 1126 captchaBadge?.setAttribute(':class', '!visible && "invisible"'); 1127 }); 1128 }, 1129 1130 /** 1131 * Get form widgetId 1132 * 1133 * @param {HTMLElement} eventTarget 1134 * @return {string} 1135 */ 1136 getWidgetId: function (eventTarget) { 1137 return eventTarget.dataset.amCaptchaWidgetId 1138 || eventTarget.closest('form')?.dataset.amCaptchaWidgetId; 1139 }, 1140 1141 /** 1142 * Add captcha badge or checkbox to protected form. 1143 * Store widgetId in dataset to pass this info in callbacks 1144 * 1145 * @param {HTMLElement} eventTarget 1146 * @return {void} 1147 */ 1148 renderCaptcha: function (eventTarget) { 1149 const captchaElement = document.createElement('div'); 1150 const formContent = eventTarget.closest('form')?.querySelector('[data-element="form-content"]') 1151 ?? eventTarget.closest('form'); 1152 formContent?.appendChild(captchaElement); 1153 1154 eventTarget.dataset.amCaptchaWidgetId = grecaptcha.render(captchaElement, { 1155 ...window.amRecaptchaModel?.recaptchaConfig, 1156 callback: () => { 1157 window.dispatchEvent(new CustomEvent( 1158 'amrecaptcha-callback', { 1159 detail: this.getCaptchaCallbackDetail(eventTarget) 1160 })); 1161 }, 1162 'expired-callback': () => { 1163 window.dispatchEvent(new CustomEvent( 1164 'amrecaptcha-expired-callback', { 1165 detail: this.getCaptchaCallbackDetail(eventTarget) 1166 })); 1167 } 1168 }); 1169 }, 1170 1171 /** 1172 * Get detail property for callback event 1173 * 1174 * @param {HTMLElement} eventTarget 1175 * @return {object} 1176 */ 1177 getCaptchaCallbackDetail: function (eventTarget) { 1178 return { 1179 widgetId: eventTarget.dataset.amCaptchaWidgetId, 1180 form: eventTarget 1181 } 1182 }, 1183 1184 /** 1185 * Add functions that will be called on the global state 1186 * 1187 * @param {HTMLElement} eventTarget 1188 * @return {void} 1189 */ 1190 bindCaptchaGlobalCallbacks: function (eventTarget) { 1191 eventTarget.setAttribute( 1192 'x-on:amrecaptcha-callback.window', 1193 `amRecaptchaModel.recaptchaCallback($event, $el)` 1194 ); 1195 eventTarget.setAttribute( 1196 'x-on:amrecaptcha-expired-callback.window', 1197 'amRecaptchaModel.expiredCallback($event, $el)' 1198 ); 1199 } 1200 }; 1201 })(window.amRecaptchaModel = window.amRecaptchaModel || {}); 1202 1203 window.amRecaptchaLoadCallback = function () { 1204 window.dispatchEvent(new CustomEvent('amcaptcha-script-loaded')); 1205 } 1206 </script>
1206 1207 1208<div 1209 class="ambanners ambanner-10" 1210 data-position="10" 1211 data-bannerid="" 1212 data-role="amasty-banner-container" 1213></div> 1214 <!-- BEGIN GCR Language Code --> 1215 <!-- END GCR Language Code --> 1216
1216<script> window.___gcfg = { 1217 lang: 'en_US' 1218 };</script>
1218 <input name="form_key" type="hidden" value="hHYNuMT1BvCF79ZX" /> 1219 <noscript> 1220 <section class="message global noscript border-b-2 border-blue-500 bg-blue-50 shadow-none m-0 px-0 rounded-none font-normal"> 1221 <div class="container text-center"> 1222 <p> 1223 <strong>JavaScript seems to be disabled in your browser.</strong> 1224 <span> 1225 For the best experience on our site, be sure to turn on Javascript in your browser. </span> 1226 </p> 1227 </div> 1228 </section> 1229 </noscript> 1230 1231
1232<script> 1233 document.body.addEventListener('touchstart', () => {}, {passive: true}) 1234</script>
1234 1235 1236
1236<script> 1237 window.amRecaptchaModel = window.amRecaptchaModel || {}; 1238 </script>
1238 1239
1240<script> 1241 'use strict'; 1242 (function(hyva) { 1243 const formValidationRules = { 1244 required(value, options, field, context) { 1245 const el = field.element.type === 'hidden' ? createTextInputFrom(field.element) : field.element, 1246 msg = 'This\u0020is\u0020a\u0020required\u0020field.'; 1247 1248 if (el.type === 'radio' || el.type === 'checkbox') { 1249 return (value === undefined || value.length === 0) ? msg : true; 1250 } 1251 1252 el.setAttribute('required', ''); 1253 el.checkValidity(); 1254 1255 return el.validity.valueMissing ? msg : true; 1256 }, 1257 maxlength(value, options, field, context) { 1258 const n = Number(options) 1259 if (value.length > n) { 1260 return n === 1 1261 ? hyva.strf('Please\u0020enter\u0020no\u0020more\u0020than\u00201\u0020character.') 1262 : hyva.strf('Please\u0020enter\u0020no\u0020more\u0020than\u0020\u00250\u0020characters.', options) 1263 } 1264 return true; 1265 }, 1266 minlength(value, options, field, context) { 1267 const n = Number(options) 1268 if (value.length > 0 && value.length < n) { 1269 return n === 1 1270 ? hyva.strf('Please\u0020enter\u0020at\u0020least\u00201\u0020character.') 1271 : hyva.strf('Please\u0020enter\u0020at\u0020least\u0020\u00250\u0020characters.', options) 1272 } 1273 return true; 1274 }, 1275 max(value, options, field, context) { 1276 field.element.setAttribute('max', options); 1277 field.element.checkValidity(); 1278 if (field.element.validity.rangeOverflow) { 1279 return hyva.strf('Please\u0020enter\u0020a\u0020value\u0020less\u0020than\u0020or\u0020equal\u0020to\u0020\u0022\u00250\u0022.', options); 1280 } 1281 return true; 1282 }, 1283 min(value, options, field, context) { 1284 field.element.setAttribute('min', options); 1285 field.element.checkValidity(); 1286 if (field.element.validity.rangeUnderflow) { 1287 return hyva.strf('Please\u0020enter\u0020a\u0020value\u0020greater\u0020than\u0020or\u0020equal\u0020to\u0020\u0022\u00250\u0022.', options); 1288 } 1289 return true; 1290 }, 1291 step(value, options, field, context) { 1292 field.element.setAttribute('step', options); 1293 field.element.checkValidity(); 1294 if (field.element.validity.stepMismatch) { 1295 const val = Number(value); 1296 const step = Number(options); 1297 const msg = 'Please\u0020enter\u0020a\u0020valid\u0020value.\u0020The\u0020two\u0020nearest\u0020valid\u0020values\u0020are\u0020\u0022\u00250\u0022\u0020and\u0020\u0022\u00251\u0022.'; 1298 return hyva.strf(msg, Math.floor(val / step) * step, Math.ceil(val / step) * step); 1299 } 1300 return true; 1301 }, 1302 pattern(value, options, field, context) { 1303 field.element.setAttribute('pattern', options); 1304 field.element.checkValidity(); 1305 if (field.element.validity.patternMismatch) { 1306 return field.element.title 1307 ? hyva.strf('Please\u0020match\u0020the\u0020requested\u0020format\u003A\u0020\u00250.', field.element.title) 1308 : 'Please\u0020match\u0020the\u0020requested\u0020format.' 1309 } 1310 return true; 1311 }, 1312 email(value, options, field, context) { 1313 const rule = /^([a-z0-9,!\#\$%&'\*\+\/=\?\^_`\{\|\}~-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z0-9,!\#\$%&'\*\+\/=\?\^_`\{\|\}~-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*@([a-z0-9-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z0-9-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*\.(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]){2,})$/i; 1314 if (value.length > 0 && !rule.test(value)) { 1315 return 'Please\u0020enter\u0020a\u0020valid\u0020email\u0020address.'; 1316 } 1317 return true; 1318 }, 1319 password(value, options, field, context) { 1320 const rule = /^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{8,}$/; 1321 if (value.length > 0 && !rule.test(value)) { 1322 return 'Please\u0020provide\u0020at\u0020least\u0020one\u0020upper\u0020case,\u0020one\u0020lower\u0020case,\u0020one\u0020digit\u0020and\u0020one\u0020special\u0020character\u0020\u0028\u0023\u003F\u0021\u0040\u0024\u0025\u005E\u0026\u002A\u002D\u0029'; 1323 } 1324 return true; 1325 }, 1326 equalTo(value, options, field, context) { 1327 const dependencyField = context.fields[options].element; 1328 if (value !== dependencyField.value) { 1329 const dependencyFieldName = 1330 dependencyField.label || 1331 dependencyField.title || 1332 (dependencyField.labels && dependencyField.labels[0] && dependencyField.labels[0].innerText) || 1333 dependencyField.name; 1334 return hyva.strf('This\u0020field\u0020value\u0020must\u0020be\u0020the\u0020same\u0020as\u0020\u0022\u00250\u0022.', dependencyFieldName); 1335 } 1336 return true; 1337 } 1338 }; 1339 1340 function raceSome(promises, pred) { 1341 return new Promise((resolve, reject) => { 1342 1343 if (promises.length === 0) { 1344 return resolve(); 1345 } 1346 1347 let settled = false, nDone = 0; 1348 1349 const resolveIf = v => { 1350 if (!settled && (pred(v) || ++nDone === promises.length)) { 1351 settled = true; 1352 resolve(v); 1353 } 1354 return v; 1355 } 1356 1357 promises.map(promise => {
1358 promise.then(resolveIf).catch(reason => { 1359 settled = true; 1360 reject(reason) 1361 }); 1362 return promise; 1363 }); 1364 }); 1365 } 1366 1367 const INPUT_ATTRIBUTE_RULES = {min: 'min', max: 'max', required: 'required', minlength: 'minlength', maxlength: 'maxlength', step: 'step', pattern: 'pattern'} 1368 const INPUT_TYPE_RULES = {email: 'email'} 1369 1370 function getRules(element) { 1371 let rules = {}; 1372 Object.keys(INPUT_ATTRIBUTE_RULES).forEach(attrName => { 1373 if (element.hasAttribute(attrName)) { 1374 rules[INPUT_ATTRIBUTE_RULES[attrName]] = element.getAttribute(attrName); 1375 } 1376 }) 1377 if (INPUT_TYPE_RULES[element.type]) { 1378 rules[INPUT_TYPE_RULES[element.type]] = true; 1379 } 1380 1381 if (element.dataset.validate) { 1382 try { 1383 Object.assign(rules, JSON.parse(element.dataset.validate)); 1384 } catch (error) { 1385 console.error('Validator error. Cannot parse data-validate attribute of element:\n', element); 1386 } 1387 } 1388 1389 return rules; 1390 } 1391 1392 function isInvalidRuleResult(ruleState) { 1393 return typeof ruleState === 'string' || !ruleState || (ruleState.type && ruleState.content); 1394 } 1395 1396 async function runValidateFn(rule, options, value, field) { 1397 return formValidationRules[rule](value, options, field, this); 1398 } 1399 1400 function generateId() { 1401 let id; 1402 do { 1403 id = `${this.idPrefix}-${++this.idSeq}`; 1404 } while (document.getElementById(id)); 1405 return id; 1406 } 1407 1408 function isVisible(element) { 1409 const el = element.type !== 'hidden' ? element : (element.parentElement || {}); 1410 return !!(el.offsetWidth || el.offsetHeight || el.getClientRects().length) 1411 } 1412 1413 function elementWillValidate(element) { 1414 return (element.willValidate || element.type === 'hidden') 1415 && element.tagName !== 'BUTTON' 1416 && element.disabled === false 1417 && !(element.tagName === 'INPUT' && element.type === 'submit') 1418 && (element.hasAttribute('data-validate-hidden') || isVisible(element)) 1419 } 1420 1421 function createMessageContainer(el, fieldWrapperClassName) { 1422 if (! el.parentElement) { 1423 return; 1424 } 1425 const refocus = document.activeElement === el; 1426 const wrapper = document.createElement('div'); 1427 wrapper.classList.add.apply(wrapper.classList, fieldWrapperClassName.split(' ')); 1428 el.parentElement.insertBefore(wrapper, el); 1429 wrapper.appendChild(el); 1430 refocus && document.activeElement !== el && el.focus(); 1431 return wrapper; 1432 } 1433 1434 function containerNotFound(selector, el) { 1435 const msg = `Cannot find message container element ${selector} of ${el.name}`; 1436 console.error(msg, el); 1437 throw msg; 1438 } 1439 1440 function createTextInputFrom(el) { 1441 const text = document.createElement('INPUT'); 1442 text.type = 'text'; 1443 text.value = el.value; 1444 return text; 1445 } 1446 1447 function classNamesToSelector(classNames) { 1448 return classNames.split(' ') 1449 .filter(className => className.length > 0) 1450 .map(className => `.${className}`) 1451 .join('') 1452 } 1453 1454 function hasMessagesWrapper(field, messagesWrapperClassName) { 1455 return this.getMessageContainer(field).querySelector(classNamesToSelector(messagesWrapperClassName)); 1456 } 1457 1458 function getMessagesWrapper(field, messagesWrapperClassName) { 1459 if (hasMessagesWrapper.call(this, field, messagesWrapperClassName)) { 1460 return this.getMessageContainer(field).querySelector(classNamesToSelector(messagesWrapperClassName)); 1461 } 1462 1463 const msgWrapper = document.createElement('ul'); 1464 const msgId = generateId.call(this); 1465 msgWrapper.id = msgId; 1466 field.element.setAttribute('aria-errormessage', msgId); 1467 field.element.setAttribute('aria-describedby', msgId); 1468 msgWrapper.classList.add.apply(msgWrapper.classList, messagesWrapperClassName.split(' ')); 1469 if (field.validateOnChange) { 1470 msgWrapper.setAttribute('aria-live', 'polite'); 1471 } 1472 this.getMessageContainer(field).appendChild(msgWrapper); 1473 1474 return msgWrapper; 1475 } 1476 1477 function getCheckedValues(field) { 1478 const name = field.element.name.replace(/([\\"])/g, '\\$1'); 1479 const elements = field.element.form.querySelectorAll('input[name="' + name + '"]:checked'); 1480 return Array.from(elements).map(el => el.value); 1481 } 1482 1483 function escapeHtml(s) { 1484 const div = document.createElement('div') 1485 div.innerText = s; 1486 return div.innerHTML; 1487 } 1488 1489 1490 function formValidation(formElement, options) { 1491 // Disable browser default validation 1492 if (formElement.tagName === 'FORM') { 1493 formElement.setAttribute('novalidate', ''); 1494 } else { 1495 console.error('formValidation can be initialized only on FORM element', formElement); 1496 return; 1497 } 1498 1499 options = Object.assign({ 1500 fieldWrapperClassName: 'field field-reserved', 1501 messagesWrapperClassName: 'messages', 1502 validClassName: 'field-success', 1503 invalidClassName: 'field-error', 1504 pageMessagesWrapperSelector: null, 1505 scrollToFirstError: true, 1506 }, options || {}); 1507 1508 return { 1509 state: { 1510 valid: false, 1511 }, 1512 fields: {}, 1513 idSeq: 0, 1514 idPrefix: formElement.id || 'vld-msg', 1515 setupFields(elements) { 1516 this.fields = {};
1517 Array.from(elements).forEach(element => { 1518 if (elementWillValidate(element)) { 1519 this.setupField(element); 1520 } 1521 }); 1522 }, 1523 setupField(element) { 1524 if (! element) return; 1525 const onChange = !!element.dataset.onChange; 1526 if (elementWillValidate(element)) { 1527 const rules = getRules(element); 1528 if (Object.keys(rules).length > 0) { 1529 if (this.fields[element.name]) { 1530 Object.assign(this.fields[element.name].rules, rules); 1531 } else { 1532 this.fields[element.name] = { 1533 element, 1534 rules: rules, 1535 validateOnChange: onChange, 1536 state: { 1537 valid: null, 1538 rules: {} 1539 } 1540 } 1541 } 1542 } 1543 } else { 1544 console.error('Element will not validate', element); 1545 } 1546 }, 1547 onSubmit(event) { 1548 if (event.target.tagName === 'FORM') { 1549 event.preventDefault(); 1550 1551 this.validate() 1552 .then(() => event.target.submit()) 1553 .catch(invalidElements => {}); 1554 } 1555 }, 1556 onChange(event) { 1557 event.target.dataset.onChange = 'true'; 1558 if (!Object.keys(this.fields).length) { 1559 this.setupFields(formElement.elements); 1560 } 1561 if (!Object.keys(this.fields).includes(event.target.name)) { 1562 this.setupField(event.target); 1563 } 1564 const field = this.fields[event.target.name]; 1565 1566 this.validateField(field); 1567 field && field.element.removeAttribute('data-on-change') 1568 }, 1569 validateSafe() { 1570 return new Promise(resolve => this.validate().then(() => resolve(true)).catch(() => {})) 1571 }, 1572 validate() { 1573 if (!Object.keys(this.fields).length || !Object.keys(this.fields).length !== formElement.elements.length) { 1574 this.setupFields(formElement.elements); 1575 } 1576 return new Promise(async (resolve, reject) => { 1577 if (formElement.elements) { 1578 await raceSome(this.validateFields(), result => result !== true) 1579 const invalidFields = Object.values(this.fields).filter(field => !field.state.valid); 1580 this.state.valid = invalidFields.length === 0; 1581 if (this.state.valid) { 1582 resolve(); 1583 } else { 1584 if (options.scrollToFirstError && invalidFields.length > 0) { 1585 invalidFields[0].element.focus() 1586 invalidFields[0].element.select && invalidFields[0].element.select(); 1587 } 1588 reject(invalidFields.map(field => field.element)); 1589 } 1590 } 1591 }); 1592 }, 1593 validateFields() { 1594 const fields = Object.values(this.fields); 1595 1596 fields.forEach(field => { 1597 this.getMessageContainer(field).classList.remove(options.validClassName, options.invalidClassName) 1598 }); 1599 return fields.map(field => this.validateField(field)) 1600 }, 1601 validateField(field) { 1602 if (! field || ! elementWillValidate(field.element)) { 1603 return new Promise(resolve => resolve(true)) 1604 } 1605 1606 let value; 1607 if (field.element.type === 'checkbox') { 1608 value = getCheckedValues(field); 1609 } else if (field.element.type === 'radio') { 1610 value = getCheckedValues(field)[0] || undefined; 1611 } else if (field.element.tagName === 'SELECT' && field.element.multiple) { 1612 value = Array.from(field.element.selectedOptions).map(opt => opt.value); 1613 } else { 1614 value = field.element.value; 1615 } 1616 1617 const rules = field.rules || {}; 1618 1619 field.state.valid = true;
1620 this.showFieldState(field); 1621 1622 1623 const fieldValidations = Object.keys(rules).filter(rule => formValidationRules[rule]).map(async rule => { 1624 return runValidateFn.call(this, rule, rules[rule], value, field).then(result => { 1625 field.state.rules[rule] = result; 1626 return result; 1627 }) 1628 }); 1629 1630 return new Promise(resolve => { 1631 Promise.all(fieldValidations).then(results => { 1632 field.state.valid = !elementWillValidate(field.element) || rules.length === 0 || !results.some(isInvalidRuleResult) 1633 this.showFieldState(field); 1634 resolve(field.state.valid); 1635 }) 1636 }); 1637 }, 1638 getMessagesByField(field) { 1639 const messages = []; 1640 const invalidRules = Object.keys(field.state.rules).filter(rule => isInvalidRuleResult(field.state.rules[rule])); 1641 1642 field.rules && Object.keys(field.rules).forEach((rule) => { 1643 if (invalidRules.includes(rule)) { 1644 const customMessage = field.element.getAttribute('data-msg-' + rule); 1645 const message = customMessage ? customMessage : field.state.rules[rule]; 1646 const ruleOptions = JSON.parse(JSON.stringify(field.rules[rule])); 1647 1648 if (typeof message === 'undefined' || message === null || (typeof message !== 'string' && ! message.type)) { 1649 messages.push(hyva.strf('Validation rule "%0" failed.', rule)); 1650 } else if (Array.isArray(ruleOptions)) { 1651 ruleOptions.unshift(message.type ? message.content : message); 1652 const content = hyva.strf.apply(null, ruleOptions); 1653 messages.push(message.type ? {type: message.type, content} : content); 1654 } else { 1655 const content = hyva.strf(message.type ? message.content : message, ruleOptions) 1656 messages.push(message.type ? {type: message.type, content} : content); 1657 } 1658 } 1659 }); 1660 return messages; 1661 }, 1662 /** @deprecated */ 1663 getFieldWrapper(field) { 1664 return this.getMessageContainer(field) 1665 }, 1666 getMessageContainer(field) { 1667 let container; 1668 const pageSelector = field.element.getAttribute('data-validation-container') || options.pageMessagesContainerSelector; 1669 if (pageSelector) { 1670 container = document.querySelector(pageSelector) 1671 || containerNotFound(pageSelector, field.element) 1672 } else { 1673 const containerSelector = classNamesToSelector(options.fieldWrapperClassName); 1674 container = field.element.closest(containerSelector) 1675 || createMessageContainer(field.element, options.fieldWrapperClassName) 1676 || containerNotFound(containerSelector, field.element); 1677 } 1678 1679 return container; 1680 }, 1681 showFieldState(field) { 1682 const container = this.getMessageContainer(field), 1683 hasErrorMessages = hasMessagesWrapper.call(this, field, options.messagesWrapperClassName), 1684 messages = this.getMessagesByField(field).map(m => { 1685 return m.type !== 'html' ? escapeHtml(m.type ? m.content : m) : m.content; 1686 }); 1687 container.classList.toggle(options.validClassName, field.state.valid && ! hasErrorMessages); 1688 container.classList.toggle(options.invalidClassName, !field.state.valid || hasErrorMessages); 1689 this.createHtmlErrorMessage(field, messages); 1690 1691 if (field.state.valid) { 1692 field.element.removeAttribute('aria-invalid'); 1693 } else { 1694 field.element.setAttribute('aria-invalid', 'true'); 1695 if (! document.activeElement) { 1696 field.element.focus(); 1697 } 1698 } 1699 }, 1700 removeMessages(field, messagesClass) { 1701 if (! hasMessagesWrapper.call(this, field, messagesClass || options.messagesWrapperClassName)) { 1702 return; 1703 } 1704 1705 const msgWrapper = getMessagesWrapper.call(this, field, messagesClass || options.messagesWrapperClassName); 1706 const messages = msgWrapper.querySelectorAll(`[data-msg-field='${field.element.name}']`);
1707 Array.from(messages).forEach(msg => msg.remove()); 1708 if (msgWrapper && msgWrapper.childElementCount === 0) { 1709 field.element.removeAttribute('aria-errormessage'); 1710 field.element.removeAttribute('aria-describedby'); 1711 msgWrapper.remove(); 1712 } 1713 }, 1714 createErrorMessage(field, messages) { 1715 const htmlMessages = (Array.isArray(messages) ? messages : [messages]).map(escapeHtml) 1716 this.createHtmlErrorMessage(field, htmlMessages); 1717 }, 1718 createHtmlErrorMessage(field, messages) { 1719 this.removeMessages(field, options.messagesWrapperClassName); 1720 field.element.removeAttribute('aria-errormessage'); 1721 field.element.removeAttribute('aria-describedby'); 1722 1723 if (!field.state.valid) { 1724 const msgWrapper = this.addHtmlMessages(field, options.messagesWrapperClassName, messages); 1725 field.element.setAttribute('aria-errormessage', msgWrapper.id); 1726 field.element.setAttribute('aria-describedby', msgWrapper.id); 1727 } 1728 }, 1729 /** @deprecated */ 1730 createMessage(field, message) { 1731 return this.addMessages(field, options.messagesWrapperClassName, message); 1732 }, 1733 addMessages(field, messagesClass, messages) { 1734 const htmlMessages = (Array.isArray(messages) ? messages : [messages]).map(escapeHtml) 1735 return this.addHtmlMessages(field, messagesClass, htmlMessages); 1736 }, 1737 addHtmlMessages(field, messagesClass, htmlMessages) { 1738 const msgWrapper = getMessagesWrapper.call(this, field, messagesClass); 1739 1740 (Array.isArray(htmlMessages) ? htmlMessages : [htmlMessages]).forEach((htmlMessage) => { 1741 const li = document.createElement('li'); 1742 li.innerHTML = htmlMessage; 1743 li.setAttribute('data-msg-field', field.element.name); 1744 msgWrapper.appendChild(li); 1745 }); 1746 1747 return msgWrapper; 1748 }, 1749 setField(name, value) { 1750 this.fields[name].element.value = value; 1751 this.fields[name].element.dispatchEvent((new Event('input'))); 1752 this.validateField(this.fields[name]); 1753 } 1754 } 1755 } 1756 1757 hyva.formValidation = formValidation; 1758 hyva.formValidation.rules = formValidationRules; 1759 hyva.formValidation.setInputAttributeRuleName = (attrName, ruleName) => INPUT_ATTRIBUTE_RULES[attrName] = ruleName || attrName; 1760 hyva.formValidation.setInputTypeRuleName = (typeName, ruleName) => INPUT_TYPE_RULES[typeName] = ruleName || typeName; 1761 hyva.formValidation.addRule = (name, validator) => formValidationRules[name] = validator; 1762 }(window.hyva = window.hyva || {})); 1763</script>
1763 1764 1765<div class="page-wrapper">
1765<script> 1766 function customRedirect (data) { 1767 var redirect = +data.redirect; 1768 1769 switch (redirect) { 1770 case 0: 1771 case 1: 1772 setTimeout(function () { 1773 window.location.href = data.url; 1774 }, 4000); 1775 break; 1776 default: 1777 setTimeout(function () { 1778 window.location.reload(true); 1779 }, 4000); 1780 } 1781 } 1782</script>
1782 1783
1783<script> 1784 function amLoginPopup() { 1785 return { 1786 isLoggedIn: false, 1787 options: { 1788 open: false, 1789 wrapper: false, 1790 wrapperForgot: false, 1791 tabLogin: true, 1792 tabRegister: false, 1793 selectors: { 1794 login: '#login[href*="customer/account/index"]', 1795 register: '#register[href*="customer/account/create/"]', 1796 logout: '[href*="customer/account/logout/"]', 1797 popup: '[data-am-js="am-login-popup"]', 1798 tabWrapper: '[data-am-js="am-tabs-wrapper"]', 1799 tabWrapperForgot: '[data-am-js="am-tabs-wrapper-forgot"]', 1800 contentWrapper: '[data-am-js="am-content-wrapper"]', 1801 resetPassword: '.amsl-forgot-content form#user_forgotpassword', 1802 forgot_link: '[data-am-js="am-login-popup"] a[href*="customer/account/forgotpassword"]', 1803 default_error: '[data-am-js="am-default-error"]' 1804 }, 1805 classes: { 1806 flexCenter: '-flex-center' 1807 }, 1808 redirect_duration: 2000, 1809 popup_duration: 300 1810 }, 1811 init() { 1812 var selectors = this.options.selectors; 1813 this.options.config = {"logout_url":"https:\/\/www.skintrends.com\/amsociallogin\/logout\/index\/","reset_pass_url":"https:\/\/www.skintrends.com\/customer\/account\/forgotpasswordpost\/","redirect_data":{"url":"https:\/\/www.skintrends.com\/rewards\/account\/","redirect":2},"close_when_clicked_outside":true}; 1814 var eventHandler = (event) => { 1815 this.options.wrapperForgot = true; 1816 this.options.wrapper = false;
1817 }; 1818 window.addEventListener('forgotPassword', eventHandler); 1819 1820 /** 1821 * Login Popup Event API 1822 * - open: open the form 1823 * - redirectIfLoggedIn: redirect to a page if logged in 1824 */ 1825 ['logIn', 'register'].forEach((eventName) => { 1826 window.addEventListener(eventName, (event) => { 1827 var defaultError = document.querySelectorAll(selectors.default_error); 1828 defaultError.forEach(function (element) { 1829 if (element.children.length) { 1830 element.style.display = 'none'; 1831 element.innerHTML = ''; 1832 } 1833 }); 1834 var parent = document.querySelector(selectors.contentWrapper); 1835 parent.classList.remove('amsl-login-success'); 1836 parent.innerHTML = ''; 1837 const { open, redirectIfLoggedIn } = event.detail; 1838 if (redirectIfLoggedIn && this.isLoggedIn){ 1839 window.location.href = typeof redirectIfLoggedIn === 'string' ? 1840 redirectIfLoggedIn : BASE_URL + 'customer/account/'; 1841 return; 1842 } 1843 this.options.open = open; 1844 this.options.wrapper = true; 1845 this.options.wrapperForgot = false; 1846 this.options.tabLogin = eventName === 'logIn'; 1847 this.options.tabRegister = eventName === 'register'; 1848 }); 1849 }); 1850 window.addEventListener('logOut', (event) => { 1851 this.sendLogOut(); 1852 }); 1853 this.showMore(); 1854 ['register', 'login', 'logout'].forEach(item => { 1855 const element = document.querySelector(selectors[item]); 1856 if (element) { 1857 element.addEventListener('click', event => event.preventDefault()); 1858 } 1859 }); 1860 }, 1861 sendLogOut() { 1862 var postUrl = this.options.config.logout_url + '?isAjax=true'; 1863 fetch(postUrl, { 1864 method: "POST" 1865 }).then(response => { 1866 return response.json() 1867 }).then(data => { 1868 if (data.error) { 1869 window.location.href = 'customer/account/logout/'; 1870 } else { 1871 if (data && data.message) { 1872 this.showResultPopup(data.message); 1873 setTimeout(function () { 1874 window.location.reload(true); 1875 }, this.options.redirect_duration); 1876 } else { 1877 window.location.href = 'customer/account/logout/'; 1878 } 1879 } 1880 }); 1881 }, 1882 renderMessages(response, form) { 1883 var cookieMessages = hyva.getCookie('mage-messages') ? 1884 JSON.parse(decodeURIComponent(hyva.getCookie('mage-messages'))) : []; 1885 var isError = cookieMessages.some((message) => message.type === 'error'); 1886 hyva.setCookie('mage-messages', '', -1, true); 1887 if (cookieMessages.length > 0) { 1888 if (isError) { 1889 this.showDefaultMessage(form, cookieMessages); 1890 return false; 1891 } 1892 this.showResultPopup(cookieMessages[0].text); 1893 } else if (form.classList.contains('form-login')) { 1894 if (response.ok) { 1895 this.showResultPopup('You have successfully logged in.'); 1896 } else { 1897 this.showDefaultMessage(form); 1898 return false;
1899 } 1900 } else if (form.classList.contains('form-create-account')) { 1901 this.showResultPopup('Thank you for registering with us.'); 1902 } else { 1903 this.showDefaultMessage(form); 1904 return false; 1905 } 1906 return true; 1907 }, 1908 showDefaultMessage(form, messages) { 1909 var { selectors, redirect_duration } = this.options; 1910 var popup = document.querySelector(selectors.popup); 1911 var parent = form.closest('.amsl-content').querySelector('[data-am-js="am-default-error"]'); 1912 1913 if (!popup.querySelector('.amsl-social-wrapper') && 1914 (popup.classList.contains('-social-right') || popup.classList.contains('-social-left')) 1915 ) { 1916 document.querySelector('.amsl-login-content').classList.add('-empty'); 1917 } 1918 1919 hyva.setCookie('mage-messages', '', -1, true); 1920 parent.innerHTML = ''; 1921 1922 if (messages) { 1923 messages.forEach(message => { 1924 const div = document.createElement('div'); 1925 div.innerHTML = message.text; 1926 parent.appendChild(div); 1927 }); 1928 } else { 1929 const errorMessage = document.createElement('div'); 1930 errorMessage.innerHTML = 'Sorry, an unspecified error occurred. Please try again.'; 1931 parent.appendChild(errorMessage); 1932 } 1933 1934 parent.style.display = 'block'; 1935 }, 1936 showResultPopup(message) { 1937 var parent = document.querySelector(this.options.selectors.contentWrapper); 1938 parent.classList.add('amsl-login-success'); 1939 parent.innerHTML = ''; 1940 1941 var messageDiv = document.createElement('div'); 1942 messageDiv.innerHTML = message; 1943 parent.appendChild(messageDiv); 1944 1945 this.options.open = true; 1946 const tabWrapperForgot = document.querySelector(this.options.selectors.tabWrapperForgot), 1947 tabWrapper = document.querySelector(this.options.selectors.tabWrapper); 1948 if(tabWrapper) tabWrapper.style.display = 'none'; 1949 if(tabWrapperForgot) tabWrapperForgot.style.display = 'none'; 1950 }, 1951 showMore() { 1952 var hideAfterCount = 3, 1953 socialButtonSelector = '.amsl-button-wrapper', 1954 showMoreButtonAttr = 'data-amslogin="showmore"', 1955 showMoreButtonClass = 'amsl-button-showmore', 1956 popupSelector = this.options.selectors.popup, 1957 flexCenterClass = this.options.classes.flexCenter, 1958 buttonWraps = document.querySelectorAll(`[data-amslogin="button-wrap"]`), 1959 showMoreElement = ` 1960<p class="${showMoreButtonClass}" ${showMoreButtonAttr}> 1961<span class="amsl-label">Show More<span class="amsl-arrow"></span></span> 1962</p> 1963 `; 1964 1965 for (let i = 0; i < buttonWraps.length; i++) { 1966 var buttonWrap = buttonWraps[i]; 1967 1968 if (!buttonWrap.querySelector(`[${showMoreButtonAttr}]`) && 1969 buttonWrap.children.length > hideAfterCount && 1970 buttonWrap.closest(popupSelector)) { 1971 buttonWrap.classList.add(flexCenterClass); 1972 buttonWrap.querySelector(`${socialButtonSelector}:nth-child(${hideAfterCount})`) 1973 .insertAdjacentHTML('afterend', showMoreElement); 1974 var hiddenButtons = buttonWrap 1975 .querySelectorAll(`.${showMoreButtonClass} ~${socialButtonSelector}`); 1976 for (let j = 0; j < hiddenButtons.length; j++) { 1977 hiddenButtons[j].style.display = 'none'; 1978 } 1979 } 1980 } 1981 1982 document.addEventListener('click', function(event) { 1983 var showMoreButton = event.target.closest(`[${showMoreButtonAttr}]`); 1984 if (showMoreButton) { 1985 var buttons = showMoreButton.parentNode.querySelectorAll(socialButtonSelector); 1986 showMoreButton.style.display = 'none'; 1987 for (let i = 0; i < buttons.length; i++) { 1988 buttons[i].style.display = ''; 1989 } 1990 } 1991 }); 1992 } 1993 } 1994 } 1995 1996 function sendFormWithAjax(form) { 1997 fetch(form.action.replace('customer/account', 'amsociallogin/account'), { 1998 method: "POST", 1999 body: new FormData(form) 2000 }).then(response => { 2001 if (response.ok) { 2002 var isSuccess = amLoginPopup().renderMessages(response, form); 2003 if (isSuccess && response.redirected) { 2004 window.location.href = response.url; 2005 } 2006 return response; 2007 } 2008 }).catch(error => { 2009 amLoginPopup().showDefaultMessage(form); 2010 }); 2011 } 2012 </script>
2012 2013 <div class="amsl-popup-overlay" data-am-js="am-login-overlay" 2014 x-data="amLoginPopup()" 2015 x-init="init()" 2016 @private-content-loaded.window="isLoggedIn = !!$event.detail.data.customer.signin_token" 2017 @on="$dispatch('processStart')" 2018 x-show="options.open" x-cloak> 2019 <div id="social-login-popup" 2020 class="amsl-popup-block -social-right" 2021 data-mage-init='{"tabs":{"openedState":"active"}}' 2022 tabindex="-1" 2023 data-am-js="am-login-popup"> 2024 <span class="amsl-close" @click="options.open = false"></span> 2025 <div class="amsl-content-wrapper" data-am-js="am-content-wrapper"></div> 2026 <div class="amsl-tabs-wrapper" x-show="options.wrapper" data-am-js="am-tabs-wrapper"> 2027 <ul class="amsl-tablist"> 2028 <li data-role="collapsible" class="amsl-title" data-am-js="am-popup-original"> 2029 <a data-href="#amsl-login-content" 2030 @click="options.tabLogin = true; options.tabRegister = false" 2031 class="amsl-link font-bold cursor-pointer" 2032 :class="{'active' : options.tabLogin}" 2033 data-toggle="switch" 2034 tabindex="-1">Login</a> 2035 </li> 2036 <li data-role="collapsible" class="amsl-title" data-am-js="am-popup-original"> 2037 <a data-href="#amsl-register-content" 2038 @click="options.tabLogin = false; options.tabRegister = true" 2039 class="amsl-link font-bold cursor-pointer" 2040 :class="{'active' : options.tabRegister}" 2041 data-toggle="switch" 2042 tabindex="-1">Register</a> 2043 </li> 2044 </ul> 2045 <div x-show="options.tabLogin" 2046 id="amsl-login-content" class="amsl-content amsl-login-content" data-role="content"> 2047 <p class="amsl-error -default" data-am-js="am-default-error"></p> 2048 <div class="amsl-form"> 2049 <div class="w-full pt-5 pb-3"> 2050 <div aria-labelledby="am-block-customer-login-heading"> 2051 <form class="form form-login" 2052 action="https://www.skintrends.com/customer/account/loginPost/" 2053 method="post" 2054 x-data="{...initCustomerLoginForm(), ...hyva.formValidation($el)}" 2055 @submit.prevent="submitForm()" 2056 id="customer-login-form"> 2057 <input name="form_key" type="hidden" value="hHYNuMT1BvCF79ZX" /> <fieldset class="fieldset login"> 2058 <div class="text-gray-darker text-sm mb-4"> 2059 <div class="mb-2"> 2060 If you have an account, sign in with your email address. </div> 2061 <div class="text-center"> 2062 <div class="text-center tracking-wide"> 2063 <span class="text-red-lighter font-bold">Note: </span> 2064 Accounts created prior to June 15, 2020 must change password. </div> 2065 <span>CLICK HERE: <a href="https://www.skintrends.com/customer/account/forgotpassword/"> 2066 <strong class="text-red-lighter underline"> 2067 Password Change. </strong> 2068 </a> 2069 </span> 2070 </div> 2071 </div> 2072 <div class="field email mb-5"> 2073 <label class="label" for="email"> 2074 Email <span class="text-red">*</span> 2075 </label> 2076 <div class="control items-center"> 2077 <input name="login[username]" 2078 class="form-input w-full placeholder-gray focus:placeholder-opacity-50" 2079 data-validate='{"required": true, "email": true}' 2080 value="" 2081 autocomplete="off" 2082 id="email" 2083 type="email" 2084 placeholder="Email" 2085 title="Email"/> 2086 </div> 2087 </div> 2088 <div class="field password mb-5"> 2089 <label for="am-pass" class="label">
2090 Password <span class="text-red">*</span> 2091 </label> 2092 <div class="control items-center"> 2093 <input name="login[password]" 2094 class="form-input w-full placeholder-gray focus:placeholder-opacity-50" 2095 data-validate='{"required": true}' 2096 :type="customer_form_login_popup_showPassword ? 'text' : 'password'" 2097 autocomplete="off" 2098 id="am-pass" 2099 placeholder="Password" 2100 title="Password"/> 2101 </div> 2102 </div> 2103 <div class="login-links text-right mb-9 mt-2"> 2104 <a class="text-red-lighter font-bold" 2105 @click.prevent="$dispatch('forgotPassword')" 2106 href="https://www.skintrends.com/customer/account/forgotpassword/"> 2107 Forgot Your Password? </a> 2108 <div class="font-bold text-gray-darker"> 2109 <div class="popup-video-help"> 2110 <a href="javascript:void(0)" class="show-video alink" @click.prevent="$dispatch('passResetHelp')">Password Reset Help</a> 2111</div> </div> 2112 </div> 2113 2114 <!-- BLOCK captcha_login --><!-- /BLOCK captcha_login --> <button type="submit" class="btn btn-purple justify-center disabled:opacity-75 w-full py-3 px-9" 2115 name="send" 2116 > 2117 <span>Sign In</span> 2118 </button> 2119 <div> 2120 <template x-if="displayErrorMessage"> 2121 <p class="text-red flex items-center"> 2122 <span class="inline-block w-8 h-8 mr-3"> 2123 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="24" height="24" role="img"> 2124 <path stroke-linecap="round" stroke-linejoin="round" d="M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"/> 2125</svg> 2126 </span> 2127 <template x-for="errorMessage in errorMessages"> 2128 <span x-html="errorMessage"></span> 2129 </template> 2130 </p> 2131 </template> 2132 </div> 2133 </fieldset> 2134 </form> 2135 </div> 2136 <div class="w-full"> 2137 </div> 2138
2138<script> 2139 function initCustomerLoginForm() { 2140 return { 2141 errors: 0, 2142 hasCaptchaToken: 0, 2143 customer_form_login_popup_showPassword: false, 2144 displayErrorMessage: false, 2145 errorMessages: [], 2146 setErrorMessages(messages) { 2147 this.errorMessages = [messages] 2148 this.displayErrorMessage = this.errorMessages.length 2149 }, 2150 submitForm() { 2151 this.validate() 2152 .then(() => { 2153 const $form = document.querySelector('#customer-login-form'); 2154 2155 if (this.errors === 0) { 2156 if ($form.closest('.amsl-login-content')) { 2157 return sendFormWithAjax($form); 2158 } 2159 return $form.submit(); 2160 } 2161 }) 2162 } 2163 } 2164 } 2165 </script>
2165 2166</div> 2167 </div> 2168
2168<script> 2169 function customRedirect (data) { 2170 var redirect = +data.redirect; 2171 2172 switch (redirect) { 2173 case 0: 2174 case 1: 2175 setTimeout(function () { 2176 window.location.href = data.url; 2177 }, 4000); 2178 break; 2179 default: 2180 setTimeout(function () { 2181 window.location.reload(true); 2182 }, 4000); 2183 } 2184 } 2185</script>
vendor: 1 bytes, line 2185
2185
2186<script> 2187 function amSocialLogin () { 2188 return { 2189 options: { 2190 error_selector: '', 2191 tab_wrapper: '[data-am-js="am-tabs-wrapper"]', 2192 overlay: '[data-am-js="am-login-overlay"]', 2193 content_wrapper: '[data-am-js="am-content-wrapper"]' 2194 }, 2195 init () { 2196 this.socialLoginClick(this.$el); 2197 }, 2198 socialLoginClick: function (element) { 2199 var self = this; 2200 2201 self.socialLoginObserve(element); 2202 if (window.amResult !== undefined) { 2203 return; 2204 } 2205 2206 window.amResult = function (data, context) { 2207 var parent = context.options.error_selector; 2208 if (parent) { 2209 parent.style.display = 'none'; 2210 } 2211 2212 if (data.result === 1) { 2213 var tabWrapper = document.querySelector(self.options.tab_wrapper); 2214 if (tabWrapper) { 2215 tabWrapper.style.display = 'none'; 2216 } 2217 2218 parent = document.querySelector(self.options.content_wrapper); 2219 if (parent) { 2220 parent.classList.add('amsl-login-success'); 2221 } 2222 2223 var overlay = document.querySelector(self.options.overlay); 2224 if (overlay) { 2225 overlay.style.display = 'block'; 2226 } 2227 2228 if (parent) { 2229 self.renderMessages(parent, data); 2230 } 2231 2232 customRedirect(data.redirect_data); 2233 } else { 2234 parent = context.options.error_selector; 2235 if (parent) { 2236 self.renderMessages(parent, data); 2237 } 2238 2239 if (data.redirect_data && data.redirect_data.redirectWithError) { 2240 customRedirect(data.redirect_data); 2241 } 2242 } 2243 }; 2244 }, 2245 renderMessages(element, data) { 2246 element.innerHTML = ''; 2247 data.messages.forEach(function (message) { 2248 var div = document.createElement('div'); 2249 div.innerHTML = message; 2250 element.appendChild(div); 2251 }); 2252 element.style.display = 'block'; 2253 }, 2254 socialLoginObserve: function (element) { 2255 var self = this, 2256 href = element.getAttribute('data-href'); 2257 element.addEventListener('click', handleClick); 2258 function handleClick(event) { 2259 self.options.error_selector = event.target.closest('.amsl-social-login') 2260 .querySelector('[data-am-js="am-social-error"]'); 2261 window.addEventListener("message", function(event) { 2262 if (event.data['redirect_data']) { 2263 window.amResult(event.data, this); 2264 } 2265 }.bind(self)); 2266 window.open( 2267 href, 2268 event.currentTarget.title, 2269 self.getPopupParams() 2270 ); 2271 event.stopPropagation(); 2272 event.preventDefault(); 2273 2274 return false; 2275 } 2276 }, 2277 getPopupParams: function (w, h, l, t) { 2278 var screenX = typeof window.screenX !== 'undefined' ? window.screenX : window.screenLeft, 2279 screenY = typeof window.screenY !== 'undefined' ? window.screenY : window.screenTop, 2280 outerWidth = typeof window.outerWidth !== 'undefined' ? 2281 window.outerWidth : document.body.clientWidth, 2282 outerHeight = typeof window.outerHeight !== 'undefined' ? 2283 window.outerHeight : (document.body.clientHeight - 22), 2284 width = w ? w : 500, 2285 height = h ? h : 420, 2286 left = l ? l : parseInt(screenX + ((outerWidth - width) / 2), 10), 2287 top = t ? t : parseInt(screenY + ((outerHeight - height) / 2.5), 10); 2288 return ( 2289 'width=' + width + 2290 ',height=' + height + 2291 ',left=' + left + 2292 ',top=' + top 2293 ); 2294 } 2295 } 2296 } 2297</script>
2297 2298 <span class="amsl-separator"> 2299 <span class="amsl-icon">or</span> 2300 </span> 2301 <div class="amsl-social-wrapper"> 2302 <div class="amsl-social-login "> 2303 <p class="amsl-error -social" data-am-js="am-social-error"></p> 2304 <span class="amsl-title">Register or Login with your tech account</span> 2305 <span class="amsl-title -short">Login with</span> 2306 <div class="amsl-buttons" data-amslogin="button-wrap"> 2307 <div class="amsl-button-wrapper pb-2 "> 2308 <form method="POST" 2309 action="https://www.skintrends.com/amsociallogin/social/login/?type=paypal" 2310 class="amsl-button-form" 2311 aria-label="Sign in with Paypal" 2312 x-on:submit="socialLoginClick" 2313 > 2314 <input name="form_key" type="hidden" value="hXnnPDGPBtAQVQ1v" /> <button 2315 type="submit" 2316 class="amsl-button rounded-full overflow-hidden bg-white 2317 shadow-md hover:shadow-lg transition-amsl-social-button 2318 block w-16 h-16 -paypal " 2319 title="Sign in with Paypal" 2320 > 2321 <span 2322 class="amsl-social-icon pointer-events-none 2323 " role="img" 2324 aria-label="Sign in with Paypal" 2325 > 2326 <span class="amsl-social-icon"></span> 2327 </span> 2328 </button> 2329 </form> 2330 </div> 2331 <div class="amsl-button-wrapper pb-2 "> 2332 <form method="POST" 2333 action="https://www.skintrends.com/amsociallogin/social/login/?type=facebook" 2334 class="amsl-button-form" 2335 aria-label="Sign in with Facebook" 2336 x-on:submit="socialLoginClick" 2337 > 2338 <input name="form_key" type="hidden" value="hXnnPDGPBtAQVQ1v" /> <button 2339 type="submit" 2340 class="amsl-button rounded-full overflow-hidden bg-white 2341 shadow-md hover:shadow-lg transition-amsl-social-button 2342 block w-16 h-16 -facebook " 2343 title="Sign in with Facebook" 2344 > 2345 <span 2346 class="amsl-social-icon pointer-events-none 2347 " role="img" 2348 aria-label="Sign in with Facebook" 2349 > 2350 <span class="amsl-social-icon"></span> 2351 </span> 2352 </button> 2353 </form> 2354 </div> 2355 <div class="amsl-button-wrapper pb-2 "> 2356 <form method="POST" 2357 action="https://www.skintrends.com/amsociallogin/social/login/?type=google" 2358 class="amsl-button-form" 2359 aria-label="Sign in with Google" 2360 x-on:submit="socialLoginClick" 2361 > 2362 <input name="form_key" type="hidden" value="hXnnPDGPBtAQVQ1v" /> <button 2363 type="submit" 2364 class="amsl-button rounded-full overflow-hidden bg-white 2365 shadow-md hover:shadow-lg transition-amsl-social-button 2366 block w-16 h-16 -google " 2367 title="Sign in with Google" 2368 >
2369 <span 2370 class="amsl-social-icon pointer-events-none 2371 " role="img" 2372 aria-label="Sign in with Google" 2373 > 2374 <span class="amsl-social-icon"></span> 2375 </span> 2376 </button> 2377 </form> 2378 </div> 2379 <div class="amsl-button-wrapper pb-2 "> 2380 <form method="POST" 2381 action="https://www.skintrends.com/amsociallogin/social/login/?type=apple" 2382 class="amsl-button-form" 2383 aria-label="Sign in with Apple" 2384 x-on:submit="socialLoginClick" 2385 > 2386 <input name="form_key" type="hidden" value="hXnnPDGPBtAQVQ1v" /> <button 2387 type="submit" 2388 class="amsl-button rounded-full overflow-hidden bg-white 2389 shadow-md hover:shadow-lg transition-amsl-social-button 2390 block w-16 h-16 -apple " 2391 title="Sign in with Apple" 2392 > 2393 <span 2394 class="amsl-social-icon pointer-events-none 2395 " role="img" 2396 aria-label="Sign in with Apple" 2397 > 2398 <span class="amsl-social-icon"></span> 2399 </span> 2400 </button> 2401 </form> 2402 </div> 2403 <div class="amsl-button-wrapper pb-2 "> 2404 <form method="POST" 2405 action="https://www.skintrends.com/amsociallogin/social/login/?type=amazon" 2406 class="amsl-button-form" 2407 aria-label="Sign in with Amazon" 2408 x-on:submit="socialLoginClick" 2409 > 2410 <input name="form_key" type="hidden" value="hXnnPDGPBtAQVQ1v" /> <button 2411 type="submit" 2412 class="amsl-button rounded-full overflow-hidden bg-white 2413 shadow-md hover:shadow-lg transition-amsl-social-button 2414 block w-16 h-16 -amazon " 2415 title="Sign in with Amazon" 2416 > 2417 <span 2418 class="amsl-social-icon pointer-events-none 2419 " role="img" 2420 aria-label="Sign in with Amazon" 2421 > 2422 <span class="amsl-social-icon"></span> 2423 </span> 2424 </button> 2425 </form> 2426 </div> 2427 </div> 2428 </div> 2429 </div> 2430 </div> 2431 <template x-if="options.tabRegister"> 2432 <div x-show="options.tabRegister"
2433 id="amsl-register-content" class="amsl-content amsl-register-content" data-role="content"> 2434 <p class="amsl-error -default" data-am-js="am-default-error"></p> 2435 <div class="amsl-form"> 2436 <div class="mb-20 w-full"> 2437 <form class="form md:card create account form-create-account" 2438 action="https://www.skintrends.com/customer/account/createpost/" 2439 x-data="{...initForm(), ...hyva.formValidation($el)}" 2440 id="popup-create-account" 2441 @submit.prevent="submitForm()" 2442 method="post" id="form-validate" enctype="multipart/form-data" autocomplete="off"> 2443 <input name="form_key" type="hidden" value="hHYNuMT1BvCF79ZX" /> <div> 2444 <fieldset class="grid md:grid-cols-2 gap-4 md:mt-3"> 2445 <input type="hidden" name="success_url" value=""> 2446 <input type="hidden" name="error_url" value=""> 2447 <div class="field field-reserved w-full field-name-firstname required"> 2448 <label class="label" for="firstname"> 2449 First Name </label> 2450 <div class="control"> 2451 <input type="text" id="firstname" 2452 name="firstname" 2453 value="" 2454 title="First Name" 2455 class="form-input w-full required-entry" 2456 required > 2457 </div> 2458 </div> 2459 <div class="field field-reserved w-full field-name-lastname required"> 2460 <label class="label" for="lastname"> 2461 Last Name </label> 2462 <div class="control"> 2463 <input type="text" id="lastname" 2464 name="lastname" 2465 value="" 2466 title="Last Name" 2467 class="form-input w-full required-entry" 2468 required > 2469 </div> 2470 </div> 2471 2472 2473 2474 </fieldset> 2475 <fieldset class="my-0"> 2476 <div class="field-email required mb-2"> 2477 <label for="am-email-address" class="label"> 2478 Email <span class="text-red">*</span> 2479 </label> 2480 <div class="control"> 2481 <input type="email" name="email" autocomplete="email" 2482 id="am-email-address" data-validate='{"required": true}' 2483 value="" 2484 title="Email" class="form-input w-full rounded" /> 2485 </div> 2486 </div> 2487 <div class="field choice newsletter"> 2488 <input type="checkbox" name="is_subscribed" 2489 title="Sign Up for Newsletter" value="1" 2490 id="is_subscribed" 2491 class="checkbox"> 2492 <span> 2493 Sign Up for Newsletter </span> 2494 </div> 2495 <div class="field field-reserved"> 2496 <label for="password" class="label"> 2497 Password <span class="text-red">*</span> 2498 </label> 2499 <div class="control"> 2500 <input type="password" name="password" id="password" 2501 x-ref="password" 2502 title="Password" 2503 class="form-input w-full rounded" 2504 data-validate='{ 2505 "password-strength": { 2506 "minCharacterSets": 3, 2507 "minlength": 8 } 2508 }'
2509 @input="onChange" 2510 autocomplete="off"> 2511 <div id="password-strength-meter-container" 2512 data-role="password-strength-meter" aria-live="polite"> 2513 <div id="password-strength-meter" class="password-strength-meter"> 2514 Password Strength: 2515 <span id="password-strength-meter-label" class="password-strength-meter-label ml-1"> 2516 No Password </span> 2517 </div> 2518 </div> 2519 </div> 2520 </div> 2521 <div class="field-password mb-6"> 2522 <label for="password-confirmation" class="label"> 2523 Confirm Password <span class="text-red">*</span> 2524 </label> 2525 <div class="control"> 2526 <input type="password" 2527 name="password_confirmation" 2528 title="Confirm Password" 2529 id="password-confirmation" 2530 data-validate='{"required": true, "confirmPassword": "password"}' 2531 minlength="8" 2532 class="form-input w-full rounded" 2533 autocomplete="off"> 2534 </div> 2535 </div> 2536 2537 <!-- BLOCK captcha_create --><!-- /BLOCK captcha_create --> </fieldset> 2538 <div class="create-account-text col-span-2"> 2539 <div> 2540 <strong>By creating an account, you'll be able to:</strong> 2541 <ul class="list-disc pl-10 mt-2 mb-6"> 2542 <li class="mb-2">Find login required discount coupons on brand/product pages.</li> 2543 <li class="mb-2">View order status/history and manage wishlist.</li> 2544 <li class="mb-2">View and manage your reward points.</li> 2545 </ul> 2546 <span> 2547 <strong>Note: </strong>Account creation simply requires name, email, password. </span> 2548 </div> 2549 </div> 2550 </div> 2551 2552 <button type="submit" class="action submit btn btn-purple w-full md:w-auto m-auto 2553 justify-center tracking-wider px-10 py-3 disabled:opacity-75 mt-8" 2554 title="Create an Account" 2555 > 2556 <span>Create an Account</span> 2557 </button> 2558 </form> 2559
2559<script> 2560 function initForm() { 2561 return { 2562 errors: 0, 2563 hasCaptchaToken: 0, 2564 submitForm() { 2565 this.$refs.password.required = true; 2566 this.validate() 2567 .then(() => { 2568 // Do not rename $form, the variable is expected to be declared in the recaptcha output 2569 const $form = document.querySelector('#popup\u002Dcreate\u002Daccount'); 2570 2571 if (this.errors === 0) { 2572 if ($form.closest('.amsl-register-content')) { 2573 return sendFormWithAjax($form); 2574 } 2575 return $form.submit(); 2576 } 2577 }) 2578 2579 }, 2580 } 2581 } 2582 </script>
2582 2583</div> 2584 </div> 2585
2585<script> 2586 function customRedirect (data) { 2587 var redirect = +data.redirect; 2588 2589 switch (redirect) { 2590 case 0: 2591 case 1: 2592 setTimeout(function () { 2593 window.location.href = data.url; 2594 }, 4000); 2595 break; 2596 default: 2597 setTimeout(function () { 2598 window.location.reload(true); 2599 }, 4000); 2600 } 2601 } 2602</script>
vendor: 1 bytes, line 2602
2602
2603<script> 2604 function amSocialLogin () { 2605 return { 2606 options: { 2607 error_selector: '', 2608 tab_wrapper: '[data-am-js="am-tabs-wrapper"]', 2609 overlay: '[data-am-js="am-login-overlay"]', 2610 content_wrapper: '[data-am-js="am-content-wrapper"]' 2611 }, 2612 init () { 2613 this.socialLoginClick(this.$el); 2614 }, 2615 socialLoginClick: function (element) { 2616 var self = this; 2617 2618 self.socialLoginObserve(element); 2619 if (window.amResult !== undefined) { 2620 return; 2621 } 2622 2623 window.amResult = function (data, context) { 2624 var parent = context.options.error_selector; 2625 if (parent) { 2626 parent.style.display = 'none'; 2627 } 2628 2629 if (data.result === 1) { 2630 var tabWrapper = document.querySelector(self.options.tab_wrapper); 2631 if (tabWrapper) { 2632 tabWrapper.style.display = 'none'; 2633 } 2634 2635 parent = document.querySelector(self.options.content_wrapper); 2636 if (parent) { 2637 parent.classList.add('amsl-login-success'); 2638 } 2639 2640 var overlay = document.querySelector(self.options.overlay); 2641 if (overlay) { 2642 overlay.style.display = 'block'; 2643 } 2644 2645 if (parent) { 2646 self.renderMessages(parent, data); 2647 } 2648 2649 customRedirect(data.redirect_data); 2650 } else { 2651 parent = context.options.error_selector; 2652 if (parent) { 2653 self.renderMessages(parent, data); 2654 } 2655 2656 if (data.redirect_data && data.redirect_data.redirectWithError) { 2657 customRedirect(data.redirect_data); 2658 } 2659 } 2660 }; 2661 }, 2662 renderMessages(element, data) { 2663 element.innerHTML = ''; 2664 data.messages.forEach(function (message) { 2665 var div = document.createElement('div'); 2666 div.innerHTML = message; 2667 element.appendChild(div); 2668 }); 2669 element.style.display = 'block'; 2670 }, 2671 socialLoginObserve: function (element) { 2672 var self = this, 2673 href = element.getAttribute('data-href'); 2674 element.addEventListener('click', handleClick); 2675 function handleClick(event) { 2676 self.options.error_selector = event.target.closest('.amsl-social-login') 2677 .querySelector('[data-am-js="am-social-error"]'); 2678 window.addEventListener("message", function(event) { 2679 if (event.data['redirect_data']) { 2680 window.amResult(event.data, this); 2681 } 2682 }.bind(self)); 2683 window.open( 2684 href, 2685 event.currentTarget.title, 2686 self.getPopupParams() 2687 ); 2688 event.stopPropagation(); 2689 event.preventDefault(); 2690 2691 return false; 2692 } 2693 }, 2694 getPopupParams: function (w, h, l, t) { 2695 var screenX = typeof window.screenX !== 'undefined' ? window.screenX : window.screenLeft, 2696 screenY = typeof window.screenY !== 'undefined' ? window.screenY : window.screenTop, 2697 outerWidth = typeof window.outerWidth !== 'undefined' ? 2698 window.outerWidth : document.body.clientWidth, 2699 outerHeight = typeof window.outerHeight !== 'undefined' ? 2700 window.outerHeight : (document.body.clientHeight - 22), 2701 width = w ? w : 500, 2702 height = h ? h : 420, 2703 left = l ? l : parseInt(screenX + ((outerWidth - width) / 2), 10), 2704 top = t ? t : parseInt(screenY + ((outerHeight - height) / 2.5), 10); 2705 return ( 2706 'width=' + width + 2707 ',height=' + height + 2708 ',left=' + left + 2709 ',top=' + top 2710 ); 2711 } 2712 } 2713 } 2714</script>
2714 2715 <span class="amsl-separator"> 2716 <span class="amsl-icon">or</span> 2717 </span> 2718 <div class="amsl-social-wrapper"> 2719 <div class="amsl-social-login "> 2720 <p class="amsl-error -social" data-am-js="am-social-error"></p> 2721 <span class="amsl-title">Register or Login with your tech account</span> 2722 <span class="amsl-title -short">Login with</span> 2723 <div class="amsl-buttons" data-amslogin="button-wrap"> 2724 <div class="amsl-button-wrapper pb-2 "> 2725 <form method="POST" 2726 action="https://www.skintrends.com/amsociallogin/social/login/?type=paypal" 2727 class="amsl-button-form" 2728 aria-label="Sign in with Paypal" 2729 x-on:submit="socialLoginClick" 2730 > 2731 <input name="form_key" type="hidden" value="hXnnPDGPBtAQVQ1v" /> <button 2732 type="submit" 2733 class="amsl-button rounded-full overflow-hidden bg-white 2734 shadow-md hover:shadow-lg transition-amsl-social-button 2735 block w-16 h-16 -paypal " 2736 title="Sign in with Paypal" 2737 > 2738 <span 2739 class="amsl-social-icon pointer-events-none 2740 " role="img" 2741 aria-label="Sign in with Paypal" 2742 > 2743 <span class="amsl-social-icon"></span> 2744 </span> 2745 </button> 2746 </form> 2747 </div> 2748 <div class="amsl-button-wrapper pb-2 "> 2749 <form method="POST" 2750 action="https://www.skintrends.com/amsociallogin/social/login/?type=facebook" 2751 class="amsl-button-form" 2752 aria-label="Sign in with Facebook" 2753 x-on:submit="socialLoginClick" 2754 > 2755 <input name="form_key" type="hidden" value="hXnnPDGPBtAQVQ1v" /> <button 2756 type="submit" 2757 class="amsl-button rounded-full overflow-hidden bg-white 2758 shadow-md hover:shadow-lg transition-amsl-social-button 2759 block w-16 h-16 -facebook " 2760 title="Sign in with Facebook" 2761 > 2762 <span 2763 class="amsl-social-icon pointer-events-none 2764 " role="img" 2765 aria-label="Sign in with Facebook" 2766 > 2767 <span class="amsl-social-icon"></span> 2768 </span> 2769 </button> 2770 </form> 2771 </div> 2772 <div class="amsl-button-wrapper pb-2 "> 2773 <form method="POST" 2774 action="https://www.skintrends.com/amsociallogin/social/login/?type=google" 2775 class="amsl-button-form" 2776 aria-label="Sign in with Google" 2777 x-on:submit="socialLoginClick" 2778 > 2779 <input name="form_key" type="hidden" value="hXnnPDGPBtAQVQ1v" /> <button 2780 type="submit" 2781 class="amsl-button rounded-full overflow-hidden bg-white 2782 shadow-md hover:shadow-lg transition-amsl-social-button 2783 block w-16 h-16 -google " 2784 title="Sign in with Google" 2785 >
2786 <span 2787 class="amsl-social-icon pointer-events-none 2788 " role="img" 2789 aria-label="Sign in with Google" 2790 > 2791 <span class="amsl-social-icon"></span> 2792 </span> 2793 </button> 2794 </form> 2795 </div> 2796 <div class="amsl-button-wrapper pb-2 "> 2797 <form method="POST" 2798 action="https://www.skintrends.com/amsociallogin/social/login/?type=apple" 2799 class="amsl-button-form" 2800 aria-label="Sign in with Apple" 2801 x-on:submit="socialLoginClick" 2802 > 2803 <input name="form_key" type="hidden" value="hXnnPDGPBtAQVQ1v" /> <button 2804 type="submit" 2805 class="amsl-button rounded-full overflow-hidden bg-white 2806 shadow-md hover:shadow-lg transition-amsl-social-button 2807 block w-16 h-16 -apple " 2808 title="Sign in with Apple" 2809 > 2810 <span 2811 class="amsl-social-icon pointer-events-none 2812 " role="img" 2813 aria-label="Sign in with Apple" 2814 > 2815 <span class="amsl-social-icon"></span> 2816 </span> 2817 </button> 2818 </form> 2819 </div> 2820 <div class="amsl-button-wrapper pb-2 "> 2821 <form method="POST" 2822 action="https://www.skintrends.com/amsociallogin/social/login/?type=amazon" 2823 class="amsl-button-form" 2824 aria-label="Sign in with Amazon" 2825 x-on:submit="socialLoginClick" 2826 > 2827 <input name="form_key" type="hidden" value="hXnnPDGPBtAQVQ1v" /> <button 2828 type="submit" 2829 class="amsl-button rounded-full overflow-hidden bg-white 2830 shadow-md hover:shadow-lg transition-amsl-social-button 2831 block w-16 h-16 -amazon " 2832 title="Sign in with Amazon" 2833 > 2834 <span 2835 class="amsl-social-icon pointer-events-none 2836 " role="img" 2837 aria-label="Sign in with Amazon" 2838 > 2839 <span class="amsl-social-icon"></span> 2840 </span> 2841 </button> 2842 </form> 2843 </div> 2844 </div> 2845 </div> 2846 </div> 2847 </div> 2848 </template> 2849 </div> 2850 <template x-if="options.wrapperForgot"> 2851 <div class="amsl-tabs-wrapper forgot" x-show="options.wrapperForgot" 2852 data-am-js="am-tabs-wrapper-forgot"> 2853 <ul class="amsl-tablist"> 2854 <li class="amsl-title font-bold">
2855 <a href="#amsl-forgot-content" class="amsl-link"> 2856 Forgot Your Password? </a> 2857 </li> 2858 </ul> 2859 <div id="amsl-forgot-content" class="amsl-content amsl-forgot-content"> 2860 <p class="amsl-error -default" data-am-js="am-default-error"></p> 2861 <div class="amsl-form"> 2862 <div class="container-for-got-password mb-16"> 2863 <div class="w-full md:card"> 2864 <form action="https://www.skintrends.com/customer/account/forgotpasswordpost/" 2865 method="post" 2866 id="popup_forgotpassword" 2867 x-data="Object.assign(initPasswordForm(), hyva.formValidation($el))" 2868 x-on:submit.prevent="submitForm()" 2869 x-on:amrecaptcha-executable-callback="originalSubmitForm()" 2870 > 2871 <input name="form_key" type="hidden" :value="hyva.getFormKey()"> 2872 <input type="hidden" name="formId" value="popup_forgotpassword"/> 2873 <fieldset class="fieldset"> 2874 <div class="text-center mb-5 md:mb-8"> 2875 <div class="text-gray-darker tracking-wider w-full"> 2876 Enter your email address below and click Reset My Password. </div> 2877 <div class="text-green font-bold w-full"> 2878 Youâll receive an email with a link to reset your password. </div> 2879 </div> 2880 <div class="field email"> 2881 <label for="email_address" class="label"> 2882 Email <span class="text-red">*</span> 2883 </label> 2884 <div class="control"> 2885 <input type="email" name="email" alt="email" id="email_address" 2886 class="form-input w-full" data-validate='{"required": true, "email": true}' 2887 value=""> 2888 </div> 2889 </div> 2890 </fieldset> 2891 <button type="submit" class="w-full justify-center md:w-auto action btn btn-purple mt-8 2892 mx-auto h-12 px-12 submit disabled:opacity-75" > 2893 <span>Reset My Password</span> 2894 </button> 2895 </form> 2896
2896<script> 2897 function initPasswordForm() { 2898 return { 2899 errors: 0, 2900 hasCaptchaToken: 0, 2901 submitForm() { 2902 this.validate() 2903 .then(() => { 2904 if (window.amRecaptchaModel?.execute) 2905 amRecaptchaModel.execute(this.$event); 2906 else this.originalSubmitForm(); 2907 }) 2908 }, 2909 originalSubmitForm() { 2910 const $form = document.querySelector('#popup_forgotpassword'); 2911 if (this.errors === 0) { 2912 if ($form.closest('.amsl-forgot-content')) { 2913 return this.resetPasswordRequest($form); 2914 } 2915 return $form.submit(); 2916 } 2917 }, 2918 resetPasswordRequest(form) { 2919 fetch(form.action, { 2920 method: 'POST', 2921 body: new FormData(form) 2922 }).then(response => { 2923 amLoginPopup().renderMessages(response, form); 2924 return response; 2925 }).catch(error => console.error(error)); 2926 2927 }, 2928 } 2929 } 2930 </script>
2930 2931 </div> 2932</div> 2933 </div> 2934 </div> 2935 </div> 2936 </template> 2937 </div> 2938 </div> 2939
2939<script> 2940 hyva.formValidation.addRule('confirmPassword', function(value, options, field, context) { 2941 const dependencyField = context.fields[options].element; 2942 if (value !== dependencyField.value && value) { 2943 const dependencyFieldName = dependencyField.label || dependencyField.title || dependencyField.name; 2944 return hyva.strf('Please\u0020enter\u0020the\u0020same\u0020value\u0020again.', dependencyFieldName); 2945 } 2946 return true; 2947 }); 2948 2949 hyva.formValidation.addRule('email', function(value, options, field, context) { 2950 const rule = /^([a-z0-9,!\#\$%&'\*\+\/=\?\^_`\{\|\}~-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z0-9,!\#\$%&'\*\+\/=\?\^_`\{\|\}~-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*@([a-z0-9-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z0-9-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*\.(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]){2,})$/i; 2951 if (value.length > 0 && !rule.test(value)) { 2952 return 'Please\u0020enter\u0020a\u0020valid\u0020email\u0020address\u0020\u0028Ex\u003A\u0020johndoe\u0040domain.com\u0029.'; 2953 } 2954 return true; 2955 }); 2956</script>
2956 2957 2958 2959<header id="ammenu-header-container" class="ammenu-header-container page-header z-50 relative min-h-[64px] mb-0"><a class="action skip sr-only focus:not-sr-only focus:absolute focus:z-40 focus:bg-white 2960 contentarea" 2961 href="#contentarea"> 2962 <span> 2963 Skip to Content </span> 2964</a> 2965<div class="logo-mobile-wrapper"><div class="order-1 sm:order-2 lg:order-1 w-full pb-2 sm:w-auto sm:pb-0 md:hidden"> 2966 <a class="flex items-center justify-center text-xl font-medium tracking-wide text-gray-800 2967 no-underline hover:no-underline font-title" 2968 href="https://www.skintrends.com/" 2969 title="Skin Trends Skincare & Cosmetics" 2970 aria-label="store logo"> 2971 <img class="w-[250px] h-[75px] md:w-[294px] md:h-[88px]" 2972 src="https://www.skintrends.com/media/logo/websites/1/logo.png" 2973 title="Skin Trends Skincare & Cosmetics" 2974 alt="Skin Trends Skincare & Cosmetics" 2975 width="250" height="75" /> 2976<!-- --> </a> 2977</div> 2978</div><div class="header content border-b border-solid border-gray-darker bg-container-darker mb-0 mb-hidden flex items-center relative sx:hidden">
2978<script> 2979 function initCompareHeader() { 2980 return { 2981 compareProducts: null, 2982 itemCount: 0, 2983 receiveCompareData(data) { 2984 if (data['compare-products']) { 2985 this.compareProducts = data['compare-products']; 2986 this.itemCount = this.compareProducts.count; 2987 } 2988 } 2989 } 2990 } 2991</script>
2991 2992<div class="header-container max-w-[1170px] lg:mx-auto flex lg:flex-wrap 2993items-center justify-end w-full pl-6 md:pr-3 py-3 mx-auto mt-0"> 2994 <!--Compare Icon--> 2995 <div class="amtheme-compare-link" x-data="initCompareHeader()" 2996 @private-content-loaded.window="receiveCompareData($event.detail.data)"> 2997 <template x-if="itemCount > 0"> 2998 <a class="amtheme-link compare relative flex mr-5 group header-general-notice" 2999 href="https://www.skintrends.com/catalog/product_compare/index/" 3000 title="Compare Products" 3001 > 3002 <svg viewBox="0 0 30 30" id="icon-compare" 3003 class="w-6 text-transparent fill-purple group-hover:opacity-70"> 3004 <path d="M3.5 9v17.5h17v-6h6l.5-17H9V9H3.5z" fill="currentColor"> 3005 </path> 3006 <path fill-rule="evenodd" clip-rule="evenodd" 3007 d="M2.5 10.098c0-.948.768-1.716 1.716-1.716h15.686c.947 0 1.716.768 1.716 3008 1.716v15.686c0 .948-.768 1.716-1.716 1.716H4.216A1.716 1.716 0 012.5 3009 25.784V10.098zm1.716-.245a.245.245 0 00-.245.245v15.686c0 3010 .136.11.245.245.245h15.686c.135 0 .245-.11.245-.245V10.098a.245.245 0 3011 00-.245-.245H4.216z"> 3012 </path> 3013 <path fill-rule="evenodd" clip-rule="evenodd" 3014 d="M8.382 4.216c0-.948.768-1.716 1.716-1.716h15.686c.948 0 1.716.768 1.716 3015 1.716v15.686c0 .947-.768 1.716-1.716 1.716h-4.902v-1.47h4.902c.136 0 3016 .245-.11.245-.246V4.216a.245.245 0 00-.245-.245H10.098a.245.245 0 3017 00-.245.245v4.902h-1.47V4.216z"> 3018 </path> 3019 </svg> 3020 <span class="uppercase font-normal md:text-[11px] group-hover:text-purple pl-1"> 3021 Compare </span> 3022 <span class="absolute top-1 -right-1 h-5 p-1 -mt-5 -mr-4 text-xs 3023 font-bold group-hover:text-purple leading-none text-center text-black 3024 uppercase transform -translate-x-1 translate-y-1/2 rounded-full" 3025 > 3026 <span x-text="itemCount"></span> 3027 <span x-show="itemCount === 1" class="sr-only"> 3028 item </span> 3029 <span x-show="itemCount > 1" class="sr-only"> 3030 items </span> 3031 </span> 3032 </a> 3033 </template> 3034 </div> 3035
3035<script> 3036 "use strict"; 3037 function initComponent() { 3038 return { 3039 cart: false, 3040 customer: { 3041 fullname: "" 3042 }, 3043 receiveCustomerData: function receiveCustomerData(data){ 3044 this.$refs.contentWrapper && (this.$refs.contentWrapper.style.minWidth = '0px'); 3045 if (data.cart) { 3046 this.cart = data.cart; 3047 } 3048 if (data.customer) { 3049 this.customer = data.customer; 3050 } 3051 } 3052 } 3053 } 3054</script>
3054 3055 3056<div class="block px-4 py-0 uppercase font-normal md:text-[11px]" x-data="initComponent()" 3057 @private-content-loaded.window="receiveCustomerData(event.detail.data)" 3058> 3059 <span x-text="customer.fullname ? hyva.str('Welcome, %1', customer.fullname) 3060 : 'Welcome to Skin Trends'">Welcome to Skin Trends</span> 3061</div> 3062 3063 <div class="blog-link uppercase font-normal md:text-[11px] hover:text-purple"> 3064 <a class="px-4 py-0 border-l-gray border-l border-solid" 3065 href="https://www.skintrends.com/blog/">Blog</a> 3066 </div> 3067 3068 <!--Customer Icon & Dropdown--> 3069 3070<div x-data="{ open: false, customerData: {} }" class="relative inline-block" 3071 @keyup.escape="open = false" 3072 @click.outside="open = false" 3073 @private-content-loaded.window="customerData = $event.detail.data"> 3074 <div class="flex"> 3075 <a class="block px-4 py-0 uppercase font-normal md:text-[11px] hover:text-purple border-l-gray border-l border-solid" 3076 title="Login" aria-label="Login" 3077 onclick="hyva.setCookie && hyva.setCookie( 3078 'login_redirect', 3079 window.location.href, 3080 1 3081 )" 3082 @click="$dispatch('logIn', { open: true })" 3083 id="login" 3084 href="https://www.skintrends.com/customer/account/index/"> 3085 Login </a> 3086 <a class="block px-4 py-0 uppercase font-normal md:text-[11px] 3087 hover:text-purple border-l-gray border-l border-solid" 3088 id="register" 3089 @click="$dispatch('register', { open: true })" 3090 href="https://www.skintrends.com/customer/account/create/" 3091 > 3092 Create an Account </a> 3093 </div> 3094 3095</div> 3096</div> 3097</div>
3097<script> 3098 function initHeader () { 3099 return { 3100 mobileCheck: window.matchMedia('(max-width: 767px)').matches, 3101 searchOpenInput: !window.matchMedia('(max-width: 767px)').matches, 3102 cart: {}, 3103 getData(data) { 3104 if (data.cart) { this.cart = data.cart } 3105 }, 3106 openSearch() { 3107 if (this.mobileCheck) { 3108 return this.searchOpenInput =!this.searchOpenInput; 3109 } else { 3110 return this.searchOpenInput = true; 3111 } 3112 } 3113 } 3114 } 3115 3116</script>
3116 3117<div id="header" 3118 class="header-container max-w-[1170px] mx-auto relative w-full md:py-10" 3119 style="min-height: 58px;" 3120 x-data="initHeader()" 3121 @keyup.escape="searchOpenInput = !window.matchMedia('(max-width: 767px)').matches" 3122 @click.outside="searchOpenInput = !window.matchMedia('(max-width: 767px)').matches" 3123 @private-content-loaded.window="getData(event.detail.data)" 3124> 3125 <div class="content-wrapper container flex flex-row items-center 3126 justify-between md:w-full mx-auto mt-0 sx:relative"> 3127 <!--Logo--> 3128 <div class="lg:hidden" x-data="initComponentMobileCheck()" x-init="init()" style="min-height: 64px; min-width: 64px;"> 3129 <template x-if="isMobile"> 3130 <div class="mobile-menu"> 3131 <style> 3132 .megamenu .bg-menu { 3133 background-color: #F4F4F4; 3134 } 3135 </style> 3136 <div x-data="initMenuMobile_6ac3e9a5f10fb()" 3137 x-init="buildCollapse(megaMenu.data); buildNodes(megaMenu.data);" 3138 class="z-20 navigation lg:hidden megamenu" 3139 > 3140 <!-- mobile --> 3141 <a @click.stop="$dispatch('toggle-mobile-menu')" 3142 class="flex items-center justify-center cursor-pointer" 3143 :class="{ 'ml-auto': open }"> 3144 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="p-3 text-purple" width="64" height="64" :class="{ 'opacity-0' : open, 'opacity-100': !open }" role="img"> 3145 <path stroke-linecap="round" stroke-linejoin="round" d="M4 6h16M4 12h16M4 18h16"/> 3146</svg> 3147 </a> 3148 <div x-cloak x-show.transition.opacity="open" 3149 class="bg-white bg-opacity-60 fixed w-screen h-screen inset-0 z-[5]"></div> 3150 <div x-cloak @load.window="setActiveMenu($el)" 3151 class="bg-container-lighter transition-transform w-full h-screen 3152 overflow-x-hidden overflow-y-auto fixed inset-0 shadow-md z-[5]" 3153 :class="{'translate-x-0' : open, '-translate-x-full': !open}" 3154 style="max-width: 300px" 3155 @toggle-mobile-menu.window="open = !open; !contentShowed && renderCollapse(); contentShowed = true;" 3156 @keydown.window.escape="open=false" 3157 @click.outside="open=false" 3158 > 3159 <div class="relative flex items-center grow cursor-pointer"> 3160 <div> 3161 <button class="btn-navmenu shadow-none duration-[all] min-h-[64px] uppercase m-0 px-8 w-full rounded-none" 3162 :class="{ 'font-semibold' : menuTab,'bg-menu' : !menuTab}" 3163 @click.stop="menuTab=true;accountTab=false">Menu </button> 3164 </div> 3165 <div> 3166 <button class="btn-navmenu shadow-none duration-[all] min-h-[64px] 3167 uppercase m-0 px-8 bg-menu w-full rounded-none" 3168 :class="{ 'font-semibold' : accountTab,'bg-menu' : !accountTab}" 3169 @click.stop="menuTab=false;accountTab=true;">Account </button> 3170 </div> 3171 <button class="absolute right-0 mr-2.5" 3172 @click="$dispatch('toggle-mobile-menu')"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="30" height="30" role="img"> 3173 <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/> 3174</svg> 3175</button> 3176 </div> 3177 <section class="relative"> 3178 <nav id="mobile-collapse" 3179 class="absolute inset-0 w-full duration-150 ease-in-out transform 3180 border-t transition-display border-container" 3181 x-show.transition.opacity="menuTab"></nav> 3182 <nav class="absolute inset-0 w-full duration-150 ease-in-out transform 3183 border-t transition-display border-container" 3184 x-show.transition.opacity="accountTab"> 3185
3185<script> 3186 "use strict"; 3187 function initComponent() { 3188 return { 3189 cart: false, 3190 customer: false, 3191 wishlistProducts: null, 3192 itemCount: 0, 3193 receiveCustomerData: function receiveCustomerData(data){ 3194 if (data.cart) { 3195 this.cart = data.cart; 3196 } 3197 if (data.customer) { 3198 this.customer = data.customer; 3199 } 3200 }, 3201 receiveWishlistData: function (data) { 3202 if (data['wishlist']) { 3203 this.wishlistProducts = data['wishlist']; 3204 this.itemCount = this.wishlistProducts.counter; 3205 } 3206 }, 3207 } 3208 } 3209</script>
3209 3210 3211<div class="block py-0 font-semibold hover:bg-gray-100 flex items-center transition-transform duration-150 3212 ease-in-out transform translate-x-0" x-data="initComponent()" 3213 @private-content-loaded.window="receiveCustomerData(event.detail.data)" 3214> 3215 <template x-if="customer.firstname"> 3216 <div class="flex items-center w-full px-8 py-4 border-b cursor-pointer bg-container-lighter 3217 border-container">Welcome, <span x-text="customer.fullname"></span></div> 3218 </template> 3219 <template x-if="!customer.firstname"> 3220 <div class="flex items-center w-full px-8 py-4 border-b cursor-pointer 3221 bg-container-lighter border-container">Welcome to Skin Trends</div> 3222 </template> 3223</div> 3224 3225<div class="flex items-center transition-transform duration-150 ease-in-out transform translate-x-0"> 3226 <a class="flex items-center font-semibold w-full px-8 py-4 border-b cursor-pointer 3227 bg-container-lighter border-container" 3228 href="https://www.skintrends.com/blog/">Blog </a> 3229</div> 3230 3231<!--Customer Icon & Dropdown--> 3232<div x-data="{ open: false, customerData: {} }" class="relative inline-block w-full" @private-content-loaded.window="customerData = $event.detail.data"> 3233 <div class="flex items-center transition-transform duration-150 ease-in-out transform translate-x-0"> 3234 <a class="block font-semibold hover:bg-gray-100 flex items-center w-full px-8 py-4 3235 border-b cursor-pointer bg-container-lighter border-container" 3236 onclick="hyva.setCookie && hyva.setCookie( 3237 'login_redirect', 3238 window.location.href, 3239 1 3240 )" 3241 @click.prevent="$dispatch('logIn', { open: true })" 3242 id="login" 3243 href="https://www.skintrends.com/customer/account/index/"> 3244 Sign In </a> 3245 </div> 3246 <div class="flex items-center transition-transform duration-150 ease-in-out transform translate-x-0"> 3247 <a class="block font-semibold hover:bg-gray-100 flex items-center w-full px-8 py-4 3248 border-b cursor-pointer bg-container-lighter border-container" 3249 id="register" 3250 href="https://www.skintrends.com/customer/account/create/" 3251 @click.prevent="$dispatch('register', { open: true })" 3252 > 3253 Create an Account </a> 3254 </div> 3255 </div> 3256 </nav> 3257 </section> 3258 </div> 3259 </div> 3260 </div> 3261 </template> 3262</div> 3263
3264<script> 3265 'use strict'; 3266 3267 window.specialCategories = [{"id":105,"name":"Rhonda Allison Skincare","url":"https:\/\/www.skintrends.com\/brands\/rhonda-allison-skin-care.html"},{"id":106,"name":"Yon-Ka\u00ae PARIS","url":"https:\/\/www.skintrends.com\/brands\/yonka-skincare.html"},{"id":107,"name":"PCA Skin\u00ae","url":"https:\/\/www.skintrends.com\/brands\/pca-skin.html"},{"id":108,"name":"Osmosis Skincare","url":"https:\/\/www.skintrends.com\/brands\/osmosis-skincare.html"},{"id":110,"name":"Wilma Schumann\u00ae","url":"https:\/\/www.skintrends.com\/brands\/wilma-schumann-skin-care.html"},{"id":112,"name":"IMAGE Skincare","url":"https:\/\/www.skintrends.com\/brands\/image-skincare.html"},{"id":113,"name":"iS Clinical\u00ae","url":"https:\/\/www.skintrends.com\/brands\/is-clinical.html"},{"id":114,"name":"Cellex-C\u00ae","url":"https:\/\/www.skintrends.com\/brands\/cellex-c.html"},{"id":115,"name":"PHYTOMER","url":"https:\/\/www.skintrends.com\/brands\/phytomer-skincare.html"},{"id":116,"name":"GlyMed\u00ae Plus Skincare","url":"https:\/\/www.skintrends.com\/brands\/glymed-plus-skincare.html"},{"id":714,"name":"Comfort Zone","url":"https:\/\/www.skintrends.com\/brands\/comfort-zone.html"},{"id":877,"name":"Sckin\u00ae","url":"https:\/\/www.skintrends.com\/brands\/sckin.html"},{"id":936,"name":"Antedotum","url":"https:\/\/www.skintrends.com\/brands\/antedotum.html"},{"id":938,"name":"Regenesthetics","url":"https:\/\/www.skintrends.com\/brands\/regenesthetics.html"},{"id":934,"name":"LiLash","url":"https:\/\/www.skintrends.com\/brands-cosmetics\/lilash.html"}]; 3268 3269 const initMegaMenuMobileComponent = () => { 3270 const createButtomHtml = (node, level) => { 3271 return ` 3272 <button class="${level === 0 ? 'uppercase' : ''} cursor-pointer w-full flex items-center justify-between font-semibold text-base px-5 py-3 text-left" @click.stop="toggleCollapse('${node.id}')"> 3273 <span>${node.name}</span> 3274 <span class="transition-all" :class="{'rotate-180': getCollapseStatus('${node.id}'), 'opacity-0': getNode('${node.id}').elems.length === 0}"> 3275 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="24" height="24" role="img"> 3276 <path stroke-linecap="round" stroke-linejoin="round" d="M19 9l-7 7-7-7"/> 3277</svg> 3278 </span> 3279 </button> 3280 `; 3281 } 3282 3283 const createChildHtml = (node, level, filterFunction) => { 3284 if (node.elems.length === 0) { 3285 return createButtomHtml(node, level); 3286 } 3287 const children = filterFunction(node.elems); 3288 return ` 3289 ${createButtomHtml(node, level)} 3290 ${children.length > 0 && `<section class="overflow-y-hidden pl-4" 3291 :class="{'h-auto': getCollapseStatus('${node.id}'), 'h-0': !getCollapseStatus('${node.id}') || getNode('${node.id}').elems.length === 0}"> 3292 <button class="cursor-pointer w-full text-left font-semibold text-base px-5 py-3 text-left" 3293 @click.stop="redirectTo('${node.url}')">All ${node.name}</button> 3294 ${children.reduce((pre, elem) => pre + createChildHtml(elem, level + 1, filterFunction), '')} 3295 </section>`} 3296 `; 3297 } 3298 3299 return { 3300 contentShowed: false, 3301 megaMenu: { 3302 nodes: {}, 3303 collapseStatuses: {}, 3304 data: {"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":1,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Brands","is_category":false,"id":"additional-node-amasty_shopby_brand_allbrands","status":1,"sort_order":null,"content":"<div x-data=\"amBrandsPopup()\" x-init=\"popupInit()\" class=\"h-am-popup-content w-am-popup-content\">\n \n<div class=\"absolute z-10 left-0 top-full hidden shadow-lg overflow-hidden rounded-lg max-w-[1170px]\"\n x-cloak\n x-transition\n x-show=\"hoverPanelActiveId === 'am-brand'\"\n :class=\"{'hidden' : hoverPanelActiveId !== 'am-brand'}\">\n <div class=\"flex flex-row sm:flex-column overflow-hidden h-full bg-white\" x-show=\"!loading\">\n <div class=\"h-full p-2 box-content flex-grow flex flex-wrap justify-center\">\n <template x-for=\"letter in items\" :key=\"letter.letter\">\n <section class=\"ambrands-letters-list size-min\">\n <div class=\"ambrands-letter mb-7 size-min\">\n <div class=\"space-y-6 -mt-6 ambrands-brand-item-custom\">\n <template x-for=\"brand in letter.brands\" :key=\"brand.brandId\">\n <div class=\"mr-[28px]\"\n :class=\"{'w-am-brand': !imageWidth}\">\n <a :href=\"brand.url\"\n class=\"ambrands-inner flex flex-col items-center\"\n :title=\"brand.label\">\n <template x-if=\"showImages\">
3304\n <span class=\"items-start\">\n <img class=\"ambrands-image mx-auto\"\n loading=\"lazy\"\n :src=\"brand.image\"\n :title=\"brand.label\"\/>\n <\/span>\n <\/template>\n <template x-if=\"showImages && !brand.image\">\n <span class=\"ambrands-image-block\">\n <span class=\"block mx-auto py-3 uppercase text-4xl text-gray-300\"\n x-text=\"brand.label.charAt(0)\">\n <\/span>\n <\/span>\n <\/template>\n <template x-if=\"!showImages\">\n <span class=\"ambrands-image-block\">\n <span class=\"ambrands-empty\" :title=\"brand.label\"><\/span>\n <\/span>\n <\/template>\n <span class=\"ambrands-count text-gray-400\" x-show=\"showCount\">\n (<span x-text=\"brand.cnt\"><\/span>)\n <\/span>\n <\/span>\n <\/a>\n <\/div>\n <\/template>\n <\/div>\n <\/div>\n <\/section>\n <\/template>\n <\/div>\n <div x-show=\"false\">\n Please select brand attribute in Stores -> Configuration -> Amasty Extensions -> Improved Layered Navigation: Brands. <\/div>\n <\/div>\n <div x-cloak x-show=\"loading\" class=\"flex flex-row sm:flex-column overflow-hidden w-full bg-white\">\n Loading... <\/div>\n<\/div>\n<\/div>\n","url":"https:\/\/www.skintrends.com\/brands\/","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Acne","is_category":true,"id":"category-node-19","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/acne.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Anti-Aging","is_category":true,"id":"category-node-20","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/anti-aging.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Hyperpigmentation","is_category":true,"id":"category-node-22","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/hyperpigmentation.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Sensitive\/Rosacea","is_category":true,"id":"category-node-23","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/sensitive-rosacea.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Pregnancy","is_category":true,"id":"category-node-24","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/pregnancy.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Dry Skin","is_category":true,"id":"category-node-21","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/dry-skin.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Oily Skin","is_category":true,"id":"category-node-58","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/oily-skin.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Cleansers","is_category":true,"id":"category-node-42","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/cleansers.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Toners","is_category":true,"id":"category-node-600","
3304status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/toners.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Exfoliants","is_category":true,"id":"category-node-27","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/exfoliants.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Serums","is_category":true,"id":"category-node-28","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/serums.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Creams","is_category":true,"id":"category-node-29","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/creams.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Moisturizers","is_category":true,"id":"category-node-30","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/moisturizers.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Sunscreens","is_category":true,"id":"category-node-31","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/sunscreens.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Masks","is_category":true,"id":"category-node-32","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/masks.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Treatments","is_category":true,"id":"category-node-33","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/treatments.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Eye & Lip Care","is_category":true,"id":"category-node-405","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/eyes-lips.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Trial\/Travel Kits","is_category":true,"id":"category-node-589","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/trial-travel-kits.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Gift Sets","is_category":true,"id":"category-node-406","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/gift-sets.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Glycolic Acid","is_category":true,"id":"category-node-660","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/ahas\/glycolic-acid.html","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Lactic Acid","is_category":true,"id":"category-node-752","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/ahas\/lactic-acid.html","current":false}],"__disableTmpl":true,"name":"Alpha Hydroxy Acids (AHAs)","is_category":true,"id":"category-node-659","status":1,"sort_order":null,"content":"<!-- ko scope: \"index = ammenu_columns_wrapper\" --> <!-- ko template: getTemplate() --><!-- \/ko --> <!-- \/ko -->","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/ahas.html","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Salicylic Acid","is_category":true,"id":"category-node-755","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/bhas\/salicylic-acid.html","current":false}],"__disableTmpl":true,"name":"Beta Hydroxy Acids (BHAs)","is_category":true,"id":"category-node-754","status":1,"sort_order":null,"content":"<!-- ko scope: \"index = ammenu_columns_wrapper\" --> <!-- ko template: getTemplate() --><!-- \/ko --> <!-- \/ko -->","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/bhas.html","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Acids","is_category":true,"id":"category-node-781","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/chemical-peels\/acids.html","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Enzymes","is_category":true,"id":"category-node-782","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/chemical-peels\/enzymes.html","current":false}],"__disableTmpl":true,"name":"Chemical Peels","is_category":true,"id":"category-node-780","status":1,"sort_order":null,"content":"<!-- ko scope: \"index = ammenu_columns_wrapper\" --> <!-- ko template: getTemplate() --><!-- \/ko --> <!-- \/ko -->","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/chemical-peels.html","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Cypress","is_category":true,"id":"category-node-679","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/essential-oils\/cypress.html","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Geranium","is_category":true,"id":"category-node-677","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/essential-oils\/geranium.html","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Lavender","is_category":true,"id":"category-node-675","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/essential-oils\/lavender.html","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Quintessence","is_category":true,"id":"category-node-674","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/essential-oils\/quintessence.html","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Rosemary","is_category":true,"id":"category-node-676","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/essential-oils\/rosemary.html","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Thyme","is_category":true,"id":"category-node-678","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/essential-oils\/thyme.html","current":false}],"__disableTmpl":true,"name":"Essential Oils","is_category":true,"id":"category-node-673","status":1,"sort_order":null,"content":"<!-- ko scope: \"index = ammenu_columns_wrapper\" --> <!-- ko template: getTemplate() --><!-- \/ko --> <!-- \/ko -->","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/essential-oils.html","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Hyaluronic Acid","is_category":true,"id":"category-node-666","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/hyaluronic\/hyaluronic-acid.html","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Peptides","is_category":true,"id":"category-node-749","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/hyaluronic\/peptides.html","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Sodium Hyaluronate","is_category":true,"id":"category-node-667","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/hyaluronic\/sodium-hyaluronate.html","current":false}],"__disableTmpl":true,"name":"Fillers","is_category":true,"id":"category-node-665","status":1,"sort_order":null,"content":"<!-- ko scope: \"index = ammenu_columns_wrapper\" --> <!-- ko template: getTemplate() --><!-- \/ko --> <!-- \/ko -->","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/hyaluronic.html","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Growth Factors","is_category":true,"id":"category-node-681","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/growth-factors.html","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Daisy Flower Extract","is_category":true,"id":"category-node-664","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/lighteners\/daisy-flower-extract.html","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Hydroquinone","is_category":true,"id":"category-node-662","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/lighteners\/hydroquinone.html","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Kojic Acid","is_category":true,"id":"category-node-663","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/lighteners\/kojic-acid.html","current":false}],"__disableTmpl":true,"name":"Lighteners","is_category":true,"id":"category-node-661","
3304status":1,"sort_order":null,"content":"<!-- ko scope: \"index = ammenu_columns_wrapper\" --> <!-- ko template: getTemplate() --><!-- \/ko --> <!-- \/ko -->","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/lighteners.html","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Retinol","is_category":true,"id":"category-node-670","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/retinoids\/retinol.html","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Retinaldehyde","is_category":true,"id":"category-node-671","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/retinoids\/retinaldehyde.html","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Retinyl Palmitate","is_category":true,"id":"category-node-672","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/retinoids\/retinyl-palmitate.html","current":false}],"__disableTmpl":true,"name":"Retinoids","is_category":true,"id":"category-node-669","status":1,"sort_order":null,"content":"<!-- ko scope: \"index = ammenu_columns_wrapper\" --> <!-- ko template: getTemplate() --><!-- \/ko --> <!-- \/ko -->","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/retinoids.html","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Stem Cells","is_category":true,"id":"category-node-680","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/stem-cells.html","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Ascorbyl Palmitate","is_category":true,"id":"category-node-753","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/vitamin-c\/ascorbyl-palmitate.html","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"L-Ascorbic Acid","is_category":true,"id":"category-node-683","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/vitamin-c\/l-ascorbic-acid.html","current":false}],"__disableTmpl":true,"name":"Vitamin C","is_category":true,"id":"category-node-682","status":1,"sort_order":null,"content":"<!-- ko scope: \"index = ammenu_columns_wrapper\" --> <!-- ko template: getTemplate() --><!-- \/ko --> <!-- \/ko -->","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/vitamin-c.html","current":false}],"__disableTmpl":true,"name":"Ingredients","is_category":true,"id":"category-node-541","status":1,"sort_order":null,"content":"<!-- ko scope: \"index = ammenu_columns_wrapper\" --> <!-- ko template: getTemplate() --><!-- \/ko --> <!-- \/ko -->","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients.html","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Adult Acne","is_category":true,"id":"category-node-769","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/skin-disorders\/acne\/adult-acne.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Teen Acne","is_category":true,"id":"category-node-768","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/skin-disorders\/acne\/teen-acne.html","current":false}],"__disableTmpl":true,"name":"Acne","is_category":true,"id":"category-node-767","status":1,"sort_order":null,"content":"<!-- ko scope: \"index = ammenu_columns_wrapper\" --> <!-- ko template: getTemplate() --><!-- \/ko --> <!-- \/ko -->","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/skin-disorders\/acne.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Eczema","is_category":true,"id":"category-node-842","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/skin-disorders\/dry-skin\/eczema.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Psoriasis","is_category":true,"id":"category-node-843","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/skin-disorders\/dry-skin\/psoriasis.html","current":false}],"__disableTmpl":true,"name":"Dry Skin","is_category":true,"id":"category-node-841","status":1,"sort_order":null,"content":"<!-- ko scope: \"index = ammenu_columns_wrapper\" --> <!-- ko template: getTemplate() --><!-- \/ko --> <!-- \/ko -->","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/skin-disorders\/dry-skin.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Age Spots","is_category":true,"id":"category-node-765","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/skin-disorders\/hyperpigmentation\/age-spots.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Melasma","is_category":true,"id":"category-node-764","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/skin-disorders\/hyperpigmentation\/melasma.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Post-Inflammatory Hyperpigmentation","is_category":true,"id":"category-node-766","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/skin-disorders\/hyperpigmentation\/post-inflammation-hyperpigmentation.html","current":false}],"__disableTmpl":true,"name":"Hyperpigmentation","is_category":true,"id":"category-node-763","status":1,"sort_order":null,"content":"<!-- ko scope: \"index = ammenu_columns_wrapper\" --> <!-- ko template: getTemplate() --><!-- \/ko --> <!-- \/ko -->","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/skin-disorders\/hyperpigmentation.html","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Enlarged Pores","is_category":true,"id":"category-node-833","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/skin-disorders\/oily-skin\/enlarged-
3304pores.html","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Sebaceous Hyperplasia","is_category":true,"id":"category-node-835","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/skin-disorders\/oily-skin\/sebaceous-hyperplasia.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Thick Skin","is_category":true,"id":"category-node-834","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/skin-disorders\/oily-skin\/thick-skin.html","current":false}],"__disableTmpl":true,"name":"Oily Skin","is_category":true,"id":"category-node-832","status":1,"sort_order":null,"content":"<!-- ko scope: \"index = ammenu_columns_wrapper\" --> <!-- ko template: getTemplate() --><!-- \/ko --> <!-- \/ko -->","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/skin-disorders\/oily-skin.html","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Acne Scars","is_category":true,"id":"category-node-840","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/skin-disorders\/scars\/acne-scars.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Wound Scars","is_category":true,"id":"category-node-839","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/skin-disorders\/scars\/wound-scars.html","current":false}],"__disableTmpl":true,"name":"Scars","is_category":true,"id":"category-node-838","status":1,"sort_order":null,"content":"<!-- ko scope: \"index = ammenu_columns_wrapper\" --> <!-- ko template: getTemplate() --><!-- \/ko --> <!-- \/ko -->","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/skin-disorders\/scars.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Reactive Sensitive","is_category":true,"id":"category-node-891","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/skin-disorders\/sensitive\/reactive-sensitive.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Rosacea","is_category":true,"id":"category-node-892","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/skin-disorders\/sensitive\/rosacea.html","current":false}],"__disableTmpl":true,"name":"Sensitive","is_category":true,"id":"category-node-890","status":1,"sort_order":null,"content":"<!-- ko scope: \"index = ammenu_columns_wrapper\" --> <!-- ko template: getTemplate() --><!-- \/ko --> <!-- \/ko -->","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/skin-disorders\/sensitive.html","current":false}],"__disableTmpl":true,"name":"Skin Disorders","is_category":true,"id":"category-node-761","status":1,"sort_order":null,"content":"<!-- ko scope: \"index = ammenu_columns_wrapper\" --> <!-- ko template: getTemplate() --><!-- \/ko --> <!-- \/ko -->","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/skin-disorders.html","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Cheek Rash and Redness","is_category":true,"id":"category-node-778","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/area-of-body\/cheeks\/cheek-rash.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Cheek Sagging","is_category":true,"id":"category-node-777","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/area-of-body\/cheeks\/cheek-sagging.html","current":false}],"__disableTmpl":true,"name":"Cheeks","is_category":true,"id":"category-node-776","status":1,"sort_order":null,"content":"<!-- ko scope: \"index = ammenu_columns_wrapper\" --> <!-- ko template: getTemplate() --><!-- \/ko --> <!-- \/ko -->","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/area-of-body\/cheeks.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Crows Feet","is_category":true,"id":"category-node-771","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/area-of-body\/eyes\/crows-feet.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Dark Eye Circles","is_category":true,"id":"category-node-772","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/area-of-body\/eyes\/dark-eye-circles.html","current":false}],"__disableTmpl":true,"name":"Eyes","is_category":true,"id":"category-node-770","status":1,"sort_order":null,"content":"<!-- ko scope: \"index = ammenu_columns_wrapper\" --> <!-- ko template: getTemplate() --><!-- \/ko --> <!-- \/ko -->","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/area-of-body\/eyes.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"D\u00e9collet\u00e9 Hyperpigmentation","is_category":true,"id":"category-node-775","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/area-of-body\/neck\/decollete-hyperpigmentation.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Turkey Neck","is_category":true,"id":"category-node-774","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/area-of-body\/neck\/turkey-neck.html","current":false}],"__disableTmpl":true,"name":"Neck and D\u00e9collet\u00e9 ","is_category":true,"id":"category-node-773","status":1,"sort_order":null,"content":"<!-- ko scope: \"index = ammenu_columns_wrapper\" --> <!-- ko template: getTemplate() --><!-- \/ko --> <!-- \/ko -->","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/area-of-body\/neck.html","current":false}],"__disableTmpl":true,"name":"Area of Body","is_category":true,"id":"category-node-762","status":1,"sort_order":null,"content":"<!-- ko scope: \"index = ammenu_columns_wrapper\" --> <!-- ko template: getTemplate() --><!-- \/ko --> <!-- \/ko -->","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/area-of-body.html","current":false}],"__disableTmpl":true,"name":"Conditions","is_category":true,"id":"category-node-542","status":1,"sort_order":null,"content":"<!-- ko scope: \"index = ammenu_columns_wrapper\" --> <!-- ko template: getTemplate() --><!-- \/ko --> <!-- \/ko -->","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions.html","current":false}],"__disableTmpl":true,"name":"Product FAQs (Q&A's with Products)","is_category":true,"id":"category-node-528","status":1,"sort_order":null,"content":"<!-- ko scope: \"index = ammenu_columns_wrapper\" --> <!-- ko template: getTemplate() --><!-- \/ko --> <!-- \/ko -->","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs.html","current":false}],"__disableTmpl":true,"name":"Face Care","is_category":true,"id":"category-node-9","status":1,"sort_order":null,"content":"<!-- ko scope: \"index = ammenu_columns_wrapper\" --> <!-- ko template: getTemplate() --><!-- \/ko --> <!-- \/ko -->","url":"https:\/\/www.skintrends.com\/skincare\/face.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Acne Skin Treatments","is_category":true,"id":"category-node-97","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/skin-treatments\/acne-skin-treatments.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Anti-Aging Skin Treatments","is_category":true,"id":"category-node-98","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/skin-treatments\/anti-aging-skin-treatments.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Hyperpigmentation Skin Treatments","is_category":true,"id":"category-node-100","
3304status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/skin-treatments\/hyperpigmentation-skin-treatments.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Sensitive Skin Treatments","is_category":true,"id":"category-node-102","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/skin-treatments\/sensitive-skin-treatments.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Dry Skin Treatments","is_category":true,"id":"category-node-99","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/skin-treatments\/dry-skin-treatments.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Oily Skin Treatments","is_category":true,"id":"category-node-101","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/skin-treatments\/oily-skin-treatments.html","current":false}],"__disableTmpl":true,"name":"Skin Treatments","is_category":true,"id":"category-node-13","status":1,"sort_order":null,"content":"<!-- ko scope: \"index = ammenu_columns_wrapper\" --> <!-- ko template: getTemplate() --><!-- \/ko --> <!-- \/ko -->","url":"https:\/\/www.skintrends.com\/skincare\/skin-treatments.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Cleansers (Natural)","is_category":true,"id":"category-node-265","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/natural-organic\/cleansers.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Toners & Mists (Natural)","is_category":true,"id":"category-node-352","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/natural-organic\/toners.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Exfoliants (Natural)","is_category":true,"id":"category-node-266","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/natural-organic\/exfoliants.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Serums (Natural)","is_category":true,"id":"category-node-267","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/natural-organic\/serums.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Creams (Natural)","is_category":true,"id":"category-node-268","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/natural-organic\/creams.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Moisturizers (Natural)","is_category":true,"id":"category-node-269","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/natural-organic\/moisturizers.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Sunscreens (Natural)","is_category":true,"id":"category-node-270","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/natural-organic\/sunscreens.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Masks (Natural)","is_category":true,"id":"category-node-271","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/natural-organic\/masks.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Eye & Lip Care (Natural)","is_category":true,"id":"category-node-356","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/natural-organic\/eyes-lips.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Body Care (Natural)","is_category":true,"id":"category-node-357","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/natural-organic\/body.html","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Product FAQ's","is_category":true,"id":"category-node-531","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/natural-organic\/product-faqs.html","current":false}],"__disableTmpl":true,"name":"Natural & Organic","is_category":true,"id":"category-node-10","status":1,"sort_order":null,"content":"<!-- ko scope: \"index = ammenu_columns_wrapper\" --> <!-- ko template: getTemplate() --><!-- \/ko --> <!-- \/ko -->","url":"https:\/\/www.skintrends.com\/skincare\/natural-organic.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Body Wash","is_category":true,"id":"category-node-91","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/s
3304pa-body\/body-wash.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Body Lotion & Oil","is_category":true,"id":"category-node-92","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/spa-body\/body-lotion.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Exfoliants","is_category":true,"id":"category-node-93","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/spa-body\/exfoliants.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Firming","is_category":true,"id":"category-node-94","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/spa-body\/firming.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Tanning","is_category":true,"id":"category-node-95","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/spa-body\/tanning.html","current":false}],"__disableTmpl":true,"name":"Body Spa Care","is_category":true,"id":"category-node-12","status":1,"sort_order":null,"content":"<!-- ko scope: \"index = ammenu_columns_wrapper\" --> <!-- ko template: getTemplate() --><!-- \/ko --> <!-- \/ko -->","url":"https:\/\/www.skintrends.com\/skincare\/spa-body.html","current":false}],"__disableTmpl":true,"name":"Skincare","is_category":true,"id":"category-node-244","status":1,"sort_order":"0","content":"<div class=\"px-6 py-4 w-full\">\r\n <div class=\"block-title relative col-md-6\">\r\n <span>\r\n Categories\r\n <\/span>\r\n <\/div>\r\n <ul class=\"mt-8 space-y-2\">\r\n <li class=\"grid grid-cols-2 uppercase\">\r\n <div>\r\n <a class=\"group flex items-center hover:text-purple-500 transition-colors duration-500\" href=\"https:\/\/www.skintrends.com\/skincare\/face.html\" title=\"Face\"><span>Face<\/span><span class=\"inline-block transition-all text-xs duration-500 text-purple-500 group-hover:translate-x-0 group-hover:opacity-100 -translate-x-full ml-1.5 opacity-0\">\r\n <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-4 w-4\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\r\n <path fill-rule=\"evenodd\"\r\n d=\"M10.293 3.293a1 1 0 011.414 0l6 6a1 1 0 010 1.414l-6 6a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-4.293-4.293a1 1 0 010-1.414z\"\r\n clip-rule=\"evenodd\"\/>\r\n <\/svg>\r\n <\/span><\/a>\r\n <\/div>\r\n <div>\r\n <a class=\"group flex items-center hover:text-purple-500 transition-colors duration-500\" href=\"https:\/\/www.skintrends.com\/skincare\/skin-treatments.html\" title=\"Skin Treatments\"><span>Skin Treatments<\/span><span class=\"inline-block transition-all text-xs duration-500 text-purple-500 group-hover:translate-x-0 group-hover:opacity-100 -translate-x-full ml-1.5 opacity-0\">\r\n <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-4 w-4\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\r\n <path fill-rule=\"evenodd\"\r\n d=\"M10.293 3.293a1 1 0 011.414 0l6 6a1 1 0 010 1.414l-6 6a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-4.293-4.293a1 1 0 010-1.414z\"\r\n clip-rule=\"evenodd\"\/>\r\n <\/svg>\r\n <\/span><\/a>\r\n <\/div>\r\n <\/li>\r\n <li class=\"grid grid-cols-2 uppercase\">\r\n <div>\r\n <a class=\"group flex items-center hover:text-purple-500 transition-colors duration-500\" href=\"https:\/\/www.skintrends.com\/skincare\/natural-organic.html\" title=\"Natural & Organic\"><span>Natural & Organic<\/span><span class=\"inline-block transition-all text-xs duration-500 text-purple-500 group-hover:translate-x-0 group-hover:opacity-100 -translate-x-full ml-1.5 opacity-0\">\r\n <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-4 w-4\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\r\n <path fill-rule=\"evenodd\"\r\n d=\"M10.293 3.293a1 1 0 011.414 0l6 6a1 1 0 010 1.414l-6 6a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-4.293-4.293a1 1 0 010-1.414z\"\r\n clip-rule=\"evenodd\"\/>\r\n <\/svg>\r\n <\/span><\/a>\r\n <\/div>\r\n <div>\r\n <a class=\"group flex items-center hover:text-purple-500 transition-colors duration-500\" href=\"https:\/\/www.skintrends.com\/skincare\/s
3304pa-body.html\" title=\"Spa & Body\"><span>Spa & Body<\/span><span class=\"inline-block transition-all text-xs duration-500 text-purple-500 group-hover:translate-x-0 group-hover:opacity-100 -translate-x-full ml-1.5 opacity-0\">\r\n <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-4 w-4\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\r\n <path fill-rule=\"evenodd\"\r\n d=\"M10.293 3.293a1 1 0 011.414 0l6 6a1 1 0 010 1.414l-6 6a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-4.293-4.293a1 1 0 010-1.414z\"\r\n clip-rule=\"evenodd\"\/>\r\n <\/svg>\r\n <\/span><\/a>\r\n <\/div>\r\n <\/li>\r\n <\/ul>\r\n<\/div>\r\n<div class=\"justify-end\">\r\n <img class=\"w-full\" loading=\"lazy\" src=\"https:\/\/www.skintrends.com\/media\/wysiwyg\/nav-img-footer\/menu-banners_gray-bg_940x230px_02.png\" alt=\"\">\r\n<\/div>\r\n\r\n","url":"https:\/\/www.skintrends.com\/skincare.html","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Acne (Men)","is_category":true,"id":"category-node-407","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/men\/face\/acne.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Anti-Aging (Men)","is_category":true,"id":"category-node-408","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/men\/face\/anti-aging.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Hyperpigmentation (Men)","is_category":true,"id":"category-node-409","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/men\/face\/hyperpigmentation.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Sensitive\/Rosacea (Men)","is_category":true,"id":"category-node-410","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/men\/face\/sensitive-rosacea.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Dry Skin (Men)","is_category":true,"id":"category-node-412","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/men\/face\/dry-skin.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Oily Skin (Men)","is_category":true,"id":"category-node-413","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/men\/face\/oily-skin.html","current":false}],"__disableTmpl":true,"name":"Face","is_category":true,"id":"category-node-247","status":1,"sort_order":null,"content":"<!-- ko scope: \"index = ammenu_columns_wrapper\" --> <!-- ko template: getTemplate() --><!-- \/ko --> <!-- \/ko -->","url":"https:\/\/www.skintrends.com\/men\/face.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Skin Treatments","is_category":true,"id":"category-node-14","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/men\/skin-treatments.html","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Cleansers (Men\/Natural)","is_category":true,"id":"category-node-452","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/men\/natural-organic\/cleansers.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Toners & Mists (Men\/Natural)","is_category":true,"id":"category-node-453","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/men\/natural-organic\/toners.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Exfoliants (Men\/Natural)","is_category":true,"id":"category-node-454","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/men\/natural-organic\/exfoliants.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Serums (Men\/Natural)","is_category":true,"id":"category-node-455","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/men\/natural-organic\/serums.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Creams (Men\/Natural)","is_category":true,"id":"category-node-456","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/men\/natural-organic\/creams.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Moisturizers (Men\/Natural)","is_category":true,"id":"category-node-457","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/men\/natural-organic\/moisturizers.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Sunscreens (Men\/Natural)","is_category":true,"id":"category-node-458","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/men\/natural-organic\/sunscreens.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Masks (Men\/Natural)","is_category":true,"id":"category-node-459","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/men\/natural-organic\/masks.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Shave (Men\/Natural)","is_category":true,"id":"category-node-601","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/men\/natural-organic\/shave.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Eyes & Lips (Men\/Natural)","is_category":true,"id":"category-node-461","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/men\/natural-organic\/eyes-lips.html","current":false}],"__disableTmpl":true,"name":"Natural & Organic","is_category":true,"id":"category-node-451","status":1,"sort_order":null,"content":"<!-- ko scope: \"index = ammenu_columns_wrapper\" --> <!-- ko template: getTemplate() --><!-- \/ko --> <!-- \/ko -->","url":"https:\/\/www.skintrends.com\/men\/natural-organic.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Spa & Body","is_category":true,"id":"category-node-248","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/men\/spa-body.html","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"PHYTOMER Men's Skincare","is_category":true,"id":"category-node-574","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/brands-men\/phytomer-mens-skincare.html","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"REDMethod (RA for Men)","is_category":true,"id":"category-node-117","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/brands-men\/ra-skincare-for-men.html","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Yon-Ka\u00ae For Men","is_category":true,"id":"category-node-348","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/brands-men\/yonka-mens-skincare.html","current":false}],"__disableTmpl":true,"name":"Men","is_category":true,"id":"category-node-245","status":1,"sort_order":"1","content":"<div class=\"px-6 py-4 w-full\">\r\n <div class=\"grid grid-cols-2\">\r\n <div class=\"block-title relative\">Categories<\/div>\r\n <div class=\"block-title relative\">Brands<\/div>\r\n <\/div>\r\n <ul class=\"mt-8 space-y-2\">\r\n <li class=\"grid grid-cols-2 uppercase\">\r\n <ul class=\"space-y-2\">\r\n <li>\r\n <a class=\"group flex items-center hover:text-purple-500 transition-colors duration-500\" href=\"https:\/\/www.skintrends.com\/men\/face.html\"><span>Face<\/span><span class=\"inline-block transition-all text-xs duration-500 text-purple-500 group-hover:translate-x-0 group-hover:opacity-100 -translate-x-full ml-1.5 opacity-0\">\r\n <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-4 w-4\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\r\n <path fill-rule=\"evenodd\"\r\n d=\"M10.293 3.293a1 1 0 011.414 0l6 6a1 1 0 010 1.414l-6 6a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-4.293-4.293a1 1 0 010-1.414z\"\r\n clip-rule=\"evenodd\"\/>\r\n <\/svg>\r\n <\/span><\/a>\r\n <\/li>\r\n <li class=\"ui-menu-item level2\">\r\n <a class=\"group flex items-center hover:text-purple-500 transition-colors duration-500\" href=\"https:\/\/www.skintrends.com\/men\/skin-treatments.html\"><span>Skin Treatments<\/span><span class=\"inline-block transition-all text-xs duration-500 text-purple-500 group-hover:translate-x-0 group-hover:opacity-100 -translate-x-full ml-1.5 opacity-0\">\r\n <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-4 w-4\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\r\n <path fill-rule=\"evenodd\"\r\n d=\"M10.293 3.293a1 1 0 011.414 0l6 6a1 1 0 010 1.414l-6 6a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-4.293-4.293a1 1 0 010-1.414z\"\r\n clip-rule=\"evenodd\"\/>\r\n <\/svg>\r\n <\/span><\/a>\r\n <\/li>\r\n <li class=\"ui-menu-item level2\">\r\n <a class=\"group flex items-center hover:text-purple-500 transition-colors duration-500\" href=\"https:\/\/www.skintrends.com\/men\/natural-organic.html\"><span>Natural & Organic<\/span><span class=\"inline-block transition-all text-xs duration-500 text-purple-500 group-hover:translate-x-0 group-hover:opacity-100 -translate-x-full ml-1.5 opacity-0\">\r\n <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-4 w-4\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\r\n <path fill-rule=\"evenodd\"\r\n d=\"M10.293 3.293a1 1 0 011.414 0l6 6a1 1 0 010 1.414l-6 6a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-4.293-4.293a1 1 0 010-1.414z\"\r\n clip-rule=\"evenodd\"\/>\r\n <\/svg>\r\n <\/span><\/a>\r\n <\/li>\r\n <li class=\"ui-menu-item level2\">\r\n <a class=\"group flex items-center hover:text-purple-500 transition-colors duration-500\" href=\"https:\/\/www.skintrends.com\/men\/spa-body.html\"><span>Spa & Body<\/span><span class=\"inline-block transition-all text-xs duration-500 text-purple-500 group-hover:translate-x-0 group-hover:opacity-100 -translate-x-full ml-1.5 opacity-0\">\r\n <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-4 w-4\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\r\n <path fill-rule=\"evenodd\"\r\n d=\"M10.293 3.293a1 1 0 011.414 0l6 6a1 1 0 010 1.414l-6 6a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-4.293-4.293a1 1 0 010-1.414z\"\r\n clip-rule=\"evenodd\"\/>\r\n <\/svg>\r\n <\/span><\/a>\r\n <\/li>\r\n <\/ul>\r\n <ul class=\"space-y-2\">\r\n <li class=\"ui-menu-item level2 parent\">\r\n <a class=\"group flex items-center hover:text-purple-500 transition-colors duration-500\" href=\"https:\/\/www.skintrends.com\/brands-men\/phytomer-mens-skincare.html\">
3304\r\n <span>PHYTOMER Men's Skincare<\/span><span class=\"inline-block transition-all text-xs duration-500 text-purple-500 group-hover:translate-x-0 group-hover:opacity-100 -translate-x-full ml-1.5 opacity-0\">\r\n <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-4 w-4\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\r\n <path fill-rule=\"evenodd\"\r\n d=\"M10.293 3.293a1 1 0 011.414 0l6 6a1 1 0 010 1.414l-6 6a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-4.293-4.293a1 1 0 010-1.414z\"\r\n clip-rule=\"evenodd\"\/>\r\n <\/svg>\r\n <\/span><\/a>\r\n <\/a>\r\n <\/li>\r\n <li class=\"ui-menu-item level2 parent\">\r\n <a class=\"group flex items-center hover:text-purple-500 transition-colors duration-500\" href=\"https:\/\/www.skintrends.com\/brands-men\/ra-skincare-for-men.html\">\r\n <span>RA for Men Skincare<\/span><span class=\"inline-block transition-all text-xs duration-500 text-purple-500 group-hover:translate-x-0 group-hover:opacity-100 -translate-x-full ml-1.5 opacity-0\">\r\n <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-4 w-4\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\r\n <path fill-rule=\"evenodd\"\r\n d=\"M10.293 3.293a1 1 0 011.414 0l6 6a1 1 0 010 1.414l-6 6a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-4.293-4.293a1 1 0 010-1.414z\"\r\n clip-rule=\"evenodd\"\/>\r\n <\/svg>\r\n <\/span><\/a>\r\n <\/a>\r\n <\/li>\r\n <li class=\"ui-menu-item level2 parent\">\r\n <a class=\"group flex items-center hover:text-purple-500 transition-colors duration-500\" href=\"https:\/\/www.skintrends.com\/brands-men\/yonka-mens-skincare.html\">\r\n <span>Yon-Ka\u00ae For Men<\/span><span class=\"inline-block transition-all text-xs duration-500 text-purple-500 group-hover:translate-x-0 group-hover:opacity-100 -translate-x-full ml-1.5 opacity-0\">\r\n <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-4 w-4\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\r\n <path fill-rule=\"evenodd\"\r\n d=\"M10.293 3.293a1 1 0 011.414 0l6 6a1 1 0 010 1.414l-6 6a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-4.293-4.293a1 1 0 010-1.414z\"\r\n clip-rule=\"evenodd\"\/>\r\n <\/svg>\r\n <\/span><\/a>\r\n <\/a>\r\n <\/li>\r\n <\/ul>\r\n <\/li>\r\n <\/ul>\r\n<\/div>\r\n<div class=\"justify-end\">\r\n <img class=\"w-full\" loading=\"lazy\" src=\"https:\/\/www.skintrends.com\/media\/wysiwyg\/nav-img-footer\/menu-banners_gray-bg_940x230px_03.png\" alt=\"\">\r\n<\/div>\r\n\r\n","url":"https:\/\/www.skintrends.com\/men.html","current":false},{"type":{"value":2,"label":"horizontal"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Face","is_category":true,"id":"category-node-288","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/cosmetics\/face.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Eyes","is_category":true,"id":"category-node-289","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/cosmetics\/eyes.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Eyelashes","is_category":true,"id":"category-node-292","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/cosmetics\/eyelashes.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Lips","is_category":true,"id":"category-node-290","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/cosmetics\/lips.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Tools","is_category":true,"id":"category-node-291","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/cosmetics\/tools.html","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"LiLash","is_category":true,"id":"category-node-934","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/brands-cosmetics\/lilash.html","current":false}],"__disableTmpl":true,"name":"Cosmetics","is_category":true,"id":"category-node-264","status":1,"sort_order":"2","content":"<div class=\"px-6 py-4 w-full\">\r\n <div class=\"grid grid-cols-2\">\r\n <div class=\"block-title relative\">Categories<\/div>\r\n <div class=\"block-title relative\">Brands<\/div>\r\n <\/div>\r\n <ul class=\"mt-8 space-y-2\">\r\n <li class=\"grid grid-cols-2 uppercase\">\r\n <ul class=\"space-y-2\">\r\n <li>\r\n <a class=\"group hover:text-purple-500 transition-colors duration-500\" href=\"https:\/\/www.skintrends.com\/cosmetics\/face.html\"><span>Face<\/span><\/a>\r\n <\/li>\r\n <li class=\"ui-menu-item level2\">\r\n <a class=\"group hover:text-purple-500 transition-colors duration-500\" href=\"https:\/\/www.skintrends.com\/cosmetics\/eyes.html\"><span>Eyes<\/span><\/a>\r\n <\/li>\r\n <li class=\"ui-menu-item level2\">\r\n <a class=\"group hover:text-purple-500 transition-colors duration-500\" href=\"https:\/\/www.skintrends.com\/cosmetics\/eyelashes.html\"><span>Eyelashes<\/span><\/a>\r\n <\/li>\r\n <li class=\"ui-menu-item level2\">\r\n <a class=\"group hover:text-purple-500 transition-colors duration-500\" href=\"https:\/\/www.skintrends.com\/cosmetics\/lips.html\"><span>Lips<\/span><\/a>\r\n <\/li>\r\n <li class=\"ui-menu-item level2\">\r\n <a class=\"group hover:text-purple-500 transition-colors duration-500\" href=\"https:\/\/www.skintrends.com\/cosmetics\/tools.html\"><span>Tools<\/span><\/a>\r\n <\/li>\r\n <\/ul>\r\n <ul class=\"space-y-2\">\r\n <li class=\"ui-menu-item level2 parent\">\r\n <a class=\"group hover:text-purple-500 transition-colors duration-500\" href=\"https:\/\/www.skintrends.com\/brands-cosmetics\/lilash.html\">
3304\r\n <span>LiLash\u00ae<\/span>\r\n <\/a>\r\n <\/li>\r\n <\/ul>\r\n <\/li>\r\n <\/ul>\r\n<\/div>\r\n<div class=\"justify-end\">\r\n <img class=\"w-full\" loading=\"lazy\" src=\"https:\/\/www.skintrends.com\/media\/wysiwyg\/nav-img-footer\/menu-banners_gray-bg_940x230px_04.png\" alt=\"\">\r\n<\/div>\r\n","url":"https:\/\/www.skintrends.com\/cosmetics.html","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"PRODUCT FAQs","is_category":false,"id":"custom-node-1","status":1,"sort_order":"3","content":"<div class=\"px-6 py-4 w-full\">\n <div class=\"grid grid-cols-2\">\n <div class=\"block-title relative hover:text-purple-500 duration-500\"><a href=\"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions.html\">Conditions<\/a><\/div>\n <div class=\"block-title relative hover:text-purple-500 duration-500\"><a href=\"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients.html\">Ingredients<\/a><\/div>\n <\/div>\n <ul class=\"mt-8 space-y-2\">\n <li class=\"grid grid-cols-2 uppercase\">\n <div class=\"grid grid-cols-2\">\n <ul class=\"space-y-2\">\n <li class=\"ui-menu-item level2\">\n <a class=\"group flex items-center hover:text-purple-500 transition-colors duration-500\" href=\"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/skin-disorders.html\"><span class=\"underline\">Skin Disorders<\/span><span class=\"inline-block transition-all text-xs duration-500 text-purple-500 group-hover:translate-x-0 group-hover:opacity-100 -translate-x-full ml-1.5 opacity-0\">\n <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-4 w-4\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\"\n d=\"M10.293 3.293a1 1 0 011.414 0l6 6a1 1 0 010 1.414l-6 6a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-4.293-4.293a1 1 0 010-1.414z\"\n clip-rule=\"evenodd\"\/>\n <\/svg>\n <\/span><\/a>\n <\/li>\n <li class=\"ui-menu-item level2\">\n <a class=\"group flex items-center hover:text-purple-500 transition-colors duration-500\" href=\"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/skin-disorders\/acne.html\"><span>Acne<\/span><span class=\"inline-block transition-all text-xs duration-500 text-purple-500 group-hover:translate-x-0 group-hover:opacity-100 -translate-x-full ml-1.5 opacity-0\">\n <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-4 w-4\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\"\n d=\"M10.293 3.293a1 1 0 011.414 0l6 6a1 1 0 010 1.414l-6 6a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-4.293-4.293a1 1 0 010-1.414z\"\n clip-rule=\"evenodd\"\/>\n <\/svg>\n <\/span><\/a>\n <\/li>\n <li class=\"ui-menu-item level2\">\n <a class=\"group flex items-center hover:text-purple-500 transition-colors duration-500\" href=\"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/skin-disorders\/dry-skin.html\"><span>Dry Skin<\/span><span class=\"inline-block transition-all text-xs duration-500 text-purple-500 group-hover:translate-x-0 group-hover:opacity-100 -translate-x-full ml-1.5 opacity-0\">\n <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-4 w-4\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\"\n d=\"M10.293 3.293a1 1 0 011.414 0l6 6a1 1 0 010 1.414l-6 6a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-4.293-4.293a1 1 0 010-1.414z\"\n clip-rule=\"evenodd\"\/>\n <\/svg>\n <\/span><\/a>\n <\/li>\n <li class=\"ui-menu-item level2\">\n <a class=\"group flex items-center hover:text-purple-500 transition-colors duration-500\" href=\"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/skin-disorders\/hyperpigmentation.html\"><span>Hyperpigmentation<\/span><span class=\"inline-block transition-all text-xs duration-500 text-purple-500 group-hover:translate-x-0 group-hover:opacity-100 -translate-x-full ml-1.5 opacity-0\">\n <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-4 w-4\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\"\n d=\"M10.293 3.293a1 1 0 011.414 0l6 6a1 1 0 010 1.414l-6 6a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-4.293-4.293a1 1 0 010-1.414z\"\n clip-rule=\"evenodd\"\/>\n <\/svg>\n <\/span><\/a>\n <\/li>\n <li class=\"ui-menu-item level2\">\n <a class=\"group flex items-center hover:text-purple-500 transition-colors duration-500\" href=\"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/skin-disorders\/oily-skin.html\"><span>Oily Skin<\/span><span class=\"inline-block transition-all text-xs duration-500 text-purple-500 group-hover:translate-x-0 group-hover:opacity-100 -translate-x-full ml-1.5 opacity-0\">\n <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-4 w-4\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\"\n d=\"M10.293 3.293a1 1 0 011.414 0l6 6a1 1 0 010 1.414l-6 6a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-4.293-4.293a1 1 0 010-1.414z\"\n clip-rule=\"evenodd\"\/>\n <\/svg>\n <\/span><\/a>\n <\/li>\n <li class=\"ui-menu-item level2\">\n <a class=\"group flex items-center hover:text-purple-500 transition-colors duration-500\" href=\"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/skin-disorders\/scars.html\"><span>Scars<\/span><span class=\"inline-block transition-all text-xs duration-500 text-purple-500 group-hover:translate-x-0 group-hover:opacity-100 -translate-x-full ml-1.5 opacity-0\">\n <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-4 w-4\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\"\n d=\"M10.293 3.293a1 1 0 011.414 0l6 6a1 1 0 010 1.414l-6 6a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-4.293-4.293a1 1 0 010-1.414z\"\n clip-rule=\"evenodd\"\/>\n <\/svg>\n <\/span><\/a>\n <\/li>\n <li class=\"ui-menu-item level2\">\n <a class=\"group flex items-center hover:text-purple-500 transition-colors duration-500\" href=\"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/skin-disorders\/sensitive.html\"><span>Sensitive<\/span><span class=\"inline-block transition-all text-xs duration-500 text-purple-500 group-hover:translate-x-0 group-hover:opacity-100 -translate-x-full ml-1.5 opacity-0\">\n <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-4 w-4\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\"\n d=\"M10.293 3.293a1 1 0 011.414 0l6 6a1 1 0 010 1.414l-6 6a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-4.293-4.293a1 1 0 010-1.414z\"\n clip-rule=\"evenodd\"\/>\n <\/svg>\n <\/span><\/a>\n <\/li>\n <\/ul>\n <ul class=\"space-y-2\">\n <li>\n <a class=\"group flex items-center hover:text-purple-500 transition-colors duration-500\" href=\"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/area-of-body.html\"><span class=\"underline\">Area of Body<\/span><span class=\"inline-block transition-all text-xs duration-500 text-purple-500 group-hover:translate-x-0 group-hover:opacity-100 -translate-x-full ml-1.5 opacity-0\">\n <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-4 w-4\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\"\n d=\"M10.293 3.293a1 1 0 011.414 0l6 6a1 1 0 010 1.414l-6 6a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-4.293-4.293a1 1 0 010-1.414z\"\n clip-rule=\"evenodd\"\/>\n <\/svg>\n <\/span><\/a>\n <\/li>\n <li class=\"ui-menu-item level2\">\n <a class=\"group flex items-center hover:text-purple-500 transition-colors duration-500\" href=\"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/area-of-body\/cheeks.html\"><span>Cheeks<\/span><span class=\"inline-block transition-all text-xs duration-500 text-purple-500 group-hover:translate-x-0 group-hover:opacity-100 -translate-x-full ml-1.5 opacity-0\">\n <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-4 w-4\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\"\n d=\"M10.293 3.293a1 1 0 011.414 0l6 6a1 1 0 010 1.414l-6 6a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-4.293-4.293a1 1 0 010-1.414z\"\n clip-rule=\"evenodd\"\/>\n <\/svg>\n <\/span><\/a>\n <\/li>\n <li class=\"ui-menu-item level2\">\n <a class=\"group flex items-center hover:text-purple-500 transition-colors duration-500\" href=\"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/area-of-body\/eyes.html\"><span>Eyes<\/span><span class=\"inline-block transition-all text-xs duration-500 text-purple-500 group-hover:translate-x-0 group-hover:opacity-100 -translate-x-full ml-1.5 opacity-0\">\n <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-4 w-4\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\"\n d=\"M10.293 3.293a1 1 0 011.414 0l6 6a1 1 0 010 1.414l-6 6a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-4.293-4.293a1 1 0 010-1.414z\"\n clip-rule=\"evenodd\"\/>\n <\/svg>\n <\/span><\/a>\n <\/li>\n <li class=\"ui-menu-item level2\">\n <a class=\"group flex items-center hover:text-purple-500 transition-colors duration-500\" href=\"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/area-of-body\/neck.html\"><span>Neck<\/span><span class=\"inline-block transition-all text-xs duration-500 text-purple-500 group-hover:translate-x-0 group-hover:opacity-100 -translate-x-full ml-1.5 opacity-0\">\n <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-4 w-4\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\"\n d=\"M10.293 3.293a1 1 0 011.414 0l6 6a1 1 0 010 1.414l-6 6a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-4.293-4.293a1 1 0 010-1.414z\"\n clip-rule=\"evenodd\"\/>\n <\/svg>\n <\/span><\/a>\n <\/li>\n <\/ul>\n <\/div>\n <div class=\"grid grid-cols-2\">\n <ul class=\"space-y-2\">\n <li>\n <a class=\"group flex items-center hover:text-purple-500 transition-colors duration-500\" href=\"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/ahas.html\"><span>AHA<\/span><span class=\"inline-block transition-all text-xs duration-500 text-purple-500 group-hover:translate-x-0 group-hover:opacity-100 -translate-x-full ml-1.5 opacity-0\">\n <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-4 w-4\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\"\n d=\"M10.293 3.293a1 1 0 011.414 0l6 6a1 1 0 010 1.414l-6 6a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-4.293-4.293a1 1 0 010-1.414z\"\n clip-rule=\"evenodd\"\/>\n <\/svg>\n <\/span><\/a>\n <\/li>\n <li class=\"ui-menu-item level2\">\n <a class=\"group flex items-center hover:text-purple-500 transition-colors duration-500\" href=\"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/bhas.html\"><span>BHA<\/span><span class=\"inline-block transition-all text-xs duration-500 text-purple-500 group-hover:translate-x-0 group-hover:opacity-100 -translate-x-full ml-1.5 opacity-0\">\n <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-4 w-4\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\"\n d=\"M10.293 3.293a1 1 0 011.414 0l6 6a1 1 0 010 1.414l-6 6a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-4.293-4.293a1 1 0 010-1.414z\"\n clip-rule=\"evenodd\"\/>\n <\/svg>\n <\/span><\/a>\n <\/li>\n <li class=\"ui-menu-item level2\">\n <a class=\"group flex items-center hover:text-purple-500 transition-colors duration-500\" href=\"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/chemical-peels.html\"><span>Chemical Peels<\/span><span class=\"inline-block transition-all text-xs duration-500 text-purple-500 group-hover:translate-x-0 group-hover:opacity-100 -translate-x-full ml-1.5 opacity-0\">\n <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-4 w-4\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\"\n d=\"M10.293 3.293a1 1 0 011.414 0l6 6a1 1 0 010 1.414l-6 6a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-4.293-4.293a1 1 0 010-1.414z\"\n clip-rule=\"evenodd\"\/>\n <\/svg>\n <\/span><\/a>\n <\/li>\n <li class=\"ui-menu-item level2\">\n <a class=\"group flex items-center hover:text-purple-500 transition-colors duration-500\" href=\"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/essential-oils.html\"><span>Essential Oils<\/span><span class=\"inline-block transition-all text-xs duration-500 text-purple-500 group-hover:translate-x-0 group-hover:opacity-100 -translate-x-full ml-1.5 opacity-0\">\n <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-4 w-4\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\"\n d=\"M10.293 3.293a1 1 0 011.414 0l6 6a1 1 0 010 1.414l-6 6a1 1 0 01-1.414-1.414L14.
3304586 11H3a1 1 0 110-2h11.586l-4.293-4.293a1 1 0 010-1.414z\"\n clip-rule=\"evenodd\"\/>\n <\/svg>\n <\/span><\/a>\n <\/li>\n <li class=\"ui-menu-item level2\">\n <a class=\"group flex items-center hover:text-purple-500 transition-colors duration-500\" href=\"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/hyaluronic.html\"><span>Fillers<\/span><span class=\"inline-block transition-all text-xs duration-500 text-purple-500 group-hover:translate-x-0 group-hover:opacity-100 -translate-x-full ml-1.5 opacity-0\">\n <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-4 w-4\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\"\n d=\"M10.293 3.293a1 1 0 011.414 0l6 6a1 1 0 010 1.414l-6 6a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-4.293-4.293a1 1 0 010-1.414z\"\n clip-rule=\"evenodd\"\/>\n <\/svg>\n <\/span><\/a>\n <\/li>\n <\/ul>\n <ul class=\"space-y-2\">\n <li>\n <a class=\"group flex items-center hover:text-purple-500 transition-colors duration-500\" href=\"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/growth-factors.html\"><span>Growth Factors<\/span><span class=\"inline-block transition-all text-xs duration-500 text-purple-500 group-hover:translate-x-0 group-hover:opacity-100 -translate-x-full ml-1.5 opacity-0\">\n <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-4 w-4\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\"\n d=\"M10.293 3.293a1 1 0 011.414 0l6 6a1 1 0 010 1.414l-6 6a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-4.293-4.293a1 1 0 010-1.414z\"\n clip-rule=\"evenodd\"\/>\n <\/svg>\n <\/span><\/a>\n <\/li>\n <li class=\"ui-menu-item level2\">\n <a class=\"group flex items-center hover:text-purple-500 transition-colors duration-500\" href=\"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/lighteners.html\"><span>Lighteners<\/span><span class=\"inline-block transition-all text-xs duration-500 text-purple-500 group-hover:translate-x-0 group-hover:opacity-100 -translate-x-full ml-1.5 opacity-0\">\n <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-4 w-4\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\"\n d=\"M10.293 3.293a1 1 0 011.414 0l6 6a1 1 0 010 1.414l-6 6a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-4.293-4.293a1 1 0 010-1.414z\"\n clip-rule=\"evenodd\"\/>\n <\/svg>\n <\/span><\/a>\n <\/li>\n <li class=\"ui-menu-item level2\">\n <a class=\"group flex items-center hover:text-purple-500 transition-colors duration-500\" href=\"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/retinoids.html\"><span>Retinoids<\/span><span class=\"inline-block transition-all text-xs duration-500 text-purple-500 group-hover:translate-x-0 group-hover:opacity-100 -translate-x-full ml-1.5 opacity-0\">\n <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-4 w-4\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\"\n d=\"M10.293 3.293a1 1 0 011.414 0l6 6a1 1 0 010 1.414l-6 6a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-4.293-4.293a1 1 0 010-1.414z\"\n clip-rule=\"evenodd\"\/>\n <\/svg>\n <\/span><\/a>\n <\/li>\n <li class=\"ui-menu-item level2\">\n <a class=\"group flex items-center hover:text-purple-500 transition-colors duration-500\" href=\"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/stem-cells.html\"><span>Stem Cells<\/span><span class=\"inline-block transition-all text-xs duration-500 text-purple-500 group-hover:translate-x-0 group-hover:opacity-100 -translate-x-full ml-1.5 opacity-0\">\n <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-4 w-4\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\"\n d=\"M10.293 3.293a1 1 0 011.414 0l6 6a1 1 0 010 1.414l-6 6a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-4.293-4.293a1 1 0 010-1.414z\"\n clip-rule=\"evenodd\"\/>\n <\/svg>\n <\/span><\/a>\n <\/li>\n <li class=\"ui-menu-item level2\">\n <a class=\"group flex items-center hover:text-purple-500 transition-colors duration-500\" href=\"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/vitamin-c.html\"><span>Vitamin C<\/span><span class=\"inline-block transition-all text-xs duration-500 text-purple-500 group-hover:translate-x-0 group-hover:opacity-100 -translate-x-full ml-1.5 opacity-0\">\n <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-4 w-4\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\"\n d=\"M10.293 3.293a1 1 0 011.414 0l6 6a1 1 0 010 1.414l-6 6a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-4.293-4.293a1 1 0 010-1.414z\"\n clip-rule=\"evenodd\"\/>\n <\/svg>\n <\/span><\/a>\n <\/li>\n <\/ul>\n <\/div>\n <\/li>\n <\/ul>\n<\/div>\n<div class=\"justify-end\">\n <img class=\"w-full\" loading=\"lazy\" src=\"https:\/\/www.skintrends.com\/media\/wysiwyg\/nav-img-footer\/menu-banners_gray-bg_940x230px_05.png\" alt=\"\">\n<\/div>\n","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs.html\/","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Expert Help","is_category":false,"id":"custom-node-2","status":1,"sort_order":"4","content":"","url":"https:\/\/www.skintrends.com\/expert-help","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"COUPON CODES","is_category":false,"id":"custom-node-10","status":3,"sort_order":"100001","content":"","url":"","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"HOW TO ORDER","is_category":false,"id":"custom-node-11","status":3,"sort_order":"100002","content":"","url":"","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"SHIPPING","is_category":false,"id":"custom-node-12","status":3,"sort_order":"100003","content":"","url":"","current":false}],"__disableTmpl":true,"name":null,"is_category":null,"id":null,"status":0,"sort_order":null,"content":null,"url":null,"current":false} }, 3305 renderNode(node) { 3306 return createChildHtml(node, 0, this.filterData); 3307 }, 3308 redirectTo(url) { 3309 window.location.replace(url); 3310 }, 3311 toggleCollapse(id) { 3312 const {url, elems} = this.getNode(id); 3313 if (this.megaMenu.collapseStatuses[id] !== undefined) { 3314 if (elems.length > 0) 3315 this.megaMenu.collapseStatuses[id] = !this.megaMenu.collapseStatuses[id]; 3316 else this.redirectTo(url); 3317 } 3318 }, 3319 getNode(id) { 3320 return this.megaMenu.nodes[id]; 3321 }, 3322 filterData(list) { 3323 const isMobile = matchMedia('(max-width: 1023px)').matches; 3324 return list.filter((elem) => { 3325 const mustBeMobile = (isMobile ? 1 : 0) && elem.status === 3, 3326 canDisplayBothScreen = elem.status === 1,
3327 isBrands = elem.id === 'additional-node-amasty_shopby_brand_allbrands'; 3328 return mustBeMobile || canDisplayBothScreen || isBrands; 3329 }); 3330 }, 3331 getCollapseStatus(id) { 3332 return this.megaMenu.collapseStatuses[id]; 3333 }, 3334 buildCollapse(data) { 3335 this.megaMenu.collapseStatuses[data.id] = false; 3336 if (data.elems.length !== 0) { 3337 for (let elem of data.elems) { 3338 this.buildCollapse(elem); 3339 } 3340 } 3341 }, 3342 buildNodes(node) { 3343 this.megaMenu.nodes[node.id] = node; 3344 if (node.elems.length !== 0) { 3345 for (let elem of node.elems) { 3346 this.buildNodes(elem); 3347 } 3348 } 3349 }, 3350 renderCollapse() { 3351 const findNodeById = (node, id) => { 3352 if (node.id === id) return node; 3353 if (!node.elems) return null; 3354 for (let child of node.elems) { 3355 const found = findNodeById(child, id); 3356 if (found) return found; 3357 } 3358 return null; 3359 } 3360 3361 const brandsNode = findNodeById(this.megaMenu.data, 'additional-node-amasty_shopby_brand_allbrands'); 3362 3363 if (brandsNode && Array.isArray(window.specialCategories)) { 3364 window.specialCategories.forEach(cat => { 3365 brandsNode.elems.push({ 3366 id: `special-${cat.id}`, 3367 name: cat.name, 3368 url: cat.url, 3369 elems: [], 3370 status: 1 3371 }); 3372 }); 3373 } 3374 3375 this.buildCollapse(this.megaMenu.data); 3376 this.buildNodes(this.megaMenu.data); 3377 3378 document.getElementById('mobile-collapse').innerHTML = this.filterData(this.megaMenu.data.elems).map(elem => { 3379 return `<div class="border-b border-gray-500">${this.renderNode(elem)}</div>`; 3380 }).join('\n'); 3381 } 3382 } 3383 }; 3384 3385 const initMenuMobile_6ac3e9a5f10fb = () => { 3386 return Object.assign({ 3387 mobilePanelActiveId: null, 3388 open: false, 3389 menuTab: true, 3390 accountTab: false,
3391 setActiveMenu(menuNode) { 3392 Array.from(menuNode.querySelectorAll('a')).filter(link => { 3393 return link.href === window.location.href.split('?')[0]; 3394 }).map(item => { 3395 item.classList.add('underline'); 3396 item.closest('div.level-0') && 3397 item.closest('div.level-0').querySelector('a.level-0').classList.add('underline'); 3398 }); 3399 } 3400 }, initMegaMenuMobileComponent()); 3401 } 3402</script>
3402 3403 3404<a class="ammenu-logo sx:hidden" 3405 href="https://www.skintrends.com/" 3406 title="Skin Trends Skincare & Cosmetics" 3407 aria-label="store logo"> 3408 <img class="w-[250px] h-[75px] md:w-[294px] md:h-[88px]" 3409 src="https://www.skintrends.com/media/logo/websites/1/logo.png" 3410 title="Skin Trends Skincare & Cosmetics" 3411 alt="Skin Trends Skincare & Cosmetics" 3412 /> 3413</a> 3414 <a class="my-account-mobile md:hidden text-purple sx:order-2" 3415 onclick="hyva.setCookie && hyva.setCookie( 3416 'login_redirect', 3417 window.location.href, 3418 1 3419 )" 3420 @click="$dispatch('logIn', { open: true })" 3421 id="login" 3422 href="#"> 3423 <svg xmlns="http://www.w3.org/2000/svg" viewBox="2.5 2.5 25 25" 3424 stroke="currentColor" width="32" height="32" aria-hidden="true"> 3425 <path stroke="#af7493" stroke-width="1.5" fill="none" d="M 19 10 a 4 4 0 0 1 -8 0 a 4 4 0 1 1 8 0 z 3426 M 22 24 A 7 7 0 0 0 8 24 M -20 10 z M 15 26.5 c 6.351 0 11.5 -5.149 11.5 -11.5 S 21.351 3.5 15 3.5 3427 S 3.5 8.649 3.5 15 S 8.649 26.5 15 26.5 z z"/> 3428 </svg> 3429 </a> 3430 <div class="search-content md:min-w-[272px] xl:min-w-[450px] lg:max-w-[22rem] lg:w-full 3431 2xl:max-w-md z-10 flex flex-wrap md:relative md:order-none z-[1]" id="search-content"> 3432 <button id="menu-search-icon" 3433 class="btn-search inline-block align-top left-2 top-5 ml-1 sx:order-2 3434 md:absolute no-underline sm:ml-3 text-purple" 3435 @click.prevent=" 3436 openSearch(); 3437 $nextTick(() => { 3438 const searchInput = document.querySelector('#search'); 3439 searchInput.focus(); 3440 searchInput.select(); 3441 }); 3442 " 3443 > 3444 <span class="sr-only label"> 3445 Search </span> 3446 3447 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="w-8 h-8 md:h-6 md:w-6 icon relative z-10" width="25" height="25" role="img"> 3448 <path stroke-linecap="round" stroke-linejoin="round" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"/> 3449</svg> 3450 </button> 3451 <div class="md:block sx:absolute sx:w-full md:w-full sx:left-0 sx:top-16 3452 lg:w-full" :class="{ 'block': searchOpenInput, 'hidden': !searchOpenInput }" 3453 x-show="searchOpenInput"> 3454
3454<script> 3455 'use strict'; 3456 3457 function initMiniSearch() { 3458 return { 3459 minSearchLength: 1, 3460 suggestions: [], 3461 suggest() { 3462 const search = this.$refs.searchInput; 3463 if (search.value.length >= this.minSearchLength) { 3464 search.setCustomValidity(''); 3465 search.reportValidity(); 3466 this.fetchSuggestions(search.value); 3467 } else { 3468 this.suggestions = []; 3469 } 3470 }, 3471 fetchSuggestions(term) { 3472 fetch( 3473 window.BASE_URL + 'search/ajax/suggest?' + new URLSearchParams({q: term}), 3474 { 3475 headers: { 3476 'X-Requested-With': 'XMLHttpRequest' 3477 } 3478 } 3479 ) 3480 .then(response => response.json()) 3481 .then(result => this.suggestions = result); 3482 }, 3483 search(term) { 3484 const search = this.$refs.searchInput; 3485 term = term || search.value; 3486 if (term.length < this.minSearchLength) { 3487 search.setCustomValidity('Minimum\u0020Search\u0020query\u0020length\u0020is\u00201'); 3488 search.reportValidity(); 3489 } else { 3490 search.setCustomValidity(''); 3491 search.value = term; 3492 this.$refs.form.submit(); 3493 } 3494 }, 3495 focusElement(element) { 3496 if (element && element.nodeName === "DIV") { 3497 element.focus(); 3498 return true; 3499 } else { 3500 return false; 3501 } 3502 } 3503 } 3504 } 3505</script>
3505 3506<div class="container py-2 mx-auto text-black px-0" x-data="initMiniSearch()"> 3507 <form class="relative form minisearch" id="search_mini_form" x-ref="form" @submit.prevent="search()" 3508 action="https://www.skintrends.com/catalogsearch/result/" method="get"> 3509 <label class="hidden" for="search" data-role="minisearch-label"> 3510 <span>Search</span> 3511 </label> 3512 <input id="search" 3513 x-ref="searchInput" 3514 type="search" 3515 autocomplete="off" 3516 name="q" 3517 value="" 3518 placeholder="Search" 3519 maxlength="128" 3520 class="w-full p-2 text-base leading-normal appearance-none text-grey-800 focus:outline-none 3521 input-search rounded-3xl p-3.5 pl-12 h-12 border-purple focus:border-purple" 3522 @focus.once="suggest" 3523 @input.debounce.300="suggest" 3524 @keydown.arrow-down.prevent="focusElement($el.querySelector('[tabindex]'))" 3525 /> 3526 <template x-if="suggestions.length > 0"> 3527 <div class="absolute w-full leading-normal transition appearance-none text-grey-800 flex flex-col mt-1"> 3528 <template x-for="suggestion in suggestions"> 3529 <div class="flex justify-between p-2 bg-container-lighter even:bg-container mb-1 cursor-pointer 3530 border border-container hover:bg-container-darker" 3531 tabindex="0" 3532 @click="search(suggestion.title)" 3533 @keydown.enter="search(suggestion.title)" 3534 @keydown.arrow-up.prevent=" 3535 focusElement($event.target.previousElementSibling) || $refs.searchInput.focus() 3536 " 3537 @keydown.arrow-down.prevent="focusElement($event.target.nextElementSibling)" 3538 > 3539 <span x-text="suggestion.title"></span> 3540 <span x-text="suggestion.num_results"></span> 3541 </div> 3542 </template> 3543 </div> 3544 </template> 3545 <button type="submit" 3546 title="Search" 3547 class="action search sr-only" 3548 aria-label="Search" 3549 > 3550 Search </button> 3551 </form> 3552</div> 3553</div> 3554 3555 </div> 3556 <!--Main Navigation--> 3557 <div class="c-header_store_hours hidden lg:block"> 3558 <div class="call-us"> 3559 <div class="number"> 3560 <svg xmlns="http://www.w3.org/2000/svg" height="13px" class="fill-purple inline-block"
3561 viewBox="0 0 384 512"> 3562 <path 3563 d="M97.333 506.966c-129.874-129.874-129.681-340.252 0-469.933 5.698-5.698 14.527-6.632 21.263-2.422l64.817 40.513a17.187 17.187 0 0 1 6.849 20.958l-32.408 81.021a17.188 17.188 0 0 1-17.669 10.719l-55.81-5.58c-21.051 58.261-20.612 122.471 0 179.515l55.811-5.581a17.188 17.188 0 0 1 17.669 10.719l32.408 81.022a17.188 17.188 0 0 1-6.849 20.958l-64.817 40.513a17.19 17.19 0 0 1-21.264-2.422zM247.126 95.473c11.832 20.047 11.832 45.008 0 65.055-3.95 6.693-13.108 7.959-18.718 2.581l-5.975-5.726c-3.911-3.748-4.793-9.622-2.261-14.41a32.063 32.063 0 0 0 0-29.945c-2.533-4.788-1.65-10.662 2.261-14.41l5.975-5.726c5.61-5.378 14.768-4.112 18.718 2.581zm91.787-91.187c60.14 71.604 60.092 175.882 0 247.428-4.474 5.327-12.53 5.746-17.552.933l-5.798-5.557c-4.56-4.371-4.977-11.529-.93-16.379 49.687-59.538 49.646-145.933 0-205.422-4.047-4.85-3.631-12.008.93-16.379l5.798-5.557c5.022-4.813 13.078-4.394 17.552.933zm-45.972 44.941c36.05 46.322 36.108 111.149 0 157.546-4.39 5.641-12.697 6.251-17.856 1.304l-5.818-5.579c-4.4-4.219-4.998-11.095-1.285-15.931 26.536-34.564 26.534-82.572 0-117.134-3.713-4.836-3.115-11.711 1.285-15.931l5.818-5.579c5.159-4.947 13.466-4.337 17.856 1.304z"/> 3564 </svg> 3565 <strong><a href="tel:855-851-1100">855-851-1100</a></strong> 3566 </div> 3567 3568 <div class="call"> 3569 <svg xmlns="http://www.w3.org/2000/svg" height="13px" class="fill-purple inline-block"
3570 viewBox="0 0 512 512"> 3571 <path 3572 d="M256 0a256 256 0 1 1 0 512A256 256 0 1 1 256 0zM232 120V256c0 8 4 15.5 10.7 20l96 64c11 7.4 25.9 4.4 33.3-6.7s4.4-25.9-6.7-33.3L280 243.2V120c0-13.3-10.7-24-24-24s-24 10.7-24 24z"/> 3573 </svg> 3574 <span>09 am - 09 pm EST M-F</span> 3575 </div> 3576 </div> 3577 <div class="time">10 am - 03 pm EST SAT</div> 3578</div> 3579 3580 <!--Cart Icon--> 3581 <div class="cart-wrapper relative order-4"> 3582 <a id="menu-cart-icon" 3583 @click.prevent.stop="$dispatch('toggle-cart',{});" class="items-center minicart-wrapper order-3 relative inline-block ml-1 3584 no-underline sm:ml-3 hover:text-black action showcart w-9 h-9 mr-2" 3585 aria-label="My Cart" 3586 title="My Cart" 3587 href="https://www.skintrends.com/checkout/cart/index/" 3588 > 3589 <span class="absolute right-0 w-5 h-5 rounded-[50%] -mt-5 -mr-4 top-3 bg-primary"> 3590 <span x-text="cart.summary_count || 0" class="text-white text-[9px] font-semibold 3591 absolute -translate-x-2/4 -translate-y-2/4 left-2/4 top-[55%]">0</span></span> 3592 </a> 3593
3593<script> 3594 'use strict'; 3595 (function( hyva, undefined ) { 3596 /** 3597 * Takes a form element and submits it through fetch, 3598 * then replaces the result into the document without 3599 * refreshing the page 3600 */ 3601 hyva.postMiniCart = (form) => { 3602 if (!form.action) { 3603 return; 3604 } 3605 const action = form.action; 3606 const formData = new FormData(form); 3607 if (!formData.uenc) { 3608 formData.set('form_key', hyva.getFormKey()); 3609 formData.append('uenc', hyva.getUenc()); 3610 } 3611 window.fetch(action, { 3612 method: 'POST', 3613 body: formData 3614 }).then(result => { 3615 return result.text() 3616 }).then((content) => { 3617 hyva.replaceDomElement('#maincontent', content); 3618 }).catch((error) => { 3619 console.error(error); 3620 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 3621 [{ 3622 type: "error", 3623 text: "Something\u0020went\u0020wrong.\u0020Please\u0020try\u0020again.//" 3624 }], 10000 3625 ); 3626 }) 3627 } 3628 }( window.hyva = window.hyva || {} )); 3629</script>
vendor: 1 bytes, line 3629
3629
3630<script> 3631 function initCartDrawer() { 3632 return { 3633 openCart: false, 3634 isLoading: false, 3635 cart: {}, 3636 maxItemsToDisplay: 10, 3637 itemsCount: 0, 3638 totalCartAmount: 0, 3639 getData(data) { 3640 if (data.cart) { 3641 this.cart = data.cart; 3642 this.itemsCount = data.cart.items && data.cart.items.length || 0; 3643 this.totalCartAmount = this.cart.summary_count; 3644 this.setCartItems(); 3645 } 3646 this.isLoading = false; 3647 }, 3648 cartItems: [], 3649 getItemCountTitle() { 3650 if(this.maxItemsToDisplay >= this.totalCartAmount){ 3651 return hyva.strf(`%0 ${this.totalCartAmount > 1 ? 'Items': 'Item'}`, this.totalCartAmount); 3652 } 3653 return hyva.strf('%0 of %1 Items', 3654 this.maxItemsToDisplay, this.totalCartAmount) 3655 }, 3656 setCartItems() { 3657 this.cartItems = this.cart.items && this.cart.items.sort((a, b) => b.item_id - a.item_id) || []; 3658 3659 if (this.maxItemsToDisplay > 0) { 3660 this.cartItems = this.cartItems.slice(0, parseInt(this.maxItemsToDisplay, 10)); 3661 } 3662 }, 3663 deleteItemFromCart(itemId) { 3664 this.isLoading = true; 3665 3666 const formKey = hyva.getFormKey(); 3667 const postUrl = BASE_URL + 'checkout/sidebar/removeItem/'; 3668 3669 fetch(postUrl, { 3670 "headers": { 3671 "content-type": "application/x-www-form-urlencoded; charset=UTF-8", 3672 }, 3673 "body": "form_key=" + formKey + "&item_id=" + itemId, 3674 "method": "POST", 3675 "mode": "cors", 3676 "credentials": "include" 3677 }).then(response => { 3678 if (response.redirected) { 3679 window.location.href = response.url; 3680 } else if (response.ok) { 3681 return response.json(); 3682 } else { 3683 window.dispatchMessages && window.dispatchMessages([{ 3684 type: 'warning', 3685 text: 'Could\u0020not\u0020remove\u0020item\u0020from\u0020quote.' 3686 }]); 3687 this.isLoading = false; 3688 } 3689 }).then(result => { 3690 window.dispatchMessages && window.dispatchMessages([{ 3691 type: result.success ? 'success' : 'error', 3692 text: result.success 3693 ? 'You\u0020removed\u0020the\u0020item.' 3694 : result.error_message 3695 }], result.success ? 5000 : 0) 3696 window.dispatchEvent(new CustomEvent('reload-customer-section-data')); 3697 }); 3698 } 3699 } 3700 } 3701 function initUpdateQty() { 3702 return { 3703 updateBtn: false, 3704 toggleButton(event,qty,el) { 3705 (qty != event.target.value && event.target.value > 0 ) 3706 ? document.getElementById(el).style.visibility = "visible" 3707 : document.getElementById(el).style.visibility = "hidden"; 3708 }, 3709 toggleQty(el) { 3710 document.getElementById(el).style.visibility = "visible"; 3711 }, 3712 fireUpdateAction(element) { 3713 document.getElementById(element).style.animation = "spin 2s linear infinite"; 3714 document.getElementById(element).style.opacity = "0.7"; 3715 setTimeout(function() { 3716 document.getElementById(element).style.animation="none"; 3717 document.getElementById(element).style.opacity="1"; 3718 document.getElementById(element).style.visibility="hidden"; 3719 }, 2000); 3720 document.getElementById('minicart-update-action').click(); 3721 } 3722 } 3723 } 3724</script>
3724 3725<section id="cart-drawer" class="cart-drawer absolute md:right-0 right-[-15px] z-[3]" 3726 x-data="Object.assign({},initCartDrawer(),initUpdateQty())" 3727 @private-content-loaded.window="getData($event.detail.data)" 3728 @delete-cart-item.window="deleteItemFromCart($event.detail.id)" 3729 @toggle-cart.window="openCart=!openCart" 3730 @keydown.window.escape="openCart=false" 3731> 3732 <div class="content-minicart"> 3733 <template x-if="cart && cart.summary_count"> 3734 <div role="dialog" 3735 aria-labelledby="cart-drawer-title" 3736 aria-modal="true" 3737 @click.outside="openCart=false" 3738 class="inset-y-0 right-0 z-30 flex max-w-full w-96"> 3739 <div class="relative w-screen max-w-md shadow-2xl" x-show="openCart"> 3740 3741 <div class="flex flex-col h-full py-6 space-y-6 bg-white shadow-xl rounded p-5 bg-[#f7f7f7]"> 3742 3743 3744 <header class="flex justify-between"> 3745 <div id="cart-drawer-title" 3746 class="text-base leading-7 text-gray-900 font-bold relative after:w-9 after:absolute 3747 after:h-px after:content-[''] after:left-0 after:bottom-0 after:bg-purple"> 3748 <span class="">My Cart,</span> 3749 <span class="items-total text-base font-normal text-gray" 3750 x-text="getItemCountTitle()"> 3751 </span> 3752 </div> 3753 <div x-show="openCart"> 3754 <button @click="openCart=false" aria-label="Close panel" title="Close" 3755 class="p-1 hover:text-purple-500 transition duration-150 ease-in-out"> 3756 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="stroke-purple" width="24" height="24" role="img"> 3757 <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/> 3758</svg> 3759 </button> 3760 </div> 3761 </header> 3762 <div class="w-full mx-auto -m-3 space-x-4 minicart-button transition duration-150 ease-in-out"> 3763 <a href="https://www.skintrends.com/checkout/cart/" 3764 class="underline text-center block text-sm font-bold px-2 py-3 cursor-pointer 3765 no-underline text-white bg-purple rounded-2xl hover:bg-white hover:text-purple-400"> 3766 View / Edit Cart & Checkout </a> 3767 </div> 3768 3769 3770 <div class="relative grid gap-6 pt-6 sm:gap-8 border-container minicart-scroll-bar max-h-[450px] 3771 overflow-y-auto overflow-x-hidden"> 3772 <form action="https://www.skintrends.com/checkout/cart/updatePost/" 3773 @submit.prevent="hyva.postMiniCart($event.target)" 3774 method="post" 3775 id="form-mini-validate" 3776 class="form form-cart" 3777 > 3778 <input name="form_key" type="hidden" value="hHYNuMT1BvCF79ZX" /> 3779 <template x-for="item in cartItems"> 3780 <div class="flex items-start px-3 pt-5 pb-3 -m-3 space-x-4 transition duration-150 3781 ease-in-out rounded-lg border-b-gray-200 border-b border-solid"> 3782 <a :href="item.product_url" class="w-1/3"> 3783 <img 3784 :src="item.product_image.src" 3785 :width="item.product_image.width" 3786 :height="item.product_image.height" 3787 :alt="item.product_name" 3788 :title="item.product_name" 3789 loading="lazy" 3790 /> 3791 </a> 3792 <div class="w-2/3 space-y-2 mt-0"> 3793 <div> 3794 <p class="text-base font-bold"> 3795 <a :href="item.product_url" 3796 x-html="item.product_name" :title="item.product_name"></a> 3797 </p> 3798 <p class="text-sm"><span x-html="item.product_sku"></span></p> 3799 </div> 3800 <template x-for="option in item.options"> 3801 <div class="pt-2"> 3802 <p class="font-semibold" x-text="option.label + ':'"></p> 3803 <p class="text-secondary" x-html="option.value"></p> 3804 </div> 3805 </template> 3806 <!-- form-qty --> 3807 <div class="details-qty inline-block flex justify-between"> 3808 <label x-bind:for="'cart-' + item.item_id + '-qty'" 3809 class="text-base m-auto mx-0">
3810 <span>Qty</span></label> 3811 <div class="relative field-qty pl-3"> 3812 <input x-bind:id="'cart-' + item.item_id + '-qty'" 3813 x-bind:name="'cart['+ item.item_id+ '][qty]'" 3814 x-bind:value="item.qty" 3815 x-on:input.change="toggleButton(event, item.qty,'btn-update-' + item.item_id + '-qty')" 3816 type="number" 3817 size="4" 3818 step="any" 3819 title="Qty" 3820 class="form-input qty px-6 py-2 h-9 text-center invalid:ring-2 invalid:ring-red-500 w-28 rounded-full border-1 border-solid border-gray qty-box forcus:border-gray-900 hover:border-gray-900" 3821 required="required" 3822 min="0" 3823 data-role="cart-item-qty"/> 3824 <div class="qty-minus absolute top-0 pl-4 cursor-pointer 3825 select-none" title="Minus" @click="toggleQty('btn-update-' + item.item_id + '-qty'); item.qty > 1 ? item.qty-- : item.qty"> 3826 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="w-auto stroke-purple" width="8" height="36" role="img"> 3827 <path stroke-linecap="round" stroke-linejoin="round" d="M20 12H4"/> 3828</svg> 3829 </div> 3830 <div class="qty-plus absolute top-0 right-0 pr-4 cursor-pointer 3831 select-none" title="Plus" 3832 @click="toggleQty('btn-update-' + item.item_id + '-qty'); item.qty++"> 3833 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="w-auto stroke-purple" width="12" height="36" role="img"> 3834 <path stroke-linecap="round" stroke-linejoin="round" d="M12 4v16m8-8H4"/> 3835</svg> 3836 </div> 3837 </div> 3838 <span x-on:click="fireUpdateAction('btn-update-' + item.item_id + '-qty')" 3839 x-bind:id="'btn-update-' + item.item_id + '-qty'" 3840 class="update-cart-item invisible animate-none opacity-100 text-sm 3841 stroke-purple cursor-pointer pl-0 w-5 h-5 mt-2" 3842 title="Update"> 3843 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="w-auto stroke-purple" width="20" height="20" role="img"> 3844 <path stroke-linecap="round" stroke-linejoin="round" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15"/> 3845</svg> 3846 </span> 3847 3848 </div> 3849 <!-- form qty --> 3850 <p><span class="font-bold" x-html="item.product_price"></span></p> 3851 3852 </div> 3853 3854 <div class="pt-0"> 3855 <button class="inline-flex hover:opacity-70" title="Remove item" 3856 @click="$dispatch('delete-cart-popup', {id: item.item_id})" 3857 type="button" 3858 > 3859 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="stroke-purple" width="20" height="20" role="img"> 3860 <path stroke-linecap="round" stroke-linejoin="round" d="M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16"/> 3861</svg> 3862 </button> 3863 </div> 3864 3865 </div> 3866 </template> 3867 <button type="submit" 3868 id="minicart-update-action" 3869 name="update_cart_action" 3870 data-cart-item-update="" 3871 value="update_qty" 3872 class="action update w-0 h-0 absolute opacity-0 invisible hidden" 3873 > 3874 Update </button> 3875 </form> 3876 </div> 3877 <div class="relative grid gap-6 py-6 sm:gap-8"> 3878 <div class="w-full p-3 -m-3 space-x-4 transition duration-150 ease-in-out 3879 rounded-lg flex justify-between">
3880 <span class="font-bold">Cart Subtotal</span> 3881 <span x-html="cart.subtotal" class="font-bold text-gray-darker"></span> 3882 </div> 3883 </div> 3884 <div class="block-payment-methods center"> 3885 <a href="https://www.skintrends.com/checkout/cart/"> 3886 <img src="https://www.skintrends.com/media/wysiwyg/payment_methods_update.png" alt="Accept Payment Methods"> 3887 </a> 3888</div><div class="links-content row"><ul class="links-addon"> 3889<li><a href="https://www.skintrends.com/how-to-place-an-order/">How to Order</a></li> 3890<li><a href="https://www.skintrends.com/coupon-codes/">Coupon Codes</a></li> 3891<li><a href="https://www.skintrends.com/unauthorized-dealer-warning/">Dealer Alert</a></li> 3892</ul> 3893<ul class="links-addon"> 3894<li><a href="https://www.skintrends.com/free-gift-with-purchase/">Free Gifts</a></li> 3895<li><a href="https://www.skintrends.com/skin-trends-reward-points-program/">Reward Points</a></li> 3896<li><a href="https://www.skintrends.com/samples/">Free Samples</a></li> 3897</ul></div> </div> 3898 </div> 3899 <div class="flex flex-row justify-center items-center w-full h-full fixed select-none z-50" 3900 style="left: 50%;top: 50%;transform: translateX(-50%) translateY(-50%);background: rgba(255,255,255,0.7);" 3901 x-show="isLoading" 3902 x-transition:enter="ease-out duration-200" 3903 x-transition:enter-start="opacity-0" 3904 x-transition:enter-end="opacity-100" 3905 x-transition:leave="ease-in duration-200" 3906 x-transition:leave-start="opacity-100" 3907 x-transition:leave-end="opacity-0"> 3908 <!-- By Sam Herbert (@sherb), for everyone. More @ http://goo.gl/7AJzbL --> 3909<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 57 57" stroke="currentColor" class="text-primary" width="57" height="57" role="img"> 3910 <g fill="none" fill-rule="evenodd"> 3911 <g transform="translate(1 1)" stroke-width="2"> 3912 <circle cx="5" cy="50" r="5"> 3913 <animate attributeName="cy" begin="0s" dur="2.2s" values="50;5;50;50" calcMode="linear" repeatCount="indefinite"/> 3914 <animate attributeName="cx" begin="0s" dur="2.2s" values="5;27;49;5" calcMode="linear" repeatCount="indefinite"/> 3915 </circle> 3916 <circle cx="27" cy="5" r="5"> 3917 <animate attributeName="cy" begin="0s" dur="2.2s" from="5" to="5" values="5;50;50;5" calcMode="linear" repeatCount="indefinite"/> 3918 <animate attributeName="cx" begin="0s" dur="2.2s" from="27" to="27" values="27;49;5;27" calcMode="linear" repeatCount="indefinite"/> 3919 </circle> 3920 <circle cx="49" cy="50" r="5"> 3921 <animate attributeName="cy" begin="0s" dur="2.2s" values="50;50;5;50" calcMode="linear" repeatCount="indefinite"/> 3922 <animate attributeName="cx" from="49" to="49" begin="0s" dur="2.2s" values="49;5;27;49" calcMode="linear" repeatCount="indefinite"/> 3923 </circle> 3924 </g> 3925 </g> 3926</svg> 3927 <div class="ml-10 text-primary text-xl"> 3928 Loading... </div> 3929</div> 3930 </div> 3931 </template> 3932 3933 <template x-if="cart && !cart.summary_count"> 3934 <div role="dialog" 3935 aria-labelledby="cart-drawer-title" 3936 aria-modal="true" 3937 @click.outside="openCart=false" 3938 class="inset-y-0 right-0 z-30 flex max-w-full w-96"> 3939 <div class="relative w-screen max-w-md shadow-2xl" x-show="openCart"> 3940 <div class="flex flex-col h-full py-6 space-y-6 bg-white shadow-xl rounded p-5 bg-[#f7f7f7]"> 3941 3942 <header class="flex justify-between"> 3943 <div id="cart-drawer-title" 3944 class="text-base leading-7 text-gray-900 font-bold relative after:w-9 after:absolute 3945 after:h-px after:content-[''] after:left-0 after:bottom-0 after:bg-purple"> 3946 <span class="">My Cart,</span>
3947 <span class="items-total text-base font-normal text-gray" 3948 x-text="getItemCountTitle()"> 3949 </span> 3950 </div> 3951 <div x-show="openCart"> 3952 <button @click="openCart=false" aria-label="Close panel" title="Close" class="p-1 3953 text-purple hover:text-purple-500 transition duration-150 ease-in-out"> 3954 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="24" height="24" role="img"> 3955 <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/> 3956</svg> 3957 </button> 3958 </div> 3959 </header> 3960 <div class="relative grid gap-6 py-0 sm:gap-8 mt-0"> 3961 <span class="block text-center px-10 py-8 font-normal"> 3962 You have no items in your shopping cart.</span> 3963 </div> 3964 </div> 3965 </div> 3966 </div> 3967 </template> 3968 3969 </div> 3970</section> 3971 3972 </div>
3973 <!--Cart Drawer--> 3974 </div> 3975 3976 <!--Authentication Pop-Up--> 3977
3977<script> 3978 function initAuthentication() { 3979 return { 3980 open: false, 3981 forceAuthentication: false, 3982 checkoutUrl: 'https://www.skintrends.com/checkout/index/', 3983 errors: 0, 3984 hasCaptchaToken: 0, 3985 displayErrorMessage: false, 3986 errorMessages: [], 3987 setErrorMessages: function setErrorMessages(messages) { 3988 this.errorMessages = [messages]; 3989 this.displayErrorMessage = this.errorMessages.length; 3990 }, 3991 submitForm: function () { 3992 // Do not rename $form, the variable is expected to be declared in the recaptcha output 3993 const $form = document.querySelector('#login-form'); 3994 3995 if (this.errors === 0) { 3996 this.dispatchLoginRequest($form); 3997 } 3998 }, 3999 onPrivateContentLoaded: function (data) { 4000 const isLoggedIn = data.customer && data.customer.firstname; 4001 if (data.cart && !isLoggedIn) { 4002 this.forceAuthentication = !data.cart.isGuestCheckoutAllowed; 4003 } 4004 }, 4005 redirectIfAuthenticated: function (event) { 4006 if (event.detail && event.detail.url) { 4007 this.checkoutUrl = event.detail.url; 4008 } 4009 if (!this.forceAuthentication) { 4010 window.location.href = this.checkoutUrl; 4011 } 4012 }, 4013 dispatchLoginRequest: function(form) { 4014 this.isLoading = true; 4015 const username = this.$refs['customer-email'].value; 4016 const password = this.$refs['customer-password'].value; 4017 const formKey = hyva.getFormKey(); 4018 const bodyFields = { 4019 'username': username, 4020 'password': password, 4021 'formKey': formKey 4022 }; 4023 const fieldName = 'g\u002Drecaptcha\u002Dresponse'; 4024 const recaptchaField = fieldName && form[fieldName]; 4025 if (recaptchaField) { 4026 bodyFields[fieldName] = recaptchaField.value; 4027 } 4028 fetch('https://www.skintrends.com/customer/ajax/login/', { 4029 method: 'POST', 4030 headers: { 4031 'Content-Type': 'application/json', 4032 'X-Requested-With': 'XMLHttpRequest' 4033 }, 4034 body: JSON.stringify(bodyFields) 4035 } 4036 ).then(response => { 4037 return response.json() 4038 } 4039 ).then(data=> { 4040 this.isLoading = false; 4041 if (data.errors) { 4042 dispatchMessages([{ 4043 type: 'error', 4044 text: data.message 4045 }], 5000); 4046 this.errors = 1; 4047 this.hasCaptchaToken = 0; 4048 } else { 4049 window.location.href = this.checkoutUrl; 4050 } 4051 }); 4052 } 4053 } 4054 } 4055</script>
4055 4056<section id="authentication-popup" 4057 x-data="initAuthentication()" 4058 @private-content-loaded.window="onPrivateContentLoaded($event.detail.data)" 4059 @toggle-authentication.window="open = forceAuthentication; redirectIfAuthenticated(event)" 4060 @keydown.window.escape="open = false" 4061> 4062 <div 4063 class="backdrop" 4064 aria-hidden="true" 4065 x-cloak 4066 x-show="open" 4067 x-transition:enter="ease-in-out duration-500" 4068 x-transition:enter-start="opacity-0" 4069 x-transition:enter-end="opacity-100" 4070 x-transition:leave="ease-in-out duration-500" 4071 x-transition:leave-start="opacity-100" 4072 x-transition:leave-end="opacity-0" 4073 @click="open = false" 4074 ></div> 4075 <div role="dialog" 4076 aria-modal="true" 4077 @click.outside="open = false" 4078 class="inset-y-0 right-0 z-30 flex max-w-full fixed" 4079 x-cloak 4080 x-show="open" 4081 > 4082 <div class="relative w-screen max-w-md pt-16 bg-container-lighter" 4083 x-show="open" 4084 x-cloak="" 4085 x-transition:enter="transform transition ease-in-out duration-500 sm:duration-700" 4086 x-transition:enter-start="translate-x-full" 4087 x-transition:enter-end="translate-x-0" 4088 x-transition:leave="transform transition ease-in-out duration-500 sm:duration-700" 4089 x-transition:leave-start="translate-x-0" 4090 x-transition:leave-end="translate-x-full" 4091 > 4092 <div 4093 x-show="open" 4094 x-cloak="" 4095 x-transition:enter="ease-in-out duration-500" 4096 x-transition:enter-start="opacity-0" 4097 x-transition:enter-end="opacity-100" 4098 x-transition:leave="ease-in-out duration-500" 4099 x-transition:leave-start="opacity-100" 4100 x-transition:leave-end="opacity-0" class="absolute top-0 right-2 flex p-2 mt-2"> 4101 <button 4102 type="button" 4103 @click="open = false;" 4104 aria-label="Close panel" 4105 class="p-2 text-gray-300 transition duration-150 ease-in-out hover:text-black" 4106 > 4107 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="24" height="24" role="img"> 4108 <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/> 4109</svg> 4110 </button> 4111 </div> 4112 <template x-if="open"> 4113 <div class="flex flex-col h-full py-6 space-y-6 bg-white shadow-xl overflow-y-auto"> 4114 <div class="block-customer-login bg-container border border-container mx-4 p-4 shadow-sm"> 4115 <p id="authenticate-customer-login" class="text-lg leading-7 text-gray-900"> 4116 <strong class="font-medium">Checkout using your account</strong> 4117 </p> 4118 4119 <form class="form form-login" 4120 method="post" 4121 @submit.prevent="submitForm();" 4122 id="login-form" 4123 > 4124 <div class="fieldset login"> 4125 <div class="field email required"> 4126 <label class="label" for="form-login-username" form="login-form" > 4127 <span>Email Address</span> 4128 </label> 4129 <div class="control"> 4130 <input name="username" 4131 id="form-login-username" 4132 x-ref="customer-email" 4133 @change="errors = 0" 4134 type="email" 4135 required 4136 autocomplete="off" 4137 class="form-input input-text" 4138 > 4139 </div> 4140 </div> 4141 <div class="field password required"> 4142 <label for="form-login-password" class="label" form="login-form">
4143 <span>Password</span> 4144 </label> 4145 <div class="control"> 4146 <input name="password" 4147 id="form-login-password" 4148 type="password" 4149 class="form-input input-text" 4150 required 4151 x-ref="customer-password" 4152 autocomplete="off" 4153 @change="errors = 0" 4154 > 4155 </div> 4156 </div> 4157 4158 <input name="context" type="hidden" value="checkout" /> 4159 <div class="actions-toolbar flex justify-between pt-6 pb-2 items-center"> 4160 <button type="submit" class="inline-flex btn btn-primary disabled:opacity-75" 4161 > 4162 Sign In </button> 4163 <a href="https://www.skintrends.com/customer/account/forgotpassword/" 4164 > 4165 Forgot Your Password? </a> 4166 </div> 4167 4168 </div> 4169 </form> 4170 </div> 4171 <div class="mx-4"> 4172 </div> 4173 <div class="block-new-customer bg-container border border-container mx-4 p-4 shadow-sm"> 4174 <p id="authenticate-new-customer" class="text-lg mb-2 leading-7 text-gray-900"> 4175 <strong class="font-medium">Checkout as a new customer</strong> 4176 </p> 4177 4178 <div class="block-content"> 4179 <p class="mb-1"> 4180 Creating an account has many benefits: </p> 4181 <ul class="list-disc pl-5"> 4182 <li> See order and shipping status</li> 4183 <li> Track order history</li> 4184 <li> Check out faster</li> 4185 </ul> 4186 <div class="actions-toolbar flex justify-between mt-6 mb-2 items-center"> 4187 <a href="https://www.skintrends.com/customer/account/create/" 4188 class="inline-flex btn btn-primary"> 4189 Create an Account </a> 4190 </div> 4191 </div> 4192 </div> 4193 </div> 4194 </template> 4195 </div> 4196 </div> 4197</section> 4198</div> 4199 4200<div x-data="Object.assign({}, initComponentMobileCheck(), initStickyMenu())" 4201 x-init="init(); initPos();" 4202 @scroll.window="Alpine.debounce(() => updateStickyMenuPos(), 150)" 4203 class="hidden lg:block" 4204 style="min-height: 59px;" 4205> 4206 <template x-if="!isMobile"> 4207 <div class="desktop-menu"> 4208 <style> 4209 .megamenu .active-item > a { 4210 color: #8e5272; 4211 } 4212 4213 .megamenu .active-item { 4214 border-color: #8e5272; 4215 } 4216 </style> 4217 <div x-data="initMenuDesktop_6ac3e9a60cac3()" 4218 x-init="fetchElements();" 4219 class="megamenu z-20 order-2 sm:order-1 lg:order-2 border-t border-head navigation hidden lg:flex" 4220 style="background: #F4F4F4; 4221 color: #363636" 4222 > 4223 <!-- desktop --> 4224 <div x-ref="nav-desktop" 4225 class="hidden lg:block lg:relative lg:min-h-0 lg:px-0 4226 lg:pt-0 header-container mx-auto max-w-[1170px] w-full"> 4227 <nav class="w-full duration-150 ease-in-out transform flex justify-start 4228 w-auto relative min-h-0 transition-display flex-wrap"> 4229 4230<a class="megamenu-sticky-logo pr-4 " 4231 href="https://www.skintrends.com/" 4232 title="Skin Trends Skincare & Cosmetics" 4233 style="display: none" 4234 aria-label="store logo"> 4235 <div class="relative w-28 h-full" style="padding-top: 30%"> 4236 <img 4237 class="block m-auto absolute inset-0 w-full h-auto" 4238 src="https://www.skintrends.com/media/logo/websites/1/logo.png" 4239 title="Skin Trends Skincare & Cosmetics" 4240 alt="Skin Trends Skincare & Cosmetics" 4241 /> 4242 </div> 4243</a> 4244 <div class="level-0"> 4245 <div x-data="amBrandsPopup()" 4246 x-init="popupInit()" 4247 @mouseenter="hoverPanelActiveId = 'am-brand'" 4248 @mouseleave="hoverPanelActiveId = null" class="h-full border-b-2 border-b-transparent" :class="{'active-item': hoverPanelActiveId === 'am-brand'}"> 4249 <a href="https://www.skintrends.com/brands/" 4250 class="flex h-full items-center block text-base p-3 text-md bg-opacity-95 uppercase" 4251 :class="{'w-14 opacity-0': label === ''}" x-cloak x-html="label"></a> 4252 <template x-if="isPopupEnabled"> 4253 4254<div class="absolute z-10 left-0 top-full hidden shadow-lg overflow-hidden rounded-lg max-w-[1170px]" 4255 x-cloak 4256 x-transition 4257 x-show="hoverPanelActiveId === 'am-brand'" 4258 :class="{'hidden' : hoverPanelActiveId !== 'am-brand'}"> 4259 <div class="flex flex-row sm:flex-column overflow-hidden h-full bg-white" x-show="!loading"> 4260 <div class="h-full p-2 box-content flex-grow flex flex-wrap justify-center"> 4261 <template x-for="letter in items" :key="letter.letter"> 4262 <section class="ambrands-letters-list size-min"> 4263 <div class="ambrands-letter mb-7 size-min"> 4264 <div class="space-y-6 -mt-6 ambrands-brand-item-custom"> 4265 <template x-for="brand in letter.brands" :key="brand.brandId"> 4266 <div class="mr-[28px]" 4267 :class="{'w-am-brand': !imageWidth}"> 4268 <a :href="brand.url" 4269 class="ambrands-inner flex flex-col items-center" 4270 :title="brand.label"> 4271 <template x-if="showImages">
4272 <span class="items-start"> 4273 <img class="ambrands-image mx-auto" 4274 loading="lazy" 4275 :src="brand.image" 4276 :title="brand.label"/> 4277 </span> 4278 </template> 4279 <template x-if="showImages && !brand.image"> 4280 <span class="ambrands-image-block"> 4281 <span class="block mx-auto py-3 uppercase text-4xl text-gray-300" 4282 x-text="brand.label.charAt(0)"> 4283 </span> 4284 </span> 4285 </template> 4286 <template x-if="!showImages"> 4287 <span class="ambrands-image-block"> 4288 <span class="ambrands-empty" :title="brand.label"></span> 4289 </span> 4290 </template> 4291 <span class="ambrands-count text-gray-400" x-show="showCount"> 4292 (<span x-text="brand.cnt"></span>) 4293 </span> 4294 </span> 4295 </a> 4296 </div> 4297 </template> 4298 </div> 4299 </div> 4300 </section> 4301 </template> 4302 </div> 4303 <div x-show="false"> 4304 Please select brand attribute in Stores -> Configuration -> Amasty Extensions -> Improved Layered Navigation: Brands. </div> 4305 </div> 4306 <div x-cloak x-show="loading" class="flex flex-row sm:flex-column overflow-hidden w-full bg-white"> 4307 Loading... </div> 4308</div> 4309 </template> 4310 </div> 4311 </div> 4312 4313 <template x-for="elem in filterElements()" :key="elem.id"> 4314 <div class="level-0" 4315 @mouseenter="hoverPanelActiveId = elem.id" 4316 @mouseleave="hoverPanelActiveId = 0" 4317 > 4318 <span class="border-b-2 border-b-transparent flex 4319 items-center block text-md bg-opacity-95" 4320 :class="{'active-item': hoverPanelActiveId === elem.id}"> 4321 <a class="w-full p-4 text-base level-0 uppercase" 4322 :href="elem.url" 4323 :title="elem.name" 4324 x-text="elem.name" 4325 > 4326 </a> 4327 </span> 4328 <template x-if="elem.elems.length && hoverPanelActiveId === elem.id"> 4329 <div class="absolute max-h-[70vh] w-fit overflow-y-auto 4330 shadow-lg bg-container-lighter p-6"> 4331 <div class="flex flex-col pr-4"> 4332 <template x-for="item in elem.elems"> 4333 <a x-text="item.name" :href="item.url" :title="item.name" 4334 class="py-2 uppercase hover:text-purple pr-2.5"></a> 4335 </template> 4336 </div> 4337 </div> 4338 </template> 4339 <template x-if="!elem.submenu_type && elem.content && elem.content.trim().length > 7 && hoverPanelActiveId === elem.id"> 4340 <div class="absolute w-full max-h-[70vh] overflow-y-auto left-0 4341 shadow-lg bg-container-lighter" x-html="elem.content"> 4342 </div> 4343 </template> 4344 </div> 4345 </template> 4346 </nav> 4347 </div> 4348 </div> 4349 </div> 4350 </template> 4351</div>
4352<script> 4353 'use strict'; 4354 const initMegaMenuComponent = () => { 4355 return { 4356 megaMenu: { 4357 data: {"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":1,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Brands","is_category":false,"id":"additional-node-amasty_shopby_brand_allbrands","status":1,"sort_order":null,"content":"<div x-data=\"amBrandsPopup()\" x-init=\"popupInit()\" class=\"h-am-popup-content w-am-popup-content\">\n \n<div class=\"absolute z-10 left-0 top-full hidden shadow-lg overflow-hidden rounded-lg max-w-[1170px]\"\n x-cloak\n x-transition\n x-show=\"hoverPanelActiveId === 'am-brand'\"\n :class=\"{'hidden' : hoverPanelActiveId !== 'am-brand'}\">\n <div class=\"flex flex-row sm:flex-column overflow-hidden h-full bg-white\" x-show=\"!loading\">\n <div class=\"h-full p-2 box-content flex-grow flex flex-wrap justify-center\">\n <template x-for=\"letter in items\" :key=\"letter.letter\">\n <section class=\"ambrands-letters-list size-min\">\n <div class=\"ambrands-letter mb-7 size-min\">\n <div class=\"space-y-6 -mt-6 ambrands-brand-item-custom\">\n <template x-for=\"brand in letter.brands\" :key=\"brand.brandId\">\n <div class=\"mr-[28px]\"\n :class=\"{'w-am-brand': !imageWidth}\">\n <a :href=\"brand.url\"\n class=\"ambrands-inner flex flex-col items-center\"\n :title=\"brand.label\">\n <template x-if=\"showImages\">\n <span class=\"items-start\">\n <img class=\"ambrands-image mx-auto\"\n loading=\"lazy\"\n :src=\"brand.image\"\n :title=\"brand.label\"\/>\n <\/span>\n <\/template>\n <template x-if=\"showImages && !brand.image\">\n <span class=\"ambrands-image-block\">\n <span class=\"block mx-auto py-3 uppercase text-4xl text-gray-300\"\n x-text=\"brand.label.charAt(0)\">\n <\/span>\n <\/span>\n <\/template>\n <template x-if=\"!showImages\">\n <span class=\"ambrands-image-block\">\n <span class=\"ambrands-empty\" :title=\"brand.label\"><\/span>\n <\/span>\n <\/template>\n <span class=\"ambrands-count text-gray-400\" x-show=\"showCount\">\n (<span x-text=\"brand.cnt\"><\/span>)\n <\/span>\n <\/span>\n <\/a>\n <\/div>\n <\/template>\n <\/div>\n <\/div>\n <\/section>\n <\/template>\n <\/div>\n <div x-show=\"false\">\n Please select brand attribute in Stores -> Configuration -> Amasty Extensions -> Improved Layered Navigation: Brands. <\/div>\n <\/div>\n <div x-cloak x-show=\"loading\" class=\"flex flex-row sm:flex-column overflow-hidden w-full bg-white\">\n Loading... <\/div>\n<\/div>\n<\/div>\n","url":"https:\/\/www.skintrends.com\/brands\/","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Acne","is_category":true,"id":"category-node-19","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/acne.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Anti-Aging","is_category":true,"id":"category-node-20","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/anti-aging.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Hyperpigmentation","is_category":true,"id":"category-node-22","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/hyperpigmentation.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Sensitive\/Rosacea","is_category":true,"id":"category-node-23","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/sensitive-rosacea.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Pregnancy","is_category":true,"id":"category-node-24","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/pregnancy.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Dry Skin","is_category":true,"id":"category-node-21","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/dry-skin.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Oily Skin","is_category":true,"id":"category-node-58","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/oily-skin.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Cleansers","is_category":true,"id":"category-node-42","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/cleansers.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Toners","is_category":true,"id":"category-node-600","
4357status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/toners.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Exfoliants","is_category":true,"id":"category-node-27","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/exfoliants.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Serums","is_category":true,"id":"category-node-28","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/serums.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Creams","is_category":true,"id":"category-node-29","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/creams.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Moisturizers","is_category":true,"id":"category-node-30","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/moisturizers.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Sunscreens","is_category":true,"id":"category-node-31","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/sunscreens.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Masks","is_category":true,"id":"category-node-32","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/masks.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Treatments","is_category":true,"id":"category-node-33","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/treatments.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Eye & Lip Care","is_category":true,"id":"category-node-405","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/eyes-lips.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Trial\/Travel Kits","is_category":true,"id":"category-node-589","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/trial-travel-kits.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Gift Sets","is_category":true,"id":"category-node-406","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/gift-sets.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Glycolic Acid","is_category":true,"id":"category-node-660","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/ahas\/glycolic-acid.html","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Lactic Acid","is_category":true,"id":"category-node-752","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/ahas\/lactic-acid.html","current":false}],"__disableTmpl":true,"name":"Alpha Hydroxy Acids (AHAs)","is_category":true,"id":"category-node-659","status":1,"sort_order":null,"content":"<!-- ko scope: \"index = ammenu_columns_wrapper\" --> <!-- ko template: getTemplate() --><!-- \/ko --> <!-- \/ko -->","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/ahas.html","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Salicylic Acid","is_category":true,"id":"category-node-755","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/bhas\/salicylic-acid.html","current":false}],"__disableTmpl":true,"name":"Beta Hydroxy Acids (BHAs)","is_category":true,"id":"category-node-754","status":1,"sort_order":null,"content":"<!-- ko scope: \"index = ammenu_columns_wrapper\" --> <!-- ko template: getTemplate() --><!-- \/ko --> <!-- \/ko -->","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/bhas.html","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Acids","is_category":true,"id":"category-node-781","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/chemical-peels\/acids.html","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Enzymes","is_category":true,"id":"category-node-782","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/chemical-peels\/enzymes.html","current":false}],"__disableTmpl":true,"name":"Chemical Peels","is_category":true,"id":"category-node-780","status":1,"sort_order":null,"content":"<!-- ko scope: \"index = ammenu_columns_wrapper\" --> <!-- ko template: getTemplate() --><!-- \/ko --> <!-- \/ko -->","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/chemical-peels.html","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Cypress","is_category":true,"id":"category-node-679","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/essential-oils\/cypress.html","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Geranium","is_category":true,"id":"category-node-677","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/essential-oils\/geranium.html","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Lavender","is_category":true,"id":"category-node-675","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/essential-oils\/lavender.html","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Quintessence","is_category":true,"id":"category-node-674","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/essential-oils\/quintessence.html","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Rosemary","is_category":true,"id":"category-node-676","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/essential-oils\/rosemary.html","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Thyme","is_category":true,"id":"category-node-678","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/essential-oils\/thyme.html","current":false}],"__disableTmpl":true,"name":"Essential Oils","is_category":true,"id":"category-node-673","status":1,"sort_order":null,"content":"<!-- ko scope: \"index = ammenu_columns_wrapper\" --> <!-- ko template: getTemplate() --><!-- \/ko --> <!-- \/ko -->","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/essential-oils.html","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Hyaluronic Acid","is_category":true,"id":"category-node-666","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/hyaluronic\/hyaluronic-acid.html","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Peptides","is_category":true,"id":"category-node-749","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/hyaluronic\/peptides.html","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Sodium Hyaluronate","is_category":true,"id":"category-node-667","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/hyaluronic\/sodium-hyaluronate.html","current":false}],"__disableTmpl":true,"name":"Fillers","is_category":true,"id":"category-node-665","status":1,"sort_order":null,"content":"<!-- ko scope: \"index = ammenu_columns_wrapper\" --> <!-- ko template: getTemplate() --><!-- \/ko --> <!-- \/ko -->","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/hyaluronic.html","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Growth Factors","is_category":true,"id":"category-node-681","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/growth-factors.html","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Daisy Flower Extract","is_category":true,"id":"category-node-664","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/lighteners\/daisy-flower-extract.html","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Hydroquinone","is_category":true,"id":"category-node-662","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/lighteners\/hydroquinone.html","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Kojic Acid","is_category":true,"id":"category-node-663","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/lighteners\/kojic-acid.html","current":false}],"__disableTmpl":true,"name":"Lighteners","is_category":true,"id":"category-node-661","
4357status":1,"sort_order":null,"content":"<!-- ko scope: \"index = ammenu_columns_wrapper\" --> <!-- ko template: getTemplate() --><!-- \/ko --> <!-- \/ko -->","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/lighteners.html","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Retinol","is_category":true,"id":"category-node-670","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/retinoids\/retinol.html","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Retinaldehyde","is_category":true,"id":"category-node-671","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/retinoids\/retinaldehyde.html","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Retinyl Palmitate","is_category":true,"id":"category-node-672","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/retinoids\/retinyl-palmitate.html","current":false}],"__disableTmpl":true,"name":"Retinoids","is_category":true,"id":"category-node-669","status":1,"sort_order":null,"content":"<!-- ko scope: \"index = ammenu_columns_wrapper\" --> <!-- ko template: getTemplate() --><!-- \/ko --> <!-- \/ko -->","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/retinoids.html","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Stem Cells","is_category":true,"id":"category-node-680","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/stem-cells.html","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Ascorbyl Palmitate","is_category":true,"id":"category-node-753","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/vitamin-c\/ascorbyl-palmitate.html","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"L-Ascorbic Acid","is_category":true,"id":"category-node-683","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/vitamin-c\/l-ascorbic-acid.html","current":false}],"__disableTmpl":true,"name":"Vitamin C","is_category":true,"id":"category-node-682","status":1,"sort_order":null,"content":"<!-- ko scope: \"index = ammenu_columns_wrapper\" --> <!-- ko template: getTemplate() --><!-- \/ko --> <!-- \/ko -->","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/vitamin-c.html","current":false}],"__disableTmpl":true,"name":"Ingredients","is_category":true,"id":"category-node-541","status":1,"sort_order":null,"content":"<!-- ko scope: \"index = ammenu_columns_wrapper\" --> <!-- ko template: getTemplate() --><!-- \/ko --> <!-- \/ko -->","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients.html","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Adult Acne","is_category":true,"id":"category-node-769","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/skin-disorders\/acne\/adult-acne.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Teen Acne","is_category":true,"id":"category-node-768","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/skin-disorders\/acne\/teen-acne.html","current":false}],"__disableTmpl":true,"name":"Acne","is_category":true,"id":"category-node-767","status":1,"sort_order":null,"content":"<!-- ko scope: \"index = ammenu_columns_wrapper\" --> <!-- ko template: getTemplate() --><!-- \/ko --> <!-- \/ko -->","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/skin-disorders\/acne.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Eczema","is_category":true,"id":"category-node-842","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/skin-disorders\/dry-skin\/eczema.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Psoriasis","is_category":true,"id":"category-node-843","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/skin-disorders\/dry-skin\/psoriasis.html","current":false}],"__disableTmpl":true,"name":"Dry Skin","is_category":true,"id":"category-node-841","status":1,"sort_order":null,"content":"<!-- ko scope: \"index = ammenu_columns_wrapper\" --> <!-- ko template: getTemplate() --><!-- \/ko --> <!-- \/ko -->","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/skin-disorders\/dry-skin.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Age Spots","is_category":true,"id":"category-node-765","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/skin-disorders\/hyperpigmentation\/age-spots.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Melasma","is_category":true,"id":"category-node-764","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/skin-disorders\/hyperpigmentation\/melasma.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Post-Inflammatory Hyperpigmentation","is_category":true,"id":"category-node-766","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/skin-disorders\/hyperpigmentation\/post-inflammation-hyperpigmentation.html","current":false}],"__disableTmpl":true,"name":"Hyperpigmentation","is_category":true,"id":"category-node-763","status":1,"sort_order":null,"content":"<!-- ko scope: \"index = ammenu_columns_wrapper\" --> <!-- ko template: getTemplate() --><!-- \/ko --> <!-- \/ko -->","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/skin-disorders\/hyperpigmentation.html","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Enlarged Pores","is_category":true,"id":"category-node-833","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/skin-disorders\/oily-skin\/enlarged-
4357pores.html","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Sebaceous Hyperplasia","is_category":true,"id":"category-node-835","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/skin-disorders\/oily-skin\/sebaceous-hyperplasia.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Thick Skin","is_category":true,"id":"category-node-834","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/skin-disorders\/oily-skin\/thick-skin.html","current":false}],"__disableTmpl":true,"name":"Oily Skin","is_category":true,"id":"category-node-832","status":1,"sort_order":null,"content":"<!-- ko scope: \"index = ammenu_columns_wrapper\" --> <!-- ko template: getTemplate() --><!-- \/ko --> <!-- \/ko -->","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/skin-disorders\/oily-skin.html","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Acne Scars","is_category":true,"id":"category-node-840","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/skin-disorders\/scars\/acne-scars.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Wound Scars","is_category":true,"id":"category-node-839","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/skin-disorders\/scars\/wound-scars.html","current":false}],"__disableTmpl":true,"name":"Scars","is_category":true,"id":"category-node-838","status":1,"sort_order":null,"content":"<!-- ko scope: \"index = ammenu_columns_wrapper\" --> <!-- ko template: getTemplate() --><!-- \/ko --> <!-- \/ko -->","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/skin-disorders\/scars.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Reactive Sensitive","is_category":true,"id":"category-node-891","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/skin-disorders\/sensitive\/reactive-sensitive.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Rosacea","is_category":true,"id":"category-node-892","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/skin-disorders\/sensitive\/rosacea.html","current":false}],"__disableTmpl":true,"name":"Sensitive","is_category":true,"id":"category-node-890","status":1,"sort_order":null,"content":"<!-- ko scope: \"index = ammenu_columns_wrapper\" --> <!-- ko template: getTemplate() --><!-- \/ko --> <!-- \/ko -->","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/skin-disorders\/sensitive.html","current":false}],"__disableTmpl":true,"name":"Skin Disorders","is_category":true,"id":"category-node-761","status":1,"sort_order":null,"content":"<!-- ko scope: \"index = ammenu_columns_wrapper\" --> <!-- ko template: getTemplate() --><!-- \/ko --> <!-- \/ko -->","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/skin-disorders.html","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Cheek Rash and Redness","is_category":true,"id":"category-node-778","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/area-of-body\/cheeks\/cheek-rash.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Cheek Sagging","is_category":true,"id":"category-node-777","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/area-of-body\/cheeks\/cheek-sagging.html","current":false}],"__disableTmpl":true,"name":"Cheeks","is_category":true,"id":"category-node-776","status":1,"sort_order":null,"content":"<!-- ko scope: \"index = ammenu_columns_wrapper\" --> <!-- ko template: getTemplate() --><!-- \/ko --> <!-- \/ko -->","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/area-of-body\/cheeks.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Crows Feet","is_category":true,"id":"category-node-771","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/area-of-body\/eyes\/crows-feet.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Dark Eye Circles","is_category":true,"id":"category-node-772","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/area-of-body\/eyes\/dark-eye-circles.html","current":false}],"__disableTmpl":true,"name":"Eyes","is_category":true,"id":"category-node-770","status":1,"sort_order":null,"content":"<!-- ko scope: \"index = ammenu_columns_wrapper\" --> <!-- ko template: getTemplate() --><!-- \/ko --> <!-- \/ko -->","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/area-of-body\/eyes.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"D\u00e9collet\u00e9 Hyperpigmentation","is_category":true,"id":"category-node-775","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/area-of-body\/neck\/decollete-hyperpigmentation.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Turkey Neck","is_category":true,"id":"category-node-774","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/area-of-body\/neck\/turkey-neck.html","current":false}],"__disableTmpl":true,"name":"Neck and D\u00e9collet\u00e9 ","is_category":true,"id":"category-node-773","status":1,"sort_order":null,"content":"<!-- ko scope: \"index = ammenu_columns_wrapper\" --> <!-- ko template: getTemplate() --><!-- \/ko --> <!-- \/ko -->","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/area-of-body\/neck.html","current":false}],"__disableTmpl":true,"name":"Area of Body","is_category":true,"id":"category-node-762","status":1,"sort_order":null,"content":"<!-- ko scope: \"index = ammenu_columns_wrapper\" --> <!-- ko template: getTemplate() --><!-- \/ko --> <!-- \/ko -->","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/area-of-body.html","current":false}],"__disableTmpl":true,"name":"Conditions","is_category":true,"id":"category-node-542","status":1,"sort_order":null,"content":"<!-- ko scope: \"index = ammenu_columns_wrapper\" --> <!-- ko template: getTemplate() --><!-- \/ko --> <!-- \/ko -->","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions.html","current":false}],"__disableTmpl":true,"name":"Product FAQs (Q&A's with Products)","is_category":true,"id":"category-node-528","status":1,"sort_order":null,"content":"<!-- ko scope: \"index = ammenu_columns_wrapper\" --> <!-- ko template: getTemplate() --><!-- \/ko --> <!-- \/ko -->","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs.html","current":false}],"__disableTmpl":true,"name":"Face Care","is_category":true,"id":"category-node-9","status":1,"sort_order":null,"content":"<!-- ko scope: \"index = ammenu_columns_wrapper\" --> <!-- ko template: getTemplate() --><!-- \/ko --> <!-- \/ko -->","url":"https:\/\/www.skintrends.com\/skincare\/face.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Acne Skin Treatments","is_category":true,"id":"category-node-97","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/skin-treatments\/acne-skin-treatments.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Anti-Aging Skin Treatments","is_category":true,"id":"category-node-98","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/skin-treatments\/anti-aging-skin-treatments.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Hyperpigmentation Skin Treatments","is_category":true,"id":"category-node-100","
4357status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/skin-treatments\/hyperpigmentation-skin-treatments.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Sensitive Skin Treatments","is_category":true,"id":"category-node-102","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/skin-treatments\/sensitive-skin-treatments.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Dry Skin Treatments","is_category":true,"id":"category-node-99","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/skin-treatments\/dry-skin-treatments.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Oily Skin Treatments","is_category":true,"id":"category-node-101","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/skin-treatments\/oily-skin-treatments.html","current":false}],"__disableTmpl":true,"name":"Skin Treatments","is_category":true,"id":"category-node-13","status":1,"sort_order":null,"content":"<!-- ko scope: \"index = ammenu_columns_wrapper\" --> <!-- ko template: getTemplate() --><!-- \/ko --> <!-- \/ko -->","url":"https:\/\/www.skintrends.com\/skincare\/skin-treatments.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Cleansers (Natural)","is_category":true,"id":"category-node-265","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/natural-organic\/cleansers.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Toners & Mists (Natural)","is_category":true,"id":"category-node-352","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/natural-organic\/toners.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Exfoliants (Natural)","is_category":true,"id":"category-node-266","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/natural-organic\/exfoliants.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Serums (Natural)","is_category":true,"id":"category-node-267","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/natural-organic\/serums.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Creams (Natural)","is_category":true,"id":"category-node-268","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/natural-organic\/creams.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Moisturizers (Natural)","is_category":true,"id":"category-node-269","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/natural-organic\/moisturizers.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Sunscreens (Natural)","is_category":true,"id":"category-node-270","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/natural-organic\/sunscreens.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Masks (Natural)","is_category":true,"id":"category-node-271","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/natural-organic\/masks.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Eye & Lip Care (Natural)","is_category":true,"id":"category-node-356","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/natural-organic\/eyes-lips.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Body Care (Natural)","is_category":true,"id":"category-node-357","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/natural-organic\/body.html","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Product FAQ's","is_category":true,"id":"category-node-531","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/natural-organic\/product-faqs.html","current":false}],"__disableTmpl":true,"name":"Natural & Organic","is_category":true,"id":"category-node-10","status":1,"sort_order":null,"content":"<!-- ko scope: \"index = ammenu_columns_wrapper\" --> <!-- ko template: getTemplate() --><!-- \/ko --> <!-- \/ko -->","url":"https:\/\/www.skintrends.com\/skincare\/natural-organic.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Body Wash","is_category":true,"id":"category-node-91","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/s
4357pa-body\/body-wash.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Body Lotion & Oil","is_category":true,"id":"category-node-92","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/spa-body\/body-lotion.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Exfoliants","is_category":true,"id":"category-node-93","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/spa-body\/exfoliants.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Firming","is_category":true,"id":"category-node-94","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/spa-body\/firming.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Tanning","is_category":true,"id":"category-node-95","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/skincare\/spa-body\/tanning.html","current":false}],"__disableTmpl":true,"name":"Body Spa Care","is_category":true,"id":"category-node-12","status":1,"sort_order":null,"content":"<!-- ko scope: \"index = ammenu_columns_wrapper\" --> <!-- ko template: getTemplate() --><!-- \/ko --> <!-- \/ko -->","url":"https:\/\/www.skintrends.com\/skincare\/spa-body.html","current":false}],"__disableTmpl":true,"name":"Skincare","is_category":true,"id":"category-node-244","status":1,"sort_order":"0","content":"<div class=\"px-6 py-4 w-full\">\r\n <div class=\"block-title relative col-md-6\">\r\n <span>\r\n Categories\r\n <\/span>\r\n <\/div>\r\n <ul class=\"mt-8 space-y-2\">\r\n <li class=\"grid grid-cols-2 uppercase\">\r\n <div>\r\n <a class=\"group flex items-center hover:text-purple-500 transition-colors duration-500\" href=\"https:\/\/www.skintrends.com\/skincare\/face.html\" title=\"Face\"><span>Face<\/span><span class=\"inline-block transition-all text-xs duration-500 text-purple-500 group-hover:translate-x-0 group-hover:opacity-100 -translate-x-full ml-1.5 opacity-0\">\r\n <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-4 w-4\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\r\n <path fill-rule=\"evenodd\"\r\n d=\"M10.293 3.293a1 1 0 011.414 0l6 6a1 1 0 010 1.414l-6 6a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-4.293-4.293a1 1 0 010-1.414z\"\r\n clip-rule=\"evenodd\"\/>\r\n <\/svg>\r\n <\/span><\/a>\r\n <\/div>\r\n <div>\r\n <a class=\"group flex items-center hover:text-purple-500 transition-colors duration-500\" href=\"https:\/\/www.skintrends.com\/skincare\/skin-treatments.html\" title=\"Skin Treatments\"><span>Skin Treatments<\/span><span class=\"inline-block transition-all text-xs duration-500 text-purple-500 group-hover:translate-x-0 group-hover:opacity-100 -translate-x-full ml-1.5 opacity-0\">\r\n <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-4 w-4\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\r\n <path fill-rule=\"evenodd\"\r\n d=\"M10.293 3.293a1 1 0 011.414 0l6 6a1 1 0 010 1.414l-6 6a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-4.293-4.293a1 1 0 010-1.414z\"\r\n clip-rule=\"evenodd\"\/>\r\n <\/svg>\r\n <\/span><\/a>\r\n <\/div>\r\n <\/li>\r\n <li class=\"grid grid-cols-2 uppercase\">\r\n <div>\r\n <a class=\"group flex items-center hover:text-purple-500 transition-colors duration-500\" href=\"https:\/\/www.skintrends.com\/skincare\/natural-organic.html\" title=\"Natural & Organic\"><span>Natural & Organic<\/span><span class=\"inline-block transition-all text-xs duration-500 text-purple-500 group-hover:translate-x-0 group-hover:opacity-100 -translate-x-full ml-1.5 opacity-0\">\r\n <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-4 w-4\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\r\n <path fill-rule=\"evenodd\"\r\n d=\"M10.293 3.293a1 1 0 011.414 0l6 6a1 1 0 010 1.414l-6 6a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-4.293-4.293a1 1 0 010-1.414z\"\r\n clip-rule=\"evenodd\"\/>\r\n <\/svg>\r\n <\/span><\/a>\r\n <\/div>\r\n <div>\r\n <a class=\"group flex items-center hover:text-purple-500 transition-colors duration-500\" href=\"https:\/\/www.skintrends.com\/skincare\/s
4357pa-body.html\" title=\"Spa & Body\"><span>Spa & Body<\/span><span class=\"inline-block transition-all text-xs duration-500 text-purple-500 group-hover:translate-x-0 group-hover:opacity-100 -translate-x-full ml-1.5 opacity-0\">\r\n <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-4 w-4\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\r\n <path fill-rule=\"evenodd\"\r\n d=\"M10.293 3.293a1 1 0 011.414 0l6 6a1 1 0 010 1.414l-6 6a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-4.293-4.293a1 1 0 010-1.414z\"\r\n clip-rule=\"evenodd\"\/>\r\n <\/svg>\r\n <\/span><\/a>\r\n <\/div>\r\n <\/li>\r\n <\/ul>\r\n<\/div>\r\n<div class=\"justify-end\">\r\n <img class=\"w-full\" loading=\"lazy\" src=\"https:\/\/www.skintrends.com\/media\/wysiwyg\/nav-img-footer\/menu-banners_gray-bg_940x230px_02.png\" alt=\"\">\r\n<\/div>\r\n\r\n","url":"https:\/\/www.skintrends.com\/skincare.html","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Acne (Men)","is_category":true,"id":"category-node-407","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/men\/face\/acne.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Anti-Aging (Men)","is_category":true,"id":"category-node-408","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/men\/face\/anti-aging.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Hyperpigmentation (Men)","is_category":true,"id":"category-node-409","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/men\/face\/hyperpigmentation.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Sensitive\/Rosacea (Men)","is_category":true,"id":"category-node-410","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/men\/face\/sensitive-rosacea.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Dry Skin (Men)","is_category":true,"id":"category-node-412","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/men\/face\/dry-skin.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Oily Skin (Men)","is_category":true,"id":"category-node-413","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/men\/face\/oily-skin.html","current":false}],"__disableTmpl":true,"name":"Face","is_category":true,"id":"category-node-247","status":1,"sort_order":null,"content":"<!-- ko scope: \"index = ammenu_columns_wrapper\" --> <!-- ko template: getTemplate() --><!-- \/ko --> <!-- \/ko -->","url":"https:\/\/www.skintrends.com\/men\/face.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Skin Treatments","is_category":true,"id":"category-node-14","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/men\/skin-treatments.html","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Cleansers (Men\/Natural)","is_category":true,"id":"category-node-452","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/men\/natural-organic\/cleansers.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Toners & Mists (Men\/Natural)","is_category":true,"id":"category-node-453","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/men\/natural-organic\/toners.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Exfoliants (Men\/Natural)","is_category":true,"id":"category-node-454","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/men\/natural-organic\/exfoliants.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Serums (Men\/Natural)","is_category":true,"id":"category-node-455","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/men\/natural-organic\/serums.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Creams (Men\/Natural)","is_category":true,"id":"category-node-456","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/men\/natural-organic\/creams.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Moisturizers (Men\/Natural)","is_category":true,"id":"category-node-457","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/men\/natural-organic\/moisturizers.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Sunscreens (Men\/Natural)","is_category":true,"id":"category-node-458","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/men\/natural-organic\/sunscreens.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Masks (Men\/Natural)","is_category":true,"id":"category-node-459","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/men\/natural-organic\/masks.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Shave (Men\/Natural)","is_category":true,"id":"category-node-601","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/men\/natural-organic\/shave.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Eyes & Lips (Men\/Natural)","is_category":true,"id":"category-node-461","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/men\/natural-organic\/eyes-lips.html","current":false}],"__disableTmpl":true,"name":"Natural & Organic","is_category":true,"id":"category-node-451","status":1,"sort_order":null,"content":"<!-- ko scope: \"index = ammenu_columns_wrapper\" --> <!-- ko template: getTemplate() --><!-- \/ko --> <!-- \/ko -->","url":"https:\/\/www.skintrends.com\/men\/natural-organic.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Spa & Body","is_category":true,"id":"category-node-248","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/men\/spa-body.html","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"PHYTOMER Men's Skincare","is_category":true,"id":"category-node-574","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/brands-men\/phytomer-mens-skincare.html","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"REDMethod (RA for Men)","is_category":true,"id":"category-node-117","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/brands-men\/ra-skincare-for-men.html","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Yon-Ka\u00ae For Men","is_category":true,"id":"category-node-348","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/brands-men\/yonka-mens-skincare.html","current":false}],"__disableTmpl":true,"name":"Men","is_category":true,"id":"category-node-245","status":1,"sort_order":"1","content":"<div class=\"px-6 py-4 w-full\">\r\n <div class=\"grid grid-cols-2\">\r\n <div class=\"block-title relative\">Categories<\/div>\r\n <div class=\"block-title relative\">Brands<\/div>\r\n <\/div>\r\n <ul class=\"mt-8 space-y-2\">\r\n <li class=\"grid grid-cols-2 uppercase\">\r\n <ul class=\"space-y-2\">\r\n <li>\r\n <a class=\"group flex items-center hover:text-purple-500 transition-colors duration-500\" href=\"https:\/\/www.skintrends.com\/men\/face.html\"><span>Face<\/span><span class=\"inline-block transition-all text-xs duration-500 text-purple-500 group-hover:translate-x-0 group-hover:opacity-100 -translate-x-full ml-1.5 opacity-0\">\r\n <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-4 w-4\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\r\n <path fill-rule=\"evenodd\"\r\n d=\"M10.293 3.293a1 1 0 011.414 0l6 6a1 1 0 010 1.414l-6 6a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-4.293-4.293a1 1 0 010-1.414z\"\r\n clip-rule=\"evenodd\"\/>\r\n <\/svg>\r\n <\/span><\/a>\r\n <\/li>\r\n <li class=\"ui-menu-item level2\">\r\n <a class=\"group flex items-center hover:text-purple-500 transition-colors duration-500\" href=\"https:\/\/www.skintrends.com\/men\/skin-treatments.html\"><span>Skin Treatments<\/span><span class=\"inline-block transition-all text-xs duration-500 text-purple-500 group-hover:translate-x-0 group-hover:opacity-100 -translate-x-full ml-1.5 opacity-0\">\r\n <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-4 w-4\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\r\n <path fill-rule=\"evenodd\"\r\n d=\"M10.293 3.293a1 1 0 011.414 0l6 6a1 1 0 010 1.414l-6 6a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-4.293-4.293a1 1 0 010-1.414z\"\r\n clip-rule=\"evenodd\"\/>\r\n <\/svg>\r\n <\/span><\/a>\r\n <\/li>\r\n <li class=\"ui-menu-item level2\">\r\n <a class=\"group flex items-center hover:text-purple-500 transition-colors duration-500\" href=\"https:\/\/www.skintrends.com\/men\/natural-organic.html\"><span>Natural & Organic<\/span><span class=\"inline-block transition-all text-xs duration-500 text-purple-500 group-hover:translate-x-0 group-hover:opacity-100 -translate-x-full ml-1.5 opacity-0\">\r\n <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-4 w-4\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\r\n <path fill-rule=\"evenodd\"\r\n d=\"M10.293 3.293a1 1 0 011.414 0l6 6a1 1 0 010 1.414l-6 6a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-4.293-4.293a1 1 0 010-1.414z\"\r\n clip-rule=\"evenodd\"\/>\r\n <\/svg>\r\n <\/span><\/a>\r\n <\/li>\r\n <li class=\"ui-menu-item level2\">\r\n <a class=\"group flex items-center hover:text-purple-500 transition-colors duration-500\" href=\"https:\/\/www.skintrends.com\/men\/spa-body.html\"><span>Spa & Body<\/span><span class=\"inline-block transition-all text-xs duration-500 text-purple-500 group-hover:translate-x-0 group-hover:opacity-100 -translate-x-full ml-1.5 opacity-0\">\r\n <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-4 w-4\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\r\n <path fill-rule=\"evenodd\"\r\n d=\"M10.293 3.293a1 1 0 011.414 0l6 6a1 1 0 010 1.414l-6 6a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-4.293-4.293a1 1 0 010-1.414z\"\r\n clip-rule=\"evenodd\"\/>\r\n <\/svg>\r\n <\/span><\/a>\r\n <\/li>\r\n <\/ul>\r\n <ul class=\"space-y-2\">\r\n <li class=\"ui-menu-item level2 parent\">\r\n <a class=\"group flex items-center hover:text-purple-500 transition-colors duration-500\" href=\"https:\/\/www.skintrends.com\/brands-men\/phytomer-mens-skincare.html\">
4357\r\n <span>PHYTOMER Men's Skincare<\/span><span class=\"inline-block transition-all text-xs duration-500 text-purple-500 group-hover:translate-x-0 group-hover:opacity-100 -translate-x-full ml-1.5 opacity-0\">\r\n <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-4 w-4\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\r\n <path fill-rule=\"evenodd\"\r\n d=\"M10.293 3.293a1 1 0 011.414 0l6 6a1 1 0 010 1.414l-6 6a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-4.293-4.293a1 1 0 010-1.414z\"\r\n clip-rule=\"evenodd\"\/>\r\n <\/svg>\r\n <\/span><\/a>\r\n <\/a>\r\n <\/li>\r\n <li class=\"ui-menu-item level2 parent\">\r\n <a class=\"group flex items-center hover:text-purple-500 transition-colors duration-500\" href=\"https:\/\/www.skintrends.com\/brands-men\/ra-skincare-for-men.html\">\r\n <span>RA for Men Skincare<\/span><span class=\"inline-block transition-all text-xs duration-500 text-purple-500 group-hover:translate-x-0 group-hover:opacity-100 -translate-x-full ml-1.5 opacity-0\">\r\n <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-4 w-4\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\r\n <path fill-rule=\"evenodd\"\r\n d=\"M10.293 3.293a1 1 0 011.414 0l6 6a1 1 0 010 1.414l-6 6a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-4.293-4.293a1 1 0 010-1.414z\"\r\n clip-rule=\"evenodd\"\/>\r\n <\/svg>\r\n <\/span><\/a>\r\n <\/a>\r\n <\/li>\r\n <li class=\"ui-menu-item level2 parent\">\r\n <a class=\"group flex items-center hover:text-purple-500 transition-colors duration-500\" href=\"https:\/\/www.skintrends.com\/brands-men\/yonka-mens-skincare.html\">\r\n <span>Yon-Ka\u00ae For Men<\/span><span class=\"inline-block transition-all text-xs duration-500 text-purple-500 group-hover:translate-x-0 group-hover:opacity-100 -translate-x-full ml-1.5 opacity-0\">\r\n <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-4 w-4\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\r\n <path fill-rule=\"evenodd\"\r\n d=\"M10.293 3.293a1 1 0 011.414 0l6 6a1 1 0 010 1.414l-6 6a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-4.293-4.293a1 1 0 010-1.414z\"\r\n clip-rule=\"evenodd\"\/>\r\n <\/svg>\r\n <\/span><\/a>\r\n <\/a>\r\n <\/li>\r\n <\/ul>\r\n <\/li>\r\n <\/ul>\r\n<\/div>\r\n<div class=\"justify-end\">\r\n <img class=\"w-full\" loading=\"lazy\" src=\"https:\/\/www.skintrends.com\/media\/wysiwyg\/nav-img-footer\/menu-banners_gray-bg_940x230px_03.png\" alt=\"\">\r\n<\/div>\r\n\r\n","url":"https:\/\/www.skintrends.com\/men.html","current":false},{"type":{"value":2,"label":"horizontal"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Face","is_category":true,"id":"category-node-288","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/cosmetics\/face.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Eyes","is_category":true,"id":"category-node-289","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/cosmetics\/eyes.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Eyelashes","is_category":true,"id":"category-node-292","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/cosmetics\/eyelashes.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Lips","is_category":true,"id":"category-node-290","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/cosmetics\/lips.html","current":false},{"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Tools","is_category":true,"id":"category-node-291","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/cosmetics\/tools.html","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"LiLash","is_category":true,"id":"category-node-934","status":1,"sort_order":null,"content":"","url":"https:\/\/www.skintrends.com\/brands-cosmetics\/lilash.html","current":false}],"__disableTmpl":true,"name":"Cosmetics","is_category":true,"id":"category-node-264","status":1,"sort_order":"2","content":"<div class=\"px-6 py-4 w-full\">\r\n <div class=\"grid grid-cols-2\">\r\n <div class=\"block-title relative\">Categories<\/div>\r\n <div class=\"block-title relative\">Brands<\/div>\r\n <\/div>\r\n <ul class=\"mt-8 space-y-2\">\r\n <li class=\"grid grid-cols-2 uppercase\">\r\n <ul class=\"space-y-2\">\r\n <li>\r\n <a class=\"group hover:text-purple-500 transition-colors duration-500\" href=\"https:\/\/www.skintrends.com\/cosmetics\/face.html\"><span>Face<\/span><\/a>\r\n <\/li>\r\n <li class=\"ui-menu-item level2\">\r\n <a class=\"group hover:text-purple-500 transition-colors duration-500\" href=\"https:\/\/www.skintrends.com\/cosmetics\/eyes.html\"><span>Eyes<\/span><\/a>\r\n <\/li>\r\n <li class=\"ui-menu-item level2\">\r\n <a class=\"group hover:text-purple-500 transition-colors duration-500\" href=\"https:\/\/www.skintrends.com\/cosmetics\/eyelashes.html\"><span>Eyelashes<\/span><\/a>\r\n <\/li>\r\n <li class=\"ui-menu-item level2\">\r\n <a class=\"group hover:text-purple-500 transition-colors duration-500\" href=\"https:\/\/www.skintrends.com\/cosmetics\/lips.html\"><span>Lips<\/span><\/a>\r\n <\/li>\r\n <li class=\"ui-menu-item level2\">\r\n <a class=\"group hover:text-purple-500 transition-colors duration-500\" href=\"https:\/\/www.skintrends.com\/cosmetics\/tools.html\"><span>Tools<\/span><\/a>\r\n <\/li>\r\n <\/ul>\r\n <ul class=\"space-y-2\">\r\n <li class=\"ui-menu-item level2 parent\">\r\n <a class=\"group hover:text-purple-500 transition-colors duration-500\" href=\"https:\/\/www.skintrends.com\/brands-cosmetics\/lilash.html\">
4357\r\n <span>LiLash\u00ae<\/span>\r\n <\/a>\r\n <\/li>\r\n <\/ul>\r\n <\/li>\r\n <\/ul>\r\n<\/div>\r\n<div class=\"justify-end\">\r\n <img class=\"w-full\" loading=\"lazy\" src=\"https:\/\/www.skintrends.com\/media\/wysiwyg\/nav-img-footer\/menu-banners_gray-bg_940x230px_04.png\" alt=\"\">\r\n<\/div>\r\n","url":"https:\/\/www.skintrends.com\/cosmetics.html","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"PRODUCT FAQs","is_category":false,"id":"custom-node-1","status":1,"sort_order":"3","content":"<div class=\"px-6 py-4 w-full\">\n <div class=\"grid grid-cols-2\">\n <div class=\"block-title relative hover:text-purple-500 duration-500\"><a href=\"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions.html\">Conditions<\/a><\/div>\n <div class=\"block-title relative hover:text-purple-500 duration-500\"><a href=\"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients.html\">Ingredients<\/a><\/div>\n <\/div>\n <ul class=\"mt-8 space-y-2\">\n <li class=\"grid grid-cols-2 uppercase\">\n <div class=\"grid grid-cols-2\">\n <ul class=\"space-y-2\">\n <li class=\"ui-menu-item level2\">\n <a class=\"group flex items-center hover:text-purple-500 transition-colors duration-500\" href=\"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/skin-disorders.html\"><span class=\"underline\">Skin Disorders<\/span><span class=\"inline-block transition-all text-xs duration-500 text-purple-500 group-hover:translate-x-0 group-hover:opacity-100 -translate-x-full ml-1.5 opacity-0\">\n <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-4 w-4\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\"\n d=\"M10.293 3.293a1 1 0 011.414 0l6 6a1 1 0 010 1.414l-6 6a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-4.293-4.293a1 1 0 010-1.414z\"\n clip-rule=\"evenodd\"\/>\n <\/svg>\n <\/span><\/a>\n <\/li>\n <li class=\"ui-menu-item level2\">\n <a class=\"group flex items-center hover:text-purple-500 transition-colors duration-500\" href=\"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/skin-disorders\/acne.html\"><span>Acne<\/span><span class=\"inline-block transition-all text-xs duration-500 text-purple-500 group-hover:translate-x-0 group-hover:opacity-100 -translate-x-full ml-1.5 opacity-0\">\n <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-4 w-4\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\"\n d=\"M10.293 3.293a1 1 0 011.414 0l6 6a1 1 0 010 1.414l-6 6a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-4.293-4.293a1 1 0 010-1.414z\"\n clip-rule=\"evenodd\"\/>\n <\/svg>\n <\/span><\/a>\n <\/li>\n <li class=\"ui-menu-item level2\">\n <a class=\"group flex items-center hover:text-purple-500 transition-colors duration-500\" href=\"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/skin-disorders\/dry-skin.html\"><span>Dry Skin<\/span><span class=\"inline-block transition-all text-xs duration-500 text-purple-500 group-hover:translate-x-0 group-hover:opacity-100 -translate-x-full ml-1.5 opacity-0\">\n <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-4 w-4\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\"\n d=\"M10.293 3.293a1 1 0 011.414 0l6 6a1 1 0 010 1.414l-6 6a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-4.293-4.293a1 1 0 010-1.414z\"\n clip-rule=\"evenodd\"\/>\n <\/svg>\n <\/span><\/a>\n <\/li>\n <li class=\"ui-menu-item level2\">\n <a class=\"group flex items-center hover:text-purple-500 transition-colors duration-500\" href=\"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/skin-disorders\/hyperpigmentation.html\"><span>Hyperpigmentation<\/span><span class=\"inline-block transition-all text-xs duration-500 text-purple-500 group-hover:translate-x-0 group-hover:opacity-100 -translate-x-full ml-1.5 opacity-0\">\n <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-4 w-4\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\"\n d=\"M10.293 3.293a1 1 0 011.414 0l6 6a1 1 0 010 1.414l-6 6a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-4.293-4.293a1 1 0 010-1.414z\"\n clip-rule=\"evenodd\"\/>\n <\/svg>\n <\/span><\/a>\n <\/li>\n <li class=\"ui-menu-item level2\">\n <a class=\"group flex items-center hover:text-purple-500 transition-colors duration-500\" href=\"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/skin-disorders\/oily-skin.html\"><span>Oily Skin<\/span><span class=\"inline-block transition-all text-xs duration-500 text-purple-500 group-hover:translate-x-0 group-hover:opacity-100 -translate-x-full ml-1.5 opacity-0\">\n <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-4 w-4\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\"\n d=\"M10.293 3.293a1 1 0 011.414 0l6 6a1 1 0 010 1.414l-6 6a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-4.293-4.293a1 1 0 010-1.414z\"\n clip-rule=\"evenodd\"\/>\n <\/svg>\n <\/span><\/a>\n <\/li>\n <li class=\"ui-menu-item level2\">\n <a class=\"group flex items-center hover:text-purple-500 transition-colors duration-500\" href=\"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/skin-disorders\/scars.html\"><span>Scars<\/span><span class=\"inline-block transition-all text-xs duration-500 text-purple-500 group-hover:translate-x-0 group-hover:opacity-100 -translate-x-full ml-1.5 opacity-0\">\n <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-4 w-4\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\"\n d=\"M10.293 3.293a1 1 0 011.414 0l6 6a1 1 0 010 1.414l-6 6a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-4.293-4.293a1 1 0 010-1.414z\"\n clip-rule=\"evenodd\"\/>\n <\/svg>\n <\/span><\/a>\n <\/li>\n <li class=\"ui-menu-item level2\">\n <a class=\"group flex items-center hover:text-purple-500 transition-colors duration-500\" href=\"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/skin-disorders\/sensitive.html\"><span>Sensitive<\/span><span class=\"inline-block transition-all text-xs duration-500 text-purple-500 group-hover:translate-x-0 group-hover:opacity-100 -translate-x-full ml-1.5 opacity-0\">\n <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-4 w-4\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\"\n d=\"M10.293 3.293a1 1 0 011.414 0l6 6a1 1 0 010 1.414l-6 6a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-4.293-4.293a1 1 0 010-1.414z\"\n clip-rule=\"evenodd\"\/>\n <\/svg>\n <\/span><\/a>\n <\/li>\n <\/ul>\n <ul class=\"space-y-2\">\n <li>\n <a class=\"group flex items-center hover:text-purple-500 transition-colors duration-500\" href=\"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/area-of-body.html\"><span class=\"underline\">Area of Body<\/span><span class=\"inline-block transition-all text-xs duration-500 text-purple-500 group-hover:translate-x-0 group-hover:opacity-100 -translate-x-full ml-1.5 opacity-0\">\n <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-4 w-4\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\"\n d=\"M10.293 3.293a1 1 0 011.414 0l6 6a1 1 0 010 1.414l-6 6a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-4.293-4.293a1 1 0 010-1.414z\"\n clip-rule=\"evenodd\"\/>\n <\/svg>\n <\/span><\/a>\n <\/li>\n <li class=\"ui-menu-item level2\">\n <a class=\"group flex items-center hover:text-purple-500 transition-colors duration-500\" href=\"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/area-of-body\/cheeks.html\"><span>Cheeks<\/span><span class=\"inline-block transition-all text-xs duration-500 text-purple-500 group-hover:translate-x-0 group-hover:opacity-100 -translate-x-full ml-1.5 opacity-0\">\n <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-4 w-4\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\"\n d=\"M10.293 3.293a1 1 0 011.414 0l6 6a1 1 0 010 1.414l-6 6a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-4.293-4.293a1 1 0 010-1.414z\"\n clip-rule=\"evenodd\"\/>\n <\/svg>\n <\/span><\/a>\n <\/li>\n <li class=\"ui-menu-item level2\">\n <a class=\"group flex items-center hover:text-purple-500 transition-colors duration-500\" href=\"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/area-of-body\/eyes.html\"><span>Eyes<\/span><span class=\"inline-block transition-all text-xs duration-500 text-purple-500 group-hover:translate-x-0 group-hover:opacity-100 -translate-x-full ml-1.5 opacity-0\">\n <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-4 w-4\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\"\n d=\"M10.293 3.293a1 1 0 011.414 0l6 6a1 1 0 010 1.414l-6 6a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-4.293-4.293a1 1 0 010-1.414z\"\n clip-rule=\"evenodd\"\/>\n <\/svg>\n <\/span><\/a>\n <\/li>\n <li class=\"ui-menu-item level2\">\n <a class=\"group flex items-center hover:text-purple-500 transition-colors duration-500\" href=\"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/conditions\/area-of-body\/neck.html\"><span>Neck<\/span><span class=\"inline-block transition-all text-xs duration-500 text-purple-500 group-hover:translate-x-0 group-hover:opacity-100 -translate-x-full ml-1.5 opacity-0\">\n <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-4 w-4\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\"\n d=\"M10.293 3.293a1 1 0 011.414 0l6 6a1 1 0 010 1.414l-6 6a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-4.293-4.293a1 1 0 010-1.414z\"\n clip-rule=\"evenodd\"\/>\n <\/svg>\n <\/span><\/a>\n <\/li>\n <\/ul>\n <\/div>\n <div class=\"grid grid-cols-2\">\n <ul class=\"space-y-2\">\n <li>\n <a class=\"group flex items-center hover:text-purple-500 transition-colors duration-500\" href=\"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/ahas.html\"><span>AHA<\/span><span class=\"inline-block transition-all text-xs duration-500 text-purple-500 group-hover:translate-x-0 group-hover:opacity-100 -translate-x-full ml-1.5 opacity-0\">\n <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-4 w-4\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\"\n d=\"M10.293 3.293a1 1 0 011.414 0l6 6a1 1 0 010 1.414l-6 6a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-4.293-4.293a1 1 0 010-1.414z\"\n clip-rule=\"evenodd\"\/>\n <\/svg>\n <\/span><\/a>\n <\/li>\n <li class=\"ui-menu-item level2\">\n <a class=\"group flex items-center hover:text-purple-500 transition-colors duration-500\" href=\"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/bhas.html\"><span>BHA<\/span><span class=\"inline-block transition-all text-xs duration-500 text-purple-500 group-hover:translate-x-0 group-hover:opacity-100 -translate-x-full ml-1.5 opacity-0\">\n <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-4 w-4\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\"\n d=\"M10.293 3.293a1 1 0 011.414 0l6 6a1 1 0 010 1.414l-6 6a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-4.293-4.293a1 1 0 010-1.414z\"\n clip-rule=\"evenodd\"\/>\n <\/svg>\n <\/span><\/a>\n <\/li>\n <li class=\"ui-menu-item level2\">\n <a class=\"group flex items-center hover:text-purple-500 transition-colors duration-500\" href=\"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/chemical-peels.html\"><span>Chemical Peels<\/span><span class=\"inline-block transition-all text-xs duration-500 text-purple-500 group-hover:translate-x-0 group-hover:opacity-100 -translate-x-full ml-1.5 opacity-0\">\n <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-4 w-4\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\"\n d=\"M10.293 3.293a1 1 0 011.414 0l6 6a1 1 0 010 1.414l-6 6a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-4.293-4.293a1 1 0 010-1.414z\"\n clip-rule=\"evenodd\"\/>\n <\/svg>\n <\/span><\/a>\n <\/li>\n <li class=\"ui-menu-item level2\">\n <a class=\"group flex items-center hover:text-purple-500 transition-colors duration-500\" href=\"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/essential-oils.html\"><span>Essential Oils<\/span><span class=\"inline-block transition-all text-xs duration-500 text-purple-500 group-hover:translate-x-0 group-hover:opacity-100 -translate-x-full ml-1.5 opacity-0\">\n <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-4 w-4\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\"\n d=\"M10.293 3.293a1 1 0 011.414 0l6 6a1 1 0 010 1.414l-6 6a1 1 0 01-1.414-1.414L14.
4357586 11H3a1 1 0 110-2h11.586l-4.293-4.293a1 1 0 010-1.414z\"\n clip-rule=\"evenodd\"\/>\n <\/svg>\n <\/span><\/a>\n <\/li>\n <li class=\"ui-menu-item level2\">\n <a class=\"group flex items-center hover:text-purple-500 transition-colors duration-500\" href=\"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/hyaluronic.html\"><span>Fillers<\/span><span class=\"inline-block transition-all text-xs duration-500 text-purple-500 group-hover:translate-x-0 group-hover:opacity-100 -translate-x-full ml-1.5 opacity-0\">\n <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-4 w-4\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\"\n d=\"M10.293 3.293a1 1 0 011.414 0l6 6a1 1 0 010 1.414l-6 6a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-4.293-4.293a1 1 0 010-1.414z\"\n clip-rule=\"evenodd\"\/>\n <\/svg>\n <\/span><\/a>\n <\/li>\n <\/ul>\n <ul class=\"space-y-2\">\n <li>\n <a class=\"group flex items-center hover:text-purple-500 transition-colors duration-500\" href=\"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/growth-factors.html\"><span>Growth Factors<\/span><span class=\"inline-block transition-all text-xs duration-500 text-purple-500 group-hover:translate-x-0 group-hover:opacity-100 -translate-x-full ml-1.5 opacity-0\">\n <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-4 w-4\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\"\n d=\"M10.293 3.293a1 1 0 011.414 0l6 6a1 1 0 010 1.414l-6 6a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-4.293-4.293a1 1 0 010-1.414z\"\n clip-rule=\"evenodd\"\/>\n <\/svg>\n <\/span><\/a>\n <\/li>\n <li class=\"ui-menu-item level2\">\n <a class=\"group flex items-center hover:text-purple-500 transition-colors duration-500\" href=\"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/lighteners.html\"><span>Lighteners<\/span><span class=\"inline-block transition-all text-xs duration-500 text-purple-500 group-hover:translate-x-0 group-hover:opacity-100 -translate-x-full ml-1.5 opacity-0\">\n <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-4 w-4\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\"\n d=\"M10.293 3.293a1 1 0 011.414 0l6 6a1 1 0 010 1.414l-6 6a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-4.293-4.293a1 1 0 010-1.414z\"\n clip-rule=\"evenodd\"\/>\n <\/svg>\n <\/span><\/a>\n <\/li>\n <li class=\"ui-menu-item level2\">\n <a class=\"group flex items-center hover:text-purple-500 transition-colors duration-500\" href=\"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/retinoids.html\"><span>Retinoids<\/span><span class=\"inline-block transition-all text-xs duration-500 text-purple-500 group-hover:translate-x-0 group-hover:opacity-100 -translate-x-full ml-1.5 opacity-0\">\n <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-4 w-4\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\"\n d=\"M10.293 3.293a1 1 0 011.414 0l6 6a1 1 0 010 1.414l-6 6a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-4.293-4.293a1 1 0 010-1.414z\"\n clip-rule=\"evenodd\"\/>\n <\/svg>\n <\/span><\/a>\n <\/li>\n <li class=\"ui-menu-item level2\">\n <a class=\"group flex items-center hover:text-purple-500 transition-colors duration-500\" href=\"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/stem-cells.html\"><span>Stem Cells<\/span><span class=\"inline-block transition-all text-xs duration-500 text-purple-500 group-hover:translate-x-0 group-hover:opacity-100 -translate-x-full ml-1.5 opacity-0\">\n <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-4 w-4\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\"\n d=\"M10.293 3.293a1 1 0 011.414 0l6 6a1 1 0 010 1.414l-6 6a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-4.293-4.293a1 1 0 010-1.414z\"\n clip-rule=\"evenodd\"\/>\n <\/svg>\n <\/span><\/a>\n <\/li>\n <li class=\"ui-menu-item level2\">\n <a class=\"group flex items-center hover:text-purple-500 transition-colors duration-500\" href=\"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs\/ingredients\/vitamin-c.html\"><span>Vitamin C<\/span><span class=\"inline-block transition-all text-xs duration-500 text-purple-500 group-hover:translate-x-0 group-hover:opacity-100 -translate-x-full ml-1.5 opacity-0\">\n <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-4 w-4\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\"\n d=\"M10.293 3.293a1 1 0 011.414 0l6 6a1 1 0 010 1.414l-6 6a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-4.293-4.293a1 1 0 010-1.414z\"\n clip-rule=\"evenodd\"\/>\n <\/svg>\n <\/span><\/a>\n <\/li>\n <\/ul>\n <\/div>\n <\/li>\n <\/ul>\n<\/div>\n<div class=\"justify-end\">\n <img class=\"w-full\" loading=\"lazy\" src=\"https:\/\/www.skintrends.com\/media\/wysiwyg\/nav-img-footer\/menu-banners_gray-bg_940x230px_05.png\" alt=\"\">\n<\/div>\n","url":"https:\/\/www.skintrends.com\/skincare\/face\/product-faqs.html\/","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Expert Help","is_category":false,"id":"custom-node-2","status":1,"sort_order":"4","content":"","url":"https:\/\/www.skintrends.com\/expert-help","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"COUPON CODES","is_category":false,"id":"custom-node-10","status":3,"sort_order":"100001","content":"","url":"","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"HOW TO ORDER","is_category":false,"id":"custom-node-11","status":3,"sort_order":"100002","content":"","url":"","current":false},{"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"SHIPPING","is_category":false,"id":"custom-node-12","status":3,"sort_order":"100003","content":"","url":"","current":false}],"__disableTmpl":true,"name":null,"is_category":null,"id":null,"status":0,"sort_order":null,"content":null,"url":null,"current":false} }, 4358 fetchElements(){ 4359 const formData = new FormData(); 4360 formData.set('pathname', window.location.pathname.trim()); 4361 formData.set('form_key', hyva.getFormKey()); 4362 fetch(BASE_URL + 'megamenu/menu', { 4363 method: "POST", 4364 body: formData, 4365 credentials: 'include' 4366 }).then(e => e.json()).then(response => { 4367 if(response){ 4368 this.megaMenu.data = JSON.parse(response); 4369 } 4370 }); 4371 }, 4372 filterElements() { 4373 return this.megaMenu.data.elems.filter((elem) => { 4374 const isMobile = matchMedia('(max-width: 1023px)').matches; 4375 // Avoid old amasty shop by brand data since we have another compatible version 4376 let notOldBrand = elem.id !== 'additional-node
4376-amasty_shopby_brand_allbrands', 4377 allowedStatus = ((isMobile ? 1 : 0) && elem.status === 3) || elem.status === 1; 4378 return notOldBrand && allowedStatus; 4379 }); 4380 } 4381 } 4382 }; 4383 const initMenuDesktop_6ac3e9a60cac3 = () => { 4384 return Object.assign({ 4385 hoverPanelActiveId: null 4386 }, initMegaMenuComponent()); 4387 } 4388</script>
vendor: 1 bytes, line 4388
4388
4389<script> 4390 const initStickyMenu = function () { 4391 return { 4392 initY: 0, 4393 spaceAbove: 0, 4394 isBelow: false, 4395 initPos() { 4396 const rect = this.$el.getBoundingClientRect(); 4397 this.initY = rect.top + document.documentElement.scrollTop; 4398 this.spaceAbove = document.querySelector('#ammenu-header-container') 4399 ? document.querySelector('#ammenu-header-container').scrollHeight : 0; 4400 }, 4401 getElements() { 4402 // This trick is temporary 4403 const header = document.querySelector('#header'); 4404 const ammenuHeader = document.querySelector('#ammenu-header-container'); 4405 const stickyLogo = document.querySelector('.megamenu-sticky-logo'); 4406 const headerWrapper = header.querySelector('.content-wrapper'); 4407 const headerLogoDesktop = header.querySelector('.ammenu-logo'); 4408 const search = header.querySelector('#search-content'); 4409 const hours = header.querySelector('.c-header_store_hours'); 4410 return { 4411 header, 4412 headerWrapper, 4413 ammenuHeader, 4414 stickyLogo, 4415 headerLogoDesktop, 4416 search, 4417 hours 4418 } 4419 }, 4420 gotoSticky() { 4421 const {hours, search, headerLogoDesktop, header, ammenuHeader, stickyLogo, headerWrapper} = this.getElements(); 4422 4423 'fixed top-0 left-0 right-0'.split(' ').forEach(className => { 4424 this.$el.classList.add(className); 4425 }); 4426 stickyLogo.style.display = 'block'; 4427 this.$el.querySelector('.megamenu').style.borderTopWidth = '0'; 4428 4429 if (!hours || !search || !headerLogoDesktop || !header || !ammenuHeader || !stickyLogo || !headerWrapper) return; 4430 4431 hours.style.display = "none"; 4432 search.style.display = "none"; 4433 headerLogoDesktop.style.display = "none"; 4434 4435 header.style.paddingTop = '0'; 4436 header.style.paddingBottom = '0'; 4437 header.style.width = "fit-content"; 4438 header.style.margin = '0px'; 4439 header.style.display = "flex"; 4440 header.style.alignItems = "center"; 4441 header.style.flex = "1"; 4442 4443 headerWrapper.style.justifyContent = 'end'; 4444 4445 ammenuHeader.style.height = `${this.spaceAbove}px`; 4446 4447 this.$el.querySelector('.megamenu nav').append(header); 4448 }, 4449 removeSticky() { 4450 const {hours, search, headerLogoDesktop, header, ammenuHeader, stickyLogo, headerWrapper} = this.getElements(); 4451 4452 'fixed top-0 left-0 right-0'.split(' ').forEach(className => { 4453 this.$el.classList.remove(className); 4454 }); 4455 stickyLogo.style.display = 'none'; 4456 this.$el.querySelector('.megamenu').style.borderTopWidth = null; 4457 4458 if (!hours || !search || !headerLogoDesktop || !header || !ammenuHeader || !stickyLogo || !headerWrapper) return; 4459 4460 hours.style.display = null; 4461 search.style.display = null; 4462 headerLogoDesktop.style.display = null; 4463 4464 header.style.paddingTop = null; 4465 header.style.paddingBottom = null; 4466 header.style.width = null; 4467 header.style.margin = null; 4468 header.style.display = null; 4469 header.style.alignItems = null; 4470 header.style.flex = null; 4471 4472 headerWrapper.style.justifyContent = null; 4473 4474 4475 ammenuHeader.style.height = null; 4476 4477 this.$el.parentNode.append(header, this.$el); 4478 }, 4479 updateStickyMenuPos() { 4480 const media = matchMedia('(min-width: 1024px)').matches; 4481 4482 if (window.scrollY > this.initY && media) { 4483 if(!this.isBelow){ 4484 Alpine.pauseMutationObserver = true; 4485 this.gotoSticky(); 4486 Alpine.pauseMutationObserver = false;
4487 4488 } 4489 } else { 4490 if(this.isBelow && media){ 4491 Alpine.pauseMutationObserver = true; 4492 this.removeSticky(); 4493 Alpine.pauseMutationObserver = false; 4494 } 4495 } 4496 if (window.scrollY > this.initY) { 4497 this.isBelow = true; 4498 } else { 4499 this.isBelow = false; 4500 } 4501 } 4502 } 4503 } 4504</script>
4504 4505 4506 4507</header><main id="maincontent" class="page-main"><div id="contentarea" tabindex="-1"></div> 4508<div class="page messages">
4508<script> 4509 function initMessages() { 4510 "use strict"; 4511 return { 4512 messages: window.mageMessages || [], 4513 isEmpty() { 4514 return this.messages.reduce( 4515 function (isEmpty, message) { 4516 return isEmpty && message === undefined 4517 }, true 4518 ) 4519 }, 4520 removeMessage(messageIndex) { 4521 this.messages[messageIndex] = undefined; 4522 }, 4523 addMessages(messages, hideAfter) { 4524 console.log(messages, hideAfter); 4525 messages.map((message) => { 4526 this.messages = this.messages.concat(message); 4527 if (hideAfter === undefined && message.type === 'success' && window.defaultSuccessMessageTimeout) { 4528 hideAfter = window.defaultSuccessMessageTimeout; 4529 } 4530 if (hideAfter) { 4531 this.setHideTimeOut(this.messages.length -1, hideAfter); 4532 } 4533 }); 4534 }, 4535 setHideTimeOut(messageIndex, hideAfter) { 4536 setTimeout((messageIndex) => { 4537 this.removeMessage(messageIndex); 4538 }, hideAfter, messageIndex); 4539 }, 4540 eventListeners: { 4541 ['@messages-loaded.window'](event) { 4542 this.addMessages(event.detail.messages, event.detail.hideAfter) 4543 }, 4544 ['@private-content-loaded.window'](event) { 4545 const data = event.detail.data; 4546 if ( 4547 data.messages && 4548 data.messages.messages && 4549 data.messages.messages.length 4550 ) { 4551 this.messages = []; 4552 this.addMessages(data.messages.messages); 4553 } 4554 }, 4555 ['@clear-messages.window']() { 4556 this.messages = []; 4557 } 4558 } 4559 } 4560 } 4561</script>
4561 4562<section id="messages" 4563 x-data="initMessages()" 4564 x-bind="eventListeners" 4565> 4566 <template x-if="!isEmpty()"> 4567 <div class="w-full"> 4568 <div class="messages container mx-auto py-3"> 4569 <template x-for="(message, index) in messages" :key="index"> 4570 <div> 4571 <template x-if="message"> 4572 <div class="message" :class="message.type" 4573 :ui-id="'message-' + message.type" 4574 > 4575 <span x-html="message.text"></span> 4576 </div> 4577 </template> 4578 </div> 4579 </template> 4580 </div> 4581 </div> 4582 </template> 4583</section> 4584</div> <div class=" container-st py-8 mx-auto"> 4585 <h1 class="page-title" 4586 > 4587 <span class="base" data-ui-id="page-title-wrapper" >Skin Trends Skincare and Cosmetics</span> </h1> 4588 </div> 4589<div class="columns"><aside class="sidebar sidebar-main"> <div class="wp-sidebar"> <div class="block block-blog block-blog-categories"> 4590 <div class="after:w-9 after:absolute after:h-px after:content-[''] after:left-0 4591 after:bottom-0 after:bg-purple mb-6 mt-5 pb-2.5 border-b-gray-300 4592 border-b border-solid relative h-10 flex items-center justify-between"> 4593 <h3 class="text-lg font-medium">Categories</h3> 4594 </div> 4595 <div class="block-content"> 4596 <ul class="level0" id="wp-category-list"> 4597 <li class="level0 item mb-2.5"> 4598 <a class="level0 link-purple" href="https://www.skintrends.com/blog/category/cosmetic-products/" 4599 title="Cosmetic Products"> 4600 Cosmetic Products </a> 4601 (6) 4602 </li> 4603 <li class="level0 item mb-2.5"> 4604 <a class="level0 link-purple" href="https://www.skintrends.com/blog/category/cosmetics-tips/" 4605 title="Cosmetics Tips/Techniques"> 4606 Cosmetics Tips/Techniques </a> 4607 (1) 4608 </li> 4609 <li class="level0 item mb-2.5"> 4610 <a class="level0 link-purple" href="https://www.skintrends.com/blog/category/skin-care-products/" 4611 title="Skin Care Products"> 4612 Skin Care Products </a> 4613 (118) 4614 </li> 4615 <li class="level0 item mb-2.5"> 4616 <a class="level0 link-purple" href="https://www.skintrends.com/blog/category/skin-care-tips-and-techniques/" 4617 title="Skin Care Tips"> 4618 Skin Care Tips </a> 4619 (34) 4620 </li> 4621 <li class="level0 item mb-2.5"> 4622 <a class="level0 link-purple" href="https://www.skintrends.com/blog/category/spa-and-body-products/" 4623 title="Spa and Body Products"> 4624 Spa and Body Products </a> 4625 (10) 4626 </li> 4627 </ul> 4628 </div> 4629 </div> 4630<div class="block block-blog block-blog-search"> 4631 <div class="h-auto after:w-9 after:absolute after:h-px 4632 after:content-[''] after:left-0 after:bottom-0 after:bg-purple mb-6 mt-5 pb-2.5 border-b-gray-300 4633 border-b border-solid relative flex items-center justify-between"> 4634 <h3 class="text-lg font-medium">
4634Search Blog Articles Here</h3> 4635 </div> 4636 <div class="block-content"> 4637 <form method="get" action="https://www.skintrends.com/wordpress/search/" id="blog-search-form"> 4638 <div class="blog-search"> 4639 <input type="text" name="s" class="input w-full border rounded border-solid border-gray-200 4640 bg-white focus:border-[#070605] focus:ring-offset-0 focus:ring-0" 4641 title="Search Posts" 4642 value=""/> 4643 <button class="button btn btn-purple px-9" 4644 title="Search" 4645 type="submit"> 4646 <span><span>Search</span></span> 4647 </button> 4648 </div> 4649 </form> 4650 </div> 4651</div> 4652 <div class="block block-blog block-recent-posts"> 4653 <div class="after:w-9 after:absolute after:h-px after:content-[''] 4654 after:left-0 after:bottom-0 after:bg-purple mb-6 mt-5 pb-2.5 border-b-gray-300 4655 border-b border-solid relative h-10 flex items-center justify-between"> 4656 <h3 class="text-lg font-medium">Recent Posts</h3> 4657 </div> 4658 <div class="block-content"> 4659 <ul id="wp-b4c"> 4660 <li class="item mb-2.5"> 4661 <a class="link-purple" href="https://www.skintrends.com/blog/beat-the-heat-unlock-the-mist-ery-of-skincare-facial-mists/" 4662 title="Beat the Heat, Unlock the Mist-ery of Skincare Facial Mists!"> 4663 Beat the Heat, Unlock the Mist-ery of Skincare Facial Mists! </a> 4664 </li> 4665 <li class="item mb-2.5"> 4666 <a class="link-purple" href="https://www.skintrends.com/blog/body-contouring-be-slim-and-smooth-all-year-long/" 4667 title="Body Contouring⦠Be Slim and Smooth, All Year Longâ¦"> 4668 Body Contouring⦠Be Slim and Smooth, All Year Long⦠</a> 4669 </li> 4670 <li class="item mb-2.5"> 4671 <a class="link-purple" href="https://www.skintrends.com/blog/dont-give-your-skin-the-winter-cold-shoulder-it-may-be-time-to-boost-your-routine/" 4672 title="Donât give your skin the winter cold shoulder! It may be time to âBoostâ your routine."> 4673 Donât give your skin the winter cold shoulder! It may be time to âBoostâ your routine. </a> 4674 </li> 4675 <li class="item mb-2.5"> 4676 <a class="link-purple" href="https://www.skintrends.com/blog/how-hormones-affect-the-skin-during-your-period/" 4677 title="How hormones affect the skin during your period"> 4678 How hormones affect the skin during your period </a> 4679 </li> 4680 <li class="item mb-2.5"> 4681 <a class="link-purple" href="https://www.skintrends.com/blog/facial-skin-cleansers-types-purposes-and-benefits/" 4682 title="Facial Skin Cleansers: Types, Purposes and Benefits"> 4683 Facial Skin Cleansers: Types, Purposes and Benefits </a> 4684 </li> 4685 <li class="item mb-2.5"> 4686 <a class="link-purple" href="https://www.skintrends.com/blog/all-you-need-to-know-about-body-contouring-products/" 4687 title="All you need to know about Body Contouring Products"> 4688 All you need to know about Body Contouring Products </a> 4689 </li> 4690 <li class="item mb-2.5"> 4691 <a class="link-purple" href="https://www.skintrends.com/blog/summer-skincare-for-a-safer-tan-and-great-looking-skin/" 4692 title="Summer Skincare for a Safer tan and great looking skin"> 4693 Summer Skincare for a Safer tan and great looking skin </a> 4694 </li> 4695 <li class="item mb-2.5"> 4696 <a class="link-purple" href="https://www.skintrends.com/blog/summer-skincare/" 4697 title="Summer Skincare"> 4698 Summer Skincare </a> 4699 </li> 4700 <li class="item mb-2.5"> 4701 <a class="link-purple" href="https://www.skintrends.com/blog/why-did-the-sunscreen-i-love-change-its-ingredients/" 4702 title="Why Did the Sunscreen I Love change itâs ingredients?"> 4703 Why Did the Sunscreen I Love change itâs ingredients? </a> 4704 </li> 4705 <li class="item mb-2.5"> 4706 <a class="link-purple" href="https://www.skintrends.com/blog/protect-your-hands-from-sanitizer-use-frequent-washing/" 4707 title="Protect your hands from sanitizer use & frequent washing"> 4708 Protect your hands from sanitizer use & frequent washing </a> 4709 </li> 4710 <li class="item mb-2.5"> 4711 <a class="link-purple" href="https://www.skintrends.com/blog/corona-virus-covid-19-and-its-impact-on-skin-effective-skincare-essentials/" 4712 title="Corona Virus (Covid 19) and its impact on skin⦠Effective Skincare Essentials."> 4713 Corona Virus (Covid 19) and its impact on skin⦠Effective Skincare Essentials. </a> 4714 </li> 4715 <li class="item mb-2.5"> 4716 <a class="link-purple" href="https://www.skintrends.com/blog/skincare-essence-getting-down-to-the-essence-of-what-an-essence-is/" 4717 title="Skincare Essence: Getting Down to the Essence of What an Essence Isâ¦"> 4718 Skincare Essence: Getting Down to the Essence of What an Essence Is⦠</a> 4719 </li> 4720 <li class="item mb-2.5"> 4721 <a class="link-purple" href="https://www.skintrends.com/blog/skin-and-stress-during-covid-19/" 4722 title="Skin and Stress during COVID-19"> 4723 Skin and Stress during COVID-19 </a> 4724 </li> 4725 <li class="item mb-2.5"> 4726 <a class="link-purple" href="https://www.skintrends.com/blog/rhonda-allison-new-categories-and-packaging/" 4727 title="Rhonda Allison New Categories and Packaging"> 4728 Rhonda Allison New Categories and Packaging </a> 4729 </li> 4730 <li class="item mb-2.5"> 4731 <a class="link-purple" href="https://www.skintrends.com/blog/new-image-skincare-2020-launch/"
4732 title="New Image Skincare 2020 Launch"> 4733 New Image Skincare 2020 Launch </a> 4734 </li> 4735 <li class="item mb-2.5"> 4736 <a class="link-purple" href="https://www.skintrends.com/blog/sckin-charcoal-gommage-cleanser/" 4737 title="SCKIN CHARCOAL GOMMAGE CLEANSER"> 4738 SCKIN CHARCOAL GOMMAGE CLEANSER </a> 4739 </li> 4740 <li class="item mb-2.5"> 4741 <a class="link-purple" href="https://www.skintrends.com/blog/sckin-corrective-skincare-simplified/" 4742 title="Sckin⦠Corrective Skincare Simplified."> 4743 Sckin⦠Corrective Skincare Simplified. </a> 4744 </li> 4745 <li class="item mb-2.5"> 4746 <a class="link-purple" href="https://www.skintrends.com/blog/what-is-the-best-way-to-multi-mask/" 4747 title="What is the best way to Multi Mask?"> 4748 What is the best way to Multi Mask? </a> 4749 </li> 4750 <li class="item mb-2.5"> 4751 <a class="link-purple" href="https://www.skintrends.com/blog/effectively-smoothing-and-hydrating-dry-chapped-lips/" 4752 title="Effectively Smoothing and Hydrating Dry, Chapped Lips">
4753 Effectively Smoothing and Hydrating Dry, Chapped Lips </a> 4754 </li> 4755 <li class="item mb-2.5"> 4756 <a class="link-purple" href="https://www.skintrends.com/blog/g-m-collin-diamond-radiance/" 4757 title="G.M. Collin Diamond Radiance"> 4758 G.M. Collin Diamond Radiance </a> 4759 </li> 4760 </ul> 4761 </div> 4762 </div> 4763 <div class="block block-blog block-blog-archives"> 4764 <div class="after:w-9 after:absolute after:h-px after:content-[''] after:left-0 4765 after:bottom-0 after:bg-purple mb-6 mt-5 pb-2.5 border-b-gray-300 border-b 4766 border-solid relative h-10 flex items-center justify-between"> 4767 <h3 class="text-lg font-medium">Archives</h3> 4768 </div> 4769 <div class="block-content mb-3 md:mb-0"> 4770 <ul id="wp-archive-list"> 4771 <li class="item"> 4772 <select class="w-full border rounded border-solid border-gray-200 bg-white 4773 focus:border-[#070605] focus:ring-offset-0 focus:ring-0" 4774 name="blog-archive-dropdown" onchange="window.location.href=this.value"> 4775 <option value="#">Select Month</option> 4776 <option value="https://www.skintrends.com/blog/2021/07/" 4777 > 4778 July 2021 ( 4779 1) 4780 </option> 4781 <option value="https://www.skintrends.com/blog/2021/05/" 4782 > 4783 May 2021 ( 4784 1) 4785 </option> 4786 <option value="https://www.skintrends.com/blog/2020/12/" 4787 > 4788 December 2020 ( 4789 1) 4790 </option> 4791 <option value="https://www.skintrends.com/blog/2020/09/" 4792 > 4793 September 2020 ( 4794 2) 4795 </option> 4796 <option value="https://www.skintrends.com/blog/2020/08/" 4797 > 4798 August 2020 ( 4799 3) 4800 </option> 4801 <option value="https://www.skintrends.com/blog/2020/05/" 4802 > 4803 May 2020 ( 4804 4) 4805 </option> 4806 <option value="https://www.skintrends.com/blog/2020/04/" 4807 > 4808 April 2020 ( 4809 3) 4810 </option> 4811 <option value="https://www.skintrends.com/blog/2020/03/" 4812 > 4813 March 2020 ( 4814 1) 4815 </option> 4816 <option value="https://www.skintrends.com/blog/2019/11/" 4817 > 4818 November 2019 ( 4819 1) 4820 </option> 4821 <option value="https://www.skintrends.com/blog/2019/06/" 4822 > 4823 June 2019 ( 4824 1) 4825 </option> 4826 <option value="https://www.skintrends.com/blog/2019/03/" 4827 > 4828 March 2019 ( 4829 1) 4830 </option> 4831 <option value="https://www.skintrends.com/blog/2018/12/" 4832 > 4833 December 2018 ( 4834 1) 4835 </option> 4836 <option value="https://www.skintrends.com/blog/2018/11/" 4837 > 4838 November 2018 ( 4839 1) 4840 </option> 4841 <option value="https://www.skintrends.com/blog/2018/10/" 4842 > 4843 October 2018 ( 4844 1) 4845 </option> 4846 <option value="https://www.skintrends.com/blog/2018/09/" 4847 > 4848 September 2018 ( 4849 1) 4850 </option> 4851 <option value="https://www.skintrends.com/blog/2018/01/" 4852 > 4853 January 2018 ( 4854 1) 4855 </option> 4856 <option value="https://www.skintrends.com/blog/2017/06/" 4857 > 4858 June 2017 ( 4859 2) 4860 </option> 4861 <option value="https://www.skintrends.com/blog/2016/12/" 4862 > 4863 December 2016 ( 4864 2) 4865 </option> 4866 <option value="https://www.skintrends.com/blog/2016/11/" 4867 > 4868 November 2016 ( 4869 1) 4870 </option> 4871 <option value="https://www.skintrends.com/blog/2016/10/" 4872 > 4873 October 2016 ( 4874 2) 4875 </option> 4876 <option value="https://www.skintrends.com/blog/2016/09/" 4877 > 4878 September 2016 ( 4879 1) 4880 </option> 4881 <option value="https://www.skintrends.com/blog/2016/08/" 4882 > 4883 August 2016 ( 4884 2) 4885 </option> 4886 <option value="https://www.skintrends.com/blog/2016/07/" 4887 > 4888 July 2016 ( 4889 1) 4890 </option> 4891 <option value="https://www.skintrends.com/blog/2016/06/" 4892 > 4893 June 2016 ( 4894 1) 4895 </option> 4896 <option value="https://www.skintrends.com/blog/2016/03/" 4897 > 4898 March 2016 ( 4899 1) 4900 </option> 4901 <option value="https://www.skintrends.com/blog/2016/02/" 4902 > 4903 February 2016 ( 4904 1) 4905 </option> 4906 <option value="https://www.skintrends.com/blog/2016/01/" 4907 > 4908 January 2016 ( 4909 1) 4910 </option> 4911 <option value="https://www.skintrends.com/blog/2015/12/" 4912 > 4913 December 2015 ( 4914 1) 4915 </option> 4916 <option value="https://www.skintrends.com/blog/2015/10/" 4917 > 4918 October 2015 ( 4919 2) 4920 </option> 4921 <option value="https://www.skintrends.com/blog/2015/09/" 4922 > 4923 September 2015 ( 4924 3) 4925 </option> 4926 <option value="https://www.skintrends.com/blog/2015/08/" 4927 > 4928 August 2015 ( 4929 4) 4930 </option> 4931 <option value="https://www.skintrends.com/blog/2015/05/" 4932 > 4933 May 2015 ( 4934 2) 4935 </option> 4936 <option value="https://www.skintrends.com/blog/2015/04/" 4937 > 4938 April 2015 ( 4939 1) 4940 </option> 4941 <option value="https://www.skintrends.com/blog/2015/03/" 4942 > 4943 March 2015 ( 4944 2) 4945 </option> 4946 <option value="https://www.skintrends.com/blog/2015/02/" 4947 > 4948 February 2015 ( 4949 3) 4950 </option> 4951 <option value="https://www.skintrends.com/blog/2015/01/" 4952 > 4953 January 2015 ( 4954 1) 4955 </option> 4956 <option value="https://www.skintrends.com/blog/2014/12/" 4957 > 4958 December 2014 ( 4959 2) 4960 </option> 4961 <option value="https://www.skintrends.com/blog/2014/11/" 4962 > 4963 November 2014 ( 4964 1) 4965 </option> 4966 <option value="https://www.skintrends.com/blog/2014/10/" 4967 > 4968 October 2014 ( 4969 2) 4970 </option> 4971 <option value="https://www.skintrends.com/blog/2014/09/" 4972 > 4973 September 2014 ( 4974 3) 4975 </option> 4976 <option value="https://www.skintrends.com/blog/2014/08/" 4977 > 4978 August 2014 ( 4979 3) 4980 </option> 4981 <option value="https://www.skintrends.com/blog/2014/07/" 4982 > 4983 July 2014 ( 4984 4) 4985 </option> 4986 <option value="https://www.skintrends.com/blog/2014/06/" 4987 > 4988 June 2014 ( 4989 2) 4990 </option> 4991 <option value="https://www.skintrends.com/blog/2014/05/" 4992 > 4993 May 2014 ( 4994 3) 4995 </option> 4996 <option value="https://www.skintrends.com/blog/2014/04/" 4997 > 4998 April 2014 ( 4999 3) 5000 </option> 5001 <option value="https://www.skintrends.com/blog/2014/03/" 5002
5002 > 5003 March 2014 ( 5004 2) 5005 </option> 5006 <option value="https://www.skintrends.com/blog/2014/02/" 5007 > 5008 February 2014 ( 5009 4) 5010 </option> 5011 <option value="https://www.skintrends.com/blog/2014/01/" 5012 > 5013 January 2014 ( 5014 1) 5015 </option> 5016 <option value="https://www.skintrends.com/blog/2013/12/" 5017 > 5018 December 2013 ( 5019 2) 5020 </option> 5021 <option value="https://www.skintrends.com/blog/2013/11/" 5022 > 5023 November 2013 ( 5024 4) 5025 </option> 5026 <option value="https://www.skintrends.com/blog/2013/10/" 5027 > 5028 October 2013 ( 5029 4) 5030 </option> 5031 <option value="https://www.skintrends.com/blog/2013/09/" 5032 > 5033 September 2013 ( 5034 4) 5035 </option> 5036 <option value="https://www.skintrends.com/blog/2013/08/" 5037 > 5038 August 2013 ( 5039 5) 5040 </option> 5041 <option value="https://www.skintrends.com/blog/2013/07/" 5042 > 5043 July 2013 ( 5044 2) 5045 </option> 5046 <option value="https://www.skintrends.com/blog/2013/06/" 5047 > 5048 June 2013 ( 5049 5) 5050 </option> 5051 <option value="https://www.skintrends.com/blog/2013/05/" 5052 > 5053 May 2013 ( 5054 3) 5055 </option> 5056 <option value="https://www.skintrends.com/blog/2013/04/" 5057 > 5058 April 2013 ( 5059 5) 5060 </option> 5061 <option value="https://www.skintrends.com/blog/2013/03/" 5062 > 5063 March 2013 ( 5064 4) 5065 </option> 5066 <option value="https://www.skintrends.com/blog/2013/02/" 5067 > 5068 February 2013 ( 5069 3) 5070 </option> 5071 <option value="https://www.skintrends.com/blog/2013/01/" 5072 > 5073 January 2013 ( 5074 5) 5075 </option> 5076 <option value="https://www.skintrends.com/blog/2012/12/" 5077 > 5078 December 2012 ( 5079 7) 5080 </option> 5081 <option value="https://www.skintrends.com/blog/2012/11/" 5082 > 5083 November 2012 ( 5084 9) 5085 </option> 5086 <option value="https://www.skintrends.com/blog/2012/10/" 5087 > 5088 October 2012 ( 5089 2) 5090 </option> 5091 <option value="https://www.skintrends.com/blog/2012/09/" 5092 > 5093 September 2012 ( 5094 7) 5095 </option> 5096 </select> 5097 </li> 5098 </ul> 5099 </div> 5100 </div> 5101</div> 5102 5103<div 5104 class="ambanners ambanner-2" 5105 data-position="2" 5106 data-bannerid="" 5107 data-role="amasty-banner-container" 5108></div> 5109</aside><div class="column main">
5109<script nonce="MThqZjdpYXU5dzJrOW1rNmJmOWR4Y28wZDVzd3U4dDU="> 5110 var feedId = getUrlParam('ff'), 5111 product = getUrlParam('fp'), 5112 currentDate = new Date(), 5113 session = getCookie('feed_session'); 5114 5115 if (!session) { 5116 session = '' + Math.floor(currentDate.getTime() / 1000) + Math.floor(Math.random() * 10000001); 5117 } 5118 5119 if (session && feedId > 0 && product > 0) { 5120 setCookie('feed_session', session, {expires: 365, path: '/'}); 5121 setCookie('feed_id', feedId, 365); 5122 5123 var xhr = new XMLHttpRequest(), 5124 baseUrl = 'https://www.skintrends.com/', 5125 url = BASE_URL + '?rnd=' + Math.floor(Math.random() * 10000001) + "&feed=" + feedId + "&session=" + session + "&product=" + product; 5126 5127 xhr.open('GET', url, true); 5128 xhr.setRequestHeader('Content-Type', 'application/json'); 5129 xhr.send(); 5130 } 5131 5132 function getUrlParam(name) { 5133 let results = new RegExp('[\?&]' + name + '=([^&#]*)').exec(window.location.href); 5134 5135 if (results === null) { 5136 return ''; 5137 } else { 5138 return results[1] || 0; 5139 } 5140 } 5141 5142 function getCookie(cookieName) { 5143 var name = cookieName + "=", 5144 decodedCookie = decodeURIComponent(document.cookie), 5145 cookieArray = decodedCookie.split(';'); 5146 5147 for (var i = 0; i < cookieArray.length; i++) { 5148 var cookie = cookieArray[i].trim(); 5149 if (cookie.indexOf(name) === 0) { 5150 return cookie.substring(name.length, cookie.length); 5151 } 5152 } 5153 5154 return null; 5155 } 5156 5157 function setCookie(cookieName, cookieValue, expirationDays) { 5158 var d = new Date(); 5159 d.setTime(d.getTime() + (expirationDays * 24 * 60 * 60 * 1000)); 5160 var expires = "expires=" + d.toUTCString(); 5161 document.cookie = cookieName + "=" + cookieValue + ";" + expires + ";path=/"; 5162 } 5163</script>
5163 5164 <p class="post-list-description mb-2.5">Expert Service in Skincare</p> 5165 <img class="blog-banner" src="https://www.skintrends.com/media/wysiwyg/skintrends_blog.png" alt="Blog Banner"> 5166 <div class="post-list-wrapper"> 5167 <ol class="post-list grid"> 5168 <li class="item"> 5169 <div class="post-list-item"> 5170 <h2 class="mt-6 mb-5"> 5171 <a class="text-[22px] link-purple" href="https://www.skintrends.com/blog/beat-the-heat-unlock-the-mist-ery-of-skincare-facial-mists/" 5172 title="Beat the Heat, Unlock the Mist-ery of Skincare Facial Mists!"> 5173 Beat the Heat, Unlock the Mist-ery of Skincare Facial Mists! </a> 5174 </h2> 5175 <div class="post-entry"> 5176 <div class="post-excerpt leading-tight"><p><img decoding="async" loading="lazy" class="alignleft size-full wp-image-2373" src="https://www.skintrends.com/wp/wp-content/uploads/2021/07/mist-blog-small.jpg" alt="" width="165" height="165" />Ahhhh, the cool refreshment of a face mist! This hot weather skincare product staple is having a major moment of popularity right now and with our long-awaited return to the beach, the timing couldnât be better.</p> 5177<p>Face mists are no longer a simple mix of water and fragrance â todayâs mists offer a host of benefits for hydrating parched skin, tackling fine lines and wrinkles, brightening dark spots or providing relief for sensitivity and irritation. Those of us that live in warmer climates are happy to tell you that keeping your favorite face mist in the fridge can make them somehow magically more effective (and cooling).</p> 5178<p> <a class="read-more" href="https://www.skintrends.com/blog/beat-the-heat-unlock-the-mist-ery-of-skincare-facial-mists/">Continue reading â</a></p></div> 5179 </div> 5180 <div class="post-meta"> 5181 <div class="post-categories post-meta-item"> 5182 <strong>Categories:</strong> 5183 <a href="https://www.skintrends.com/blog/category/skin-care-tips-and-techniques/">Skin Care Tips</a>, <a href="https://www.skintrends.com/blog/category/skin-care-products/">Skin Care Products</a>, <a href="https://www.skintrends.com/blog/category/spa-and-body-products/">Spa and Body Products</a>, <a href="https://www.skintrends.com/blog/category/cosmetic-products/">Cosmetic Products</a> & <a href="https://www.skintrends.com/blog/category/cosmetics-tips/">Cosmetics Tips/Techniques</a> </div> 5184 <div class="post-tags post-meta-item"> 5185 <strong>Tags:</strong> <a href="https://www.skintrends.com/blog/tag/face-mist/">face mist</a>, <a href="https://www.skintrends.com/blog/tag/spritz/">spritz</a>, <a href="https://www.skintrends.com/blog/tag/calming-essence/">calming essence</a>, <a href="https://www.skintrends.com/blog/tag/oxidative-stress/">oxidative stress</a> & <a href="https://www.skintrends.com/blog/tag/refresh/">Refresh</a> </div> 5186 <div class="post-date post-meta-item"> 5187 <strong>Posted On:</strong> 5188 July 15 2021 </div> 5189 <div class="post-user post-meta-item"> 5190 <strong>Posted By:</strong> 5191 <a href="https://www.skintrends.com/blog/author/admin/"> 5192 Skin Trends </a> 5193 </div> 5194 </div> 5195 </div> 5196 </li> 5197 <li class="item"> 5198 <div class="post-list-item"> 5199 <h2 class="mt-6 mb-5"> 5200 <a class="text-[22px] link-purple" href="https://www.skintrends.com/blog/body-contouring-be-slim-and-smooth-all-year-long/" 5201 title="Body Contouring⦠Be Slim and Smooth, All Year Longâ¦"> 5202 Body Contouring⦠Be Slim and Smooth, All Year Long⦠</a> 5203 </h2> 5204 <div class="post-entry"> 5205 <div class="post-excerpt leading-tight"><p><img decoding="async" loading="lazy" class="alignleft size-full wp-image-2316" src="https://www.skintrends.com/w
5205p/wp-content/uploads/2021/05/contour-blog-photo-2.jpg" alt="" width="165" height="165" /> Itâs that time of year…shorts, dresses and bathing suit season! Maybe youâve been keeping up with your New Yearâs resolution of a new diet or workout routine⦠Maybe you havenât changed a thing, but youâre ready to do something, right? Summer is a great time to look into amazing and effective body products for firming, smoothing and contouring. Letâs talk about the best products to use and why theyâre so good!</p> 5206</p> 5207<p> <a class="read-more" href="https://www.skintrends.com/blog/body-contouring-be-slim-and-smooth-all-year-long/">Continue reading â</a></p></div> 5208 </div> 5209 <div class="post-meta"> 5210 <div class="post-categories post-meta-item"> 5211 <strong>Categories:</strong> 5212 <a href="https://www.skintrends.com/blog/category/skin-care-products/">Skin Care Products</a> </div> 5213 <div class="post-tags post-meta-item"> 5214 <strong>Tags:</strong> <a href="https://www.skintrends.com/blog/tag/body-contouring-products/">body contouring products</a>, <a href="https://www.skintrends.com/blog/tag/body-products/">body products</a>, <a href="https://www.skintrends.com/blog/tag/cellulite-products/">cellulite products</a> & <a href="https://www.skintrends.com/blog/tag/stretch-mark-products/">stretch mark products</a> </div> 5215 <div class="post-date post-meta-item"> 5216 <strong>Posted On:</strong> 5217 May 21 2021 </div> 5218 <div class="post-user post-meta-item"> 5219 <strong>Posted By:</strong> 5220 <a href="https://www.skintrends.com/blog/author/admin/"> 5221 Skin Trends </a> 5222 </div> 5223 </div> 5224 </div> 5225 </li> 5226 <li class="item"> 5227 <div class="post-list-item"> 5228 <h2 class="mt-6 mb-5"> 5229 <a class="text-[22px] link-purple" href="https://www.skintrends.com/blog/dont-give-your-skin-the-winter-cold-shoulder-it-may-be-time-to-boost-your-routine/" 5230 title="Donât give your skin the winter cold shoulder! It may be time to âBoostâ your routine."> 5231 Donât give your skin the winter cold shoulder! It may be time to âBoostâ your routine. </a> 5232 </h2> 5233 <div class="post-entry"> 5234 <div class="post-excerpt leading-tight"><p><img decoding="async" loading="lazy" class="alignleft size-full wp-image-2316" src="https://www.skintrends.com/wp/wp-content/uploads/2020/12/Blog-Boosters-1.jpg" alt="" width="165" height="165" />Thereâs no doubt that winter brings about many changes in our daily routines. Skincare should make the list, too! You donât have to stray from your favorite moisturizer, but you likely need a partner for âold faithfulâ. </p> 5235<p> <a class="read-more" href="https://www.skintrends.com/blog/dont-give-your-skin-the-winter-cold-shoulder-it-may-be-time-to-boost-your-routine/">Continue reading â</a></p></div> 5236 </div> 5237 <div class="post-meta"> 5238 <div class="post-categories post-meta-item"> 5239 <strong>Categories:</strong> 5240 <a href="https://www.skintrends.com/blog/category/skin-care-tips-and-techniques/">Skin Care Tips</a>, <a href="https://www.skintrends.com/blog/category/skin-care-products/">Skin Care Products</a> & <a href="https://www.skintrends.com/blog/category/cosmetic-products/">Cosmetic Products</a> </div> 5241 <div class="post-tags post-meta-item"> 5242 <strong>Tags:</strong> <a href="https://www.skintrends.com/blog/tag/skin-hydration/">skin hydration</a>, <a href="https://www.skintrends.com/blog/tag/winter-dry-skin/">winter dry skin</a>, <a href="https://www.skintrends.com/blog/tag/serum-boosters-italian-skincare/">serum boosters Italian skincare</a> & <a href="https://www.skintrends.com/blog/tag/serum-boosters/">serum boosters</a> </div> 5243 <div class="post-date post-meta-item"> 5244 <strong>Posted On:</strong> 5245 December 11 2020 </div> 5246 <div class="post-user post-meta-item"> 5247 <strong>Posted By:</strong> 5248 <a href="https://www.skintrends.com/blog/author/admin/"> 5249 Skin Trends </a> 5250 </div> 5251 </div> 5252 </div> 5253 </li> 5254 <li class="item"> 5255 <div class="post-list-item"> 5256 <h2 class="mt-6 mb-5"> 5257 <a class="text-[22px] link-purple" href="https://www.skintrends.com/blog/how-hormones-affect-the-skin-during-your-period/" 5258 title="How hormones affect the skin during your period"> 5259 How hormones affect the skin during your period </a> 5260 </h2> 5261 <div class="post-entry"> 5262 <div class="post-excerpt leading-tight"><p><img decoding="async" loading="lazy" class="size-full wp-image-2289 alignleft" src="https://www.skintrends.com/w
5262p/wp-content/uploads/2020/09/blog-hormones-e1601404221638.jpg" alt="" width="125" height="125" />Your skin is ever changing. Itâs important to know that your skin will always change, whether due to aging, the climate, diet, stress, and yes, even your period. There will never be a ânormalâ state for your skin. Your hormones affect the skin during your period, which ultimately influences how you feel and look.</p> 5263<p> <a class="read-more" href="https://www.skintrends.com/blog/how-hormones-affect-the-skin-during-your-period/">Continue reading â</a></p></div> 5264 </div> 5265 <div class="post-meta"> 5266 <div class="post-categories post-meta-item"> 5267 <strong>Categories:</strong> 5268 <a href="https://www.skintrends.com/blog/category/skin-care-tips-and-techniques/">Skin Care Tips</a> & <a href="https://www.skintrends.com/blog/category/skin-care-products/">Skin Care Products</a> </div> 5269 <div class="post-tags post-meta-item"> 5270 <strong>Tags:</strong> <a href="https://www.skintrends.com/blog/tag/hormonal-acne/">hormonal acne</a> & <a href="https://www.skintrends.com/blog/tag/hormonal-skin/">hormonal skin</a> </div> 5271 <div class="post-date post-meta-item"> 5272 <strong>Posted On:</strong> 5273 September 29 2020 </div> 5274 <div class="post-user post-meta-item"> 5275 <strong>Posted By:</strong> 5276 <a href="https://www.skintrends.com/blog/author/alexis/"> 5277 Alexis </a> 5278 </div> 5279 </div> 5280 </div> 5281 </li> 5282 <li class="item"> 5283 <div class="post-list-item"> 5284 <h2 class="mt-6 mb-5"> 5285 <a class="text-[22px] link-purple" href="https://www.skintrends.com/blog/facial-skin-cleansers-types-purposes-and-benefits/" 5286 title="Facial Skin Cleansers: Types, Purposes and Benefits"> 5287 Facial Skin Cleansers: Types, Purposes and Benefits </a> 5288 </h2> 5289 <div class="post-entry"> 5290 <div class="post-excerpt leading-tight"><p><img decoding="async" loading="lazy" class="size-full wp-image-2284 alignleft" src="https://www.skintrends.com/wp/wp-content/uploads/2020/09/blog-cleanser.jpg" alt="" width="165" height="165" />Cleansing is an essential part of your daily skin regimen. Removing makeup, dirt, sweat, oil and sunscreen is important because it allows the skin to repair and renew itself. These days there are many cleansers on the market that help you achieve your cleansing goals. In this weekâs blog, we will be discussing the different types of cleansers.</p> 5291<p> <a class="read-more" href="https://www.skintrends.com/blog/facial-skin-cleansers-types-purposes-and-benefits/">Continue reading â</a></p></div> 5292 </div> 5293 <div class="post-meta"> 5294 <div class="post-categories post-meta-item"> 5295 <strong>Categories:</strong> 5296 <a href="https://www.skintrends.com/blog/category/skin-care-products/">Skin Care Products</a> </div> 5297 <div class="post-tags post-meta-item"> 5298 <strong>Tags:</strong> <a href="https://www.skintrends.com/blog/tag/face-wash/">face wash</a>, <a href="https://www.skintrends.com/blog/tag/facial-cleanser/">facial cleanser</a> & <a href="https://www.skintrends.com/blog/tag/types-of-face-cleansers/">types of face cleansers</a> </div> 5299 <div class="post-date post-meta-item"> 5300 <strong>Posted On:</strong> 5301 September 22 2020 </div> 5302 <div class="post-user post-meta-item"> 5303 <strong>Posted By:</strong> 5304 <a href="https://www.skintrends.com/blog/author/alexis/"> 5305 Alexis </a> 5306 </div> 5307 </div> 5308 </div> 5309 </li> 5310 <li class="item"> 5311 <div class="post-list-item"> 5312 <h2 class="mt-6 mb-5"> 5313 <a class="text-[22px] link-purple" href="https://www.skintrends.com/blog/all-you-need-to-know-about-body-contouring-products/" 5314 title="All you need to know about Body Contouring Products"> 5315 All you need to know about Body Contouring Products </a> 5316 </h2> 5317 <div class="post-entry"> 5318 <div class="post-excerpt leading-tight"><p><img decoding="async" loading="lazy" class="size-full wp-image-2259 alignleft" src="https://www.skintrends.com/w
5318p/wp-content/uploads/2020/08/blog-contour.png" alt="" width="128" height="128" />While diet and exercise are the best way to slim down and tone your body, there are also many great products on the market that can help stimulate cellulite turnover. Thereâs great benefits to using body contouring products as theyâre painless, non-invasive and there is absolutely no downtime after using them. If youâve ever been curious to learn more about them, nowâs your chance! </p> 5319<p> <a class="read-more" href="https://www.skintrends.com/blog/all-you-need-to-know-about-body-contouring-products/">Continue reading â</a></p></div> 5320 </div> 5321 <div class="post-meta"> 5322 <div class="post-categories post-meta-item"> 5323 <strong>Categories:</strong> 5324 <a href="https://www.skintrends.com/blog/category/skin-care-products/">Skin Care Products</a> & <a href="https://www.skintrends.com/blog/category/spa-and-body-products/">Spa and Body Products</a> </div> 5325 <div class="post-tags post-meta-item"> 5326 <strong>Tags:</strong> <a href="https://www.skintrends.com/blog/tag/cellulite/">cellulite</a>, <a href="https://www.skintrends.com/blog/tag/body-contouring/">body contouring</a> & <a href="https://www.skintrends.com/blog/tag/beach-bdy/">beach bdy</a> </div> 5327 <div class="post-date post-meta-item"> 5328 <strong>Posted On:</strong> 5329 August 26 2020 </div> 5330 <div class="post-user post-meta-item"> 5331 <strong>Posted By:</strong> 5332 <a href="https://www.skintrends.com/blog/author/alexis/"> 5333 Alexis </a> 5334 </div> 5335 </div> 5336 </div> 5337 </li> 5338 <li class="item"> 5339 <div class="post-list-item"> 5340 <h2 class="mt-6 mb-5"> 5341 <a class="text-[22px] link-purple" href="https://www.skintrends.com/blog/summer-skincare-for-a-safer-tan-and-great-looking-skin/" 5342 title="Summer Skincare for a Safer tan and great looking skin"> 5343 Summer Skincare for a Safer tan and great looking skin </a> 5344 </h2> 5345 <div class="post-entry"> 5346 <div class="post-excerpt leading-tight"><p><img decoding="async" loading="lazy" class="size-full wp-image-2250 alignleft" src="https://www.skintrends.com/wp/wp-content/uploads/2020/08/summer-body-blog-small.jpg" alt="" width="165" height="165" />When it comes to summer skincare, itâs about a head-to-toe approach. In our latest blog, weâve focused on summer skincare for the face, but weâre not stopping there! Our skin is our bodyâs largest organ and it must be taken care of, as such. Weâve picked out some of our beloved summer skincare for you⦠so, read on and pick out your new favorites! </p> 5347<p> <a class="read-more" href="https://www.skintrends.com/blog/summer-skincare-for-a-safer-tan-and-great-looking-skin/">Continue reading â</a></p></div> 5348 </div> 5349 <div class="post-meta"> 5350 <div class="post-categories post-meta-item"> 5351 <strong>Categories:</strong> 5352 <a href="https://www.skintrends.com/blog/category/skin-care-products/">Skin Care Products</a> </div> 5353 <div class="post-tags post-meta-item"> 5354 <strong>Tags:</strong> <a href="https://www.skintrends.com/blog/tag/sunscreen/">sunscreen</a>, <a href="https://www.skintrends.com/blog/tag/tanning/">tanning</a>, <a href="https://www.skintrends.com/blog/tag/bronzing/">bronzing</a> & <a href="https://www.skintrends.com/blog/tag/sunburn/">sunburn</a> </div> 5355 <div class="post-date post-meta-item"> 5356 <strong>Posted On:</strong> 5357 August 11 2020 </div> 5358 <div class="post-user post-meta-item"> 5359 <strong>Posted By:</strong> 5360 <a href="https://www.skintrends.com/blog/author/alexis/"> 5361 Alexis </a> 5362 </div> 5363 </div> 5364 </div> 5365 </li> 5366 <li class="item"> 5367 <div class="post-list-item"> 5368 <h2 class="mt-6 mb-5"> 5369 <a class="text-[22px] link-purple" href="https://www.skintrends.com/blog/summer-skincare/" 5370 title="Summer Skincare"> 5371 Summer Skincare </a> 5372 </h2> 5373 <div class="post-entry"> 5374 <div class="post-excerpt leading-tight"><p><img decoding="async" loading="lazy" class="size-full wp-image-2245 alignleft" src="https://www.skintrends.com/w
5374p/wp-content/uploads/2020/08/Summer-blog-Small.jpg" alt="" width="165" height="165" />Itâs summer, so nowâs the perfect time to bust out those fuzzy sweaters and layer our best winter coats. Wait, that doesnât sound right, isnât summer all about shorts and lighter clothing? In the same way that thereâs a definite change between our summer and winter attire, there should also be an essential change between our summer and winter skincare.</p> 5375<p> <a class="read-more" href="https://www.skintrends.com/blog/summer-skincare/">Continue reading â</a></p></div> 5376 </div> 5377 <div class="post-meta"> 5378 <div class="post-categories post-meta-item"> 5379 <strong>Categories:</strong> 5380 <a href="https://www.skintrends.com/blog/category/skin-care-products/">Skin Care Products</a> </div> 5381 <div class="post-tags post-meta-item"> 5382 <strong>Tags:</strong> <a href="https://www.skintrends.com/blog/tag/summer-skincare/">summer skincare</a> & <a href="https://www.skintrends.com/blog/tag/hyaluronic/">hyaluronic</a> </div> 5383 <div class="post-date post-meta-item"> 5384 <strong>Posted On:</strong> 5385 August 4 2020 </div> 5386 <div class="post-user post-meta-item"> 5387 <strong>Posted By:</strong> 5388 <a href="https://www.skintrends.com/blog/author/alexis/"> 5389 Alexis </a> 5390 </div> 5391 </div> 5392 </div> 5393 </li> 5394 <li class="item"> 5395 <div class="post-list-item"> 5396 <h2 class="mt-6 mb-5"> 5397 <a class="text-[22px] link-purple" href="https://www.skintrends.com/blog/why-did-the-sunscreen-i-love-change-its-ingredients/" 5398 title="Why Did the Sunscreen I Love change itâs ingredients?"> 5399 Why Did the Sunscreen I Love change itâs ingredients? </a> 5400 </h2> 5401 <div class="post-entry"> 5402 <div class="post-excerpt leading-tight"><p><img decoding="async" loading="lazy" class="size-full wp-image-2101 alignleft" src="https://www.skintrends.com/wp/wp-content/uploads/2020/05/unnamed-2-e1590603771670.jpg" alt="" width="125" height="125" />If youâve recently searched on <a href="https://www.skintrends.com/"><strong>SkinTrends.com</strong></a> for your favorite sunscreen product, only to notice a ânew formulaâ sticker, donât fret! Thereâs a good reason for the formula change.</p> 5403<p> <a class="read-more" href="https://www.skintrends.com/blog/why-did-the-sunscreen-i-love-change-its-ingredients/">Continue reading â</a></p></div> 5404 </div> 5405 <div class="post-meta"> 5406 <div class="post-categories post-meta-item"> 5407 <strong>Categories:</strong> 5408 <a href="https://www.skintrends.com/blog/category/skin-care-products/">Skin Care Products</a> </div> 5409 <div class="post-tags post-meta-item"> 5410 <strong>Tags:</strong> <a href="https://www.skintrends.com/blog/tag/pca-skin/">pca skin</a>, <a href="https://www.skintrends.com/blog/tag/image-skincare/">image skincare</a>, <a href="https://www.skintrends.com/blog/tag/spf/">spf</a> & <a href="https://www.skintrends.com/blog/tag/sunscreen/">sunscreen</a> </div> 5411 <div class="post-date post-meta-item"> 5412 <strong>Posted On:</strong> 5413 May 28 2020 </div> 5414 <div class="post-user post-meta-item"> 5415 <strong>Posted By:</strong> 5416 <a href="https://www.skintrends.com/blog/author/alexis/"> 5417 Alexis </a> 5418 </div> 5419 </div> 5420 </div> 5421 </li> 5422 <li class="item"> 5423 <div class="post-list-item"> 5424 <h2 class="mt-6 mb-5"> 5425 <a class="text-[22px] link-purple" href="https://www.skintrends.com/blog/protect-your-hands-from-sanitizer-use-frequent-washing/" 5426 title="Protect your hands from sanitizer use & frequent washing"> 5427 Protect your hands from sanitizer use & frequent washing </a> 5428 </h2> 5429 <div class="post-entry"> 5430 <div class="post-excerpt leading-tight"><p><img decoding="async" loading="lazy" class=" wp-image-2096 alignleft" src="https://www.skintrends.com/w
5430p/wp-content/uploads/2020/05/Hanf-Blog-Large-300x300.jpg" alt="" width="125" height="125" /> Hand washing is critical to help stop the spread of COVID-19. The CDC currently recommends washing your hands as often as possible for at least 20 seconds at a time. This frequent washing of hands is necessary, but this essential requirement is causing an influx of dryness and even contact dermatitis. Dry, chapped skin appears with patches of red, scaly inflammation. Deep, painful cracks may also emerge causing itching or pain. This is because water and chemicals break down the skinâs natural barrier. Despite the possible negative effects on the skin, you should still continue to wash your hands.</p> 5431<p> <a class="read-more" href="https://www.skintrends.com/blog/protect-your-hands-from-sanitizer-use-frequent-washing/">Continue reading â</a></p></div> 5432 </div> 5433 <div class="post-meta"> 5434 <div class="post-categories post-meta-item"> 5435 <strong>Categories:</strong> 5436 <a href="https://www.skintrends.com/blog/category/spa-and-body-products/">Spa and Body Products</a> </div> 5437 <div class="post-tags post-meta-item"> 5438 <strong>Tags:</strong> <a href="https://www.skintrends.com/blog/tag/chapped-hands/">chapped hands</a>, <a href="https://www.skintrends.com/blog/tag/dry-hands/">dry hands</a>, <a href="https://www.skintrends.com/blog/tag/hand-sanitizer/">hand sanitizer</a> & <a href="https://www.skintrends.com/blog/tag/hand-washing/">hand washing</a> </div> 5439 <div class="post-date post-meta-item"> 5440 <strong>Posted On:</strong> 5441 May 27 2020 </div> 5442 <div class="post-user post-meta-item"> 5443 <strong>Posted By:</strong> 5444 <a href="https://www.skintrends.com/blog/author/alexis/"> 5445 Alexis </a> 5446 </div> 5447 </div> 5448 </div> 5449 </li> 5450 </ol> 5451 5452 <div class="toolbar-wrapper"> 5453 5454 <p class="flex order-3 col-span-2 text-base leading-5 text-gray-700 5455 toolbar-amount sm:order-2 md:order-3 lg:order-2 gap-x-1"> 5456 <span class="toolbar-number text-[#070605]"> 5457 Items 1 to 10 of 159 total </span> 5458 </p> 5459 5460 <div class="flex justify-center order-2 pagination-left"> 5461 <nav class="inline-flex items-center pages" aria-label="pagination"> 5462 <ol class="relative z-0 inline-flex items items-center pages-items"> 5463 <li class="item pages-item-previous text-[#ba6895] mr-2"> 5464 </li> 5465 5466 5467 5468 <li 5469 class="item -ml-px" 5470 aria-label="Page 1" 5471 > 5472 <a 5473 href="https://www.skintrends.com/blog/" 5474 class="page pages-active z-10 px-2 py-1" 5475 aria-current="page" 5476 > 5477 1 </a> 5478 </li> 5479 <li 5480 class="item -ml-px" 5481 aria-label="Page 2" 5482 > 5483 <a 5484 href="https://www.skintrends.com/blog/page/2/" 5485 class="page px-3 py-2 alink" 5486 title="Page 2" 5487 > 5488 2 </a> 5489 </li> 5490 <li 5491 class="item -ml-px" 5492 aria-label="Page 3" 5493 > 5494 <a 5495 href="https://www.skintrends.com/blog/page/3/" 5496 class="page px-3 py-2 alink" 5497 title="Page 3" 5498 > 5499 3 </a> 5500 </li> 5501 <li 5502 class="item -ml-px" 5503 aria-label="Page 4" 5504 > 5505 <a 5506 href="https://www.skintrends.com/blog/page/4/" 5507 class="page px-3 py-2 alink" 5508 title="Page 4" 5509 > 5510 4 </a> 5511 </li> 5512 <li 5513 class="item -ml-px" 5514 aria-label="Page 5" 5515 > 5516 <a 5517 href="https://www.skintrends.com/blog/page/5/" 5518 class="page px-3 py-2 alink" 5519 title="Page 5" 5520 > 5521 5 </a> 5522 </li> 5523 5524 <li class="item -ml-px"> 5525 <a 5526 href="https://www.skintrends.com/blog/page/10/" 5527 class="page next jump relative inline-flex items-center text-sm font-medium leading-5 bg-white transition duration-150 ease-in-out focus:z-10 focus:outline-none focus:border-primary-lighter focus:shadow-outline-blue active:bg-gray-100 active:text-gray-500 px-4 py-2 text-gray-700 alink" 5528 aria-label="Skip to page 10" 5529 >
5530 <span aria-label="Jump forward">...</span> 5531 </a> 5532 </li> 5533 5534 <li 5535 class="item -ml-px text-gray-500" 5536 aria-label="Page 16" 5537 title="Page 16" 5538 > 5539 <a 5540 href="https://www.skintrends.com/blog/page/16/" 5541 class="page last relative inline-flex items-center text-sm font-medium leading-5 bg-white transition duration-150 ease-in-out focus:z-10 focus:outline-none focus:border-primary-lighter focus:shadow-outline-blue active:bg-gray-100 active:text-gray-500 px-4 py-2 alink" 5542 > 5543 <span class="sr-only label">Page</span> 5544 <span class="text-base"> 5545 16 </span> 5546 </a> 5547 </li> 5548 5549 <li class="item pages-item-next text-[#ba6895] ml-2"> 5550 <a 5551 href="https://www.skintrends.com/blog/page/2/" 5552 class="action hover:text-purple-500 next" 5553 title="Next" 5554 > 5555 <span 5556 aria-label="Next" 5557 > 5558 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="20" height="20" role="img"> 5559 <path stroke-linecap="round" stroke-linejoin="round" d="M9 5l7 7-7 7"/> 5560</svg> 5561 </span> 5562 </a> 5563 </li> 5564 </ol> 5565 </nav> 5566 </div> 5567 5568 5569 5570 </div> 5571 5572 </div><section x-data="Object.assign({currentId: ''}, hyva.modal())" 5573 @delete-cart-popup.window="if($event.detail.id){currentId = $event.detail.id; show('dialog', $event)}" 5574> 5575 <div x-cloak x-bind="overlay('dialog')" 5576 x-spread="overlay('dialog')" 5577 class="fixed inset-0 bg-black bg-opacity-50 z-50"> 5578 <div class="fixed flex justify-center items-center text-left z-40 inset-0"> 5579 <div x-ref="dialog" role="dialog" aria-modal="true" 5580 aria-labelledby="outer-label" 5581 class="inline-block bg-white shadow-xl p-10 max-h-screen overflow-auto overscroll-y-contain"> 5582 <div class="outer-label">Are you sure you would like to remove this item from the shopping cart?</div> 5583 <div class="mt-10 flex justify-end"> 5584 <button @click.stop="hide" type="button" class="button-primary py-4 mr-4 text-lg text-gray-darker"> 5585 <span>Cancel</span> 5586 </button> 5587 <button x-focus-first 5588 @click.stop="$dispatch('delete-cart-item', {id: currentId}); hide()" 5589 type="button" 5590 aria-haspopup="dialog" 5591 class="btn-purple px-9 py-4 text-lg"> 5592 <span>OK</span> 5593 </button> 5594 </div> </div> 5595 </div> 5596 </div> 5597</section> 5598</div><aside class="sidebar sidebar-additional">
5599<script> 5600 function compareSidebarFetchHandler(postUrl, postHeaders, isSingleItem = true) { 5601 const messages = { 5602 "success": isSingleItem 5603 ? "You removed product Product from the comparison list" 5604 : "You removed all products from the comparison list", 5605 "warning": isSingleItem 5606 ? "Could not remove item from compare." 5607 : "Could not remove all item from compare.", 5608 } 5609 5610 return fetch(postUrl, postHeaders).then(function (response) { 5611 if (response.redirected) { 5612 window.location.href = response.url; 5613 } else if (response.ok) { 5614 return response.json(); 5615 } else { 5616 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 5617 [{ type: "warning", text: messages.warning }], 5000 5618 ); 5619 } 5620 }).then(function (response) { 5621 if (!response) return; 5622 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 5623 [{ 5624 type: (response.success) ? "success" : "error", 5625 text: (response.success) ? messages.success : response.error_message 5626 }], 5000 5627 ); 5628 let reloadCustomerDataEvent = new CustomEvent("reload-customer-section-data"); 5629 window.dispatchEvent(reloadCustomerDataEvent); 5630 }).catch(function (error) { 5631 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 5632 [{ type: "error", text: error }], 5000 5633 ); 5634 }); 5635 } 5636 5637 function initCompareOnCompareSidebar() { 5638 return { 5639 body: document.body, 5640 openModal: false, 5641 productId: null, 5642 confirmMessage:null, 5643 compareProducts: null, 5644 itemCount: 0, 5645 compareItems: {}, 5646 receiveCompareData: function (data) { 5647 if (data['compare-products']) { 5648 this.compareProducts = data['compare-products']; 5649 this.itemCount = this.compareProducts.count; 5650 this.compareItems = this.compareProducts.items; 5651 } 5652 }, 5653 removeFromCompare: function(productId) { 5654 const formKey = hyva.getFormKey(); 5655 const postUrl = BASE_URL + 'catalog/product_compare/remove/'; 5656 const body = "form_key=" + formKey + "&product=" + productId + "&uenc="
5656+ hyva.getUenc(); 5657 compareSidebarFetchHandler(postUrl, postHeaders(body)); 5658 }, 5659 clearCompare: function() { 5660 const formKey = hyva.getFormKey(); 5661 const postUrl = BASE_URL + 'catalog/product_compare/clear/'; 5662 const body = "form_key=" + formKey + "&uenc=" + hyva.getUenc(); 5663 compareSidebarFetchHandler(postUrl, postHeaders(body), isSingleItem = false); 5664 }, 5665 showModal: function (productId = null) { 5666 this.openModal = true; 5667 this.body.classList.toggle('overflow-hidden', this.openModal); 5668 if (productId) { 5669 this.confirmMessage = "Are you sure you want to remove this item from your Compare Products list?"; 5670 this.productId = productId; 5671 }else { 5672 this.confirmMessage = "Are you sure you want to remove all items from your Compare Products list?"; 5673 } 5674 }, 5675 hiddenModal: function () { 5676 this.openModal = false; 5677 this.productId = null; 5678 this.body.classList.toggle('overflow-hidden', this.openModal); 5679 }, 5680 confirmModal: function () { 5681 if (this.productId) { 5682 this.removeFromCompare(this.productId); 5683 }else { 5684 this.clearCompare(); 5685 } 5686 this.hiddenModal(); 5687 } 5688 } 5689 } 5690 5691 function postHeaders(body) { 5692 return { 5693 "headers": { 5694 "content-type": "application/x-www-form-urlencoded; charset=UTF-8", 5695 }, 5696 "body": body, 5697 "method": "POST", 5698 "mode": "cors", 5699 "credentials": "include" 5700 }; 5701 } 5702</script>
5702 5703 5704<div x-data="initCompareOnCompareSidebar()" 5705 @private-content-loaded.window="receiveCompareData($event.detail.data)" 5706 class="sidebar-block compare-widget pt-5"> 5707 <div class="flex justify-between items-baseline font-bold"> 5708 <span class="block title text-lg"> 5709 Compare Products </span> 5710 <template x-if="itemCount"> 5711 <span @click.prevent="showModal()" 5712 class="text-xs text-gray-darker uppercase" 5713 title="Clear"> 5714 Clear </span> 5715 </template> 5716 </div> 5717 <div :class="{ 'hidden': (itemCount > 0) }">You have no items to compare.</div> 5718 <template x-if="itemCount"> 5719 <ul class="my-4"> 5720 <template x-for="product in compareItems"> 5721 <li class="flex justify-between compare-item items-center 5722 mb-2 text-gray-darker text-xs font-bold uppercase hover:text-purple"> 5723 <span class="whitespace-nowrap overflow-hidden overflow-ellipsis tracking-wide pl-2"> 5724 <a :href="product.product_url" 5725 x-html="product.name"> 5726 </a> 5727 </span> 5728 <span 5729 @click.prevent="showModal(product.id)" 5730 aria-label="Delete" 5731 class="p-1 inline-flex flex-shrink-0 items-center justify-center text-[#ba6895] ml-2" 5732 title="Delete"> 5733 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="15" height="15" role="img"> 5734 <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/> 5735</svg> 5736 </span> 5737 </li> 5738 </template> 5739 <a href="https://www.skintrends.com/catalog/product_compare/index/" 5740 title="Compare" 5741 class="alink group flex items-center text-base font-bold"> 5742 Compare <span class="pl-1 group-hover:translate-x-1 transition-all duration-[0.2s] ease-[ease-in-out]"> 5743 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="10" height="10" role="img"> 5744 <path stroke-linecap="round" stroke-linejoin="round" d="M9 5l7 7-7 7"/> 5745</svg> 5746 </span> 5747 </a> 5748 </ul> 5749 </template> 5750 <template x-if="openModal"> 5751 <div class="relative z-50" aria-labelledby="modal-title" role="dialog" aria-modal="true"> 5752 <div class="fixed inset-0 bg-white md:bg-opacity-75 transition-opacity"></div> 5753 <div class="fixed inset-0 z-20 overflow-y-auto"> 5754 <div class="flex min-h-full items-center justify-center text-center md:items-start"> 5755 <div class="modal-content md:max-w-[600px] relative transform 5756 overflow-hidden rounded-lg bg-white px-14 md:p-5 md:shadow-xl md:mt-[58px]"> 5757 <div class="invisible md:visible"> 5758 <button type="button" class="float-right" 5759 @click.prevent="hiddenModal()"> 5760 <span class="sr-only">Close</span> 5761 <svg class="close-icon h-5 w-5 text-[#ba6895]" fill="none"
5762 viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" aria-hidden="true"> 5763 <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12" /> 5764 </svg> 5765 </button> 5766 </div> 5767 <div class="text-center mt-8 px-1 md:text-left"> 5768 <p x-text="confirmMessage"></p> 5769 </div> 5770 <div class="mt-5 mx-4 md:mx-0 md:mt-4 md:flex md:flex-row-reverse"> 5771 <button type="button" 5772 class="btn btn-purple w-full md:w-auto justify-center py-3 px-8" 5773 @click.prevent="confirmModal()" 5774 > 5775 OK 5776 </button> 5777 <button type="button" 5778 class="text-gray-darker hover:text-[#070605] 5779 text-lg w-full md:w-auto mt-4 md:mt-0 md:mr-4 py-3" 5780 @click.prevent="hiddenModal()" 5781 > 5782 Cancel</button> 5783 </div> 5784 </div> 5785 </div> 5786 </div> 5787 </div> 5788 </template> 5789</div> 5790 5791
5791<script> 5792 function initWishlistOnWishlistSidebar() { 5793 function wishlistSidebarFetchHandler(body, postUrl, isRemoveAction = true) { 5794 const messages = { 5795 "success": isRemoveAction 5796 ? "\u00251\u0020has\u0020been\u0020removed\u0020from\u0020your\u0020Wish\u0020List" 5797 : "\u00251\u0020has\u0020been\u0020added\u0020to\u0020your\u0020Wish\u0020List.", 5798 "warning": isRemoveAction 5799 ? "Could\u0020not\u0020remove\u0020item\u0020from\u0020your\u0020Wish\u0020List" 5800 : "Could\u0020not\u0020add\u0020item\u0020to\u0020your\u0020Wish\u0020List.", 5801 } 5802 5803 const postHeaders = { 5804 "headers": { 5805 "content-type": "application/x-www-form-urlencoded; charset=UTF-8", 5806 }, 5807 body: body, 5808 "method": "POST", 5809 "mode": "cors", 5810 "credentials": "include" 5811 }; 5812 5813 return fetch(postUrl, postHeaders).then(function (response) { 5814 if (response.redirected) { 5815 window.location.href = response.url; 5816 } else if (response.ok) { 5817 return response.json(); 5818 } else { 5819 const message = { type: "warning", text: messages.warning }; 5820 window.dispatchMessages && window.dispatchMessages([message], 5000); 5821 } 5822 }).then(function (response) { 5823 if (!response) return; 5824 const message = { 5825 type: (response.success) ? "success" : "error", 5826 text: (response.success) ? messages.success : response.error_message 5827 } 5828 window.dispatchMessages && window.dispatchMessages([message], 5000); 5829 window.dispatchEvent(new CustomEvent("reload-customer-section-data")); 5830 }).catch(function (error) { 5831 const message = { type: "error", text: error }; 5832 window.dispatchMessages && window.dispatchMessages([message], 5000); 5833 }); 5834 } 5835 5836 return { 5837 wishlistProducts: null, 5838 itemCount: 0, 5839 wishlistCountLabel: null, 5840 wishlistItems: {}, 5841 receiveWishlistData: function (data) { 5842 if (data['wishlist']) { 5843 this.wishlistProducts = data['wishlist']; 5844 this.wishlistCountLabel = '(' + this.wishlistProducts.counter + ')'; 5845 this.itemCount = this.wishlistProducts.items.length; 5846 this.wishlistItems = this.wishlistProducts.items; 5847 } 5848 }, 5849 addToCart: function (json) { 5850 const obj = JSON.parse(json); 5851 const postUrl = obj.action; 5852 const body = "form_key=" + hyva.getFormKey() + 5853 "&item=" + obj.data.item + 5854 "&qty=" + obj.data.qty + 5855 "&uenc=" + hyva.getUenc(); 5856 wishlistSidebarFetchHandler(body, postUrl, /* isRemoveAction */ false); 5857 }, 5858 removeFromWishlist: function(json) { 5859 const obj = JSON.parse(json); 5860 const postUrl = obj.action; 5861 const body = "form_key=" + hyva.getFormKey() + "&item=" + obj.data.item+"&uenc=" + hyva.getUenc(); 5862 wishlistSidebarFetchHandler(body, postUrl); 5863 } 5864 } 5865 } 5866 5867 </script>
5867 5868 5869 <div x-data="initWishlistOnWishlistSidebar()" 5870 @private-content-loaded.window="receiveWishlistData($event.detail.data)" 5871 class="sidebar-block wishlist-widget mt-8"> 5872 <div class="pt-5"> 5873 <strong class="font-bold text-lg"> 5874 My Wish List </strong> 5875 </div> 5876 <div :class="{ 'hidden': (itemCount > 0) }">You have no items in your wish list.</div> 5877 <template x-if="itemCount"> 5878 <ul class="my-4"> 5879 <template x-for="product in wishlistItems"> 5880 <li class="flex mb-4"> 5881 <a :href="product.product_url" 5882 :title="product.product_name" 5883 class="block w-20 h-20 flex-shrink-0 mr-2"> 5884 <img :src="product.image.src" 5885 :alt="product.product_name" loading="lazy"> 5886 </a> 5887 <div class="product-item-details text-base leading-6"> 5888 <a :href="product.product_url" 5889 class="product-item-name font-normal text-gray-darker hover:text-purple overflow-hidden"> 5890 <span x-html="product.product_name"></span> 5891 </a> 5892 <div class="font-bold" x-html="product.product_price"></div> 5893 </div> 5894 </li> 5895 </template> 5896 <a href="https://www.skintrends.com/wishlist/" 5897 title="Go to Wish List" 5898 class="flex items-center text-base font-bold alink group"> 5899 Go to Wish List <span class="pl-1 group-hover:translate-x-1 transition-all duration-[0.2s] ease-[ease-in-out]"> 5900 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="10" height="10" role="img"> 5901 <path stroke-linecap="round" stroke-linejoin="round" d="M9 5l7 7-7 7"/> 5902</svg> 5903 </span> 5904 </a> 5905 </ul> 5906 </template> 5907 </div> 5908 5909<div 5910 class="ambanners ambanner-1" 5911 data-position="1" 5912 data-bannerid="" 5913 data-role="amasty-banner-container" 5914></div> 5915</aside></div></main><div x-data="PasswordResetHelp()" 5916 x-bind="eventListeners" x-cloak class="PasswordResetHelp md:max-lg:flex"> 5917 <template x-if="openModal"> 5918 <div class="relative z-[99999]" aria-labelledby="modal-title" role="dialog" aria-modal="true"> 5919 <div class="fixed inset-0 bg-white md:bg-opacity-75 transition-opacity"></div> 5920 <div class="fixed inset-0 overflow-y-auto"> 5921 <div class="w-full md:w-11/12 h-full md:h-auto md:shadow 5922 md:border mx-auto md:my-12 rounded-lg bg-white p-7 md:p-5"> 5923 <button type="button" class="float-right" :class="{'hidden': !openModal}" 5924 @click.prevent="showModal()"> 5925 <span class="sr-only">Close</span> 5926 <svg class="close-icon h-5 w-5 text-[#ba6895]" fill="none" viewBox="0 0 24 24" stroke-width="2" 5927 stroke="currentColor" aria-hidden="true"> 5928 <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/> 5929 </svg> 5930 </button> 5931 <div class="p-5 md:px-0 md:pt-10"> 5932 <template x-if="firstTimeOpen"> 5933 <iframe class="popup-video" src="https://player.vimeo.com/video/460506971" 5934 width="100%" height="420" frameborder="0" 5935 allow="fullscreen" allowfullscreen></iframe> 5936 </template> 5937 </div> 5938 <div class="px-5 md:px-0 md:mx-0 md:flex md:flex-row-reverse"> 5939 <button type="button" 5940 class="btn btn-purple w-full md:w-auto justify-center py-3 px-10 tracking-wider" 5941 @click.prevent="showModal()" 5942 > 5943 Close 5944 </button> 5945 </div> 5946 </div> 5947 </div> 5948 </div> 5949 </template> 5950</div>
5951<script> 5952 function PasswordResetHelp() { 5953 return { 5954 firstTimeOpen: false, 5955 openModal: false, 5956 5957 eventListeners: { 5958 ['@passResetHelp.window']() { 5959 this.showModal(); 5960 } 5961 }, 5962 5963 showModal() { 5964 this.firstTimeOpen = true; 5965 this.openModal = !this.openModal; 5966 document.body.classList.toggle('overflow-hidden', this.openModal); 5967 } 5968 } 5969 } 5970</script>
5970 5971 5972 5973 5974 5975<footer class="page-footer"><div class="footer-top-wrapper py-8 p-3"><div class="footer-top-items items-center justify-center container-st flex m-auto w-full"><div class="ignore-div" data-content-type="html" data-appearance="default" data-element="main" data-decoded="true"><div class="footer-item"> 5976<iframe class="lazysizes" data-src="//player.vimeo.com/video/382916630?title=0&byline=0" frameborder="0" width="100%" height="100%"></iframe> 5977</div> 5978<style> 5979 .ignore-div {display: contents;} 5980</style>
5981<script> 5982 function lazyLoadIframes() { 5983 const iframes = document.querySelectorAll('iframe.lazysizes'); 5984 5985 const observer = new IntersectionObserver((entries) => { 5986 entries.forEach((entry) => { 5987 if (entry.isIntersecting) { 5988 const iframe = entry.target; 5989 const storeSRC = iframe.dataset.src; 5990 if (storeSRC) { 5991 setTimeout(function(){ 5992 delete iframe.dataset.src; 5993 iframe.src = storeSRC; 5994 iframe.classList.remove('lazysizes'); 5995 }, 100); 5996 } 5997 observer.unobserve(iframe); 5998 } 5999 }); 6000 }); 6001 6002 iframes.forEach((iframe) => { 6003 observer.observe(iframe); 6004 }); 6005 } 6006 6007 window.addEventListener('load', lazyLoadIframes); 6008</script>
6008</div><div class="footer-item-subscribe footer-item py-10"><div class=""> 6009 <form class="form subscribe" 6010 action="https://www.skintrends.com/newsletter/subscriber/new/" 6011 method="post" 6012 x-data="Object.assign({}, initNewsletterForm($el), hyva.formValidation($el))" 6013 x-defer="interact" 6014 @submit="submitForm()" 6015 x-init="setSubmitCallback()" 6016 id="newsletter-validate-detail"> 6017 <div class="mb-3 text-lg font-semibold md:font-medium title-font text-center"> 6018 Sign Up for Event Coupons by email </div> 6019 <fieldset class="field field-reserved flex flex-wrap justify-center gap-2 md:justify-start relative"> 6020 <label for="newsletter-subscribe" class="sr-only"> 6021 Email Address </label> 6022 <input name="email" 6023 type="email" 6024 required 6025 id="newsletter-subscribe" 6026 class="form-input inline-flex w-full" 6027 placeholder="Email Address"> 6028 <input name="form_key" type="hidden" value="hHYNuMT1BvCF79ZX" /> <button type="submit" class="inline-flex flex-shrink-0 ml-auto xl:mt-0 btn-primary absolute top-px 6029 w-16 rounded right-px p-3 justify-center" title="Go!" aria-label="Go!"> 6030 <svg xmlns="http://www.w3.org/2000/svg" height="1em" viewBox="0 0 448 512" fill="white"> 6031 <path d="M446.7 98.6l-67.6 318.8c-5.1 22.5-18.4 28.1-37.3 17.5l-103-75.9-49.7 47.8c-5.5 5.5-10.1 6032 10.1-20.7 10.1l7.4-104.9 190.9-172.5c8.3-7.4-1.8-11.5-12.9-4.1L117.8 284 16.2 6033 252.2c-22.1-6.9-22.5-22.1 4.6-32.7L418.2 66.4c18.4-6.9 34.5 4.1 28.5 32.2z"/> 6034 </svg> 6035 </button> 6036 </fieldset> 6037 <div> 6038 <template x-if="displayErrorMessage"> 6039 <p class="flex items-center text-red"> 6040 <span class="inline-block w-8 h-8 mr-3"> 6041 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="24" height="24" role="img"> 6042 <path stroke-linecap="round" stroke-linejoin="round" d="M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"/> 6043</svg> 6044 </span> 6045 <template x-for="errorMessage in errorMessages"> 6046 <span x-html="errorMessage"></span> 6047 </template> 6048 </p> 6049 </template> 6050 </div> 6051 </form> 6052 <div class="w-full"> 6053 </div> 6054
6054<script> 6055 function initNewsletterForm(el) { 6056 return { 6057 errors: 0, 6058 hasCaptchaToken: 0, 6059 displayErrorMessage: false, 6060 errorMessages: [], 6061 setErrorMessages(messages) { 6062 this.errorMessages = [messages] 6063 this.displayErrorMessage = this.errorMessages.length 6064 }, 6065 submitCallBack(event){ 6066 this.validate().then(()=>{ 6067 if(amRecaptchaModel && amRecaptchaModel.execute && typeof amRecaptchaModel.execute === "function"){ 6068 amRecaptchaModel.execute(event); 6069 } else this.submitForm(); 6070 }); 6071 }, 6072 setSubmitCallback(){ 6073 //Replace current listener 6074 this.$el.setAttribute('x-on:submit.prevent', 'submitCallBack($event)'); 6075 }, 6076 submitForm(){ 6077 // Do not rename $form, the variable is expected to be declared in the recaptcha output 6078 const $form = document.querySelector('#newsletter-validate-detail'); 6079 if (this.errors === 0) { 6080 $form.submit(); 6081 } 6082 } 6083 } 6084 } 6085 </script>
6085 6086</div> 6087<ul class="social-icons"> 6088 <li><a href="https://twitter.com/SkintrendsSpa" class="twitter"> 6089 <svg xmlns="http://www.w3.org/2000/svg" height="32" class="fill-purple" fill="#ba6895" viewBox="0 0 448 512"> 6090 <path 6091 d="M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zM351.3 199.3v0c0 86.7-66 186.6-186.6 186.6c-37.2 0-71.7-10.8-100.7-29.4c5.3 .6 10.4 .8 15.8 .8c30.7 0 58.9-10.4 81.4-28c-28.8-.6-53-19.5-61.3-45.5c10.1 1.5 19.2 1.5 29.6-1.2c-30-6.1-52.5-32.5-52.5-64.4v-.8c8.7 4.9 18.9 7.9 29.6 8.3c-9-6-16.4-14.1-21.5-23.6s-7.8-20.2-7.7-31c0-12.2 3.2-23.4 8.9-33.1c32.3 39.8 80.8 65.8 135.2 68.6c-9.3-44.5 24-80.6 64-80.6c18.9 0 35.9 7.9 47.9 20.7c14.8-2.8 29-8.3 41.6-15.8c-4.9 15.2-15.2 28-28.8 36.1c13.2-1.4 26-5.1 37.8-10.2c-8.9 13.1-20.1 24.7-32.9 34c.2 2.8 .2 5.7 .2 8.5z"/> 6092 </svg> 6093 </a></li> 6094 <li><a href="https://www.facebook.com/skintrendsdayspa" class="facebook"> 6095 <svg xmlns="http://www.w3.org/2000/svg" height="32" class="fill-purple" fill="#ba6895" viewBox="0 0 448 512"> 6096 <path 6097 d="M400 32H48A48 48 0 0 0 0 80v352a48 48 0 0 0 48 48h137.25V327.69h-63V256h63v-54.64c0-62.15 37-96.48 93.67-96.48 27.14 0 55.52 4.84 55.52 4.84v61h-31.27c-30.81 0-40.42 19.12-40.42 38.73V256h68.78l-11 71.69h-57.78V480H400a48 48 0 0 0 48-48V80a48 48 0 0 0-48-48z"/> 6098 </svg> 6099 </a></li> 6100 <li><a href="https://www.youtube.com/skintrends" class="youtube"> 6101 <svg xmlns="http://www.w3.org/2000/svg" height="32" class="fill-purple" fill="#ba6895" viewBox="0 0 448 512"> 6102 <path 6103 d="M186.8 202.1l95.2 54.1-95.2 54.1V202.1zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-42 176.3s0-59.6-7.6-88.2c-4.2-15.8-16.5-28.2-32.2-32.4C337.9 128 224 128 224 128s-113.9 0-142.2 7.7c-15.7 4.2-28 16.6-32.2 32.4-7.6 28.5-7.6 88.2-7.6 88.2s0 59.6 7.6 88.2c4.2 15.8 16.5 27.7 32.2 31.9C110.1 384 224 384 224 384s113.9 0 142.2-7.7c15.7-4.2 28-16.1 32.2-31.9 7.6-28.5 7.6-88.1 7.6-88.1z"/> 6104 </svg> 6105 </a></li> 6106 <li><a href=" https://www.instagram.com/skintrendsspa" class="instagram"> 6107 <svg xmlns="http://www.w3.org/2000/svg" height="32" class="fill-purple" fill="#ba6895" viewBox="0 0 448 512"> 6108 <path 6109 d="M224,202.66A53.34,53.34,0,1,0,277.36,256,53.38,53.38,0,0,0,224,202.66Zm124.71-41a54,54,0,0,0-30.41-30.41c-21-8.29-71-6.43-94.3-6.43s-73.25-1.93-94.31,6.43a54,54,0,0,0-30.41,30.41c-8.28,21-6.43,71.05-6.43,94.33S91,329.26,99.32,350.33a54,54,0,0,0,30.41,30.41c21,8.29,71,6.43,94.31,6.43s73.24,1.93,94.3-6.43a54,54,0,0,0,30.41-30.41c8.35-21,6.43-71.05,6.43-94.33S357.1,182.74,348.75,161.67ZM224,338a82,82,0,1,1,82-82A81.9,81.9,0,0,1,224,338Zm85.38-148.3a19.14,19.14,0,1,1,19.13-19.14A19.1,19.1,0,0,1,309.42,189.74ZM400,32H48A48,48,0,0,0,0,80V432a48,48,0,0,0,48,48H400a48,48,0,0,0,48-48V80A48,48,0,0,0,400,32ZM382.88,322c-1.29,25.63-7.14,48.34-25.85,67s-41.4,24.63-67,25.85c-26.41,1.49-105.59,1.49-132,0-25.63-1.29-48.26-7.15-67-25.85s-24.63-41.42-25.85-67c-1.49-26.42-1.49-105.61,0-132,1.29-25.63,7.07-48.34,25.85-67s41.47-24.56,67-25.78c26.41-1.49,105.59-1.49,132,0,25.63,1.29,48.33,7.15,67,25.85s24.63,41.42,25.85,67.05C384.37,216.44,384.37,295.56,382.88,322Z"/> 6110 </svg> 6111 </a></li> 6112</ul></div><div class="footer-item"> 6113 <ul class="contact-content"> 6114 <li> 6115 <svg xmlns="http://www.w3.org/2000/svg" height="1rem" fill="#ba6895" class="fill-purple inline-block"
6116 viewBox="0 0 384 512"> 6117 <path 6118 d="M97.333 506.966c-129.874-129.874-129.681-340.252 0-469.933 5.698-5.698 14.527-6.632 21.263-2.422l64.817 40.513a17.187 17.187 0 0 1 6.849 20.958l-32.408 81.021a17.188 17.188 0 0 1-17.669 10.719l-55.81-5.58c-21.051 58.261-20.612 122.471 0 179.515l55.811-5.581a17.188 17.188 0 0 1 17.669 10.719l32.408 81.022a17.188 17.188 0 0 1-6.849 20.958l-64.817 40.513a17.19 17.19 0 0 1-21.264-2.422zM247.126 95.473c11.832 20.047 11.832 45.008 0 65.055-3.95 6.693-13.108 7.959-18.718 2.581l-5.975-5.726c-3.911-3.748-4.793-9.622-2.261-14.41a32.063 32.063 0 0 0 0-29.945c-2.533-4.788-1.65-10.662 2.261-14.41l5.975-5.726c5.61-5.378 14.768-4.112 18.718 2.581zm91.787-91.187c60.14 71.604 60.092 175.882 0 247.428-4.474 5.327-12.53 5.746-17.552.933l-5.798-5.557c-4.56-4.371-4.977-11.529-.93-16.379 49.687-59.538 49.646-145.933 0-205.422-4.047-4.85-3.631-12.008.93-16.379l5.798-5.557c5.022-4.813 13.078-4.394 17.552.933zm-45.972 44.941c36.05 46.322 36.108 111.149 0 157.546-4.39 5.641-12.697 6.251-17.856 1.304l-5.818-5.579c-4.4-4.219-4.998-11.095-1.285-15.931 26.536-34.564 26.534-82.572 0-117.134-3.713-4.836-3.115-11.711 1.285-15.931l5.818-5.579c5.159-4.947 13.466-4.337 17.856 1.304z"/> 6119 </svg> 6120 <a href="tel:855-851-1100">855-851-1100</a> 6121 </li> 6122 <li> 6123 <svg xmlns="http://www.w3.org/2000/svg" height="1rem" fill="#ba6895" class="fill-purple inline-block"
6124 viewBox="0 0 512 512"> 6125 <path 6126 d="M121 32C91.6 32 66 52 58.9 80.5L1.9 308.4C.6 313.5 0 318.7 0 323.9V416c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V323.9c0-5.2-.6-10.4-1.9-15.5l-57-227.9C446 52 420.4 32 391 32H121zm0 64H391l48 192H387.8c-12.1 0-23.2 6.8-28.6 17.7l-14.3 28.6c-5.4 10.8-16.5 17.7-28.6 17.7H195.8c-12.1 0-23.2-6.8-28.6-17.7l-14.3-28.6c-5.4-10.8-16.5-17.7-28.6-17.7H73L121 96z"/> 6127 </svg> 6128 <a href="/cdn-cgi/l/email-protection#1675636562797b7364657364607f757356657d7f786264737872653875797b"><span>Email Us</span></a> 6129 </li> 6130 6131 6132 <li> 6133 <svg xmlns="http://www.w3.org/2000/svg" height="1rem" fill="#ba6895" class="fill-purple inline-block" 6134 viewBox="0 0 512 512"> 6135 <path 6136 d="M256 0a256 256 0 1 1 0 512A256 256 0 1 1 256 0zM232 120V256c0 8 4 15.5 10.7 20l96 64c11 7.4 25.9 4.4 33.3-6.7s4.4-25.9-6.7-33.3L280 243.2V120c0-13.3-10.7-24-24-24s-24 10.7-24 24z"/> 6137 </svg> 6138 <span>09 am - 09 pm EST M-F</span> 6139 </br> 6140 <span style="padding-left: 20px;">10 am - 03 pm EST SAT</span> 6141 6142 </li> 6143 </ul> 6144</div></div></div><div 6145 x-data="initSticky()" 6146 x-init="checkScroll()" 6147 @click.prevent="window.scrollTo({top: 0, behavior: 'smooth'})" 6148 @scroll.window="checkScroll()" 6149 :class="{'fixed bottom-24': !sticky, 'absolute -top-16': sticky}" 6150 class="btn-backtotop absolute bg-white bg-opacity-75 z-10 cursor-pointer 6151 hover:text-purple-500 hover:border-purple-500"> 6152 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" 6153 stroke-width="1.5" stroke="currentColor" class="w-4 h-4 md:w-8 md:h-8"> 6154 <path stroke-linecap="round" stroke-linejoin="round" d="M8.25 6.75L12 3m0 0l3.75 3.75M12 3v18" /> 6155 </svg> 6156</div>
vendor: 110 bytes, lines 6156-6158
6156 6157 6158<script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script>
6158<script> 6159 function initSticky() { 6160 return { 6161 sticky: true, 6162 isMobile: skintrendMediaScreen.match('mobile'), 6163 checkScroll() { 6164 const element = document.querySelector('.btn-backtotop'); 6165 const footer = document.querySelector('footer'); 6166 if (element) { 6167 const footerRect = footer.getBoundingClientRect(); 6168 const windowHeight = window.innerHeight || document.documentElement.clientHeight; 6169 this.sticky = footerRect.top <= windowHeight 6170 footer.classList.add('relative'); 6171 if (this.isMobile) { 6172 this.sticky = false; 6173 } 6174 } 6175 } 6176 } 6177 } 6178</script>
6178 6179<div class="footer content">
6179<script> 6180 addEventListener('DOMContentLoaded', () => { 6181 for (const [selector, label] of Object.entries({"aside.sidebar-main":"Sidebar Main","aside.sidebar-additional":"Sidebar Additional"})) { 6182 const target = document.querySelector(selector); 6183 target && target.setAttribute('aria-label', label); 6184 } 6185 }, {once: true}) 6186</script>
6186 6187<div class="body-font shadow"> 6188 <div class="bg-container-lighter"> 6189 <div class="container-st py-8 mx-auto"> 6190 <div id="footer-menu-links" class="md:flex md:flex-wrap order-first gap-y-16"> 6191 <div class="width-20-percent"> 6192 <div class="block typo-dark"> 6193 <div class="block-title" data-target="about"> 6194 <label for="accordion-about">About Skintrends</label> 6195 </div> 6196 <input type="checkbox" id="accordion-about"/> 6197 <div class="block-content" data-target="about"> 6198 <ul class="links"> 6199 <li><a title="What is Skintrends" href="https://www.skintrends.com/what-is-skintrends/">What is Skintrends?</a> 6200 </li> 6201 <li><a title="Who Are We" href="https://www.skintrends.com/who-are-we/">Who Are We?</a></li> 6202 <li><a title="Our Mission" href="https://www.skintrends.com/skintrendsmissionstatement/">Our Mission</a></li> 6203 <li><a title="Culture and Values" href="https://www.skintrends.com/culture-and-values/">Culture and Values</a></li> 6204 <li><a title="Careers" href="https://www.skintrends.com/career/">Careers</a></li> 6205 </ul> 6206 </div> 6207 </div> 6208</div> <div class="width-20-percent"> 6209 <div class="block typo-dark"> 6210 <div class="block-title" data-target="customer-service"> 6211 <label for="accordion-service">Customer Service</label> 6212 </div> 6213 <input type="checkbox" id="accordion-service"/> 6214 <div class="block-content" data-target="customer-service"> 6215 <ul class="links"> 6216 <li><a title="Contact Us" href="https://www.skintrends.com/contact/">Contact Us</a></li> 6217 <li><a title="How to Order" href="https://www.skintrends.com/how-to-place-an-order/">How to Order</a></li> 6218 <li><a title="Sales Order History" href="https://www.skintrends.com/sales/order/history/">Order Status / Tracking</a></li> 6219 <li><a title="Shipping Policy" href="https://www.skintrends.com/shipping-policy/">Shipping</a></li> 6220 <li><a title="Returns & Exchanges" href="https://www.skintrends.com/returns-exchanges-policy/">Returns / Exchanges</a></li> 6221 <li><a title="Reward Points Program" href="https://www.skintrends.com/skin-trends-reward-points-program/">Reward Points Program</a></li> 6222 <li><a title="Safe Shopping" href="https://www.skintrends.com/safe-shopping-experience/">Safe Shopping Experience</a></li> 6223 <li><a title="Customer Service FAQs" href="https://www.skintrends.com/faqs/">Customer Service FAQs</a></li> 6224 </ul> 6225 </div> 6226 </div> 6227</div> <div class="width-20-percent"> 6228 <div class="block typo-dark"> 6229 <div class="block-title" data-target="expert-help"> 6230 <label for="accordion-expert-help">Expert Help</label> 6231 </div> 6232 <input type="checkbox" id="accordion-expert-help"/> 6233 <div class="block-content" data-target="expert-help"> 6234 <ul class="links"> 6235 <li><a href="https://www.skintrends.com/expert-help/" title="Phone Consult / Expert Help">Phone Consult / Expert Help</a></li> 6236 <li><a href="https://www.skintrends.com/skincare/face/product-faqs.html/" title="Product FAQs">Product FAQs</a></li> 6237 <li><a href="https://www.skintrends.com/skintrends-faq/" title="Skin Care FAQs">Skin Care FAQs</a></li> 6238 <li><a href="https://www.skintrends.com/blog/" title="Skin Trends Blog">Skin Trends Blog</a></li> 6239 <li><a href="https://www.skintrends.com/7-simple-steps-to-gorgeous-skin/" title="7 Steps to Gorgeous Skin">7 Steps to Gorgeous Skin</a></li> 6240 <li><a href="https://www.skintrends.com/free-gift-with-purchase/" title="FREE Gift with Purchase">FREE Gift with Purchase</a></li> 6241 <li><a href="https://www.skintrends.com/samples/" title="FREE Samples">FREE Samples</a></li> 6242 <li><a href="https://www.skintrends.com/coupon-codes/" title="Coupon Codes">Coupon Codes</a></li> 6243 </ul> 6244 </div> 6245 </div> 6246</div> <div class="width-20-percent"> 6247 <div class="block typo-dark"> 6248 <div class="block-title" data-target="other"> 6249 <label for="accordion-other">Other</label> 6250 </div> 6251 <input type="checkbox" id="accordion-other"/> 6252 <div class="block-content" data-target="other"> 6253 <ul class="links"> 6254 <li><a title="Unauthorized Dealer Alert" href="https://www.skintrends.com/unauthorized-dealer-warning/">Unauthorized Dealer Alert</a></li> 6255 <li><a title="Product Use/Ingredient Cautions" href="https://www.skintrends.com/product-ingredient-cautions/">Product Use / Ingredient Cautions</a></li> 6256 <li><a title="Medical Advice Disclaimer" href="https://www.skintrends.com/medical-advice-disclaimer/">Medical Advice Disclaimer</a></li> 6257 <li><a title="Affiliate Program" href="https://www.skintrends.com/affiliate-program/">Affiliate Program</a></li> 6258 <li><a title="Accuracy of Content Disclaimer" href="https://www.skintrends.com/accuracy-content-disclaimer/">Accuracy of Content Disclaimer</a></li> 6259 <li><a title="Privacy Policy" href="https://www.skintrends.com/privacy-policy/">Privacy Policy</a></li> 6260 <li><a title="Terms of Service" href="https://www.skintrends.com/terms-of-service/">Terms of Service</a></li> 6261 </ul> 6262 </div> 6263 </div> 6264</div> </div> 6265 </div> 6266 </div> 6267 <div class="bg-container border-container"> 6268 <div class="container-st py-5 mx-auto items-center"> 6269 <div class="copyright"> 6270<div class="copyright-row"> 6271 <span> 6272 <a id="bbblink" style="padding: 0px; margin: 0px;
6272" class="ruhzbum" href="https://www.bbb.org/west-florida/business-reviews/skin-care/skin-trends-in-tampa-fl-90122027#bbbseal" title="Skin Trends, LLC, Skin Care, Tampa, FL" rel="nofollow"> 6273 <img style="padding: 0px; border: none;" id="bbblinkimg" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-amsrc="https://seal-westflorida.bbb.org/logo/ruhzbum/skin-trends-90122027.png" width="300" height="68" alt="Skin Trends, LLC, Skin Care, Tampa, FL" class=""> 6274 </a> 6275 </span> 6276 <span id="gts-container" class="skintrends-google-review" style="vertical-align: top;"> 6277 <div id="___ratingbadge_0" style="text-indent: 0px; margin: 0px; padding: 0px; background: transparent; border-style: none; float: none; line-height: normal; font-size: 1px; vertical-align: baseline; display: inline-block; width: 165px; height: 54px;"> 6278 <iframe ng-non-bindable="" frameborder="0" hspace="0" marginheight="0" marginwidth="0" scrolling="no" style="position: static; top: 0px; width: 165px; margin: 0px; border-style: none; display: block; left: 0px; visibility: visible; height: 54px;" tabindex="0" vspace="0" width="100%" id="I0_1589373801052" name="I0_1589373801052" src="https://www.google.com/shopping/customerreviews/badge?usegapi=1&merchant_id=10233102&hl=en_US&origin=https%3A%2F%2Fwww.skintrends.com&gsrc=3p&ic=1&jsh=m%3B%2F_%2Fscs%2Fapps-static%2F_%2Fjs%2Fk%3Doz.gapi.en_GB.TVMmU0ureXg.O%2Fam%3DwQE%2Fd%3D1%2Fct%3Dzgms%2Frs%3DAGLTcCNEZ47O4XPxvOHlE2OsKBWeCQxiEw%2Fm%3D__features__#_methods=onPlusOne%2C_ready%2C_close%2C_open%2C_resizeMe%2C_renderstart%2Concircled%2Cdrefresh%2Cerefresh&id=I0_1589373801052&_gfid=I0_1589373801052&parent=https%3A%2F%2Fwww.skintrends.com&pfname=&rpctoken=42263124" data-gapiattached="true" title="Google Customer Reviews"></iframe> 6279 </div> 6280 </span> 6281 6282
6282<script type="text/javascript">var bbbprotocol = (("https:" == document.location.protocol) ? "https://" : "http://"); 6283 (function () { 6284 var s = document.createElement('script'); 6285 s.src = bbbprotocol + 'seal-westflorida.bbb.org' + unescape('%2Flogo%2Fskin-trends-90122027.js'); 6286 s.type = 'text/javascript'; 6287 s.async = true; 6288 var st = document.getElementsByTagName('script'); 6289 st = st[st.length - 1]; 6290 var pt = st.parentNode; 6291 pt.insertBefore(s, pt.nextSibling); 6292 })();</script>
6292<script src="https://seal-westflorida.bbb.org/logo/skin-trends-90122027.js" type="text/javascript" async=""></script>
6292 6293 <span id="siteseal" style="position: relative;top: -34px;margin-left: 20px;"> 6294
6294<script async="" type="text/javascript" src="https://seal.godaddy.com/getSeal?sealID=UniM1HnZ6wnEo5C6NWVhsdHRPBgrzwSb1mpTXElCQ6v80cnw1iQ9uhLUnoy9"></script>
6294 6295 </span> 6296</div> 6297<div class="copyright-bottom"> 6298<p>Copyright © 2012-2025 Skintrends.com - Expert Service in Skincare® All Rights Reserved</p> 6299</div> 6300<style> 6301 a#bbblink.ruhzbam, a#bbblink.ruhzbum { 6302 display: inline-block; 6303 } 6304</style> 6305</div> </div> 6306 </div> 6307</div> 6308 6309<style> 6310 @media screen and (max-width: 767px) { 6311 .page-footer .block-title:after { 6312 border: solid #4e4e4e; 6313 border-width: 0px 2px 2px 0; 6314 display: inline-block; 6315 padding: 5px; 6316 transform: rotate(45deg); 6317 -webkit-transform: rotate(45deg); 6318 } 6319 } 6320</style>
6321<script> 6322 var footerLinkBlock = document.getElementById("footer-menu-links"); 6323 var btns = footerLinkBlock.getElementsByClassName("block-title"); 6324 for (var i = 0; i < btns.length; i++) { 6325 btns[i].addEventListener("click", function(e) { 6326 // set active class for parrent element 6327 e.target.parentElement.classList.toggle("active"); 6328 }); 6329 } 6330</script>
vendor: 1 bytes, line 6330
6330
6331<script> 6332 'use strict'; 6333 6334 function amBrandsPopup() { 6335 let cached = false; 6336 6337 const displayError = (error) => { 6338 console.error(error); 6339 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 6340 [{ 6341 type: "error", 6342 text: "Something\u0020went\u0020wrong.\u0020Please\u0020try\u0020again." 6343 }], 10000 6344 ); 6345 }; 6346 6347 let letters = [ 6348 "A","B","C","D", 6349 "E","F","G","H","I","J","K","L","M", 6350 "N","O","P","Q","R","S","T","U","V","W","X","Y","Z","#" 6351 ]; 6352 6353 return { 6354 hoverPanelActiveId: null, 6355 selectedLetter: null, 6356 items: [], 6357 letters: [], 6358 showCount: null, 6359 showFilter: null, 6360 showImages: true, 6361 showSearch: null, 6362 loading: false, 6363 label: 'Brands', 6364 isPopupEnabled: false, 6365 isTopMenuItemEnabled: false, 6366 cache: false, 6367 6368 initErrorMessages(errors) { 6369 const messages = []; 6370 for (let error in Object.keys(errors)) { 6371 messages.push({type: 'error', text: errors[error].message}); 6372 } 6373 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages(messages, 10000); 6374 }, 6375 6376 chooseLetter(letter) { 6377 this.selectedLetter = this.selectedLetter === letter ? null : letter; 6378 }, 6379 6380 getQuery() { 6381 return "query BrandsPopupQuery { ambrandlist(\n showCount: true\n displayZero: true\n ) {\n all_letters,\n items {\n alt\n brandId\n cnt\n image\n img\n label\n letter\n url\n }\n }\n storeConfig {\n amshopby_brand_general_brands_brands_popup,\n amshopby_brand_general_menu_item_label,\n amshopby_brand_general_brands_page,\n amshopby_brand_general_topmenu_enabled,\n amshopby_brand_general_brands_popup_config {\n show_images,\n display_zero,\n filter_display_all,\n image_width,\n image_height,\n show_filter,\n show_count\n }\n } }" }, 6382 6383 /** 6384 * Retrieve media url for given path 6385 * 6386 * @param path 6387 * @returns {string} 6388 */ 6389 getMediaUrl(path) { 6390 const isValidHttpUrl = (string) => { 6391 let url; 6392 try { 6393 url = new URL(string); 6394 } catch (_) { 6395 return false; 6396 } 6397 return url.protocol === "http:" || url.protocol === "https:"; 6398 } 6399 return `${(isValidHttpUrl(path) ? path : BASE_URL + path)}`; 6400 }, 6401 6402 popupInit() { 6403 this.loading = true; 6404 6405 if (cached) { 6406 this.loading = false; 6407 return; 6408 } 6409 6410 const req = this.sendRequest(); 6411 req.then(result => { 6412 if (result && result.errors) { 6413 this.initErrorMessages(result.errors); 6414 return; 6415 } 6416 6417 const data = result.data? result.data.ambrandlist : []; 6418 const mapper = this.settingsMapper(result) 6419 for (let config in mapper) { 6420 this[config] = mapper[config]; 6421 } 6422 6423 if (!this.filterDisplayAll) { 6424 letters = data.all_letters.split(','); 6425 } 6426 6427 const items = data.items.map(brand => { 6428 6429 brand.image = brand.image ? this.getMediaUrl(brand.image) : null; 6430 return brand; 6431 }); 6432 6433 this.letters = letters.map(letter => ({ 6434 letter: letter, 6435 brands: this.getLetterItems(items, letter), 6436 })); 6437 6438 this.items = this.letters.filter(row => row.brands && row.brands.length > 0); 6439 6440 cached = true; 6441 }).catch(displayError).finally(() => { 6442 this.loading = false;
6443 }); 6444 }, 6445 6446 /** 6447 * Get brands by letter 6448 * 6449 * @param result 6450 * @returns {{imageWidth: *, isTopMenuItemEnabled: *, showCount: *, displayAll: *, showFilter: *, showImages: *, isPopupEnabled: *, label: *, imageHeight: *, filterDisplayAll: *, brandsPage: *}} 6451 */ 6452 settingsMapper(result) { 6453 const config = result.data.storeConfig.amshopby_brand_general_brands_popup_config; 6454 return { 6455 showImages: config.show_images, 6456 showCount: config.show_count, 6457 showFilter: config.show_filter, 6458 imageWidth: config.image_width, 6459 imageHeight: config.image_height, 6460 filterDisplayAll: config.filter_display_all, 6461 displayAll: config.display_zero, 6462 isPopupEnabled: result.data.storeConfig.amshopby_brand_general_brands_brands_popup, 6463 label: result.data.storeConfig.amshopby_brand_general_menu_item_label, 6464 isTopMenuItemEnabled: result.data.storeConfig.amshopby_brand_general_topmenu_enabled, 6465 brandsPage: result.data.storeConfig.amshopby_brand_general_brands_page, 6466 } 6467 }, 6468 6469 /** 6470 * Send request to graphql 6471 * 6472 * @returns {Promise<any>} 6473 */ 6474 sendRequest() { 6475 return fetch('https://www.skintrends.com/graphql', { 6476 method: 'POST', 6477 headers: { 6478 'Content-Type': 'application/json', 6479 'Store': 'default' 6480 }, 6481 credentials: 'include', 6482 body: JSON.stringify({query: this.getQuery(), variables: {}}) 6483 }).then( 6484 response => response.json() 6485 ); 6486 }, 6487 6488 /** 6489 * Get brands by letter 6490 * 6491 * @param items 6492 * @param letter 6493 * @returns {*} 6494 */ 6495 getLetterItems(items, letter) { 6496 return items.filter(row => row.letter === letter); 6497 } 6498 } 6499 } 6500</script>
6500 6501</div></footer> 6502 6503
6504<script> 6505 function initBssSeoToolbar() { 6506 6507 function getUrlVars() { 6508 let vars = [], hash; 6509 let hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&'); 6510 for(let i = 0; i < hashes.length; i++) 6511 { 6512 hash = hashes[i].split('='); 6513 vars.push(hash[0]); 6514 vars[hash[0]] = hash[1]; 6515 } 6516 return vars; 6517 } 6518 6519 function createCookie(name, value, days) { 6520 let expires; 6521 if (days) { 6522 let date = new Date(); 6523 date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000)); 6524 expires = "; expires=" + date.toGMTString(); 6525 } 6526 else { 6527 expires = ""; 6528 } 6529 6530 document.cookie = name + "=" + value + expires + "; path=/"; 6531 } 6532 6533 function getCookie(cookie_name) { 6534 let cookie_value = ""; 6535 if (document.cookie.length > 0) { 6536 let c_start = document.cookie.indexOf(cookie_name + "="); 6537 if (c_start !== -1) { 6538 c_start = c_start + cookie_name.length + 1; 6539 let c_end = document.cookie.indexOf(";", c_start); 6540 if (c_end === -1) { 6541 c_end = document.cookie.length; 6542 } 6543 cookie_value = unescape(document.cookie.substring(c_start, c_end)); 6544 } 6545 } 6546 return cookie_value; 6547 } 6548 6549 function renderToolbar(DOMToolbar) { 6550 document.querySelector('#bss_seo_toolbar').innerHTML = DOMToolbar; 6551 document.querySelector('#bss_seo_toolbar').classList.remove('hidden'); 6552 } 6553 6554 return { 6555 statusHide: false, 6556 urlEdit: '', 6557 dataToolbar: { 6558 url: '', 6559 canonicalTag: '', 6560 title: '', 6561 metaTitle: '', 6562 metaDescription: '', 6563 metaKeyword: '', 6564 headings: { 6565 h1Elements: '', 6566 h2Elements: '', 6567 h3Elements: '', 6568 h4Elements: '', 6569 h5Elements: '' 6570 }, 6571 imageObject: [], 6572 openGraph: { 6573 ogTitle: '', 6574 ogImage: '', 6575 ogDescription: '', 6576 ogUrl: '', 6577 ogType: '' 6578 }, 6579 twitterCard: { 6580 twitterSite: '', 6581 twitterTitle: '', 6582 twitterDescription: '', 6583 twitterImage: '' 6584 } 6585 }, 6586 translations: { 6587 seo_toolbar: "SEO Toolbar", 6588 url: "URL:", 6589 canonical_tag: "Canonical Tag:", 6590 title: "Title:", 6591 meta_description: "Meta Description:", 6592 meta_keywords: "Meta Keywords:", 6593 headings: "Headings", 6594 all_images_have_alt_attribute: "All images have ALT attribute.", 6595 image_without_alt: " image without ALT.", 6596 images_without_alt: " images without ALT.", 6597 we_have_found_several_open_graph_objects: "Great! We have found several Open Graph objects.", 6598 your_page_does_not_have_any_open_graph_objects: "Your page does not have any Open Graph objects.", 6599 open_graph: "Open Graph:", 6600 we_have_found_twitter_cards_on_your_page: "Nice! We have found Twitter Cards on your page.", 6601 your_page_does_not_have_any_twitter_cards: "Your page does not have any Twitter Cards.", 6602 twitter_card: "Twitter Card:", 6603 edit_in_backend: "Edit In Backend", 6604 }, 6605 6606 iconToolbar: { 6607 success: '<svg viewBox="0 0 512 512" class="float-left"><path fill="#28a745" d="M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zM227.314 387.314l184-184c6.248-6.248 6.248-16.379 0-22.627l-22.627-22.627c-6.248-6.249-16.379-6.249-22.628 0L216 308.118l-70.059-70.059c-6.248-6.248-16.379-6.248-22.628 0l-22.627 22.627c-6.248 6.248-6.248 16.379 0 22.627l104 104c6.249 6.249 16.379 6.249 22.628.001z"></path></svg>', 6608 false: ' <svg viewBox="0 0 512 512" class="tooltip-toggle float-left"><path fill="#dc3545" d="M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zm-248 50c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418
6608-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z"></path></svg>', 6609 warming: ' <svg viewBox="0 0 512 512" class="tooltip-toggle float-left"><path fill="#aaa" d="M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 110c23.196 0 42 18.804 42 42s-18.804 42-42 42-42-18.804-42-42 18.804-42 42-42zm56 254c0 6.627-5.373 12-12 12h-88c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h12v-64h-12c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h64c6.627 0 12 5.373 12 12v100h12c6.627 0 12 5.373 12 12v24z"></path></svg>' 6610 }, 6611 6612 toolTipObject: { 6613 url: 'A SEO-friendly URL should be easy-to-read, definitive, and keyword-rich so that Google can easily index your website.', 6614 headings: 'You only use one <H1> heading for each page to strengthen your SEO.<br/>This <H1> heading should contain your main keyword.', 6615 images: 'You should add ALT text to your images to help search engines easily index them.<br/>The reason is search engines don\'t physically see images like the way people do. Hence, ALT text plays a role in describing the image so that they show up in Google⢠and other search engine\'s image results.<br/>Make sure your website images have their own specific ALT text.', 6616 openGraph: 'Open Graph is a technology introduced by Facebook that integrates between Facebook and its user data and a website. When integrating Open Graph meta tags into your page, you can identify which elements of your page you desire to display when your page is shared.', 6617 twitterCard: 'By using Twitter Cards, you can easily attach photo, videos, and media experience to Tweets to increase traffic to your site.', 6618 canonicalTag: 'A canonical tag is used to prevent issues caused by duplicated content appearing on multiple URLs. On the other hand, the canonical tag lets search engines which version of URL will be included in search results.', 6619 title: 'A perfect length of a title should be about 50-70 characters, including spaces. You need to make your title concise and contain the main keyword.', 6620 description: 'Meta description determines how your pages are displayed in the search results. Hence, you should keep it 200-255 characters long for the best effectiveness. Also, don\'t forget to include your main keyword in the meta description and make it attractive to encourage customers to click.', 6621 metaKeyword: 'Meta keywords are words or phrases that pertain to your site\'s content. In the past, people have tried to take advantage of this tag so now it doesn\'t affect your search rankings the way that it used to.' 6622 }, 6623 6624 initToolbar() { 6625 let urlVars = getUrlVars(); 6626 let cookieName = 'bss_seo_toolbar_token'; 6627 if (typeof urlVars.token !== "undefined") { 6628 let token = urlVars.token; 6629 //Set to Cookie 6630 createCookie(cookieName, token, 30); 6631 } 6632 //get Token from Cookie 6633 let cookieValue = getCookie(cookieName); 6634 let hideCookieName = 'bss_seo_toolbar_hide'; 6635 let statusHideValue = getCookie(hideCookieName); 6636 6637 this.statusHide = statusHideValue !== '' && statusHideValue !== null && Number(statusHideValue) === 1; 6638 this.handleToolbarStatus(); 6639 // this.handleClickToolbar(); 6640 if (cookieValue !== '' && cookieValue !== null) { 6641 //Show Loading 6642 this.setData(); 6643 this.handleAjaxCheckAdmin(cookieValue); 6644 } 6645 }, 6646 6647 handleToolbarStatus: function() { 6648 let bssSeoToolbarDOM = document.querySelector('#bss_seo_toolbar'); 6649 6650 bssSeoToolbarDOM.classList.remove('toolbar_hide', 'p-0'); 6651 if (this.statusHide) { 6652 bssSeoToolbarDOM.classList.add('toolbar_hide', 'p-0'); 6653 } 6654 }, 6655 6656 handleClickToolbar: function() { 6657 let valueCookieHide = '0'; 6658 6659 if (!this.statusHide) { 6660 //Save a Cookie and Hide it 6661 valueCookieHide = '1'; 6662 this.statusHide = true; 6663 } else { 6664 this.statusHide = false;
6665 } 6666 let hideCookieName = 'bss_seo_toolbar_hide'; 6667 6668 createCookie(hideCookieName, valueCookieHide, 30); 6669 this.handleToolbarStatus(); 6670 6671 let DOMToolbar = this.getDOMToolbar(); 6672 renderToolbar(DOMToolbar); 6673 }, 6674 6675 getDOMToolbar: function() { 6676 let headerToolbar = this.getHeaderToolbar(), 6677 bodyToolbar = this.getBodyToolbar(); 6678 6679 return headerToolbar + bodyToolbar; 6680 }, 6681 6682 getHeaderToolbar: function() { 6683 return '<div class="bss_toolbar_header float-left w-full"><img src="https://www.skintrends.com/static/version1789630527/frontend/Hyva/skintrends/en_US/Bss_SeoToolbar/images/logo_bss.svg" alt="Logo" class="w-12 float-left" /><p class="float-left font-black text-base text-white text-center">' + this.translations.seo_toolbar + '</p><svg viewBox="0 0 448 512" @click="handleClickToolbar()" class="fill-white float-right cursor-pointer"><path d="M441.9 167.3l-19.8-19.8c-4.7-4.7-12.3-4.7-17 0L224 328.2 42.9 147.5c-4.7-4.7-12.3-4.7-17 0L6.1 167.3c-4.7 4.7-4.7 12.3 0 17l209.4 209.4c4.7 4.7 12.3 4.7 17 0l209.4-209.4c4.7-4.7 4.7-12.3 0-17z"></path></svg></div>'; 6684 }, 6685 6686 getBodyToolbar: function() { 6687 let firstBodyToolbar = ''; 6688 6689 if (this.statusHide) { 6690 firstBodyToolbar = '<div class="bss_toolbar_body hidden">'; 6691 } else { 6692 firstBodyToolbar = '<div class="bss_toolbar_body block float-left w-full">'; 6693 } 6694 6695 let lastBodyToolbar = '</div>'; 6696 let urlDOM = this.getItemToolbar( 6697 this.translations.url, 6698 this.dataToolbar.url, 6699 "success", 6700 this.toolTipObject.url 6701 ); 6702 6703 //For Canonical Tag 6704 let statusCanonicalTag = "success"; 6705 if (this.dataToolbar.canonicalTag === '' || this.dataToolbar.canonicalTag === null) { 6706 statusCanonicalTag = "false"; 6707 } 6708 let canonicalTagDOM = this.getItemToolbar( 6709 this.translations.canonical_tag, 6710 this.dataToolbar.canonicalTag, 6711 statusCanonicalTag, 6712 this.toolTipObject.canonicalTag 6713 ); 6714 6715 //For Meta Title 6716 let statusMetaTitle = "false"; 6717 6718 if (this.dataToolbar.title === '' || this.dataToolbar.title === null) { 6719 statusMetaTitle = "false"; 6720 } else { 6721 if (this.dataToolbar.title.length >= 50 && this.dataToolbar.title.length <= 70) { 6722 statusMetaTitle = "success"; 6723 } 6724 if (this.dataToolbar.title.length > 70) { 6725 statusMetaTitle = "false" 6726 } 6727 if (this.dataToolbar.title.length < 50) { 6728 statusMetaTitle = "warming"; 6729 } 6730 } 6731 let titleDOM = this.getItemToolbar( 6732 this.translations.title, 6733 this.dataToolbar.title, 6734 statusMetaTitle, 6735 this.toolTipObject.title 6736 ); 6737 6738 //For Meta Description 6739 let statusMetaDescription = "false"; 6740 6741 if (this.dataToolbar.metaDescription === '' || this.dataToolbar.metaDescription === null) { 6742 statusMetaDescription = "false"; 6743 } else { 6744 if (this.dataToolbar.metaDescription.length >= 200 && this.dataToolbar.metaDescription.length <= 255) { 6745 statusMetaDescription = "success"; 6746 } 6747 if (this.dataToolbar.metaDescription.length > 255) { 6748 statusMetaDescription = "false" 6749 } 6750 if (this.dataToolbar.metaDescription.length >= 100 && this.dataToolbar.metaDescription.length < 200) { 6751 statusMetaDescription = "warming"; 6752 } 6753 } 6754 6755 let metaDescriptionDOM = this.getItemToolbar( 6756 this.translations.meta_description, 6757 this.dataToolbar.metaDescription, 6758 statusMetaDescription, 6759 this.toolTipObject.description 6760 ); 6761 //For Meta Keyword 6762 let statusMetaKeywords = "success"; 6763 6764 if (this.dataToolbar.metaKeyword === '' || this.dataToolbar.metaKeyword === null) { 6765 statusMetaKeywords = "warming"; 6766 } 6767 let metaKeywordDOM = this.getItemToolbar( 6768 this.translations.meta_keywords, 6769 this.dataToolbar.metaKeyword, 6770 statusMetaKeywords, 6771 this.toolTipObject.metaKeyword 6772 ); 6773 6774 //For Headings Status 6775 let headingText = 'H1 [' + this.dataToolbar.headings.h1Elements + '] - H2 [' + this.dataToolbar.headings.h2Elements + '] - H3 [' + this.dataToolbar.headings.h3Elements + '] - H4 [' + this.dataToolbar.headings.h4Elements + '] - H5 [' + this.dataToolbar.headings.h5Elements + ']'; 6776 let statusHeading = "false"; 6777 if (this.dataToolbar.headings.h1Elements === 1 && this.dataToolbar.headings.h2Elements > 0) { 6778 statusHeading = "success"; 6779 } 6780 if (this.dataToolbar.headings.h1Elements === 1 && this.dataToolbar.headings.h2Elements === 0) { 6781 statusHeading = "warming"; 6782 } 6783 let headingsDOM = this.getItemToolbar( 6784 this.translations.headings, 6785 headingText, 6786 statusHeading, 6787 this.toolTipObject.headings 6788 ); 6789 6790 //For Image status 6791 let lostAltNumbmer = 0; 6792 this.dataToolbar.imageObject.forEach(function(image) { 6793 let alt = image.getAttribute("alt"); 6794 if (typeof alt === 'undefined' || alt === null || alt === '') { 6795 lostAltNumbmer++; 6796 } 6797 }); 6798 let imageAltDOM = ''; 6799 let statusImages = "false"; 6800 if (lostAltNumbmer === 0) { 6801 statusImages = "success"; 6802 imageAltDOM = this.getItemToolbar( 6803 this.translations.all_images_have_alt_attribute, 6804 '', 6805 statusImages, 6806 statusHeading, 6807 this.toolTipObject.images 6808 ); 6809 } else { 6810 let textImageAltDOM = ''; 6811 if (lostAltNumbmer === 1) { 6812 textImageAltDOM = lostAltNumbmer + this.translations.image_without_alt; 6813 } else { 6814 textImageAltDOM = lostAltNumbmer + this.translations.images_without_alt; 6815 } 6816 imageAltDOM = this.getItemToolbar( 6817 textImageAltDOM, 6818 '', 6819 statusImages, 6820 this.toolTipObject.images 6821 ); 6822 } 6823 6824 //For Open Graph 6825 let countOpenGraph = 0; 6826 if (typeof this.dataToolbar.openGraph.ogTitle !== "undefined" && this.dataToolbar.openGraph.ogTitle !== '' && this.dataToolbar.openGraph.ogTitle !== null) { 6827 countOpenGraph++; 6828 } 6829 if (typeof this.dataToolbar.openGraph.ogDescription !== "undefined" && this.dataToolbar.openGraph.ogDescription !== '' && this.dataToolbar.openGraph.ogDescription !== null) { 6830 countOpenGraph++; 6831 } 6832 if (typeof this.dataToolbar.openGraph.ogImage !== "undefined" && this.dataToolbar.openGraph.ogImage !== '' && this.dataToolbar.openGraph.ogImage !== null) { 6833 countOpenGraph++; 6834 } 6835 if (typeof this.dataToolbar.openGraph.ogUrl !== "undefined" && this.dataToolbar.openGraph.ogUrl !== '' && this.dataToolbar.openGraph.ogUrl !== null) { 6836 countOpenGraph++; 6837 } 6838 if (typeof this.dataToolbar.openGraph.ogType !== "undefined" && this.dataToolbar.openGraph.ogType !== '' && this.dataToolbar.openGraph.ogType !== null) { 6839 countOpenGraph++; 6840 } 6841 6842 let textOpenGraph = ''; 6843 let statusOpenGraphRender = "false"; 6844 6845 if (countOpenGraph > 0) { 6846 textOpenGraph = this.translations.we_have_found_several_open_graph_objects; 6847 statusOpenGraphRender = "success"; 6848 } else { 6849 textOpenGraph = this.translations.your_page_does_not_have_any_open_graph_objects; 6850 } 6851 6852 let openGraphDOM = this.getItemToolbar( 6853 this.translations.open_graph, 6854 textOpenGraph, 6855 statusOpenGraphRender, 6856 this.toolTipObject.openGraph 6857 ); 6858 6859 //For Twitter Card 6860 let countTwitterCard = 0; 6861 if (typeof this.dataToolbar.twitterCard.twitterSite !== "undefined" && this.dataToolbar.twitterCard.twitterSite !== '' && this.dataToolbar.twitterCard.twitterSite !== null) { 6862 countTwitterCard++; 6863 } 6864 if (typeof this.dataToolbar.twitterCard.twitterTitle !== "undefined" && this.dataToolbar.twitterCard.twitterTitle !== '' && this.dataToolbar.twitterCard.twitterTitle !== null) { 6865 countTwitterCard++; 6866 } 6867 if (typeof this.dataToolbar.twitterCard.twitterDescription !== "undefined" && this.dataToolbar.twitterCard.twitterDescription !== '' && this.dataToolbar.twitterCard.twitterDescription !== null) { 6868 countTwitterCard++; 6869 } 6870 if (typeof this.dataToolbar.twitterCard.twitterImage !== "undefined" && this.dataToolbar.twitterCard.twitterImage !== '' && this.dataToolbar.twitterCard.twitterImage !== null) { 6871 countTwitterCard++; 6872 } 6873 let textTwitterCard = ''; 6874 let statusTwitterCardRender = "false"; 6875 if (countTwitterCard > 0) { 6876 textTwitterCard = this.translations.we_have_found_twitter_cards_on_your_page; 6877 statusTwitterCardRender = "success"; 6878 } else { 6879 textTwitterCard = this.translations.your_page_does_not_have_any_twitter_cards; 6880 } 6881 6882 let twitterCardDOM = this.getItemToolbar( 6883 this.translations.twitter_card, 6884 textTwitterCard, 6885 statusTwitterCardRender, 6886 this.toolTipObject.twitterCard 6887 ); 6888 6889 let editLink = this.urlEdit; 6890 let editBody = ''; 6891 if (editLink) { 6892 editBody = '<div class="edit_body_toolbar float-left text-center"><a href="' + editLink + '" target="_blank">' + this.translations.edit_in_backend + '</a></div>'; 6893 } 6894 return firstBodyToolbar + urlDOM + canonicalTagDOM + titleDOM + metaDescriptionDOM + metaKeywordDOM + headingsDOM + imageAltDOM + openGraphDOM + twitterCardDOM + editBody + lastBodyToolbar; 6895 6896 }, 6897 6898 getItemToolbar: function(title, value, status, toolTip) { 6899 let icon = ''; 6900 let self = this; 6901 switch (status) { 6902 case 'success': 6903 icon = self.iconToolbar.success; 6904 break; 6905 case 'false': 6906 icon = self.iconToolbar.false; 6907 break; 6908 case 'warming': 6909 icon = self.iconToolbar.warming; 6910 break; 6911 } 6912 return '<div class="bss_toolbar_item tooltip-toggle relative whitespace-pre-line border-b float-left">' + icon + '<div class="toolbar_content float-right"> <strong>' + title + '</strong> ' + value + ' </div><span class="tooltip-content invisible text-white text-left p-2.5 absolute z-10 mr-0 opacity-0">'+toolTip+'</span> </div>'; 6913 }, 6914 6915 setData: function() { 6916 this.dataToolbar.url = window.location.href; 6917 let canonicalTag = document.querySelector('link[rel=canonical]') ? 6918 document.querySelector('link[rel=canonical]').getAttribute("href") : undefined; 6919 6920 if (typeof canonicalTag !== "undefined") { 6921 this.dataToolbar.canonicalTag = canonicalTag; 6922 } 6923 6924 let title = document.title; 6925 if (typeof title !== "undefined") { 6926 this.dataToolbar.title = title; 6927 } 6928 6929 let metaTitle = document.querySelector('meta[name=title]') ? 6930 document.querySelector('meta[name=title]').getAttribute("content") : undefined; 6931 if (typeof metaTitle !== "undefined") { 6932 this.dataToolbar.metaTitle = metaTitle; 6933 } 6934 6935 let metaDescription = document.querySelector('meta[name=description]') ? 6936 document.querySelector('meta[name=description]').getAttribute("content") : undefined; 6937 if (typeof metaDescription !== "undefined") { 6938 this.dataToolbar.metaDescription = metaDescription; 6939 } 6940 6941 let metaKeyword = document.querySelector('meta[name=keywords]') ? 6942 document.querySelector('meta[name=keywords]').getAttribute("content") : undefined; 6943 if (typeof metaKeyword !== "undefined") { 6944 this.dataToolbar.metaKeyword = metaKeyword; 6945 } 6946 this.dataToolbar.headings.h1Elements = document.querySelectorAll('h1').length; 6947 this.dataToolbar.headings.h2Elements = document.querySelectorAll('h2').length; 6948 this.dataToolbar.headings.h3Elements = document.querySelectorAll('h3').length; 6949 this.dataToolbar.headings.h4Elements = document.querySelectorAll('h4').length; 6950 this.dataToolbar.headings.h5Elements = document.querySelectorAll('h5').length; 6951 this.dataToolbar.imageObject = document.querySelectorAll('img'); 6952 6953 this.dataToolbar.openGraph.ogTitle = document.querySelector('meta[property="og:title"]') ? 6954 document.querySelector('meta[property="og:title"]').getAttribute("content") : ''; 6955 this.dataToolbar.openGraph.ogImage = document.querySelector('meta[property="og:image"]') ? 6956 document.querySelector('meta[property="og:image"]').getAttribute("content") : ''; 6957 this.dataToolbar.openGraph.ogDescription = document.querySelector('meta[property="og:description"]') ? 6958 document.querySelector('meta[property="og:description"]').getAttribute("content") : ''; 6959 this.dataToolbar.openGraph.ogUrl = document.querySelector('meta[property="og:url"]') ? 6960 document.querySelector('meta[property="og:url"]').getAttribute("content") : ''; 6961 this.dataToolbar.openGraph.ogType = document.querySelector('meta[property="og:type"]') ? 6962 document.querySelector('meta[property="og:type"]').getAttribute("content") : ''; 6963 this.dataToolbar.twitterCard.twitterSite = document.querySelector('meta[name="twitter:site"]') ? 6964 document.querySelector('meta[name="twitter:site"]').getAttribute("content") : ''; 6965 this.dataToolbar.twitterCard.twitterTitle = document.querySelector('meta[name="twitter:title"]') ? 6966 document.querySelector('meta[name="twitter:title"]').getAttribute("content") : ''; 6967 this.dataToolbar.twitterCard.twitterDescription = document.querySelector('meta[name="twitter:desc
6967ription"]') ? 6968 document.querySelector('meta[name="twitter:description"]').getAttribute("content") : ''; 6969 this.dataToolbar.twitterCard.twitterImage = document.querySelector('meta[name="twitter:image"]') ? 6970 document.querySelector('meta[name="twitter:image"]').getAttribute("content") : ''; 6971 }, 6972 6973 handleAjaxCheckAdmin: function (token) { 6974 let ajaxUrl = 'https://www.skintrends.com/seo_toolbar/index/checktoken/'; 6975 let self = this; 6976 6977 fetch(ajaxUrl, { 6978 "headers": { 6979 "content-type": "application/x-www-form-urlencoded; charset=UTF-8", 6980 }, 6981 "body": `form_key=${hyva.getFormKey()}&isAjax=true&token=${token}&entity_id=&entity_type=`, 6982 "method": "POST", 6983 "mode": "cors", 6984 "credentials": "include" 6985 }).then(response => { 6986 if (response.redirected) { 6987 window.location.href = response.url; 6988 } else if (response.ok) { 6989 return response.json(); 6990 } else { 6991 window.dispatchMessages && window.dispatchMessages([{ 6992 type: 'warning', 6993 text: 'Could\u0020not\u0020get\u0020toolbar.' 6994 }]); 6995 } 6996 }).then(result => { 6997 if (!result.status) { 6998 window.dispatchMessages && window.dispatchMessages([{ 6999 type: 'error', 7000 text: result.message 7001 }]); 7002 } else { 7003 self.urlEdit = result.data.backend_url; 7004 let DOMToolbar = self.getDOMToolbar(); 7005 renderToolbar(DOMToolbar); 7006 } 7007 }); 7008 }, 7009 } 7010 } 7011</script>
7011 7012 7013<div id="bss_seo_toolbar" x-data="initBssSeoToolbar()" x-init="initToolbar()" class="hidden h-auto fixed z-50 bg-white rounded-lg"></div> 7014 7015<style> 7016 #bss_seo_toolbar { 7017 width: 500px; 7018 bottom: 15px; 7019 right: 15px; 7020 -webkit-box-shadow: 0 7px 8px -4px rgba(0,0,0,.2), 0 13px 19px 2px rgba(0,0,0,.14), 0 5px 24px 4px rgba(0,0,0,.12); 7021 box-shadow: 0 7px 8px -4px rgba(0,0,0,.2), 0 13px 19px 2px rgba(0,0,0,.14), 0 5px 24px 4px rgba(0,0,0,.12); 7022} 7023 7024#bss_seo_toolbar.toolbar_hide .bss_toolbar_header { 7025 height: 20px; 7026 border-radius: 8px; 7027 display: inline-table; 7028 padding: 5px 10px; 7029} 7030 7031#bss_seo_toolbar .bss_toolbar_header { 7032 padding: 15px; 7033 background: rgb(242 133 42); 7034 border-radius: 8px 8px 0 0; 7035} 7036 7037#bss_seo_toolbar .bss_toolbar_header img { 7038 margin: 3px 0 0 0; 7039} 7040 7041#bss_seo_toolbar .bss_toolbar_header p { 7042 width: calc(100% - 100px); 7043 margin: 7px 0 0 0; 7044 font-weight: 700; 7045} 7046 7047#bss_seo_toolbar .bss_toolbar_header svg { 7048 width: 18px; 7049 height: 18px; 7050 margin: 10px 0 0 0; 7051 fill: white; 7052 float: right; 7053} 7054 7055#bss_seo_toolbar .bss_toolbar_header svg path { 7056 stroke: #ffffff; 7057 stroke-width: 30px; 7058} 7059 7060#bss_seo_toolbar .bss_toolbar_item { 7061 width: calc(100% - 30px); 7062 padding: 10px 0 10px 0; 7063 margin: 0 15px 0 15px; 7064 -ms-word-break: break-all; 7065 word-break: break-word; 7066 word-wrap: break-word; 7067 -webkit-hyphens: auto; 7068 -moz-hyphens: auto; 7069 border-bottom: 1px rgb(240 240 240) solid; 7070 hyphens: auto; 7071} 7072 7073#bss_seo_toolbar .bss_toolbar_item svg { 7074 width: 16px; 7075 height: 16px; 7076 margin: 4px 15px 0 0; 7077} 7078 7079#bss_seo_toolbar.toolbar_hide .bss_toolbar_header svg { 7080 transform: rotate(180deg); 7081 margin: 10px 5px 0 0; 7082} 7083 7084#bss_seo_toolbar .bss_toolbar_item .toolbar_content { 7085 width: calc(100% - 35px); 7086} 7087 7088#bss_seo_toolbar .bss_toolbar_item .tooltip-content { 7089 width: 400px; 7090 background-color: rgb(85 85 85); 7091 border-radius: 6px; 7092 bottom: calc(100% - 40px); 7093 right: calc(100% + 15px); 7094 transition: opacity .3s; 7095} 7096 7097#bss_seo_toolbar .bss_toolbar_item .tooltip-content::after { 7098 content: ""; 7099 position: absolute; 7100 top: calc(100% - 30px); 7101 left: calc(100% + 5px); 7102 margin-left: -5px; 7103 border-width: 5px; 7104 border-style: solid; 7105 border-color: transparent transparent transparent #555; 7106} 7107 7108#bss_seo_toolbar .edit_body_toolbar { 7109 width: calc(100% - 30px); 7110 padding: 10px 0 15px 0; 7111 margin: 0 15px 0 15px; 7112} 7113 7114#bss_seo_toolbar.toolbar_hide { 7115 width: 260px; 7116 opacity: 0.6; 7117} 7118 7119@media only screen and (max-width: 768px) { 7120 #bss_seo_toolbar { 7121 width: calc(100% - 30px); 7122 height: calc(100% - 30px); 7123 } 7124 7125 #bss_seo_toolbar .bss_toolbar_body { 7126 height: -webkit-fill-available; 7127 overflow: scroll; 7128 position: absolute; 7129 margin-top: 65px; 7130 } 7131} 7132 7133</style> 7134
7135<script> 7136 function amBannerInjectorResolver () { 7137 const injectors = Object.values({"products.among.injector":{"position":14,"name":"amBannerAmongCategoryInjector"},"products.belowcart.injector":{"position":15,"name":"amBannerBelowCartInjector"}}); 7138 7139 return { 7140 amBannerAmongCategoryInjector: function (sectionId, injectorParams) { 7141 const container = document.querySelector('[data-role="amasty-banner-container"][data-position="' + sectionId + '"]'); 7142 7143 Object.keys(injectorParams.banners).map((id) => { 7144 const params = injectorParams.banners[id]; 7145 const element = container.querySelector('[data-banner-id="' + id + '"]'); 7146 insertBannerAmongCategoryByConfig({ 7147 containerSelector: injectorParams.containerSelector, 7148 itemSelector: injectorParams.itemSelector, 7149 afterProductRow: params.afterProductRow, 7150 afterProductNum: params.afterProductNum, 7151 span: params.width 7152 }, element); 7153 }); 7154 7155 function insertBannerAmongCategoryByConfig (injectorConfig, element) { 7156 const options = { 7157 injectorConfig: {}, 7158 container: null, 7159 after: null, 7160 wrapper: null, 7161 initialized: false, 7162 gridSizes: ['sm', 'xl'], 7163 bannerWidthClass: 'col-span', 7164 ...injectorConfig 7165 } 7166 7167 insertBanner(element); 7168 7169 function insertBanner(element) { 7170 const initialized = setOptions(); 7171 7172 if (!initialized) { 7173 return; 7174 } 7175 7176 element.classList.add('ambanners-injected-banner'); 7177 const wrapper = options.wrapper.cloneNode(true); 7178 7179 wrapper.classList.remove('card', 'card-interactive'); 7180 addStylesForDifferentSizes(wrapper); 7181 7182 insertWrapper(wrapper); 7183 wrapper.append(element); 7184 } 7185 7186 function setOptions () { 7187 const initialized = document.querySelector(options.containerSelector) !== null; 7188 7189 if (!initialized) { 7190 console.warn( 7191 'Failed to initialize banner: Can\'t find an element with selector "' + options.containerSelector + '"' 7192 ); 7193 7194 return; 7195 } 7196 7197 options.container = document.querySelector(options.containerSelector); 7198 7199 setLineToInject(); 7200 setWrapper(); 7201 7202 return true; 7203 } 7204 7205 function setLineToInject() { 7206 if (options.afterProductNum === -1) { 7207 setFirstLineToInject(); 7208 } else { 7209 setLineByPositionToInject(); 7210 } 7211 } 7212 7213 function setWrapper() { 7214 if (options.after) { 7215 options.wrapper = options.after.cloneNode(); 7216 } 7217 } 7218 7219 function setFirstLineToInject() { 7220 options.after = document.querySelector(options.itemSelector); 7221 } 7222 7223 function setLineByPositionToInject() { 7224 // calc banner insert offset 7225 const offset = calculateOffsetBasedOnPreviousBanners(); 7226 7227 options.after = document.querySelectorAll(options.itemSelector)[options.afterProductNum - offset]; 7228 } 7229 7230 function calculateOffsetBasedOnPreviousBanners () { 7231 return [...document.querySelectorAll(`${options.itemSelector}`)] 7232 ?.reduce((accumulator, amInjectedBannerWrapper) => { 7233 const widthAttributeValue = Number(amInjectedBannerWrapper?.getAttribute('am-banner-span')) 7234 7235 if (widthAttributeValue > 1) { 7236 accumulator += (widthAttributeValue - 1); 7237 } 7238 7239 return accumulator; 7240 }, 0); 7241 } 7242 7243 function insertWrapper(insert) { 7244 if (options.after) { 7245 insertWrapperAfterFoundProduct(insert); 7246 } else if (options.container) { 7247 insertWrapperInProductListContainer(insert); 7248 } 7249 } 7250 7251 function insertWrapperAfterFoundProduct(insert) { 7252 if (options.afterProductNum === -1) { 7253 options.after.parentNode.insertBefore(insert, options.after); 7254 } else { 7255 options.after.parentNode.insertBefore(insert, options.after.nextSibling); 7256 } 7257 } 7258 7259 function insertWrapperInProductListContainer(insert) { 7260 if (parseInt(options.afterProductRow) > 1) {
7261 options.container.innerHTML += insert.innerHTML; 7262 } else { 7263 options.container.innerHTML = insert.innerHTML + options.container.innerHTML; 7264 } 7265 } 7266 7267 function addStylesForDifferentSizes (wrapper) { 7268 options.gridSizes?.forEach((size, index) => { 7269 const widthValue = options.span > index + 1 ? index + 2 : options.span; 7270 wrapper?.classList.add(`${size}:${options.bannerWidthClass}-${widthValue}`); 7271 wrapper?.setAttribute('am-banner-span', widthValue); 7272 }); 7273 } 7274 } 7275 }, 7276 7277 amBannerBelowCartInjector: function (sectionId) { 7278 const belowProductAddToCartBanner = document.querySelector('.ambanners.ambanner-' + sectionId); 7279 belowProductAddToCartBanner.style.display = 'block'; 7280 document.querySelectorAll('.product-item')?.forEach(product => { 7281 product?.append(belowProductAddToCartBanner.cloneNode(true)); 7282 }); 7283 belowProductAddToCartBanner.style.display = 'none'; 7284 }, 7285 7286 resolve: function (position, injectorParams) { 7287 const injector = injectors.find((injector) => { 7288 return injector.position === Number(position); 7289 }); 7290 7291 return this[injector?.name]?.(position, injectorParams); 7292 } 7293 } 7294 } 7295</script>
7295 7296 7297
7298<script> 7299 (function () { 7300 'use strict'; 7301 7302 /** 7303 * Config to determine which element is responsible for the form submission 7304 * 7305 * @type {[{elementSelector: undefined|string, submitAttribute: string}]} 7306 */ 7307 const formWrapperConfig = [{"elementSelector":null,"submitAttribute":"submit"},{"elementSelector":"[type=\"submit\"]","submitAttribute":"click"}]; 7308 7309 /** 7310 * Replace protected forms submit with amRecaptchaModel.execute($event) method. 7311 * Call original submit on amrecaptcha-callback event after successful captcha validation. 7312 * 7313 * @return {void} 7314 */ 7315 const wrapFormSubmit = function () { 7316 document.addEventListener("DOMContentLoaded", function () { 7317 const formsSelector = window.amRecaptchaModel?.formsToProtect || ''; 7318 if (formsSelector.length === 0) { 7319 return; 7320 } 7321 7322 document.querySelectorAll(formsSelector)?.forEach(formElement => { 7323 if (!formElement) { 7324 return; 7325 } 7326 7327 const { elementToWrap, attributeNameToWrap } = resolveElementWrapping(formElement); 7328 if (!elementToWrap || !attributeNameToWrap) { 7329 return; 7330 } 7331 7332 setElementAttributes(formElement, elementToWrap, attributeNameToWrap); 7333 }); 7334 }); 7335 }; 7336 7337 /** 7338 * Find submit event and DOM element that has this event using formWrapperConfig. 7339 * 7340 * @param {HTMLElement} formElement 7341 * @return {{elementToWrap: undefined|string, attributeNameToWrap: undefined|string}} 7342 */ 7343 const resolveElementWrapping = function (formElement) { 7344 let result = { 7345 elementToWrap: undefined, 7346 attributeNameToWrap: undefined 7347 }; 7348 7349 formWrapperConfig.forEach(({ elementSelector, submitAttribute }) => { 7350 const elementToWrap = !!elementSelector ? formElement.querySelector(elementSelector) : formElement; 7351 if (!elementToWrap) { 7352 return; 7353 } 7354 7355 const attributeNameToWrap = elementToWrap.getAttributeNames().find( 7356 (elementAttribute) => { 7357 /** @type {string[]} */ 7358 const submitAttributeVariations = ['@', 'x-on:'].map(variation => variation + submitAttribute); 7359 7360 return submitAttributeVariations.some( 7361 (submitAttributeVariation) => elementAttribute.startsWith(submitAttributeVariation) 7362 ) 7363 } 7364 ); 7365 if (!attributeNameToWrap) { 7366 return; 7367 } 7368 7369 result.elementToWrap = elementToWrap; 7370 result.attributeNameToWrap = attributeNameToWrap; 7371 }); 7372 7373 return result; 7374 } 7375 7376 /** 7377 * Set attribute to wrap original submit, add eventListeners for captcha callbacks 7378 * 7379 * @param {HTMLElement} formElement 7380 * @param {HTMLElement} elementToWrap 7381 * @param {string} attributeNameToWrap 7382 */ 7383 const setElementAttributes = function (formElement, elementToWrap, attributeNameToWrap) { 7384 const originalSubmit = elementToWrap.getAttribute(attributeNameToWrap); 7385 elementToWrap.removeAttribute(attributeNameToWrap); 7386 7387 /** 7388 * To properly set submit attribute - we need to replace '@' with 'x-on:' 7389 * and add preventDefault behaviour 7390 */ 7391 elementToWrap.setAttribute( 7392 attributeNameToWrap.replace(/^@/, 'x-on:').replace(/.prevent$/, '') + '.prevent', 7393 'amRecaptchaModel.execute($event)' 7394 ); 7395 elementToWrap.setAttribute( 7396 'x-on:amrecaptcha-executable-callback', 7397 originalSubmit 7398 ); 7399 } 7400 7401 wrapFormSubmit(); 7402 })(window.amRecaptchaModel = window.amRecaptchaModel || {}); 7403</script>
7403 7404 7405<style> 7406 #bss_ajaxcart_popup .btn-continue .continue { 7407 background: #8E5272!important; 7408 color: #FFFFFF!important; 7409 } 7410 7411 #bss_ajaxcart_popup .btn-continue .continue:hover { 7412 background: #C48AA9!important; 7413 } 7414 7415 #bss_ajaxcart_popup .btn-viewcart .viewcart { 7416 background: #8E5272!important; 7417 color: #FFFFFF!important; 7418 } 7419 7420 #bss_ajaxcart_popup .btn-viewcart .viewcart:hover { 7421 background: #C48AA9!important; 7422 } 7423</style> 7424 7425
7425<script> 7426 (function (component) { 7427 const screens = {"mobile":"(max-width: 767px)"}; 7428 const screenMemorized = new Map(); 7429 if(typeof screens === "object"){ 7430 Object.keys(screens).forEach(key => { 7431 try{ 7432 screenMemorized.set(key, window.matchMedia(screens[key])); 7433 }catch{} 7434 }); 7435 } 7436 component.match = function (key){ 7437 const media = screenMemorized.get(key); 7438 if(!media) return false; 7439 return media.matches; 7440 } 7441 })(window.skintrendMediaScreen = window.skintrendMediaScreen || {}); 7442 </script>
vendor: 1 bytes, line 7442
7442
7443<script> (function () { 7444 const deferElements = function (){ 7445 document.querySelectorAll('[defer-x-data]').forEach(el => { 7446 el.setAttribute('x-data', el.getAttribute('defer-x-data')); 7447 el.removeAttribute('defer-x-data'); 7448 if(window.Alpine) Alpine.initializeComponent(el); 7449 }); 7450 } 7451 window.addEventListener('init-external-scripts', ()=>{ 7452 if(window.Alpine) deferElements(); 7453 else if(window.deferLoadingAlpine) { 7454 const superCallback = window.deferLoadingAlpine; 7455 window.deferLoadingAlpine = function (callback){ 7456 deferElements(); 7457 superCallback(callback); 7458 } 7459 } 7460 }, {once: true}); 7461 })();</script>
vendor: 1 bytes, line 7461
7461
7462<script type="module" 7463 src="https://www.skintrends.com/static/version1789630527/frontend/Hyva/skintrends/en_US/Bss_HyvaCompatBase/js/alpinejs/plugins/component.min.js" 7464 defer 7465 crossorigin 7466></script>
vendor: 1 bytes, line 7466
7466
7467<script> 7468 (() => { 7469 function src_default(Alpine) { 7470 Alpine.directive("intersect", (el, { value, expression, modifiers }, { evaluateLater, cleanup }) => { 7471 let evaluate = evaluateLater(expression); 7472 let options = { 7473 rootMargin: getRootMargin(modifiers), 7474 threshold: getThreshhold(modifiers) 7475 }; 7476 let observer = new IntersectionObserver((entries) => { 7477 entries.forEach((entry) => { 7478 if (entry.isIntersecting === (value === "leave")) 7479 return; 7480 evaluate(); 7481 modifiers.includes("once") && observer.disconnect(); 7482 }); 7483 }, options); 7484 observer.observe(el); 7485 cleanup(() => { 7486 observer.disconnect(); 7487 }); 7488 }); 7489 } 7490 function getThreshhold(modifiers) { 7491 if (modifiers.includes("full")) 7492 return 0.99; 7493 if (modifiers.includes("half")) 7494 return 0.5; 7495 if (!modifiers.includes("threshold")) 7496 return 0; 7497 let threshold = modifiers[modifiers.indexOf("threshold") + 1]; 7498 if (threshold === "100") 7499 return 1; 7500 if (threshold === "0") 7501 return 0; 7502 return Number(`.${threshold}`); 7503 } 7504 function getLengthValue(rawValue) { 7505 let match = rawValue.match(/^(-?[0-9]+)(px|%)?$/); 7506 return match ? match[1] + (match[2] || "px") : void 0; 7507 } 7508 function getRootMargin(modifiers) { 7509 const key = "margin"; 7510 const fallback = "0px 0px 0px 0px"; 7511 const index = modifiers.indexOf(key); 7512 if (index === -1) 7513 return fallback; 7514 let values = []; 7515 for (let i = 1; i < 5; i++) { 7516 values.push(getLengthValue(modifiers[index + i] || "")); 7517 } 7518 values = values.filter((v) => v !== void 0); 7519 return values.length ? values.join(" ").trim() : fallback; 7520 } 7521 7522 document.addEventListener("alpine:init", () => { 7523 window.Alpine.plugin(src_default); 7524 }); 7525 })(); 7526</script>
vendor: 1 bytes, line 7526
7526
7527<script> 7528 for (const [selector, deferUntil] of Object.entries({".product-slider section[x-data]":"intersect","#filters-content [x-data]":"intersect","#review_form":"intersect","section[x-data^=initRecentlyViewedProductsComponent]":"intersect","div[x-data^=initBundleOptions]":"intersect","#product_addtocart_form [x-data]":"intersect","#notice-cookie-block":"intersect"})) { 7529 document.querySelectorAll(selector).forEach(el => el.setAttribute('x-defer', `${deferUntil}`)); 7530 } 7531</script>
vendor: 1 bytes, line 7531
7531
7532<script> 7533 (function () { 7534 "use strict"; 7535 7536 const hasAlpine = new Promise(resolve => { 7537 window.addEventListener('alpine:initialized', resolve, {once: true, passive: true}); 7538 }); 7539 7540 const hasInteract = new Promise(resolve => { 7541 (events => { 7542 const onInteract = () => { 7543 resolve(); 7544 events.forEach(type => window.removeEventListener(type, onInteract)); 7545 } 7546 events.forEach(type => window.addEventListener(type, onInteract, {once: true, passive: true})) 7547 })(['touchstart', 'mouseover', 'wheel', 'scroll', 'keydown']) 7548 }); 7549 7550 const onIntersect = (el) => { 7551 return new Promise(resolve => { 7552 const observer = new IntersectionObserver(entries => { 7553 for (const entry of entries) { 7554 if (entry.isIntersecting) { 7555 observer.disconnect() 7556 resolve(); 7557 } 7558 } 7559 }, {}); 7560 observer.observe(el); 7561 }); 7562 } 7563 7564 function runComponent(el) { 7565 hasAlpine.then(() => { 7566 el.removeAttribute('x-ignore'); 7567 queueMicrotask(() => Alpine.initTree(el)); 7568 }); 7569 } 7570 7571 function initDeferredComponents() { 7572 document.querySelectorAll('[x-data][x-defer]').forEach(el => { 7573 el.setAttribute('x-ignore', ''); 7574 const deferUntil = (el.getAttribute('x-defer') || '').trim(); 7575 switch (deferUntil) { 7576 case 'interact': 7577 hasInteract.then(() => runComponent(el)); 7578 break; 7579 case 'intersect': 7580 onIntersect(el).then(() => runComponent(el)) 7581 break; 7582 case 'idle': 7583 window.requestIdleCallback 7584 ? window.requestIdleCallback(() => runComponent(el), {timeout: 4000}) 7585 : setTimeout(() => runComponent(el), 4000); 7586 break; 7587 case 'eager': 7588 runComponent(el); 7589 break; 7590 default: 7591 if (deferUntil.startsWith('event:') && deferUntil.length > 6) { 7592 window.addEventListener(deferUntil.substring(6), () => runComponent(el), {once: true, passive: true}); 7593 } 7594 } 7595 }); 7596 } 7597 7598 window.addEventListener('alpine:init', initDeferredComponents, {once: true, passive: true}); 7599 })() 7600</script>
vendor: 1 bytes, line 7600
7600
7601<script> 7602 // x-teleport implementation 7603 (_ => { 7604 document.addEventListener('DOMContentLoaded', event => { 7605 // x-teleport available only for template 7606 if (!Alpine.version.startsWith('2')) { 7607 return; 7608 } 7609 7610 const teleportDirective = (el, expression) => { 7611 let target = document.querySelector(expression) 7612 let clone = el.content.cloneNode(true).firstElementChild; 7613 7614 target.appendChild(clone); 7615 setTimeout(() => { 7616 target.querySelectorAll('[x-data]') 7617 .forEach(el => Alpine.initializeComponent(el)); 7618 }, 0) 7619 }; 7620 7621 document.querySelectorAll('template').forEach(el => { 7622 if (!el.hasAttribute('x-teleport')) { 7623 return; 7624 } 7625 7626 teleportDirective(el, el.getAttribute('x-teleport')); 7627 }); 7628 }); 7629 })() 7630</script>
7630 7631
7632<script type="module" 7633 src="https://www.skintrends.com/static/version1789630527/frontend/Hyva/skintrends/en_US/Hyva_Theme/js/alpine3.min.js" 7634 defer 7635 crossorigin 7636></script>
vendor: 1 bytes, line 7636
7636
7637<script> 7638 'use strict'; 7639 function dispatchMessages(messages, hideAfter) { 7640 const messagesEvent = new CustomEvent("messages-loaded", { 7641 detail: { 7642 messages: messages, 7643 hideAfter: hideAfter 7644 } 7645 }); 7646 window.dispatchEvent(messagesEvent); 7647 } 7648 7649 if (typeof hyva === 'undefined' || (!hyva.getBrowserStorage || !hyva.getCookie || !hyva.setCookie)) { 7650 console.warn("Hyvä helpers are not loaded yet. Make sure they are included before this script"); 7651 } 7652 7653 (function( hyva, undefined ) { 7654 7655 hyva.initFormKey = () => { 7656 const inputSelector = 'input[name="form_key"]', 7657 formKey = hyva.getFormKey(); 7658 7659 Array.from(document.querySelectorAll(inputSelector)).map(function (input) { 7660 input.value = formKey 7661 }); 7662 } 7663 7664 hyva.initMessages = () => { 7665 try { 7666 const messages = hyva.getCookie('mage-messages'); 7667 window.mageMessages = messages ? JSON.parse(decodeURIComponent(messages).replace(/\+/g, ' ')) : []; 7668 7669 dispatchMessages(window.mageMessages); 7670 7671 // empty `mage-messages` cookie 7672 const skipSetDomain = true; 7673 hyva.setCookie('mage-messages','', -1, skipSetDomain); 7674 7675 } catch (error) { 7676 console.warn('Error parsing Cookie Messages:', error); 7677 } 7678 } 7679 7680 window.addEventListener('DOMContentLoaded', hyva.initFormKey); 7681 hyva.alpineInitialized(hyva.initMessages) 7682 7683 }( window.hyva = window.hyva || {} )); 7684</script>
vendor: 1 bytes, line 7684
7684
7685<script> 7686 'use strict'; 7687 { 7688 const private_content_key = 'mage-cache-storage'; 7689 const private_content_expire_key = 'mage-cache-timeout'; 7690 const private_content_version_key = 'private_content_version'; 7691 const section_data_ids_key = 'section_data_ids'; 7692 const mage_cache_session_id_key = 'mage-cache-sessid'; 7693 const last_visited_store_key = 'last_visited_store'; 7694 7695 const ttl = 3600; 7696 7697 if (typeof hyva === 'undefined' || (!hyva.getBrowserStorage || !hyva.getCookie || !hyva.setCookie)) { 7698 console.warn("Hyvä helpers are not loaded yet. Make sure they are included before this script"); 7699 } 7700 7701 function loadSectionData () { 7702 const browserStorage = hyva.getBrowserStorage(); 7703 if (!browserStorage) { 7704 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 7705 [{ 7706 type: "warning", 7707 text: "Please enable LocalStorage in your browser." 7708 }] 7709 ); 7710 return; 7711 } 7712 try { 7713 let isInvalid = false; 7714 7715 if (hyva.getCookie(last_visited_store_key) !== CURRENT_STORE_CODE) { 7716 isInvalid = true; 7717 } 7718 hyva.setCookie(last_visited_store_key, CURRENT_STORE_CODE, false, false); 7719 7720 if (!hyva.getCookie(mage_cache_session_id_key)) { 7721 isInvalid = true; 7722 browserStorage.removeItem(private_content_key); 7723 const skipSetDomain = true; 7724 const days = false; 7725 hyva.setCookie(mage_cache_session_id_key, true, days, skipSetDomain) 7726 } 7727 7728 const cookieVersion = hyva.getCookie(private_content_version_key); 7729 const storageVersion = browserStorage.getItem(private_content_version_key); 7730 7731 if (cookieVersion && !storageVersion || cookieVersion !== storageVersion) { 7732 isInvalid = true; 7733 } 7734 7735 const privateContentExpires = browserStorage.getItem(private_content_expire_key); 7736 if (privateContentExpires && new Date(privateContentExpires) < new Date()) { 7737 browserStorage.removeItem(private_content_key); 7738 } 7739 7740 if (isInvalid && cookieVersion) { 7741 fetchPrivateContent([]); 7742 } else if (cookieVersion && storageVersion && cookieVersion === storageVersion) { 7743 const privateContent = JSON.parse(browserStorage.getItem(private_content_key)); 7744 if ( 7745 privateContent && 7746 privateContentExpires && 7747 privateContent.cart && 7748 privateContent.customer 7749 ) { 7750 dispatchPrivateContent(privateContent); 7751 } else { 7752 fetchPrivateContent([]); 7753 } 7754 } else { 7755 if (document.getElementById('default-section-data')) { 7756 const privateContent = JSON.parse(document.getElementById('default-section-data').innerText.trim()); 7757 dispatchPrivateContent(privateContent); 7758 } else { 7759 dispatchPrivateContent({}); 7760 } 7761 } 7762 7763 } catch (error) { 7764 console.warn('Error retrieving Private Content:', error); 7765 } 7766 } 7767 7768 hyva.alpineInitialized(loadSectionData) 7769 window.addEventListener('reload-customer-section-data', loadSectionData); 7770 7771 function dispatchPrivateContent(data) { 7772 const privateContentEvent = new CustomEvent("private-content-loaded", { 7773 detail: { 7774 data: data 7775 } 7776 }); 7777 window.dispatchEvent(privateContentEvent); 7778 } 7779 7780 function fetchPrivateContent(sections) { 7781 fetch(`${BASE_URL}customer/section/load/?sections=${encodeURIComponent(sections.join(','))}`, { 7782 method: 'GET', 7783 headers: { 7784 'Content-Type': 'application/json', 7785 'X-Requested-With': 'XMLHttpRequest' 7786 } 7787 }) 7788 .then(response => response.json()) 7789 .then( 7790 data => { 7791 if (data) { 7792 try { 7793 const browserStorage = hyva.getBrowserStorage(); 7794 7795 // merge new data preserving non-invalidated sections 7796 const oldSectionData = JSON.parse(browserStorage.getItem(private_content_key) || '{}') || {}; 7797 7798 if ((! data.cart || ! data.cart.cartId) && oldSectionData['checkout-data']) { 7799 delete oldSectionData['checkout-data']; 7800 } 7801 const newSectionData = Object.assign(oldSectionData, data); 7802 7803 dispatchPrivateContent(newSectionData); 7804 7805 // don't persist messages, they've been dispatched already 7806 if (newSectionData.messages && newSectionData.messages.messages ) { 7807 newSectionData.messages.messages = []; 7808 } 7809 7810 browserStorage.setItem(private_content_key, JSON.stringify(newSectionData)); 7811 7812 const expiresAt = new Date(Date.now() + (ttl * 1000)).toISOString(); 7813 browserStorage.setItem(private_content_expire_key, expiresAt); 7814 7815 const newCookieVersion = hyva.getCookie(private_content_version_key); 7816 browserStorage.setItem(private_content_version_key, newCookieVersion); 7817 7818 // We don't need the section_data_ids in Hyvä, but we store them for compatibility 7819 // with Luma Fallback. Otherwise, not all sections are loaded in Luma Checkout 7820 hyva.setCookie( 7821 section_data_ids_key, 7822 JSON.stringify( 7823 Object.keys(data).reduce((sectionDataIds, sectionKey) => { 7824 sectionDataIds[sectionKey] = data[sectionKey]['data_id']; 7825 return sectionDataIds; 7826 }, {}) 7827 ), 7828 false, 7829 true 7830 ); 7831 } catch (error) { 7832 console.warn("Couldn't store privateContent", error); 7833 } 7834 } 7835 } 7836 ); 7837 } 7838 } 7839</script>
vendor: 1 bytes, line 7839
7839
7840<script> 7841 (() => { 7842 document.addEventListener('submit', event => event.target.action = event.target.action.replace('%25uenc%25', hyva.getUenc())); 7843 })() 7844</script>
vendor: 1 bytes, line 7844
7844
7845<script> 7846 (events => { 7847 const dispatchUserInteractionEvent = () => { 7848 events.forEach(type => window.removeEventListener(type, dispatchUserInteractionEvent)) 7849 window.dispatchEvent(new Event('init-external-scripts')) 7850 }; 7851 events.forEach(type => window.addEventListener(type, dispatchUserInteractionEvent, {once: true, passive: true})) 7852 })(['touchstart', 'mouseover', 'wheel', 'scroll', 'keydown']) 7853</script>
vendor: 1 bytes, line 7853
7853
7854<script type="text/javascript"> 7855var ua = navigator.userAgent.toLowerCase(), 7856platform = navigator.platform.toLowerCase(); 7857platformName = ua.match(/ip(?:ad|od|hone)/) ? 'ios' : (ua.match(/(?:webos|android)/) || platform.match(/mac|win|linux/) || ['other'])[0], 7858isMobile = /ios|android|webos/.test(platformName); 7859 7860function inIframe () { 7861 try { 7862 return window.self !== window.top; 7863 } catch (e) { 7864 return true; 7865 } 7866} 7867 7868if (!isMobile && !inIframe()) { 7869window.$zopim||(function(d,s){var z=$zopim=function(c){z._.push(c)},$=z.s= 7870d.createElement(s),e=d.getElementsByTagName(s)[0];z.set=function(o){z.set. 7871_.push(o)};z._=[];z.set._=[];$.async=!0;$.setAttribute('charset','utf-8'); 7872$.src='//v2.zopim.com/?GGbnZXXcb7K0N0XyWST5IDJgmNTpnzTM';z.t=+new Date;$. 7873type='text/javascript';e.parentNode.insertBefore($,e)})(document,'script'); 7874} 7875</script>
7875 7876
7877<script type="text/javascript"> 7878var google_conversion_id = 1003136023; 7879var google_custom_params = window.google_tag_params; 7880var google_remarketing_only = true; 7881 7882</script>
vendor: 2 bytes, line 7882
7882
7883<script type="text/javascript" src="//www.googleadservices.com/pagead/conversion.js"> 7884</script>
7884 7885<noscript> 7886<div style="display:inline;"> 7887<img height="1" width="1" style="border-style:none;" alt="" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-amsrc="googleads.g.doubleclick.net/pagead/viewthroughconversion/1003136023/?value=0&guid=ON&script=0"/> 7888</div> 7889</noscript>
7889<script> 7890 function initConfigurableOptions(productId, optionConfig) { 7891 7892 function findPathParam(key) { 7893 const baseUrl = (BASE_URL.substring(0, 2) === '//' ? 'http:' : '') + BASE_URL; 7894 const baseUrlParts = (new URL(baseUrl)).pathname.replace(/\/$/, '').split('/'); 7895 const pathParts = window.location.pathname.split('/').slice(baseUrlParts.length + 3); 7896 for (let i = 0; i < pathParts.length; i += 2) { 7897 if (pathParts[i] === key && pathParts.length > i) { 7898 return pathParts[i + 1]; 7899 } 7900 } 7901 } 7902 7903 return { 7904 optionConfig, 7905 productId, 7906 itemId: (new URLSearchParams(window.location.search)).get('id') || findPathParam('id'), 7907 allowedAttributeOptions: [], 7908 selectedValues: [], 7909 init() { 7910 this.findAllowedAttributeOptions(); 7911 this.$nextTick(() => { 7912 if (typeof this.optionConfig.defaultValues === 'object') { 7913 for (const [attributeId, value] of Object.entries(this.optionConfig.defaultValues)) { 7914 this.changeOption(attributeId, value + ''); 7915 } 7916 } 7917 }); 7918 }, 7919 findSimpleIndex() { 7920 this.productIndex = this.calculateSimpleIndexForPartialSelection(this.selectedValues); 7921 }, 7922 calculateSimpleIndexForPartialSelection(selectedValues) { 7923 if (selectedValues.length === 0) return 0; 7924 let productIndexIds = Object.keys(this.optionConfig.index); 7925 Object.keys(this.optionConfig.attributes).forEach((attribute) => { 7926 const productsWithAttributeMatch = selectedValues[attribute] 7927 ? productIndexIds.filter((productIndex) => { 7928 return this.optionConfig.index[productIndex][attribute] === this.selectedValues[attribute] 7929 }) 7930 : []; 7931 7932 productIndexIds = productsWithAttributeMatch.length ? productsWithAttributeMatch : productIndexIds 7933 }) 7934 return productIndexIds[0]; 7935 }, 7936 calculateSimpleIndexForFullSelection(selectedValues) { 7937 const productIndexes = this.optionConfig.index; 7938 return Object.keys(productIndexes).find(productIndex => { 7939 const productCandidateOptions = productIndexes[productIndex]; 7940 7941 for (const productOption in productCandidateOptions) { 7942 if ( 7943 ! selectedValues[productOption] || 7944 selectedValues[productOption] !== productCandidateOptions[productOption] 7945 ) { 7946 return false; 7947 } 7948 } 7949 return productIndex; 7950 }); 7951 }, 7952 productIndex: 0, 7953 findAllowedAttributeOptions() { 7954 this.allowedAttributeOptions = this.calculateAllowedAttributeOptions(this.selectedValues); 7955 }, 7956 calculateAllowedAttributeOptions(selectedValues) { 7957 const allAttributes = this.optionConfig.attributes; 7958 const allAttributesSorted = Object.values(allAttributes).sort((a,b) => { 7959 return a.position - b.position 7960 }); 7961 7962 const newAllowedAttributeOptions = []; 7963 7964 allAttributesSorted.forEach(attribute => { 7965 const selectionWithoutAttr = Object.assign({}, this.removeAttrFromSelection(selectedValues, attribute.id)); 7966 const availableIndexes = this.calculateAvailableProductIndexes(selectionWithoutAttr); 7967 newAllowedAttributeOptions[attribute.id] = allAttributes[attribute.id].options.filter(option => { 7968 return !!option.products.find(product => { 7969 return availableIndexes.includes(product); 7970 }) 7971 }); 7972 }); 7973 return newAllowedAttributeOptions; 7974 }, 7975 calculateAvailableProductIndexes(selectedOptions) { 7976 if (Object.keys(selectedOptions).length === 0) { 7977 if (Object.values(this.optionConfig.salable || {}).length) { 7978 return [].concat.apply([], [].concat.apply([], Object.values(this.optionConfig.salable).map(Object.values))).filter((x, i, a) => a.indexOf(x) === i) 7979 } 7980 return Object.keys(this.optionConfig.index); 7981 } 7982 7983 const selectedIds = Object.keys(selectedOptions); 7984 if (Object.values(this.optionConfig.salable || {}).length) { 7985 const selectedOptionIndexes = selectedIds.map(attrId => { 7986 const optionValue = selectedOptions[attrId]; 7987 return this.optionConfig.salable[attrId] && this.optionConfig.salable[attrId][optionValue] || [] 7988 }) 7989 return selectedOptionIndexes.reduce((acc, optionIndexes) => { 7990 return acc.filter(index => optionIndexes.includes(index)); 7991 }); 7992 } else { 7993 const productIndexes = this.optionConfig.index; 7994 return Object.keys(productIndexes).filter(index => { 7995 for (const attrId of selectedIds) { 7996 if (productIndexes[index][attrId] !== `${selectedOptions[attrId]}`) return false 7997 } 7998 return true 7999 }); 8000 } 8001 }, 8002 findAttributeByOptionId(optionId) { 8003 for (const attributeId in this.optionConfig.attributes) { 8004 const attributeOptions = this.optionConfig.attributes[attributeId].options || []; 8005 if (attributeOptions.find(option => option.id === optionId)) { 8006 return attributeId; 8007 } 8008 } 8009 }, 8010 getAllowedAttributeOptions(attributeId) { 8011 return this.allowedAttributeOptions[attributeId] || [] 8012 }, 8013 getProductIdsForOption(option) { 8014 const attributeId = this.findAttributeByOptionId(option.id); 8015 const allOptions = this.optionConfig.attributes[attributeId]; 8016 const opt = (allOptions && allOptions.options || []).find(o => o.id === option.id); 8017 return opt && opt.products 8018 ? opt.products 8019 : []; 8020 }, 8021 findProductIdsForPartialSelection(optionSelection) { 8022 const candidateProducts = Object.values(optionSelection).reduce((candidates, optionId) => { 8023 const newCandidates = this.getProductIdsForOption({id: optionId}); 8024 return candidates === null 8025 ? newCandidates 8026 : candidates.filter(productId => newCandidates.includes(productId)); 8027 }, null); 8028 return candidateProducts || []; 8029 },
8030 findCheapestProductForPartialSelection(optionSelection) { 8031 const candidateProducts = this.findProductIdsForPartialSelection(optionSelection); 8032 return candidateProducts.reduce((cheapest, simpleIdx) => { 8033 // in the first iteration we start with simpleIdx as the currently cheapest product 8034 if (! this.optionConfig.optionPrices[cheapest]) return simpleIdx; 8035 const knownCheapestPrice = this.optionConfig.optionPrices[cheapest].finalPrice.amount; 8036 return knownCheapestPrice > this.optionConfig.optionPrices[simpleIdx].finalPrice.amount 8037 ? simpleIdx 8038 : cheapest; 8039 }, 0) 8040 }, 8041 findProductIdToUseForOptionPrice(option) { 8042 // try to find a product for a complete selection 8043 const attributeId = this.findAttributeByOptionId(option.id); 8044 const optionSelection = Object.assign({}, this.selectedValues, {[attributeId]: option.id}); 8045 const matchingSimpleIndex = this.calculateSimpleIndexForFullSelection(optionSelection); 8046 // if there is no complete selection, use the cheapest product for the option 8047 return matchingSimpleIndex || this.findCheapestProductForPartialSelection(optionSelection); 8048 }, 8049 getAttributeOptionLabel(option) { 8050 const optionProduct = this.findProductIdToUseForOptionPrice(option); 8051 if ((! optionProduct) || (optionProduct === this.productIndex)) { 8052 return option.label; 8053 } 8054 8055 const currentPrice = this.getOptionPriceAdjustmentBasePrice(); 8056 8057 if (this.optionConfig.optionPrices[optionProduct]) { 8058 const optionPrice = this.optionConfig.optionPrices[optionProduct].finalPrice.amount; 8059 if (optionPrice !== currentPrice){ 8060 return option.label + ' ' + hyva.formatPrice(optionPrice - currentPrice, true); 8061 } 8062 } 8063 return option.label; 8064 }, 8065 getOptionPriceAdjustmentBasePrice() { 8066 if (this.optionConfig.optionPrices[this.productIndex]) { 8067 return this.optionConfig.optionPrices[this.productIndex].finalPrice.amount 8068 } 8069 const cheapestForSelection = this.findCheapestProductForPartialSelection(this.selectedValues); 8070 return this.optionConfig.optionPrices[cheapestForSelection] 8071 ? this.optionConfig.optionPrices[cheapestForSelection].finalPrice.amount 8072 : this.optionConfig.prices.finalPrice.amount; // default price if no option selection 8073 }, 8074 clearOptionIfActive(optionId, value) { 8075 if (this.selectedValues[optionId] === value) { 8076 this.blurLabel() 8077 this.changeOption(optionId, '') 8078 } 8079 }, 8080 removeAttrFromSelection(selectedValues, attributeId) { 8081 attributeId = parseInt(attributeId); 8082 return selectedValues.reduce((newSelection, val, attr) => { 8083 if (attr !== attributeId) { 8084 newSelection[attr] = val; 8085 } 8086 return newSelection; 8087 }, []); 8088 }, 8089 changeOption(attributeId, value) { 8090 if (value === '') { 8091 this.selectedValues = this.removeAttrFromSelection(this.selectedValues, attributeId) 8092 } else if (value && this.getAllowedAttributeOptions(attributeId).find(option => option.id === value)) { 8093 this.selectedValues[attributeId] = value; 8094 } 8095 this.findSimpleIndex(); 8096 this.findAllowedAttributeOptions(); 8097 this.updatePrices(); 8098 this.updateGallery(); 8099 window.dispatchEvent( 8100 new CustomEvent( 8101 'configurable-selection-changed', 8102 { 8103 detail: { 8104 productId: this.productId, 8105 optionId: attributeId, 8106 value: value, 8107 productIndex: this.productIndex, 8108 selectedValues: this.selectedValues, 8109 candidates: this.findProductIdsForPartialSelection(this.selectedValues), 8110 } 8111 } 8112 ) 8113 ); 8114 }, 8115 calculateIsMinimalPrice() { 8116 return ( 8117 this.selectedValues.filter(value => !!value).length < 8118 Object.keys(this.optionConfig.attributes).length 8119 ); 8120 }, 8121 updatePrices() { 8122 const value = this.productIndex ? 8123 this.optionConfig.optionPrices[this.productIndex] : 8124 this.optionConfig.prices; 8125 window.dispatchEvent( 8126 new CustomEvent( 8127 "update-prices-" + this.productId, 8128 { 8129 detail: Object.assign( 8130 value, 8131 { isMinimalPrice: this.calculateIsMinimalPrice() } 8132 ) 8133 } 8134 ) 8135 ); 8136 }, 8137 updateGallery () { 8138 if (this.productIndex) { 8139 const images = this.optionConfig.images[this.productIndex]; 8140 images && window.dispatchEvent(new CustomEvent( 8141 "update-gallery", 8142 { detail: this.sortImagesByPosition(images) } 8143 )); 8144 } else { 8145 window.dispatchEvent(new Event("reset-gallery")); 8146 } 8147 }, 8148 sortImagesByPosition(images) { 8149 return images.sort((x, y) => { 8150 return x.position === y.position ? 0 : (parseInt(x.position) > parseInt(y.position) ? 1 : -1) 8151 }); 8152 }, 8153 onGetCartData(data) { 8154 }, 8155 preselectCartItems(data) { 8156 // pre-select options based on cart data for current (quote) itemId 8157 const cart = data && data.cart; 8158 if (cart && cart.items) { 8159 const cartItem = cart.items.find((item) => { 8160 return ( 8161 item.item_id === this.itemId 8162 && item.product_id === this.productId 8163 ) 8164 }); 8165 if (cartItem && cartItem.options && cartItem.options.length) { 8166 cartItem.options.map(option => { 8167 this.changeOption(option.option_id, option.option_value); 8168 }) 8169 } 8170 } 8171 }, 8172 preselectQuerystringItems() { 8173 // pre-select option like ?size=167 8174 const urlQueryParams = new URLSearchParams(window.location.search.replace('?','')); 8175 this.preselectItemsBasedOnLocation(attribute => urlQueryParams.get(attribute.code)); 8176 }, 8177 preselectLocationHashItems() { 8178 // pre-select option like #144=167 8179 const urlHashParams = new URLSearchParams(window.location.hash.replace('#','')); 8180 this.preselectItemsBasedOnLocation(attribute => urlHashParams.get(attribute.id)); 8181 }, 8182 preselectItemsBasedOnLocation(getLocationValue) { 8183 Object.values(this.optionConfig.attributes).map(attribute => { 8184 this.changeOption(attribute.id, getLocationValue(attribute)) 8185 }); 8186 } 8187 } 8188 } 8189 8190</script>
vendor: 1 bytes, line 8190
8190
8191<script> 8192 function initSwatchOptions(swatchConfig) { 8193 return { 8194 swatchConfig, 8195 getAttributeSwatchData(attributeId) { 8196 const swatchConfig = Object.assign({}, this.swatchConfig[attributeId]); 8197 swatchConfig['details'] = JSON.parse(swatchConfig['additional_data']); 8198 8199 return swatchConfig; 8200 }, 8201 getAllAttributeOptions(attributeId) { 8202 return ( 8203 this.optionConfig.attributes[attributeId] && 8204 this.optionConfig.attributes[attributeId].options 8205 ) || [] 8206 }, 8207 optionIsActive(attributeId, optionId) { 8208 // return true if a product with this option is in stock 8209 return !!this.getAllowedAttributeOptions(attributeId).find( 8210 option => option.id === optionId 8211 ) 8212 }, 8213 optionIsEnabled(attributeId, optionId) { 8214 // return true if a product with this option is enabled 8215 for (const productId in this.optionConfig.index) { 8216 if (this.optionConfig.index[productId][attributeId] === optionId) { 8217 return true; 8218 } 8219 } 8220 return false; 8221 }, 8222 mapSwatchTypeNumberToTypeCode(typeNumber) { 8223 switch ("" + typeNumber) { 8224 case "1": 8225 return "color" 8226 case "2": 8227 return "image" 8228 case "3": 8229 return "empty" 8230 case "0": 8231 default: 8232 return "text" 8233 } 8234 }, 8235 getTypeOfFirstOption(attributeId) { 8236 for (const optionId in this.swatchConfig[attributeId]) { 8237 const option = this.swatchConfig[attributeId][optionId]; 8238 if (typeof option.type !== 'undefined') { 8239 return this.mapSwatchTypeNumberToTypeCode(option.type); 8240 } 8241 } 8242 }, 8243 getVisualSwatchType(attributeId, targetOptionId) { 8244 // If a type configuration is present for the given option id, use it 8245 const config = this.swatchConfig[attributeId]; 8246 if (config[targetOptionId] && typeof config[targetOptionId].type !== 'undefined') { 8247 return this.mapSwatchTypeNumberToTypeCode(config[targetOptionId].type); 8248 } 8249 8250 // Otherwise - if no config is present for the target option - use the type of the first option 8251 // with a type property from the attribute, thus assuming its the same type as the target option. 8252 // (This edge case condition can occur on single swatch products if some options are not salable) 8253 return this.getTypeOfFirstOption(attributeId); 8254 }, 8255 getSwatchType(attributeId, optionId) { 8256 // Deserialize the attribute details the first time they are used 8257 if (this.swatchConfig[attributeId] && ! this.swatchConfig[attributeId].details) { 8258 this.swatchConfig[attributeId] = this.getAttributeSwatchData(attributeId); 8259 } 8260 const type = this.swatchConfig[attributeId] && 8261 this.swatchConfig[attributeId].details && 8262 this.swatchConfig[attributeId].details.swatch_input_type || 8263 "empty"; 8264 return type === 'visual' ? this.getVisualSwatchType(attributeId, optionId) : type; 8265 }, 8266 isTextSwatch(attributeId, optionId) { 8267 return this.getSwatchType(attributeId, optionId) === 'text'; 8268 }, 8269 isVisualSwatch(attributeId, optionId) { 8270 const type = this.getSwatchType(attributeId, optionId); 8271 8272 return ['image', 'color'].includes(type); 8273 }, 8274 getSwatchBackgroundStyle(attributeId, optionId) {
8275 const config = this.getSwatchConfig(attributeId, optionId); 8276 const type = this.getSwatchType(attributeId, optionId); 8277 8278 if (type === "color") { 8279 return 'background-color:' + config.value; 8280 } else if (type === "image") { 8281 return "background: #ffffff url('" + config.value + "') no-repeat center"; 8282 } else { 8283 return ''; 8284 } 8285 }, 8286 getSwatchText(attributeId, optionId) { 8287 const config = this.getSwatchConfig(attributeId, optionId); 8288 return config.label || config.value || this.getOptionLabelFromOptionConfig(attributeId, optionId); 8289 }, 8290 getOptionLabelFromOptionConfig(attributeId, optionId) { 8291 // Fallback if no value is present in swatchConfig data 8292 // Reference issue https://gitlab.hyva.io/hyva-themes/magento2-default-theme/-/issues/190 8293 const option = this.getAllAttributeOptions(attributeId).filter(option => option.id === optionId); 8294 return option && option[0] && option[0].label ||''; 8295 }, 8296 getSwatchConfig(attributeId, optionId) { 8297 return this.swatchConfig[attributeId] && this.swatchConfig[attributeId][optionId] 8298 ? this.swatchConfig[attributeId][optionId] 8299 : false; 8300 }, 8301 activeTooltipItem: false, 8302 tooltipPositionElement: false, 8303 isTooltipVisible() { 8304 return this.activeTooltipItem &&
8305 this.getSwatchConfig( 8306 this.activeTooltipItem.attribute, 8307 this.activeTooltipItem.item 8308 ); 8309 }, 8310 isFirstItemCol() { 8311 return this.activeTooltipItem.index === 0; 8312 }, 8313 getTooltipImageStyle(attributeId, optionId) { 8314 const config = this.getSwatchConfig(attributeId, optionId); 8315 const type = this.getSwatchType(attributeId, optionId); 8316 8317 if (type === "color") { 8318 return 'background-color:' + config.value + '; width: 110px; height: 90px;'; 8319 } else if (type === "image") { 8320 return "background: #ffffff url('" + config.thumb + 8321 "') center center no-repeat; width: 110px; height: 90px;"; 8322 } else { 8323 return 'display:none'; 8324 } 8325 }, 8326 getTooltipPosition() { 8327 return this.tooltipPositionElement ? 8328 `top: ${this.tooltipPositionElement.offsetTop}px;` + 8329 `left: ${ 8330 this.tooltipPositionElement.offsetLeft - ( 8331 this.tooltipPositionElement.closest('.snap') && 8332 this.tooltipPositionElement.closest('.snap').scrollLeft || 8333 0 8334 ) 8335 }px;` : '' 8336 }, 8337 getTooltipLabel() { 8338 return this.getSwatchConfig(this.activeTooltipItem.attribute, this.activeTooltipItem.item).label 8339 }, 8340 focusedLabel: false, 8341 focusLabel(optionId) { 8342 this.focusedLabel = optionId; 8343 }, 8344 blurLabel() { 8345 this.focusedLabel = false; 8346 }, 8347 showSwatches: false, 8348 initShowSwatchesIntersect() { 8349 if ('IntersectionObserver' in window && !window.scrollY) { 8350 let io = new IntersectionObserver( 8351 entries => { 8352 entries.map(entry => { 8353 if (entry.isIntersecting) { 8354 this.showSwatches = true; 8355 io.unobserve(this.$root); 8356 } 8357 }) 8358 } 8359 ); 8360 io.observe(this.$root); 8361 } else { 8362 this.showSwatches = true 8363 } 8364 } 8365 } 8366 } 8367</script>
8367 8368 8369 <section x-cloak x-data="{isLoading: false}" 8370 @amcaptcha-loading-start.window="isLoading = true" @amcaptcha-loading-stop.window="isLoading = false"> 8371 <div class="flex flex-row justify-center items-center w-full h-full fixed select-none z-50" 8372 style="left: 50%;top: 50%;transform: translateX(-50%) translateY(-50%);background: rgba(255,255,255,0.7);" 8373 x-show="isLoading" 8374 x-transition:enter="ease-out duration-200" 8375 x-transition:enter-start="opacity-0" 8376 x-transition:enter-end="opacity-100" 8377 x-transition:leave="ease-in duration-200" 8378 x-transition:leave-start="opacity-100" 8379 x-transition:leave-end="opacity-0"> 8380 <!-- By Sam Herbert (@sherb), for everyone. More @ http://goo.gl/7AJzbL --> 8381<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 57 57" stroke="currentColor" class="text-primary" width="57" height="57" role="img"> 8382 <g fill="none" fill-rule="evenodd"> 8383 <g transform="translate(1 1)" stroke-width="2"> 8384 <circle cx="5" cy="50" r="5"> 8385 <animate attributeName="cy" begin="0s" dur="2.2s" values="50;5;50;50" calcMode="linear" repeatCount="indefinite"/> 8386 <animate attributeName="cx" begin="0s" dur="2.2s" values="5;27;49;5" calcMode="linear" repeatCount="indefinite"/> 8387 </circle> 8388 <circle cx="27" cy="5" r="5"> 8389 <animate attributeName="cy" begin="0s" dur="2.2s" from="5" to="5" values="5;50;50;5" calcMode="linear" repeatCount="indefinite"/> 8390 <animate attributeName="cx" begin="0s" dur="2.2s" from="27" to="27" values="27;49;5;27" calcMode="linear" repeatCount="indefinite"/> 8391 </circle> 8392 <circle cx="49" cy="50" r="5"> 8393 <animate attributeName="cy" begin="0s" dur="2.2s" values="50;50;5;50" calcMode="linear" repeatCount="indefinite"/> 8394 <animate attributeName="cx" from="49" to="49" begin="0s" dur="2.2s" values="49;5;27;49" calcMode="linear" repeatCount="indefinite"/> 8395 </circle> 8396 </g> 8397 </g> 8398</svg> 8399 <div class="ml-10 text-primary text-xl"> 8400 Loading... </div> 8401</div> 8402 </section> 8403
8404<script> 8405 'use strict'; 8406 8407 function responseSerialize(response) { 8408 if (response.redirected) { 8409 window.location.href = response.url; 8410 } else if (response.ok) { 8411 return response.json(); 8412 } else { 8413 // Check if result is Promise then throw to new Error 8414 let defaultErrMsg = 'Something went wrong. Please contact the website admin for more information.', 8415 result; 8416 result = response.text(); 8417 if (typeof result?.then === 'function') { 8418 result.then(res => { 8419 let errorMessage; 8420 try { 8421 errorMessage = JSON.parse(res); 8422 errorMessage = errorMessage?.message ? errorMessage.message : defaultErrMsg; 8423 } catch (e) { 8424 errorMessage = defaultErrMsg; 8425 } 8426 window.dispatchMessages([ 8427 { 8428 type: 'error', 8429 text: errorMessage 8430 } 8431 ], 3000); 8432 }); 8433 } else { 8434 throw new Error(defaultErrMsg); 8435 } 8436 } 8437 } 8438 8439 if (typeof window.buildRestAPIUrl !== 'function') { 8440 window.buildRestAPIUrl = function (url, params = {}) { 8441 const method = 'rest', 8442 storeCode = 'default', 8443 version = 'V1', 8444 serviceUrl = ':method/:storeCode/:version'; 8445 8446 let urlParts; 8447 8448 params.method = method; 8449 params.storeCode = storeCode; 8450 params.version = version; 8451 8452 url = serviceUrl + url; 8453 8454 urlParts = url.split('/'); 8455 urlParts = urlParts.filter(Boolean); 8456 8457 Object.entries(urlParts).forEach (entry => { 8458 let [key, part] = entry; 8459 part = part.replace(':', ''); 8460 8461 if (params[part] !== undefined) { 8462 urlParts[key] = params[part]; 8463 } 8464 }); 8465 8466 return urlParts.join('/'); 8467 } 8468 } 8469 8470 if (typeof window.isObjectEmpty !== 'function') { 8471 window.isObjectEmpty = function (obj) { 8472 return ( 8473 Object.prototype.toString.call(obj) === '[object Object]' && 8474 JSON.stringify(obj) === '{}' 8475 ); 8476 } 8477 } 8478 8479 if (typeof window.mergeDeep !== 'function') { 8480 /** 8481 * Deep merge two objects. 8482 * 8483 * @param target 8484 * @param sources 8485 * @returns {*} 8486 */ 8487 window.mergeDeep = (target, ...sources) => { 8488 /** 8489 * Simple object check. 8490 * 8491 * @param item 8492 * @returns {boolean} 8493 */ 8494 const isObject = (item) => { 8495 return (item && typeof item === 'object' && !Array.isArray(item)); 8496 }; 8497 8498 if (!sources.length) return target; 8499 const source = sources.shift(); 8500 8501 if (isObject(target) && isObject(source)) { 8502 for (const key in source) { 8503 if (isObject(source[key])) { 8504 if (!target[key]) Object.assign(target, { [key]: {} }); 8505 mergeDeep(target[key], source[key]); 8506 } else { 8507 Object.assign(target, { [key]: source[key] }); 8508 } 8509 } 8510 } 8511 8512 return mergeDeep(target, ...sources); 8513 } 8514 } 8515</script>
8515 8516 8517
8517<script> 8518 window.addEventListener('message', function (event) { 8519 if (event.data === 'ajax-cart-message') { 8520 window.dispatchEvent(new CustomEvent("ajax-cart-popup")); 8521 window.dispatchEvent(new CustomEvent("ajax-cart-popup-close-iframe")); 8522 window.dispatchEvent(new CustomEvent("reload-customer-section-data")); 8523 } 8524 if (event.data === 'ajax-cart-popup-close') { 8525 window.dispatchEvent(new CustomEvent("ajax-cart-popup-close")); 8526 } 8527 8528 }, false); 8529 </script>
8529 8530 <div x-data="{ show: false }" x-show="show" x-cloak 8531 @ajax-cart-popup.window="show = true" 8532 @ajax-cart-popup-close.window="show = false" 8533 > 8534 <div class="fixed inset-0 flex items-center justify-center text-left bg-black bg-opacity-80 z-50"> 8535 <div class="inline-block max-h-[70%] md:max-h-[100%] overflow-auto bg-white shadow-xl 8536 rounded-lg m-1.5 max-w-[800px]" 8537 @click.outside="show = false" x-show="show" none > 8538 <button @click="show=false" 8539 class="p-2 text-gray-600 hover:text-black float-right" 8540 title="Close (Esc)" 8541 > 8542 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" 8543 width="20" height="20"> 8544 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" 8545 d="M6 18L18 6M6 6l12 12"></path> 8546 </svg> 8547 </button> 8548 <div class="md:w-[515px]" id="bss_ajaxcart_popup"> 8549 <div class="p-6" id="popup-content"></div> 8550 </div> 8551 </div> 8552 </div 8553 </div> 8554</div> 8555<div x-data="{open: false,url:''}" x-show="open" x-cloak 8556 @ajax-cart-popup-close-iframe.window="open = false" 8557 @ajax-cart-popup-iframe.window="open = $event.detail.open,url = $event.detail.url"> 8558 <div class="fixed inset-0 flex items-center justify-center text-left bg-black bg-opacity-80 z-50"> 8559 <div class="inline-block overflow-auto bg-white shadow-xl 8560 rounded-lg m-1.5 max-w-[900px] w-full" 8561 @click.outside="open = false" x-show="open" none > 8562 <button @click="open=false" class="p-2 text-gray-300 hover:text-black float-right"> 8563 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" 8564 width="24" height="24"> 8565 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" 8566 d="M6 18L18 6M6 6l12 12"></path> 8567 </svg> 8568 </button> 8569 <div id="bss_ajaxcart_popup-iframe"> 8570 <iframe id="popup-content-iframe" class="w-full min-h-[400px] lg:h-[500px]" 8571 allowfullscreen frameborder="0" allow="autoplay" :src="url"> 8572 </iframe> 8573 </div> 8574 </div> 8575 </div> 8576</div>
8577<script> 8578 'use strict'; 8579 8580 (function () { 8581 const modals = []; 8582 const excludedFromFocusTrapping = new Set(); 8583 8584 function trapFocusInNextModalWithOverlay() { 8585 for (let idx = modals.length -1; idx >= 0; idx--) { 8586 const nextOnStack = modals[idx]; 8587 const nextDialogElement = nextOnStack.instance.$refs[nextOnStack.name]; 8588 if (! isOverlayDisabled(nextDialogElement)) { 8589 hyva.trapFocus(nextDialogElement); 8590 break; 8591 } 8592 } 8593 } 8594 8595 function focusables(dialogElement) { 8596 const selector = 'button, [href], input, textarea, select, details, [tabindex]:not([tabindex="-1"])'; 8597 return Array.from(dialogElement.querySelectorAll(selector)) 8598 .filter(el => !el.hasAttribute('disabled')); 8599 } 8600 8601 function firstVisible(elements) { 8602 const a = Array.from(elements); 8603 for (let i = 0; i < a.length; i++) { 8604 if (a[i].offsetWidth || a[i].offsetHeight || a[i].getClientRects().length) return a[i]; 8605 } 8606 return null; 8607 } 8608 8609 function isInViewport(element) { 8610 const rect = element && element.getBoundingClientRect(); 8611 return rect && 8612 rect.top >= 0 && 8613 rect.left >= 0 && 8614 rect.right <= window.innerWidth && 8615 rect.bottom <= window.innerHeight; 8616 } 8617 8618 function setFocusAfterTransition(dialogElement, duration) { 8619 const nested = Array.from(dialogElement.querySelectorAll('[role="dialog"]')); 8620 const candidates = Array.from(dialogElement.querySelectorAll('[x-focus-first]')); 8621 next: for (let candidate of candidates) { 8622 for (let child of nested) { 8623 if (child.contains(candidate)) continue next; 8624 } 8625 setTimeout(() => candidate.focus(), 50); 8626 break; 8627 } 8628 window.setTimeout(() => { 8629 const focusElement = firstVisible(dialogElement.querySelectorAll('[x-focus-first]')) || 8630 focusables(dialogElement)[0] || 8631 null; 8632 focusElement && isInViewport(focusElement) && focusElement.focus(); 8633 }, Math.max(1, duration)); 8634 } 8635 8636 function determineTrigger($refs, dialog, trigger) { 8637 if (typeof trigger === 'undefined' && typeof dialog === 'object' && dialog.target instanceof HTMLElement) { 8638 return dialog.target; 8639 } 8640 if (typeof dialog === 'string' && typeof trigger === 'object' && trigger.target instanceof HTMLElement) { 8641 return trigger.target; 8642 } 8643 if (typeof trigger === 'string') { 8644 try { 8645 return $refs[trigger] || document.querySelector(trigger) 8646 } catch (e) {} 8647 } 8648 if (trigger instanceof Element) { 8649 return trigger; 8650 } 8651 8652 return null; 8653 } 8654 8655 function isOverlayDisabled(dialog) { 8656 return dialog && dialog.hasAttribute('x-no-overlay') 8657 } 8658 8659 function areRemainingModalsWithoutOverlay(modals) 8660 { 8661 const overflowDisabled = modals.map(modal => modal.instance.$refs[modal.name]).filter(isOverlayDisabled); 8662 8663 return overflowDisabled.length === modals.length; 8664 } 8665 8666 window.hyva.modal = function(options) { 8667 8668 const config = Object.assign({ 8669 dialog: 'dialog', duration: 300, transitionEnter: 'transition ease-out duration-300', 8670 transitionEnterStart: 'opacity-0', 8671 transitionEnterEnd: 'opacity-100', 8672 transitionLeave: 'transition ease-in duration-300', 8673 transitionLeaveStart: 'opacity-100', 8674 transitionLeaveEnd: 'opacity-0', 8675 }, options); 8676 let lastHide = 0; 8677 8678 return { 8679 opened: {}, 8680 show(dialog, trigger) { 8681 const focusTargetAfterHide = determineTrigger(this.$refs, dialog, trigger); 8682 const name = typeof dialog === 'string' ? dialog : config.dialog; 8683 const dialogElement = this.$refs[name]; 8684 if (! dialogElement) { 8685 return; 8686 } 8687 const useOverlay = ! dialogElement.hasAttribute('x-no-overlay'); 8688 8689 dialogElement.scrollTop = 0; 8690 8691 if (this.opened[name]) { 8692 return; 8693 } 8694 8695 if (focusTargetAfterHide) { 8696 focusTargetAfterHide.setAttribute('aria-expanded', 'true'); 8697 } 8698 8699 this.opened[name] = true; 8700 useOverlay && this.$nextTick(() => hyva.trapFocus(dialogElement)); 8701 setFocusAfterTransition(dialogElement, config.duration); 8702 8703 const frame = {name, instance: this, focusTarget: focu
8703sTargetAfterHide, time: Date.now()}; 8704 8705 modals.push(frame); 8706 if (useOverlay) { 8707 document.body.classList.add('overflow-hidden'); 8708 } 8709 return new Promise(resolve => frame.resolve = resolve); 8710 }, 8711 cancel() { 8712 this.hide(false); 8713 }, 8714 ok() { 8715 this.hide(true); 8716 }, 8717 hide(value) { 8718 if (Date.now() - lastHide < config.duration) { 8719 return; 8720 } 8721 lastHide = Date.now(); 8722 8723 const modal = modals.pop() || {}; 8724 const name = modal.name; 8725 this.opened[name] = false; 8726 hyva.releaseFocus(modal.instance.$refs[modal.name]) 8727 trapFocusInNextModalWithOverlay(); 8728 8729 const nextFocusAfterHide = modal.focusTarget; 8730 nextFocusAfterHide && setTimeout(() => { 8731 nextFocusAfterHide.setAttribute('aria-expanded', 'false'); 8732 nextFocusAfterHide.focus() 8733 }, config.duration); 8734 8735 if (modals.length === 0 || areRemainingModalsWithoutOverlay(modals)) { 8736 document.body.classList.remove('overflow-hidden'); 8737 } 8738 8739 modal.resolve(value); 8740 }, 8741 overlay(dialog) { 8742 const name = typeof dialog === 'string' ? dialog : config.dialog; 8743 return { 8744 ['x-show']() { 8745 return this.opened[name] 8746 }, 8747 ['x-transition:enter']: config.transitionEnter, 8748 ['x-transition:enter-start']: config.transitionEnterStart, 8749 ['x-transition:enter-end']: config.transitionEnterEnd, 8750 ['x-transition:leave']: config.transitionLeave, 8751 ['x-transition:leave-start']: config.transitionLeaveStart, 8752 ['x-transition:leave-end']: config.transitionLeaveEnd, 8753 ['@hyva-modal-show.window'](event) { 8754 event.detail && event.detail.dialog === name && this.show(name, event.detail.focusAfterHide) 8755 } 8756 }; 8757 } 8758 }; 8759 } 8760 8761 window.hyva.modal.peek = () => modals.length > 0 && modals[modals.length -1] 8762 8763 window.hyva.modal.pop = function () { 8764 if (modals.length > 0) { 8765 const modal = modals[modals.length -1]; 8766 modal.instance.hide(); 8767 } 8768 } 8769 8770 window.hyva.modal.excludeSelectorsFromFocusTrap = function (selectors) { 8771 typeof selectors === 'string' || selectors instanceof String 8772 ? excludedFromFocusTrapping.add(selectors) 8773 : selectors.map(selector => excludedFromFocusTrapping.add(selector)); 8774 } 8775 8776 window.hyva.modal.eventListeners = { 8777 keydown: event => { 8778 if (event.key === 'Escape') { 8779 window.hyva.modal.pop(); 8780 } 8781 }, 8782 click: event => { 8783 if (modals.length > 0) { 8784 const modal = modals[modals.length -1]; 8785 const dialog = modal.instance.$refs[modal.name]; 8786 if (modal.time + 50 < Date.now() && // if last click processing is more than 50ms ago 8787 ! isOverlayDisabled(dialog) && // if dialog has overlay 8788 ! dialog.contains(event.target)) { // if click is outside of dialog 8789 modal.instance.hide(); 8790 } 8791 } 8792 } 8793 }; 8794 8795 document.addEventListener('keydown', window.hyva.modal.eventListeners.keydown); 8796 8797 document.addEventListener('click', window.hyva.modal.eventListeners.click); 8798 })(); 8799</script>
8799 8800
8801<script> 8802 'use strict'; 8803 (() => { 8804 function _calculateStrength({elementID, valid}) { 8805 const password = document.getElementById(elementID), 8806 emailElm = document.getElementById('email_address'); 8807 let displayScore; 8808 // Display score is based on combination of whether password is empty, valid, and zxcvbn strength 8809 if (!password || !password.value) { 8810 displayScore = 0; 8811 } else { 8812 // We should only perform this check in case there is an email field on screen 8813 if (emailElm && password.value && emailElm.value && 8814 password.value.toLowerCase() === emailElm.value.toLowerCase()) { 8815 displayScore = 1; 8816 } else { 8817 const zxcvbnScore = zxcvbn(password.value).score; 8818 displayScore = valid && zxcvbnScore > 0 ? zxcvbnScore : 1; 8819 } 8820 } 8821 8822 _displayStrength(displayScore); 8823 } 8824 8825 function _displayStrength(displayScore) { 8826 let strengthLabel = '', 8827 className; 8828 8829 switch (displayScore) { 8830 case 0: 8831 strengthLabel = "No Password"; 8832 className = 'password-none'; 8833 break; 8834 8835 case 1: 8836 strengthLabel = "Weak â"; 8837 className = 'password-weak'; 8838 break; 8839 8840 case 2: 8841 strengthLabel = "Medium ð"; 8842 className = 'password-medium'; 8843 break; 8844 8845 case 3: 8846 strengthLabel = "Strong ð"; 8847 className = 'password-strong'; 8848 break; 8849 8850 case 4: 8851 strengthLabel = "Very Strong ð"; 8852 className = 'password-strong'; 8853 break; 8854 } 8855 const meterElm = document.getElementById('password-strength-meter-container'), 8856 meterLabelElm = document.getElementById('password-strength-meter-label'); 8857 meterElm.className = ''; 8858 meterElm.classList.add(className); 8859 meterLabelElm.textContent = strengthLabel; 8860 } 8861 8862 let loading = false; 8863 const callbacks = []; 8864 8865 function loadZxcvbn(cb) { 8866 callbacks.push(cb); 8867 if (loading) return; 8868 loading = true; 8869 8870 const script = document.createElement('script'); 8871 script.type = 'text/javascript'; 8872 script.src = 'https\u003A\u002F\u002Fwww.skintrends.com\u002Fstatic\u002Fversion1789630527\u002Ffrontend\u002F
8872Hyva\u002Fskintrends\u002Fen_US\u002Fjs\u002Fzxcvbn.min.js'; 8873 script.async = true; 8874 script.onload = () => callbacks.forEach(cb => cb()); 8875 document.head.appendChild(script); 8876 } 8877 8878 window.addEventListener('password-validate', function (evt) { 8879 const meterElm = document.getElementById('password-strength-meter-container'), 8880 meterLabelElm = document.getElementById('password-strength-meter-label'); 8881 if (meterElm && meterLabelElm) { 8882 if (evt.detail && evt.detail.elementID) { 8883 const cb = () => _calculateStrength(evt.detail); 8884 window.zxcvbn ? cb() : loadZxcvbn(cb) 8885 } 8886 } 8887 }); 8888 8889 document.addEventListener('DOMContentLoaded', () => { 8890 hyva && hyva.formValidation && hyva.formValidation.addRule('password-strength', function( 8891 value, options, field, context 8892 ) { 8893 let isValid = true; 8894 let counter = 0; 8895 let message = "Minimum length of this field must be equal or greater than 8 symbols. " + 8896 "Leading and trailing spaces will be ignored."; 8897 const minCharacterSets = options.minCharacterSets !== undefined ? options.minCharacterSets : 1; 8898 const minlength = options.minlength; 8899 if (value.length > 0) { 8900 if (value.length < minlength) { 8901 isValid = false; 8902 } else { 8903 if (value.match(/\d+/)) { 8904 counter++; 8905 } 8906 8907 if (value.match(/[a-z]+/)) { 8908 counter++; 8909 } 8910 8911 if (value.match(/[A-Z]+/)) { 8912 counter++; 8913 } 8914 8915 if (value.match(/[^a-zA-Z0-9]+/)) { 8916 counter++; 8917 } 8918 8919 if (counter < minCharacterSets) { 8920 isValid = false; 8921 message='Minimum of different classes of characters in password is 3. ' + 8922 'Classes of characters: Lower Case, Upper Case, Digits, Special Characters.' 8923 } 8924 } 8925 } 8926 8927 queueMicrotask(() => { 8928 window.dispatchEvent(new CustomEvent('password-validate', { detail: { 8929 elementID: field.element.id || 'password', 8930 valid: isValid 8931 }}) 8932 ); 8933 }); 8934 8935 if (!isValid) { 8936 return hyva.str(message); 8937 } 8938 return true; 8939 }); 8940 }) 8941 })(); 8942 8943</script>
8943 8944<div x-cloak x-data="initAmBanners()" x-init="initBanners()" @ampromo-load-banner.window="handleLoadBanner($event.detail)"> 8945 <div class="flex flex-row justify-center items-center w-full h-full fixed select-none z-50" 8946 style="left: 50%;top: 50%;transform: translateX(-50%) translateY(-50%);background: rgba(255,255,255,0.7);" 8947 x-show="isLoading" 8948 x-transition:enter="ease-out duration-200" 8949 x-transition:enter-start="opacity-0" 8950 x-transition:enter-end="opacity-100" 8951 x-transition:leave="ease-in duration-200" 8952 x-transition:leave-start="opacity-100" 8953 x-transition:leave-end="opacity-0"> 8954 <!-- By Sam Herbert (@sherb), for everyone. More @ http://goo.gl/7AJzbL --> 8955<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 57 57" stroke="currentColor" class="text-primary" width="57" height="57" role="img"> 8956 <g fill="none" fill-rule="evenodd"> 8957 <g transform="translate(1 1)" stroke-width="2"> 8958 <circle cx="5" cy="50" r="5"> 8959 <animate attributeName="cy" begin="0s" dur="2.2s" values="50;5;50;50" calcMode="linear" repeatCount="indefinite"/> 8960 <animate attributeName="cx" begin="0s" dur="2.2s" values="5;27;49;5" calcMode="linear" repeatCount="indefinite"/> 8961 </circle> 8962 <circle cx="27" cy="5" r="5"> 8963 <animate attributeName="cy" begin="0s" dur="2.2s" from="5" to="5" values="5;50;50;5" calcMode="linear" repeatCount="indefinite"/> 8964 <animate attributeName="cx" begin="0s" dur="2.2s" from="27" to="27" values="27;49;5;27" calcMode="linear" repeatCount="indefinite"/> 8965 </circle> 8966 <circle cx="49" cy="50" r="5"> 8967 <animate attributeName="cy" begin="0s" dur="2.2s" values="50;50;5;50" calcMode="linear" repeatCount="indefinite"/> 8968 <animate attributeName="cx" from="49" to="49" begin="0s" dur="2.2s" values="49;5;27;49" calcMode="linear" repeatCount="indefinite"/> 8969 </circle> 8970 </g> 8971 </g> 8972</svg> 8973 <div class="ml-10 text-primary text-xl"> 8974 Loading... </div> 8975</div> 8976</div>
8977<script> 8978 'use strict'; 8979 8980 function initAmBanners() { 8981 return { 8982 containers: [], 8983 options: { 8984 sections: [], 8985 content: [], 8986 banners: [], 8987 injectorSectionId: null, 8988 injectorParams: {} 8989 }, 8990 isLoading: true, 8991 injectorResolver: {}, 8992 8993 initBanners: function () { 8994 this.options = {"sections":{"17":[280,320,285,313,281,293,299,301,303,304,309,311,312,315,324,327,331,332,333,334,335,336,348],"6":[278],"19":[257,329],"5":[275],"18":[330],"9":[347],"0":[244]},"content":{"280":"\n<div data-banner-id=\"280\">\n <p><img src=\"https:\/\/www.skintrends.com\/media\/wysiwyg\/20_off_Price_Reflects_dicountfinal.jpg\" alt=\"\"><\/p> <\/div>\n","320":"\n<div data-banner-id=\"320\">\n <p><img src=\"https:\/\/www.skintrends.com\/media\/wysiwyg\/10_off_use_code.jpg\" alt=\"\"><\/p> <\/div>\n","278":"\n<div data-banner-id=\"278\">\n <p><a href=\"https:\/\/www.skintrends.com\/expert-help\/\"> <img src=\"https:\/\/www.skintrends.com\/media\/wysiwyg\/banners\/Banners_jan_2019.jpg\" alt=\"\" loading=\"lazy\" > <\/a> <\/p> \n<div class=\"block\">\n <div class=\"amasty-banner-products\">\n <div class=\"product-slider\">\n <div>\n <\/div>\n <\/div>\n <\/div>\n<\/div>\n <\/div>\n","285":"\n<div data-banner-id=\"285\">\n <p><img src=\"https:\/\/www.skintrends.com\/media\/wysiwyg\/New_Clients_20_off_USe_Code.jpg\" alt=\"\" width=\"2792\" height=\"426\"><\/p> <\/div>\n","313":"\n<div data-banner-id=\"313\">\n <p><img src=\"https:\/\/www.skintrends.com\/media\/wysiwyg\/Add_to_cart.jpg\" alt=\"\"><\/p> <\/div>\n","257":"\n<div data-banner-id=\"257\">\n <p><a href=\"http:\/\/www.skintrends.com\/unauthorized-dealer-warning\"><img src=\"https:\/\/www.skintrends.com\/media\/wysiwyg\/banners\/authorized-store-banner.jpg\" alt=\"\"><\/a><\/p> <\/div>\n","275":"\n<div data-banner-id=\"275\">\n <p><a href=\"https:\/\/www.skintrends.com\/expert-help\/\"> <img src=\"https:\/\/www.skintrends.com\/media\/wysiwyg\/banners\/Banners_jan_2019.jpg\" alt=\"\"> <\/a> <\/p> <\/div>\n","281":"\n<div data-banner-id=\"281\">\n <p><img src=\"https:\/\/www.skintrends.com\/media\/wysiwyg\/Cellex_C_free_gift_1.jpg\" alt=\"\" width=\"1280\" height=\"195\"><\/p> <\/div>\n","293":"\n<div data-banner-id=\"293\">\n <p><img src=\"https:\/\/www.skintrends.com\/media\/wysiwyg\/Registered_clients_log_in-final_2.jpg\" alt=\"\" width=\"2792\" height=\"426\"><\/p> <\/div>\n","299":"\n<div data-banner-id=\"299\">\n <p><img src=\"https:\/\/www.skintrends.com\/media\/wysiwyg\/20_off_USe_Code_2.jpg\" alt=\"\" width=\"2792\" height=\"426\"><\/p> <\/div>\n","301":"\n<div data-banner-id=\"301\">\n <p><img src=\"https:\/\/www.skintrends.com\/media\/wysiwyg\/20_off_USe_Code_2.jpg\" alt=\"\" width=\"2792\" height=\"426\"><\/p> <\/div>\n","303":"\n<div data-banner-id=\"303\">\n <p><img src=\"https:\/\/www.skintrends.com\/media\/wysiwyg\/150_Image_Free_Gift_lip.jpg\" alt=\"\" width=\"1422\" height=\"216\"><\/p> <\/div>\n","304":"\n<div data-banner-id=\"304\">\n <p><img src=\"https:\/\/www.skintrends.com\/media\/wysiwyg\/20_off_USe_Code_1.jpg\" alt=\"\" width=\"1422\" height=\"216\"><\/p> <\/div>\n","309":"\n<div data-banner-id=\"309\">\n <p><img src=\"https:\/\/www.skintrends.com\/media\/wysiwyg\/New_Clients_20_off_USe_Code_1.jpg\" alt=\"\" width=\"2792\" height=\"426\"><\/p> <\/div>\n","311":"\n<div data-banner-id=\"311\">\n <p><a href=\"https:\/\/www.skintrends.com\/osmosis-beauty-pure-lip-balm-8-value-when-you-spend-75-00-or-more-on-osmosis-skincare-products.html\"><img src=\"https:\/\/www.skintrends.com\/media\/wysiwyg\/Osmosis_Lip.jpg\" alt=\"\"><\/a><\/p> <\/div>\n","312":"\n<div data-banner-id=\"312\">\n <p><img src=\"https:\/\/www.skintrends.com\/media\/wysiwyg\/15_off_USe_Code.jpg\" alt=\"\"><\/p> <\/div>\n","315":"\n<div data-banner-id=\"315\">\n <p><img src=\"https:\/\/www.skintrends.com\/media\/wysiwyg\/20_off_USe_Code_2.jpg\" alt=\"\" width=\"2792\" height=\"426\"><\/p> <\/div>\n","324":"\n<div data-banner-id=\"324\">\n <p><img src=\"https:\/\/www.skintrends.com\/media\/wysiwyg\/30_off_Price_Reflects_dicount_copy.jpg\" alt=\"\" width=\"1280\" height=\"195\"><\/p> <\/div>\n","327":"\n<div data-banner-id=\"327\">\n <p><img src=\"https:\/\/www.skintrends.com\/media\/wysiwyg\/20_off_USe_Code_1.jpg\" alt=\"\" width=\"1422\" height=\"216\"><\/p> <\/div>\n","329":"\n<div data-banner-id=\"329\">\n <p><a href=\"\/coupon-codes\"><img src=\"https:\/\/www.skintrends.com\/media\/wysiwyg\/Skintrends_have_discount_or_gift.jpg\" alt=\"\"><\/a><\/p> <\/div>\n","330":"\n<div data-banner-id=\"330\">\n <p><img src=\"https:\/\/www.skintrends.com\/media\/wysiwyg\/Skintrends_Call_or_chat-2.jpg\" alt=\"\"><\/p> <\/div>\n","331":"\n<div data-banner-id=\"331\">\n <p><img src=\"https:\/\/www.skintrends.com\/media\/wysiwyg\/10_off_use_code.jpg\" alt=\"\"><\/p> <\/div>\n","332":"\n<div data-banner-id=\"332\">\n <p><img src=\"https:\/\/www.skintrends.com\/media\/wysiwyg\/15_off_USe_Code.jpg\" alt=\"\"><\/p> <\/div>\n","333":"\n<div data-banner-id=\"333\">\n <p><img src=\"https:\/\/www.skintrends.com\/media\/wysiwyg\/20_off_USe_Code_1.jpg\" alt=\"\"><\/p> <\/div>\n","334":"\n<div data-banner-id=\"334\">\n <p><img src=\"https:\/\/www.skintrends.com\/media\/wysiwyg\/15_off_USe_Code.jpg\" alt=\"\"><\/p> <\/div>\n","335":"\n<div data-banner-id=\"335\">\n <p><img src=\"https:\/\/www.skintrends.com\/media\/wysiwyg\/15_off_USe_Code_2.jpg\" alt=\"\" width=\"2792\" height=\"426\"><\/p> <\/div>\n","336":"\n<div data-banner-id=\"336\">\n <p><a href=\"https:\/\/www.skintrends.com\/customer\/account\/login\/\"><img src=\"https:\/\/www.skintrends.com\/media\/wysiwyg\/Registered_clients_log_in_for_promotional.jpg\" alt=\"\"><\/a><a href=\"https:\/\/skintrends.com\/free-gifts-rhonda-allison\" rel=\"nofollow\"><img src=\"https:\/\/www.skintrends.com\/media\/wysiwyg\/click_for_gift-1_1.jpg\" alt=\"\"><\/a><\/p> <\/div>\n","347":"\n<div data-banner-id=\"347\">\n <img src='https:\/\/www.skintrends.com\/media\/amasty\/ampromobanners\/banner__banner__Skintrends_have_discount_or_gift_1_.jpg' alt='' \/> <\/div>\n","348":"\n<div data-banner-id=\"348\">\n <p><img src=\"https:\/\/www.skintrends.com\/media\/wysiwyg\/20_off_USe_Code_1.jpg\" alt=\"\" width=\"1280\" height=\"195\"><\/p> <\/div>\n","244":"\n<div data-banner-id=\"244\">\n <div class=\"flex flex-col md:flex-row justify-center md:gap-8 max-w-[1170px] m-auto p-4 mt-4\">\r\n <div class=\"col-md-6 mb-2 md:mb-0\">\r\n <a href=\"\/coupon-codes\/\">\r\n <img src=\"https:\/\/www.skintrends.com\/media\/wysiwyg\/banners\/Coupon.jpg\" alt=\"\" loading=\"lazy\"\/>\r\n <\/a>\r\n <\/div>\r\n <div class=\"col-md-6\">\r\n <a href=\"\/shipping-policy\/\">\r\n<img src=\"https:\/\/www.skintrends.com\/media\/wysiwyg\/banners\/shipping_cart.png\" alt=\"\" loading=\"lazy\"\/>\r\n <\/a>\r\n <\/div>\r\n<\/div> <\/div>\n"},"injectorParams":{"containerSelector":".products-grid .product-items","itemSelector":".shop-by-product","banners":[]},"banners":[],"injectorSectionId":14}; 8995 this.injectorResolver = amBannerInjectorResolver?.(); 8996 8997 this.insertBanners(); 8998 this.isLoading = false;
8999 }, 9000 9001 insertBanners: function () { 9002 document.querySelectorAll('[data-role="amasty-banner-container"]').forEach((container, index) => { 9003 const sectionId = container.getAttribute('data-position'); 9004 if (sectionId) { 9005 container.setAttribute('x-intersect.once', `$dispatch('ampromo-load-banner', {section: '${sectionId}', index: ${index}});`); 9006 } else { 9007 container.setAttribute('x-intersect.once', `$dispatch('ampromo-load-banner', {section: null, index: ${index}});`); 9008 } 9009 container.setAttribute('x-data', '{}'); 9010 this.containers.push(container); 9011 }); 9012 }, 9013 handleLoadBanner(data){ 9014 const {section, index} = data; 9015 if(section !== null && typeof section !== 'undefined' && 9016 index !== null && typeof index !== 'undefined'){ 9017 this.loadBannerBySection(section, this.containers[index]); 9018 } else if(index !== null && typeof index !=='undefined'){ 9019 this.loadBannerByBannerId(this.containers[index]); 9020 } 9021 }, 9022 getBanners: function (bannerId) { 9023 if (this.options.banners.indexOf(bannerId) === -1) { 9024 return []; 9025 } 9026 const insertedBanner = this.banners.find((element) => { 9027 return element === bannerId; 9028 }); 9029 9030 return content[insertedBanner]; 9031 }, 9032 9033 getSectionBanners: function (section) { 9034 if (!(section in this.options.sections)) { 9035 return []; 9036 } 9037 9038 return this.options.sections[section].map((id) => { 9039 return this.options.content[id]; 9040 }); 9041 }, 9042 9043 loadBannerBySection: function (sectionId, container) { 9044 container.innerHTML = this.getSectionBanners(sectionId).join(''); 9045 this.injectorResolver?.resolve(sectionId, this.options.injectorParams); 9046 }, 9047 9048 loadBannerByBannerId: function (container) { 9049 const bannerId = container.getAttribute('data-bannerid'); 9050 container.innerHTML = (this.getBanners(bannerId)); 9051 } 9052 } 9053 } 9054</script>
vendor: 1 bytes, line 9054
9054
9055<script type="application/ld+json">{"@context":"https:\/\/schema.org","@type":"WebSite","url":"https:\/\/www.skintrends.com\/","name":"Skin Trends Skincare and Cosmetics","potentialAction":{"@type":"SearchAction","target":"https:\/\/www.skintrends.com\/catalogsearch\/result\/?q={search_term_string}","query-input":"required name=search_term_string"}}</script>
9055<script type="application/ld+json">{"@context":"https:\/\/schema.org","@type":"Organization","url":"https:\/\/www.skintrends.com\/","name":"Skin Trends LLC","logo":"https:\/\/www.skintrends.com\/media\/logo\/websites\/1\/logo.png","description":"Skin Trends is an Authorized Store. We offer professional skincare products, along with free expert esthe...","contactPoint":[{"@type":"ContactPoint","telephone":"(855) 851-1100","contactType":"sales"},{"@type":"ContactPoint","telephone":"(813) 280-1141","contactType":"customer service"}],"address":{"addressCountry":"US","postalCode":"33647","addressRegion":"Florida","addressLocality":"Tampa","streetAddress":"15310 Amberly Dr. Suite 250"},"sameAs":["https:\/\/www.facebook.com\/skintrendsdayspa","https:\/\/twitter.com\/SkintrendsSpa","https:\/\/www.instagram.com\/skintrendsspa\/","https:\/\/www.youtube.com\/skintrends"]}</script>
9055<script type="application/json" id="default-section-data"> 9056 {"messages":[],"customer":[],"compare-products":[],"last-ordered-items":[],"cart":[],"directory-data":{"UM":{"name":"U.S. Outlying Islands"},"US":{"name":"United States","regions":{"1":{"code":"AL","name":"Alabama"},"2":{"code":"AK","name":"Alaska"},"3":{"code":"AS","name":"American Samoa"},"4":{"code":"AZ","name":"Arizona"},"5":{"code":"AR","name":"Arkansas"},"6":{"code":"AF","name":"Armed Forces Africa"},"7":{"code":"AA","name":"Armed Forces Americas"},"8":{"code":"AC","name":"Armed Forces Canada"},"9":{"code":"AE","name":"Armed Forces Europe"},"10":{"code":"AM","name":"Armed Forces Middle East"},"11":{"code":"AP","name":"Armed Forces Pacific"},"12":{"code":"CA","name":"California"},"13":{"code":"CO","name":"Colorado"},"14":{"code":"CT","name":"Connecticut"},"15":{"code":"DE","name":"Delaware"},"16":{"code":"DC","name":"District of Columbia"},"17":{"code":"FM","name":"Federated States Of Micronesia"},"18":{"code":"FL","name":"Florida"},"19":{"code":"GA","name":"Georgia"},"20":{"code":"GU","name":"Guam"},"21":{"code":"HI","name":"Hawaii"},"22":{"code":"ID","name":"Idaho"},"23":{"code":"IL","name":"Illinois"},"24":{"code":"IN","name":"Indiana"},"25":{"code":"IA","name":"Iowa"},"26":{"code":"KS","name":"Kansas"},"27":{"code":"KY","name":"Kentucky"},"28":{"code":"LA","name":"Louisiana"},"29":{"code":"ME","name":"Maine"},"30":{"code":"MH","name":"Marshall Islands"},"31":{"code":"MD","name":"Maryland"},"32":{"code":"MA","name":"Massachusetts"},"33":{"code":"MI","name":"Michigan"},"34":{"code":"MN","name":"Minnesota"},"35":{"code":"MS","name":"Mississippi"},"36":{"code":"MO","name":"Missouri"},"37":{"code":"MT","name":"Montana"},"38":{"code":"NE","name":"Nebraska"},"39":{"code":"NV","name":"Nevada"},"40":{"code":"NH","name":"New Hampshire"},"41":{"code":"NJ","name":"New Jersey"},"42":{"code":"NM","name":"New Mexico"},"43":{"code":"NY","name":"New York"},"44":{"code":"NC","name":"North Carolina"},"45":{"code":"ND","name":"North Dakota"},"46":{"code":"MP","name":"Northern Mariana Islands"},"47":{"code":"OH","name":"Ohio"},"48":{"code":"OK","name":"Oklahoma"},"49":{"code":"OR","name":"Oregon"},"50":{"code":"PW","name":"Palau"},"51":{"code":"PA","name":"Pennsylvania"},"52":{"code":"PR","name":"Puerto Rico"},"53":{"code":"RI","name":"Rhode Island"},"54":{"code":"SC","name":"South Carolina"},"55":{"code":"SD","name":"South Dakota"},"56":{"code":"TN","name":"Tennessee"},"57":{"code":"TX","name":"Texas"},"58":{"code":"UT","name":"Utah"},"59":{"code":"VT","name":"Vermont"},"60":{"code":"VI","name":"Virgin Islands"},"61":{"code":"VA","name":"Virginia"},"62":{"code":"WA","name":"Washington"},"63":{"code":"WV","name":"West Virginia"},"64":{"code":"WI","name":"Wisconsin"},"65":{"code":"WY","name":"Wyoming"}}},"data_id":1791224230},"captcha":[],"instant-purchase":[],"loggedAsCustomer":[],"persistent":[],"review":[],"wishlist":{"items":[]},"ammessages":[],"rewards":[],"recently_viewed_product":[],"recently_compared_product":[],"product_data_storage":[],"paypal-billing-agreement":[],"magepal-gtm-jsdatalayer":[]}</script>
9056 9057
9058<script> 9059 'use strict'; 9060 9061 function GoogleAnalytics () { 9062 let self = this; 9063 this.config = { 9064 isCookieRestrictionModeEnabled: 0, 9065 currentWebsite: 1, 9066 cookieName: "user_allowed_save_cookie", 9067 ordersTrackingData: [], 9068 pageTrackingData: {"optPageUrl":"","isAnonymizedIpActive":false,"accountId":"UA-35181227-1"}, 9069 } 9070 9071 this.initGoogleAnalytics = function () { 9072 9073 let allowServices = false, 9074 allowedCookies, 9075 allowedWebsites; 9076 9077 if (self.config.isCookieRestrictionModeEnabled) { 9078 allowedCookies = hyva.getCookie(self.config.cookieName); 9079 9080 if (allowedCookies !== null) { 9081 allowedWebsites = JSON.parse(decodeURIComponent(allowedCookies)); 9082 9083 if (allowedWebsites[self.config.currentWebsite] === 1) { 9084 allowServices = true; 9085 } 9086 } 9087 } else { 9088 allowServices = true; 9089 } 9090 9091 if (allowServices) { 9092 (function (i, s, o, g, r, a, m) { 9093 i.GoogleAnalyticsObject = r; 9094 i[r] = i[r] || function () { 9095 (i[r].q = i[r].q || []).push(arguments) 9096 }, i[r].l = 1 * new Date(); 9097 a = s.createElement(o), 9098 m = s.getElementsByTagName(o)[0]; 9099 a.defer = 1; 9100 a.src = g; 9101 m.parentNode.insertBefore(a, m) 9102 })(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga'); 9103 9104 // Process page info 9105 ga('create', self.config.pageTrackingData.accountId, 'auto'); 9106 9107 if (self.config.pageTrackingData.isAnonymizedIpActive) { 9108 ga('set', 'anonymizeIp', true); 9109 } 9110 9111 // Process orders data 9112 if (self.config.ordersTrackingData.hasOwnProperty('currency')) { 9113 ga('require', 'ec', 'ec.js'); 9114 9115 ga('set', 'currencyCode', self.config.ordersTrackingData.currency); 9116 9117 // Collect product data for GA 9118 if (self.config.ordersTrackingData.products) { 9119 self.config.ordersTrackingData.products.forEach(function (value) { 9120 ga('ec:addProduct', value); 9121 }); 9122 } 9123 9124 // Collect orders data for GA 9125 if (self.config.ordersTrackingData.orders) { 9126 self.config.ordersTrackingData.orders.forEach(function (value) { 9127 ga('ec:setAction', 'purchase', value); 9128 }); 9129 } 9130 9131 ga('send', 'pageview'); 9132 } else { 9133 // Process Data if not orders 9134 ga('send', 'pageview' + self.config.pageTrackingData.optPageUrl); 9135 } 9136 } 9137 }; 9138 } 9139 9140 window.addEventListener("load", new GoogleAnalytics().initGoogleAnalytics); 9141 9142</script>
9142 9143<div x-data="dataAmMessage()" 9144 x-bind="eventListeners" 9145 x-init="initAmMessage()"></div>
9146<script> 9147 function dataAmMessage() { 9148 return { 9149 initAmMessage(){}, 9150 eventListeners: { 9151 ['@private-content-loaded.window'](event) { 9152 const detail = event.detail.data, 9153 body = document.getElementById('html-body'); 9154 if (body){ 9155 const classList = body.classList.value; 9156 if (detail.ammessages.messages.notice && classList.indexOf('checkout-') === -1) { 9157 dispatchMessages([ 9158 { 9159 type: detail.ammessages.messages.notice.type, 9160 text: detail.ammessages.messages.notice.text 9161 } 9162 ]); 9163 } 9164 } 9165 } 9166 } 9167 } 9168 } 9169</script>
9169 9170</div>
9170<script>window.amlazy = function() {if (typeof window.amlazycallback !== "undefined") {setTimeout(window.amlazycallback, 500);setTimeout(window.amlazycallback, 1500);}}</script>
9170<script>!function(){var e=window.addEventListener||function(e,t){window.attachEvent("on"+e,t)},t=window.removeEventListener||function(e,t,s){window.detachEvent("on"+e,t)},s={cache:[],mobileScreenSize:500,observersAdded:!1,attributes:{data_src:"data-amsrc",data_srcset:"data-amsrcset",data_src_mobile:"data-src-mobile"},addObservers:function(){this.observersAdded||(e("scroll",s.throttledLoad),e("resize",s.throttledLoad),this.observersAdded=!0)},removeObservers:function(){t("scroll",s.throttledLoad,!1),t("resize",s.throttledLoad,!1),this.observersAdded=!1},throttleTimer:(new Date).getTime(),throttledLoad:function(){var e=(new Date).getTime();e-s.throttleTimer>=200&&(s.throttleTimer=e,s.loadVisibleImages())},loadVisibleImages:function(){for(var e=window.pageYOffset||document.documentElement.scrollTop,t=e-200,a=e+(window.innerHeight||document.documentElement.clientHeight)+200,i=0;i<s.cache.length;){var o=s.cache[i],c=r(o);if(c>=t-(o.height||0)&&c<=a){var n=o.getAttribute(this.attributes.data_src_mobile);if(o.onload=function(){this.className=this.className.replace(/(^|\s+)lazy-load(\s+|$)/,"$1lazy-loaded$2")},n&&screen.width<=s.mobileScreenSize)o.src=n;else{const e=o.getAttribute(this.attributes.data_src);null!==e&&(o.src=e);const t=o.getAttribute(this.attributes.data_srcset);null!==t&&(o.srcset=t)}o.removeAttribute(this.attributes.data_srcset),o.removeAttribute(this.attributes.data_src),o.removeAttribute(this.attributes.data_src_mobile),s.cache.splice(i,1)}else i++}0===s.cache.length&&s.removeObservers()},init:function(){let e=!0;document.querySelectorAll||(document.querySelectorAll=function(e){var t=document,s=t.documentElement.firstChild,r=t.createElement("STYLE");return s.appendChild(r),t.__qsaels=[],r.styleSheet.cssText=e+"{x:expression(document.__qsaels.push(this))}",window.scrollBy(0,0),t.__qsaels});let t=this.attributes.data_src,r=this.attributes.data_srcset;const a=document.body,i=new MutationObserver((function(a,i){if(!e){for(var o=document.querySelectorAll(`img[${t}], img[${r}]`),c=0;c<o.length;c++){var n=o[c];-1==s.cache.indexOf(n)&&s.cache.push(n)}s.loadVisibleImages()}}));i.observe(a,{childList:!0,subtree:!0});for(var o=document.querySelectorAll(`img[${this.attributes.data_src}], img[${this.attributes.data_srcset}]`),c=0;c<o.length;c++){var n=o[c];-1==s.cache.indexOf(n)&&s.cache.push(n)}s.addObservers(),s.loadVisibleImages(),e=!1}};function r(e){var t=0;if(e.offsetParent){do{t+=e.offsetTop}while(e=e.offsetParent);return t}}s.init(),window.amlazycallback=s.init}();</script>
9170 9171<div id="fishpig-wp"> 9172
9172<script type="speculationrules"> 9173{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/wp/*"},{"not":{"href_matches":["/wp/wp-*.php","/wp/wp-admin/*","/wp/wp-content/uploads/*","/wp/wp-content/*","/wp/wp-content/plugins/*","/wp/wp-content/themes/fishpig/*","/wp/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]} 9174</script>
9174 9175
9175<script> 9176 (function(d, s, id) { 9177 var js, fjs = d.getElementsByTagName(s)[0]; 9178 if (d.getElementById(id)) return; 9179 js = d.createElement(s); 9180 js.id = id; 9181 js.src = "https://connect.facebook.net/en_US/sdk.js#xfbml=1&version=v3.2"; 9182 fjs.parentNode.insertBefore(js, fjs); 9183 }(document, 'script', 'facebook-jssdk')); 9184 </script>
9184 9185
9185<script> 9186window.addEventListener('sfsi_functions_loaded', function() { 9187 if (typeof sfsi_responsive_toggle == 'function') { 9188 sfsi_responsive_toggle(0); 9189 // console.log('sfsi_responsive_toggle'); 9190 9191 } 9192}) 9193</script>
9193 9194
9194<script> 9195window.addEventListener('sfsi_functions_loaded', function() { 9196 if (typeof sfsi_plugin_version == 'function') { 9197 sfsi_plugin_version(2.77); 9198 } 9199}); 9200 9201function sfsi_processfurther(ref) { 9202 var feed_id = 'VU9pOTdMK2Z3dUJkTGVqWGZXMldSTHcwVFNUc3Zld1o1WnhlajFjYXZUZG5XQWZ4c3F1Q3pvOHNKLzBpQUVaWEYyekdvZjNsUE54WFp6RGFyVUlTaFRra0wycTM0LzFxaVA4ZlJpaHpUazBuSm5CM1Z3cms1QngrYUJXbGtCbEJ8dW9NQThjWUo4Z0JoaVUxOUpBRk5SMTdIcm54ekUrZWR5dUE4b04yT01DUT0='; 9203 var feedtype = 8; 9204 var email = jQuery(ref).find('input[name="email"]').val(); 9205 var filter = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; 9206 if ((email != "Enter your email") && (filter.test(email))) { 9207 if (feedtype == "8") { 9208 var url = "https://api.follow.it/subscription-form/" + feed_id + "/" + feedtype; 9209 window.open(url, "popupwindow", "scrollbars=yes,width=1080,height=760"); 9210 return true; 9211 } 9212 } else { 9213 alert("Please enter email address"); 9214 jQuery(ref).find('input[name="email"]').focus(); 9215 return false; 9216 } 9217} 9218</script>
9218 9219
9219<script type="text/javascript" src="https://www.skintrends.com/wp/fishpig/js/wp-includes/js/jquery/ui/core-v2603e5b0f55bc7fef9d4f72416ea1308.min.js?ver=1.13.3" id="jquery-ui-core-js"></script>
9219 9220
9220<script type="text/javascript" src="https://www.skintrends.com/wp/fishpig/js/wp-content/plugins/ultimate-social-media-icons/js/shuffle/modernizr.custom-v1f573260b16337df0b98e017d9fda262.min.js?ver=6.9.4" id="SFSIjqueryModernizr-js"></script>
9220 9221
9221<script type="text/javascript" src="https://www.skintrends.com/wp/fishpig/js/wp-content/plugins/ultimate-social-media-icons/js/shuffle/jquery.shuffle-ve3388f6b1f2260607ea983fd18398da4.min.js?ver=6.9.4" id="SFSIjqueryShuffle-js"></script>
9221 9222
9222<script type="text/javascript" src="https://www.skintrends.com/wp/fishpig/js/wp-content/plugins/ultimate-social-media-icons/js/shuffle/random-shuffle-min-v1c842633ada2a8d2581710fcaaf91644.js?ver=6.9.4" id="SFSIjqueryrandom-shuffle-js"></script>
9222 9223
9223<script type="text/javascript" id="SFSICustomJs-js-extra"> 9224/* <![CDATA[ */ 9225var sfsi_icon_ajax_object = {"nonce":"94cb85d58d","ajax_url":"https://www.skintrends.com/wp/wp-admin/admin-ajax.php","plugin_url":"https://www.skintrends.com/wp/wp-content/plugins/ultimate-social-media-icons/"}; 9226//# sourceURL=SFSICustomJs-js-extra 9227/* ]]> */ 9228</script>
9228 9229
9229<script type="text/javascript" src="https://www.skintrends.com/wp/fishpig/js/wp-content/plugins/ultimate-social-media-icons/js/custom-vc1cfbf761f061ef61b1b75305a0a280e.js?ver=2.9.4" id="SFSICustomJs-js"></script>
9229 9230
9230<script>(function(){function c(){var b=a.contentDocument||(a.contentWindow&&a.contentWindow.document);if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'a45e6bef18f6bd5d',t:'MTc5MTIyNDIzMA=='};var a=document.createElement('script');a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script>
9230 9231</div>
9232<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"e615d48168b74bc088731639b1bd8a2d","r":1,"spa":2}' crossorigin="anonymous"></script>
vendor: 1 bytes, line 9232
9232
9233<script>(function(){function c(){var b=a.contentDocument||(a.contentWindow&&a.contentWindow.document);if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'a4608cefcfda711b',t:'MTc5MTI0NjU1Mw=='};var a=document.createElement('script');a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script>
9233</body> 9234</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.