Category element magic

20 Elemental Spells for Every Witch

elemental spells

20 Elemental Spells for Every Witch Introduction Elemental spells, rooted in the classical elements of earth, water, fire, and air, have been cast by witches for centuries to harness the natural forces around them. From ancient practices to modern-day spellcasting,…

/** * WCFB Umami funnel stub — product_impression / product_click * * Env-gated via window.WCFB_UMAMI_CONFIG (set by PHP snippet or inline config). * Does NOT emit fake analytics when disabled or when umami is unavailable. */ (function () { 'use strict'; var cfg = window.WCFB_UMAMI_CONFIG || {}; var enabled = Boolean(cfg.enabled); var websiteId = cfg.websiteId || ''; function umamiReady() { return enabled && websiteId && typeof window.umami === 'function'; } function track(name, props) { if (!umamiReady()) { return; } try { window.umami(name, props || {}); } catch (e) { /* silent — analytics must never break the page */ } } function readAttrs(el) { return { product_id: el.getAttribute('data-product-id') || '', variant: el.getAttribute('data-variant') || 'A', surface: el.getAttribute('data-surface') || 'unknown', }; } function bindImpressions() { document.querySelectorAll('[data-event="product_impression"]').forEach(function (el) { if (el.dataset.umamiImpression) { return; } el.dataset.umamiImpression = '1'; track('product_impression', readAttrs(el)); }); } document.addEventListener('click', function (e) { var target = e.target.closest( '[data-event="product_click"], [data-event="add_to_cart"]' ); if (!target) { return; } track('product_click', readAttrs(target)); }, true); if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', bindImpressions); } else { bindImpressions(); } })(); /** * WCFB Exit Intent Modal — loads exit_intent zone HTML once per session. */ (function () { 'use strict'; var SHOWN_KEY = 'wcfb_exit_intent_shown'; if (sessionStorage.getItem(SHOWN_KEY)) return; var apiBase = window.WCFB_CONVERSION_API || ''; if (!apiBase) return; function showModal(html) { if (!html || html.indexOf('wcfb-zone') === -1) return; sessionStorage.setItem(SHOWN_KEY, '1'); var overlay = document.createElement('div'); overlay.className = 'wcfb-exit-overlay'; overlay.innerHTML = ''; overlay.style.cssText = 'position:fixed;inset:0;background:rgba(0,0,0,.65);z-index:99999;display:flex;align-items:center;justify-content:center;padding:1rem'; var modal = overlay.querySelector('.wcfb-exit-modal'); if (modal) { modal.style.cssText = 'max-width:520px;width:100%;background:#12121a;border-radius:12px;padding:1.5rem;position:relative'; } overlay.addEventListener('click', function (e) { if (e.target === overlay || e.target.classList.contains('wcfb-exit-close')) { overlay.remove(); } }); document.body.appendChild(overlay); } function fetchZone() { var url = apiBase.replace(/\/$/, '') + '/zones/exit_intent'; fetch(url, { credentials: 'omit' }) .then(function (r) { return r.text(); }) .then(showModal) .catch(function () {}); } var triggered = false; document.addEventListener('mouseout', function (e) { if (triggered) return; if (!e.relatedTarget && e.clientY <= 0) { triggered = true; fetchZone(); } }); })();
Featured on
Listed on DevTool.ioListed on SaaSHub
Featured on
Listed on DevTool.ioListed on SaaSHub