Holy Grail 24HR Waterproof Eyeliner
Holy Grail 24HR Waterproof Eyeliner
Holy Grail 24HR Waterproof Eyeliner
Holy Grail 24HR Waterproof Eyeliner
Holy Grail 24HR Waterproof Eyeliner
Holy Grail 24HR Waterproof Eyeliner
Holy Grail 24HR Waterproof Eyeliner
Holy Grail 24HR Waterproof Eyeliner
Holy Grail 24HR Waterproof Eyeliner
Holy Grail 24HR Waterproof Eyeliner
Holy Grail 24HR Waterproof Eyeliner
Holy Grail 24HR Waterproof Eyeliner
Holy Grail 24HR Waterproof Eyeliner
Holy Grail 24HR Waterproof Eyeliner
Holy Grail 24HR Waterproof Eyeliner
1 / 3

Holy Grail 24HR Waterproof Eyeliner

Title
Please select a title
Price
$20.68
$0.00

Quantity

Your Holy Grail 24 HR Waterproof Eyeliner ! 

  • Hot, humid, sticky weather proof!
  • Water-proof, smudge-proof protection for up to 24 hours. 
  • Alcohol-free, non irritating
  • The flexible and fine brush can be applied to the lash line with super accuracy creating both subtle and dramatic eyeliner styles quickly and with ease.
  • Cruelty-free & vegan-friendly. 

Net Wt: 5 ml. 

Ingredients: Dimethicone, Butylene Glycol, Caprylyl Methicone, Resin, Glycerin, Tocopherol, Polysorbate 20, Xanthan Gum, Corn Starch, Dimethicone Crospolymer, Ammonium Acryloyldimethyltaurate-VP Copolymer, Sodium Gluconate, Phenoxyethanol, Caprylyl Glycol, Hexylene Glycol, Ethylhexylglycerin

/** @private {string} */ class SpzCustomAnchorScroll extends SPZ.BaseElement { static deferredMount() { return false; } constructor(element) { super(element); /** @private {Element} */ this.scrollableContainer_ = null; } isLayoutSupported(layout) { return layout == SPZCore.Layout.LOGIC; } buildCallback() { this.viewport_ = this.getViewport(); this.initActions_(); } setTarget(containerId, targetId) { this.containerId = '#' + containerId; this.targetId = '#' + targetId; } scrollToTarget() { const container = document.querySelector(this.containerId); const target = container.querySelector(this.targetId); const {scrollTop} = container; const eleOffsetTop = this.getOffsetTop_(target, container); this.viewport_ .interpolateScrollIntoView_( container, scrollTop, scrollTop + eleOffsetTop ); } initActions_() { this.registerAction( 'scrollToTarget', (invocation) => this.scrollToTarget(invocation?.caller) ); this.registerAction( 'setTarget', (invocation) => this.setTarget(invocation?.args?.containerId, invocation?.args?.targetId) ); } /** * @param {Element} element * @param {Element} container * @return {number} * @private */ getOffsetTop_(element, container) { if (!element./*OK*/ getClientRects().length) { return 0; } const rect = element./*OK*/ getBoundingClientRect(); if (rect.width || rect.height) { return rect.top - container./*OK*/ getBoundingClientRect().top; } return rect.top; } } SPZ.defineElement('spz-custom-anchor-scroll', SpzCustomAnchorScroll); const STRENGTHEN_TRUST_URL = "/api/strengthen_trust/settings"; class SpzCustomStrengthenTrust extends SPZ.BaseElement { constructor(element) { super(element); this.renderElement_ = null; } isLayoutSupported(layout) { return layout == SPZCore.Layout.CONTAINER; } buildCallback() { this.xhr_ = SPZServices.xhrFor(this.win); const renderId = this.element.getAttribute('render-id'); SPZCore.Dom.waitForChild( document.body, () => !!document.getElementById(renderId), () => { this.renderElement_ = SPZCore.Dom.scopedQuerySelector( document.body, `#${renderId}` ); if (this.renderElement_) { this.render_(); } this.registerAction('track', (invocation) => { this.track_(invocation.args); }); } ); } render_() { this.fetchData_().then((data) => { if (!data) { return; } SPZ.whenApiDefined(this.renderElement_).then((apis) => { apis?.render(data); document.querySelector('#strengthen-trust-render-1726694338796').addEventListener('click',(event)=>{ if(event.target.nodeName == 'A'){ this.track_({type: 'trust_content_click'}); } }) }); }); } track_(data = {}) { const track = window.sa && window.sa.track; if (!track) { return; } track('trust_enhancement_event', data); } parseJSON_(string) { let result = {}; try { result = JSON.parse(string); } catch (e) {} return result; } fetchData_() { return this.xhr_ .fetchJson(STRENGTHEN_TRUST_URL) .then((responseData) => { if (!responseData || !responseData.data) { return null; } const data = responseData.data; const moduleSettings = (data.module_settings || []).reduce((result, moduleSetting) => { return result.concat(Object.assign(moduleSetting, { logos: (moduleSetting.logos || []).map((item) => { return moduleSetting.logos_type == 'custom' ? this.parseJSON_(item) : item; }) })); }, []); return Object.assign(data, { module_settings: moduleSettings, isEditor: window.self !== window.top, }); }); } } SPZ.defineElement('spz-custom-strengthen-trust', SpzCustomStrengthenTrust);