/* Lighom User Data Enricher v4 - dual format user_data + gtag-to-custom-event bridge + Manual Advanced Matching via fbq init */ (function(){ if (window.__lighom_userdata_enricher_v4) return; window.__lighom_userdata_enricher_v4 = true; var PIXEL_ID = "479292381165317"; var rawCache = {}; var hashedCache = {}; var pending = false; var lastFbqInit = ""; var EVENT_NAMES = /^(purchase|add_payment_info|begin_checkout|add_to_cart|complete_registration|search|view_item|view_item_list|view_category|view_content|initiate_checkout|search_submitted)$/i; var GTAG_ECOM = /^(view_item|view_item_list|add_to_cart|begin_checkout|add_payment_info|add_shipping_info|search|select_item|select_promotion|view_promotion|remove_from_cart|view_cart)$/i; function ck(name){ var m = document.cookie.match(new RegExp("(?:^|;\\s*)" + name + "=([^;]+)")); return m ? decodeURIComponent(m[1]) : ""; } function norm(field, value){ if (!value) return ""; value = String(value).trim().toLowerCase(); if (field === "em") return value; if (field === "ph") return value.replace(/[^0-9]/g, ""); if (field === "zp") return value.split("-")[0].trim(); if (field === "ct" || field === "st" || field === "country") return value.replace(/\s+/g, ""); return value; } function sha256(s){ if (!s || !window.crypto || !crypto.subtle) return Promise.resolve(""); try { return crypto.subtle.digest("SHA-256", new TextEncoder().encode(s)).then(function(buf){ return Array.from(new Uint8Array(buf)).map(function(b){ return b.toString(16).padStart(2,"0"); }).join(""); }); } catch(e){ return Promise.resolve(""); } } function getInputValue(selector){ var els = document.querySelectorAll(selector); for (var i = 0; i < els.length; i++) { var el = els[i]; var v = el.value || (el.options && el.selectedIndex >= 0 ? (el.options[el.selectedIndex].dataset.code || el.options[el.selectedIndex].text) : ""); if (v && v.trim()) return v.trim(); } return ""; } function scanDOM(){ var found = false; var em = getInputValue("input[type=\"email\"], input[name*=\"email\" i], input[id*=\"email\" i], input[autocomplete=\"email\"]"); if (em && /\S+@\S+\.\S+/.test(em) && rawCache.em !== em) { rawCache.em = em; found = true; } var ph = getInputValue("input[type=\"tel\"], input[name*=\"phone\" i], input[id*=\"phone\" i], input[name*=\"mobile\" i], input[autocomplete=\"tel\"]"); if (ph && rawCache.ph !== ph) { rawCache.ph = ph; found = true; } var fn = getInputValue("input[name*=\"first_name\" i], input[name*=\"firstName\" i], input[id*=\"first_name\" i], input[autocomplete=\"given-name\"]"); if (fn && rawCache.fn !== fn) { rawCache.fn = fn; found = true; } var ln = getInputValue("input[name*=\"last_name\" i], input[name*=\"lastName\" i], input[id*=\"last_name\" i], input[autocomplete=\"family-name\"]"); if (ln && rawCache.ln !== ln) { rawCache.ln = ln; found = true; } var ct = getInputValue("input[name*=\"city\" i], input[id*=\"city\" i], input[autocomplete=\"address-level2\"]"); if (ct && rawCache.ct !== ct) { rawCache.ct = ct; found = true; } var st = getInputValue("input[name*=\"province\" i], input[name*=\"state\" i], input[id*=\"province\" i], select[name*=\"province\" i], select[name*=\"state\" i], input[autocomplete=\"address-level1\"], select[autocomplete=\"address-level1\"]"); if (st && rawCache.st !== st) { rawCache.st = st; found = true; } var zp = getInputValue("input[name*=\"postal\" i], input[name*=\"zip\" i], input[name*=\"postcode\" i], input[autocomplete=\"postal-code\"]"); if (zp && rawCache.zp !== zp) { rawCache.zp = zp; found = true; } var country = getInputValue("select[name*=\"country\" i], input[name*=\"country\" i], input[autocomplete=\"country\"]"); if (country && rawCache.country !== country) { rawCache.country = country; found = true; } var ps = window.__PRELOAD_STATE__; var uid = (ps && ps.user && (ps.user.id || ps.user.userId)) || (ps && ps.userInfo && ps.userInfo.userId) || (ps && ps.orders && ps.orders.buyerInfo && ps.orders.buyerInfo.buyerId); if (uid && rawCache.external_id !== String(uid)) { rawCache.external_id = String(uid); found = true; } if (found && !pending) updateHashes(); return found; } function updateHashes(){ pending = true; var keys = Object.keys(rawCache); Promise.all(keys.map(function(k){ return sha256(norm(k, rawCache[k])); })).then(function(hashes){ var newHashed = {}; keys.forEach(function(k, i){ if (hashes[i]) newHashed[k] = hashes[i]; }); hashedCache = newHashed; window.__lighom_user_data_hashed = newHashed; window.__lighom_user_data_raw = rawCache; pending = false; /* v4: Apply Manual Advanced Matching to fbq so all subsequent events get ud.* params */ if (typeof window.fbq === "function" && Object.keys(newHashed).length) { var sig = JSON.stringify(newHashed); if (sig !== lastFbqInit) { lastFbqInit = sig; try { window.fbq("init", PIXEL_ID, newHashed); } catch(e){} } } }); } function buildUserData(existing){ var ud = Object.assign({}, existing || {}); if (rawCache.em && !ud.email_address) ud.email_address = rawCache.em; if (rawCache.ph && !ud.phone_number) ud.phone_number = rawCache.ph; if (rawCache.fn && !ud.first_name) ud.first_name = rawCache.fn; if (rawCache.ln && !ud.last_name) ud.last_name = rawCache.ln; if (rawCache.ct && !ud.city) ud.city = rawCache.ct; if (rawCache.st && !ud.region) ud.region = rawCache.st; if (rawCache.zp && !ud.postal_code) ud.postal_code = rawCache.zp; if (rawCache.country && !ud.country) ud.country = rawCache.country; if (rawCache.external_id && !ud.user_id) ud.user_id = rawCache.external_id; if (hashedCache.em && !ud.em) ud.em = hashedCache.em; if (hashedCache.ph && !ud.ph) ud.ph = hashedCache.ph; if (hashedCache.fn && !ud.fn) ud.fn = hashedCache.fn; if (hashedCache.ln && !ud.ln) ud.ln = hashedCache.ln; if (hashedCache.ct && !ud.ct) ud.ct = hashedCache.ct; if (hashedCache.st && !ud.st) ud.st = hashedCache.st; if (hashedCache.zp && !ud.zp) ud.zp = hashedCache.zp; if (hashedCache.external_id && !ud.external_id) ud.external_id = hashedCache.external_id; return ud; } function enrich(arg){ if (!arg || !arg.event || !EVENT_NAMES.test(arg.event)) return arg; arg.user_data = buildUserData(arg.user_data); if (!arg.fbp) arg.fbp = ck("_fbp"); if (!arg.fbc) arg.fbc = ck("_fbc"); if (!arg.epik) arg.epik = ck("_epik"); return arg; } /* gtag→custom event bridge */ function bridgeGtag(arg){ if (!arg || arg["0"] !== "event" || !GTAG_ECOM.test(arg["1"])) return null; var eventName = arg["1"]; var data = arg["2"] || {}; if (data.send_to) return null; var bridged = { event: eventName, event_id: data.event_id, ecommerce: { value: data.value, currency: data.currency, items: data.items, transaction_id: data.transaction_id, content_ids: data.content_ids || (data.items ? data.items.map(function(it){ return it.item_id || it.id; }).filter(Boolean) : undefined), content_type: data.content_type || (data.items && data.items.length ? "product" : undefined), num_items: data.items ? data.items.length : undefined } }; return bridged; } function start(){ scanDOM(); if (!window.dataLayer) window.dataLayer = []; var origPush = window.dataLayer.push.bind(window.dataLayer); window.dataLayer.push = function(arg){ if (arg && arg.event && EVENT_NAMES.test(arg.event)) { scanDOM(); enrich(arg); return origPush(arg); } var bridged = bridgeGtag(arg); if (bridged) { scanDOM(); enrich(bridged); var orig = origPush(arg); try { setTimeout(function(){ origPush(bridged); }, 0); } catch(e){} return orig; } return origPush(arg); }; document.addEventListener("blur", scanDOM, true); document.addEventListener("change", scanDOM, true); var inputTimer; document.addEventListener("input", function(){ clearTimeout(inputTimer); inputTimer = setTimeout(scanDOM, 300); }, true); setInterval(scanDOM, 2000); var existing = window.dataLayer.slice(); setTimeout(function(){ existing.forEach(function(item){ var b = bridgeGtag(item); if (b) { enrich(b); origPush(b); } }); }, 100); } if (document.readyState === "loading") document.addEventListener("DOMContentLoaded", start); else start(); })();
ENJOY 10% OFF YOUR FIRST ORDER
Free International Shipping
30-Day Satisfaction Guarantee

