{"title":"Bulk Gifts \u0026 Wholesale","description":"\u003cp\u003eOrder customizable car air fresheners, candles, room sprays, and gift packs for events, teams, clients, and approved wholesale accounts.\u003c\/p\u003e","products":[{"product_id":"bulk-car-air-freshener-packs","title":"Bulk Car Air Freshener Packs","description":"\u003cp\u003eBulk Car Air Freshener Packs are built for events, bridesmaid boxes, client gifts, welcome bags, and branded drop-offs. The pack size sets how many fresheners go in each box: 10, 25, 50, or 100. Then you choose how many boxes you need. Each product line stays locked to its own discount tier so the price on the page matches the pack size you select.\u003c\/p\u003e\n\u003cp\u003eChoose the fragrance, choose one or two batch colors, then choose glitter or no glitter. We create these to order in Loxahatchee, Florida, so larger runs need added production time before shipment. This page is for group orders, not one-off retail pieces.\u003c\/p\u003e\n\u003ch3\u003ePack pricing\u003c\/h3\u003e\n\u003cul\u003e\n  \u003cli\u003e\n\u003cstrong\u003e10 fresheners:\u003c\/strong\u003e $90 total ($9 each; 10% pack savings)\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003e25 fresheners:\u003c\/strong\u003e $212.50 total ($8.50 each; 15% pack savings)\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003e50 fresheners:\u003c\/strong\u003e $375 total ($7.50 each; 25% pack savings)\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003e100 fresheners:\u003c\/strong\u003e $600 total ($6 each; 40% pack savings)\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003eThe selected pack price is the merchandise price used in cart. Bulk and pack-pricing items do not qualify for the storewide free-shipping threshold.\u003c\/p\u003e\n\u003ch3\u003eScent notes\u003c\/h3\u003e\n\u003cp\u003eThe note profile depends on the fragrance you choose for the batch. Popular event picks include Clean Linen for a crisp profile, Honeysuckle Jasmine for citrus and floral lift, Black Ice for a sharper cologne read, and Palo Santo for a warmer wood profile.\u003c\/p\u003e\n\u003cp\u003eIf you need one scent across the order, keep the batch simple. If you need help choosing the right fragrance for an event, use the event notes box on the product page.\u003c\/p\u003e\n\u003ch3\u003eFAQ\u003c\/h3\u003e\n\u003cp\u003e\u003cstrong\u003eIs the price shown for one freshener or one box?\u003c\/strong\u003e\u003cbr\u003eThe price shown is per box. The pack size tells you how many fresheners go in that box.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eCan I mix scents inside one box?\u003c\/strong\u003e\u003cbr\u003eUse the event notes box to explain what you need. We review custom requests before production.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDo bulk packs ship on the normal timeline?\u003c\/strong\u003e\u003cbr\u003eLarger runs need added production time because we make them to order.\u003c\/p\u003e\n\u003ch3\u003eRelated products\u003c\/h3\u003e\n\u003cul\u003e\n  \u003cli\u003e\u003ca href=\"\/collections\/drive-fresh-handmade-car-air-fresheners-collection\"\u003eHandmade Car Air Fresheners\u003c\/a\u003e\u003c\/li\u003e\n  \u003cli\u003e\u003ca href=\"\/products\/sea-turtle-air-freshener\"\u003eSea Turtle Air Freshener\u003c\/a\u003e\u003c\/li\u003e\n  \u003cli\u003e\u003ca href=\"\/products\/dolphin-car-air-freshener\"\u003eDolphin Car Air Freshener\u003c\/a\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c!-- lox-cache-refresh bulk-scent-selector 20260423-1848 --\u003e\n\u003cscript data-lox-bulk-scent-cap=\"20260423-max-trim\"\u003e\n(function () {\n  if (window.__loxBulkScentDescriptionCap) return;\n  window.__loxBulkScentDescriptionCap = true;\n  var rules = {\n    '\/products\/bulk-soy-candle-packs': { min: 12, unit: 'candles' },\n    '\/products\/bulk-soy-candle-gift-packs': { min: 12, unit: 'candles' },\n    '\/products\/bulk-room-spray-packs': { min: 10, unit: 'sprays' },\n    '\/products\/bulk-room-spray-gift-packs': { min: 10, unit: 'sprays' },\n    '\/products\/bulk-car-air-freshener-packs': { min: 10, unit: 'fresheners' },\n    '\/products\/bulk-car-air-freshener-packs': { min: 10, unit: 'fresheners' }\n  };\n  function rule() { return rules[window.location.pathname]; }\n  function parseCount(text) { var m = String(text || '').match(\/\\d+\/); return m ? parseInt(m[0], 10) : 0; }\n  function checks() { return Array.prototype.slice.call(document.querySelectorAll('.bulk-scent-checkbox')); }\n  function selected() { return checks().filter(function (input) { return input.checked; }); }\n  function form() { return document.querySelector('product-form form'); }\n  function packCount() {\n    var checked = Array.prototype.slice.call(document.querySelectorAll('input[type=\"radio\"]:checked')).find(function (input) { return \/\\d+\\s*pack\/i.test(input.value); });\n    if (checked) return parseCount(checked.value);\n    var idInput = form() \u0026\u0026 form().querySelector('[name=\"id\"]');\n    var selectedId = idInput ? String(idInput.value) : '';\n    var variants = (window.ShopifyAnalytics \u0026\u0026 window.ShopifyAnalytics.meta \u0026\u0026 window.ShopifyAnalytics.meta.product \u0026\u0026 window.ShopifyAnalytics.meta.product.variants) || (window.meta \u0026\u0026 window.meta.product \u0026\u0026 window.meta.product.variants) || [];\n    var variant = variants.find(function (v) { return String(v.id) === selectedId; });\n    return parseCount(variant \u0026\u0026 (variant.public_title || variant.title));\n  }\n  function quantity() { var input = form() \u0026\u0026 form().querySelector('input[name=\"quantity\"]'); return Math.max(1, parseInt((input \u0026\u0026 input.value) || '1', 10) || 1); }\n  function total() { var pack = packCount(); return pack \u003e 0 ? pack * quantity() : 0; }\n  function maxScents() { var r = rule(); return r ? Math.max(1, Math.floor(total() \/ r.min)) : 0; }\n  function limitText(prefix) { var r = rule(); var max = maxScents(); var units = total(); var word = max === 1 ? 'scent' : 'scents'; return (prefix || '') + 'Scent variety limit: ' + (units ? units + ' total ' + r.unit : 'this pack size') + ' allows up to ' + max + ' ' + word + '.'; }\n  function setMessage(prefix, error, trimmed) {\n    var msg = document.querySelector('[data-bulk-scent-limit-message]');\n    if (!msg || !rule()) return;\n    var max = maxScents(); var count = selected().length; var remain = Math.max(0, max - count);\n    msg.textContent = trimmed ? 'Pack size changed. We kept the first ' + max + ' selected ' + (max === 1 ? 'scent' : 'scents') + '. ' + limitText('') : limitText(prefix) + (remain ? ' Select ' + remain + ' more ' + (remain === 1 ? 'scent' : 'scents') + ' to max out this pack.' : \" You have reached this pack's scent max.\");\n    msg.classList.toggle('is-error', Boolean(error));\n  }\n  function syncHidden() { var values = selected().map(function (input) { return input.value; }); var hidden = document.getElementById('bulk-scents-hidden'); if (hidden) hidden.value = values.join(', '); var display = document.getElementById('selected-scent-display'); if (display) display.textContent = values.length ? values.join(', ') : 'Choose scents below'; }\n  function enforce(prefix, error) { if (!rule()) return true; var all = checks(); if (!all.length) return true; var max = maxScents(); var chosen = selected(); var trimmed = false; if (chosen.length \u003e max) { chosen.slice(max).forEach(function (input) { input.checked = false; }); trimmed = true; } var count = selected().length; all.forEach(function (input) { input.disabled = !input.checked \u0026\u0026 count \u003e= max; }); syncHidden(); setMessage(trimmed ? '' : prefix, error, trimmed); return count \u003c= max; }\n  function init() { if (!rule() || !checks().length) return; document.addEventListener('change', function (event) { var target = event.target; if (target \u0026\u0026 target.matches \u0026\u0026 target.matches('.bulk-scent-checkbox') \u0026\u0026 target.checked \u0026\u0026 selected().length \u003e maxScents()) { target.checked = false; enforce('That would add too many scents. ', true); event.stopPropagation(); return; } setTimeout(function () { enforce('', false); }, 0); setTimeout(function () { enforce('', false); }, 100); }, true); document.addEventListener('input', function () { enforce('', false); }); document.addEventListener('submit', function (event) { if (!rule() || !checks().length) return; if (selected().length \u003c 1) { event.preventDefault(); enforce('Choose at least one scent. ', true); return; } if (!enforce('Too many scents selected. ', true)) event.preventDefault(); }, true); enforce('', false); }\n  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', init); else init();\n})();\n\u003c\/script\u003e","brand":"LoxLivin","offers":[{"title":"10 Pack (10 Air Fresheners)","offer_id":42570911187031,"sku":"BULK-AF-10","price":90.0,"currency_code":"USD","in_stock":true},{"title":"25 Pack (25 Air Fresheners)","offer_id":42570911219799,"sku":"BULK-AF-25","price":212.5,"currency_code":"USD","in_stock":true},{"title":"50 Pack (50 Air Fresheners)","offer_id":42570911252567,"sku":"BULK-AF-50","price":375.0,"currency_code":"USD","in_stock":true},{"title":"100 Pack (100 Air Fresheners)","offer_id":42570911285335,"sku":"BULK-AF-100","price":600.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0020\/6661\/2279\/files\/homepage-hero-optimized_5431ebfd-11e2-405c-b716-b695d8cb7432.jpg?v=1783831730"},{"product_id":"bulk-soy-candle-packs","title":"Bulk Soy Candle Packs","description":"\u003cp\u003eBulk Soy Candle Packs give you a cleaner path for event favors, wholesale tables, team gifts, and larger seasonal orders. Choose the pack size, then choose the vessel format shown on the page. We pour these in small batches with soy wax, phthalate-free fragrance oil, and direct product standards instead of vague bulk language.\u003c\/p\u003e\n\u003cp\u003eThis listing is for group orders, not one retail candle. Larger runs need added production time because we pour to order and build the batch around the vessel and scent mix you choose.\u003c\/p\u003e\n\u003ch3\u003eScent notes\u003c\/h3\u003e\n\u003cp\u003eThe exact note pyramid depends on the fragrance mix you choose for the order. West Palm Beach leans coastal and bright. Honeysuckle Jasmine brings lemon, ginger, jasmine, and honeysuckle. Pine stays green and wood-forward. Vanilla stays warm and soft.\u003c\/p\u003e\n\u003cp\u003eIf you want one consistent profile across the batch, keep the order to one scent. If you need a mix, use the event notes box to explain the split.\u003c\/p\u003e\n\u003ch3\u003eFAQ\u003c\/h3\u003e\n\u003cp\u003e\u003cstrong\u003eWhat pack sizes are available?\u003c\/strong\u003e\u003cbr\u003eThis page offers the candle pack sizes listed in the product options, including the higher-volume wholesale tier.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eCan I choose the vessel?\u003c\/strong\u003e\u003cbr\u003eYes. Choose the vessel shown on the page before you add the pack to cart.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDo bulk candles need added lead time?\u003c\/strong\u003e\u003cbr\u003eYes. Larger runs need added production time because we pour the order after purchase.\u003c\/p\u003e\n\u003ch3\u003eRelated products\u003c\/h3\u003e\n\u003cul\u003e\n  \u003cli\u003e\u003ca href=\"\/collections\/handmade-soy-wax-candles\"\u003eSoy Wax Candles\u003c\/a\u003e\u003c\/li\u003e\n  \u003cli\u003e\u003ca href=\"\/products\/ocean-breeze\"\u003eWest Palm Beach Soy Wax Candle\u003c\/a\u003e\u003c\/li\u003e\n  \u003cli\u003e\u003ca href=\"\/products\/honeysuckle-jasmine-soy-wax-candle\"\u003eHoneysuckle Jasmine Soy Wax Candle\u003c\/a\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c!-- lox-cache-refresh bulk-scent-selector 20260423-1848 --\u003e\n\u003cscript data-lox-bulk-scent-cap=\"20260423-max-trim\"\u003e\n(function () {\n  if (window.__loxBulkScentDescriptionCap) return;\n  window.__loxBulkScentDescriptionCap = true;\n  var rules = {\n    '\/products\/bulk-soy-candle-packs': { min: 12, unit: 'candles' },\n    '\/products\/bulk-soy-candle-gift-packs': { min: 12, unit: 'candles' },\n    '\/products\/bulk-room-spray-packs': { min: 10, unit: 'sprays' },\n    '\/products\/bulk-room-spray-gift-packs': { min: 10, unit: 'sprays' },\n    '\/products\/bulk-car-air-freshener-packs': { min: 10, unit: 'fresheners' },\n    '\/products\/bulk-car-air-freshener-packs': { min: 10, unit: 'fresheners' }\n  };\n  function rule() { return rules[window.location.pathname]; }\n  function parseCount(text) { var m = String(text || '').match(\/\\d+\/); return m ? parseInt(m[0], 10) : 0; }\n  function checks() { return Array.prototype.slice.call(document.querySelectorAll('.bulk-scent-checkbox')); }\n  function selected() { return checks().filter(function (input) { return input.checked; }); }\n  function form() { return document.querySelector('product-form form'); }\n  function packCount() {\n    var checked = Array.prototype.slice.call(document.querySelectorAll('input[type=\"radio\"]:checked')).find(function (input) { return \/\\d+\\s*pack\/i.test(input.value); });\n    if (checked) return parseCount(checked.value);\n    var idInput = form() \u0026\u0026 form().querySelector('[name=\"id\"]');\n    var selectedId = idInput ? String(idInput.value) : '';\n    var variants = (window.ShopifyAnalytics \u0026\u0026 window.ShopifyAnalytics.meta \u0026\u0026 window.ShopifyAnalytics.meta.product \u0026\u0026 window.ShopifyAnalytics.meta.product.variants) || (window.meta \u0026\u0026 window.meta.product \u0026\u0026 window.meta.product.variants) || [];\n    var variant = variants.find(function (v) { return String(v.id) === selectedId; });\n    return parseCount(variant \u0026\u0026 (variant.public_title || variant.title));\n  }\n  function quantity() { var input = form() \u0026\u0026 form().querySelector('input[name=\"quantity\"]'); return Math.max(1, parseInt((input \u0026\u0026 input.value) || '1', 10) || 1); }\n  function total() { var pack = packCount(); return pack \u003e 0 ? pack * quantity() : 0; }\n  function maxScents() { var r = rule(); return r ? Math.max(1, Math.floor(total() \/ r.min)) : 0; }\n  function limitText(prefix) { var r = rule(); var max = maxScents(); var units = total(); var word = max === 1 ? 'scent' : 'scents'; return (prefix || '') + 'Scent variety limit: ' + (units ? units + ' total ' + r.unit : 'this pack size') + ' allows up to ' + max + ' ' + word + '.'; }\n  function setMessage(prefix, error, trimmed) {\n    var msg = document.querySelector('[data-bulk-scent-limit-message]');\n    if (!msg || !rule()) return;\n    var max = maxScents(); var count = selected().length; var remain = Math.max(0, max - count);\n    msg.textContent = trimmed ? 'Pack size changed. We kept the first ' + max + ' selected ' + (max === 1 ? 'scent' : 'scents') + '. ' + limitText('') : limitText(prefix) + (remain ? ' Select ' + remain + ' more ' + (remain === 1 ? 'scent' : 'scents') + ' to max out this pack.' : \" You have reached this pack's scent max.\");\n    msg.classList.toggle('is-error', Boolean(error));\n  }\n  function syncHidden() { var values = selected().map(function (input) { return input.value; }); var hidden = document.getElementById('bulk-scents-hidden'); if (hidden) hidden.value = values.join(', '); var display = document.getElementById('selected-scent-display'); if (display) display.textContent = values.length ? values.join(', ') : 'Choose scents below'; }\n  function enforce(prefix, error) { if (!rule()) return true; var all = checks(); if (!all.length) return true; var max = maxScents(); var chosen = selected(); var trimmed = false; if (chosen.length \u003e max) { chosen.slice(max).forEach(function (input) { input.checked = false; }); trimmed = true; } var count = selected().length; all.forEach(function (input) { input.disabled = !input.checked \u0026\u0026 count \u003e= max; }); syncHidden(); setMessage(trimmed ? '' : prefix, error, trimmed); return count \u003c= max; }\n  function init() { if (!rule() || !checks().length) return; document.addEventListener('change', function (event) { var target = event.target; if (target \u0026\u0026 target.matches \u0026\u0026 target.matches('.bulk-scent-checkbox') \u0026\u0026 target.checked \u0026\u0026 selected().length \u003e maxScents()) { target.checked = false; enforce('That would add too many scents. ', true); event.stopPropagation(); return; } setTimeout(function () { enforce('', false); }, 0); setTimeout(function () { enforce('', false); }, 100); }, true); document.addEventListener('input', function () { enforce('', false); }); document.addEventListener('submit', function (event) { if (!rule() || !checks().length) return; if (selected().length \u003c 1) { event.preventDefault(); enforce('Choose at least one scent. ', true); return; } if (!enforce('Too many scents selected. ', true)) event.preventDefault(); }, true); enforce('', false); }\n  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', init); else init();\n})();\n\u003c\/script\u003e","brand":"LoxLivin","offers":[{"title":"12 Pack (12 Candles) \/ 8 oz Glass (~7 oz wax)","offer_id":42570911318103,"sku":"BULK-CDL-12-GLASS","price":180.0,"currency_code":"USD","in_stock":true},{"title":"12 Pack (12 Candles) \/ 6 oz Tin (~5 oz wax)","offer_id":42570911350871,"sku":"BULK-CDL-12-TIN","price":144.0,"currency_code":"USD","in_stock":true},{"title":"108 Pack (108 Candles) \/ 8 oz Glass (~7 oz wax)","offer_id":42570911383639,"sku":"BULK-CDL-108-GLASS","price":1620.0,"currency_code":"USD","in_stock":true},{"title":"108 Pack (108 Candles) \/ 6 oz Tin (~5 oz wax)","offer_id":42570911416407,"sku":"BULK-CDL-108-TIN","price":1296.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0020\/6661\/2279\/files\/grok-image-c453e67c-16de-4aed-9600-cac0653e463f_1.jpg?v=1772239324"},{"product_id":"bulk-magnesium-spray-packs","title":"Bulk Magnesium Spray Packs","description":"\u003cp\u003eBulk Magnesium Spray Packs give you a standard pack-based route for group gifting, event bags, and wellness-oriented orders. We keep the format direct so you can choose a tier, understand the unit count, and order without switching into a custom quote unless the request falls outside the listed packs.\u003c\/p\u003e\n\u003cp\u003eThis product is for external-use magnesium spray only. Each unit should carry the same patch-test and external-use guidance after delivery. Use the standard pack sizes on this page when the listed format fits your order, and use the quote path only for unusual timing or mixed-product requests.\u003c\/p\u003e\n\u003ch3\u003eProduct details\u003c\/h3\u003e\n\u003cp\u003eMagnesium spray is for external use only. Check the ingredient list on the page, patch test before first use, and avoid eyes, mouth, broken skin, and freshly shaved skin.\u003c\/p\u003e\n\u003cp\u003eThis listing is built around pack clarity and lead time rather than fragrance browsing. Review the quantity tier first, then check the product guidance before checkout.\u003c\/p\u003e\n\u003ch3\u003eFAQ\u003c\/h3\u003e\n\u003cp\u003e\u003cstrong\u003eWho is this for?\u003c\/strong\u003e\u003cbr\u003eUse it for group gifting, wellness kits, event bags, and bulk orders that fit the listed pack sizes.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDo I need a custom quote?\u003c\/strong\u003e\u003cbr\u003eNot if one of the listed pack tiers fits your order. Use the quote path only for unusual timing or mixed-product requests.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eWhat should buyers know after delivery?\u003c\/strong\u003e\u003cbr\u003eThis is an external-use product. Patch test first and avoid eyes, mouth, broken skin, and freshly shaved skin.\u003c\/p\u003e\n\u003ch3\u003eRelated products\u003c\/h3\u003e\n\u003cul\u003e\n  \u003cli\u003e\u003ca href=\"\/products\/travel-magnesium-spray\"\u003eTravel Magnesium Spray\u003c\/a\u003e\u003c\/li\u003e\n  \u003cli\u003e\u003ca href=\"\/products\/magnesium-spray\"\u003eMagnesium Spray\u003c\/a\u003e\u003c\/li\u003e\n  \u003cli\u003e\u003ca href=\"\/pages\/bulk-wholesale\"\u003eBulk \u0026amp; Wholesale\u003c\/a\u003e\u003c\/li\u003e\n\u003c\/ul\u003e","brand":"LoxLivin","offers":[{"title":"10 Pack (10 Sprays)","offer_id":42570911449175,"sku":"BULK-MG-10","price":200.0,"currency_code":"USD","in_stock":true},{"title":"25 Pack (25 Sprays)","offer_id":42570911481943,"sku":"BULK-MG-25","price":500.0,"currency_code":"USD","in_stock":true},{"title":"50 Pack (50 Sprays)","offer_id":42570911514711,"sku":"BULK-MG-50","price":1000.0,"currency_code":"USD","in_stock":true},{"title":"100 Pack (100 Sprays)","offer_id":42570911547479,"sku":"BULK-MG-100","price":2000.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0020\/6661\/2279\/files\/grok-image-9e6be826-089d-45fe-8723-134e0ad5e6d6.jpg?v=1772240741"},{"product_id":"bulk-room-spray-packs","title":"Bulk Room Spray Packs","description":"\u003cp\u003eBulk Room Spray Packs are built for favors, guest bags, pop-ups, and branded gifting when a single fragrance format makes more sense than candles or plug-ins. Choose the pack size shown on the page, then add the order details you want us to follow. We make these in Loxahatchee, Florida and hold the page to direct product language instead of vague wholesale filler.\u003c\/p\u003e\n\u003cp\u003eLarger runs need added production time because we build the order after purchase. This listing is for group orders and event work, not one retail spray bottle.\u003c\/p\u003e\n\u003ch3\u003eScent notes\u003c\/h3\u003e\n\u003cp\u003eThe note profile depends on the fragrance you choose for the batch. Keep the order to one scent if you want the cleanest production path. Use the event notes box if you need guidance or a specific split.\u003c\/p\u003e\n\u003cp\u003eFor a cleaner profile, choose linen or lavender. For a coastal profile, choose one of the beach-focused house scents. For a stronger room profile, choose a wood or cologne-leaning fragrance.\u003c\/p\u003e\n\u003ch3\u003eFAQ\u003c\/h3\u003e\n\u003cp\u003e\u003cstrong\u003eIs the listed price for one bottle or one pack?\u003c\/strong\u003e\u003cbr\u003eThe price shown is for the pack size selected on the product page.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eCan I order these for events or client gifts?\u003c\/strong\u003e\u003cbr\u003eYes. This page is built for event, gifting, and wholesale-style orders.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eHow fast do bulk room sprays ship?\u003c\/strong\u003e\u003cbr\u003eLarger runs need added production time because we make them to order.\u003c\/p\u003e\n\u003ch3\u003eRelated products\u003c\/h3\u003e\n\u003cul\u003e\n  \u003cli\u003e\u003ca href=\"\/products\/boujie-beach-room-spray\"\u003eRoom Spray\u003c\/a\u003e\u003c\/li\u003e\n  \u003cli\u003e\u003ca href=\"\/products\/travel-room-spray\"\u003eTravel Room Spray\u003c\/a\u003e\u003c\/li\u003e\n  \u003cli\u003e\u003ca href=\"\/collections\/clean-living\"\u003eEveryday Care \u0026amp; Home\u003c\/a\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c!-- lox-cache-refresh bulk-scent-selector 20260423-1848 --\u003e\n\u003cscript data-lox-bulk-scent-cap=\"20260423-max-trim\"\u003e\n(function () {\n  if (window.__loxBulkScentDescriptionCap) return;\n  window.__loxBulkScentDescriptionCap = true;\n  var rules = {\n    '\/products\/bulk-soy-candle-packs': { min: 12, unit: 'candles' },\n    '\/products\/bulk-soy-candle-gift-packs': { min: 12, unit: 'candles' },\n    '\/products\/bulk-room-spray-packs': { min: 10, unit: 'sprays' },\n    '\/products\/bulk-room-spray-gift-packs': { min: 10, unit: 'sprays' },\n    '\/products\/bulk-car-air-freshener-packs': { min: 10, unit: 'fresheners' },\n    '\/products\/bulk-car-air-freshener-packs': { min: 10, unit: 'fresheners' }\n  };\n  function rule() { return rules[window.location.pathname]; }\n  function parseCount(text) { var m = String(text || '').match(\/\\d+\/); return m ? parseInt(m[0], 10) : 0; }\n  function checks() { return Array.prototype.slice.call(document.querySelectorAll('.bulk-scent-checkbox')); }\n  function selected() { return checks().filter(function (input) { return input.checked; }); }\n  function form() { return document.querySelector('product-form form'); }\n  function packCount() {\n    var checked = Array.prototype.slice.call(document.querySelectorAll('input[type=\"radio\"]:checked')).find(function (input) { return \/\\d+\\s*pack\/i.test(input.value); });\n    if (checked) return parseCount(checked.value);\n    var idInput = form() \u0026\u0026 form().querySelector('[name=\"id\"]');\n    var selectedId = idInput ? String(idInput.value) : '';\n    var variants = (window.ShopifyAnalytics \u0026\u0026 window.ShopifyAnalytics.meta \u0026\u0026 window.ShopifyAnalytics.meta.product \u0026\u0026 window.ShopifyAnalytics.meta.product.variants) || (window.meta \u0026\u0026 window.meta.product \u0026\u0026 window.meta.product.variants) || [];\n    var variant = variants.find(function (v) { return String(v.id) === selectedId; });\n    return parseCount(variant \u0026\u0026 (variant.public_title || variant.title));\n  }\n  function quantity() { var input = form() \u0026\u0026 form().querySelector('input[name=\"quantity\"]'); return Math.max(1, parseInt((input \u0026\u0026 input.value) || '1', 10) || 1); }\n  function total() { var pack = packCount(); return pack \u003e 0 ? pack * quantity() : 0; }\n  function maxScents() { var r = rule(); return r ? Math.max(1, Math.floor(total() \/ r.min)) : 0; }\n  function limitText(prefix) { var r = rule(); var max = maxScents(); var units = total(); var word = max === 1 ? 'scent' : 'scents'; return (prefix || '') + 'Scent variety limit: ' + (units ? units + ' total ' + r.unit : 'this pack size') + ' allows up to ' + max + ' ' + word + '.'; }\n  function setMessage(prefix, error, trimmed) {\n    var msg = document.querySelector('[data-bulk-scent-limit-message]');\n    if (!msg || !rule()) return;\n    var max = maxScents(); var count = selected().length; var remain = Math.max(0, max - count);\n    msg.textContent = trimmed ? 'Pack size changed. We kept the first ' + max + ' selected ' + (max === 1 ? 'scent' : 'scents') + '. ' + limitText('') : limitText(prefix) + (remain ? ' Select ' + remain + ' more ' + (remain === 1 ? 'scent' : 'scents') + ' to max out this pack.' : \" You have reached this pack's scent max.\");\n    msg.classList.toggle('is-error', Boolean(error));\n  }\n  function syncHidden() { var values = selected().map(function (input) { return input.value; }); var hidden = document.getElementById('bulk-scents-hidden'); if (hidden) hidden.value = values.join(', '); var display = document.getElementById('selected-scent-display'); if (display) display.textContent = values.length ? values.join(', ') : 'Choose scents below'; }\n  function enforce(prefix, error) { if (!rule()) return true; var all = checks(); if (!all.length) return true; var max = maxScents(); var chosen = selected(); var trimmed = false; if (chosen.length \u003e max) { chosen.slice(max).forEach(function (input) { input.checked = false; }); trimmed = true; } var count = selected().length; all.forEach(function (input) { input.disabled = !input.checked \u0026\u0026 count \u003e= max; }); syncHidden(); setMessage(trimmed ? '' : prefix, error, trimmed); return count \u003c= max; }\n  function init() { if (!rule() || !checks().length) return; document.addEventListener('change', function (event) { var target = event.target; if (target \u0026\u0026 target.matches \u0026\u0026 target.matches('.bulk-scent-checkbox') \u0026\u0026 target.checked \u0026\u0026 selected().length \u003e maxScents()) { target.checked = false; enforce('That would add too many scents. ', true); event.stopPropagation(); return; } setTimeout(function () { enforce('', false); }, 0); setTimeout(function () { enforce('', false); }, 100); }, true); document.addEventListener('input', function () { enforce('', false); }); document.addEventListener('submit', function (event) { if (!rule() || !checks().length) return; if (selected().length \u003c 1) { event.preventDefault(); enforce('Choose at least one scent. ', true); return; } if (!enforce('Too many scents selected. ', true)) event.preventDefault(); }, true); enforce('', false); }\n  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', init); else init();\n})();\n\u003c\/script\u003e","brand":"LoxLivin","offers":[{"title":"10 Pack (10 Sprays)","offer_id":42571750965335,"sku":"BULK-RS-10","price":200.0,"currency_code":"USD","in_stock":true},{"title":"25 Pack (25 Sprays)","offer_id":42571750998103,"sku":"BULK-RS-25","price":500.0,"currency_code":"USD","in_stock":true},{"title":"50 Pack (50 Sprays)","offer_id":42571751030871,"sku":"BULK-RS-50","price":1000.0,"currency_code":"USD","in_stock":true},{"title":"100 Pack (100 Sprays)","offer_id":42571751063639,"sku":"BULK-RS-100","price":2000.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0020\/6661\/2279\/files\/grok-image-1d40f94d-800e-4c50-b8a8-fa04f88237cb.jpg?v=1772238914"}],"url":"https:\/\/www.loxlivin.com\/collections\/bulk-gifts-wholesale.oembed","provider":"LoxLivin'","version":"1.0","type":"link"}