Cart

Your cart is currently empty.

Continue shopping
1 / 8

Modern Copper Adjustable LED Rotatable Linear Vanity Light

$136.95 $182.95 25%OFF
Dimensions
Finish

Description

Layer in a working piece with this modern Copper Adjustable LED Rotatable Linear Vanity Light.

  • Storage hides daily clutter
  • Scale works for compact rooms and apartments
  • Frame holds weight over years of use

Assemble on a soft surface to protect the finish. Easy to mix with existing decor without a full refresh.

Specifications

Product Name:Linear LED Mirror Vanity Light
Type:Vanity Light
Style:Modern, Nordic
Material:Copper
Fixture Color:Gold, Black
Shade Material:Acrylic
Shade Shape:Linear
Shade Included:Yes
Shade Color:White
Surface Finishing:Copper Hardware Craftsmanship, Polishing, Blackening, Glaze Sealing, Others
Highlight:Pivoting lamp head
Bulb Included:Yes
Bulb Type:LED
Integrated LED:Yes
Number of Lights:1-Light
Color Temperature:3-Step Dimming (3000K/4500K/6000K)
Tip:"3-step dimming" can only adjust color temperatures (warm white light, neutral white light, and white light) by using an ordinary switch, and can't adjust the brightness.
Color Temperature Dimming:Yes
Brightness Dimming:No
Light Direction:Down, Adjustable
Voltage:110V
Max Wattage(per bulb):24W/32W/40W
Power Source:Hardwired
Use Location:Indoor
Mounting Type:Wall
Backplate Included:Yes
Product Care:Turn off the power, wipe clean with a dry cloth
Illumination Area:32sq ft - 161sq ft
Applicable Scene:Bathroom, Cosmetic Mirror

Dimensions

23.6'':
Weight:2.09lb (0.9kg)
Size:23.6'' Width x x 2'' Height
31.5'':
Weight:2.42lb (1.1kg)
Size:31.5'' Width x 2'' Height
39.4'':
Weight:2.97lb (1.3kg)
Size:39.4'' Width x 2'' Height

Voltage

Shipping Info

Return Policy

100% Satisfaction Guaranteed
icon
FREE WORLDWIDE SHIPPING
icon
30-DAYS MONEY BACK GUARANTEE
icon
QUICK & EASY RETURNS
icon
SAFE & SECURE CHECKOUT

You May Also Like