1<!DOCTYPE html> 2<html class="no-js" lang="en"> 3 <head> 4 <title>Faxon Firearms - Sign in</title> 5 <link rel="dns-prefetch preconnect" href="https://cdn11.bigcommerce.com/s-f1hwux" crossorigin><link rel="dns-prefetch preconnect" href="https://fonts.googleapis.com/" crossorigin><link rel="dns-prefetch preconnect" href="https://fonts.gstatic.com/" crossorigin> 6 <meta name="keywords" content="Faxon, AR-15, Barrels, Accessories, ARAK, ARAK-21, ARAK 21, Faxon Firearms, Houlding, Precision, Accuracy, Value, AR Barrels, Custom Barrels, OEM AR Barrels"><meta name="description" content="Faxon Firearms makes American-made rifle and pistol barrels, bolt carrier groups, suppressors, and complete firearms in Greater Cincinnati, Ohio."><meta name='platform' content='bigcommerce.stencil' /> 7 8 9 10 <link href="https://cdn11.bigcommerce.com/s-f1hwux/product_images/web-shot-show-ico-001.png?t=1576153200" rel="shortcut icon"> 11 <meta name="viewport" content="width=device-width, initial-scale=1"> 12 13 <link rel="preconnect" href="https://fonts.googleapis.com"> 14 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> 15 16
16<script> 17 document.documentElement.className = document.documentElement.className.replace('no-js', 'js'); 18 </script>
18 19 20
20<script> 21 function browserSupportsAllFeatures() { 22 return window.Promise 23 && window.fetch 24 && window.URL 25 && window.URLSearchParams 26 && window.WeakMap 27 // object-fit support 28 && ('objectFit' in document.documentElement.style); 29 } 30 31 function loadScript(src) { 32 var js = document.createElement('script'); 33 js.src = src; 34 js.onerror = function () { 35 console.error('Failed to load polyfill script ' + src); 36 }; 37 document.head.appendChild(js); 38 } 39 40 if (!browserSupportsAllFeatures()) { 41 loadScript('https://cdn11.bigcommerce.com/s-f1hwux/stencil/dcf6e980-9b50-013f-9cb6-7a1948be6ce7/e/d05145d0-97fa-013f-e7cd-7608931f64d7/dist/theme-bundle.polyfills.js'); 42 } 43</script>
43 44
44<script>window.consentManagerTranslations = `{"locale":"en","locales":{"consent_manager.data_collection_warning":"en","consent_manager.accept_all_cookies":"en","consent_manager.gdpr_settings":"en","consent_manager.data_collection_preferences":"en","consent_manager.manage_data_collection_preferences":"en","consent_manager.use_data_by_cookies":"en","consent_manager.data_categories_table":"en","consent_manager.allow":"en","consent_manager.accept":"en","consent_manager.deny":"en","consent_manager.dismiss":"en","consent_manager.reject_all":"en","consent_manager.category":"en","consent_manager.purpose":"en","consent_manager.functional_category":"en","consent_manager.functional_purpose":"en","consent_manager.analytics_category":"en","consent_manager.analytics_purpose":"en","consent_manager.targeting_category":"en","consent_manager.advertising_category":"en","consent_manager.advertising_purpose":"en","consent_manager.essential_category":"en","consent_manager.esential_purpose":"en","consent_manager.yes":"en","consent_manager.no":"en","consent_manager.not_available":"en","consent_manager.cancel":"en","consent_manager.save":"en","consent_manager.back_to_preferences":"en","consent_manager.close_without_changes":"en","consent_manager.unsaved_changes":"en","consent_manager.by_using":"en","consent_manager.agree_on_data_collection":"en","consent_manager.change_preferences":"en","consent_manager.cancel_dialog_title":"en","consent_manager.privacy_policy":"en","consent_manager.allow_category_tracking":"en","consent_manager.disallow_category_tracking":"en"},"translations":{"consent_manager.data_collection_warning":"We use cookies (and other similar technologies) to collect data to improve your shopping experience.","consent_manager.accept_all_cookies":"Accept All Cookies","consent_manager.gdpr_settings":"Settings","consent_manager.data_collection_preferences":"Website Data Collection Preferences","consent_manager.manage_data_collection_preferences":"Manage Website Data Collection Preferences","consent_manager.use_data_by_cookies":" uses data collected by cookies and JavaScript libraries to improve your shopping experience.","consent_manager.data_categories_table":"The table below outlines how we use this data by category. To opt out of a category of data collection, select 'No' and save your preferences.","consent_manager.allow":"Allow","consent_manager.accept":"Accept","consent_manager.deny":"Deny","consent_manager.dismiss":"Dismiss","consent_manager.reject_all":"Reject all","consent_manager.category":"Category","consent_manager.purpose":"Purpose","consent_manager.functional_category":"Functional","consent_manager.functional_purpose":"Enables enhanced functionality, such as videos and live chat. If you do not allow these, then some or all of these functions may not work properly.","consent_manager.analytics_category":"Analytics","consent_manager.analytics_purpose":"Provide statistical information on site usage, e.g., web analytics so we can improve this website over time.","consent_manager.targeting_category":"Targeting","consent_manager.advertising_category":"Advertising","consent_manager.advertising_purpose":"Used to create profiles or personalize content to enhance your shopping experience.","consent_manager.essential_category":"Essential","consent_manager.esential_purpose":"Essential for the site and any requested services to work, but do not perform any additional or secondary function.","consent_manager.yes":"Yes","consent_manager.no":"No","consent_manager.not_available":"N/A","consent_manager.cancel":"Cancel","consent_manager.save":"Save","consent_manager.back_to_preferences":"Back to Preferences","consent_manager.close_without_changes":"You have unsaved changes to your data collection preferences. Are you sure you want to close without saving?","consent_manager.unsaved_changes":"You have unsaved changes","consent_manager.by_using":"By using our website, you're agreeing to our","consent_manager.agree_on_data_collection":"By using our website, you're agreeing to the collection of data as described in our ","consent_manager.change_preferences":"You can change your preferences at any time","consent_manager.cancel_dialog_title":"Are you sure you want to cancel?","consent_manager.privacy_policy":"Privacy Policy","consent_manager.allow_category_tracking":"Allow [CATEGORY_NAME] tracking","consent_manager.disallow_category_tracking":"Disallow [CATEGORY_NAME] tracking"}}`;</script>
44 45 46
46<script> 47 window.lazySizesConfig = window.lazySizesConfig || {}; 48 window.lazySizesConfig.loadMode = 1; 49 </script>
49 50
50<script async src="https://cdn11.bigcommerce.com/s-f1hwux/stencil/dcf6e980-9b50-013f-9cb6-7a1948be6ce7/e/d05145d0-97fa-013f-e7cd-7608931f64d7/dist/theme-bundle.head_async.js"></script>
50 51 52 <link href="https://fonts.googleapis.com/css?family=Roboto+Condensed:400,600%7CRoboto:400,700%7CBarlow:700%7CCrimson+Pro:600&display=block" rel="stylesheet"> 53 54 <link rel="preload" href="https://cdn11.bigcommerce.com/s-f1hwux/stencil/dcf6e980-9b50-013f-9cb6-7a1948be6ce7/e/d05145d0-97fa-013f-e7cd-7608931f64d7/dist/theme-bundle.font.js" as="script"> 55
55<script async src="https://cdn11.bigcommerce.com/s-f1hwux/stencil/dcf6e980-9b50-013f-9cb6-7a1948be6ce7/e/d05145d0-97fa-013f-e7cd-7608931f64d7/dist/theme-bundle.font.js"></script>
55 56 57 <link data-stencil-stylesheet href="https://cdn11.bigcommerce.com/s-f1hwux/stencil/dcf6e980-9b50-013f-9cb6-7a1948be6ce7/e/d05145d0-97fa-013f-e7cd-7608931f64d7/css/theme-e0083380-a094-013f-9e19-6ac299bbd107.css" rel="stylesheet"> 58 59 <!-- Start Tracking Code for analytics_googleanalytics4 --> 60
61<script data-cfasync="false" src="https://cdn11.bigcommerce.com/shared/js/google_analytics4_bodl_subscribers-358423becf5d870b8b603a81de597c10f6bc7699.js" integrity="sha256-gtOfJ3Avc1pEE/hx6SKj/96cca7JvfqllWA9FTQJyfI=" crossorigin="anonymous"></script>
vendor: 1 bytes, line 61
61
62<script data-cfasync="false"> 63 (function () { 64 window.dataLayer = window.dataLayer || []; 65 66 function gtag(){ 67 dataLayer.push(arguments); 68 } 69 70 function initGA4(event) { 71 function setupGtag() { 72 function configureGtag() { 73 gtag('js', new Date()); 74 gtag('set', 'developer_id.dMjk3Nj', true); 75 gtag('config', 'G-N43JEEJNHD'); 76 } 77 78 var script = document.createElement('script'); 79 80 script.src = 'https://www.googletagmanager.com/gtag/js?id=G-N43JEEJNHD'; 81 script.async = true; 82 script.onload = configureGtag; 83 84 document.head.appendChild(script); 85 } 86 87 setupGtag(); 88 89 if (typeof subscribeOnBodlEvents === 'function') { 90 subscribeOnBodlEvents('G-N43JEEJNHD', false); 91 } 92 93 window.removeEventListener(event.type, initGA4); 94 } 95 96 97 98 var eventName = document.readyState === 'complete' ? 'consentScriptsLoaded' : 'DOMContentLoaded'; 99 window.addEventListener(eventName, initGA4, false); 100 })() 101</script>
101 102 103<!-- End Tracking Code for analytics_googleanalytics4 --> 104 105<!-- Start Tracking Code for analytics_siteverification --> 106 107<meta name="p:domain_verify" content="e23e5f73d048ff87bf9d0c1ce238d9ca"/> 108 109<!-- End Tracking Code for analytics_siteverification -->
vendor: 79 bytes, lines 109-112
109 110 111 112<script src="https://www.google.com/recaptcha/api.js" async defer></script>
113<script type="text/javascript"> 114var BCData = {}; 115</script>
vendor: 1 bytes, line 115
115
116<script src='https://evmbcwheel.expertvillagemedia.com/assets/front-end-js/evm_spin.js?data-evm-shop-id=store-f1hwux.mybigcommerce.com' async></script>
116<!-- Google tag (gtag.js) -->
vendor: 64 bytes, lines 116-117
116 117<script async src="https://www.googletagmanager.com/gtag/js?id=
117UA-61757888-1
vendor: 12 bytes, line 117
117"></script>
118<script> 119
vendor: 134 bytes, lines 119-123
119window.dataLayer = window.dataLayer || []; 120 function gtag(){dataLayer.push(arguments);} 121 gtag('js', new Date()); 122 123 gtag('config', '
123UA-61757888-1
vendor: 4 bytes, line 123
123');
124</script>
124 125<!-- Google tag (gtag.js) -->
vendor: 64 bytes, lines 125-126
125 126<script async src="https://www.googletagmanager.com/gtag/js?id=
126G-N43JEEJNHD
vendor: 12 bytes, line 126
126"></script>
127<script> 128
vendor: 134 bytes, lines 128-132
128window.dataLayer = window.dataLayer || []; 129 function gtag(){dataLayer.push(arguments);} 130 gtag('js', new Date()); 131 132 gtag('config', '
132G-N43JEEJNHD
vendor: 4 bytes, line 132
132');
133</script>
133<script type='text/javascript'> 134!function(s) { 135 let o = s.createElement('script'), u = s.getElementsByTagName('script')[0]; 136 o.src = 'https://cdn.aggle.net/oir/oir.min.js'; 137 o.async = !0, o.setAttribute('oirtyp', '6311ae17'), o.setAttribute('oirid', 'EB8FBA64'); 138 u.parentNode.insertBefore(o, u); 139}(document); 140</script>
vendor: 1 bytes, line 140
140
141<script type='text/javascript'> 142!function(e) { 143 let t = { }; 144 (e._oirtrk = e._oirtrk || []).push(['track', 'on-site', t]); 145}(window); 146</script>
146<script> 147/* FAXON DEALER HOME - Script Manager: HEAD | All Pages | Script | Essential. 148 * Readable source: storefront/faxon-dealer-home.js, sha256 e103aa8cafc687462b619a77d48c670443a36b563168fcd5f35d8f158d145055 149 * See DEALER-HOME.md. Rep details come from the logged-in dealer's own account, never this script. */ 150/* ============================================================================ 151 * FAXON DEALER HOME ("Welcome Faxon Dealer") 152 * ---------------------------------------------------------------------------- 153 * Robert, 2026-09-30: when a dealer of any tier logs in, they land on a 154 * Dealer Home page with their tier's / buy group's information and their 155 * sales rep's name, phone and email. There is also a "Dealer Home" link in the 156 * header. 157 * 158 * * Who is a dealer, and which sections they see, comes from their customer 159 * group NAME (customerGroupName) -- the same rules as the FaxonApp's 160 * core/dealer_rep.py and PO Processing's tier mapping. "Industry Discount" 161 * groups are not dealers. 162 * * The rep's details are NOT in this script or the page. The FaxonApp 163 * (Sales Tools > Dealer Home) writes each dealer's contact onto their OWN 164 * customer record, as metafield faxon_dealer / rep; this reads it for the 165 * logged-in customer only. If it was worked out for a different group than 166 * the dealer's current one (they were moved since the last sync), the 167 * page shows Faxon inside sales instead -- never an old rep. 168 * * The page itself is an ordinary BigCommerce web page (see 169 * page/dealer-home-page.html): sections marked with classes, edited in 170 * the page editor. This script only decides which ones to show. 171 * 172 * Deployment : Script Manager -> HEAD, All Pages, Essential. Guards itself. 173 * In the head, the page a dealer lands on after logging in is 174 * never painted before they are sent to Dealer Home (2026-10-01). 175 * It still works in the footer, with a brief flash of that page. 176 * ========================================================================== */ 177(function () { 178 'use strict'; 179 180 var CFG = { 181 /* Same public, read-only Storefront API token as the Dealer Order Form. */ 182 storefrontToken: 'eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NiJ9.eyJjaWQiOlsxXSwiY29ycyI6WyJodHRwczovL3d3dy5mYXhvbmZpcmVhcm1zLmNvbSIsImh0dHBzOi8vZmF4b25maXJlYXJtcy5jb20iXSwiZWF0IjoxODIxNjE4NzIwLCJpYXQiOjE3OTAwODI3MjEsImlzcyI6IkJDIiwianRpIjoiYjg4ZGY0ZTAtY2FjZC00MThiLTg0ZDItMTRjNjBhM2JlNDFhIiwic2lkIjo4MzYxMDAsInN1YiI6ImdwMHBsOWZhNjd0cGQ5Z2JycjVtM2tiampoeDNybmsiLCJzdWJfdHlwZSI6MiwidG9rZW5fdHlwZSI6MX0.IEt8m1dldB-MSb1BchLXLKKvj3WiaMHMSRd1kLcAMBcOC97tDldL-gt-zT3DZ3O0-jsmnhegZfbhG-Sf9HDUAQ', 183 homePath: '/dealer-home/', 184 linkLabel: 'Dealer Home', 185 repHomePath: '/rep-home/', // 2026-10-02: Faxon sales reps land here instead 186 repLinkLabel: 'Rep Home', 187 namespace: 'faxon_dealer', 188 key: 'rep', 189 loginFlag: 'faxon-dealer-home:login', // set when the login form is sent 190 loginFlagMaxAgeMs: 10 * 60 * 1000, 191 dealerKey: 'faxon-dealer-home:dealer:v1', // this browser session: {dealer, rep, gid} 192 holdMaxMs: 4000, // longest the after-login page is held hidden 193 prefetchKey: 'faxon-dealer-home:prefetch', // the after-login answer, handed to Dealer Home 194 prefetchMaxAgeMs: 60 * 1000 195 }; 196 197 if (window.__faxonDealerHome) return; 198 199 function log() { 200 if (window.localStorage && localStorage.getItem('faxon-debug')) { 201 try { console.log.apply(console, ['[FaxonDealerHome]'].concat([].slice.call(arguments))); } catch (e) {} 202 } 203 } 204 function ss(k, v) { 205 try { 206 if (v === undefined) return sessionStorage.getItem(k); 207 if (v === null) sessionStorage.removeItem(k); else sessionStorage.setItem(k, v); 208 } catch (e) {} 209 return null; 210 } 211 212 /* --------------------------------------------------------- CLASSIFY GROUP */ 213 /* Mirrors core/dealer_rep.is_dealer() and core/roster._group_to_tier_intake_salesman(). 214 tests/test_dealer_home.js checks this against the Python over every live group name. */ 215 function classify(name) { 216 var n = String(name || '').trim(), g = n.toLowerCase(); 217 var out = { dealer: false, tier: '', buyGroup: '', keys: [] }; 218 if (!n || g.indexOf('industry discount') === 0) return out; 219 var bare = g.indexOf('test-') === 0 ? g.slice(5) : g; 220 var tier = ''; 221 if (g.indexOf('buy') !== -1 && g.indexOf('group') !== -1) tier = 'buy_group'; 222 else if (g.indexOf('retailer') !== -1) tier = 'retailer'; 223 else if (g.indexOf('hvr') !== -1) tier = 'hvr'; 224 else if (g.indexOf('wholesale') !== -1 || g.indexOf('international') !== -1) tier = 'wholesale'; 225 else if (g.indexOf('scheels') !== -1) tier = 'scheels'; 226 if (!tier && bare.indexOf('dealer') !== 0) return out; 227 out.dealer = true; 228 out.tier = tier || 'dealer'; 229 if (tier === 'buy_group') { 230 /* Only a buy group the name actually says. */ 231 if (g.indexOf('sports') !== -1) out.buyGroup = 'sports-inc'; 232 else if (g.indexOf('mid') !== -1 && g.indexOf('state') !== -1) out.buyGroup = 'mid-states'; 233 else if (g.indexOf('worldwide') !== -1) out.buyGroup = 'worldwide';
234 else if (g.indexOf('nbs') !== -1) out.buyGroup = 'nbs'; 235 } 236 out.keys = ['dealer', out.tier === 'buy_group' ? 'buy-group' : out.tier]; 237 if (out.buyGroup) out.keys.push(out.buyGroup); 238 return out; 239 } 240 241 /* A Faxon sales rep's account: a "Sales-Rep" customer group (TEST- prefix 242 allowed). Mirrors core/rep_home.is_rep_group(). Never a dealer group. */ 243 function isRepGroup(name) { 244 var g = String(name || '').trim().toLowerCase(); 245 if (g.indexOf('test-') === 0) g = g.slice(5); 246 g = g.replace(/[^a-z0-9]/g, ''); 247 return g === 'salesrep' || g === 'salesreps' || g === 'faxonsalesrep' || g === 'faxonsalesreps'; 248 } 249 250 /* ------------------------------------------------------------- STOREFRONT */ 251 function gql(query) { 252 return fetch('/graphql', { 253 method: 'POST', 254 credentials: 'same-origin', 255 headers: { 'Content-Type': 'application/json', 'Authorization': 'Bearer ' + CFG.storefrontToken }, 256 body: JSON.stringify({ query: query }) 257 }).then(function (r) { 258 if (!r.ok) throw new Error('GraphQL HTTP ' + r.status); 259 return r.json(); 260 }).then(function (j) { 261 if (j.errors && j.errors.length) throw new Error(j.errors[0].message); 262 return j.data; 263 }); 264 } 265 function customerQuery(withRep) { 266 return 'query DealerHome { customer { entityId firstName company customerGroupId customerGroupName' + 267 (withRep ? ' metafields(namespace: "' + CFG.namespace + '", keys: ["' + CFG.key + '"], first: 1) { edges { node { key value } } }' : '') + 268 ' } }'; 269 } 270 function loggedIn() { 271 return !!document.querySelector('a[href*="action=logout"], a[href*="logout.php"]'); 272 } 273 function path() { return window.location.pathname || '/'; } 274 function onHome() { return path().replace(/\/?$/, '/').toLowerCase() === CFG.homePath; } 275 function onRepHome() { return path().replace(/\/?$/, '/').toLowerCase() === CFG.repHomePath; } 276 function inCheckout() { return /^\/(checkout|finishorder|order-confirmation)/i.test(path()); } 277 278 /* The contact the FaxonApp wrote, if it is for the dealer's current group. */ 279 function repFrom(customer) { 280 var edges = customer && customer.metafields && customer.metafields.edges; 281 var node = edges && edges[0] && edges[0].node; 282 if (!node || !node.value) return null; 283 var v; 284 try { v = JSON.parse(node.value); } catch (e) { return null; } 285 if (!v || v.group_id !== customer.customerGroupId) return null; 286 if (v.kind !== 'rep' && v.kind !== 'agency') return null; 287 if (!v.name && !v.agency) return null; 288 return v; 289 } 290 291 /* The payment terms the FaxonApp wrote from the CRM (2026-10-01). They 292 belong to the customer, not the group, so a group change since the last 293 sync does not hide them -- but only a current dealer sees them at all. */ 294 function termsFrom(customer) { 295 var edges = customer && customer.metafields && customer.metafields.edges; 296 var node = edges && edges[0] && edges[0].node; 297 if (!node || !node.value) return null; 298 var v; 299 try { v = JSON.parse(node.value); } catch (e) { return null; } 300 var t = v && v.kind !== 'none' && v.terms; 301 if (!t || typeof t !== 'object') return null; 302 if (t.kind === 'cc') return { kind: 'cc', card: t.card === true }; 303 if (t.kind === 'terms' && typeof t.text === 'string') { 304 var text = t.text.replace(/\s+/g, ' ').trim().slice(0, 40); 305 if (text) return { kind: 'terms', text: text }; 306 } 307 return null; 308 } 309 310 /* ------------------------------------------------------------ HEADER LINK */ 311 function addLink(kind) { 312 var href = kind === 'rep' ? CFG.repHomePath : CFG.homePath; 313 var label = kind === 'rep' ? CFG.repLinkLabel : CFG.linkLabel; 314 if (document.getElementById('fdh-link')) return; 315 var alt = document.querySelector('.navUser-section--alt'); 316 if (alt) { 317 var li = document.createElement('li'); 318 li.className = 'navUser-item navUser-item--dealer-home'; 319 li.id = 'fdh-link'; 320 var a = document.createElement('a'); 321 a.className = 'navUser-action'; 322 a.href = href; 323 a.textContent = label; 324 li.appendChild(a); 325 alt.insertBefore(li, alt.firstChild); 326 } 327 var sub = document.querySelector('#navPages-account .navPage-subMenu-list'); 328 if (sub && !document.getElementById('fdh-link-mobile')) { 329 var li2 = document.createElement('li'); 330 li2.className = 'navPage-subMenu-item'; 331 li2.id = 'fdh-link-mobile'; 332 var a2 = document.createElement('a'); 333 a2.className = 'navPage-subMenu-action navPages-action'; 334 a2.href = href; 335 a2.textContent = label; 336 li2.appendChild(a2); 337 sub.insertBefore(li2, sub.firstChild); 338 } 339 } 340 341 /* ------------------------------------------------------------- THE PAGE */ 342 function show(root, cls, on) { 343 Array.prototype.forEach.call(root.querySelectorAll('.' + cls), function (el) { el.style.display = on ? '' : 'none'; }); 344 } 345 function el(tag, cls, text) { 346 var e = document.createElement(tag); 347 if (cls) e.className = cls; 348 if (text) e.textContent = text; 349 return e; 350 } 351 function contactCard(rep) { 352 var box = el('div', 'fdh-card'); 353 box.appendChild(el('h3', 'fdh-card-title', rep.kind === 'agency' ? 'Your Faxon Rep Agency' : 'Your Faxon Sales Rep')); 354 if (rep.kind === 'agency') { 355 box.appendChild(el('div', 'fdh-card-name', rep.agency || '')); 356 if (rep.name) box.appendChild(el('div', 'fdh-card-sub', 'Primary contact: ' + rep.name + (rep.title ? ', ' + rep.title : ''))); 357 } else { 358 box.appendChild(el('div', 'fdh-card-name', rep.name || ''));
359 var sub = [rep.title, rep.agency].filter(Boolean).join(' · '); 360 if (sub) box.appendChild(el('div', 'fdh-card-sub', sub)); 361 } 362 if (rep.phone) { 363 var p = el('a', 'fdh-card-line', rep.phone); 364 p.href = 'tel:' + String(rep.phone).replace(/[^0-9+]/g, ''); 365 box.appendChild(p); 366 } 367 if (rep.email) { 368 var m = el('a', 'fdh-card-line', rep.email); 369 m.href = 'mailto:' + rep.email; 370 box.appendChild(m); 371 } 372 return box; 373 } 374 function injectStyles() { 375 if (document.getElementById('fdh-css')) return; 376 var s = document.createElement('style'); 377 s.id = 'fdh-css'; 378 s.textContent = [ 379 '.fdh-card{border:1px solid #d9d5d0;border-left:4px solid #832729;border-radius:4px;padding:16px 20px;margin:0 0 1.25rem;background:#fff;max-width:520px}', 380 '.fdh-card-title{font-family:"Bebas Neue",sans-serif;font-size:22px;letter-spacing:.04em;color:#001734;margin:0 0 .5rem}', 381 '.fdh-card-name{font-weight:700;font-size:18px;color:#001734}', 382 '.fdh-card-sub{color:#4A4642;font-size:14px;margin:.15rem 0 .5rem}', 383 '.fdh-card-line{display:block;color:#832729;font-size:16px;margin:.2rem 0;text-decoration:none}', 384 '.fdh-card-line:hover{text-decoration:underline}', 385 /* The rep and the Faxon Internal Sales Team side by side; stacked on a phone. */ 386 '.fdh-contacts{display:flex;flex-wrap:wrap;gap:20px;align-items:stretch;margin:0 0 1.25rem}', 387 '.fdh-contacts>.fdh-contact,.fdh-contacts>.fdh-card{flex:1 1 300px;max-width:520px;margin:0;box-sizing:border-box}', 388 '.fdh-contacts>.fdh-contact>.fdh-card{max-width:none;height:100%;margin:0;box-sizing:border-box}', 389 /* The dealer's own payment terms, from the CRM. */ 390 '.fdh-terms{border-left:4px solid #832729;background:#f7f5f2;padding:12px 16px;margin:0 0 1rem;max-width:760px}' 391 ].join(''); 392 (document.head || document.documentElement).appendChild(s); 393 } 394 395 var BUY_GROUP_NAMES = { 'nbs': 'NBS', 'sports-inc': 'Sports Inc', 'worldwide': 'Worldwide', 'mid-states': 'Mid States' }; 396 397 /* Same list as the Dealer Order Form script's groupIds(), and the same 398 rule without it: nobody (2026-10-02 -- the old fallback, 460, is now the 399 TEST-Sales-Rep group; a fallback must fail closed). */ 400 function orderFormOn(gid) { 401 var c = window.FaxonDealerOrderConfig, ids = []; 402 if (c && Object.prototype.toString.call(c.groupIds) === '[object Array]') { 403 ids = []; 404 for (var i = 0; i < c.groupIds.length; i++) { 405 var n = parseInt(c.groupIds[i], 10); 406 if (n > 0 && String(n) === String(c.groupIds[i])) ids.push(n); 407 } 408 } 409 return ids.indexOf(gid) !== -1; 410 } 411 412 var SECTIONS = ['fdh-order-form', 'fdh-no-order-form', 'fdh-dealer', 'fdh-retailer', 'fdh-hvr', 'fdh-wholesale', 'fdh-scheels', 'fdh-buy-group', 413 'fdh-nbs', 'fdh-sports-inc', 'fdh-worldwide', 'fdh-mid-states', 'fdh-guest', 'fdh-not-dealer', 414 'fdh-house-contact', 'fdh-terms-net', 'fdh-terms-cc', 'fdh-terms-cc-none']; 415 416 function renderHome(customer) { 417 var root = document.getElementById('faxon-dealer-home'); 418 if (!root) return; 419 SECTIONS.forEach(function (c) { show(root, c, false); }); 420 show(document, 'fdh-loading', false); 421 var info = customer ? classify(customer.customerGroupName) : { dealer: false, keys: [] }; 422 if (!customer) show(root, 'fdh-guest', true); 423 else if (!info.dealer) show(root, 'fdh-not-dealer', true); 424 else { 425 info.keys.forEach(function (k) { show(root, 'fdh-' + k, true); }); 426 /* Whether this dealer's group has the self-serve Dealer Order Form 427 (Sales Tools > Dealer Order Form Groups publishes the list). */ 428 show(root, orderFormOn(customer.customerGroupId) ? 'fdh-order-form' : 'fdh-no-order-form', true); 429 /* "Your Program: NBS" -- the buy group's name where the group name says 430 it; otherwise the page's own text ("Buy Group") stays. */ 431 if (BUY_GROUP_NAMES[info.buyGroup]) { 432 Array.prototype.forEach.call(root.querySelectorAll('.fdh-buy-group-name'), function (n) { 433 n.textContent = BUY_GROUP_NAMES[info.buyGroup]; 434 }); 435 } 436 Array.prototype.forEach.call(root.querySelectorAll('.fdh-name'), function (n) { 437 n.textContent = customer.company || customer.firstName || ''; 438 }); 439 var slot = root.querySelector('.fdh-contact'); 440 var rep = repFrom(customer); 441 injectStyles(); 442 if (slot) { 443 slot.textContent = '';
444 if (rep) slot.appendChild(contactCard(rep)); 445 slot.style.display = rep ? '' : 'none'; 446 } 447 if (!rep) show(root, 'fdh-house-contact', true); 448 /* Payment terms: net terms always; CC as "card on file" or a prompt to 449 add one; nothing for a dealer the CRM does not have. */ 450 var terms = termsFrom(customer); 451 if (terms && terms.kind === 'terms') { 452 Array.prototype.forEach.call(root.querySelectorAll('.fdh-terms-text'), function (n) { 453 n.textContent = terms.text; 454 }); 455 show(root, 'fdh-terms-net', true); 456 } else if (terms && terms.kind === 'cc') { 457 show(root, terms.card ? 'fdh-terms-cc' : 'fdh-terms-cc-none', true); 458 } 459 } 460 root.style.display = ''; 461 log('rendered', info); 462 } 463 464 function remember(customer) { 465 var info = classify(customer && customer.customerGroupName); 466 info.rep = !!(customer && isRepGroup(customer.customerGroupName)); 467 ss(CFG.dealerKey, JSON.stringify({ dealer: !!(customer && info.dealer), rep: info.rep, 468 gid: customer ? customer.customerGroupId : 0 })); 469 return info; 470 } 471 472 /* ------------------------------------------------------ RIGHT AFTER LOGIN */ 473 /* Robert, 2026-10-01: after logging in he saw his cart for a moment before 474 Dealer Home. So the page BigCommerce lands on after a login is held 475 hidden from the moment this script loads -- in the page head when Script 476 Manager places it there -- while ONE query asks who logged in. A dealer 477 goes straight to Dealer Home, which draws from that same answer without 478 asking again; anyone else gets their page back at once. A hold never 479 lasts longer than CFG.holdMaxMs, whatever happens. */ 480 function justLoggedIn() { 481 var flag = parseInt(ss(CFG.loginFlag) || '0', 10); 482 return flag > 0 && Date.now() - flag < CFG.loginFlagMaxAgeMs; 483 } 484 function holdPage() { 485 if (document.getElementById('fdh-hold')) return; 486 var s = document.createElement('style'); 487 s.id = 'fdh-hold'; 488 s.textContent = 'html{visibility:hidden!important;background:#fff!important}'; 489 (document.head || document.documentElement).appendChild(s); 490 setTimeout(releasePage, window.__fdhHoldMs || CFG.holdMaxMs); 491 } 492 function releasePage() { 493 var s = document.getElementById('fdh-hold'); 494 if (s && s.parentNode) s.parentNode.removeChild(s); 495 } 496 function go(url) { (window.__fdhNavigate || function (u) { window.location.replace(u); })(url); } 497 498 var early = null; 499 if (!/\/login\.php/i.test(path()) && !inCheckout() && !onHome() && !onRepHome() && justLoggedIn()) { 500 ss(CFG.loginFlag, null); 501 holdPage(); 502 early = gql(customerQuery(true)).then(function (data) { 503 var customer = data && data.customer; 504 var info = remember(customer); 505 if (customer && info.rep) { 506 /* A sales rep: their own dashboard (the Faxon Rep Home script). */ 507 go(CFG.repHomePath); 508 return { rep: true, redirected: true }; 509 } 510 if (customer && info.dealer) { 511 ss(CFG.prefetchKey, JSON.stringify({ at: Date.now(), customer: customer })); 512 go(CFG.homePath); 513 return { dealer: true, redirected: true }; 514 } 515 releasePage(); 516 return { dealer: false }; 517 }).catch(function (e) { 518 log('after-login check failed', e && e.message); 519 releasePage(); 520 return null; 521 }); 522 } 523 524 /* The answer the after-login check already fetched, if it is this 525 customer's and fresh. Used once. */ 526 function takePrefetch() { 527 var raw = ss(CFG.prefetchKey); 528 if (!raw) return null; 529 ss(CFG.prefetchKey, null); 530 try { 531 var p = JSON.parse(raw); 532 if (p && p.customer && Date.now() - p.at < CFG.prefetchMaxAgeMs) return p.customer; 533 } catch (e) {} 534 return null; 535 } 536 537 /* ------------------------------------------------------------------ BOOT */ 538 function boot() { 539 var isIn = loggedIn(); 540 var loginPage = /\/login\.php/i.test(path()); 541 542 if (loginPage && !isIn) { 543 /* A failed attempt comes back here: forget it, then watch the next one. */ 544 ss(CFG.loginFlag, null); 545 var form = document.querySelector('form.login-form'); 546 var fromCheckout = /checkout/i.test(window.location.search + ' ' + ((form && form.getAttribute('action')) || '')); 547 if (form && !fromCheckout) { 548 form.addEventListener('submit', function () { ss(CFG.loginFlag, String(Date.now())); }); 549 } 550 } 551 if (!isIn) { 552 ss(CFG.dealerKey, null); 553 ss(CFG.prefetchKey, null);
554 if (onHome()) renderHome(null); 555 return; 556 } 557 if (early) { 558 early.then(function (r) { if (r && (r.dealer || r.rep) && !r.redirected) addLink(r.rep ? 'rep' : 'dealer'); }); 559 return; 560 } 561 if (ss(CFG.loginFlag)) ss(CFG.loginFlag, null); // too old to act on 562 563 if (onHome()) { 564 var pre = takePrefetch(); 565 if (pre) { 566 addLink(); 567 renderHome(pre); 568 return; 569 } 570 } 571 var cached = null; 572 try { cached = JSON.parse(ss(CFG.dealerKey) || 'null'); } catch (e) { cached = null; } 573 if (cached && cached.rep && !onHome()) { addLink('rep'); return; } 574 if (cached && cached.dealer && !onHome()) { addLink(); return; } 575 if (cached && !cached.dealer && !onHome()) return; 576 577 gql(customerQuery(onHome())).then(function (data) { 578 var customer = data && data.customer; 579 var info = remember(customer); 580 if (customer && info.rep) addLink('rep'); 581 else if (customer && info.dealer) addLink(); 582 if (onHome()) renderHome(customer); 583 }).catch(function (e) { 584 log('failed', e && e.message); 585 if (onHome()) { 586 show(document, 'fdh-loading', false); 587 var root = document.getElementById('faxon-dealer-home'); 588 if (root) { 589 /* The general dealer block and Faxon inside sales -- nothing that 590 depends on who they are. */ 591 root.style.display = ''; 592 SECTIONS.forEach(function (c) { show(root, c, false); }); 593 show(root, 'fdh-dealer', true); 594 show(root, 'fdh-house-contact', true); 595 } 596 } 597 }); 598 } 599 600 window.__faxonDealerHome = { classify: classify, isRepGroup: isRepGroup, repFrom: repFrom, termsFrom: termsFrom, cfg: CFG }; 601 if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', boot); 602 else boot(); 603})(); 604</script>
604<script> 605/* FAXON DEALER ORDER FORM - customer groups that get the order form. 606 * Written by the FaxonApp (Sales Tools > Dealer Order Form Groups). 607 * Edits made here are overwritten on the next publish. */ 608window.FaxonDealerOrderConfig = {"groupIds":[60,67,78,82,97,102,104,105,253,254,255,256,259,260,261,262,263,264,265,266,268,270,271,272,273,274,275,277,279,280,282,283,284,285,286,287,288,289,291,292,293,294,295,297,300,301,302,303,304,305,307,308,309,310,311,313,314,315,316,317,318,319,320,321,322,323,325,326,327,328,329,331,332,333,334,335,336,338,339,340,341,342,344,345,346,347,348,349,351,352,353,354,355,356,357,358,359,360,361,363,364,365,366,367,368,370,371,372,373,374,375,376,377,378,379,380,382,383,384,385,386,387,389,390,391,392,393,395,396,397,398,399,401,402,403,404,405,406,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458],"publishedAt":"2026-10-01T13:50:25"}; 609</script>
609 610
610<script data-cfasync="false" src="https://microapps.bigcommerce.com/bodl-events/1.9.4/index.js" integrity="sha256-Y0tDj1qsyiKBRibKllwV0ZJ1aFlGYaHHGl/oUFoXJ7Y=" nonce="" crossorigin="anonymous"></script>
610 611
611<script data-cfasync="false" nonce=""> 612 613 (function() { 614 function decodeBase64(base64) { 615 const text = atob(base64); 616 const length = text.length; 617 const bytes = new Uint8Array(length); 618 for (let i = 0; i < length; i++) { 619 bytes[i] = text.charCodeAt(i); 620 } 621 const decoder = new TextDecoder(); 622 return decoder.decode(bytes); 623 } 624 window.bodl = JSON.parse(decodeBase64("eyJzZXNzaW9uIjp7ImlkIjoiYWU3OTY4ODMtZmJmMS00OWU5LWEzZjQtMzhkYTliNDQ0YTQ2IiwiZmlyc3RfdG91Y2hfdGltZXN0YW1wIjoiMjAyNi0xMC0wNFQwMDoxNDowOCIsImZpcnN0X3RvdWNoX3JlZmVycmFsX3VybCI6IiIsImZpcnN0X3RvdWNoX3JlcXVlc3RfdXJsIjoiaHR0cHM6Ly9mYXhvbmZpcmVhcm1zLmNvbS9sb2dpbi5waHAifSwic2hvcHBlciI6eyJ2aXNpdG9yX2lkIjoiIiwiY3VzdG9tZXJfaWQiOm51bGwsImVtYWlsIjpudWxsLCJmaXJzdF9uYW1lIjpudWxsLCJsYXN0X25hbWUiOm51bGx9LCJkYXRhX2NvbnNlbnQiOnsiZnVuY3Rpb25hbCI6dHJ1ZSwiYW5hbHl0aWNzIjp0cnVlLCJhZHZlcnRpc2luZyI6dHJ1ZX0sImV2ZW50cyI6W119")); 625 })() 626 627 </script>
627 628
629<script nonce=""> 630(function () { 631 var xmlHttp = new XMLHttpRequest(); 632 633 xmlHttp.open('POST', 'https://bes.gcp.data.bigcommerce.com/nobot'); 634 xmlHttp.setRequestHeader('Content-Type', 'application/json'); 635 xmlHttp.send('{"store_id":"836100","timezone_offset":"-4.0","timestamp":"2026-10-04T00:14:08.74125800Z","visit_id":"79024c42-712f-428a-9de9-2913e1ce343a","channel_id":1}'); 636})(); 637</script>
637 638 639 640 641
641<script> 642 var theme_settings = { 643 show_fast_cart: true, 644 linksPerCol: 10, 645 }; 646 </script>
646 647 648 <link rel="preload" href="https://cdn11.bigcommerce.com/s-f1hwux/stencil/dcf6e980-9b50-013f-9cb6-7a1948be6ce7/e/d05145d0-97fa-013f-e7cd-7608931f64d7/dist/theme-bundle.main.js" as="script"> 649 </head> 650 <body> 651 <svg data-src="https://cdn11.bigcommerce.com/s-f1hwux/stencil/dcf6e980-9b50-013f-9cb6-7a1948be6ce7/e/d05145d0-97fa-013f-e7cd-7608931f64d7/img/icon-sprite.svg" class="icons-svg-sprite"></svg> 652 653 <header class="header" role="banner"> 654 <a href="#" class="mobileMenu-toggle" data-mobile-menu-toggle="menu" 655 role="button" aria-label="Toggle navigation menu"> 656 <span class="mobileMenu-toggleIcon"></span> 657 </a> 658 659 <div class="header-logo--wrap"> 660 <div class="header-logo"> 661 662 <div class="logo-and-toggle"> 663 <div class="desktopMenu-toggle"> 664 <a href="javascript:void(0);" class="mobileMenu-toggle" 665 role="button" aria-label="Toggle navigation menu"> 666 <span class="mobileMenu-toggleIcon"></span> 667 </a> 668 </div> 669 670 <div class="logo-wrap"><a href="https://faxonfirearms.com/" class="header-logo__link" data-header-logo-link> 671 <div class="header-logo-image-container"> 672 <img class="header-logo-image" 673 src="https://cdn11.bigcommerce.com/s-f1hwux/images/stencil/100x45/faxon-firearms-hi_1775138596__12458.original.png" 674 srcset="https://cdn11.bigcommerce.com/s-f1hwux/images/stencil/100x45/faxon-firearms-hi_1775138596__12458.original.png 1x, https://cdn11.bigcommerce.com/s-f1hwux/images/stencil/200x90/faxon-firearms-hi_1775138596__12458.original.png 2x" 675 alt="Faxon Firearms" 676 title="Faxon Firearms"> 677 </div> 678</a> 679</div> 680 </div> 681 682 <div class="quickSearchWrap" id="quickSearch" aria-hidden="true" tabindex="-1" data-prevent-quick-search-close> 683 <div> 684 <!-- snippet location forms_search --> 685 <form class="form" action="https://faxonfirearms.com/search.php"> 686 <fieldset class="form-fieldset"> 687 <div class="form-field"> 688 <label class="is-srOnly" for="search_query">Search</label> 689 <input class="form-input" data-search-quick name="search_query" id="search_query" data-error-message="Search field cannot be empty." placeholder="What are you looking for?" autocomplete="off"> 690 <button type="submit" class="form-button" aria-label="Search"> 691 <i class="icon" aria-hidden="true"> 692 <svg><use xlink:href="#icon-search" /></svg> 693 </i> 694 </button> 695 </div> 696 </fieldset> 697 </form> 698 <section class="quickSearchResults" data-bind="html: results"></section> 699 <p role="status" 700 aria-live="polite" 701 class="aria-description--hidden" 702 data-search-aria-message-predefined-text="product results for" 703 ></p> 704</div> 705 </div> 706 <div class="navUser-wrap"> 707 <nav class="navUser"> 708 <ul class="navUser-section navUser-section--alt"> 709 <li class="navUser-item navUser-item--account"> 710 <i class="icon" aria-hidden="true"> 711 <svg><use xlink:href="#icon-user" /></svg> 712 </i> 713 <a class="navUser-action" 714 href="https://faxonfirearms.com/login.php" 715 aria-label="Sign in" 716 > 717 Sign in 718 </a> 719 <span>or</span> <a class="navUser-action" href="https://faxonfirearms.com/login.php?action=create_account">Register</a> 720 </li> 721 <li class="navUser-item navUser-item--mobile-search"> 722 <i class="icon" aria-hidden="true"> 723 <svg><use xlink:href="#icon-search" /></svg> 724 </i> 725 </li> 726 <li class="navUser-item navUser-item--cart"> 727 <a 728 class="navUser-action" 729 data-cart-preview 730 data-dropdown="cart-preview-dropdown" 731 data-options="align:right" 732 href="https://faxonfirearms.com/cart.php" 733 aria-label="Cart with 0 items" 734 > 735 <i class="icon" aria-hidden="true"> 736 <svg><use xlink:href="#icon-cart" /></svg> 737 </i> 738 (<span class=" cart-quantity"></span>) 739 </a> 740 741 <div class="dropdown-menu" id="cart-preview-dropdown" data-dropdown-content aria-hidden="true"></div> 742 </li> 743 </ul> 744</nav> 745 </div> 746 </div> 747 </div> 748 749 <div class="navPages-container" id="menu" data-menu>
750 <span class="mobile-closeNav"> 751 <i class="icon" aria-hidden="true"> 752 <svg><use xlink:href="#icon-close-large" /></svg> 753 </i> 754 close 755</span> 756<nav class="navPages"> 757 <ul class="navPages-list navPages-list--user 5765697a656e20596f756e67"> 758 <li class="navPages-item"> 759 <i class="icon" aria-hidden="true"> 760 <svg><use xlink:href="#icon-user" /></svg> 761 </i> 762 <a class="navPages-action" href="https://faxonfirearms.com/login.php">Sign in</a> 763 or 764 <a class="navPages-action" 765 href="https://faxonfirearms.com/login.php?action=create_account" 766 aria-label="Register" 767 > 768 Register 769 </a> 770 </li> 771 </ul> 772 <ul class="navPages-list navPages-mega navPages-mainNav"> 773 <li class="navPages-item"> 774 <a class="navPages-action" 775 href="https://faxonfirearms.com/hotbuys/" 776 aria-label="Hot Buys" 777> 778 Hot Buys 779</a> 780 </li> 781 <li class="navPages-item"> 782 <a class="navPages-action has-subMenu" 783 href="https://faxonfirearms.com/arak-21/" 784 data-collapsible="navPages-159" 785> 786 ARAK-21® 787 <i class="icon navPages-action-moreIcon" aria-hidden="true"> 788 <svg><use xlink:href="#icon-chevron-down" /></svg> 789 </i> 790</a> 791<div class="column-menu navPage-subMenu" id="navPages-159" aria-hidden="true" tabindex="-1"> 792 <ul class="navPage-subMenu-list"> 793 <li class="navPage-subMenu-item"> 794 <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use xlink:href="#icon-chevron-right" /></svg></i> 795 <a class="navPage-subMenu-action navPages-action" href="https://faxonfirearms.com/arak-21/complete-upper-receivers">ARAK-21® Complete Upper Receivers</a> 796 797 </li> 798 <li class="navPage-subMenu-item"> 799 <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use xlink:href="#icon-chevron-right" /></svg></i> 800 <a class="navPage-subMenu-action navPages-action" href="https://faxonfirearms.com/arak-21/arak-21-xrs-complete-rifles/">ARAK-21® XRS Complete Rifles</a> 801 802 </li> 803 <li class="navPage-subMenu-item"> 804 <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use xlink:href="#icon-chevron-right" /></svg></i> 805 <a class="navPage-subMenu-action navPages-action" href="https://faxonfirearms.com/arak-21/barrel-assembly-units">ARAK-21® Barrel Assembly Units</a> 806 807 </li> 808 <li class="navPage-subMenu-item"> 809 <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use xlink:href="#icon-chevron-right" /></svg></i> 810 <a class="navPage-subMenu-action navPages-action" href="https://faxonfirearms.com/arak-21/arak-21-caliber-conversion-kits/">ARAK-21® Caliber Conversion Kits</a> 811 812 </li> 813 </ul> 814</div> 815 </li> 816 <li class="navPages-item"> 817 <a class="navPages-action has-subMenu" 818 href="https://faxonfirearms.com/suppressors/-1" 819 data-collapsible="navPages-287" 820> 821 Suppressors 822 <i class="icon navPages-action-moreIcon" aria-hidden="true"> 823 <svg><use xlink:href="#icon-chevron-down" /></svg> 824 </i> 825</a> 826<div class="column-menu navPage-subMenu" id="navPages-287" aria-hidden="true" tabindex="-1"> 827 <ul class="navPage-subMenu-list"> 828 <li class="navPage-subMenu-item"> 829 <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use xlink:href="#icon-chevron-right" /></svg></i> 830 <a class="navPage-subMenu-action navPages-action" href="https://faxonfirearms.com/suppressors/twenty-toucan/">Twenty-Toucan®</a> 831 832 </li> 833 <li class="navPage-subMenu-item"> 834 <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use xlink:href="#icon-chevron-right" /></svg></i> 835 <a class="navPage-subMenu-action navPages-action" href="https://faxonfirearms.com/suppressors/harmonix-ion/">Harmonix® ION</a> 836 837 </li> 838 <li class="navPage-subMenu-item"> 839 <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use xlink:href="#icon-chevron-right" /></svg></i> 840 <a class="navPage-subMenu-action navPages-action" href="https://faxonfirearms.com/suppressors/harmonix-sentry/">Harmonix® Sentry</a> 841 842 </li> 843 <li class="navPage-subMenu-item"> 844 <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use xlink:href="#icon-chevron-right" /></svg></i> 845 <a class="navPage-subMenu-action navPages-action" href="https://faxonfirearms.com/suppressors/coresync/">Coresync®</a> 846 847 </li> 848 <li class="navPage-subMenu-item"> 849 <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use xlink:href="#icon-chevron-right" /></svg></i> 850 <a class="navPage-subMenu-action navPages-action" href="https://faxonfirearms.com/suppressors/suppressor-mounts/">Suppressor Mounts</a> 851 852 </li> 853 </ul> 854</div> 855 </li> 856 <li class="navPages-item"> 857 <a class="navPages-action has-subMenu" 858 href="https://faxonfirearms.com/ar15-firearms/" 859 data-collapsible="navPages-126" 860> 861 AR15 Firearms 862 <i class="icon navPages-action-moreIcon" aria-hidden="true"> 863 <svg><use xlink:href="#icon-chevron-down" /></svg> 864 </i> 865</a> 866<div class="column-menu navPage-subMenu" id="navPages-126" aria-hidden="true" tabindex="-1"> 867 <ul class="navPage-subMenu-list"> 868 <li class="navPage-subMenu-item"> 869 <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use xlink:href="#icon-chevron-right" /></svg></i> 870 <a class="navPage-subMenu-action navPages-action" href="https://faxonfirearms.com/ar15-firearms/sport/">SPORT</a> 871 872 </li> 873 <li class="navPage-subMenu-item"> 874 <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use xlink:href="#icon-chevron-right" /></svg></i> 875 <a class="navPage-subMenu-action navPages-action" href="https://faxonfirearms.com/ar15-firearms/pro/">PRO</a> 876 877 </li> 878 <li class="navPage-subMenu-item"> 879 <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use xlink:href="#icon-chevron-right" /></svg></i> 880 <a class="navPage-subMenu-action navPages-action" href="https://faxonfirearms.com/ar15-firearms/premiere/">PREMIERE</a> 881 882 </li> 883 <li class="navPage-subMenu-item"> 884 <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use xlink:href="#icon-chevron-right" /></svg></i> 885 <a class="navPage-subMenu-action navPages-action" href="https://faxonfirearms.com/ar15-firearms/ion/">ION (Lightweight)</a> 886 887 </li> 888 </ul> 889</div> 890 </li> 891 <li class="navPages-item"> 892 <a class="navPages-action has-subMenu" 893 href="https://faxonfirearms.com/ar15-upper-receivers/" 894 data-collapsible="navPages-127" 895> 896 AR15 Upper Receivers 897 <i class="icon navPages-action-moreIcon" aria-hidden="true"> 898 <svg><use xlink:href="#icon-chevron-down" /></svg> 899 </i> 900</a> 901<div class="column-menu navPage-subMenu" id="navPages-127" aria-hidden="true" tabindex="-1"> 902 <ul class="navPage-subMenu-list"> 903 <li class="navPage-subMenu-item"> 904 <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use xlink:href="#icon-chevron-right" /></svg></i> 905 <a class="navPage-subMenu-action navPages-action" href="https://faxonfirearms.com/upper-receiver-groups/stripped-upper-receivers/">Stripped Upper Receivers</a> 906 907 </li> 908 <li class="navPage-subMenu-item"> 909 <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use xlink:href="#icon-chevron-right" /></svg></i> 910 <a class="navPage-subMenu-action navPages-action" href="https://faxonfirearms.com/upper-receiver-groups/arak-21-complete-upper-receivers/">ARAK-21® Complete Upper Receivers</a> 911 912 </li> 913 <li class="navPage-subMenu-item"> 914 <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use xlink:href="#icon-chevron-right" /></svg></i> 915 <a class="navPage-subMenu-action navPages-action" href="https://faxonfirearms.com/upper-receivers/barreled-upper-receiver-groups/">Barreled Upper Receiver Groups</a> 916 917 </li> 918 <li class="navPage-subMenu-item"> 919 <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use xlink:href="#icon-chevron-right" /></svg></i> 920 <a class="navPage-subMenu-action navPages-action" href="https://faxonfirearms.com/upper-receivers/barreled-upper-receiver-groups-suppressor-ready/">Barreled Upper Receiver Groups - Suppressor Ready</a> 921 922 </li> 923 <li class="navPage-subMenu-item"> 924 <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use xlink:href="#icon-chevron-right" /></svg></i> 925 <a class="navPage-subMenu-action navPages-action" href="https://faxonfirearms.com/upper-receiver-groups/complete-upper-receiver-groups/">Complete Upper Receiver Groups</a> 926 927 </li> 928 <li class="navPage-subMenu-item"> 929 <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use xlink:href="#icon-chevron-right" /></svg></i> 930 <a class="navPage-subMenu-action navPages-action" href="https://faxonfirearms.com/upper-receivers/complete-upper-receiver-groups-suppressor-ready/">Complete Upper Receiver Groups - Suppressor Ready</a> 931 932 </li> 933 </ul> 934</div> 935 </li> 936 <li class="navPages-item"> 937 <a class="navPages-action" 938 href="https://faxonfirearms.com/ar10-firearms/" 939 aria-label="AR10 Firearms" 940> 941 AR10 Firearms 942</a> 943 </li> 944 <li class="navPages-item"> 945 <a class="navPages-action has-subMenu" 946 href="https://faxonfirearms.com/boltactionfirearms" 947 data-collapsible="navPages-230" 948> 949 Bolt Action 950 <i class="icon navPages-action-moreIcon" aria-hidden="true"> 951 <svg><use xlink:href="#icon-chevron-down" /></svg> 952 </i> 953</a> 954<div class="column-menu navPage-subMenu" id="navPages-230" aria-hidden="true" tabindex="-1"> 955 <ul class="navPage-subMenu-list"> 956 <li class="navPage-subMenu-item"> 957 <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use xlink:href="#icon-chevron-right" /></svg></i> 958 <a class="navPage-subMenu-action navPages-action" href="https://faxonfirearms.com/bolt-action/bolt-action-receivers-actions/">Bolt Action Receivers & Actions</a> 959 960 </li> 961 <li class="navPage-subMenu-item"> 962 <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use xlink:href="#icon-chevron-right" /></svg></i> 963 <a class="navPage-subMenu-action navPages-action" href="https://faxonfirearms.com/firearms/bolt-action/barreled-actions/">Barreled Actions</a> 964 965 </li> 966 <li class="navPage-subMenu-item"> 967 <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use xlink:href="#icon-chevron-right" /></svg></i> 968 <a class="navPage-subMenu-action navPages-action" href="https://faxonfirearms.com/firearms/bolt-action/complete-bolt-action-rifles/">Complete Bolt Action Rifles</a> 969 970 </li> 971 </ul> 972</div> 973 </li> 974 <li class="navPages-item"> 975 <a class="navPages-action" 976 href="https://faxonfirearms.com/firearms/fx-19-pistols/" 977 aria-label="FX-19 Pistols" 978> 979 FX-19 Pistols 980</a> 981 </li> 982 <li class="navPages-item"> 983 <a class="navPages-action has-subMenu" 984 href="https://faxonfirearms.com/receivers-sets/" 985 data-collapsible="navPages-266" 986> 987 Receivers & Sets 988 <i class="icon navPages-action-moreIcon" aria-hidden="true"> 989 <svg><use xlink:href="#icon-chevron-down" /></svg> 990 </i> 991</a> 992<div class="column-menu navPage-subMenu" id="navPages-266" aria-hidden="true" tabindex="-1"> 993 <ul class="navPage-subMenu-list"> 994 <li class="navPage-subMenu-item"> 995 <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use xlink:href="#icon-chevron-right" /></svg></i> 996 <a class="navPage-subMenu-action navPages-action" href="https://faxonfirearms.com/receivers-sets/ar15-receivers-sets/">AR15 Receivers & Sets</a> 997 998 </li> 999 <li class="navPage-subMenu-item"> 1000 <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use xlink:href="#icon-chevron-right" /></svg></i> 1001 <a class="navPage-subMenu-action navPages-action" href="https://faxonfirearms.com/receivers-sets/ar10-receivers-sets/">AR10 Receivers & Sets</a> 1002 1003 </li> 1004 <li class="navPage-subMenu-item"> 1005 <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use xlink:href="#icon-chevron-right" /></svg></i> 1006 <a class="navPage-subMenu-action navPages-action" href="https://faxonfirearms.com/receivers/bolt-action-receivers/">Bolt Action Receivers</a> 1007 <i class="icon navPages-action-moreIcon navPages-action-closed" aria-hidden="true"><svg><use xlink:href="#icon-plus" /></svg></i> 1008 <i class="icon navPages-action-moreIcon navPages-action-open" aria-hidden="true"><svg><use xlink:href="#icon-minus" /></svg></i> 1009 1010 </li> 1011 <li class="navPage-childList-item"> 1012 <a class="navPage-childList-action navPages-action" href="https://faxonfirearms.com/receivers-sets/bolt-action-receivers/barreled-actions/">Barreled Actions</a> 1013 </li> 1014 <li class="navPage-subMenu-item"> 1015 <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use xlink:href="#icon-chevron-right" /></svg></i> 1016 <a class="navPage-subMenu-action navPages-action" href="https://faxonfirearms.com/receivers/rimfire-receivers/">Rimfire Receivers</a> 1017 <i class="icon navPages-action-moreIcon navPages-action-closed" aria-hidden="true"><svg><use xlink:href="#icon-plus" /></svg></i> 1018 <i class="icon navPages-action-moreIcon navPages-action-open" aria-hidden="true"><svg><use xlink:href="#icon-minus" /></svg></i> 1019 1020 </li> 1021 <li class="navPage-childList-item"> 1022 <a class="navPage-childList-action navPages-action" href="https://faxonfirearms.com/receivers-sets/rimfire-receivers/barreled-actions/">Barreled Actions</a> 1023 </li> 1024 </ul> 1025</div> 1026 </li> 1027 <li class="navPages-item"> 1028 <a class="navPages-action has-subMenu" 1029 href="https://faxonfirearms.com/rifle-barrels/" 1030 data-collapsible="navPages-30" 1031> 1032 Rifle Barrels 1033 <i class="icon navPages-action-moreIcon" aria-hidden="true"> 1034 <svg><use xlink:href="#icon-chevron-down" /></svg> 1035 </i> 1036</a> 1037<div class="column-menu navPage-subMenu" id="navPages-30" aria-hidden="true" tabindex="-1"> 1038 <ul class="navPage-subMenu-list"> 1039 <li class="navPage-subMenu-item"> 1040 <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use xlink:href="#icon-chevron-right" /></svg></i> 1041 <a class="navPage-subMenu-action navPages-action" href="https://faxonfirearms.com/rifle-barrels/arak-21-barrels/">ARAK-21® Barrels</a> 1042 <i class="icon navPages-action-moreIcon navPages-action-clos
1042ed" aria-hidden="true"><svg><use xlink:href="#icon-plus" /></svg></i> 1043 <i class="icon navPages-action-moreIcon navPages-action-open" aria-hidden="true"><svg><use xlink:href="#icon-minus" /></svg></i> 1044 1045 </li> 1046 <li class="navPage-childList-item"> 1047 <a class="navPage-childList-action navPages-action" href="https://faxonfirearms.com/rifle-barrels/arak-21-barrels/arak-21-barrel-assembly-units/">ARAK-21® Barrel Assembly Units</a> 1048 </li> 1049 <li class="navPage-childList-item"> 1050 <a class="navPage-childList-action navPages-action" href="https://faxonfirearms.com/rifle-barrels/arak-21-barrels/arak-21-caliber-conversion-kits/">ARAK-21® Caliber Conversion Kits</a> 1051 </li> 1052 <li class="navPage-subMenu-item"> 1053 <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use xlink:href="#icon-chevron-right" /></svg></i> 1054 <a class="navPage-subMenu-action navPages-action" href="https://faxonfirearms.com/rifle-barrels/bolt-action-barrels/">Bolt Action Barrels</a> 1055 <i class="icon navPages-action-moreIcon navPages-action-closed" aria-hidden="true"><svg><use xlink:href="#icon-plus" /></svg></i> 1056 <i class="icon navPages-action-moreIcon navPages-action-open" aria-hidden="true"><svg><use xlink:href="#icon-minus" /></svg></i> 1057 1058 </li> 1059 <li class="navPage-childList-item"> 1060 <a class="navPage-childList-action navPages-action" href="https://faxonfirearms.com/rifle-barrels/bolt-action/fx7-prefit/">FX7 Prefit</a> 1061 </li> 1062 <li class="navPage-childList-item"> 1063 <a class="navPage-childList-action navPages-action" href="https://faxonfirearms.com/rifle-barrels/bolt-action/remage-barrels/">RemAge Barrels</a> 1064 </li> 1065 <li class="navPage-childList-item"> 1066 <a class="navPage-childList-action navPages-action" href="https://faxonfirearms.com/rifle-barrels/bolt-action-barrels/savage-110-barrels/">Savage 110 Barrels</a> 1067 </li> 1068 <li class="navPage-subMenu-item"> 1069 <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use xlink:href="#icon-chevron-right" /></svg></i> 1070 <a class="navPage-subMenu-action navPages-action" href="https://faxonfirearms.com/rifle-barrels/duty-series-barrels/">Duty Series Barrels</a> 1071 <i class="icon navPages-action-moreIcon navPages-action-closed" aria-hidden="true"><svg><use xlink:href="#icon-plus" /></svg></i> 1072 <i class="icon navPages-action-moreIcon navPages-action-open" aria-hidden="true"><svg><use xlink:href="#icon-minus" /></svg></i> 1073 1074 </li> 1075 <li class="navPage-childList-item"> 1076 <a class="navPage-childList-action navPages-action" href="https://faxonfirearms.com/rifle-barrels/ar-15/5-56-nato-223-remington/">5.56 NATO / .223 Remington</a> 1077 </li> 1078 <li class="navPage-childList-item"> 1079 <a class="navPage-childList-action navPages-action" href="https://faxonfirearms.com/rifle-barrels/duty-series-barrels/300-blk/">.300 BLK</a> 1080 </li> 1081 <li class="navPage-childList-item"> 1082 <a class="navPage-childList-action navPages-action" href="https://faxonfirearms.com/rifle-barrels/ar-15/7-62x39-russian/">7.62x39</a> 1083 </li> 1084 <li class="navPage-childList-item"> 1085 <a class="navPage-childList-action navPages-action" href="https://faxonfirearms.com/rifle-barrels/ar-15/350-legend/">350 Legend</a> 1086 </li> 1087 <li class="navPage-childList-item"> 1088 <a class="navPage-childList-action navPages-action" href="https://faxonfirearms.com/rifle-barrels/ar-15-barrels/400-legend/">400 Legend</a> 1089 </li> 1090 <li class="navPage-childList-item"> 1091 <a class="navPage-childList-action navPages-action" href="https://faxonfirearms.com/rifle-barrels/ar-15-barrels/pistol-caliber-carbine/9mm/">9mm</a> 1092 </li> 1093 <li class="navPage-childList-item"> 1094 <a class="navPage-childList-action navPages-action" href="https://faxonfirearms.com/rifle-barrels/ar-15/pistol-caliber-carbine/10mm-auto/">10mm Auto</a> 1095 </li> 1096 <li class="navPage-childList-item"> 1097 <a class="navPage-childList-action navPages-action" href="https://faxonfirearms.com/rifle-barrels/ar-15/458-socom/">458 Socom/450 Bushmaster</a> 1098 </li> 1099 <li class="navPage-childList-item"> 1100 <a class="navPage-childList-action navPages-action" href="https://faxonfirearms.com/rifle-barrels/duty-series-barrels/308-winchester/">.308 Winchester</a> 1101 </li> 1102 <li class="navPage-childList-item"> 1103 <a class="navPage-childList-action navPages-action" href="https://faxonfirearms.com/rifle-barrels/duty-series-barrels/8-6-blk/">8.6 BLK</a> 1104 </li> 1105 <li class="navPage-subMenu-item"> 1106 <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use xlink:href="#icon-chevron-right" /></svg></i> 1107 <a class="navPage-subMenu-action navPages-action" href="https://faxonfirearms.com/rifle-barrels/match-series-barrels/">Match Series Barrels</a> 1108 <i class="icon navPages-action-moreIcon navPages-action-closed" aria-hidden="true"><svg><use xlink:href="#icon-plus" /></svg></i> 1109 <i class="icon navPages-action-moreIcon navPages-action-open" aria-hidden="true"><svg><use xlink:href="#icon-minus" /></svg></i> 1110 1111 </li> 1112 <li class="navPage-childList-item"> 1113 <a class="navPage-childList-action navPages-action" href="https://faxonfirearms.com/rifle-barrels/ar-15/223-wylde/">.223 Wylde</a> 1114 </li> 1115 <li class="navPage-childList-item"> 1116 <a class="navPage-childList-action navPages-action" href="https://faxonfirearms.com/rifle-barrels/match-series-barrels/300-blk/">.300 BLK</a> 1117 </li> 1118 <li class="navPage-childList-item"> 1119 <a class="navPage-childList-action navPages-action" href="https://faxonfirearms.com/rifle-barrels/ar-15/6mm-arc/">6MM ARC</a> 1120 </li> 1121 <li class="navPage-childList-item"> 1122 <a class="navPage-childList-action navPages-action" href="https://faxonfirearms.com/rifle-barrels/ar-15/22-arc/">22 ARC</a> 1123 </li> 1124 <li class="navPage-childList-item"> 1125 <a class="navPage-childList-action navPages-action" href="https://faxonfirearms.com/rifle-barrels/ar-15/338-arc/">338 ARC</a> 1126 </li> 1127 <li class="navPage-childList-item"> 1128 <a class="navPage-childList-action navPages-action" href="https://faxonfirearms.com/rifle-barrels/ar-15/6-5-grendel/">6.5 Grendel</a> 1129 </li> 1130 <li class="navPage-childList-item"> 1131 <a class="navPage-childList-action navPages-action" href="https://faxonfirearms.com/rifle-barrels/match-series-barrels/308-winchester/">.308 Winchester</a> 1132 </li> 1133 <li class="navPage-childList-item"> 1134 <a class="navPage-childList-action navPages-action" href="https://faxonfirearms.com/rifle-barrels/match-series-barrels/6-5-creedmoor/">6.5 Creedmoor</a> 1135 </li> 1136 <li class="navPage-childList-item"> 1137 <a class="navPage-childList-action navPages-action" href="https://faxonfirearms.com/rifle-barrels/match-series-barrels/8-6-blk/">8.6 BLK</a> 1138 </li> 1139 <li class="navPage-childList-item"> 1140 <a class="navPage-childList-action navPages-action" href="https://faxonfirearms.com/rifle-barrels/match-series-barrels/22-creedmoor/">22 Creedmoor</a> 1141 </li> 1142 <li class="navPage-subMenu-item"> 1143 <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use xlink:href="#icon-chevron-right" /></svg></i> 1144 <a class="navPage-subMenu-action navPages-action" href="https://faxonfirearms.com/rifle-barrels/match-x-series/">MATCH-X Series</a> 1145 <i class="icon navPages-action-moreIcon navPages-action-closed" aria-hidden="true"><svg><use xlink:href="#icon-plus" /></svg></i> 1146 <i class="icon navPages-action-moreIcon navPages-action-open" aria-hidden="true"><svg><use xlink:href="#icon-minus" /></svg></i> 1147 1148 </li> 1149 <li class="navPage-childList-item"> 1150 <a class="navPage-childList-action navPages-action" href="https://faxonfirearms.com/rifle-barrels/MATCH-X-series/223-wylde/">.223 Wylde</a> 1151 </li> 1152 <li class="navPage-childList-item"> 1153 <a class="navPage-childList-action navPages-action" href="https://faxonfirearms.com/rifle-barrels/MATCH-X-series/300-blk/">.300 BLK</a> 1154 </li> 1155 <li class="navPage-childList-item"> 1156 <a class="navPage-childList-action navPages-action" href="https://faxonfirearms.com/rifle-barrels/MATCH-X-series/6mm-arc/">6MM ARC</a> 1157 </li> 1158 <li class="navPage-childList-item"> 1159 <a class="navPage-childList-action navPages-action" href="https://faxonfirearms.com/rifle-barrels/MATCH-X-series/22-arc/">22 ARC</a> 1160 </li> 1161 <li class="navPage-childList-item"> 1162 <a class="navPage-childList-action navPages-action" href="https://faxonfirearms.com/rifle-barrels/MATCH-X-series/6-5-grendel/">6.5 Grendel</a> 1163 </li> 1164 <li class="navPage-childList-item"> 1165 <a class="navPage-childList-action navPages-action" href="https://faxonfirearms.com/rifle-barrels/MATCH-X-series/308-winchester/">.308 Winchester</a> 1166 </li> 1167 <li class="navPage-childList-item"> 1168 <a class="navPage-childList-action navPages-action" href="https://faxonfirearms.com/rifle-barrels/MATCH-X-series/6-5-creedmoor/">6.5 Creedmoor</a> 1169 </li> 1170 <li class="navPage-childList-item"> 1171 <a class="navPage-childList-action navPages-action" href="https://faxonfirearms.com/rifle-barrels/MATCH-X-series/8-6-blk/">8.6 BLK</a> 1172 </li> 1173 <li class="navPage-subMenu-item"> 1174 <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use xlink:href="#icon-chevron-right" /></svg></i> 1175 <a class="navPage-subMenu-action navPages-action" href="https://faxonfirearms.com/rifle-barrels/integral-muzzle-device-barrels/">Integral Muzzle Device Barrels</a> 1176 1177 </li> 1178 <li class="navPage-subMenu-item"> 1179 <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use xlink:href="#icon-chevron-right" /></svg></i> 1180 <a class="navPage-subMenu-action navPages-action" href="https://faxonfirearms.com/rifle-barrels/pinned-gas-block-barrels/">Pinned Gas Block Barrels</a> 1181 1182 </li> 1183 <li class="navPage-subMenu-item"> 1184 <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use xlink:href="#icon-chevron-right" /></svg></i> 1185 <a class="navPage-subMenu-action navPages-action" href="https://faxonfirearms.com/rifle-barrels/combat-series/">Combat Series</a> 1186 <i class="icon navPages-action-moreIcon navPages-action-closed" aria-hidden="true"><svg><use xlink:href="#icon-plus" /></svg></i> 1187 <i class="icon navPages-action-moreIcon navPages-action-open" aria-hidden="true"><svg><use xlink:href="#icon-minus" /></svg></i> 1188 1189 </li> 1190 <li class="navPage-childList-item"> 1191 <a class="navPage-childList-action navPages-action" href="https://faxonfirearms.com/rifle-barrels/combat-series/5-56-nato-223-remington/">5.56 NATO / .223 Remington</a> 1192 </li> 1193 <li class="navPage-childList-item"> 1194 <a class="navPage-childList-action navPages-action" href="https://faxonfirearms.com/rifle-barrels/combat-series/300-blk/">.300 BLK</a> 1195 </li> 1196 <li class="navPage-subMenu-item"> 1197 <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use xlink:href="#icon-chevron-right" /></svg></i> 1198 <a class="navPage-subMenu-action navPages-action" href="https://faxonfirearms.com/rifle-barrels/rimfire-barrels/">Rimfire Barrels</a> 1199 <i class="icon navPages-action-moreIcon navPages-action-closed" aria-hidden="true"><svg><use xlink:href="#icon-plus" /></svg></i> 1200 <i class="icon navPages-action-moreIcon navPages-action-open" aria-hidden="true"><svg><use xlink:href="#icon-minus" /></svg></i> 1201 1202 </li> 1203 <li class="navPage-childList-item"> 1204 <a class="navPage-childList-action navPages-action" href="https://faxonfirearms.com/rifle-barrels/rimfire-barrels/rimfire-plinker-series/">Rimfire Plinker Series</a> 1205 </li> 1206 <li class="navPage-childList-item"> 1207 <a class="navPage-childList-action navPages-action" href="https://faxonfirearms.com/rifle-barrels/rimfire-barrels/rimfire-match-series/">Rimfire Match Series</a> 1208 </li> 1209 <li class="navPage-subMenu-item"> 1210 <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use xlink:href="#icon-chevron-right" /></svg></i> 1211 <a class="navPage-subMenu-action navPages-action" href="https://faxonfirearms.com/rifle-barrels/profiled-barrel-blanks/">Profiled Barrel Blanks</a> 1212 1213 </li> 1214 <li class="navPage-subMenu-item"> 1215 <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use xlink:href="#icon-chevron-right" /></svg></i> 1216 <a class="navPage-subMenu-action navPages-action" href="https://faxonfirearms.com/rifle-barrels/m1-garand-barrels/">M1 Garand Barrels</a> 1217 1218 </li> 1219 <li class="navPage-subMenu-item"> 1220 <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use xlink:href="#icon-chevron-right" /></svg></i> 1221 <a class="navPage-subMenu-action navPages-action" href="https://faxonfirearms.com/rifle-barrels/limited-edition-rifle-barrels/">Limited Edition Rifle Barrels</a> 1222 1223 </li> 1224 </ul> 1225</div> 1226 </li> 1227 <li class="navPages-item"> 1228 <a class="navPages-action has-subMenu" 1229 href="https://faxonfirearms.com/rifle-parts/" 1230 data-collapsible="navPages-48" 1231> 1232 Rifle Parts 1233 <i class="icon navPages-action-moreIcon" aria-hidden="true"> 1234 <svg><use xlink:href="#icon-chevron-down" /></svg> 1235 </i> 1236</a> 1237<div class="column-menu navPage-subMenu" id="navPages-48" aria-hidden="true" tabindex="-1"> 1238 <ul class="navPage-subMenu-list"> 1239 <li class="navPage-subMenu-item"> 1240 <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use xlink:href="#icon-chevron-right" /></svg></i> 1241 <a class="navPage-subMenu-action navPages-action" href="https://faxonfirearms.com/parts-accessories/bolts-carrier-groups/">Bolts & Carrier Groups</a> 1242 <i class="icon navPages-action-moreIcon na
1242vPages-action-closed" aria-hidden="true"><svg><use xlink:href="#icon-plus" /></svg></i> 1243 <i class="icon navPages-action-moreIcon navPages-action-open" aria-hidden="true"><svg><use xlink:href="#icon-minus" /></svg></i> 1244 1245 </li> 1246 <li class="navPage-childList-item"> 1247 <a class="navPage-childList-action navPages-action" href="https://faxonfirearms.com/parts-accessories/bolts-carrier-groups/ar15/">AR15</a> 1248 </li> 1249 <li class="navPage-childList-item"> 1250 <a class="navPage-childList-action navPages-action" href="https://faxonfirearms.com/parts-accessories/bolts-carrier-groups/ar10-lr-308/">AR10 (LR-308)</a> 1251 </li> 1252 <li class="navPage-childList-item"> 1253 <a class="navPage-childList-action navPages-action" href="https://faxonfirearms.com/parts-accessories/bolts-carrier-groups/rimfire/">Rimfire</a> 1254 </li> 1255 <li class="navPage-subMenu-item"> 1256 <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use xlink:href="#icon-chevron-right" /></svg></i> 1257 <a class="navPage-subMenu-action navPages-action" href="https://faxonfirearms.com/parts-accessories/gas-blocks-gas-tubes/">Gas Blocks & Gas Tubes</a> 1258 <i class="icon navPages-action-moreIcon navPages-action-closed" aria-hidden="true"><svg><use xlink:href="#icon-plus" /></svg></i> 1259 <i class="icon navPages-action-moreIcon navPages-action-open" aria-hidden="true"><svg><use xlink:href="#icon-minus" /></svg></i> 1260 1261 </li> 1262 <li class="navPage-childList-item"> 1263 <a class="navPage-childList-action navPages-action" href="https://faxonfirearms.com/parts-accessories/gas-blocks-gas-tubes/adjustable-gas-blocks/">Adjustable Gas Blocks</a> 1264 </li> 1265 <li class="navPage-childList-item"> 1266 <a class="navPage-childList-action navPages-action" href="https://faxonfirearms.com/parts-accessories/gas-blocks-gas-tubes/fixed-gas-blocks/">Fixed Gas Blocks</a> 1267 </li> 1268 <li class="navPage-childList-item"> 1269 <a class="navPage-childList-action navPages-action" href="https://faxonfirearms.com/parts-accessories/gas-blocks-gas-tubes/gas-tubes/">Gas Tubes</a> 1270 </li> 1271 <li class="navPage-subMenu-item"> 1272 <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use xlink:href="#icon-chevron-right" /></svg></i> 1273 <a class="navPage-subMenu-action navPages-action" href="https://faxonfirearms.com/parts-accessories/handguards/">Handguards</a> 1274 <i class="icon navPages-action-moreIcon navPages-action-closed" aria-hidden="true"><svg><use xlink:href="#icon-plus" /></svg></i> 1275 <i class="icon navPages-action-moreIcon navPages-action-open" aria-hidden="true"><svg><use xlink:href="#icon-minus" /></svg></i> 1276 1277 </li> 1278 <li class="navPage-childList-item"> 1279 <a class="navPage-childList-action navPages-action" href="https://faxonfirearms.com/parts-accessories/handguards/ar-15/">AR-15</a> 1280 </li> 1281 <li class="navPage-childList-item"> 1282 <a class="navPage-childList-action navPages-action" href="https://faxonfirearms.com/parts-accessories/handguards/ar-10-lr-308/">AR-10 (LR-308)</a> 1283 </li> 1284 <li class="navPage-subMenu-item"> 1285 <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use xlink:href="#icon-chevron-right" /></svg></i> 1286 <a class="navPage-subMenu-action navPages-action" href="https://faxonfirearms.com/parts-accessories/muzzle-devices/">Muzzle Devices</a> 1287 <i class="icon navPages-action-moreIcon navPages-action-closed" aria-hidden="true"><svg><use xlink:href="#icon-plus" /></svg></i> 1288 <i class="icon navPages-action-moreIcon navPages-action-open" aria-hidden="true"><svg><use xlink:href="#icon-minus" /></svg></i> 1289 1290 </li> 1291 <li class="navPage-childList-item"> 1292 <a class="navPage-childList-action navPages-action" href="https://faxonfirearms.com/parts-accessories/muzzle-devices/muzzlok/">MuzzLok®</a> 1293 </li> 1294 <li class="navPage-childList-item"> 1295 <a class="navPage-childList-action navPages-action" href="https://faxonfirearms.com/parts-accessories/muzzle-devices/suppressor-mounts/">Suppressor Mounts</a> 1296 </li> 1297 <li class="navPage-childList-item"> 1298 <a class="navPage-childList-action navPages-action" href="https://faxonfirearms.com/parts-accessories/muzzle-devices/other/">Other</a> 1299 </li> 1300 <li class="navPage-subMenu-item"> 1301 <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use xlink:href="#icon-chevron-right" /></svg></i> 1302 <a class="navPage-subMenu-action navPages-action" href="https://faxonfirearms.com/parts-accessories/magazine-marker-bands/">Magazine Marker Bands</a> 1303 1304 </li> 1305 <li class="navPage-subMenu-item"> 1306 <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use xlink:href="#icon-chevron-right" /></svg></i> 1307 <a class="navPage-subMenu-action navPages-action" href="https://faxonfirearms.com/parts-accessories/charging-handles/">Charging Handles</a> 1308 1309 </li> 1310 <li class="navPage-subMenu-item"> 1311 <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use xlink:href="#icon-chevron-right" /></svg></i> 1312 <a class="navPage-subMenu-action navPages-action" href="https://faxonfirearms.com/completionparts">AR Completion Parts</a> 1313 1314 </li> 1315 <li class="navPage-subMenu-item"> 1316 <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use xlink:href="#icon-chevron-right" /></svg></i> 1317 <a class="navPage-subMenu-action navPages-action" href="https://faxonfirearms.com/parts-accessories/bolt-action/">Bolt Action Accessories</a> 1318 1319 </li> 1320 <li class="navPage-subMenu-item"> 1321 <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use xlink:href="#icon-chevron-right" /></svg></i> 1322 <a class="navPage-subMenu-action navPages-action" href="https://faxonfirearms.com/rifle-parts/ar-completion-parts/headspace-gauges/">Headspace Gauges</a> 1323 1324 </li> 1325 </ul> 1326</div> 1327 </li> 1328 <li class="navPages-item"> 1329 <a class="navPages-action has-subMenu" 1330 href="https://faxonfirearms.com/pistol-barrels/" 1331 data-collapsible="navPages-314" 1332> 1333 Pistol Barrels 1334 <i class="icon navPages-action-moreIcon" aria-hidden="true"> 1335 <svg><use xlink:href="#icon-chevron-down" /></svg> 1336 </i> 1337</a> 1338<div class="column-menu navPage-subMenu" id="navPages-314" aria-hidden="true" tabindex="-1"> 1339 <ul class="navPage-subMenu-list"> 1340 <li class="navPage-subMenu-item"> 1341 <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use xlink:href="#icon-chevron-right" /></svg></i> 1342 <a class="navPage-subMenu-action navPages-action" href="https://faxonfirearms.com/pistol-barrels/for-glock/">For Glock®</a> 1343 <i class="icon navPages-action-moreIcon navPages-action-closed" aria-hidden="true"><svg><use xlink:href="#icon-plus" /></svg></i> 1344 <i class="icon navPages-action-moreIcon navPages-action-open" aria-hidden="true"><svg><use xlink:href="#icon-minus" /></svg></i> 1345 1346 </li> 1347 <li class="navPage-childList-item"> 1348 <a class="navPage-childList-action navPages-action" href="https://faxonfirearms.com/handgun-barrels/glock/g19/">For G19</a> 1349 </li> 1350 <li class="navPage-childList-item"> 1351 <a class="navPage-childList-action navPages-action" href="https://faxonfirearms.com/handgun-barrels/glock/g17/">For G17</a> 1352 </li> 1353 <li class="navPage-childList-item"> 1354 <a class="navPage-childList-action navPages-action" href="https://faxonfirearms.com/handgun-barrels/glock/g34/">For G34</a> 1355 </li> 1356 <li class="navPage-childList-item"> 1357 <a class="navPage-childList-action navPages-action" href="https://faxonfirearms.com/handgun-parts/barrels/for-glock/for-g43-43x/">For G43/43X</a> 1358 </li> 1359 <li class="navPage-childList-item"> 1360 <a class="navPage-childList-action navPages-action" href="https://faxonfirearms.com/handgun-parts/barrels/for-glock/for-g48/">For G48</a> 1361 </li> 1362 <li class="navPage-subMenu-item"> 1363 <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use xlink:href="#icon-chevron-right" /></svg></i> 1364 <a class="navPage-subMenu-action navPages-action" href="https://faxonfirearms.com/pistol-barrels/for-sig/">For SIG®</a> 1365 <i class="icon navPages-action-moreIcon navPages-action-closed" aria-hidden="true"><svg><use xlink:href="#icon-plus" /></svg></i> 1366 <i class="icon navPages-action-moreIcon navPages-action-open" aria-hidden="true"><svg><use xlink:href="#icon-minus" /></svg></i> 1367 1368 </li> 1369 <li class="navPage-childList-item"> 1370 <a class="navPage-childList-action navPages-action" href="https://faxonfirearms.com/handgun-barrels/sig-p320/full-size/">For P320 Full Size</a> 1371 </li> 1372 <li class="navPage-childList-item"> 1373 <a class="navPage-childList-action navPages-action" href="https://faxonfirearms.com/handgun-barrels/sig-p320/compact/">For P320 Compact</a> 1374 </li> 1375 <li class="navPage-childList-item"> 1376 <a class="navPage-childList-action navPages-action" href="https://faxonfirearms.com/handgun-parts/barrels/for-sig/for-p365/">For P365</a> 1377 </li> 1378 <li class="navPage-childList-item"> 1379 <a class="navPage-childList-action navPages-action" href="https://faxonfirearms.com/handgun-parts/barrels/for-sig/p365-xl/">P365 XL</a> 1380 </li> 1381 <li class="navPage-subMenu-item"> 1382 <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use xlink:href="#icon-chevron-right" /></svg></i> 1383 <a class="navPage-subMenu-action navPages-action" href="https://faxonfirearms.com/pistol-barrels/for-m-p/">For M&P®</a> 1384 <i class="icon navPages-action-moreIcon navPages-action-closed" aria-hidden="true"><svg><use xlink:href="#icon-plus" /></svg></i> 1385 <i class="icon navPages-action-moreIcon navPages-action-open" aria-hidden="true"><svg><use xlink:href="#icon-minus" /></svg></i> 1386 1387 </li> 1388 <li class="navPage-childList-item"> 1389 <a class="navPage-childList-action navPages-action" href="https://faxonfirearms.com/handgun-parts/barrels/for-smith-wesson/mp-full-size/">For M&P Full Size</a> 1390 </li> 1391 <li class="navPage-childList-item"> 1392 <a class="navPage-childList-action navPages-action" href="https://faxonfirearms.com/handgun-parts/barrels/for-smith-wesson/mp-2-0-compact/">For M&P 2.0 Compact</a> 1393 </li> 1394 <li class="navPage-childList-item"> 1395 <a class="navPage-childList-action navPages-action" href="https://faxonfirearms.com/mp-shield/">For M&P Shield</a> 1396 </li> 1397 </ul> 1398</div> 1399 </li> 1400 <li class="navPages-item"> 1401 <a class="navPages-action has-subMenu" 1402 href="https://faxonfirearms.com/pistol-parts/" 1403 data-collapsible="navPages-113" 1404> 1405 Pistol Parts 1406 <i class="icon navPages-action-moreIcon" aria-hidden="true"> 1407 <svg><use xlink:href="#icon-chevron-down" /></svg> 1408 </i> 1409</a> 1410<div class="column-menu navPage-subMenu" id="navPages-113" aria-hidden="true" tabindex="-1"> 1411 <ul class="navPage-subMenu-list"> 1412 <li class="navPage-subMenu-item"> 1413 <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use xlink:href="#icon-chevron-right" /></svg></i> 1414 <a class="navPage-subMenu-action navPages-action" href="https://faxonfirearms.com/handgun-parts/exos-compensators/">EXOS Compensators</a> 1415 1416 </li> 1417 <li class="navPage-subMenu-item"> 1418 <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use xlink:href="#icon-chevron-right" /></svg></i> 1419 <a class="navPage-subMenu-action navPages-action" href="https://faxonfirearms.com/handgun-parts/pistol-slides/">Slides</a> 1420 1421 </li> 1422 <li class="navPage-subMenu-item"> 1423 <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use xlink:href="#icon-chevron-right" /></svg></i> 1424 <a class="navPage-subMenu-action navPages-action" href="https://faxonfirearms.com/handgun-parts/magazine-extensions/">Magazine Extensions</a> 1425 1426 </li> 1427 </ul> 1428</div> 1429 </li> 1430 <li class="navPages-item"> 1431 <a class="navPages-action has-subMenu" 1432 href="https://faxonfirearms.com/other-brands/" 1433 data-collapsible="navPages-202" 1434> 1435 FAXON WAREHOUSE 1436 <i class="icon navPages-action-moreIcon" aria-hidden="true"> 1437 <svg><use xlink:href="#icon-chevron-down" /></svg> 1438 </i> 1439</a> 1440<div class="column-menu navPage-subMenu" id="navPages-202" aria-hidden="true" tabindex="-1"> 1441 <ul class="navPage-subMenu-list"> 1442 <li class="navPage-subMenu-item"> 1443 <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use xlink:href="#icon-chevron-right" /></svg></i> 1444 <a class="navPage-subMenu-action navPages-action" href="https://faxonfirearms.com/other-brands/b5/">B5</a> 1445 1446 </li> 1447 <li class="navPage-subMenu-item"> 1448 <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use xlink:href="#icon-chevron-right" /></svg></i> 1449 <a class="navPage-subMenu-action navPages-action" href="https://faxonfirearms.com/other-brands/blue-force-gear/">Blue Force Gear</a> 1450 1451 </li> 1452 <li class="navPage-subMenu-item"> 1453 <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use xlink:href="#icon-chevron-right" /></svg></i> 1454 <a class="navPage-subMenu-action navPages-action" href="https://faxonfirearms.com/other-brands/c-g-holsters/">C&G Holsters</a> 1455 1456 </li> 1457 <li class="navPage-subMenu-item"> 1458 <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use xlink:href="#icon-chevron-right" /></svg></i> 1459 <a class="navPage-subMenu-action navPages-action" href="https://faxonfirearms.com/caveman">Caveman LLC</a> 1460 1461 </li> 1462 <li class="navPage-subMenu-item"> 1463 <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use xlink:href="#icon-chevron-right" /></svg></i> 1464 <a class="navPage-subMenu-action navPages-action" href="https://faxonfirearms.com/other-brands/crimson-trace/">Crimson Trace</a> 1465 1466 </li> 1467 <li class="navPage-subMenu-item"> 1468 <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use xlink:href="#icon-chevron-right" /></svg></i> 1469 <a class="na
1469vPage-subMenu-action navPages-action" href="https://faxonfirearms.com/other-brands/elite-tactical-systems/">Elite Tactical Systems</a> 1470 1471 </li> 1472 <li class="navPage-subMenu-item"> 1473 <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use xlink:href="#icon-chevron-right" /></svg></i> 1474 <a class="navPage-subMenu-action navPages-action" href="https://faxonfirearms.com/other-brands/hiperfire/">HIPERFIRE</a> 1475 1476 </li> 1477 <li class="navPage-subMenu-item"> 1478 <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use xlink:href="#icon-chevron-right" /></svg></i> 1479 <a class="navPage-subMenu-action navPages-action" href="https://faxonfirearms.com/other-brands/holosun/">HOLOSUN</a> 1480 1481 </li> 1482 <li class="navPage-subMenu-item"> 1483 <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use xlink:href="#icon-chevron-right" /></svg></i> 1484 <a class="navPage-subMenu-action navPages-action" href="https://faxonfirearms.com/other-brands/magpul/">Magpul</a> 1485 1486 </li> 1487 <li class="navPage-subMenu-item"> 1488 <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use xlink:href="#icon-chevron-right" /></svg></i> 1489 <a class="navPage-subMenu-action navPages-action" href="https://faxonfirearms.com/other-brands/mantis/">Mantis</a> 1490 1491 </li> 1492 <li class="navPage-subMenu-item"> 1493 <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use xlink:href="#icon-chevron-right" /></svg></i> 1494 <a class="navPage-subMenu-action navPages-action" href="https://faxonfirearms.com/other-brands/mission-first-tactical/">Mission First Tactical</a> 1495 1496 </li> 1497 <li class="navPage-subMenu-item"> 1498 <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use xlink:href="#icon-chevron-right" /></svg></i> 1499 <a class="navPage-subMenu-action navPages-action" href="https://faxonfirearms.com/other-brands/new-category/">Otis Technology</a> 1500 1501 </li> 1502 <li class="navPage-subMenu-item"> 1503 <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use xlink:href="#icon-chevron-right" /></svg></i> 1504 <a class="navPage-subMenu-action navPages-action" href="https://faxonfirearms.com/other-brands/real-avid/">REAL AVID</a> 1505 1506 </li> 1507 <li class="navPage-subMenu-item"> 1508 <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use xlink:href="#icon-chevron-right" /></svg></i> 1509 <a class="navPage-subMenu-action navPages-action" href="https://faxonfirearms.com/other-brands/rise-armament/">RISE Armament</a> 1510 1511 </li> 1512 <li class="navPage-subMenu-item"> 1513 <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use xlink:href="#icon-chevron-right" /></svg></i> 1514 <a class="navPage-subMenu-action navPages-action" href="https://faxonfirearms.com/other-brands/ruger/">Ruger</a> 1515 1516 </li> 1517 <li class="navPage-subMenu-item"> 1518 <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use xlink:href="#icon-chevron-right" /></svg></i> 1519 <a class="navPage-subMenu-action navPages-action" href="https://faxonfirearms.com/other-brands/vertx/">Vertx</a> 1520 1521 </li> 1522 <li class="navPage-subMenu-item"> 1523 <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use xlink:href="#icon-chevron-right" /></svg></i> 1524 <a class="navPage-subMenu-action navPages-action" href="https://faxonfirearms.com/other-brands/wheeler-tools/">Wheeler Tools</a> 1525 1526 </li> 1527 </ul> 1528</div> 1529 </li> 1530 <li class="navPages-item"> 1531 <a class="navPages-action has-subMenu" 1532 href="https://faxonfirearms.com/more/" 1533 data-collapsible="navPages-318" 1534> 1535 More 1536 <i class="icon navPages-action-moreIcon" aria-hidden="true"> 1537 <svg><use xlink:href="#icon-chevron-down" /></svg> 1538 </i> 1539</a> 1540<div class="column-menu navPage-subMenu" id="navPages-318" aria-hidden="true" tabindex="-1"> 1541 <ul class="navPage-subMenu-list"> 1542 <li class="navPage-subMenu-item"> 1543 <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use xlink:href="#icon-chevron-right" /></svg></i> 1544 <a class="navPage-subMenu-action navPages-action" href="https://faxonfirearms.com/faxonoutdoors/">Faxon Outdoors</a> 1545 1546 </li> 1547 <li class="navPage-subMenu-item"> 1548 <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use xlink:href="#icon-chevron-right" /></svg></i> 1549 <a class="navPage-subMenu-action navPages-action" href="https://faxonfirearms.com/support-1/">Support</a> 1550 1551 </li> 1552 <li class="navPage-subMenu-item"> 1553 <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use xlink:href="#icon-chevron-right" /></svg></i> 1554 <a class="navPage-subMenu-action navPages-action" href="https://faxonfirearms.com/clearance/">Clearance</a> 1555 1556 </li> 1557 <li class="navPage-subMenu-item"> 1558 <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use xlink:href="#icon-chevron-right" /></svg></i> 1559 <a class="navPage-subMenu-action navPages-action" href="https://faxonfirearms.com/gear/">Faxon Gear</a> 1560 1561 </li> 1562 <li class="navPage-subMenu-item"> 1563 <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use xlink:href="#icon-chevron-right" /></svg></i> 1564 <a class="navPage-subMenu-action navPages-action" href="https://faxonfirearms.com/limited-edition/">Limited Edition!</a> 1565 <i class="icon navPages-action-moreIcon navPages-action-closed" aria-hidden="true"><svg><use xlink:href="#icon-plus" /></svg></i> 1566 <i class="icon navPages-action-moreIcon navPages-action-open" aria-hidden="true"><svg><use xlink:href="#icon-minus" /></svg></i> 1567 1568 </li> 1569 <li class="navPage-childList-item"> 1570 <a class="navPage-childList-action navPages-action" href="https://faxonfirearms.com/limited-edition/3d-printable-tools-fi
1570xtures/">3D Printable Tools & Fixtures</a> 1571 </li> 1572 </ul> 1573</div> 1574 </li> 1575 </ul> 1576 <ul class="navPages-list navPages-list--user"> 1577 </ul> 1578</nav> 1579 </div> 1580</header> 1581 1582 1583 1584<div data-content-region="header_bottom--global"><div data-layout-id="03f2f427-381c-41be-b152-d02f4e0ecece"> <div data-sub-layout-container="26a2ea71-6ac9-4dca-a0a9-96cf5f069185" data-layout-name="Layout"> 1585 <style data-container-styling="26a2ea71-6ac9-4dca-a0a9-96cf5f069185"> 1586 [data-sub-layout-container="26a2ea71-6ac9-4dca-a0a9-96cf5f069185"] { 1587 box-sizing: border-box; 1588 display: flex; 1589 flex-wrap: wrap; 1590 z-index: 0; 1591 position: relative; 1592 height: ; 1593 padding-top: 0px; 1594 padding-right: 0px; 1595 padding-bottom: 0px; 1596 padding-left: 0px; 1597 margin-top: 0px; 1598 margin-right: 0px; 1599 margin-bottom: 0px; 1600 margin-left: 0px; 1601 border-width: 0px; 1602 border-style: solid; 1603 border-color: #333333; 1604 } 1605 1606 [data-sub-layout-container="26a2ea71-6ac9-4dca-a0a9-96cf5f069185"]:after { 1607 display: block; 1608 position: absolute; 1609 top: 0; 1610 left: 0; 1611 bottom: 0; 1612 right: 0; 1613 background-size: cover; 1614 z-index: auto; 1615 } 1616 </style> 1617 1618 <div data-sub-layout="926374e6-fe42-43f7-a935-55e7608f663c"> 1619 <style data-column-styling="926374e6-fe42-43f7-a935-55e7608f663c"> 1620 [data-sub-layout="926374e6-fe42-43f7-a935-55e7608f663c"] { 1621 display: flex; 1622 flex-direction: column; 1623 box-sizing: border-box; 1624 flex-basis: 100%; 1625 max-width: 100%; 1626 z-index: 0; 1627 position: relative; 1628 height: ; 1629 background-color: rgba(0,23,52,1); 1630 padding-top: 0px; 1631 padding-right: 10.5px; 1632 padding-bottom: 0px; 1633 padding-left: 10.5px; 1634 margin-top: 0px; 1635 margin-right: 0px; 1636 margin-bottom: 0px; 1637 margin-left: 0px; 1638 border-width: 0px; 1639 border-style: solid; 1640 border-color: #333333; 1641 justify-content: center; 1642 } 1643 [data-sub-layout="926374e6-fe42-43f7-a935-55e7608f663c"]:after { 1644 display: block; 1645 position: absolute; 1646 top: 0; 1647 left: 0; 1648 bottom: 0; 1649 right: 0; 1650 background-size: cover; 1651 z-index: -1; 1652 content: ''; 1653 } 1654 @media only screen and (max-width: 700px) { 1655 [data-sub-layout="926374e6-fe42-43f7-a935-55e7608f663c"] { 1656 flex-basis: 100%; 1657 max-width: 100%; 1658 } 1659 } 1660 </style> 1661 <div data-widget-id="a7944310-2a51-4933-9901-73839540df5b" data-placement-id="6fc3467e-a3b0-4c6a-aefe-c0ba4951db9c" data-placement-status="ACTIVE"><!-- ============================================================ 1662 FAXON FIREARMS â STICKY BAR | GLOCKTOBER & 10/22 DAY EVENT (Fright Run theme) 1663 ------------------------------------------------------------ 1664 THREE AUTOMATIC STATES â no manual switching required: 1665 1. PRE (before Oct 1, 2026 12:00 AM ET) spooky teaser + "EVENT STARTS IN" countdown 1666 2. LIVE (Oct 1 12:00 AM -> Oct 31, 2026 11:59 PM ET) event headline, SHOP THE EVENT, 1667 FAXON FALL ARCADE game picker, live "EVENT ENDS IN" tombstone countdown 1668 3. POST (after Oct 31, 2026 11:59 PM ET) reverts to the standard Faxon 1669 brand bar (Fellowship headline, no event buttons, no countdown) 1670 We're Hiring / Upper Builder / Bolt Action Builder show in ALL states. 1671 SHOP THE EVENT shows in LIVE only. FAXON FALL ARCADE shows in PRE + LIVE. 1672 FAXON FALL ARCADE opens a small menu to pick a game: 1673 Fright Run (/fright-run/) or Haunted Range (/haunted-range/). 1674 Paste this whole block where your sticky bar should render 1675 (it replaces the Fall Kickoff sticky bar block). 1676 ============================================================ --> 1677<link href="https://fonts.googleapis.com/css2?family=Bebas+Neue&family=Creepster&family=Luckiest+Guy&display=swap" rel="stylesheet"> 1678<style> 1679 /* ============================================================ 1680 1. BASE BAR (standard Faxon brand look â used after the event) 1681 Unchanged from the current bar. 1682 ============================================================ */ 1683 .fxn-bar { 1684 width: 100%; 1685 background-color: #001734; 1686 background-image: 1687 linear-gradient(rgba(255,255,255,0.03) 1px, transparent 1px), 1688 linear-gradient(90deg, rgba(255,255,255,0.03) 1px, transparent 1px); 1689 background-size: 24px 24px; 1690 border-top: 3px solid #832729; 1691 border-bottom: 3px solid #832729; 1692 color: #F5F4F1; 1693 box-sizing: border-box; 1694 font-family: 'Bebas Neue', sans-serif; 1695 } 1696 .fxn-bar * { box-sizing: border-box; } 1697 .fxn-bar-inner { 1698 display: flex; 1699 align-items: center; 1700 justify-content: center; 1701 flex-wrap: wrap; 1702 gap: 12px 18px; 1703 padding: 10px 16px; 1704 max-width: 1400px; 1705 margin: 0 auto; 1706 } 1707 .fxn-bar-headline-group { display: flex; align-items: center; gap: 10px; min-width: 0; } 1708 .fxn-bar-pulse { 1709 width: 8px; height: 8px; background: #2e8b3d; border-radius: 50%; 1710 position: relative; flex-shrink: 0; 1711 } 1712 .fxn-bar-pulse::before { 1713 content: ''; position: absolute; inset: 0; background: #2e8b3d; border-radius: 50%; 1714 animation: fxn-bar-pulse 1.4s ease-out infinite; 1715 } 1716 @keyframes fxn-bar-pulse { 1717 0% { transform: scale(1); opacity: 0.8; } 1718 100% { transform: scale(2.4); opacity: 0; } 1719 } 1720 .fxn-bar-headline { 1721 font-size: 16px; letter-spacing: 0.12em; text-transform: uppercase; line-height: 1; color: #F5F4F1; 1722 } 1723 .fxn-bar-headline span { color: #e84045; } 1724 .fxn-bar-divider { width: 1px; align-self: stretch; min-height: 24px; background: rgba(245,244,241,0.18); } 1725 .fxn-bar-ctas { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; } 1726 .fxn-bar-cta { 1727 display: inline-flex; align-items: center; gap: 6px; 1728 font-family: 'Bebas Neue', sans-serif; font-size: 13px; letter-spacing: 0.14em; 1729 text-transform: uppercase; line-height: 1; padding: 9px 16px; text-decoration: none; 1730 border: 1px solid #a03335; white-space: nowrap; 1731 transition: background-color 0.2s ease, color 0.2s ease, border-color 0.2s ease; 1732 } 1733 .fxn-bar-cta.is-primary { background: #832729; color: #F5F4F1; } 1734 .fxn-bar-cta.is-primary:hover { background: #F5F4F1; color: #832729; border-color: #F5F4F1; } 1735 .fxn-bar-cta.is-secondary { background: transparent; color: #F5F4F1; border-color: rgba(245,244,241,0.35); } 1736 .fxn-bar-cta.is-secondary:hover { background: #F5F4F1; color: #001734; border-color: #F5F4F1; } 1737 .fxn-bar-cta.is-glow { background: #832729; color: #F5F4F1; border-color: #a03335; position: relative; } 1738 .fxn-bar-cta.is-glow:hover { 1739 background: #F5F4F1; color: #832729; border-color: #F5F4F1; 1740 box-shadow: 0 0 18px rgba(245, 244, 241, 0.35); 1741 } 1742 .fxn-glow-spark { 1743 display: inline-block; width: 6px; height: 6px; background: #F5F4F1; border-radius: 50%; 1744 margin-right: 2px; box-shadow: 0 0 6px rgba(245, 244, 241, 0.9); 1745 } 1746 .fxn-bar-cta.is-play .fxn-glow-spark { animation: fxn-glow-spark 2s ease-in-out infinite; } 1747 @keyframes fxn-glow-spark { 1748 0%, 100% { opacity: 0.55; transform: scale(1); } 1749 50% { opacity: 1; transform: scale(1.3); } 1750 } 1751 .fxn-bar-arrow { font-size: 13px; line-height: 1; } 1752 1753 /* ============================================================ 1754 2. STATE VISIBILITY 1755 Hidden by default; revealed by the mode class the script puts 1756 on .fxn-bar (fxn-mode-pre / -live / -post). 1757 ============================================================ */ 1758 .fxn-when-pre, 1759 .fxn-when-live, 1760 .fxn-when-game, 1761 .fxn-when-prelive { display: none !important; } 1762 .fxn-mode-pre .fxn-when-pre { display: inline-flex !important; } 1763 .fxn-mode-live .fxn-when-live { display: inline-flex !important; } 1764 .fxn-mode-pre .fxn-when-game, 1765 .fxn-mode-live .fxn-when-game { display: inline-flex !important; } 1766 .fxn-mode-pre .fxn-when-prelive, 1767 .fxn-mode-live .fxn-when-prelive { display: flex !important; } 1768 1769 /* ============================================================ 1770 3. FRIGHT RUN SKIN (applied while .fxn-fright is on the bar â 1771 the teaser window and the live event window only) 1772 Pulp-horror paperback: purple night, lime slime, candle gold. 1773 ============================================================ */ 1774 .fxn-bar.fxn-fright { 1775 position: relative; 1776 background-color: #160828; 1777 background-image: 1778 radial-gradient(circle at 92% 38%, rgba(246,238,200,0.95) 0 13px, rgba(246,238,200,0.18) 14px 26px, rgba(246,238,200,0) 40px), 1779 radial-gradient(ellipse at 50% 120%, rgba(180,230,30,0.16), rgba(0,0,0,0) 60%), 1780 linear-gradient(180deg, #120622 0%, #2a1046 70%, #3b1d5e 100%); 1781 background-size: auto; 1782 border-top: 3px solid #c8102e; 1783 border-bottom: none; 1784 font-family: 'Luckiest Guy', 'Arial Black', Impact, sans-serif; 1785 } 1786 /* Slime drips along the bottom edge (kept inside the bar so nothing overlaps the page) */ 1787 .fxn-bar.fxn-fright::after { 1788 content: ''; 1789 display: block; 1790 height: 12px; 1791 background-color: #0d0618; 1792 background-image: 1793 linear-gradient(#b4e61e, #b4e61e), 1794 radial-gradient(ellipse 5px 9px at 50% 0, #b4e61e 96%, rgba(0,0,0,0) 100%), 1795 radial-gradient(ellipse 3px 6px at 50% 0, #8cc010 96%, rgba(0,0,0,0) 100%), 1796 radial-gradient(ellipse 4px 11px at 50% 0, #b4e61e 96%, rgba(0,0,0,0) 100%); 1797 background-repeat: no-repeat, repeat-x, repeat-x, repeat-x; 1798 background-size: 100% 3px, 41px 12px, 29px 9px, 67px 12px; 1799 background-position: 0 0, 6px 0, 19px 0, 33px 0; 1800 } 1801 .fxn-fright .fxn-bar-inner { padding: 11px 16px 9px; gap: 10px 16px; } 1802 1803 /* ---- glowing jack-o'-lantern eye replaces the green pulse ---- */ 1804 .fxn-fright .fxn-bar-pulse { 1805 width: 12px; height: 12px; border-radius: 50%; 1806 background: radial-gradient(circle at 40% 35%, #ffe070, #f07c10 60%, #9a4008); 1807 box-shadow: 0 0 10px rgba(255,150,30,0.85); 1808 animation: fxn-flicker 2.4s ease-in-out infinite; 1809 } 1810 .fxn-fright .fxn-bar-pulse::before { display: none; } 1811 @keyframes fxn-flicker { 1812 0%, 100% { opacity: 1; } 42% { opacity: 0.75; } 46% { opacity: 1; } 70% { opacity: 0.85; } 1813 } 1814 1815 /* ---- headline ---- */ 1816 .fxn-fright .fxn-bar-headline-group { gap: 10px; } 1817 .fxn-fright .fxn-bar-headline { 1818 font-family: 'Creepster', 'Impact', fantasy; 1819 font-size: 25px; 1820 letter-spacing: 0.05em; 1821 line-height: 1; 1822 color: #b4e61e; 1823 text-shadow: 0 1px 0 #8fc014, 0 2px 0 #4f7d06, 2px 4px 4px rgba(0,0,0,0.75); 1824 white-space: nowrap; 1825 } 1826 .fxn-fright .fxn-bar-headline .fxn-plate { 1827 display: inline-block; 1828 vertical-align: 3px; 1829 font-family: 'Luckiest Guy', 'Arial Black', Impact, sans-serif; 1830 font-size: 13px; 1831 letter-spacing: 0.08em; 1832 line-height: 1; 1833 background: #c8102e; 1834 color: #fff; 1835 padding: 5px 7px 3px; 1836 margin-right: 8px; 1837 border: 2px solid #f7d02a; 1838 border-radius: 6px; 1839 text-shadow: 0 1px 0 rgba(0,0,0,0.4); 1840 } 1841 .fxn-fright .fxn-bar-headline em { 1842 font-style: normal; 1843 font-family: 'Luckiest Guy', 'Arial Black', Impact, sans-serif; 1844 font-size: 13px; 1845 letter-spacing: 0.08em; 1846 vertical-align: 3px; 1847 margin-left: 6px; 1848 color: #f7d02a; 1849 text-shadow: 0 2px 0 #000; 1850 } 1851 .fxn-fright .fxn-bar-divider { background: rgba(180,230,30,0.35); width: 2px; } 1852 1853 /* ---- tombstone countdown ---- */ 1854 .fxn-clock { display: none; align-items: flex-end; gap: 6px; font-family: 'Luckiest Guy', 'Arial Black', Impact, sans-serif; } 1855 .fxn-clock-label {
1856 align-self: center; 1857 font-size: 12px; 1858 letter-spacing: 0.08em; 1859 line-height: 1.15; 1860 color: #f7d02a; 1861 text-align: right; 1862 margin-right: 2px; 1863 text-shadow: 0 2px 0 #000; 1864 } 1865 .fxn-unit { 1866 display: flex; flex-direction: column; align-items: center; gap: 2px; 1867 min-width: 42px; 1868 padding: 7px 6px 4px; 1869 background: linear-gradient(180deg, #b2b2c6 0%, #8a8aa0 55%, #6e6e86 100%); 1870 border: 2px solid #1a0828; 1871 border-radius: 20px 20px 4px 4px; 1872 box-shadow: inset 0 2px 0 rgba(255,255,255,0.35), inset 0 -3px 0 rgba(0,0,0,0.2), 0 3px 0 #000; 1873 position: relative; 1874 } 1875 .fxn-unit::after { /* moss at the base */ 1876 content: ''; position: absolute; left: 3px; right: 3px; bottom: -1px; height: 3px; 1877 background: #4c9a18; border-radius: 2px; 1878 } 1879 .fxn-unit b { 1880 font-size: 19px; font-weight: normal; color: #241a30; line-height: 1; 1881 text-shadow: 0 1px 0 rgba(255,255,255,0.45); 1882 font-variant-numeric: tabular-nums; 1883 } 1884 .fxn-unit i { font-style: normal; font-size: 8px; color: #2e2240; letter-spacing: 0.1em; } 1885 .fxn-colon { display: none; } 1886 1887 /* ---- buttons: glossy beveled, matching the Fright Run game ---- */ 1888 .fxn-fright .fxn-bar-ctas { gap: 8px; } 1889 .fxn-fright .fxn-bar-cta { 1890 font-family: 'Luckiest Guy', 'Arial Black', Impact, sans-serif; 1891 font-size: 13px; 1892 letter-spacing: 0.06em; 1893 line-height: 1; 1894 padding: 10px 14px 8px; 1895 border: 2px solid #efe3c2; 1896 border-radius: 9px; 1897 background: linear-gradient(#6a3a9c, #3a1862); 1898 color: #efe3c2; 1899 box-shadow: inset 0 2px 0 rgba(255,255,255,0.25), inset 0 -3px 0 rgba(0,0,0,0.3), 0 3px 0 #000; 1900 text-shadow: 0 2px 0 rgba(0,0,0,0.45); 1901 transition: filter 0.15s ease; 1902 } 1903 .fxn-fright .fxn-bar-cta:hover { filter: brightness(1.15); } 1904 .fxn-fright .fxn-bar-cta:active { transform: translateY(2px); box-shadow: inset 0 2px 0 rgba(255,255,255,0.25), 0 1px 0 #000; } 1905 .fxn-fright .fxn-bar-cta:focus-visible { outline: 3px solid #b4e61e; outline-offset: 2px; } 1906 /* SHOP THE EVENT â blood red with candle-gold rim */ 1907 .fxn-fright .fxn-bar-cta.is-primary { background: linear-gradient(#f0304a, #a00c24); color: #fff; border-color: #f7d02a; } 1908 .fxn-fright .fxn-bar-cta.is-primary:hover { color: #fff; border-color: #f7d02a; } 1909 /* PLAY FRIGHT RUN â slime green */ 1910 .fxn-bar-cta.is-play { background: #b4e61e; color: #1a0828; border-color: #1a0828; } 1911 .fxn-fright .fxn-bar-cta.is-play { 1912 background: linear-gradient(#d8ff4a, #8cc010); color: #1a0828; border-color: #1a0828; 1913 text-shadow: 0 1px 0 rgba(255,255,255,0.4); 1914 } 1915 .fxn-fright .fxn-bar-cta.is-play .fxn-glow-spark { background: #c8102e; box-shadow: 0 0 6px rgba(200,16,46,0.9); } 1916 /* We're Hiring â plum */ 1917 .fxn-fright .fxn-bar-cta.is-secondary { background: linear-gradient(#4a2a6e, #24103e); color: #efe3c2; border-color: rgba(239,227,194,0.6); } 1918 .fxn-fright .fxn-bar-cta.is-secondary:hover { background: linear-gradient(#4a2a6e, #24103e); color: #efe3c2; border-color: #efe3c2; } 1919 /* Upper Builder â pumpkin orange */ 1920 .fxn-fright .fxn-bar-cta.is-glow { background: linear-gradient(#ff9a30, #c85a08); color: #fff; border-color: #efe3c2; box-shadow: inset 0 2px 0 rgba(255,255,255,0.3), inset 0 -3px 0 rgba(0,0,0,0.25), 0 3px 0 #000; } 1921 .fxn-fright .fxn-bar-cta.is-glow:hover { background: linear-gradient(#ff9a30, #c85a08); color: #fff; border-color: #efe3c2; box-shadow: inset 0 2px 0 rgba(255,255,255,0.3), 0 3px 0 #000, 0 0 14px rgba(255,150,30,0.5); } 1922 /* Bolt Action Builder â night plum with gold text */ 1923 .fxn-fright .fxn-bar-cta.is-glow.is-glow-alt { background: linear-gradient(#3a1660, #1a0830); color: #f7d02a; border-color: #f7d02a; } 1924 .fxn-fright .fxn-bar-cta.is-glow.is-glow-alt:hover { background: linear-gradient(#3a1660, #1a0830); color: #f7d02a; box-shadow: inset 0 2px 0 rgba(255,255,255,0.2), 0 3px 0 #000, 0 0 14px rgba(247,208,42,0.4); } 1925 .fxn-fright .fxn-glow-spark { width: 7px; height: 7px; background: #fff3b0; box-shadow: 0 0 6px rgba(255,240,170,0.9); } 1926 .fxn-fright .fxn-bar-cta.is-glow-alt .fxn-glow-spark { background: #b4e61e; box-shadow: 0 0 6px rgba(180,230,30,0.9); } 1927 .fxn-fright .fxn-bar-arrow { font-size: 11px; } 1928 1929 /* ---- FAXON FALL ARCADE button + game picker ---- */ 1930 .fxn-arcade { display: inline-flex; position: relative; } 1931 button.fxn-bar-cta { cursor: pointer; margin: 0; -webkit-appearance: none; appearance: none; } 1932 .fxn-arcade-caret { font-size: 10px; line-height: 1; transition: transform 0.15s ease; } 1933 .fxn-arcade.is-open .fxn-arcade-caret { transform: rotate(180deg); } 1934 .fxn-arcade-menu { 1935 position: fixed; z-index: 2147483000; display: none; 1936 width: 340px; max-width: calc(100vw - 24px); 1937 padding: 12px; border-radius: 14px; 1938 background: linear-gradient(180deg, #2a1046 0%, #160828 100%); 1939 border: 2px solid #efe3c2; 1940 box-shadow: 0 0 0 2px #000, 6px 6px 0 #000, 0 14px 40px rgba(0,0,0,0.55); 1941 font-family: 'Luckiest Guy', 'Arial Black', Impact, sans-serif; color: #efe3c2; text-align: left; 1942 } 1943 .fxn-arcade-menu.is-open { display: block; } 1944 .fxn-arcade-title { 1945 display: block; 1946 font-family: 'Creepster', 'Luckiest Guy', Impact, fantasy; font-size: 24px; line-height: 1; letter-spacing: 0.04em; 1947 color: #b4e61e; text-shadow: 0 2px 0 #4f7d06, 2px 4px 4px rgba(0,0,0,0.6); margin: 0 0 3px; text-align: center; 1948 } 1949 .fxn-arcade-sub { display: block; font-family: 'Luckiest Guy', sans-serif; font-size: 11px; letter-spacing: 0.08em; color: #f7d02a; text-align: center; margin: 0 0 10px; } 1950 .fxn-arcade-game { 1951 display: flex; align-items: center; gap: 11px; padding: 10px 12px 9px; margin: 0 0 8px; 1952 border-radius: 10px; border: 2px solid #1a0828; text-decoration: none; 1953 box-shadow: inset 0 2px 0 rgba(255,255,255,0.28), inset 0 -3px 0 rgba(0,0,0,0.3), 0 3px 0 #000; 1954 transition: filter 0.15s ease; 1955 } 1956 .fxn-arcade-game:last-child { margin-bottom: 0; } 1957 .fxn-arcade-game:hover { filter: brightness(1.12); } 1958 .fxn-arcade-game:focus-visible { outline: 3px solid #f7d02a; outline-offset: 2px; } 1959 .fxn-arcade-game.is-run { background: linear-gradient(#d8ff4a, #8cc010); color: #1a0828; } 1960 .fxn-arcade-game.is-range { background: linear-gradient(#f0304a, #a00c24); color: #fff; border-color: #f7d02a; } 1961 .fxn-arcade-icon { 1962 flex: 0 0 auto; width: 40px; height: 40px; border-radius: 50%; 1963 display: flex; align-items: center; justify-content: center; font-size: 20px; line-height: 1; 1964 background: rgba(26,8,40,0.85); box-shadow: inset 0 0 0 2px rgba(255,255,255,0.25); 1965 } 1966 .fxn-arcade-txt { display: flex; flex-direction: column; gap: 3px; min-width: 0; } 1967 .fxn-arcade-txt b { font-weight: normal; font-size: 17px; letter-spacing: 0.04em; line-height: 1; } 1968 .fxn-arcade-txt small { font-family: 'Bebas Neue', 'Arial Narrow', sans-serif; font-size: 13px; letter-spacing: 0.06em; line-height: 1.15; opacity: 0.92; } 1969 .fxn-arcade-game.is-run .fxn-arcade-txt b { text-shadow: 0 1px 0 rgba(255,255,255,0.4); } 1970 .fxn-arcade-game.is-range .fxn-arcade-txt b { text-shadow: 0 2px 0 rgba(0,0,0,0.4); } 1971 .fxn-arcade-go { margin-left: auto; font-size: 13px; } 1972 1973 /* ---- Reduced motion ---- */ 1974 @media (prefers-reduced-motion: reduce) { 1975 .fxn-glow-spark, 1976 .fxn-bar-cta.is-play .fxn-glow-spark, 1977 .fxn-bar-pulse::before, 1978 .fxn-fright .fxn-bar-pulse { 1979 animation: none !important; 1980 opacity: 1 !important; 1981 } 1982 } 1983 1984 /* ---------- Responsive ---------- */ 1985 @media (max-width: 1200px) { 1986 .fxn-bar.fxn-fright { 1987 background-image: 1988 radial-gradient(ellipse at 50% 120%, rgba(180,230,30,0.16), rgba(0,0,0,0) 60%), 1989 linear-gradient(180deg, #120622 0%, #2a1046 70%, #3b1d5e 100%); 1990 } 1991 } 1992 @media (max-width: 1100px) { 1993 .fxn-fright .fxn-bar-headline { font-size: 22px; } 1994 .fxn-fright .fxn-bar-cta { font-size: 12px; padding: 9px 11px 7px; } 1995 } 1996 @media (max-width: 760px) { 1997 .fxn-bar-inner { gap: 10px 14px; padding: 9px 14px; } 1998 .fxn-bar-headline { font-size: 14px; } 1999 .fxn-bar-cta { font-size: 12px; padding: 8px 13px; letter-spacing: 0.1em; } 2000 .fxn-fright .fxn-bar-headline { font-size: 20px; white-space: normal; text-align: center; } 2001 .fxn-fright .fxn-bar-divider { display: none !important; } 2002 .fxn-unit { min-width: 38px; } 2003 .fxn-unit b { font-size: 17px; } 2004 } 2005 @media (max-width: 540px) { 2006 .fxn-arcade { width: 100%; } 2007 .fxn-bar-inner { flex-direction: column; padding: 10px 12px; } 2008 .fxn-bar-headline-group { justify-content: center; } 2009 .fxn-bar .fxn-bar-divider, 2010 .fxn-mode-pre .fxn-bar-divider, 2011 .fxn-mode-live .fxn-bar-divider { display: none !important; } 2012 .fxn-bar-ctas { width: 100%; flex-direction: column; } 2013 .fxn-bar-cta { width: 100%; justify-content: center; font-size: 13px; } 2014 .fxn-fright .fxn-bar-cta { font-size: 14px; padding: 11px 12px 9px; } 2015 .fxn-fright .fxn-bar-pulse { display: none; } 2016 .fxn-fright .fxn-bar-headline { font-size: 22px; } 2017 .fxn-fright .fxn-bar-headline .fxn-plate, 2018 .fxn-fright .fxn-bar-headline em { font-size: 11px; } 2019 .fxn-fright .fxn-bar-headline em { display: block; margin: 6px 0 0; vertical-align: 0; } 2020 .fxn-clock { justify-content: center; flex-wrap: wrap; } 2021 .fxn-clock-label { width: 100%; text-align: center; margin: 0 0 2px; } 2022 .fxn-clock-label br { display: none; } 2023 } 2024</style> 2025 2026<div class="fxn-bar fxn-mode-post" id="fxn-bar"> 2027 <div class="fxn-bar-inner"> 2028 2029 <!-- Headline â copy swapped by the script per state --> 2030 <div class="fxn-bar-headline-group"> 2031 <div class="fxn-bar-pulse" aria-hidden="true"></div>
2032 <span class="fxn-bar-headline" id="fxn-bar-headline">Join the Fellowship of <span>FIREARMS</span></span> 2033 </div> 2034 2035 <!-- Tombstone countdown (teaser + live event only) --> 2036 <div class="fxn-bar-divider fxn-when-prelive"></div> 2037 <div class="fxn-clock fxn-when-prelive" id="fxn-clock" aria-live="off"> 2038 <span class="fxn-clock-label" id="fxn-clock-label">EVENT <br>ENDS IN</span> 2039 <span class="fxn-unit"><b id="fxn-bar-d">00</b><i>DAYS</i></span> 2040 <span class="fxn-colon">:</span> 2041 <span class="fxn-unit"><b id="fxn-bar-h">00</b><i>HRS</i></span> 2042 <span class="fxn-colon">:</span> 2043 <span class="fxn-unit"><b id="fxn-bar-m">00</b><i>MIN</i></span> 2044 <span class="fxn-colon">:</span> 2045 <span class="fxn-unit"><b id="fxn-bar-s">00</b><i>SEC</i></span> 2046 </div> 2047 2048 <div class="fxn-bar-divider"></div> 2049 2050 <!-- CTAs --> 2051 <div class="fxn-bar-ctas"> 2052 <a class="fxn-bar-cta is-primary fxn-when-live" href="https://faxonfirearms.com/sale/"> 2053 Shop the Event <span class="fxn-bar-arrow">â¶</span> 2054 </a> 2055 <span class="fxn-arcade fxn-when-game" id="fxn-arcade"> 2056 <button type="button" class="fxn-bar-cta is-play" id="fxn-arcade-btn" aria-haspopup="true" aria-expanded="false" aria-controls="fxn-arcade-menu"> 2057 <span class="fxn-glow-spark"></span> 2058 Faxon Fall Arcade <span class="fxn-arcade-caret" aria-hidden="true">â¼</span> 2059 </button> 2060 <span class="fxn-arcade-menu" id="fxn-arcade-menu" role="menu" aria-label="Faxon Fall Arcade games"> 2061 <span class="fxn-arcade-title">Faxon Fall Arcade</span> 2062 <span class="fxn-arcade-sub">FREE GAMES · TOP 10 LEADERBOARDS</span> 2063 <a class="fxn-arcade-game is-run" role="menuitem" href="https://faxonfirearms.com/fright-run/"> 2064 <span class="fxn-arcade-icon" aria-hidden="true">ð</span> 2065 <span class="fxn-arcade-txt"><b>Fright Run</b><small>Outrun the monsters. Grab the candy corn.</small></span> 2066 <span class="fxn-arcade-go" aria-hidden="true">â¶</span> 2067 </a> 2068 <a class="fxn-arcade-game is-range" role="menuitem" href="https://faxonfirearms.com/haunted-range/"> 2069 <span class="fxn-arcade-icon" aria-hidden="true">ð¯</span> 2070 <span class="fxn-arcade-txt"><b>Haunted Range</b><small>60 seconds. 10-round mags. Drop the monsters.</small></span> 2071 <span class="fxn-arcade-go" aria-hidden="true">â¶</span> 2072 </a> 2073 </span> 2074 </span> 2075 <a class="fxn-bar-cta is-secondary" href="https://faxonfirearms.isolvedhire.com/jobs/" target="_blank" rel="noopener"> 2076 We're Hiring <span class="fxn-bar-arrow">â</span> 2077 </a> 2078 <a class="fxn-bar-cta is-glow" href="https://faxonfirearms.com/upper-builder/"> 2079 <span class="fxn-glow-spark"></span> 2080 Upper Builder <span class="fxn-bar-arrow">â</span> 2081 </a> 2082 <a class="fxn-bar-cta is-glow is-glow-alt" href="https://faxonfirearms.com/boltactionbuilder/"> 2083 <span class="fxn-glow-spark"></span> 2084 Bolt Action Builder <span class="fxn-bar-arrow">â</span> 2085 </a> 2086 </div> 2087 </div> 2088</div> 2089
2090<script> 2091(function () { 2092 /* --------------------------------------------------------- 2093 EVENT WINDOW (fixed UTC instants, so the bar is correct for 2094 every visitor no matter what timezone they're in) 2095 START: Oct 1, 2026 12:00:00 AM ET (EDT) = 2026-10-01T04:00:00Z 2096 END: Oct 31, 2026 11:59:59 PM ET (EDT) = 2026-11-01T03:59:59Z 2097 --------------------------------------------------------- */ 2098 var EVENT_START = Date.UTC(2026, 9, 1, 4, 0, 0); // month is 0-based: 9 = October 2099 var EVENT_END = Date.UTC(2026, 10, 1, 3, 59, 59); // 10 = November (UTC) = Oct 31 11:59:59 PM ET 2100 2101 var HEADLINES = { 2102 pre: '<span class="fxn-plate">FAXON</span>Glocktober & 10/22 Day<em>▶ COMING SOON</em>', 2103 live: '<span class="fxn-plate">FAXON</span>Glocktober & 10/22 Day<em>▶ NOW LIVE</em>', 2104 post: 'Join the Fellowship of <span>FIREARMS</span>' 2105 }; 2106 var CLOCK_LABELS = { pre: 'EVENT <br>STARTS IN', live: 'EVENT <br>ENDS IN' }; 2107 2108 var bar = document.getElementById('fxn-bar'); 2109 var headline = document.getElementById('fxn-bar-headline'); 2110 var clockLabel = document.getElementById('fxn-clock-label'); 2111 var dEl = document.getElementById('fxn-bar-d'); 2112 var hEl = document.getElementById('fxn-bar-h'); 2113 var mEl = document.getElementById('fxn-bar-m'); 2114 var sEl = document.getElementById('fxn-bar-s'); 2115 2116 var currentMode = null; 2117 2118 function pad(n) { return (n < 10 ? '0' : '') + n; } 2119 2120 function setMode(mode) { 2121 if (mode === currentMode) return; 2122 currentMode = mode; 2123 bar.className = 'fxn-bar fxn-mode-' + mode + (mode === 'post' ? '' : ' fxn-fright'); 2124 headline.innerHTML = HEADLINES[mode]; 2125 if (CLOCK_LABELS[mode]) { clockLabel.innerHTML = CLOCK_LABELS[mode]; } 2126 } 2127 2128 function tick() { 2129 var now = Date.now(); 2130 var mode = now < EVENT_START ? 'pre' : (now <= EVENT_END ? 'live' : 'post'); 2131 if (window.FXN_BAR_FORCE_MODE) { mode = window.FXN_BAR_FORCE_MODE; } // preview only; unset on the live site 2132 setMode(mode); 2133 2134 if (mode === 'post') { return; } 2135 2136 var diff = (mode === 'pre' ? EVENT_START : EVENT_END) - now; 2137 if (diff < 0) { diff = 0; } 2138 dEl.textContent = pad(Math.floor(diff / 86400000)); 2139 hEl.textContent = pad(Math.floor((diff % 86400000) / 3600000)); 2140 mEl.textContent = pad(Math.floor((diff % 3600000) / 60000)); 2141 sEl.textContent = pad(Math.floor((diff % 60000) / 1000)); 2142 } 2143 2144 tick(); 2145 setInterval(tick, 1000); 2146 2147 /* FAXON FALL ARCADE: game picker. The menu is moved to <body> and shown 2148 position:fixed under the button, so no site header (overflow, transform, 2149 or a low z-index stacking context) can clip or cover it. */ 2150 var arc = document.getElementById('fxn-arcade'); 2151 var abtn = document.getElementById('fxn-arcade-btn'); 2152 var amenu = document.getElementById('fxn-arcade-menu'); 2153 document.body.appendChild(amenu); 2154 function placeMenu() { 2155 var r = abtn.getBoundingClientRect(), vw = window.innerWidth || document.documentElement.clientWidth; 2156 var w = Math.min(340, vw - 24); 2157 var left = Math.max(12, Math.min(r.left + r.width / 2 - w / 2, vw - w - 12)); 2158 amenu.style.width = w + 'px'; amenu.style.left = left + 'px'; amenu.style.top = (r.bottom + 10) + 'px'; 2159 var vh = window.innerHeight || document.documentElement.clientHeight; 2160 var mh = amenu.offsetHeight; 2161 if (r.bottom + 10 + mh > vh && r.top - 10 - mh > 0) { amenu.style.top = (r.top - 10 - mh) + 'px'; } 2162 } 2163 function openMenu() { arc.classList.add('is-open'); amenu.classList.add('is-open'); abtn.setAttribute('aria-expanded', 'true'); placeMenu(); } 2164 function closeMenu() { arc.classList.remove('is-open'); amenu.classList.remove('is-open'); abtn.setAttribute('aria-expanded', 'false'); } 2165 abtn.addEventListener('click', function (e) { 2166 e.preventDefault(); e.stopPropagation(); 2167 if (arc.classList.contains('is-open')) { closeMenu(); } else { openMenu(); var first = amenu.querySelector('a'); if (first && e.detail === 0) { first.focus(); } } 2168 }); 2169 document.addEventListener('click', function (e) { if (!arc.contains(e.target) && !amenu.contains(e.target)) { closeMenu(); } }); 2170 document.addEventListener('keydown', function (e) { if (e.key === 'Escape' && arc.classList.contains('is-open')) { closeMenu(); abtn.focus(); } }); 2171 window.addEventListener('resize', function () { if (arc.classList.contains('is-open')) { placeMenu(); } }); 2172 window.addEventListener('scroll', function () { if (arc.classList.contains('is-open')) { placeMenu(); } }, { passive: true }); 2173})(); 2174</script>
2174 2175</div> 2176 </div> 2177</div> 2178 2179 <div data-sub-layout-container="2f8d55b4-143b-44d3-9b3c-1b89bc983e48" data-layout-name="Layout"> 2180 <style data-container-styling="2f8d55b4-143b-44d3-9b3c-1b89bc983e48"> 2181 [data-sub-layout-container="2f8d55b4-143b-44d3-9b3c-1b89bc983e48"] { 2182 box-sizing: border-box; 2183 display: flex; 2184 flex-wrap: wrap; 2185 z-index: 0; 2186 position: relative; 2187 height: ; 2188 padding-top: 0px; 2189 padding-right: 0px; 2190 padding-bottom: 0px; 2191 padding-left: 0px; 2192 margin-top: 0px; 2193 margin-right: 0px; 2194 margin-bottom: 0px; 2195 margin-left: 0px; 2196 border-width: 0px; 2197 border-style: solid; 2198 border-color: #333333; 2199 } 2200 2201 [data-sub-layout-container="2f8d55b4-143b-44d3-9b3c-1b89bc983e48"]:after { 2202 display: block; 2203 position: absolute; 2204 top: 0; 2205 left: 0; 2206 bottom: 0; 2207 right: 0; 2208 background-size: cover; 2209 z-index: auto; 2210 } 2211 </style> 2212 2213 <div data-sub-layout="894b95c1-216b-4715-90c9-8ffa18565d86"> 2214 <style data-column-styling="894b95c1-216b-4715-90c9-8ffa18565d86"> 2215 [data-sub-layout="894b95c1-216b-4715-90c9-8ffa18565d86"] { 2216 display: flex; 2217 flex-direction: column; 2218 box-sizing: border-box; 2219 flex-basis: 100%; 2220 max-width: 100%; 2221 z-index: 0; 2222 position: relative; 2223 height: ; 2224 background-color: rgba(92,0,0,1); 2225 padding-top: 0px; 2226 padding-right: 10.5px; 2227 padding-bottom: 0px; 2228 padding-left: 10.5px; 2229 margin-top: 0px; 2230 margin-right: 0px; 2231 margin-bottom: 0px; 2232 margin-left: 0px; 2233 border-width: 0px; 2234 border-style: solid; 2235 border-color: #333333; 2236 justify-content: center; 2237 } 2238 [data-sub-layout="894b95c1-216b-4715-90c9-8ffa18565d86"]:after { 2239 display: block; 2240 position: absolute; 2241 top: 0; 2242 left: 0; 2243 bottom: 0; 2244 right: 0; 2245 background-size: cover; 2246 z-index: -1; 2247 content: ''; 2248 } 2249 @media only screen and (max-width: 700px) { 2250 [data-sub-layout="894b95c1-216b-4715-90c9-8ffa18565d86"] { 2251 flex-basis: 100%; 2252 max-width: 100%; 2253 } 2254 } 2255 </style> 2256 <div data-widget-id="d3a1a6f6-11b5-46f5-aae4-e7c1c5cc1a7b" data-placement-id="f8767bab-f306-4e0c-8bb8-ebcc6cf16bb5" data-placement-status="ACTIVE"><style> 2257 .sd-divider-wrapper-d3a1a6f6-11b5-46f5-aae4-e7c1c5cc1a7b { 2258 display: flex; 2259 height: 20px; 2260 align-items: center; 2261 justify-content: center; 2262 text-align: center; 2263 } 2264 2265 .sd-divider-d3a1a6f6-11b5-46f5-aae4-e7c1c5cc1a7b { 2266 height: 0; 2267 border-top: 1px; 2268 border-color: rgba(180, 186, 209, 1); 2269 border-style: solid; 2270 width: 100%; 2271 margin: 0; 2272 } 2273</style> 2274 2275<div class="sd-divider-wrapper-d3a1a6f6-11b5-46f5-aae4-e7c1c5cc1a7b"> 2276 <hr class="sd-divider-d3a1a6f6-11b5-46f5-aae4-e7c1c5cc1a7b"> 2277</div> 2278</div> 2279 </div> 2280</div> 2281 2282 <div data-sub-layout-container="dfc85b3e-7b1a-48b1-b8ca-dc3cbef076f7" data-layout-name="Shipping Sticky Banner"> 2283 <style data-container-styling="dfc85b3e-7b1a-48b1-b8ca-dc3cbef076f7"> 2284 [data-sub-layout-container="dfc85b3e-7b1a-48b1-b8ca-dc3cbef076f7"] { 2285 box-sizing: border-box; 2286 display: flex; 2287 flex-wrap: wrap; 2288 z-index: 0; 2289 position: relative; 2290 height: ; 2291 padding-top: 0px; 2292 padding-right: 0px; 2293 padding-bottom: 0px; 2294 padding-left: 0px; 2295 margin-top: 0px; 2296 margin-right: 0px; 2297 margin-bottom: 0px; 2298 margin-left: 0px; 2299 border-width: 0px; 2300 border-style: solid; 2301 border-color: #333333; 2302 } 2303 2304 [data-sub-layout-container="dfc85b3e-7b1a-48b1-b8ca-dc3cbef076f7"]:after { 2305 display: block; 2306 position: absolute; 2307 top: 0; 2308 left: 0; 2309 bottom: 0; 2310 right: 0; 2311 background-size: cover; 2312 z-index: auto; 2313 } 2314 </style> 2315 2316 <div data-sub-layout="57af38a8-d6e3-4bb8-be2a-fa815e18d7f7"> 2317 <style data-column-styling="57af38a8-d6e3-4bb8-be2a-fa815e18d7f7"> 2318 [data-sub-layout="57af38a8-d6e3-4bb8-be2a-fa815e18d7f7"] { 2319 display: flex; 2320 flex-direction: column; 2321 box-sizing: border-box; 2322 flex-basis: 100%; 2323 max-width: 100%; 2324 z-index: 0; 2325 position: relative; 2326 height: ; 2327 background-color: rgba(92, 0, 0, 1); 2328 padding-top: 0px; 2329 padding-right: 10.5px; 2330 padding-bottom: 0px; 2331 padding-left: 10.5px; 2332 margin-top: 0px; 2333 margin-right: 0px; 2334 margin-bottom: 0px; 2335 margin-left: 0px; 2336 border-width: 0px; 2337 border-style: solid; 2338 border-color: #333333; 2339 justify-content: center; 2340 } 2341 [data-sub-layout="57af38a8-d6e3-4bb8-be2a-fa815e18d7f7"]:after { 2342 display: block; 2343 position: absolute; 2344 top: 0; 2345 left: 0; 2346 bottom: 0; 2347 right: 0; 2348 background-size: cover; 2349 z-index: -1; 2350 content: ''; 2351 } 2352 @media only screen and (max-width: 700px) { 2353 [data-sub-layout="57af38a8-d6e3-4bb8-be2a-fa815e18d7f7"] { 2354 flex-basis: 100%; 2355 max-width: 100%; 2356 } 2357 } 2358 </style> 2359 <div data-widget-id="62072223-de6a-4b69-94c4-ffc7b9426e0b" data-placement-id="d14f363b-a9ad-4545-9d52-85f21f7b9e6d" data-placement-status="ACTIVE"><style> 2360 .sd-simple-text-62072223-de6a-4b69-94c4-ffc7b9426e0b { 2361 padding-top: 0px; 2362 padding-right: 0px; 2363 padding-bottom: 0px; 2364 padding-left: 0px; 2365 2366 margin-top: 0px; 2367 margin-right: 0px; 2368 margin-bottom: 0px; 2369 margin-left: 0px; 2370 2371 } 2372 2373 .sd-simple-text-62072223-de6a-4b69-94c4-ffc7b9426e0b * { 2374 margin: 0; 2375 padding: 0; 2376 2377 color: rgba(255,255,255,1); 2378 font-family: inherit; 2379 font-weight: 500; 2380 font-size: 8px; 2381 min-height: 8px; 2382 2383 } 2384 2385 .sd-simple-text-62072223-de6a-4b69-94c4-ffc7b9426e0b { 2386 text-align: center; 2387 } 2388 2389 #sd-simple-text-editable-62072223-de6a-4b69-94c4-ffc7b9426e0b { 2390 min-width: 14px; 2391 line-height: 1.5; 2392 display: inline-block; 2393 } 2394 2395 #sd-simple-text-editable-62072223-de6a-4b69-94c4-ffc7b9426e0b[data-edit-mode="true"]:hover, 2396 #sd-simple-text-editable-62072223-de6a-4b69-94c4-ffc7b9426e0b[data-edit-mode="true"]:active, 2397 #sd-simple-text-editable-62072223-de6a-4b69-94c4-ffc7b9426e0b[data-edit-mode="true"]:focus { 2398 outline: 1px dashed #3C64F4; 2399 } 2400 2401 #sd-simple-text-editable-62072223-de6a-4b69-94c4-ffc7b9426e0b strong, 2402 #sd-simple-text-editable-62072223-de6a-4b69-94c4-ffc7b9426e0b strong * { 2403 font-weight: bold; 2404 } 2405 2406 #sd-simple-text-editable-62072223-de6a-4b69-94c4-ffc7b9426e0b a { 2407 color: inherit; 2408 } 2409 2410 @supports (color: color-mix(in srgb, #000 50%, #fff 50%)) { 2411 #sd-simple-text-editable-62072223-de6a-4b69-94c4-ffc7b9426e0b a:hover, 2412 #sd-simple-text-editable-62072223-de6a-4b69-94c4-ffc7b9426e0b a:active, 2413 #sd-simple-text-editable-62072223-de6a-4b69-94c4-ffc7b9426e0b a:focus { 2414 color: color-mix(in srgb, currentColor 68%, white 32%); 2415 } 2416 } 2417 2418 @supports not (color: color-mix(in srgb, #000 50%, #fff 50%)) { 2419 #sd-simple-text-editable-62072223-de6a-4b69-94c4-ffc7b9426e0b a:hover, 2420 #sd-simple-text-editable-62072223-de6a-4b69-94c4-ffc7b9426e0b a:active, 2421 #sd-simple-text-editable-62072223-de6a-4b69-94c4-ffc7b9426e0b a:focus { 2422 filter: brightness(2); 2423 } 2424 } 2425</style> 2426 2427<div class="sd-simple-text-62072223-de6a-4b69-94c4-ffc7b9426e0b "> 2428 <div id="sd-simple-text-editable-62072223-de6a-4b69-94c4-ffc7b9426e0b" data-edit-mode=""> 2429 <p><strong>DUE TO INCREASED ORDER VOLUME, PLEASE ALLOW 2-3 EXTRA BUSINESS DAYS FOR ORDER PROCESSING AND RESPONSES TO CUSTOMER SERVICE INQUIRIES.</strong></p> 2430<p>HELP INSURE YOUR PACKAGE ARRIVES ON TIME. <strong>UPS </strong>AND <strong>FEDEX </strong>HAVE RELIABLE TRACKING AND FEWER DELAYS THAN USPS.</p> 2431 </div> 2432</div> 2433 2434</div> 2435 </div> 2436</div> 2437 2438</div></div> 2439<div data-content-region="header_bottom"></div> 2440 2441 <div class="body " id='main-content' role='main' data-currency-code="USD"> 2442 2443 <div class="container"> 2444 <nav aria-label="Breadcrumb"> 2445 <ol class="breadcrumbs"> 2446 <li class="breadcrumb "> 2447 <a class="breadcrumb-label" 2448 href="https://faxonfirearms.com/" 2449 2450 >
2451 <span>Home</span> 2452 </a> 2453 </li> 2454 <li class="breadcrumb is-active"> 2455 <a class="breadcrumb-label" 2456 href="/login.php" 2457 aria-current="page" 2458 > 2459 <span>Login</span> 2460 </a> 2461 </li> 2462 </ol> 2463</nav> 2464
2465<script type="application/ld+json"> 2466{ 2467 "@context": "https://schema.org", 2468 "@type": "BreadcrumbList", 2469 "itemListElement": 2470 [ 2471 { 2472 "@type": "ListItem", 2473 "position": 1, 2474 "item": { 2475 "@id": "https:\u002f\u002ffaxonfirearms.com\u002f", 2476 "name": "Home" 2477 } 2478 }, 2479 { 2480 "@type": "ListItem", 2481 "position": 2, 2482 "item": { 2483 "@id": "\u002flogin.php", 2484 "name": "Login" 2485 } 2486 } 2487 ] 2488} 2489</script>
2489 2490 <h1 class="page-heading">Sign in</h1> 2491 <div class="login-row account account--fixed"> 2492 <form class="login-form form" action="https://faxonfirearms.com/login.php?action=check_login" method="post"> 2493 2494 2495 <div class="form-field"> 2496 <label class="form-label" for="login_email">Email Address:</label> 2497 <input class="form-input" name="login_email" id="login_email" type="email"> 2498 </div> 2499 <div class="form-field"> 2500 <label class="form-label" for="login_pass">Password:</label> 2501 <input class="form-input" id="login_pass" type="password" name="login_pass" autocomplete="off"> 2502 </div> 2503 <div class="form-actions"> 2504 <input type="submit" class="button button--primary" value="Sign in"> 2505 <a class="forgot-password" href="https://faxonfirearms.com/login.php?action=reset_password">Forgot your password?</a> 2506 </div> 2507 </form> 2508 <div class="new-customer"> 2509 <div class="panel"> 2510 <div class="panel-header"> 2511 <h2 class="panel-title">New Customer?</h2> 2512 </div> 2513 <div class="panel-body"> 2514 <p class="new-customer-intro">Create an account with us and you'll be able to:</p> 2515 <ul class="new-customer-fact-list"> 2516 <li class="new-customer-fact">Check out faster</li> 2517 <li class="new-customer-fact">Save multiple shipping addresses</li> 2518 <li class="new-customer-fact">Access your order history</li> 2519 <li class="new-customer-fact">Track new orders</li> 2520 <li class="new-customer-fact">Save items to your Wish List</li> 2521 </ul> 2522 <a href="https://faxonfirearms.com/login.php?action=create_account"><button class="button button--primary">Create Account</button></a> 2523 </div> 2524 </div> 2525 </div> 2526 </div> 2527</div> 2528 2529 2530 <div id="modal" class="modal" data-reveal data-prevent-quick-search-close> 2531 <button class="modal-close" 2532 type="button" 2533 title="Close" 2534 2535> 2536 <span class="aria-description--hidden">Close</span> 2537 <span aria-hidden="true">×</span> 2538</button> 2539 <div class="modal-content"></div> 2540 <div class="loadingOverlay"></div> 2541</div> 2542 <div id="alert-modal" class="modal modal--alert modal--small" data-reveal data-prevent-quick-search-close> 2543 <div class="swal2-icon swal2-error swal2-icon-show"><span class="swal2-x-mark"><span class="swal2-x-mark-line-left"></span><span class="swal2-x-mark-line-right"></span></span></div> 2544 2545 <div class="modal-content"></div> 2546 2547 <div class="button-container"><button type="button" class="confirm button" data-reveal-close>OK</button></div> 2548</div> 2549</div> 2550 2551 2552<footer class="footer" role="contentinfo"> 2553 <h2 class="footer-title-sr-only">Footer Start</h2> 2554 <div class="container"> 2555 <section class="footer-info 4a616d6573"> 2556 <article class="footer-info-col footer-info-dropdown footer-info-col--small" data-section-type="footer-categories"> 2557 <h5 class="footer-info-heading"> 2558 Categories 2559 <i class="icon" aria-hidden="true"> 2560 <svg><use xlink:href="#icon-downselector" /></svg> 2561 </i> 2562 </h5> 2563 <ul class="footer-info-list"> 2564 <li> 2565 <a href="https://faxonfirearms.com/hotbuys/">Hot Buys</a> 2566 </li> 2567 <li> 2568 <a href="https://faxonfirearms.com/arak-21/">ARAK-21®</a> 2569 </li> 2570 <li> 2571 <a href="https://faxonfirearms.com/suppressors/-1">Suppressors</a> 2572 </li> 2573 <li> 2574 <a href="https://faxonfirearms.com/ar15-firearms/">AR15 Firearms</a> 2575 </li> 2576 <li> 2577 <a href="https://faxonfirearms.com/ar15-upper-receivers/">AR15 Upper Receivers</a> 2578 </li> 2579 <li> 2580 <a href="https://faxonfirearms.com/ar10-firearms/">AR10 Firearms</a> 2581 </li> 2582 <li> 2583 <a href="https://faxonfirearms.com/boltactionfirearms">Bolt Action</a> 2584 </li> 2585 <li> 2586 <a href="https://faxonfirearms.com/firearms/fx-19-pistols/">FX-19 Pistols</a> 2587 </li> 2588 <li> 2589 <a href="https://faxonfirearms.com/receivers-sets/">Receivers & Sets</a> 2590 </li> 2591 <li> 2592 <a href="https://faxonfirearms.com/rifle-barrels/">Rifle Barrels</a> 2593 </li> 2594 <li> 2595 <a href="https://faxonfirearms.com/rifle-parts/">Rifle Parts</a> 2596 </li> 2597 <li> 2598 <a href="https://faxonfirearms.com/pistol-barrels/">Pistol Barrels</a> 2599 </li> 2600 <li> 2601 <a href="https://faxonfirearms.com/pistol-parts/">Pistol Parts</a> 2602 </li> 2603 <li> 2604 <a href="https://faxonfirearms.com/other-brands/">FAXON WAREHOUSE</a> 2605 </li> 2606 <li> 2607 <a href="https://faxonfirearms.com/more/">More</a> 2608 </li> 2609 </ul> 2610 </article> 2611 2612 <article class="footer-info-col footer-info-dropdown footer-info-col--small" data-section-type="footer-webPages"> 2613 <h5 class="footer-info-heading"> 2614 Information 2615 <i class="icon" aria-hidden="true"> 2616 <svg><use xlink:href="#icon-downselector" /></svg> 2617 </i> 2618 </h5> 2619 <ul class="footer-info-list"> 2620 <li> 2621 <a href="https://faxonfirearms.com/boltactionbuilder/">
2621Bolt Action Builder</a> 2622 </li> 2623 <li> 2624 <a href="https://faxonfirearms.com/kickoff-challenge/">FAXON FALL KICKOFF CHALLENGE 2026</a> 2625 </li> 2626 <li> 2627 <a href="https://faxonfirearms.com/fright-run/">FAXON FRIGHT RUN | GLOCKTOBER & 10/22 DAY 2026</a> 2628 </li> 2629 <li> 2630 <a href="https://faxonfirearms.com/haunted-range/">FAXON HAUNTED RANGE | 10/22 DAY & GLOCKTOBER 2026</a> 2631 </li> 2632 <li> 2633 <a href="https://faxonfirearms.com/fx-19-kit-builder/">FX-19 Kit Builder</a> 2634 </li> 2635 <li> 2636 <a href="https://faxonfirearms.com/isocertification/">ISO 9001:2015</a> 2637 </li> 2638 <li> 2639 <a href="https://faxonfirearms.com/oem/">OEM Manufacturing</a> 2640 </li> 2641 <li> 2642 <a href="https://faxonfirearms.com/faxonrimfire/">Faxon Rimfire</a> 2643 </li> 2644 <li> 2645 <a href="https://faxonfirearms.com/qualitypolicy/">Quality Policy</a> 2646 </li> 2647 <li> 2648 <a href="https://faxonfirearms.com/oem-dealers/">OEM & Dealers</a> 2649 </li> 2650 <li> 2651 <a href="https://faxonfirearms.com/support/">Support</a> 2652 </li> 2653 <li> 2654 <a href="https://faxonfirearms.com/faxonembassy/">Faxon Embassy</a> 2655 </li> 2656 <li> 2657 <a href="https://faxonfirearms.com/blog/">The Faxon Blog and Podcast</a> 2658 </li> 2659 <li> 2660 <a href="https://faxonfirearms.com/sitemap.php">Sitemap</a> 2661 </li> 2662 </ul> 2663 </article> 2664 2665 2666 <article class="footer-info-col footer-mobile-limited footer-info-col--small" data-section-type="footer-webPages"> 2667 <h5 class="footer-info-heading">Follow Us</h5> 2668 <ul class="socialLinks socialLinks--alt"> 2669 <li class="socialLinks-item"> 2670 <a class="icon icon--twitter" href="https://twitter.com/faxon_firearms" target="_blank" rel="noopener"> 2671 <span class="aria-description--hidden">Twitter</span> 2672 <svg><use xlink:href="#icon-twitter" /></svg> 2673 </a> 2674 </li> 2675 <li class="socialLinks-item"> 2676 <a class="icon icon--facebook" href="https://www.facebook.com/FaxonFirearms?ref=hl" target="_blank" rel="noopener"> 2677 <span class="aria-description--hidden">Facebook</span> 2678 <svg><use xlink:href="#icon-facebook" /></svg> 2679 </a> 2680 </li> 2681 <li class="socialLinks-item"> 2682 <a class="icon icon--youtube" href="https://www.youtube.com/channel/UCqY7MkMfys4AOxZyNUafe1A" target="_blank" rel="noopener"> 2683 <span class="aria-description--hidden">Youtube</span> 2684 <svg><use xlink:href="#icon-youtube" /></svg> 2685 </a> 2686 </li> 2687 <li class="socialLinks-item"> 2688 <a class="icon icon--instagram" href="https://www.instagram.com/faxonfirearms" target="_blank" rel="noopener"> 2689 <span class="aria-description--hidden">Instagram</span> 2690 <svg><use xlink:href="#icon-instagram" /></svg> 2691 </a> 2692 </li> 2693 </ul> 2694 </article> 2695 2696 <article class="footer-info-col footer-mobile-limited footer-info-col--small" data-section-type="storeInfo"> 2697 <h5 class="footer-info-heading footer-store-name">Faxon Firearms</h5> 2698 <address>Faxon Firearms<br> 26994348 Le Saint Ct.<br> 2700Fairfield, OH 45014</address> 2701 <div class="footer-info-phone"> 2702 <i class="icon" aria-hidden="true"> 2703 <svg><use xlink:href="#icon-phone" /></svg> 2704 </i> 2705 <a href="tel:513-280-8861">513-280-8861</a> 2706 </div> 2707 </article> 2708 </section> 2709 <div class="footer-copyright"> 2710 <p class="powered-by">© 2026 Faxon Firearms </p> 2711 </div> 2712 2713 </div> 2714 <div data-content-region="ssl_site_seal--global"><div data-layout-id="eaeadeb5-2544-4ad7-b44f-1dc63d247cd5"> <div data-sub-layout-container="f38ed975-c68f-4841-bee0-7bfe812e7826" data-layout-name="Layout"> 2715 <style data-container-styling="f38ed975-c68f-4841-bee0-7bfe812e7826"> 2716 [data-sub-layout-container="f38ed975-c68f-4841-bee0-7bfe812e7826"] { 2717 box-sizing: border-box; 2718 display: flex; 2719 flex-wrap: wrap; 2720 z-index: 0; 2721 position: relative; 2722 height: ; 2723 padding-top: 0px; 2724 padding-right: 0px; 2725 padding-bottom: 0px; 2726 padding-left: 0px; 2727 margin-top: 0px; 2728 margin-right: 0px; 2729 margin-bottom: 0px; 2730 margin-left: 0px; 2731 border-width: 0px; 2732 border-style: solid; 2733 border-color: #333333; 2734 } 2735 2736 [data-sub-layout-container="f38ed975-c68f-4841-bee0-7bfe812e7826"]:after { 2737 display: block; 2738 position: absolute; 2739 top: 0; 2740 left: 0; 2741 bottom: 0; 2742 right: 0; 2743 background-size: cover; 2744 z-index: auto; 2745 } 2746 </style> 2747 2748 <div data-sub-layout="7fe9eb08-3ba4-4509-9d5e-f2978d8e617f"> 2749 <style data-column-styling="7fe9eb08-3ba4-4509-9d5e-f2978d8e617f"> 2750 [data-sub-layout="7fe9eb08-3ba4-4509-9d5e-f2978d8e617f"] { 2751 display: flex; 2752 flex-direction: column; 2753 box-sizing: border-box; 2754 flex-basis: 100%; 2755 max-width: 100%; 2756 z-index: 0; 2757 position: relative; 2758 height: ; 2759 padding-top: 0px; 2760 padding-right: 10.5px; 2761 padding-bottom: 0px; 2762 padding-left: 10.5px; 2763 margin-top: 0px; 2764 margin-right: 0px; 2765 margin-bottom: 0px; 2766 margin-left: 0px; 2767 border-width: 0px; 2768 border-style: solid; 2769 border-color: #333333; 2770 justify-content: center; 2771 } 2772 [data-sub-layout="7fe9eb08-3ba4-4509-9d5e-f2978d8e617f"]:after { 2773 display: block; 2774 position: absolute; 2775 top: 0; 2776 left: 0; 2777 bottom: 0; 2778 right: 0; 2779 background-size: cover; 2780 z-index: auto; 2781 } 2782 @media only screen and (max-width: 700px) { 2783 [data-sub-layout="7fe9eb08-3ba4-4509-9d5e-f2978d8e617f"] { 2784 flex-basis: 100%; 2785 max-width: 100%; 2786 } 2787 } 2788 </style> 2789 <div data-widget-id="7ae91cad-35b2-4905-a7e2-b8002cb73029" data-placement-id="6820e90f-c541-4bd3-8699-697433058920" data-placement-status="ACTIVE"><style> 2790 .sd-simple-text-7ae91cad-35b2-4905-a7e2-b8002cb73029 { 2791 padding-top: 0px; 2792 padding-right: 0px; 2793 padding-bottom: 0px; 2794 padding-left: 0px; 2795 2796 margin-top: 0px; 2797 margin-right: 0px; 2798 margin-bottom: 0px; 2799 margin-left: 0px; 2800 2801 } 2802 2803 .sd-simple-text-7ae91cad-35b2-4905-a7e2-b8002cb73029 * { 2804 margin: 0; 2805 padding: 0; 2806 2807 color: rgba(255,255,255,1); 2808 font-family: inherit; 2809 font-weight: 500; 2810 font-size: 12px; 2811 min-height: 12px; 2812 2813 } 2814 2815 .sd-simple-text-7ae91cad-35b2-4905-a7e2-b8002cb73029 { 2816 text-align: center; 2817 } 2818 2819 #sd-simple-text-editable-7ae91cad-35b2-4905-a7e2-b8002cb73029 { 2820 min-width: 14px; 2821 line-height: 1.5; 2822 display: inline-block; 2823 } 2824 2825 #sd-simple-text-editable-7ae91cad-35b2-4905-a7e2-b8002cb73029[data-edit-mode="true"]:hover, 2826 #sd-simple-text-editable-7ae91cad-35b2-4905-a7e2-b8002cb73029[data-edit-mode="true"]:active, 2827 #sd-simple-text-editable-7ae91cad-35b2-4905-a7e2-b8002cb73029[data-edit-mode="true"]:focus { 2828 outline: 1px dashed #3C64F4; 2829 } 2830 2831 #sd-simple-text-editable-7ae91cad-35b2-4905-a7e2-b8002cb73029 strong, 2832 #sd-simple-text-editable-7ae91cad-35b2-4905-a7e2-b8002cb73029 strong * { 2833 font-weight: bold; 2834 } 2835 2836 #sd-simple-text-editable-7ae91cad-35b2-4905-a7e2-b8002cb73029 a { 2837 color: inherit; 2838 } 2839 2840 @supports (color: color-mix(in srgb, #000 50%, #fff 50%)) { 2841 #sd-simple-text-editable-7ae91cad-35b2-4905-a7e2-b8002cb73029 a:hover, 2842 #sd-simple-text-editable-7ae91cad-35b2-4905-a7e2-b8002cb73029 a:active, 2843 #sd-simple-text-editable-7ae91cad-35b2-4905-a7e2-b8002cb73029 a:focus { 2844 color: color-mix(in srgb, currentColor 68%, white 32%); 2845 } 2846 } 2847 2848 @supports not (color: color-mix(in srgb, #000 50%, #fff 50%)) { 2849 #sd-simple-text-editable-7ae91cad-35b2-4905-a7e2-b8002cb73029 a:hover, 2850 #sd-simple-text-editable-7ae91cad-35b2-4905-a7e2-b8002cb73029 a:active, 2851 #sd-simple-text-editable-7ae91cad-35b2-4905-a7e2-b8002cb73029 a:focus { 2852 filter: brightness(2); 2853 } 2854 } 2855</style> 2856 2857<div class="sd-simple-text-7ae91cad-35b2-4905-a7e2-b8002cb73029 "> 2858 <div id="sd-simple-text-editable-7ae91cad-35b2-4905-a7e2-b8002cb73029" data-edit-mode=""> 2859 <p>Faxon Firearms is a federally licensed manufacturer (FFL) and Special Occupational Taxpayer (SOT). All products are manufactured, marketed, and sold in full compliance with U.S. federal, state, and international regulations, including ITAR. Products are sold exclusively for lawful sporting, professional, and commercial use. Faxon Firearms does not provide instructions intended to facilitate harm to people or animals.</p> 2860 </div> 2861</div> 2862 2863</div> 2864 </div> 2865</div> 2866 2867</div></div> 2868</footer> 2869 2870
2870<script>window.__webpack_public_path__ = "https://cdn11.bigcommerce.com/s-f1hwux/stencil/dcf6e980-9b50-013f-9cb6-7a1948be6ce7/e/d05145d0-97fa-013f-e7cd-7608931f64d7/dist/";</script>
2870 2871
2871<script> 2872 function onThemeBundleMain() { 2873 window.stencilBootstrap("login", "{\"zoomSize\":\"1280x1280\",\"productSize\":\"760x760\",\"genericError\":\"Oops! Something went wrong.\",\"maintenanceModeSettings\":[],\"adminBarLanguage\":\"{\\\"locale\\\":\\\"en\\\",\\\"locales\\\":{\\\"admin.maintenance_header\\\":\\\"en\\\",\\\"admin.maintenance_tooltip\\\":\\\"en\\\",\\\"admin.maintenance_showstore_link\\\":\\\"en\\\",\\\"admin.prelaunch_header\\\":\\\"en\\\",\\\"admin.page_builder_link\\\":\\\"en\\\"},\\\"translations\\\":{\\\"admin.maintenance_header\\\":\\\"Your store is down for maintenance.\\\",\\\"admin.maintenance_tooltip\\\":\\\"Only administrators can view the store at the moment. Visit your control panel settings page to disable maintenance mode.\\\",\\\"admin.maintenance_showstore_link\\\":\\\"Click here to see what your visitors will see.\\\",\\\"admin.prelaunch_header\\\":\\\"Your storefront is private. Share your site with preview code:\\\",\\\"admin.page_builder_link\\\":\\\"Design this page in Page Builder\\\"}}\",\"urls\":{\"home\":\"https://faxonfirearms.com/\",\"brands\":\"https://faxonfirearms.com/brands/\",\"search\":\"https://faxonfirearms.com/search.php\",\"compare\":\"https://faxonfirearms.com/compare\",\"sitemap\":\"https://faxonfirearms.com/sitemap.php\",\"contact_us_submit\":\"https://faxonfirearms.com/pages.php?action=sendContactForm\",\"subscribe\":{\"action\":\"https://faxonfirearms.com/subscribe.php\"},\"checkout\":{\"single_address\":\"https://faxonfirearms.com/checkout\",\"multiple_address\":\"https://faxonfirearms.com/checkout.php?action=multiple\"},\"account\":{\"orders\":{\"all\":\"https://faxonfirearms.com/account.php?action=order_status\",\"completed\":\"https://faxonfirearms.com/account.php?action=view_orders\",\"save_new_return\":\"https://faxonfirearms.com/account.php?action=save_new_return\"},\"returns\":\"https://faxonfirearms.com/account.php?action=view_returns\",\"addresses\":\"https://faxonfirearms.com/account.php?action=address_book\",\"inbox\":\"https://faxonfirearms.com/account.php?action=inbox\",\"send_message\":\"https://faxonfirearms.com/account.php?action=send_message\",\"add_address\":\"https://faxonfirearms.com/account.php?action=add_shipping_address\",\"update_action\":\"https://faxonfirearms.com/account.php?action=update_account\",\"details\":\"https://faxonfirearms.com/account.php?action=account_details\",\"recent_items\":\"https://faxonfirearms.com/account.php?action=recent_items\",\"index\":\"https://faxonfirearms.com/account.php\",\"wishlists\":{\"all\":\"https://faxonfirearms.com/wishlist.php\",\"add\":\"https://faxonfirearms.com/wishlist.php?action=addwishlist\",\"edit\":\"https://faxonfirearms.com/wishlist.php?action=editwishlist\",\"delete\":\"https://faxonfirearms.com/wishlist.php?action=deletewishlist\"}},\"auth\":{\"login\":\"https://faxonfirearms.com/login.php\",\"check_login\":\"https://faxonfirearms.com/login.php?action=check_login\",\"create_account\":\"https://faxonfirearms.com/login.php?action=create_account\",\"save_new_account\":\"https://faxonfirearms.com/login.php?action=save_new_account\",\"forgot_password\":\"https://faxonfirearms.com/login.php?action=reset_password\",\"send_password_email\":\"https://faxonfirearms.com/login.php?action=send_password_email\",\"save_new_password\":\"https://faxonfirearms.com/login.php?action=save_new_password\",\"logout\":\"https://faxonfirearms.com/login.php?action=logout\"},\"cart\":\"https://faxonfirearms.com/cart.php\",\"product\":{\"post_review\":\"https://faxonfirearms.com/postreview.php\"},\"gift_certificate\":{\"purchase\":\"https://faxonfirearms.com/giftcertificates.php\",\"redeem\":\"https://faxonfirearms.com/giftcertificates.php?action=redeem\",\"balance\":\"https://faxonfirearms.com/giftcertificates.php?action=balance\"},\"rss\":{\"products\":{\"new\":\"https://faxonfirearms.com/rss.php?type=rss\",\"new_atom\":\"https://faxonfirearms.com/rss.php?type=atom\",\"popular\":\"https://faxonfirearms.com/rss.php?action=popularproducts&type=rss\",\"popular_atom\":\"https://faxonfirearms.com/rss.php?action=popularproducts&type=atom\",\"featured\":\"https://faxonfirearms.com/rss.php?action=featuredproducts&type=rss\",\"featured_atom\":\"https://faxonfirearms.com/rss.php?action=featuredproducts&type=atom\",\"search\":\"https://faxonfirearms.com/rss.php?action=searchproducts&type=rss\",\"search_atom\":\"https://faxonfirearms.com/rss.php?action=searchproducts&type=atom\"},\"blog\":\"https://faxonfirearms.com/rss.php?action=newblogs&type=rss\",\"blog_atom\":\"https://faxonfirearms.com/rss.php?action=newblogs&type=atom\"}},\"secureBaseUrl\":\"https://faxonfirearms.com\",\"cartId\":null,\"channelId\":1,\"template\":\"pages/auth/login\",\"validationDictionaryJSON\":\"{\\\"locale\\\":\\\"en\\\",\\\"locales\\\":{\\\"validation_messages.val
2873id_email\\\":\\\"en\\\",\\\"validation_messages.password\\\":\\\"en\\\",\\\"validation_messages.password_match\\\":\\\"en\\\",\\\"validation_messages.invalid_password\\\":\\\"en\\\",\\\"validation_messages.field_not_blank\\\":\\\"en\\\",\\\"validation_messages.certificate_amount\\\":\\\"en\\\",\\\"validation_messages.certificate_amount_range\\\":\\\"en\\\",\\\"validation_messages.price_min_evaluation\\\":\\\"en\\\",\\\"validation_messages.price_max_evaluation\\\":\\\"en\\\",\\\"validation_messages.price_min_not_entered\\\":\\\"en\\\",\\\"validation_messages.price_max_not_entered\\\":\\\"en\\\",\\\"validation_messages.price_invalid_value\\\":\\\"en\\\",\\\"validation_messages.invalid_gift_certificate\\\":\\\"en\\\"},\\\"translations\\\":{\\\"validation_messages.valid_email\\\":\\\"You must enter a valid email.\\\",\\\"validation_messages.password\\\":\\\"You must enter a password.\\\",\\\"validation_messages.password_match\\\":\\\"Your passwords do not match.\\\",\\\"validation_messages.invalid_password\\\":\\\"Passwords must be at least 7 characters and contain both alphabetic and numeric characters.\\\",\\\"validation_messages.field_not_blank\\\":\\\" field cannot be blank.\\\",\\\"validation_messages.certificate_amount\\\":\\\"You must enter a gift certificate amount.\\\",\\\"validation_messages.certificate_amount_range\\\":\\\"You must enter a certificate amount between [MIN] and [MAX]\\\",\\\"validation_messages.price_min_evaluation\\\":\\\"Min. price must be less than max. price.\\\",\\\"validation_messages.price_max_evaluation\\\":\\\"Min. price must be less than max. price.\\\",\\\"validation_messages.price_min_not_entered\\\":\\\"Min. price is required.\\\",\\\"validation_messages.price_max_not_entered\\\":\\\"Max. price is required.\\\",\\\"validation_messages.price_invalid_value\\\":\\\"Input must be greater than 0.\\\",\\\"validation_messages.invalid_gift_certificate\\\":\\\"Please enter your valid certificate code.\\\"}}\",\"validationFallbackDictionaryJSON\":\"{\\\"locale\\\":\\\"en\\\",\\\"locales\\\":{\\\"validation_fallback_messages.valid_email\\\":\\\"en\\\",\\\"validation_fallback_messages.password\\\":\\\"en\\\",\\\"validation_fallback_messages.password_match\\\":\\\"en\\\",\\\"validation_fallback_messages.invalid_password\\\":\\\"en\\\",\\\"validation_fallback_messages.field_not_blank\\\":\\\"en\\\",\\\"validation_fallback_messages.certificate_amount\\\":\\\"en\\\",\\\"validation_fallback_messages.certificate_amount_range\\\":\\\"en\\\",\\\"validation_fallback_messages.price_min_evaluation\\\":\\\"en\\\",\\\"validation_fallback_messages.price_max_evaluation\\\":\\\"en\\\",\\\"validation_fallback_messages.price_min_not_entered\\\":\\\"en\\\",\\\"validation_fallback_messages.price_max_not_entered\\\":\\\"en\\\",\\\"validation_fallback_messages.price_invalid_value\\\":\\\"en\\\",\\\"validation_fallback_messages.invalid_gift_certificate\\\":\\\"en\\\"},\\\"translations\\\":{\\\"validation_fallback_messages.valid_email\\\":\\\"You must enter a valid email.\\\",\\\"validation_fallback_messages.password\\\":\\\"You must enter a password.\\\",\\\"validation_fallback_messages.password_match\\\":\\\"Your passwords do not match.\\\",\\\"validation_fallback_messages.invalid_password\\\":\\\"Passwords must be at least 7 characters and contain both alphabetic and numeric characters.\\\",\\\"validation_fallback_messages.field_not_blank\\\":\\\" field cannot be blank.\\\",\\\"validation_fallback_messages.certificate_amount\\\":\\\"You must enter a gift certificate amount.\\\",\\\"validation_fallback_messages.certificate_amount_range\\\":\\\"You must enter a certificate amount between [MIN] and [MAX]\\\",\\\"validation_fallback_messages.price_min_evaluation\\\":\\\"Min. price must be less than max. price.\\\",\\\"validation_fallback_messages.price_max_evaluation\\\":\\\"Min. price must be less than max. price.\\\",\\\"validation_fallback_messages.price_min_not_entered\\\":\\\"Min. price is required.\\\",\\\"validation_fallback_messages.price_max_not_entered\\\":\\\"Max. price is required.\\\",\\\"validation_fallback_messages.price_invalid_value\\\":\\\"Input must be greater than 0.\\\",\\\"validation_fallback_messages.invalid_gift_certificate\\\":\\\"Please enter your valid certificate code.\\\"}}\",\"validationDefaultDictionaryJSON\":\"{\\\"locale\\\":\\\"en\\\",\\\"locales\\\":{\\\"validation_default_messages.val
2873id_email\\\":\\\"en\\\",\\\"validation_default_messages.password\\\":\\\"en\\\",\\\"validation_default_messages.password_match\\\":\\\"en\\\",\\\"validation_default_messages.invalid_password\\\":\\\"en\\\",\\\"validation_default_messages.field_not_blank\\\":\\\"en\\\",\\\"validation_default_messages.certificate_amount\\\":\\\"en\\\",\\\"validation_default_messages.certificate_amount_range\\\":\\\"en\\\",\\\"validation_default_messages.price_min_evaluation\\\":\\\"en\\\",\\\"validation_default_messages.price_max_evaluation\\\":\\\"en\\\",\\\"validation_default_messages.price_min_not_entered\\\":\\\"en\\\",\\\"validation_default_messages.price_max_not_entered\\\":\\\"en\\\",\\\"validation_default_messages.price_invalid_value\\\":\\\"en\\\",\\\"validation_default_messages.invalid_gift_certificate\\\":\\\"en\\\"},\\\"translations\\\":{\\\"validation_default_messages.valid_email\\\":\\\"You must enter a valid email.\\\",\\\"validation_default_messages.password\\\":\\\"You must enter a password.\\\",\\\"validation_default_messages.password_match\\\":\\\"Your passwords do not match.\\\",\\\"validation_default_messages.invalid_password\\\":\\\"Passwords must be at least 7 characters and contain both alphabetic and numeric characters.\\\",\\\"validation_default_messages.field_not_blank\\\":\\\"The field cannot be blank.\\\",\\\"validation_default_messages.certificate_amount\\\":\\\"You must enter a gift certificate amount.\\\",\\\"validation_default_messages.certificate_amount_range\\\":\\\"You must enter a certificate amount between [MIN] and [MAX]\\\",\\\"validation_default_messages.price_min_evaluation\\\":\\\"Min. price must be less than max. price.\\\",\\\"validation_default_messages.price_max_evaluation\\\":\\\"Min. price must be less than max. price.\\\",\\\"validation_default_messages.price_min_not_entered\\\":\\\"Min. price is required.\\\",\\\"validation_default_messages.price_max_not_entered\\\":\\\"Max. price is required.\\\",\\\"validation_default_messages.price_invalid_value\\\":\\\"Input must be greater than 0.\\\",\\\"validation_default_messages.invalid_gift_certificate\\\":\\\"Please enter your valid certificate code.\\\"}}\",\"carouselArrowAndDotAriaLabel\":\"Go to slide [SLIDE_NUMBER] of [SLIDES_QUANTITY]\",\"carouselActiveDotAriaLabel\":\"active\",\"carouselContentAnnounceMessage\":\"You are currently on slide [SLIDE_NUMBER] of [SLIDES_QUANTITY]\",\"useValidEmail\":\"Please use a valid email address, such as [email protected].\",\"enterPass\":\"You must enter a password.\"}").load(); 2874 } 2875 </script>
2875 2876
2876<script async defer src="https://cdn11.bigcommerce.com/s-f1hwux/stencil/dcf6e980-9b50-013f-9cb6-7a1948be6ce7/e/d05145d0-97fa-013f-e7cd-7608931f64d7/dist/theme-bundle.main.js" onload="onThemeBundleMain()"></script>
2876 2877 2878
2878<script> 2879 (function() { 2880 'use strict'; 2881 2882 function faxonInit() { 2883 2884 // 1. SCROLL REVEAL 2885 // Elements are hidden by CSS (.reveal) only while html.js is set, and shown 2886 // again by adding .is-revealed. Two safeguards matter here: 2887 // threshold: 0 -- an element taller than the viewport can never reach a 2888 // fractional threshold, which previously left long articles permanently 2889 // invisible on mobile. Firing on the first intersecting pixel is 2890 // independent of element height. 2891 // failsafe -- if the observer never fires for any reason, everything is 2892 // revealed after REVEAL_FAILSAFE_MS, so content cannot stay hidden. 2893 var REVEAL_FAILSAFE_MS = 3000; 2894 var prefersReducedMotion = window.matchMedia 2895 && window.matchMedia('(prefers-reduced-motion: reduce)').matches; 2896 2897 if ('IntersectionObserver' in window && !prefersReducedMotion) { 2898 var targets = document.querySelectorAll( 2899 '.productGrid .product, .card, .footer-info-col, .featured-categories > div' 2900 ); 2901 targets.forEach(function(el, i) { 2902 el.classList.add('reveal'); 2903 var mod = i % 4; 2904 if (mod === 1) el.classList.add('reveal-delay-1'); 2905 if (mod === 2) el.classList.add('reveal-delay-2'); 2906 if (mod === 3) el.classList.add('reveal-delay-3'); 2907 }); 2908 var observer = new IntersectionObserver(function(entries) { 2909 entries.forEach(function(entry) { 2910 if (entry.isIntersecting) { 2911 entry.target.classList.add('is-revealed'); 2912 observer.unobserve(entry.target); 2913 } 2914 }); 2915 }, { threshold: 0, rootMargin: '0px 0px -40px 0px' }); 2916 targets.forEach(function(el) { observer.observe(el); }); 2917 2918 setTimeout(function() { 2919 targets.forEach(function(el) { 2920 if (!el.classList.contains('is-revealed')) { 2921 el.classList.add('is-revealed'); 2922 observer.unobserve(el); 2923 } 2924 }); 2925 }, REVEAL_FAILSAFE_MS); 2926 } 2927 2928 // 2. HEADER SHRINK ON SCROLL 2929 var header = document.querySelector('.header'); 2930 if (header) { 2931 window.addEventListener('scroll', function() { 2932 if (window.pageYOffset > 80) { 2933 header.classList.add('header--scrolled'); 2934 } else { 2935 header.classList.remove('header--scrolled'); 2936 } 2937 }, { passive: true }); 2938 } 2939 2940 // 3. SMOOTH ANCHOR SCROLLING 2941 document.addEventListener('click', function(e) { 2942 var link = e.target.closest('a[href^="#"]'); 2943 if (!link) return; 2944 var id = link.getAttribute('href'); 2945 if (id === '#') return; 2946 var target = document.querySelector(id); 2947 if (target) { 2948 e.preventDefault(); 2949 target.scrollIntoView({ behavior: 'smooth', block: 'start' }); 2950 } 2951 }); 2952 2953 } 2954 2955 if (document.readyState === 'loading') { 2956 document.addEventListener('DOMContentLoaded', faxonInit); 2957 } else { 2958 faxonInit(); 2959 } 2960 2961 })(); 2962 </script>
2962 2963 2964
2964<script type="text/javascript" src="https://cdn11.bigcommerce.com/shared/js/csrf-protection-header-5eeddd5de78d98d146ef4fd71b2aedce4161903e.js"></script>
vendor: 1 bytes, line 2964
2964
2965<script src='https://bigcommerce.livechatinc.com/api/v2/script/419b73bb-2ca1-4dc7-84f3-796c2e3b960f/widget.js' async></script>
2965<script src='https://bigcommerce.route.com/checkout/routeimg.js' ></script>
2965<script src='https://bigcommerce.route.com/checkout/listener.js?s=f1hwux' ></script>
2965<script src='https://bigcommerce.route.com/checkout/routeimg.js' ></script>
2965<script src='https://bigcommerce.route.com/checkout/listener.js?s=f1hwux' ></script>
2965<script src='https://bigcommerce.route.com/checkout/routeimg.js' ></script>
2965<script src='https://app.easyupsellapp.com/data/upsellassets/524/0307d83c7820d925b38f.js' async ></script>
2965<script>!function(){var a={id:"1678882877705",title:"Are you 18+?",description:"You must be 18 or older to visit this website.",closeText:"I'm 18 or Older",delaySeconds:0,showOnlyOnce:!0,alwaysCart:!1,alwaysCheckout:!1,alwaysConfirmation:!1,paths:[],active:!0,start:null,end:null,lastModified:"2023-03-15T12:21:17.705Z",css:"\r\n\r\n\r\n#a51-modal {\r\n display: none;\r\n position: fixed;\r\n z-index: 100000;\r\n padding-top: 0px;\r\n left: 0;\r\n top: 0;\r\n width: 100%;\r\n height: 100%;\r\n overflow: auto;\r\n margin: 0;\r\n background-color: rgba(0, 0, 0, 0.5);\r\n}\r\n\r\n#a51-modal-wrapper {\r\n display: flex;\r\n height: 100%;\r\n width: 100%;\r\n}\r\n\r\n\r\n#a51-modal-content {\r\n transition: opacity .15s ease-in;\r\n text-align: center;\r\n position: relative;\r\n border-radius: 10px;\r\n background-color: rgba(255,255,255,255);\r\n border: 3px solid rgba(118,30,28,1);\r\n margin: auto auto auto auto;\r\n padding: 20px;\r\n width: 40%;\r\n color: #040404;\r\n font-size: 18px;\r\n font-weight: 500;\r\n}\r\n\r\n.a51-modal-content-hidden {\r\n opacity: 0;\r\n}\r\n\r\n.a51-modal-content-show {\r\n opacity: 1;\r\n}\r\n\r\n@media(max-width: 1500px) {\r\n #a51-modal-content {\r\n width: 50%;\r\n }\r\n}\r\n\r\n@media(max-width: 1200px) {\r\n #a51-modal-content {\r\n width: 70%;\r\n }\r\n}\r\n\r\n@media(max-width: 800px) {\r\n #a51-modal-content {\r\n width: 80%;\r\n }\r\n}\r\n\r\n@media(max-width: 550px) {\r\n #a51-modal-content {\r\n width: 95%;\r\n }\r\n}\r\n\r\n#a51-modal-content .a51-modal-title {\r\n display:block;\r\n font-size: 20px;\r\n padding:10px 0;\r\n margin: 0;\r\n color: rgba(118,30,28,1);\r\n font-size: 20px !important;\r\n line-height: calc(20px + 5px) !important;\r\n font-family: inherit !important;\r\n font-style: normal;\r\n font-weight: normal;\r\n}\r\n\r\n#a51-modal-content .a51-modal-text {\r\n display:block;\r\n font-size: 16px;\r\n padding:10px 0;\r\n margin: 0;\r\n color: rgba(0,21,39,1);\r\n font-size: 16px !important;\r\n line-height: calc(16px + 5px) !important;\r\n font-family: inherit !important;\r\n font-style: normal;\r\n font-weight: normal;\r\n}\r\n\r\n#a51-modal-close-button {\r\n display:inline-block;\r\n padding: 10px 20px !important;\r\n margin:20px 0 0 0 !important;\r\n cursor: pointer !important;\r\n border: 0 !important;\r\n background-color: rgba(118,30,28,1) !important;\r\n border-radius: 10px !important;\r\n color: rgba(255,255,255,255) !important;\r\n font-family: inherit !important;\r\n font-size: 16px !important;\r\n line-height: 16px !important;\r\n font-style: normal;\r\n font-weight: normal;\r\n}\r\n\r\n#a51-modal-close {\r\n display: block;\r\n position: absolute;\r\n top: 8px;\r\n right: 16px;\r\n width: 18px;\r\n height: 18px;\r\n opacity: 0.75;\r\n cursor: pointer;\r\n}\r\n\r\n#a51-modal-close:hover {\r\n opacity: 1;\r\n}\r\n\r\n#a51-modal-close:before, #a51-modal-close:after {\r\n position: absolute;\r\n left: 15px;\r\n content: ' ';\r\n height: 18px;\r\n width: 3px;\r\n background-color: #333;\r\n}\r\n\r\n#a51-modal-close:before {\r\n transform: rotate(45deg);\r\n}\r\n#a51-modal-close:after {\r\n transform: rotate(-45deg);\r\n}\r\n "};if(a&&a.active&&!(0<a.paths.length&&-1==a.paths.indexOf(document.location.pathname.toLowerCase()))){const l="a51-popup-id";var n=document.createElement("style"),i=(n.id="a51-popup-styles",n.appendChild(document.createTextNode(a.css)),document.getElementsByTagName("head")[0].appendChild(n),document.createElement("div"));i.id="a51-modal",i.innerHTML=`<div id='a51-modal-wrapper'><div id='a51-modal-content' class='a51-modal-content-hidden'><span id='a51-modal-close'></span><div class='a51-modal-title'>${a.title}</div><div class='a51-modal-text'>${a.description}</div><button id='a51-modal-close-button'>${a.closeText}</button></div></div>`,window.document.body.appendChild(i),setTimeout(function(){var n=function(n){var r=n+"=";let t=decodeURIComponent(document.cookie);var o=t.split(";");for(let t=0;t<o.length;t++){let n=o[t];for(;" "==n.charAt(0);)n=n.substring(1);if(0==n.indexOf(r))return n.substring(r.length,n.length)}return null}(l),t="/cart.php"==document.location.pathname.toLowerCase(),r="/checkout"==document.location.pathname.toLowerCase(),o="/checkout/order-confirmation"==document.location.pathname.toLowerCase(),n=null!=n&&n==a.id;if(!a.showOnlyOnce||a.showOnlyOnce&&!n||a.showOnlyOnce&&a.alwaysCart&&t||a.showOnlyOnce&&a.alwaysCheckout&&r||a.showOnlyOnce&&a.alwaysConfirmation&&o){i.style.display="block",setTimeout(function(){document.getElementById("a51-modal-content").className="a51-modal-content-show"},1);{n=l;t=a.id;r=void 0;const e=new Date;e.setTime(e.getTime()+24*r*60*60*1e3),r=r?"expires="+e.toUTCString():"",document.cookie=n+"="+t+";"+r+";path=/"}document.getElementById("a51-modal-close").addEventListener("click",function(){i.style.display="none"}),document.getElementById("a51-modal-close-button").addEventListener("click",function(){i.style.display="none"})}},1e3*a.delaySeconds)}}();</script>
2965<script type="text/javascript"> 2966 var _AvantMetrics = _AvantMetrics || []; 2967 (async function() { 2968 if ('') { 2969 await buildAvMetrics(); 2970 } 2971 var avm = document.createElement('script'); 2972 avm.type = 'text/javascript'; avm.async = true; 2973 avm.src = ('https:' == document.location.protocol ? 'https://' : 'http://') + 'cdn.avmws.com/1014110/'; 2974 var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(avm, s); 2975 console.log(_AvantMetrics); 2976 })(); 2977 2978 async function setOrderData() { 2979 var order = await getData('/api/storefront/order/'); 2980 return order; 2981 } 2982 2983 async function getData(url = '') { 2984 var res = ''; 2985 if(url !== ''){ 2986 const response = await fetch(url, { 2987 credentials: 'include' 2988 }); 2989 res = response.json(); 2990 } 2991 return res; 2992 } 2993 2994 async function buildAvMetrics() { 2995 let orderData = await setOrderData(); 2996 window._AvantMetrics.push(['order', { order_id: orderData.orderId, amount: orderData.orderAmount - orderData.taxTotal - orderData.shippingCostTotal, state: orderData.billingAddress.stateOrProvinceCode, country: orderData.billingAddress.countryCode, ecc: orderData.coupons.length > 0 ? orderData.coupons[0].code: '', tax: orderData.taxTotal, currency: orderData.currency.code, new_customer: orderData.customerId ? 'N' : 'Y' }]); 2997 for (line of orderData.lineItems.physicalItems) { 2998 window._AvantMetrics.push(['item', { order_id: orderData.orderId, variant_sku: line.sku, price: line.salePrice, qty: line.quantity }]); 2999 } 3000 for (line of orderData.lineItems.digitalItems) { 3001 window._AvantMetrics.push(['item', { order_id: orderData.orderId, variant_sku: line.sku, price: line.salePrice, qty: line.quantity }]); 3002 } 3003 } 3004</script>
3004<script> 3005document.addEventListener('DOMContentLoaded', function () { 3006 const isSuppressor = window.location.href.includes("/suppressors/"); 3007 if (!isSuppressor) return; 3008 3009 const form = document.querySelector('form[action*="cart.php"]'); 3010 if (!form) return; 3011 const addToCartButton = form.querySelector('[type="submit"]'); 3012 3013 const complianceBlock = document.createElement('div'); 3014 complianceBlock.style = 'border: 2px solid #cc0000; padding: 15px; margin: 20px 0; background: #fff3f3;'; 3015 complianceBlock.innerHTML = ` 3016 <h3 style="color: #cc0000;">â ï¸ Suppressor Transfer Required</h3> 3017 <p>To purchase this suppressor, you must transfer it to a valid SOT dealer.</p> 3018 3019 <label style="display:block; margin-top:10px;"> 3020 <input type="checkbox" id="ack-suppressor"> I acknowledge that I must transfer this suppressor to a valid SOT. 3021 </label> 3022 3023 <div style="margin-top: 1rem;"> 3024 <label><input type="radio" name="sot-option" value="now"> I want to provide my SOT information now</label> 3025 <div id="sot-fields" style="display: none; margin-top: 10px;"> 3026 <label>Business Name <input type="text" id="sotBusiness"></label><br> 3027 <label>Business Address <input type="text" id="sotAddress"></label><br> 3028 <label>SOT Number <input type="text" id="sotNumber"></label> 3029 </div> 3030 3031 <label style="display:block; margin-top:10px;"> 3032 <input type="radio" name="sot-option" value="later"> I will email my SOT info to <strong>[email protected]</strong> within 24 hours. 3033 </label> 3034 </div> 3035 3036 <p id="suppressor-warning" style="color: red; font-weight: bold; display: none; margin-top: 15px;"> 3037 Please complete the suppressor acknowledgment and SOT info before adding to cart. 3038 </p> 3039 3040 <input type="hidden" name="ProductFields[SOT Info]" id="hidden-sot-field" value=""> 3041 `; 3042 3043 form.insertBefore(complianceBlock, addToCartButton); 3044 3045 document.querySelectorAll('input[name="sot-option"]').forEach(el => { 3046 el.addEventListener('change', function () { 3047 document.getElementById('sot-fields').style.display = this.value === 'now' ? 'block' : 'none'; 3048 }); 3049 }); 3050 3051 form.addEventListener('submit', function (e) { 3052 const ack = document.getElementById('ack-suppressor').checked; 3053 const option = document.querySelector('input[name="sot-option"]:checked')?.value; 3054 const warning = document.getElementById('suppressor-warning'); 3055 const hiddenInput = document.getElementById('hidden-sot-field'); 3056 3057 let valid = false; 3058 let sotMessage = '[SOT INFO]\n'; 3059 3060 if (ack && option === 'later') { 3061 valid = true; 3062 sotMessage += 'Customer opted to email SOT to [email protected] within 24 hours.'; 3063 } 3064 3065 if (ack && option === 'now') { 3066 const business = document.getElementById('sotBusiness').value.trim(); 3067 const address = document.getElementById('sotAddress').value.trim(); 3068 const number = document.getElementById('sotNumber').value.trim(); 3069 if (business && address && number) { 3070 valid = true; 3071 sotMessage += `Business Name: ${business}\n`; 3072 sotMessage += `Business Address: ${address}\n`; 3073 sotMessage += `SOT Number: ${number}`; 3074 } 3075 } 3076 3077 if (!valid) { 3078 e.preventDefault(); 3079 warning.style.display = 'block'; 3080 window.scrollTo({ top: form.offsetTop - 100, behavior: 'smooth' }); 3081 } else { 3082 warning.style.display = 'none'; 3083 hiddenInput.value = sotMessage; 3084 } 3085 }); 3086}); 3087</script>
vendor: 1 bytes, line 3087
3087
3088<script> 3089(function() { 3090 'use strict'; 3091 3092 var faqItems = document.querySelectorAll('.fx-faq'); 3093 if (!faqItems.length) return; 3094 3095 var mainEntity = []; 3096 3097 faqItems.forEach(function(faq) { 3098 var summaryEl = faq.querySelector('summary'); 3099 var bodyEl = faq.querySelector('.fx-faq-body'); 3100 if (!summaryEl || !bodyEl) return; 3101 3102 var summaryClone = summaryEl.cloneNode(true); 3103 var arrowSpan = summaryClone.querySelector('.fx-faq-arrow'); 3104 if (arrowSpan) arrowSpan.remove(); 3105 3106 var questionText = summaryClone.textContent.replace(/\s+/g, ' ').trim(); 3107 var answerText = (bodyEl.innerText || bodyEl.textContent || '') 3108 .replace(/\s+/g, ' ').trim(); 3109 3110 if (questionText && answerText) { 3111 mainEntity.push({ 3112 "@type": "Question", 3113 "name": questionText, 3114 "acceptedAnswer": { 3115 "@type": "Answer", 3116 "text": answerText 3117 } 3118 }); 3119 } 3120 }); 3121 3122 if (!mainEntity.length) return; 3123 3124 // Do not add a second FAQPage if the page already carries one. 3125 var existing = document.querySelectorAll('script[type="application/ld+json"]'); 3126 for (var i = 0; i < existing.length; i++) { 3127 try { 3128 if (JSON.parse(existing[i].textContent)['@type'] === 'FAQPage') return; 3129 } catch (e) {} 3130 } 3131 3132 try { 3133 var script = document.createElement('script'); 3134 script.type = 'application/ld+json'; 3135 script.textContent = JSON.stringify({ 3136 "@context": "https://schema.org", 3137 "@type": "FAQPage", 3138 "mainEntity": mainEntity 3139 }, null, 2); 3140 document.head.appendChild(script); 3141 } catch (e) { 3142 console.warn('[Faxon FAQ Schema] Inject failed:', e); 3143 } 3144})(); 3145</script>
3145<script> 3146(function(){ 3147 var DELAY=60000; 3148 var URL="https://faxonfirearms.com/other-brands/"; 3149 var LOGO="https://cdn11.bigcommerce.com/s-f1hwux/images/stencil/original/image-manager/260522-faxon-warehouse-logo.png?t=1779483382"; 3150 var KEY="fxwSeen"; 3151 try{ if(sessionStorage.getItem(KEY)==="1") return; }catch(e){} 3152 3153 function show(){ 3154 var css="#fxwOv{position:fixed;inset:0;z-index:2147483000;display:flex;align-items:center;justify-content:center;background:rgba(0,8,20,.72);opacity:0;visibility:hidden;transition:opacity .35s,visibility .35s;font-family:'Bebas Neue','Oswald','Arial Narrow',Arial,sans-serif}#fxwOv.on{opacity:1;visibility:visible}#fxwBx{position:relative;width:90%;max-width:480px;background:#001734;border:3px solid #832729;border-radius:8px;box-shadow:0 24px 60px rgba(0,0,0,.55);text-align:center;padding:38px 30px 34px;box-sizing:border-box;transform:translateY(18px) scale(.97);transition:transform .35s cubic-bezier(.2,.8,.25,1);overflow:hidden}#fxwOv.on #fxwBx{transform:none}#fxwBx:before{content:'';position:absolute;top:0;left:0;right:0;height:6px;background:#832729}#fxwX{position:absolute;top:10px;right:14px;width:34px;height:34px;line-height:32px;background:none;border:0;cursor:pointer;color:#9fb0c4;font-size:26px;font-family:Arial;padding:0}#fxwX:hover{color:#fff}#fxwBx img{display:block;margin:6px auto 18px;max-width:260px;width:78%;height:auto}.fxwE{color:#832729;letter-spacing:2px;font-size:15px;margin:0 0 6px;text-transform:uppercase;font-weight:700}.fxwH{color:#fff;margin:0 0 12px;font-size:30px;line-height:1.05;letter-spacing:1px;text-transform:uppercase}.fxwC{color:#cdd6e0;margin:0 auto 24px;max-width:380px;font-family:'Calisto MT',Georgia,serif;font-size:16px;line-height:1.45}.fxwB{display:inline-block;cursor:pointer;background:#832729;color:#fff;text-decoration:none;border:0;padding:14px 38px;border-radius:4px;font-size:20px;letter-spacing:2px;text-transform:uppercase;transition:background .2s}.fxwB:hover{background:#9c2f31}.fxwD{display:block;margin:16px auto 0;background:none;border:0;cursor:pointer;color:#7e8da0;font-size:12px;letter-spacing:1px;text-transform:uppercase;text-decoration:underline}.fxwD:hover{color:#b9c4d2}@media(max-width:480px){#fxwBx{padding:32px 22px 28px}.fxwH{font-size:25px}.fxwC{font-size:15px}}"; 3155 var s=document.createElement("style"); 3156 s.appendChild(document.createTextNode(css)); 3157 document.head.appendChild(s); 3158 3159 var ov=document.createElement("div"); 3160 ov.id="fxwOv"; 3161 ov.setAttribute("role","dialog"); 3162 ov.setAttribute("aria-modal","true"); 3163 ov.innerHTML='<div id="fxwBx"><button id="fxwX" aria-label="Close">×</button>' 3164 +'<a href="'+URL+'" aria-label="Shop the Faxon Warehouse"><img src="'+LOGO+'" alt="Faxon Warehouse"></a>' 3165 +'<p class="fxwE">Now Open</p>' 3166 +'<h2 class="fxwH">More Than Just Faxon</h2>' 3167 +'<p class="fxwC">The Faxon Warehouse is here. Shop premium parts and gear from more of your favorite brands — all in one place at FaxonFirearms.com.</p>' 3168 +'<a href="'+URL+'" class="fxwB">Shop the Warehouse</a>' 3169 +'<button class="fxwD">No thanks, keep browsing</button></div>'; 3170 document.body.appendChild(ov); 3171 3172 function close(){ 3173 ov.classList.remove("on"); 3174 document.removeEventListener("keydown",onKey); 3175 setTimeout(function(){ if(ov&&ov.parentNode) ov.parentNode.removeChild(ov); },400); 3176 } 3177 function onKey(e){ if(e.keyCode===27) close(); } 3178 3179 ov.querySelector("#fxwX").addEventListener("click",close); 3180 ov.querySelector(".fxwD").addEventListener("click",close); 3181 ov.addEventListener("click",function(e){ if(e.target===ov) close(); }); 3182 document.addEventListener("keydown",onKey); 3183 3184 try{ sessionStorage.setItem(KEY,"1"); }catch(e){} 3185 void ov.offsetWidth; 3186 ov.classList.add("on"); 3187 } 3188 3189 function start(){ setTimeout(show,DELAY); } 3190 if(document.readyState==="loading"){ document.addEventListener("DOMContentLoaded",start); } 3191 else{ start(); } 3192})(); 3193</script>
3193<script> 3194(function () { 3195 'use strict'; 3196 3197 var TARGET_SKU = 'HEADSPACEMATCH'; 3198 var SESSION_KEY = 'hm-ack-value'; // stores the full ack text, not just '1' 3199 var MODAL_ID = 'hm-ack-modal'; 3200 var ACK_FIELD_ID = 'field_46'; // BC Storefront API uses "field_N" prefix, not bare integer 3201 3202 var isCart = /^\/cart/i.test(window.location.pathname); 3203 var isCheckout = /^\/checkout/i.test(window.location.pathname); 3204 3205 if (!isCart && !isCheckout) return; 3206 3207 // ââ Check whether HEADSPACEMATCH is in the cart ââââââââââââââââââââââââââââ 3208 function cartHasSku() { 3209 return fetch('/api/storefront/carts', { credentials: 'same-origin' }) 3210 .then(function (r) { return r.json(); }) 3211 .then(function (carts) { 3212 if (!carts || !carts[0]) return false; 3213 var items = (carts[0].lineItems && carts[0].lineItems.physicalItems) || []; 3214 return items.some(function (item) { 3215 return item.sku && item.sku.toUpperCase() === TARGET_SKU; 3216 }); 3217 }); 3218 } 3219 3220 // ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ 3221 // CART PAGE â checkbox above "Proceed to Checkout" button 3222 // ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ 3223 function initCart() { 3224 var NOTICE_ID = 'hm-ack-wrapper'; 3225 var CHECKBOX_ID = 'hm-ack-check'; 3226 3227 function findCheckoutBtn() { 3228 return ( 3229 document.querySelector('[data-cart-checkout]') || 3230 document.querySelector('a[href*="/checkout"].button--primary') || 3231 document.querySelector('.cart-actions .button--primary') || 3232 Array.from(document.querySelectorAll('a, button')).find(function (el) { 3233 return /proceed to checkout/i.test(el.textContent.trim()); 3234 }) 3235 ); 3236 } 3237 3238 function inject(btn) { 3239 if (document.getElementById(NOTICE_ID)) return; 3240 3241 function lock() { 3242 if (btn.tagName === 'A') { 3243 btn.setAttribute('data-hm-href', btn.getAttribute('href') || ''); 3244 btn.removeAttribute('href'); 3245 btn.style.cssText += ';cursor:not-allowed;opacity:0.5;pointer-events:auto;'; 3246 } else { 3247 btn.disabled = true; 3248 btn.style.opacity = '0.5'; 3249 btn.style.cursor = 'not-allowed'; 3250 } 3251 } 3252 3253 function unlock() { 3254 if (btn.tagName === 'A') { 3255 btn.setAttribute('href', btn.getAttribute('data-hm-href') || '/checkout'); 3256 btn.style.cursor = ''; 3257 btn.style.opacity = ''; 3258 } else { 3259 btn.disabled = false; 3260 btn.style.opacity = ''; 3261 btn.style.cursor = ''; 3262 } 3263 } 3264 3265 lock(); 3266 3267 var notice = document.createElement('div'); 3268 notice.id = NOTICE_ID; 3269 notice.innerHTML = 3270 '<style>' + 3271 '#' + NOTICE_ID + '{margin-bottom:1rem;padding:1rem 1.25rem;border:2px solid #792d2c;border-radius:4px;background:#fff8f8;}' + 3272 '#' + NOTICE_ID + ' label{display:flex;align-items:flex-start;gap:0.75rem;cursor:pointer;}' + 3273 '#' + NOTICE_ID + ' input[type=checkbox]{margin-top:3px;flex-shrink:0;width:1.1rem;height:1.1rem;cursor:pointer;accent-color:#792d2c;}' + 3274 '#' + NOTICE_ID + ' .hm-text{font-size:0.9rem;line-height:1.5;}' + 3275 '#' + NOTICE_ID + ' .hm-text strong{display:block;margin-bottom:0.25rem;}' + 3276 '</style>' + 3277 '<label>' + 3278 '<input type="checkbox" id="' + CHECKBOX_ID + '">' + 3279 '<span class="hm-text">' + 3280 '<strong>All sales of headspace matching services are final.</strong>' + 3281 'I understand that the HEADSPACEMATCH service is non-refundable except in the case of a valid warranty claim. ' + 3282 'By checking this box I agree to these terms and conditions.' + 3283 '</span>' + 3284 '</label>'; 3285 3286 btn.parentNode.insertBefore(notice, btn); 3287 3288 document.getElementById(CHECKBOX_ID).addEventListener('change', function () { 3289 if (this.checked) { unlock(); } else { lock(); } 3290 }); 3291 } 3292 3293 cartHasSku().then(function (hasSku) { 3294 if (!hasSku) return; 3295 var btn = findCheckoutBtn(); 3296 if (btn) { inject(btn); return; } 3297 var obs = new MutationObserver(function () { 3298 var b = findCheckoutBtn(); 3299 if (b) { obs.disconnect(); inject(b); } 3300 }); 3301 obs.observe(document.body, { childList: true, subtree: true }); 3302 }).catch(function (e) { console.error('[HM Ack cart]', e); }); 3303 } 3304 3305 // ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ 3306 // CHECKOUT PAGE â full-screen overlay modal + write to custom field 46 3307 // ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ 3308 function initCheckout() { 3309 3310 // ââ Write acknowledgment to billing address custom field 46 ââââââââââââââ 3311 // Polls every 3 s until the customer has submitted their billing address, 3312 // then writes the timestamped acknowledgment into field 46. 3313 // Continues polling so it re-writes if the customer edits their address. 3314 function startFieldWriter(checkoutId, ackValue) { 3315 function writeField() { 3316 fetch('/api/storefront/checkouts/' + checkoutId, { credentials: 'same-origin' }) 3317 .then(function (r) { return r.json(); }) 3318 .then(function (checkout) { 3319 var addr = checkout.billingAddress; 3320 if (!addr || !addr.id) return; // address not submitted yet 3321 3322 var fields = addr.customFields || []; 3323 3324 // Skip if field already has our exact value 3325 var existing = fields.filter(function (f) { 3326 return String(f.fieldId) === String(ACK_FIELD_ID); 3327 }); 3328 if (existing.length && existing[0].fieldValue === ackValue) return; 3329 3330 // Merge: keep all other custom fields, replace/add our field 3331 var merged = fields 3332 .filter(function (f) { return String(f.fieldId) !== String(ACK_FIELD_ID); }) 3333 .map(function (f) { return { fieldId: String(f.fieldId), fieldValue: f.fieldValue }; }); 3334 merged.push({ fieldId: String(ACK_FIELD_ID), fieldValue: ackValue }); 3335 3336 // PUT the full billing address back with the updated custom field 3337 fetch('/api/storefront/checkouts/' + checkoutId + '/billing-address/' + addr.id, { 3338 method: 'PUT', 3339 credentials: 'same-origin', 3340 headers: { 'Content-Type': 'application/json' }, 3341 body: JSON.stringify({ 3342 firstName: addr.firstName || '', 3343 lastName: addr.lastName || '', 3344 email: addr.email || '', 3345 company: addr.company || '', 3346 address1: addr.address1 || '', 3347 address2: addr.address2 || '', 3348 city: addr.city || '', 3349 stateOrProvinceCode: addr.stateOrProvinceCode || '', 3350 postalCode: addr.postalCode || '', 3351 countryCode: addr.countryCode || '', 3352 phone: addr.phone || '', 3353 customFields: merged 3354 }) 3355 }) 3356 .then(function (r) { 3357 if (!r.ok) { 3358 r.text().then(function (t) { console.error('[HM Ack] PUT failed:', r.status, t); }); 3359 } 3360 }) 3361 .catch(function (e) { console.error('[HM Ack field write]', e); }); 3362 }) 3363 .catch(function (e) { console.error('[HM Ack poll]', e); }); 3364 } 3365 3366 writeField(); // immediate first attempt 3367 var pollTimer = setInterval(writeField, 3000); 3368 setTimeout(function () { clearInterval(pollTimer); }, 1200000); // stop after 20 min 3369 } 3370 3371 // Helper: get cart ID then start field writer 3372 function beginWriting(ackValue) { 3373 fetch('/api/storefront/carts', { credentials: 'same-origin' }) 3374 .then(function (r) { return r.json(); }) 3375 .then(function (carts) { 3376 var cartId = carts && carts[0] && carts[0].id; 3377 if (cartId) startFieldWriter(cartId, ackValue); 3378 }) 3379 .catch(function (e) { console.error('[HM Ack beginWriting]', e); }); 3380 } 3381 3382 // ââ If already acknowledged this session, restart field writer immediately â 3383 // (covers page refreshes and step-to-step navigation within checkout) 3384 var storedAck = sessionStorage.getItem(SESSION_KEY); 3385 if (storedAck) { 3386 cartHasSku().then(function (hasSku) { 3387 if (hasSku) beginWriting(storedAck); 3388 }); 3389 return; // modal already shown â no need to show again 3390 } 3391 3392 // ââ First visit: show modal ââââââââââââââââââââââââââââââââââââââââââââââââ 3393 function showModal() { 3394 if (document.getElementById(MODAL_ID)) return; 3395 3396 var modal = document.createElement('div'); 3397 modal.id = MODAL_ID; 3398 modal.innerHTML = 3399 '<style>' + 3400 '#' + MODAL_ID + '{' + 3401 'position:fixed;top:0;left:0;width:100%;height:100%;' + 3402 'background:rgba(0,0,0,0.82);z-index:2147483647;' + 3403 'display:flex;align-items:center;justify-content:center;font-family:inherit;' + 3404 '}' + 3405 '#hm-ack-box{background:#fff;border-radius:6px;padding:2rem 2.25rem;max-width:520px;width:90%;box-shadow:0 8px 32px rgba(0,0,0,0.4);}' + 3406 '#hm-ack-box h2{margin:0 0 0.75rem;font-size:1.1rem;color:#792d2c;text-transform:uppercase;letter-spacing:0.04em;}' + 3407 '#hm-ack-box p{margin:0 0 1.25rem;font-size:0.9rem;line-height:1.6;color:#333;}' + 3408 '#hm-ack-label{display:flex;align-items:flex-start;gap:0.75rem;cursor:pointer;margin-bottom:1.5rem;}' + 3409 '#hm-ack-label input{margin-top:3px;flex-shrink:0;width:1.15rem;height:1.15rem;accent-color:#792d2c;cursor:pointer;}' + 3410 '#hm-ack-label span{font-size:0.88rem;line-height:1.5;color:#222;}' + 3411 '#hm-ack-confirm{display:block;width:100%;padding:0.7rem;background:#792d2c;color:#fff;border:none;' + 3412 'border-radius:4px;font-size:0.9rem;font-weight:700;letter-spacing:0.04em;text-transform:uppercase;' + 3413 'cursor:pointer;opacity:0.4;pointer-events:none;}' + 3414 '#hm-ack-confirm.enabled{opacity:1;pointer-events:auto;}' + 3415 '#hm-ack-confirm.enabled:hover{background:#5e2221;}' + 3416 '</style>' + 3417 '<div id="hm-ack-box">' + 3418 '<h2>Important Notice â Final Sale</h2>' + 3419 '<p>Your cart contains a <strong>Headspace Matching service (HEADSPACEMATCH)</strong>. ' + 3420 'Please read and acknowledge the following before completing your purchase.</p>' + 3421 '<label id="hm-ack-label">' + 3422 '<input type="checkbox" id="hm-ack-check">' + 3423 '<span>I understand that all sales of the Headspace Matching service are <strong>final</strong>. ' + 3424 'This service is non-refundable except in the case of a valid warranty claim. ' + 3425 'I agree to these terms and wish to proceed with my order.</sp
3425an>' + 3426 '</label>' + 3427 '<button id="hm-ack-confirm" disabled>I Agree — Continue to Checkout</button>' + 3428 '</div>'; 3429 3430 document.body.appendChild(modal); 3431 3432 var checkbox = document.getElementById('hm-ack-check'); 3433 var confirmBtn = document.getElementById('hm-ack-confirm'); 3434 3435 checkbox.addEventListener('change', function () { 3436 if (this.checked) { 3437 confirmBtn.disabled = false; 3438 confirmBtn.classList.add('enabled'); 3439 } else { 3440 confirmBtn.disabled = true; 3441 confirmBtn.classList.remove('enabled'); 3442 } 3443 }); 3444 3445 confirmBtn.addEventListener('click', function () { 3446 var timestamp = new Date().toLocaleString('en-US', { 3447 year: 'numeric', month: 'short', day: 'numeric', 3448 hour: '2-digit', minute: '2-digit', timeZoneName: 'short' 3449 }); 3450 var ackValue = 'Acknowledged ' + timestamp + 3451 ' â All sales of the Headspace Matching service (HEADSPACEMATCH) are final ' + 3452 'and non-refundable except under a valid warranty claim.'; 3453 3454 // Store the full ack text so we can re-use it on page refresh 3455 sessionStorage.setItem(SESSION_KEY, ackValue); 3456 3457 modal.parentNode.removeChild(modal); 3458 beginWriting(ackValue); 3459 }); 3460 } 3461 3462 cartHasSku().then(function (hasSku) { 3463 if (!hasSku) return; 3464 if (document.readyState === 'loading') { 3465 document.addEventListener('DOMContentLoaded', showModal); 3466 } else { 3467 showModal(); 3468 } 3469 }).catch(function (e) { console.error('[HM Ack checkout]', e); }); 3470 } 3471 3472 // ââ Route ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ 3473 if (isCart) initCart(); 3474 if (isCheckout) initCheckout(); 3475 3476}()); 3477</script>
3477 3478
3478<script type="text/javascript"> 3479 <!-- Listrak Analytics â Javascript Framework --> 3480 var biJsHost = (("https:" == document.location.protocol) ? "https://" : "http://"); 3481 (function (d, s, id, tid, vid) { 3482 var js, ljs = d.getElementsByTagName(s)[0]; 3483 if (d.getElementById(id)) return; js = d.createElement(s); js.id = id; 3484 js.src = biJsHost + "cdn.listrakbi.com/scripts/script.js?m=" + tid + "&v=" + vid; 3485 ljs.parentNode.insertBefore(js, ljs); 3486 })(document, 'script', 'ltkSDK', 'dUshsTB2q16g', '1'); 3487 </script>
3487 3488
3488<script type="text/javascript"> 3489 (function(){if(typeof _ltk == 'object'){ltkCode();}else{(function (d) { if (document.addEventListener) document.addEventListener('ltkAsyncListener', d); else { e = document.documentElement; e.ltkAsyncProperty = 0; e.attachEvent('onpropertychange', function (e) { if (e.propertyName == 'ltkAsyncProperty') { d(); } }); } })(function(){ltkCode();});}function ltkCode(){_ltk_util.ready(function(){ 3490 /********** Begin Custom Code **********/ 3491 3492 /** Begin Product Browse **/ 3493 /** End Product Browse **/ 3494 3495 3496 3497 /** Begin Email Capture **/ 3498 3499 _ltk.SCA.CaptureEmail('nl_email') 3500 3501 _ltk.SCA.CaptureEmail('contact_email') 3502 3503 _ltk.SCA.CaptureEmail('email') 3504 3505 _ltk.SCA.CaptureEmail('from_email') 3506 3507 _ltk.SCA.CaptureEmail('FormField_1_input') 3508 3509 /** End Email Capture **/ 3510 3511 3512 3513 /** Begin Cart Activity **/ 3514 var prevItems = []; 3515 3516 function processCart() { 3517 window.stencilUtils.api.cart.getCart({}, function(err, cart){ 3518 if(err) { 3519 return false; 3520 } else if(cart){ 3521 cart = Array.isArray(cart) ? cart[0] : cart; 3522 if (JSON.stringify(cart.lineItems) != JSON.stringify(prevItems)) { 3523 Object.values(cart.lineItems).forEach(arryObj => { //iterate the different product types (physical, digital, etc.) 3524 if(arryObj.length) { 3525 arryObj.forEach(lineItem => { 3526 _ltk.SCA.AddItemWithLinks( 3527 lineItem.sku ? lineItem.sku : (lineItem.productId ? lineItem.productId : lineItem.id), 3528 lineItem.quantity, 3529 lineItem.salePrice.toFixed(2), 3530 lineItem.name, 3531 lineItem.imageUrl, 3532 new URL(lineItem.url).pathname 3533 ); 3534 }); 3535 _ltk.SCA.Submit(); 3536 } 3537 }); 3538 prevItems = cart.lineItems; 3539 } 3540 } else { 3541 _ltk.SCA.ClearCart(); 3542 } 3543 }); 3544 } 3545 3546 //BigCommerce Storefront Cart Hooks 3547 if(typeof window.stencilUtils !== 'undefined') { 3548 3549 if(document.location.pathname.indexOf('cart') >= 0) { 3550 processCart(); 3551 } 3552 window.stencilUtils.hooks.on('cart-item-add-remote', processCart); 3553 window.stencilUtils.hooks.on('cart-item-update-remote', processCart); 3554 window.stencilUtils.hooks.on('cart-item-remove-remote', processCart); 3555 } 3556 /** End Cart Activity **/ 3557 3558 3559 /********** End Custom Code ************/ 3560 })}})(); 3561 </script>
3561 3562
3562<script> 3563 (function () { 3564 if (window.location.pathname !== '/cart.php') return; 3565 if (sessionStorage.getItem('faxon_fl_tax_shown')) return; 3566 3567 fetch('https://ipapi.co/json/') 3568 .then(function (r) { return r.json(); }) 3569 .then(function (geo) { 3570 if (geo && geo.region_code === 'FL') { 3571 showModal(); 3572 sessionStorage.setItem('faxon_fl_tax_shown', '1'); 3573 } 3574 }) 3575 .catch(function () {}); 3576 3577 function showModal() { 3578 var link = document.createElement('link'); 3579 link.rel = 'stylesheet'; 3580 link.href = 'https://fonts.googleapis.com/css2?family=Bebas+Neue&display=swap'; 3581 document.head.appendChild(link); 3582 3583 var overlay = document.createElement('div'); 3584 overlay.id = 'faxon-fl-overlay'; 3585 overlay.style.cssText = 'position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,0.6);z-index:99999;display:flex;align-items:center;justify-content:center;'; 3586 3587 var box = document.createElement('div'); 3588 box.style.cssText = 'background:#fff;border-top:4px solid #832729;border-radius:4px;padding:36px 32px;max-width:500px;width:90%;position:relative;font-family:"Calisto MT",Georgia,serif;'; 3589 3590 box.innerHTML = 3591 '<button id="faxon-fl-close" style="position:absolute;top:14px;right:18px;background:none;border:none;font-size:24px;line-height:1;cursor:pointer;color:#999;font-family:sans-serif;">×</button>' + 3592 '<h2 style="margin:0 0 14px;font-size:26px;font-family:\'Bebas Neue\',sans-serif;font-weight:400;letter-spacing:0.04em;color:#001734;line-height:1.2;">Florida Sales Tax Holiday</h2>' + 3593 '<p style="margin:0 0 14px;color:#333;line-height:1.7;font-size:15px;">We\'re aware of Florida\'s current sales tax holiday and are actively working with our tax software provider to remove sales tax from qualifying orders.</p>' + 3594 '<p style="margin:0 0 24px;color:#333;line-height:1.7;font-size:15px;">If sales tax appears in your cart in the meantime, please try again soon â we are actively working on the issue.</p>' + 3595 '<p style="margin:0;font-size:14px;color:#832729;font-family:\'Bebas Neue\',sans-serif;letter-spacing:0.06em;">Faxon Firearms Team</p>'; 3596 3597 overlay.appendChild(box); 3598 document.body.appendChild(overlay); 3599 3600 function close() { 3601 var el = document.getElementById('faxon-fl-overlay'); 3602 if (el) el.parentNode.removeChild(el); 3603 } 3604 3605 document.getElementById('faxon-fl-close').addEventListener('click', close); 3606 overlay.addEventListener('click', function (e) { if (e.target === overlay) close(); }); 3607 } 3608})(); 3609</script>
3609<script> 3610/* ============================================================================ 3611 * FAXON FOUNDRY - ADD TO BACKORDER 3612 * 3613 * BigCommerce Script Manager entry: 3614 * Name Faxon Foundry - Add to Backorder 3615 * Description Add to Backorder button on out-of-stock PDPs for group 459 3616 * Location Footer 3617 * Pages All Pages (the script guards itself to product pages) 3618 * Script type Script 3619 * Category Essential 3620 * 3621 * Paste this entire file, opening and closing tags included. 3622 * 3623 * NO INBOUND REQUIRED. There is no endpoint. The backorder is written into 3624 * BigCommerce itself as a wishlist on the customer's own account; an on-site 3625 * job reads it back hourly over outbound HTTPS. See DEPLOY.md. 3626 * 3627 * DRY RUN is on: the button, modal, rules and the exact wishlist name all 3628 * work, but nothing is written. Set CFG.dryRun = false to go live. 3629 * 3630 * Storefront token embedded. Channel 1, expires 2027-09-22. 3631 * ========================================================================== */ 3632/* ============================================================================ 3633 * FAXON FOUNDRY â ADD TO BACKORDER 3634 * ---------------------------------------------------------------------------- 3635 * Replaces the hidden Add to Cart control with an "Add to Backorder" button on 3636 * out-of-stock products, for logged-in customers in the Foundry customer group. 3637 * 3638 * Deployment : BigCommerce Script Manager -> footer, All Pages, Store Front. 3639 * (Guards itself to product pages; safe to load everywhere.) 3640 * Phase : Prototype. Fold into the theme (product-view.html) once locked. 3641 * 3642 * Identity, tier pricing, stock state and the dropship flags all come from the 3643 * Storefront GraphQL API using the shopper's own session, so what the customer 3644 * sees is what gets written. Nothing is scraped out of the DOM except as a 3645 * last-resort fallback for the product id. 3646 * ========================================================================== */ 3647(function () { 3648 'use strict'; 3649 3650 /* ------------------------------------------------------------------ CONFIG */ 3651 var CFG = { 3652 /* Customer groups allowed to backorder. 459 = TEST-Foundry-Member. 3653 Add the production Foundry group id here when it exists. */ 3654 groupIds: [459], 3655 3656 /* Storefront API token. Public by design â it ships in page source â and 3657 CORS-locked to the two faxonfirearms.com origins. Read-only. 3658 Minted 2026-09-22 for channel 1, expires 2027-09-22. 3659 Replace with: python3 backend/mint_storefront_token.py */ 3660 storefrontToken: 'eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NiJ9.eyJjaWQiOlsxXSwiY29ycyI6WyJodHRwczovL3d3dy5mYXhvbmZpcmVhcm1zLmNvbSIsImh0dHBzOi8vZmF4b25maXJlYXJtcy5jb20iXSwiZWF0IjoxODIxNjE4NzIwLCJpYXQiOjE3OTAwODI3MjEsImlzcyI6IkJDIiwianRpIjoiYjg4ZGY0ZTAtY2FjZC00MThiLTg0ZDItMTRjNjBhM2JlNDFhIiwic2lkIjo4MzYxMDAsInN1YiI6ImdwMHBsOWZhNjd0cGQ5Z2JycjVtM2tiampoeDNybmsiLCJzdWJfdHlwZSI6MiwidG9rZW5fdHlwZSI6MX0.IEt8m1dldB-MSb1BchLXLKKvj3WiaMHMSRd1kLcAMBcOC97tDldL-gt-zT3DZ3O0-jsmnhegZfbhG-Sf9HDUAQ', 3661 3662 /* DRY RUN â nothing is written anywhere. The button, modal, rules and the 3663 exact wishlist name all work; the name is printed to the console and the 3664 modal says plainly that nothing was filed. Set false to go live. */ 3665 dryRun: false, 3666 3667 /* Faxon allows no inbound traffic, so there is no endpoint to POST to. 3668 The backorder is written into BigCommerce itself, as a wishlist on the 3669 customer's own account â something a logged-in shopper can create 3670 same-origin with no token and no CORS. An on-site job reads it back 3671 hourly over outbound HTTPS and files it. See DEPLOY.md. */ 3672 marker: 'FBO', 3673 3674 /* Measured against the live store 2026-09-22: BigCommerce caps a wishlist 3675 name at 255 characters and truncates ANYTHING longer SILENTLY â no 3676 error, no warning, the tail is simply gone. So the name is clamped 3677 locally and never allowed to reach that ceiling. 3678 3679 Longest eligible SKU in the catalogue is 30 chars 3680 (FX700SA-308-01-7F1BGT75N26N24Q), giving worst-case overhead of 50 and 3681 a 205-character budget. 200 leaves a little headroom. */ 3682 maxNotesLength: 200,
3683 maxNameLength: 255, 3684 3685 /* A product is NOT backorderable if any of these custom fields match. */ 3686 exclusions: [ 3687 { name: 'Fulfillment Source', values: ['Trusted Distribution Partner'] }, 3688 { name: 'SKU Status', values: ['Dropship', 'Discontinued'] } 3689 ], 3690 3691 /* ...nor if it sits anywhere in the FAXON WAREHOUSE tree (category 202, 3692 url /other-brands/) â third-party brands Faxon does not produce. 3693 202 plus every descendant as of 2026-09-22. Regenerate after adding a 3694 brand category: python3 backend/refresh_category_exclusions.py 3695 The receiver resolves descendants live, so a category missing from this 3696 list is still refused server-side; it would just show the button first. */ 3697 excludedCategoryIds: [ 3698 202, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 3699 220, 221, 222, 223, 224, 225, 229, 232, 233 3700 ], 3701 3702 /* Fixed column values. */ 3703 salesman: 'Faxon Foundry', 3704 customerLevel: 'Foundry', 3705 placedBy: 'Foundry Member', 3706 brand: 'Faxon Branded', 3707 3708 poDueDays: 30, 3709 cancellationRiskDays: 30, 3710 3711 debug: false 3712 }; 3713 3714 /* --------------------------------------------------------------- UTILITIES */ 3715 function log() { 3716 if (CFG.debug && window.console) { 3717 console.log.apply(console, ['[FoundryBackorder]'].concat([].slice.call(arguments))); 3718 } 3719 } 3720 3721 function pad(n) { return n < 10 ? '0' + n : String(n); } 3722 3723 /* Local calendar dates, not UTC â a 9pm Eastern backorder must not land on 3724 tomorrow's date. */ 3725 function addDays(date, days) { 3726 var d = new Date(date.getFullYear(), date.getMonth(), date.getDate()); 3727 d.setDate(d.getDate() + days); 3728 return d; 3729 } 3730 function fmtDate(d) { // MM/DD/YYYY 3731 return pad(d.getMonth() + 1) + '/' + pad(d.getDate()) + '/' + d.getFullYear(); 3732 } 3733 function fmtYYMMDD(d) { 3734 return String(d.getFullYear()).slice(2) + pad(d.getMonth() + 1) + pad(d.getDate()); 3735 } 3736 function fmtStamp(d) { // Line ID prefix 3737 return String(d.getFullYear()) + pad(d.getMonth() + 1) + pad(d.getDate()) + '-' + 3738 pad(d.getHours()) + pad(d.getMinutes()) + pad(d.getSeconds()); 3739 } 3740 function rand4() { 3741 var s = '', abc = 'ABCDEFGHJKLMNPQRSTUVWXYZ23456789'; 3742 for (var i = 0; i < 4; i++) s += abc.charAt(Math.floor(Math.random() * abc.length)); 3743 return s; 3744 } 3745 3746 /* PO Reference Number: YYMMDD-LastName, stripped of anything that would 3747 break a CSV cell or a filename. */ 3748 function poReference(date, lastName) { 3749 var clean = String(lastName || '').replace(/[^A-Za-z0-9\-]/g, ''); 3750 return fmtYYMMDD(date) + '-' + (clean || 'Member'); 3751 } 3752 3753 function money(n) { 3754 return (Math.round((Number(n) || 0) * 100) / 100).toFixed(2); 3755 } 3756 3757 /* --------------------------------------------------------------- GRAPHQL */ 3758 function gql(query, variables) { 3759 return fetch('/graphql', { 3760 method: 'POST', 3761 credentials: 'same-origin', // carries the shopper's session 3762 headers: { 3763 'Content-Type': 'application/json', 3764 'Authorization': 'Bearer ' + CFG.storefrontToken 3765 }, 3766 body: JSON.stringify({ query: query, variables: variables || {} }) 3767 }).then(function (r) { 3768 if (!r.ok) throw new Error('GraphQL HTTP ' + r.status); 3769 return r.json(); 3770 }).then(function (j) { 3771 if (j.errors && j.errors.length) throw new Error(j.errors[0].message); 3772 return j.data; 3773 }); 3774 } 3775 3776 var CONTEXT_QUERY = [ 3777 'query FoundryContext($productId: Int!, $fields: [String!]) {', 3778 ' customer { entityId firstName lastName email customerGroupId customerGroupName }', 3779 ' site {', 3780 ' product(entityId: $productId) {', 3781 ' entityId', 3782 ' name', 3783 ' sku', 3784 ' brand { name }', 3785 ' availabilityV2 { status }', 3786 ' inventory { isInStock }', 3787 ' categories(first: 25) { edges { node { entityId name } } }', 3788 ' prices { price { value currencyCode } salePrice { value } }', 3789 ' customFields(names: $fields) { edges { node { name value } } }', 3790 ' }', 3791 ' }', 3792 '}' 3793 ].join('\n'); 3794 3795 /* ---------------------------------------------------------- PAGE CONTEXT */ 3796 /* Verified against the live PDP 2026-09-22. 3797 This theme puts NO page-type class on the body element â 3798 document.body.className is empty â so detection keys off .productView 3799 plus the real cart form. */ 3800 function isProductPage() { 3801 return !!(document.querySelector('.productView') && 3802 document.querySelector('form[data-cart-item-add] input[name="product_id"]')); 3803 } 3804 3805 /* The product id comes ONLY from the add-to-cart form. 3806 Do NOT fall back to [data-product-id]: on this theme those attributes 3807 belong to the related-products carousel cards, so the first match on a PDP 3808 is some other product entirely (observed: 1234 on the page for 177). That 3809 fallback would have silently backordered the wrong SKU. JSON-LD is no help 3810 either â schema.html emits no productID. */ 3811 function getProductId() { 3812 var el = document.querySelector('form[data-cart-item-add] input[name="product_id"]') || 3813 document.querySelector('input[name="product_id"]'); 3814 if (!el || !el.value) return null; 3815 var id = parseInt(el.value, 10); 3816 return (id > 0) ? id : null; 3817 } 3818 3819 function excludedByCategory(product) { 3820 var edges = (product.categories && product.categories.edges) || []; 3821 for (var i = 0; i < edges.length; i++) { 3822 var node = edges[i].node || {}; 3823 if (CFG.excludedCategoryIds.indexOf(node.entityId) !== -1) { 3824 return 'category ' + node.entityId + ' (' + (node.name || '') + ')'; 3825 } 3826 } 3827 return null; 3828 } 3829 3830 function excludedBy(customFields) { 3831 var map = {};
3832 (customFields || []).forEach(function (cf) { 3833 map[String(cf.name).trim().toLowerCase()] = String(cf.value || '').trim().toLowerCase(); 3834 }); 3835 for (var i = 0; i < CFG.exclusions.length; i++) { 3836 var rule = CFG.exclusions[i]; 3837 var actual = map[rule.name.trim().toLowerCase()]; 3838 if (!actual) continue; 3839 for (var k = 0; k < rule.values.length; k++) { 3840 if (actual === rule.values[k].trim().toLowerCase()) { 3841 return rule.name + ' = ' + rule.values[k]; 3842 } 3843 } 3844 } 3845 return null; 3846 } 3847 3848 /* -------------------------------------------------------------- STYLESHEET 3849 Built with createElement rather than written as a style element â 3850 BigCommerce strips style elements out of Web Page content, and this file 3851 is meant to be portable to that surface too. */ 3852 function injectStyles() { 3853 if (document.getElementById('faxon-foundry-bo-css')) return; 3854 var css = [ 3855 '#faxon-foundry-bo{margin:1.5rem 0 0}', 3856 '#faxon-foundry-bo .ffbo-note{font-family:"Crimson Pro",Georgia,serif;font-size:14px;color:#4A4642;margin:0 0 .75rem;line-height:1.5}', 3857 '#faxon-foundry-bo .ffbo-note strong{color:#001734}', 3858 '.ffbo-btn{display:inline-flex;align-items:center;justify-content:center;gap:.5rem;width:100%;padding:14px 24px;border:0;border-radius:4px;background:#832729;color:#fff;font-family:"Bebas Neue","Crimson Pro",sans-serif;font-size:20px;letter-spacing:.06em;text-transform:uppercase;cursor:pointer;transition:background .18s ease}', 3859 '.ffbo-btn:hover,.ffbo-btn:focus{background:#6e1f21}', 3860 '.ffbo-btn:focus-visible{outline:3px solid #001734;outline-offset:2px}', 3861 '.ffbo-btn[disabled]{opacity:.55;cursor:not-allowed}', 3862 '.ffbo-overlay{position:fixed;inset:0;background:rgba(13,13,13,.6);display:flex;align-items:center;justify-content:center;z-index:100000;padding:16px}', 3863 '.ffbo-modal{background:#fff;max-width:520px;width:100%;max-height:90vh;overflow:auto;border-radius:6px;box-shadow:0 18px 50px rgba(0,0,0,.35)}', 3864 '.ffbo-modal__head{background:#001734;color:#fff;padding:18px 24px;display:flex;align-items:center;justify-content:space-between}', 3865 '.ffbo-modal__head h2{margin:0;font-family:"Bebas Neue",sans-serif;font-size:26px;letter-spacing:.04em;font-weight:400}', 3866 '.ffbo-modal__close{background:none;border:0;color:#fff;font-size:28px;line-height:1;cursor:pointer;padding:0 4px}', 3867 '.ffbo-modal__body{padding:24px;font-family:"Crimson Pro",Georgia,serif;color:#4A4642;font-size:15px;line-height:1.55}', 3868 '.ffbo-modal__body p{margin:0 0 1rem}', 3869 '.ffbo-sku{background:#F5F4F1;border-left:3px solid #832729;padding:10px 14px;margin:0 0 1.25rem;font-size:14px}', 3870 '.ffbo-sku b{color:#001734}', 3871 '.ffbo-field{margin:0 0 1.15rem}', 3872 '.ffbo-field label{display:block;font-weight:600;color:#001734;margin:0 0 .35rem;font-size:14px}', 3873 '.ffbo-field input,.ffbo-field textarea{width:100%;padding:10px 12px;border:1px solid #9A9490;border-radius:3px;font-family:inherit;font-size:15px;color:#333;background:#fff;box-sizing:border-box}', 3874 '.ffbo-field input:focus,.ffbo-field textarea:focus{outline:2px solid #832729;outline-offset:0;border-color:#832729}', 3875 '.ffbo-field textarea{min-height:88px;resize:vertical}', 3876 '.ffbo-hint{font-size:13px;color:#9A9490;margin:.3rem 0 0}', 3877 '.ffbo-total{display:flex;justify-content:space-between;border-top:1px solid #E4E1DA;padding-top:.9rem;margin:0 0 1.25rem;font-size:15px}', 3878 '.ffbo-total b{color:#001734;font-size:18px}', 3879 '.ffbo-error{background:#fdecea;border-left:3px solid #F54A3A;padding:10px 14px;margin:0 0 1rem;font-size:14px;color:#8a1d12}', 3880 '.ffbo-actions{display:flex;gap:.75rem}', 3881 '.ffbo-actions .ffbo-btn{flex:1}', 3882 '.ffbo-btn--ghost{background:#fff;color:#001734;border:1px solid #9A9490}', 3883 '.ffbo-btn--ghost:hover,.ffbo-btn--ghost:focus{background:#F0EDE8}', 3884 '.ffbo-success{text-align:center;padding:8px 0 4px}', 3885 '.ffbo-success__mark{width:54px;height:54px;border-radius:50%;background:#832729;color:#fff;display:flex;align-items:center;justify-content:center;font-size:30px;margin:0 auto 1rem}', 3886 '.ffbo-ref{font-family:ui-monospace,Menlo,Consolas,monospace;background:#F5F4F1;padding:6px 10px;border-radius:3px;display:inline-block;color:#001734}', 3887 '@media (prefers-reduced-motion: reduce){.ffbo-btn{transition:none}}' 3888 ].join(''); 3889 var tag = document.createElement('style'); 3890 tag.id = 'faxon-foundry-bo-css'; 3891 tag.appendChild(document.createTextNode(css)); 3892 document.head.appendChild(tag); 3893 } 3894 3895 /* -------------------------------------------------------------- THE MODAL */ 3896 function openModal(ctx) {
3897 var overlay = document.createElement('div'); 3898 overlay.className = 'ffbo-overlay'; 3899 overlay.setAttribute('role', 'dialog'); 3900 overlay.setAttribute('aria-modal', 'true'); 3901 overlay.setAttribute('aria-labelledby', 'ffbo-title'); 3902 3903 overlay.innerHTML = [ 3904 '<div class="ffbo-modal">', 3905 ' <div class="ffbo-modal__head">', 3906 ' <h2 id="ffbo-title">Add to Backorder</h2>', 3907 ' <button type="button" class="ffbo-modal__close" aria-label="Close">×</button>', 3908 ' </div>', 3909 ' <div class="ffbo-modal__body">', 3910 ' <div class="ffbo-body-content">', 3911 ' <p>This item is out of stock. As a Foundry member you can place it on backorder and we will allocate it to you as production comes available.</p>', 3912 ' <div class="ffbo-sku"><b>SKU</b> <span class="ffbo-sku-val"></span><br><b>Your price</b> <span class="ffbo-price-val"></span> each</div>', 3913 ' <div class="ffbo-error" style="display:none" role="alert"></div>', 3914 ' <div class="ffbo-field">', 3915 ' <label for="ffbo-qty">Quantity</label>', 3916 ' <input type="number" id="ffbo-qty" min="1" step="1" value="1" inputmode="numeric">', 3917 ' <p class="ffbo-hint">Whole units, 1 or more.</p>', 3918 ' </div>', 3919 ' <div class="ffbo-field">', 3920 ' <label for="ffbo-notes">Notes <span style="font-weight:400;color:#9A9490">(optional)</span></label>', 3921 ' <textarea id="ffbo-notes" placeholder="Anything we should know about this backorder."></textarea>', 3922 ' <p class="ffbo-hint"><span class="ffbo-count"></span></p>', 3923 ' </div>', 3924 ' <div class="ffbo-total"><span>Backorder total</span><b class="ffbo-total-val"></b></div>', 3925 ' <div class="ffbo-actions">', 3926 ' <button type="button" class="ffbo-btn ffbo-btn--ghost ffbo-cancel">Cancel</button>', 3927 ' <button type="button" class="ffbo-btn ffbo-submit">Place Backorder</button>', 3928 ' </div>', 3929 ' </div>', 3930 ' </div>', 3931 '</div>' 3932 ].join(''); 3933 3934 document.body.appendChild(overlay); 3935 3936 var body = overlay.querySelector('.ffbo-body-content'); 3937 var qtyInput = overlay.querySelector('#ffbo-qty'); 3938 var notes = overlay.querySelector('#ffbo-notes'); 3939 var totalEl = overlay.querySelector('.ffbo-total-val'); 3940 var errEl = overlay.querySelector('.ffbo-error'); 3941 var submit = overlay.querySelector('.ffbo-submit'); 3942 var counter = overlay.querySelector('.ffbo-count'); 3943 3944 overlay.querySelector('.ffbo-sku-val').textContent = ctx.sku; 3945 overlay.querySelector('.ffbo-price-val').textContent = '$' + money(ctx.price); 3946 3947 function currentQty() { 3948 var raw = String(qtyInput.value).trim(); 3949 if (!/^\d+$/.test(raw)) return null; // whole numbers only 3950 var n = parseInt(raw, 10); 3951 return n >= 1 ? n : null; 3952 } 3953 function refreshTotal() { 3954 var q = currentQty(); 3955 totalEl.textContent = q ? '$' + money(q * ctx.price) : 'â'; 3956 } 3957 function showError(msg) { 3958 errEl.textContent = msg; 3959 errEl.style.display = ''; 3960 errEl.scrollIntoView({ block: 'nearest' }); 3961 } 3962 function clearError() { errEl.style.display = 'none'; } 3963 3964 qtyInput.addEventListener('input', function () { clearError(); refreshTotal(); refreshCount(); }); 3965 3966 function refreshCount() { 3967 var budget = notesBudget(ctx, currentQty() || 1); 3968 if (notes.value.length > budget) notes.value = notes.value.slice(0, budget); 3969 notes.setAttribute('maxlength', budget); 3970 if (!counter) return; 3971 var left = budget - notes.value.length; 3972 counter.textContent = left < 40 ? '(' + left + ' characters left)' : ''; 3973 } 3974 notes.addEventListener('input', refreshCount); 3975 refreshTotal(); 3976 refreshCount(); 3977 3978 function close() { 3979 document.removeEventListener('keydown', onKey); 3980 if (overlay.parentNode) overlay.parentNode.removeChild(overlay); 3981 if (ctx.trigger) ctx.trigger.focus(); 3982 } 3983 function onKey(e) { 3984 if (e.key === 'Escape') close(); 3985 if (e.key === 'Tab') { // simple focus trap 3986 var f = overlay.querySelectorAll('button, input, textarea'); 3987 if (!f.length) return; 3988 var first = f[0], last = f[f.length - 1]; 3989 if (e.shiftKey && document.activeElement === first) { e.preventDefault(); last.focus(); } 3990 else if (!e.shiftKey && document.activeElement === last) { e.preventDefault(); first.focus(); } 3991 } 3992 } 3993 document.addEventListener('keydown', onKey); 3994 overlay.addEventListener('mousedown', function (e) { if (e.target === overlay) close(); }); 3995 overlay.querySelector('.ffbo-cancel').addEventListener('click', close); 3996 overlay.querySelector('.ffbo-modal__close').addEventListener('click', close); 3997 3998 submit.addEventListener('click', function () { 3999 var qty = currentQty(); 4000 if (!qty) { showError('Enter a whole number of 1 or more.'); qtyInput.focus(); return; } 4001 clearError(); 4002 submit.disabled = true; 4003 submit.textContent = 'Placingâ¦'; 4004 4005 postBackorder(ctx, qty, notes.value.trim()) 4006 .then(function (res) { 4007 var dry = !!(res && res.dryRun); 4008 body.innerHTML = [ 4009 '<div class="ffbo-success">', 4010 ' <div class="ffbo-success__mark" aria-hidden="true">✓</div>', 4011 dry 4012 ? ' <div class="ffbo-error" style="text-align:left">DRY RUN â nothing was filed and no email was sent. ' + 4013 'The full row is in the browser console. Set CFG.dryRun = false to go live.</div>' + 4014 ' <p><strong>This is what the customer would see.</strong></p>' 4015 : ' <p><strong>Backorder placed.</strong></p>', 4016 ' <p>' + qty + ' × ' + escapeHtml(ctx.sku) + 4017 (dry ? ' would go on the Foundry backorder list, with a confirmation to ' 4018 : ' is on the Foundry backorder list. A confirmation is on its way to ') + 4019 escapeHtml(ctx.customer.email) + '.</p>', 4020 ' <p>Your reference<br><span class="ffbo-ref">' + escapeHtml(res.po_reference || ctx.poRef) + '</span></p>', 4021 ' <div class="ffbo-actions" style="margin-top:1.5rem">', 4022 ' <button type="button" class="ffbo-btn ffbo-cancel">Done</button>', 4023 ' </div>', 4024 '</div>' 4025 ].join(''); 4026 body.querySelector('.ffbo-cancel').addEventListener('click', close); 4027 body.querySelector('.ffbo-cancel').focus(); 4028 }) 4029 .catch(function (err) { 4030 submit.disabled = false;
4031 submit.textContent = 'Place Backorder'; 4032 showError(err && err.message ? err.message : 'Something went wrong. Please try again or contact customer service.'); 4033 }); 4034 }); 4035 4036 qtyInput.focus(); 4037 qtyInput.select(); 4038 } 4039 4040 function escapeHtml(s) { 4041 return String(s == null ? '' : s) 4042 .replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>') 4043 .replace(/"/g, '"').replace(/'/g, '''); 4044 } 4045 4046 /* ----------------------------------------------------------- THE MARKER 4047 Everything the poller needs, in a wishlist name: 4048 4049 FBO 260922 x2 15A58M16NGQ | customer's note 4050 4051 The date is carried here rather than inferred at poll time because 4052 BigCommerce exposes no created-at on a wishlist â without it, a backorder 4053 placed at 11:50pm and polled at 12:05am would be dated the wrong day. 4054 The SKU is carried so the poller can cross-check it against the product 4055 actually attached, and so this script can spot a same-day duplicate. */ 4056 /* How much note fits for THIS product â the SKU is part of the name. */ 4057 function notesBudget(ctx, qty) { 4058 var stem = CFG.marker + ' ' + fmtYYMMDD(new Date()) + ' x' + qty + ' ' + ctx.sku + ' | '; 4059 return Math.max(0, Math.min(CFG.maxNotesLength, CFG.maxNameLength - stem.length)); 4060 } 4061 4062 function buildName(ctx, qty, notes) { 4063 var now = new Date(); 4064 var clean = String(notes || '') 4065 .replace(/[\r\n\t]+/g, ' ') 4066 .replace(/\|/g, '/|') // '|' is the field separator 4067 .trim() 4068 .slice(0, notesBudget(ctx, qty)); 4069 var name = CFG.marker + ' ' + fmtYYMMDD(now) + ' x' + qty + ' ' + ctx.sku; 4070 if (clean) name += ' | ' + clean; 4071 4072 /* Last-resort clamp. BigCommerce truncates silently, so never hand it 4073 anything that could be cut â losing the tail of a note is one thing, 4074 losing the end of the SKU would file the wrong part. */ 4075 if (name.length > CFG.maxNameLength) name = name.slice(0, CFG.maxNameLength); 4076 return name; 4077 } 4078 4079 /* Has this member already backordered this SKU today? The wishlist page is 4080 the only place the storefront exposes them, so read it and look for our 4081 own marker. Best effort â a failure here never blocks a backorder, the 4082 poller checks again server-side. */ 4083 function alreadyBackorderedToday(ctx) { 4084 var prefix = CFG.marker + ' ' + fmtYYMMDD(new Date()) + ' x'; 4085 return fetch('/wishlist.php', { credentials: 'same-origin' }) 4086 .then(function (r) { return r.ok ? r.text() : ''; }) 4087 .then(function (html) { 4088 if (!html) return false; 4089 var doc = new DOMParser().parseFromString(html, 'text/html'); 4090 var text = doc.body ? doc.body.textContent : ''; 4091 var idx = text.indexOf(prefix); 4092 while (idx !== -1) { 4093 /* same day and same SKU */ 4094 if (text.slice(idx, idx + prefix.length + 40).indexOf(ctx.sku) !== -1) return true; 4095 idx = text.indexOf(prefix, idx + 1); 4096 } 4097 return false; 4098 }) 4099 .catch(function () { return false; }); 4100 } 4101 4102 function postBackorder(ctx, qty, notes) { 4103 var name = buildName(ctx, qty, notes); 4104 ctx.poRef = poReference(new Date(), ctx.customer.lastName); 4105 4106 if (CFG.dryRun) { 4107 if (window.console) { 4108 console.log('[FoundryBackorder] DRY RUN â nothing was written.'); 4109 console.log(' wishlist name : ' + name + ' (' + name.length + ' chars)'); 4110 console.log(' product_id : ' + ctx.productId); 4111 console.log(' PO reference : ' + ctx.poRef); 4112 } 4113 return new Promise(function (resolve) { 4114 setTimeout(function () { resolve({ ok: true, dryRun: true, name: name }); }, 400); 4115 }); 4116 } 4117 4118 return alreadyBackorderedToday(ctx).then(function (dupe) { 4119 if (dupe) { 4120 throw new Error('You already placed a backorder for this item today. ' + 4121 'Contact customer service to change the quantity.'); 4122 } 4123 4124 var body = new URLSearchParams(); 4125 body.set('wishlistname', name); 4126 body.set('publicwishlist', '0'); 4127 body.set('submit', 'Save'); 4128 4129 return fetch('/wishlist.php?action=addwishlist&product_id=' + encodeURIComponent(ctx.productId), { 4130 method: 'POST', 4131 credentials: 'same-origin', 4132 headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, 4133 body: body.toString() 4134 }).then(function (r) { 4135 if (!r.ok) throw new Error('Could not record the backorder (' + r.status + ').'); 4136 /* BigCommerce answers with the wishlist page, not JSON. Confirm the 4137 name actually round-tripped rather than trusting the 200 â this is 4138 also what catches a server-side truncation of a long note. */ 4139 return r.text().then(function (html) { 4140 var stem = name.split(' | ')[0]; 4141 if (html.indexOf(stem) === -1) { 4142 throw new Error('The backorder may not have saved. Please contact customer service.'); 4143 } 4144 return { ok: true, name: name }; 4145 }); 4146 }); 4147 }); 4148 } 4149 4150 /* ------------------------------------------------------------------ RENDER */ 4151 function render(ctx) { 4152 injectStyles(); 4153 4154 var anchor = document.getElementById('add-to-cart-wrapper'); 4155 if (!anchor) { 4156 anchor = document.querySelector('.productView-options') || 4157 document.querySelector('.productView-details'); 4158 } 4159 if (!anchor) { log('no anchor element found'); return; } 4160 if (document.getElementById('faxon-foundry-bo')) return; // already rendered 4161 4162 var box = document.createElement('div'); 4163 box.id = 'faxon-foundry-bo'; 4164 box.innerHTML = 4165 '<p class="ffbo-note"><strong>Foundry member benefit.</strong> This item is out of stock, ' + 4166 'but you can place it on backorder and hold your position in the production queue.</p>' + 4167 '<button type="button" class="ffbo-btn">Add to Backorder</button>'; 4168 4169 if (anchor.parentNode) { 4170 anchor.parentNode.insertBefore(box, anchor.nextSibling); 4171 } else { 4172 anchor.appendChild(box); 4173 } 4174 4175 var btn = box.querySelector('.ffbo-btn'); 4176 btn.addEventListener('click', function () { 4177 ctx.trigger = btn; 4178 openModal(ctx); 4179 }); 4180 log('button rendered for', ctx.sku); 4181 } 4182 4183 /* -------------------------------------------------------------------- BOOT */ 4184 function boot() { 4185 if (!isProductPage()) return; 4186 4187 if (CFG.storefrontToken.indexOf('REPLACE') === 0) { 4188 if (window.console) console.warn('[FoundryBackorder] storefrontToken is not configured.'); 4189 return; 4190 } 4191 4192 var productId = getProductId(); 4193 if (!productId) { log('no product id on page'); return; } 4194 4195 var names = CFG.exclusions.map(function (r) { return r.name; }); 4196 4197 gql(CONTEXT_QUERY, { productId: productId, fields: names }) 4198 .then(function (data) { 4199 var customer = data && data.customer; 4200 if (!customer) { log('not logged in'); return; } 4201 if (CFG.groupIds.indexOf(customer.customerGroupId) === -1) { 4202 log('group', customer.customerGroupId, 'not a Foundry group'); 4203 return; 4204 } 4205 4206 var product = data.site && data.site.product; 4207 if (!product) { log('product not readable'); return; } 4208 4209 var inStock = product.inventory && product.inventory.isInStock; 4210 var status = product.availabilityV2 && product.availabilityV2.status; 4211 if (inStock || status === 'Preorder') { 4212 log('in stock or preorder â nothing to do'); 4213 return; 4214 } 4215 4216 var blockedCat = excludedByCategory(product); 4217 if (blockedCat) { log('excluded by', blockedCat); return; } 4218 4219 var fields = ((product.customFields && product.customFields.edges) || [])
4220 .map(function (e) { return e.node; }); 4221 var blocked = excludedBy(fields); 4222 if (blocked) { log('excluded by', blocked); return; } 4223 4224 var prices = product.prices || {}; 4225 var unit = (prices.salePrice && prices.salePrice.value != null) 4226 ? prices.salePrice.value 4227 : (prices.price && prices.price.value); 4228 if (unit == null) { log('no price for this customer'); return; } 4229 4230 render({ 4231 productId: productId, 4232 sku: product.sku || '', 4233 price: Number(unit), 4234 customer: customer, 4235 /* Live from BigCommerce â no hardcoded map to drift. */ 4236 customerGroupName: customer.customerGroupName || '', 4237 trigger: null 4238 }); 4239 }) 4240 .catch(function (e) { log('context query failed:', e.message); }); 4241 } 4242 4243 if (document.readyState === 'loading') { 4244 document.addEventListener('DOMContentLoaded', boot); 4245 } else { 4246 boot(); 4247 } 4248})(); 4249</script>
4249<script> 4250/* ============================================================================ 4251 * FAXON AR15 UPPER BUILDER (editable copy, replaces the API-locked entry) 4252 * 4253 * Script Manager entry: 4254 * Name Faxon AR15 Upper Builder 4255 * Location Footer 4256 * Pages All pages (inert unless the page has #faxon-ar15-root) 4257 * Script type Script 4258 * Category Essential 4259 * 4260 * Paste this entire file, opening and closing tags included. 4261 * Coupon: search for CHECKOUT_COUPON a few lines down. 4262 * Storefront GraphQL token embedded, expires 2031-06-03. 4263 * ========================================================================== */ 4264(function(){ 4265 4266 /* ---- CHECKOUT COUPON ------------------------------------------------ 4267 * Applied when the customer clicks Add Build to Cart: they land on 4268 * /cart.php?couponcode=CODE and BigCommerce applies it automatically. 4269 * Change the text between the quotes. Use '' for no coupon. 4270 * The code must exist and be active under Marketing > Coupon Codes. 4271 * ------------------------------------------------------------------ */ 4272 var CHECKOUT_COUPON = 'UPPER15'; 4273 4274 4275 function waitForRoot(tries){ 4276 4277 var root=document.getElementById('faxon-ar15-root'); 4278 if(!root){ 4279 if(tries>0) setTimeout(function(){waitForRoot(tries-1);},150); 4280 return; 4281 } 4282 initConfigurator(); 4283 } 4284 4285 function initConfigurator(){ 4286(function(){ 4287 4288 if(!document.getElementById('faxon-bebas-font')){ 4289 var lnk=document.createElement('link'); 4290 lnk.id='faxon-bebas-font'; 4291 lnk.rel='stylesheet'; 4292 lnk.href='https://fonts.googleapis.com/css2?family=Bebas+Neue&display=swap'; 4293 document.head.appendChild(lnk); 4294 } 4295 var s=document.createElement('style'); 4296 s.id='faxon-ar15-styles'; 4297 if(!document.getElementById('faxon-ar15-styles')){ 4298 s.textContent=` 4299*,*::before,*::after{box-sizing:border-box;margin:0;padding:0} 4300:root{ 4301 --ink:#000d1a;--panel:#001734;--panel2:#000f22;--line:#1a3560; 4302 --gold:#932729;--gold-bright:#b53b3e;--gold-deep:#7a1a1c; 4303 --text:#e8eef6;--muted:#c0d0e0;--white:#ffffff; 4304 --green:#4caf72;--red:#c0392b; 4305 --heading-font:'Bebas Neue','Impact',sans-serif; 4306} 4307body{background:var(--ink);color:var(--text);font-family:'Cambria',Georgia,serif;font-size:15px;line-height:1.6;min-height:100vh} 4308button{cursor:pointer;font-family:inherit} 4309 4310.site-header{background:linear-gradient(135deg,#000f22 0%,#001734 60%,#000d1a 100%);border-bottom:3px solid var(--gold);padding:20px 28px;display:flex;align-items:center;gap:16px;position:sticky;top:0;z-index:100} 4311.kicker{font-family:var(--heading-font);letter-spacing:.25em;text-transform:uppercase;font-size:12px;color:var(--gold);display:flex;align-items:center;gap:10px} 4312.kicker::before{content:'';display:inline-block;width:28px;height:2px;background:var(--gold)} 4313.site-header h1{font-family:var(--heading-font);font-weight:400;text-transform:uppercase;font-size:26px;color:var(--white);letter-spacing:1.5px} 4314 4315.step-rail{background:var(--panel2);border-bottom:2px solid var(--gold);padding:0 24px;overflow-x:auto;white-space:nowrap;scrollbar-width:none} 4316.step-rail::-webkit-scrollbar{display:none} 4317.step-rail ul{display:inline-flex;list-style:none;min-width:100%} 4318.step-rail li{flex:1;min-width:88px} 4319.step-btn{width:100%;background:none;border:none;border-bottom:3px solid transparent;padding:13px 8px 10px;font-family:var(--heading-font);font-weight:400;font-size:12px;letter-spacing:.15em;text-transform:uppercase;color:var(--muted);cursor:pointer;transition:color .15s,border-color .15s;position:relative;white-space:nowrap} 4320.step-btn .step-num{display:block;font-size:9px;letter-spacing:.1em;margin-bottom:2px} 4321.step-btn.active{color:var(--white);border-bottom-color:var(--gold)} 4322.step-btn.done{color:var(--text)} 4323.step-btn.done .step-num{color:var(--green)} 4324.step-btn.done::after{content:'\u2713';position:absolute;top:9px;right:6px;font-size:9px;color:var(--green)} 4325.step-btn.auto-skipped{color:var(--muted);opacity:.5} 4326.step-btn.auto-skipped .step-num{color:var(--muted)} 4327.step-btn.auto-skipped::after{content:'\u2014';position:absolute;top:9px;right:6px;font-size:10px;color:var(--muted)} 4328 4329.layout{display:grid;grid-template-columns:1fr 308px;gap:0;min-height:calc(100vh - 68px - 50px)} 4330@media(max-width:860px){.layout{grid-template-columns:1fr}} 4331 4332.main{padding:28px;overflow-y:auto} 4333.step-header{margin-bottom:22px;border-left:4px solid var(--gold);padding-left:16px} 4334.step-header h2{font-family:var(--heading-font);font-weight:400;text-transform:uppercase;font-size:32px;color:var(--white);letter-spacing:1px;line-height:1.1} 4335.step-header p{color:var(--muted);font-size:14px;margin-top:6px;max-width:65ch;font-family:'Cambria',Georgia,serif} 4336 4337.skip-card{background:linear-gradient(135deg,#3a0a0b,#1a0020);border:1px solid var(--gold);border-left:4px solid var(--gold);border-radius:6px;padding:20px 24px;margin-bottom:24px;display:flex;align-items:flex-start;gap:16px} 4338.skip-card .skip-icon{font-size:24px;flex-shrink:0;margin-top:2px} 4339.skip-card h3{font-family:var(--heading-font);font-size:18px;font-weight:400;text-transform:uppercase;letter-spacing:.08em;color:var(--white);margin-bottom:4px} 4340.skip-card p{font-size:13.5px;color:var(--muted);line-height:1.55} 4341 4342.filter-bar{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:10px;align-items:center} 4343.filter-bar:last-of-type{margin-bottom:18px} 4344.filter-bar-label{font-family:var(--heading-font);font-size:10px;letter-spacing:.2em;text-transform:uppercase;color:var(--gold);white-space:nowrap;margin-right:4px} 4345.filter-btn.filter-unavail{display:none} 4346.filter-btn{background:var(--panel);border:1px solid var(--line);color:#b8cce0;font-size:12px;font-family:var(--heading-font);font-weight:400;letter-spacing:.15em;text-transform:uppercase;padding:7px 16px;border-radius:3px;
4346cursor:pointer;transition:all .15s} 4347.filter-btn:hover{border-color:var(--gold);color:var(--white)} 4348.filter-btn.active{background:var(--gold);border-color:var(--gold);color:var(--white)} 4349 4350.product-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px} 4351@media(max-width:720px){.product-grid{grid-template-columns:repeat(2,1fr)}} 4352@media(max-width:460px){.product-grid{grid-template-columns:1fr}} 4353.product-card{background:var(--panel);border:1px solid var(--line);border-radius:8px;overflow:hidden;cursor:pointer;transition:border-color .2s,transform .2s;position:relative;display:flex;flex-direction:column} 4354.product-card:hover:not(.oos):not(.incompatible){border-color:var(--gold);transform:translateY(-2px)} 4355.product-card.selected{border-color:var(--gold-bright);box-shadow:0 0 0 1px var(--gold-bright)} 4356.product-card.oos{opacity:.38;cursor:not-allowed} 4357.product-card.incompatible{display:none} 4358.product-card.hidden{display:none} 4359.card-img{background:#0a1628;display:flex;align-items:center;justify-content:center;padding:16px;height:260px;flex-shrink:0;overflow:hidden} 4360.card-img img{max-height:228px;max-width:100%;object-fit:contain;transition:transform .3s} 4361.product-card:hover:not(.oos):not(.incompatible) .card-img img{transform:scale(1.04)} 4362.card-body{padding:14px;flex:1;display:flex;flex-direction:column} 4363.card-name{font-family:var(--heading-font);font-weight:400;font-size:15px;text-transform:uppercase;color:var(--white);line-height:1.2;letter-spacing:.5px;margin-bottom:4px} 4364.card-sku{font-size:10.5px;letter-spacing:.07em;color:#7090b0;margin-bottom:8px;font-family:monospace} 4365.card-footer{margin-top:auto;display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:5px} 4366.card-price{font-family:var(--heading-font);font-weight:400;font-size:22px;color:var(--gold)} 4367.card-price .orig{font-size:12px;color:var(--muted);text-decoration:line-through;font-weight:400;margin-left:3px} 4368.badge{font-family:var(--heading-font);font-size:9.5px;font-weight:400;letter-spacing:.1em;text-transform:uppercase;padding:3px 7px;border-radius:2px} 4369.badge.in-stock{background:rgba(76,175,114,.15);color:var(--green);border:1px solid rgba(76,175,114,.3)} 4370.badge.low-stock{background:rgba(147,39,41,.15);color:#e07070;border:1px solid rgba(147,39,41,.3)} 4371.badge.oos-badge{background:rgba(192,57,43,.12);color:var(--red);border:1px solid rgba(192,57,43,.3)} 4372.compat-note{font-size:11px;color:var(--muted);margin-top:6px;line-height:1.4;font-style:italic} 4373.acc-group{margin-bottom:32px} 4374.acc-group-header{font-family:var(--heading-font);font-size:13px;font-weight:700;letter-spacing:2px;text-transform:uppercase;color:var(--gold);border-bottom:1px solid var(--line);padding-bottom:8px;margin:0 0 16px} 4375.acc-group .product-grid{margin-bottom:0} 4376.select-btn{display:block;width:100%;background:var(--gold);color:var(--white);font-family:var(--heading-font);font-weight:400;text-transform:uppercase;letter-spacing:.15em;font-size:13px;padding:10px;border:none;border-top:1px solid var(--line);text-align:center;transition:background .15s;margin-top:10px;cursor:pointer} 4377.select-btn:hover{background:var(--gold-bright)} 4378.product-card.selected .select-btn{background:var(--gold-deep);color:var(--white)} 4379.selected-check{position:absolute;top:10px;right:10px;background:var(--gold);color:var(--white);font-size:10px;font-weight:700;width:22px;height:22px;border-radius:50%;display:none;align-items:center;justify-content:center;z-index:2} 4380.product-card.selected .selected-check{display:flex} 4381 4382.step-actions{margin-top:28px;display:flex;gap:12px;flex-wrap:wrap;align-items:center} 4383.step-actions--top{margin-top:0;margin-bottom:20px} 4384.btn-skip{background:transparent;border:2px solid var(--line);color:var(--muted);font-family:var(--heading-font);font-weight:400;text-transform:uppercase;letter-spacing:.15em;font-size:14px;padding:10px 22px;border-radius:3px;transition:all .15s} 4385.btn-skip:hover{border-color:var(--muted);color:var(--white)} 4386.btn-next{background:var(--gold);color:var(--white);font-family:var(--heading-font);font-weight:400;text-transform:uppercase;letter-spacing:.1em;font-size:18px;padding:12px 32px;border:none;border-radius:3px;transition:background .15s} 4387.btn-next:hover{background:var(--gold-bright)} 4388.btn-next:disabled{opacity:.3;cursor:not-allowed} 4389.no-results{color:var(--muted);font-size:14px;padding:28px 0} 4390 4391.sidebar{background:var(--panel2);border-left:1px solid var(--line);display:flex;flex-direction:column;position:sticky;top:118px;height:calc(100vh - 118px);overflow-y:auto} 4392@media(max-width:860px){.sidebar{position:static;height:auto;border-left:none;border-top:1px solid var(--line)}} 4393.sidebar-header{padding:16px 18px;border-bottom:1px solid var(--line);background:var(--panel)} 4394.sidebar-header h3{font-family:var(--heading-font);font-weight:400;text-transform:uppercase;font-size:15px;letter-spacing:.2em;color:var(--gold)} 4395.build-items{flex:1;padding:10px 14px;display:flex;flex-direction:column;gap:5px} 4396.build-item{display:flex;gap:9px;padding:9px;background:var(--panel);border-radius:6px;border:1px solid var(--line);align-items:flex-start} 4397.build-item.empty{border-style:dashed;opacity:.35} 4398.build-item.auto-skipped-item{border-style:dashed;opacity:.4;background:transparent} 4399.build-item img{width:40px;height:40px;object-fit:contain;background:#0a1628;border-radius:4px;flex-shrink:0} 4400.item-placeholder{width:40px;height:40px;background:var(--panel2);border-radius:4px;flex-shrink:0;display:flex;align-items:center;justify-content:center;font-size:16px;color:var(--line)} 4401.item-info{flex:1;min-width:0} 4402.item-step{font-size:9.5px;letter-spacing:.15em;text-transform:uppercase;color:var(--gold);font-family:var(--heading-font)} 4403.item-name{font-size:11.5px;color:var(--text);line-height:1.3;margin-top:1px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis} 4404.item-price{font-family:var(--heading-font);font-weight:400;font-size:13px;color:var(--white);margin-top:2px} 4405.remove-btn{background:none;border:none;color:var(--line);font-size:14px;line-height:1;padding:2px;flex-shrink:0;cursor:pointer;transition:color .15s} 4406.remove-btn:hover{color:var(--red)} 4407.sidebar-footer{padding:16px;border-top:2px solid var(--gold);background:var(--panel)} 4408.total-line{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px} 4409.total-label{font-family:var(--heading-font);text-transform:uppercase;letter-spacing:.15em;font-size:12px;color:var(--muted)} 4410.total-amount{font-family:var(--heading-font);font-weight:400;font-size:26px;color:var(--white)} 4411.cart-btn{display:block;width:100%;background:var(--gold);color:var(--white);font-family:var(--heading-font);font-weight:400;text-transform:uppercase;letter-spacing:.15em;font-size:18px;padding:14px;border:none;border-radius:3px;text-align:center;cursor:pointer;transition:background .2s} 4412.cart-btn:hover{background:var(--gold-bright)} 4413.cart-btn:disabled{opacity:.3;cursor:not-allowed} 4414.cart-status{font-size:12px;color:var(--muted);text-align:center;margin-top:8px;min-height:16px} 4415 4416.prev-selections{display:flex;flex-wrap:wrap;gap:10px;margin-bottom:24px;padding:16px;background:var(--panel);border:1px solid var(--line);border-left:3px solid var(--gold);border-radius:4px} 4417.prev-sel-label{font-family:var(--heading-font);font-size:10px;letter-spacing:.2em;text-transform:uppercase;color:var(--gold);display:block;margin-bottom:3px} 4418.prev-sel-item{display:flex;align-items:center;gap:10px;background:var(--panel2);border:1px solid var(--line);border-radius:4px;padding:10px 14px 10px 10px;cursor:pointer;transition:border-color .15s;flex-shrink:0;max-width:280px} 4419.prev-sel-item:hover{border-color:var(--gold)} 4420.prev-sel-item img{width:52px;height:52px;object-fit:contain;background:#0a1628;border-radius:4px;flex-shrink:0} 4421.prev-sel-info{min-width:0;flex:1} 4422.prev-sel-name{font-size:13px;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:170px;display:block;line-height:1.3} 4423.prev-sel-edit{font-size:11px;color:var(--muted);flex-shrink:0;margin-left:6px} 4424.prev-sel-item:hover .prev-sel-edit{color:var(--gold)} 4425 4426.btn-back{background:none;border:1px solid var(--line);color:var(--muted);font-family:var(--heading-font);font-weight:400;text-transform:uppercase;letter-spacing:.1em;font-size:14px;padding:12px 20px;border-radius:3px;
4426cursor:pointer;transition:border-color .15s,color .15s} 4427.btn-back:hover{border-color:var(--gold);color:var(--white)} 4428 4429#hs-modal{display:none;position:fixed;inset:0;z-index:9999;align-items:center;justify-content:center} 4430.hs-backdrop{position:absolute;inset:0;background:rgba(0,0,0,.8)} 4431.hs-dialog{position:relative;background:var(--panel);border:1px solid var(--line);border-top:3px solid var(--gold);border-radius:6px;padding:36px 32px;max-width:500px;width:90%;text-align:center} 4432.hs-icon{font-size:38px;margin-bottom:14px} 4433.hs-title{font-family:var(--heading-font);font-weight:400;text-transform:uppercase;letter-spacing:.1em;font-size:30px;color:var(--white);margin-bottom:14px;line-height:1.1} 4434.hs-body{font-size:14px;color:var(--text);line-height:1.65;margin-bottom:8px;font-family:'Cambria',Georgia,serif;max-width:400px;margin-left:auto;margin-right:auto} 4435.hs-note{font-size:12px;color:var(--muted);margin-bottom:18px} 4436.hs-price{font-family:var(--heading-font);font-size:36px;color:var(--gold);margin-bottom:26px;letter-spacing:.05em} 4437.hs-actions{display:flex;flex-direction:column;gap:10px} 4438.hs-btn-yes{background:var(--gold);color:var(--white);font-family:var(--heading-font);font-weight:400;text-transform:uppercase;letter-spacing:.15em;font-size:17px;padding:15px;border:none;border-radius:3px;cursor:pointer;transition:background .2s} 4439.hs-btn-yes:hover{background:var(--gold-bright)} 4440.hs-btn-no{background:none;border:1px solid var(--line);color:var(--muted);font-family:var(--heading-font);font-weight:400;text-transform:uppercase;letter-spacing:.1em;font-size:13px;padding:11px;border-radius:3px;cursor:pointer;transition:border-color .15s,color .15s} 4441.hs-btn-no:hover{border-color:var(--gold);color:var(--white)} 4442 4443#faxon-loading{display:flex;position:absolute;inset:0;background:var(--bg);z-index:100;align-items:center;justify-content:center;flex-direction:column;gap:16px;min-height:300px} 4444.faxon-spinner{width:40px;height:40px;border:3px solid var(--line);border-top-color:var(--gold);border-radius:50%;animation:spin .8s linear infinite} 4445@keyframes spin{to{transform:rotate(360deg)}} 4446.faxon-loading-text{font-family:var(--heading-font);text-transform:uppercase;letter-spacing:.2em;font-size:13px;color:var(--muted)} 4447 4448#faxon-welcome{display:none;position:fixed;inset:0;z-index:9999;align-items:center;justify-content:center} 4449.welcome-backdrop{position:absolute;inset:0;background:rgba(0,0,0,.85)} 4450.welcome-dialog{position:relative;background:var(--panel);border:1px solid var(--line);border-top:4px solid var(--gold);border-radius:6px;padding:40px 36px;max-width:560px;width:92%;text-align:center} 4451.welcome-kicker{font-family:var(--heading-font);font-size:11px;letter-spacing:.35em;text-transform:uppercase;color:var(--gold);margin-bottom:10px} 4452.welcome-title{font-family:var(--heading-font);font-weight:400;text-transform:uppercase;font-size:42px;color:var(--white);letter-spacing:1px;line-height:1;margin-bottom:20px} 4453.welcome-body{font-size:14.5px;color:var(--text);line-height:1.7;font-family:'Cambria',Georgia,serif;margin-bottom:10px;max-width:440px;margin-left:auto;margin-right:auto} 4454.welcome-steps{display:flex;flex-wrap:wrap;justify-content:center;gap:8px;margin:20px 0 28px} 4455.welcome-step-chip{font-family:var(--heading-font);font-size:11px;letter-spacing:.1em;text-transform:uppercase;padding:5px 12px;border:1px solid var(--line);border-radius:3px;color:var(--muted)} 4456.welcome-btn{display:block;width:100%;background:var(--gold);color:var(--white);font-family:var(--heading-font);font-weight:400;text-transform:uppercase;letter-spacing:.2em;font-size:20px;padding:16px;border:none;border-radius:3px;cursor:pointer;transition:background .2s} 4457.welcome-btn:hover{background:var(--gold-bright)}`; 4458 document.head.appendChild(s); 4459 } 4460})(); 4461 4462function scrollToConfig(){ 4463 var el=document.querySelector('.step-rail'); 4464 if(el) el.scrollIntoView({behavior:'smooth',block:'nearest'}); 4465} 4466 4467 4468 (function(){ 4469 var root=document.getElementById('faxon-ar15-root'); 4470 if(!root) return; 4471 root.innerHTML=[ 4472 '<header class="site-header"><div>', 4473 '<div class="kicker">
4473Build Your Rifle</div>', 4474 '<h1>AR15 Upper Builder</h1>', 4475 '</div></header>', 4476 '<div class="step-rail"><ul id="step-nav"></ul></div>', 4477 '<div class="layout">', 4478 '<div id="faxon-loading"><div class="faxon-spinner"></div><div class="faxon-loading-text">Loading Catalog\u2026</div></div>', 4479 '<main class="main" id="main-content"></main>', 4480 '<aside class="sidebar">', 4481 '<div class="sidebar-header"><h3>Your Build</h3></div>', 4482 '<div class="build-items" id="build-items"></div>', 4483 '<div class="sidebar-footer">', 4484 '<div class="total-line">', 4485 '<span class="total-label">Build Total</span>', 4486 '<span class="total-amount" id="total-display">$0.00</span>', 4487 '</div>', 4488 '<button type="button" class="cart-btn" id="cart-btn" disabled>Add Build to Cart</button>', 4489 '<div class="cart-status" id="cart-status"></div>', 4490 '</div>', 4491 '</aside>', 4492 '</div>' 4493 ].join(''); 4494 })(); 4495 4496let CATALOG = {}; 4497 4498function getBarrel(){ return selections['barrel'] || null; } 4499 4500function maxHGLength(barrel){ 4501 4502 4503 return parseFloat(barrel.barrelLength) - 1; 4504} 4505 4506function getAutoSkip(stepId){ 4507 const b = getBarrel(); 4508 if(!b) return null; 4509 if(stepId === 'gasTube' && !b.hasGasSystem) 4510 return {icon:'\u26A1', title:'Blowback Barrel \u2014 No Gas Tube Needed', body:'9mm and 10mm PCC barrels are blowback-operated and do not use a gas tube, gas block, or gas piston. This step is automatically skipped.'}; 4511 if(stepId === 'gasBlock' && !b.hasGasSystem) 4512 return {icon:'\u26A1', title:'Blowback Barrel \u2014 No Gas Block Needed', body:'Blowback-operated barrels do not use a gas block. This step is automatically skipped.'}; 4513 if(stepId === 'gasBlock' && b.hasPinnedGasBlock) 4514 return {icon:'\u2705', title:'Gas Block Factory-Installed', body:'This barrel includes a factory-pinned gas block (\u2013APGB). No separate gas block purchase is needed \u2014 it ships already installed and pinned. Proceed to handguard selection.'}; 4515 if(stepId === 'muzzleDevice' && b.hasIntegralMuzzle) 4516 return {icon:'\uD83D\uDD27', title:'Integral Muzzle Device Included', body:'This barrel has a factory-installed integral muzzle device (\u2013IMDB/\u2013IMDF). No separate muzzle device is needed or compatible. This step is skipped.'}; 4517 return null; 4518} 4519 4520const SF_TOKEN = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NiJ9.eyJjaWQiOlsxXSwiY29ycyI6WyJodHRwczovL2ZheG9uZmlyZWFybXMuY29tIiwiaHR0cHM6Ly9zdG9yZS1mMWh3dXgubXliaWdjb21tZXJjZS5jb20iXSwiZWF0IjoxOTM4Mjg1NTMwLCJpYXQiOjE3ODA2MDU1MzEsImlzcyI6IkJDIiwic2lkIjo4MzYxMDAsInN1YiI6Ijl6ZjRuMm5tZW1qOXVqa255bGgxZmt0b2xvbzVrYjkiLCJzdWJfdHlwZSI6MiwidG9rZW5fdHlwZSI6MX0.mmWBFzdBW4Gz7jxt0UDxP5K8WbOj4Eb5elLgMsh188JS_aKFUAS7oiuLCjIiYdqVJnEV4LDmgjgGb8cfBplaJQ'; 4521const GQL_ENDPOINT = '/graphql'; 4522const GQL_QUERY = `query CatProducts($id:Int!,$after:String){site{category(entityId:$id){products(first:50,after:$after){pageInfo{hasNextPage endCursor}edges{node{entityId name sku path prices{price{value}salePrice{value}}inventory{isInStock aggregated{availableToSell}}defaultImage{url(width:1280)}customFields{edges{node{name value}}}}}}}}}`; 4523const ACC_GQL_QUERY = `query AccProducts($ids:[Int!]!){site{products(entityIds:$ids,first:50){edges{node{entityId name sku path prices{price{value}salePrice{value}}inventory{isInStock aggregated{availableToSell}}defaultImage{url(width:1280)}customFields{edges{node{name value}}}}}}}}`; 4524 4525const ACC_ENTITY_IDS = [2355,2356,2357,2358,2359,2360,2361,2362,2363,2364,2365,2366,2367,2368,2369,2370,2376,2377,2378,2379,2380,2381,2383,2384,2385,2386,2387,2388,2389,2390,2391,2392,2394,2395,2399,2400,2401,2402,2403,2404,2405]; 4526 4527const PART_CATEGORIES = { 4528 barrel:[30], gasTube:[59], gasBlock:[59], bcg:[61], 4529 handguard:[58], upper:[127], muzzleDevice:[62], 4530 chargingHandle:[150], suppressor:[287,301,302,303,344] 4531}; 4532 4533async function gqlFetch(catId, after) { 4534 const vars = {id: catId}; 4535 if (after) vars.after = after; 4536 const res = await fetch(GQL_ENDPOINT, { 4537 method:'POST', 4538 headers:{'Content-Type':'application/json','Authorization':'Bearer '+SF_TOKEN}, 4539 body: JSON.stringify({query:GQL_QUERY, variables:vars}) 4540 }); 4541 const data = await res.json(); 4542 4543 if(!data.data?.site?.category) { 4544 if(data.errors) console.warn('[Faxon] GQL warning cat '+catId+':', data.errors[0]?.message); 4545 return null; 4546 } 4547 return data.data.site.category.products; 4548} 4549 4550async function fetchAccessories(entityIds) { 4551 const nodes = []; 4552 for(let i=0; i<entityIds.length; i+=50){ 4553 const chunk = entityIds.slice(i, i+50); 4554 try { 4555 const res = await fetch(GQL_ENDPOINT, { 4556 method:'POST', 4557 headers:{'Content-Type':'application/json','Authorization':'Bearer '+SF_TOKEN}, 4558 body: JSON.stringify({query:ACC_GQL_QUERY, variables:{ids:chunk}}) 4559 }); 4560 const data = await res.json(); 4561 const edges = data.data?.site?.products?.edges||[]; 4562 for(const e of edges) nodes.push(e.node); 4563 } catch(e){ console.warn('[Faxon] accessory fetch error:',e); } 4564 } 4565 return nodes; 4566} 4567 4568async function fetchCategory(catId) { 4569 const nodes = []; 4570 let after = null; 4571 do { 4572 const page = await gqlFetch(catId, after); 4573 if(!page) break; 4574 for (const e of page.edges) nodes.push(e.node); 4575 after = page.pageInfo.hasNextPage ? page.pageInfo.endCursor : null; 4576 } while(after); 4577 return nodes; 4578} 4579 4580function parseCF(edges) { 4581 const cf = {}; 4582 for (const {node} of edges) { 4583 if (node.name.startsWith('configurator:')) 4584 cf[node.name.slice(13)] = node.value; 4585 } 4586 return cf; 4587} 4588 4589function normalizeProduct(node) { 4590 const cf = parseCF(node.customFields.edges); 4591 const p = { 4592 id: node.entityId, 4593 name: node.name, 4594 sku: node.sku, 4595 price: node.prices?.price?.value || 0, 4596 salePrice: node.prices?.salePrice?.value || 0, 4597 inventory: node.inventory?.aggregated?.availableToSell ?? (node.inventory?.isInStock ? 999 : 0), 4598 imageUrl: node.defaultImage?.url || '', 4599 productUrl: 'https://faxonfirearms.com' + node.path, 4600 }; 4601 if (cf.caliber) p.caliber = cf.caliber; 4602 if (cf.gasLength) p.gasLength = cf.gasLength; 4603 if (cf.barrelLength) p.barrelLength = cf.barrelLength; 4604 if (cf.threadPitch) p.threadPitch = cf.threadPitch; 4605 if (cf.gbDiameter) p.gbDiameter = cf.gbDiameter; 4606 if (cf.hgLength) p.hgLength = parseFloat(cf.hgLength); 4607 p.hasGasSystem = cf.hasGasSystem !== 'false'; 4608 p.hasPinnedGasBlock = cf.hasPinnedGasBlock === 'true'; 4609 p.hasIntegralMuzzle = cf.hasIntegralMuzzle === 'true'; 4610 p.needs338Upper = cf.needs338Upper === 'true';
4611 if (cf.compatCalibers) p.compatCalibers = cf.compatCalibers.split(',').map(s=>s.trim()); 4612 if (cf.calCompat) p.calCompat = cf.calCompat.split(',').map(s=>s.trim()); 4613 if (cf.compatThreads) p.compatThreads = cf.compatThreads.split(',').map(s=>s.trim()); 4614 if (cf.label) p.label = cf.label; 4615 if (cf.accGroup) p.accGroup = cf.accGroup; 4616 return p; 4617} 4618 4619async function fetchCatalog() { 4620 4621 try { 4622 const ts = parseInt(sessionStorage.getItem('faxon_cat_ts')||'0'); 4623 if (Date.now()-ts < 600000) { 4624 const cached = sessionStorage.getItem('faxon_catalog'); 4625 if (cached) return JSON.parse(cached); 4626 } 4627 } catch(e){} 4628 4629 const catalog = {barrels:[],gasTubes:[],gasBlocks:[],bcgs:[], 4630 handguards:[],uppers:[],muzzleDevices:[],chargingHandles:[],suppressors:[],accessories:[]}; 4631 const catKey = {barrel:'barrels',gasTube:'gasTubes',gasBlock:'gasBlocks', 4632 bcg:'bcgs',handguard:'handguards',upper:'uppers', 4633 muzzleDevice:'muzzleDevices',chargingHandle:'chargingHandles',suppressor:'suppressors'}; 4634 const seen = new Set(); 4635 4636 4637 4638 const ACC_CATEGORIES = [91, 153, 154, 155, 157, 102, 345, 202]; 4639 4640 4641 const allCatIds = new Set([...Object.values(PART_CATEGORIES).flat(), ...ACC_CATEGORIES]); 4642 4643 4644 for (const catId of allCatIds) { 4645 const nodes = await fetchCategory(catId); 4646 for (const node of nodes) { 4647 const cf = parseCF(node.customFields.edges); 4648 4649 4650 if (cf.partType && catKey[cf.partType]) { 4651 const key = cf.partType+':'+node.entityId; 4652 if (!seen.has(key)) { 4653 seen.add(key); 4654 catalog[catKey[cf.partType]].push(normalizeProduct(node)); 4655 } 4656 } 4657 4658 4659 if (cf.acc === 'true' || cf.acc === 'True') { 4660 const key = 'accessory:'+node.entityId; 4661 if (!seen.has(key)) { 4662 seen.add(key); 4663 catalog.accessories.push(normalizeProduct(node)); 4664 } 4665 } 4666 } 4667 } 4668 4669 4670 const accNodes = await fetchAccessories(ACC_ENTITY_IDS);
4671 for(const node of accNodes){ 4672 const key = 'accessory:'+node.entityId; 4673 if(!seen.has(key)){ 4674 seen.add(key); 4675 catalog.accessories.push(normalizeProduct(node)); 4676 } 4677 } 4678 4679 try { 4680 sessionStorage.setItem('faxon_catalog', JSON.stringify(catalog)); 4681 sessionStorage.setItem('faxon_cat_ts', Date.now().toString()); 4682 } catch(e){} 4683 return catalog; 4684} 4685 4686const STEPS = [ 4687 { 4688 id:'barrel', label:'Barrel', icon:'\uD83C\uDFAF', optional:false, 4689 title:'Choose Your Barrel', 4690 desc:'Your barrel defines caliber, gas system, and overall build direction. Everything else follows from this choice.', 4691 products: () => CATALOG.barrels, 4692 filters:[ 4693 {key:'all', label:'All Calibers', fn:()=>true}, 4694 {key:'556', label:'5.56 NATO', fn:p=>p.caliber==='5.56 NATO'}, 4695 {key:'223w', label:'.223 Wylde', fn:p=>p.caliber==='.223 Wylde'}, 4696 {key:'300', label:'.300 BLK', fn:p=>p.caliber==='.300 BLK'}, 4697 {key:'65g', label:'6.5 Grendel', fn:p=>p.caliber==='6.5 Grendel'}, 4698 {key:'6arc', label:'6mm ARC', fn:p=>p.caliber==='6mm ARC'}, 4699 {key:'338arc', label:'338 ARC', fn:p=>p.caliber==='338 ARC'}, 4700 {key:'762x39', label:'7.62x39', fn:p=>p.caliber==='7.62x39'}, 4701 {key:'350leg', label:'350 Legend', fn:p=>p.caliber==='350 Legend'}, 4702 {key:'458', label:'.458 SOCOM', fn:p=>p.caliber==='.458 SOCOM'}, 4703 {key:'9mm', label:'9mm / PCC', fn:p=>p.caliber==='9mm'}, 4704 {key:'10mm', label:'10mm / PCC', fn:p=>p.caliber==='10mm'}, 4705 {key:'22arc', label:'22 ARC', fn:p=>p.caliber==='22 ARC'}, 4706 {key:'400leg', label:'400 Legend', fn:p=>p.caliber==='400 Legend'}, 4707 {key:'450bm', label:'.450 Bushmaster',fn:p=>p.caliber==='.450 Bushmaster'}, 4708 ], 4709 lengthFilters:[ 4710 {key:'all', label:'All Lengths', fn:()=>true}, 4711 {key:'6', label:'6"', fn:p=>p.barrelLength==='6'}, 4712 {key:'7.5', label:'7.5"', fn:p=>p.barrelLength==='7.5'}, 4713 {key:'8.5', label:'8.5"', fn:p=>p.barrelLength==='8.5'}, 4714 {key:'9', label:'9"', fn:p=>p.barrelLength==='9'}, 4715 {key:'10.5', label:'10.5"', fn:p=>p.barrelLength==='10.5'}, 4716 {key:'11.5', label:'11.5"', fn:p=>p.barrelLength==='11.5'}, 4717 {key:'12.5', label:'12.5"', fn:p=>p.barrelLength==='12.5'}, 4718 {key:'13.9', label:'13.9"', fn:p=>p.barrelLength==='13.9'}, 4719 {key:'14.5', label:'14.5"', fn:p=>p.barrelLength==='14.5'}, 4720 {key:'16', label:'16"', fn:p=>p.barrelLength==='16'}, 4721 {key:'18', label:'18"', fn:p=>p.barrelLength==='18'}, 4722 {key:'20', label:'20"', fn:p=>p.barrelLength==='20'}, 4723 {key:'22', label:'22"', fn:p=>p.barrelLength==='22'}, 4724 {key:'24', label:'24"', fn:p=>p.barrelLength==='24'}, 4725 ], 4726 compat:()=>true, 4727 autoSelect:false, 4728 }, 4729 { 4730 id:'gasTube', label:'Gas Tube', icon:'\u2699\uFE0F', optional:false, 4731 title:'Select Gas Tube', 4732 desc:()=>{ 4733 const b=getBarrel(); 4734 if(!b) return 'All gas tube lengths shown \u2014 select a barrel to filter by gas system length.'; 4735 if(!b.hasGasSystem) return 'This blowback barrel does not use a gas tube.'; 4736 return `Your ${b.barrelLength}" barrel runs a ${b.gasLength}-length gas system. Only the matching tube is shown.`; 4737 }, 4738 products:()=>CATALOG.gasTubes, 4739 filters:[], 4740 compat:p=>{ 4741 const b=getBarrel(); 4742 if(!b) return true; 4743 if(!b.hasGasSystem) return false; 4744 return p.gasLength===b.gasLength; 4745 }, 4746 autoSelect:true, 4747 }, 4748 { 4749 id:'gasBlock', label:'Gas Block', icon:'\uD83D\uDD29', optional:false, 4750 title:'Select Gas Block', 4751 desc:()=>{ 4752 const b=getBarrel(); 4753 if(!b) return 'All gas blocks shown \u2014 select a barrel to filter by journal diameter.'; 4754 if(!b.hasGasSystem) return 'Blowback barrel \u2014 no gas block needed.'; 4755 if(b.hasPinnedGasBlock) return 'Gas block is factory-installed on this barrel.'; 4756 return `Your barrel has a ${b.gbDiameter} gas block journal. Only compatible blocks are shown.`; 4757 }, 4758 products:()=>CATALOG.gasBlocks, 4759 filters:[], 4760 compat:p=>{ 4761 const b=getBarrel(); 4762 if(!b) return true; 4763 if(!b.hasGasSystem||b.hasPinnedGasBlock) return false;
4764 return p.gbDiameter===b.gbDiameter; 4765 }, 4766 autoSelect:false, 4767 }, 4768 { 4769 id:'handguard', label:'Handguard', icon:'\uD83D\uDEE1\uFE0F', optional:false, 4770 title:'Choose Your Handguard', 4771 desc:()=>{ 4772 const b=getBarrel(); 4773 if(!b) return 'Select a barrel first to see compatible handguard lengths.'; 4774 const max=maxHGLength(b); 4775 return `Your ${b.barrelLength}" barrel supports free-float handguards up to ${max}" long. All Faxon gas blocks are low-profile and free-float compatible.`; 4776 }, 4777 products:()=>CATALOG.handguards, 4778 filters:[ 4779 {key:'all', label:'All', fn:()=>true}, 4780 {key:'carbon', label:'Carbon Fiber', fn:p=>p.name.toUpperCase().includes('CARBON')}, 4781 {key:'alum', label:'Aluminum', fn:p=>p.name.toUpperCase().includes('ALUMINUM')}, 4782 ], 4783 compat:p=>{ 4784 const b=getBarrel(); 4785 if(!b) return true; 4786 return p.hgLength<=maxHGLength(b); 4787 }, 4788 autoSelect:false, 4789 }, 4790 { 4791 id:'upper', label:'Upper', icon:'\uD83D\uDD27', optional:false, 4792 title:'Upper Receiver', 4793 desc:'Forged 7075-T6 aluminum, Type III hard-coat anodized. Compatible with all AR15 barrels shown here.', 4794 products:()=>CATALOG.uppers, 4795 filters:[], 4796 compat:p=>{ 4797 const b=getBarrel(); 4798 if(!b) return true; 4799 const is338Upper=p.sku==='UR-FAX-F-A-C-338'; 4800 const isBBUpper=p.sku==='UR-FAX-F-A-C-BB'; 4801 const bigBoreCals=['.458 SOCOM','.450 Bushmaster','400 Legend']; 4802 if(b.caliber==='338 ARC') return is338Upper; 4803 if(bigBoreCals.includes(b.caliber)) return isBBUpper; 4804 if(b.caliber==='350 Legend') return !is338Upper; 4805 return !is338Upper&&!isBBUpper; 4806 }, 4807 autoSelect:true, 4808 }, 4809 { 4810 id:'bcg', label:'BCG', icon:'\u26A1', optional:false, 4811 title:'Bolt Carrier Group', 4812 desc:()=>{ 4813 const b=getBarrel(); 4814 if(!b) return 'All BCGs shown \u2014 select a barrel to filter by caliber.'; 4815 return `Showing BCGs compatible with ${b.caliber}. Caliber-mismatched options are hidden.`; 4816 }, 4817 products:()=>CATALOG.bcgs, 4818 filters:[ 4819 {key:'all', label:'All', fn:()=>true}, 4820 {key:'gunner', label:'Gunner LW', fn:p=>p.name.toUpperCase().includes('GUNNER')}, 4821 {key:'fullmass', label:'Full Mass', fn:p=>!p.name.toUpperCase().includes('GUNNER')}, 4822 {key:'chrome', label:'Chrome', fn:p=>p.name.toUpperCase().includes('CHROME')}, 4823 {key:'tin', label:'TiN', fn:p=>p.name.toUpperCase().includes('TIN')}, 4824 {key:'ncr', label:'NCR', fn:p=>p.name.toUpperCase().includes('CHAMELEON')}, 4825 ], 4826 compat:p=>{ 4827 const b=getBarrel(); 4828 if(!b) return true; 4829 if(b.caliber==='9mm') return p.caliber==='9mm'; 4830 if(b.caliber==='10mm') return p.caliber==='10mm'; 4831 return (p.compatCalibers||[]).includes(b.caliber); 4832 }, 4833 autoSelect:false, 4834 }, 4835 { 4836 id:'chargingHandle', label:'Charging Handle', icon:'\uD83D\uDD04', optional:false, 4837 title:'Charging Handle', 4838 desc:'Compatible with all AR15 uppers. Ambidextrous options recommended for suppressed or high-round-count builds.', 4839 products:()=>CATALOG.chargingHandles, 4840 filters:[], 4841 compat:()=>true, 4842 autoSelect:false, 4843 }, 4844 { 4845 id:'muzzleDevice', label:'Muzzle Device', icon:'\uD83D\uDCA5', optional:true, 4846 title:'Muzzle Device', 4847 desc:()=>{ 4848 const b=getBarrel(); 4849 if(!b) return 'All muzzle devices shown \u2014 select a barrel to filter by thread pitch.'; 4850 if(b.hasIntegralMuzzle) return 'Integral muzzle device is already installed on this barrel.'; 4851 return `Your barrel has ${b.threadPitch} threads. Only compatible devices are shown.`; 4852 }, 4853 products:()=>CATALOG.muzzleDevices, 4854 filters:[ 4855 {key:'all', label:'All', fn:()=>true}, 4856 {key:'fh', label:'Flash Hiders', fn:p=>p.name.toUpperCase().includes('FLASH HIDER')}, 4857 {key:'brake', label:'Muzzle Brakes',fn:p=>p.name.toUpperCase().includes('BRAKE')}, 4858 ], 4859 compat:p=>{ 4860 const b=getBarrel(); 4861 if(!b) return true; 4862 if(b.hasIntegralMuzzle) return false; 4863 return p.threadPitch===b.threadPitch; 4864 }, 4865 autoSelect:false, 4866 }, 4867 { 4868 id:'suppressor', label:'Suppressor', icon:'\uD83D\uDD07', optional:true, 4869 title:'Suppressor (Optional)', 4870 desc:'NFA item \u2014 the purchase process and any applicable tax/transfer are handled at checkout. Showing options compatible with your barrel\'s thread pitch.', 4871 products:()=>CATALOG.suppressors, 4872 filters:[ 4873 {key:'all', label:'All', fn:()=>true}, 4874 {key:'sentry', label:'Harmonix\u00AE Sentry',fn:p=>p.name.toUpperCase().includes('SENTRY')}, 4875 {key:'ion', label:'Harmonix\u00AE ION', fn:p=>p.name.toUpperCase().includes('ION')}, 4876 ], 4877 compat:p=>{ 4878 const b=getBarrel(); 4879 if(!b) return true; 4880 if(b.hasIntegralMuzzle) return false;
4881 if(p.calCompat&&p.calCompat.length&&!p.calCompat.includes(b.caliber)) return false; 4882 return (p.compatThreads||[]).includes(b.threadPitch); 4883 }, 4884 autoSelect:false, 4885 }, 4886 { 4887 id:'accessory', label:'Accessories', icon:'\uD83D\uDEE0\uFE0F', optional:true, 4888 title:'Accessories (Optional)', 4889 desc:'Add-ons and upgrades for your build. Select any optional accessory to include it in your cart.', 4890 products:()=>CATALOG.accessories, 4891 filters:[ 4892 {key:'all', label:'All', fn:()=>true}, 4893 {key:'Sights & Optics', label:'Sights & Optics', fn:p=>p.accGroup==='Sights & Optics'}, 4894 {key:'Optic Mounts', label:'Optic Mounts', fn:p=>p.accGroup==='Optic Mounts'}, 4895 {key:'Lights', label:'Lights', fn:p=>p.accGroup==='Lights'}, 4896 {key:'Grips & Stocks', label:'Grips & Stocks', fn:p=>p.accGroup==='Grips & Stocks'}, 4897 {key:'Triggers', label:'Triggers', fn:p=>p.accGroup==='Triggers'}, 4898 {key:'Safety Selectors', label:'Safety Selectors', fn:p=>p.accGroup==='Safety Selectors'}, 4899 {key:'Magazine Catches', label:'Magazine Catches', fn:p=>p.accGroup==='Magazine Catches'}, 4900 {key:'Slings & Sling Mounts',label:'Slings & Sling Mounts',fn:p=>p.accGroup==='Slings & Sling Mounts'}, 4901 {key:'Cases', label:'Cases', fn:p=>p.accGroup==='Cases'}, 4902 {key:'Tools', label:'Tools', fn:p=>p.accGroup==='Tools'}, 4903 {key:'Misc Parts', label:'Misc Parts', fn:p=>p.accGroup==='Misc Parts'||!p.accGroup}, 4904 ], 4905 compat:()=>true, 4906 autoSelect:false, 4907 }, 4908]; 4909 4910let currentStep=0; 4911let selections={}; 4912let activeFilters={}; 4913let autoSkipped=new Set(); 4914 4915function computeAutoSkips(){ 4916 autoSkipped.clear(); 4917 for(const s of STEPS){ 4918 if(getAutoSkip(s.id)) autoSkipped.add(s.id); 4919 } 4920} 4921 4922function fmtPrice(price,sale){ 4923 if(sale>0) return `<span class="card-price">$${sale.toFixed(2)}<span class="orig">$${price.toFixed(2)}</span></span>`; 4924 if(price>0) return `<span class="card-price">$${price.toFixed(2)}</span>`; 4925 return ''; 4926} 4927 4928function invBadge(inv){ 4929 if(inv>=10) return `<span class="badge in-stock">In Stock</span>`; 4930 if(inv>=1) return `<span class="badge low-stock">Low \u2014 ${inv} left</span>`; 4931 return `<span class="badge oos-badge">Out of Stock</span>`; 4932} 4933 4934function renderNav(){ 4935 const nav=document.getElementById('step-nav'); 4936 nav.innerHTML=STEPS.map((s,i)=>{ 4937 const skip=autoSkipped.has(s.id); 4938 const done=!skip&&(selections[s.id]!=null||(s.optional&&i<currentStep)); 4939 const active=i===currentStep; 4940 return `<li><button type="button" class="step-btn ${active?'active':''} ${done&&!active?'done':''} ${skip&&!active?'auto-skipped':''}" 4941 data-action="goto" data-idx="${i}"> 4942 <span class="step-num">${String(i+1).padStart(2,'0')}</span>${s.label} 4943 </button></li>`; 4944 }).join(''); 4945} 4946 4947function renderMain(){ 4948 const step=STEPS[currentStep]; 4949 const autoSkip=getAutoSkip(step.id); 4950 const filterKey=activeFilters[step.id]||'all'; 4951 const desc=typeof step.desc==='function'?step.desc():step.desc; 4952 const isLast=currentStep===STEPS.length-1; 4953 4954 let html=`<div class="step-header"><h2>${step.title}</h2><p>${desc}</p></div>`; 4955 4956 4957 const prevItems=STEPS.slice(0,currentStep).filter(s=>selections[s.id]); 4958 if(prevItems.length>0){ 4959 html+=`<div class="prev-selections">${prevItems.map((s,i)=>{ 4960 const sel=selections[s.id]; 4961 const idx=STEPS.findIndex(x=>x.id===s.id); 4962 return `<div class="prev-sel-item" data-action="goto" data-idx="${idx}"> 4963 <img src="${sel.imageUrl}" alt="" onerror="this.style.display='none'"> 4964 <div class="prev-sel-info"> 4965 <span class="prev-sel-label">${s.label}</span> 4966 <span class="prev-sel-name" title="${sel.name}">${sel.name}</span> 4967 </div> 4968 <span class="prev-sel-edit">Edit</span> 4969 </div>`; 4970 }).join('')}</div>`; 4971 } 4972 4973 if(autoSkip){ 4974 4975 html+=`<div class="skip-card"> 4976 <div class="skip-icon">${autoSkip.icon}</div> 4977 <div> 4978 <h3>${autoSkip.title}</h3> 4979 <p>${autoSkip.body}</p> 4980 </div> 4981 </div>`; 4982 html+=`<div class="step-actions"> 4983 ${currentStep>0?`<button type="button" class="btn-back" data-action="goto" data-idx="${currentStep-1}">\u2190 Back</button>`:''} 4984 <button type="button" class="btn-next" data-action="nav"> 4985 ${isLast?'Finish Build':'Continue \u2192'} 4986 </button> 4987 </div>`; 4988 document.getElementById('main-content').innerHTML=html; 4989 return; 4990 } 4991 4992 4993 const activeFn=(step.filters.find(f=>f.key===filterKey)||{fn:()=>true}).fn; 4994 let lenKey=activeFilters[step.id+':len']||'all'; 4995 let activeLenFn=step.lengthFilters?(step.lengthFilters.find(f=>f.key===lenKey)||{fn:()=>true}).fn:()=>true; 4996 4997 4998 if(step.lengthFilters&&lenKey!=='all'&&!step.products().some(p=>
4998activeFn(p)&&activeLenFn(p))){ 4999 lenKey='all'; activeFilters[step.id+':len']='all'; activeLenFn=()=>true; 5000 } 5001 5002 5003 if(step.filters.length>1){ 5004 const filterBarLabel=step.id==='accessory'?'Category:':'Caliber:'; 5005 html+=`<div class="filter-bar"><span class="filter-bar-label">${filterBarLabel}</span>${step.filters.map(f=>{ 5006 const avail=f.key==='all'||step.products().some(p=>f.fn(p)&&activeLenFn(p)); 5007 return `<button class="filter-btn ${filterKey===f.key?'active':''}${!avail?' filter-unavail':''}" data-action="filter" data-step="${step.id}" data-fkey="${f.key}">${f.label}</button>`; 5008 }).join('')}</div>`; 5009 } 5010 if(step.lengthFilters){ 5011 html+=`<div class="filter-bar"><span class="filter-bar-label">Length:</span>${step.lengthFilters.map(f=>{ 5012 const avail=f.key==='all'||step.products().some(p=>activeFn(p)&&f.fn(p)); 5013 return `<button class="filter-btn ${lenKey===f.key?'active':''}${!avail?' filter-unavail':''}" data-action="filter" data-step="${step.id}" data-fkey="${f.key}" data-fgroup="length">${f.label}</button>`; 5014 }).join('')}</div>`; 5015 } 5016 let visCount=0; 5017 let cardsHtml=''; 5018 5019 const sortedProducts=step.products().slice().sort((a,b)=>(b.inventory>0?1:0)-(a.inventory>0?1:0)); 5020 5021 if(step.id==='accessory'){ 5022 const GROUP_ORDER=['Sights & Optics','Optic Mounts','Lights','Grips & Stocks','Triggers', 5023 'Safety Selectors','Magazine Catches','Slings & Sling Mounts','Cases','Tools','Misc Parts']; 5024 5025 function makeAccCard(p){ 5026 const isCompat=step.compat(p); 5027 const isOOS=p.inventory<=0; 5028 const isSel=(selections['accessory']||[]).some(function(a){return a.id===p.id;}); 5029 const hidden=!activeFn(p)||!activeLenFn(p); 5030 if(!hidden&&(isCompat||isSel)) visCount++; 5031 let cls='product-card'; 5032 if(isSel) cls+=' selected'; 5033 if(!isCompat&&!isSel) cls+=' incompatible'; 5034 else if(isOOS&&!isSel) cls+=' oos'; 5035 if(hidden) cls+=' hidden'; 5036 return `<div class="${cls}" data-id="${p.id}" data-action="select" data-step="${step.id}" data-pid="${p.id}"> 5037 <div class="selected-check">\u2713</div> 5038 <div class="card-img"><img src="${p.imageUrl}" alt="${p.name}" loading="lazy" onerror="this.parentNode.style.background='#1b1e23'"></div> 5039 <div class="card-body"> 5040 <div class="card-name">${p.name}</div> 5041 <div class="card-sku">${p.sku}</div> 5042 <div class="card-footer">${fmtPrice(p.price,p.salePrice||0)}${invBadge(p.inventory)}</div> 5043 <button type="button" class="select-btn">${isSel?'\u2713 Selected':'Select'}</button> 5044 </div> 5045 </div>`; 5046 } 5047 5048 if(filterKey==='all'){ 5049 5050 const grouped={}; 5051 for(const p of sortedProducts){ 5052 const g=p.accGroup||'Misc Parts'; 5053 if(!grouped[g]) grouped[g]=[]; 5054 grouped[g].push(p); 5055 } 5056 const orderedGroups=[...GROUP_ORDER,...Object.keys(grouped).filter(g=>!GROUP_ORDER.includes(g))]; 5057 for(const group of orderedGroups){ 5058 const gps=grouped[group]; 5059 if(!gps||gps.length===0) continue; 5060 cardsHtml+=`<div class="acc-group"> 5061 <h3 class="acc-group-header">${group}</h3> 5062 <div class="product-grid">${gps.map(makeAccCard).join('')}</div> 5063 </div>`; 5064 } 5065 } else { 5066 5067 for(const p of sortedProducts) cardsHtml+=makeAccCard(p); 5068 } 5069 } else { 5070 for(const p of sortedProducts){ 5071 const isCompat=step.compat(p); 5072 const isOOS=p.inventory<=0; 5073 const isSel=(selections[step.id]||{}).id===p.id; 5074 const hidden=!activeFn(p)||!activeLenFn(p); 5075 if(!hidden && (isCompat || isSel)) visCount++; 5076 5077 let cls='product-card'; 5078 if(isSel) cls+=' selected'; 5079 if(!isCompat&&!isSel) cls+=' incompatible'; 5080 else if(isOOS&&!isSel) cls+=' oos'; 5081 if(hidden) cls+=' hidden'; 5082 5083 5084 let compatNote=''; 5085 if(step.id==='gasBlock'&&p.gbDiameter){ 5086 compatNote=`<div class="compat-note">Fits .${p.gbDiameter} journal barrels</div>`; 5087 } 5088 5089 cardsHtml+=`<div class="${cls}" data-id="${p.id}" data-action="select" data-step="${step.id}" data-pid="${p.id}"> 5090 <div class="selected-check">\u2713</div> 5091 <div class="card-img"><img src="${p.imageUrl}" alt="${p.name}" loading="lazy" onerror="this.parentNode.style.background='#1b1e23'"></div> 5092 <div class="card-body"> 5093 <div class="card-name">${p.name}</div> 5094 <div class="card-sku">${p.sku}</div> 5095 <div class="card-footer">${fmtPrice(p.price,p.salePrice||0)}${invBadge(p.inventory)}</div> 5096 ${compatNote} 5097 <button type="button" class="select-btn">${isSel?'\u2713 Selected':'Select'}</button> 5098 </div> 5099 </div>`; 5100 } 5101 } 5102 5103 if(visCount===0){ 5104 cardsHtml=`<p class="no-results">No in-stock compatible products match this filter. <button type="button" class="filter-btn" data-action="filter" data-step="${step.id}" data-fkey="all">Show All</button></p>`; 5105 } 5106 5107 const nextOk=selections[step.id]||(Array.isArray(selections[step.id])?selections[step.id].length>0:false)||step.optional; 5108 const actionsHtml=` 5109 ${currentStep>0?`<button type="button" class="btn-back" data-action="goto" data-idx="${currentStep-1}">\u2190 Back</button>`:''} 5110 <button type="button" class="btn-next" ${nextOk?'':'disabled'} data-action="nav"> 5111 ${isLast?'Finish Build':'Next Step \u2192'} 5112 </button> 5113 ${!isLast?`<button type="button" class="btn-skip" data-action="skip">Skip This Step</button>`:''}`; 5114 5115 html+=`<div class="step-actions step-actions--top">${actionsHtml}</div>`; 5116 html+=(step.id==='accessory'&&filterKey==='all')?`<div class="acc-groups">${cardsHtml}</div>`:`<div class="product-grid">${cardsHtml}</div>`; 5117 5118 html+=`<div class="step-actions">${actionsHtml}</div>`; 5119 5120 document.getElementById('main-content').innerHTML=html; 5121} 5122
5123function renderSidebar(){ 5124 let html=''; 5125 let total=0; 5126 for(const step of STEPS){ 5127 const sel=selections[step.id]; 5128 const skipped=autoSkipped.has(step.id); 5129 if(step.id==='accessory'){ 5130 const accSels=selections['accessory']||[]; 5131 if(accSels.length>0){ 5132 for(const accSel of accSels){ 5133 const price=accSel.salePrice>0?accSel.salePrice:accSel.price; 5134 if(price) total+=price; 5135 html+=`<div class="build-item"> 5136 <img src="${accSel.imageUrl}" alt="" onerror="this.style.display='none'"> 5137 <div class="item-info"> 5138 <div class="item-step">${step.label}</div> 5139 <div class="item-name" title="${accSel.name}">${accSel.name}</div> 5140 ${price?`<div class="item-price">$${price.toFixed(2)}</div>`:''} 5141 </div> 5142 <button type="button" class="remove-btn" data-action="remove" data-step="accessory" data-pid="${accSel.id}" title="Remove">\u00D7</button> 5143 </div>`; 5144 } 5145 } else { 5146 html+=`<div class="build-item empty"> 5147 <div class="item-placeholder">${step.icon}</div> 5148 <div class="item-info"> 5149 <div class="item-step">${step.label}</div> 5150 <div class="item-name" style="color:var(--line)">Optional</div> 5151 </div> 5152 </div>`; 5153 } 5154 } else if(sel){ 5155 const price=sel.salePrice>0?sel.salePrice:sel.price; 5156 if(price) total+=price; 5157 html+=`<div class="build-item"> 5158 <img src="${sel.imageUrl}" alt="" onerror="this.style.display='none'"> 5159 <div class="item-info"> 5160 <div class="item-step">${step.label}</div> 5161 <div class="item-name" title="${sel.name}">${sel.name}</div> 5162 ${price?`<div class="item-price">$${price.toFixed(2)}</div>`:''} 5163 </div> 5164 <button type="button" class="remove-btn" data-action="remove" data-step="${step.id}" title="Remove">\u00D7</button> 5165 </div>`; 5166 } else if(skipped){ 5167 html+=`<div class="build-item auto-skipped-item"> 5168 <div class="item-placeholder" style="font-size:12px;color:var(--muted)">N/A</div> 5169 <div class="item-info"> 5170 <div class="item-step">${step.label}</div> 5171 <div class="item-name" style="color:var(--muted);font-style:italic">Auto-skipped</div> 5172 </div> 5173 </div>`; 5174 } else { 5175 html+=`<div class="build-item empty"> 5176 <div class="item-placeholder">${step.icon}</div> 5177 <div class="item-info"> 5178 <div class="item-step">${step.label}</div> 5179 <div class="item-name" style="color:var(--line)">${step.optional?'Optional':'Not selected'}</div> 5180 </div> 5181 </div>`; 5182 } 5183 } 5184 document.getElementById('build-items').innerHTML=html; 5185 document.getElementById('total-display').textContent=`$${total.toFixed(2)}`; 5186 const hasBuild=selections['barrel']&&selections['bcg']; 5187 document.getElementById('cart-btn').disabled=!hasBuild; 5188} 5189 5190function attachDirectListeners(){ 5191 var els=document.querySelectorAll('[data-action]'); 5192 for(var i=0;i<els.length;i++){ 5193 (function(el){ 5194 el.onclick=function(e){ 5195 if(e&&e.preventDefault)e.preventDefault(); 5196 if(e&&e.stopPropagation)e.stopPropagation(); 5197 handleAction(el,e||window.event); 5198 }; 5199 })(els[i]); 5200 } 5201 var cartBtn=document.getElementById('cart-btn'); 5202 if(cartBtn){ 5203 cartBtn.onclick=function(e){ 5204 if(e&&e.preventDefault)e.preventDefault(); 5205 if(!cartBtn.disabled) startAddToCart(); 5206 }; 5207 } 5208} 5209function render(){ 5210 computeAutoSkips(); 5211 try{renderNav();}catch(e){console.warn('renderNav error:',e);} 5212 try{renderMain();}catch(e){console.warn('renderMain error:',e);} 5213 try{renderSidebar();}catch(e){console.warn('renderSidebar error:',e);} 5214 attachDirectListeners(); 5215} 5216 5217function selectProduct(stepId,productId){ 5218 const step=STEPS.find(s=>s.id===stepId); 5219 const product=step.products().find(p=>p.id===productId); 5220 if(!product||product.inventory<=0) return; 5221 if(!step.compat(product)) return; 5222 selections[stepId]=product; 5223 5224 5225 if(stepId==='barrel'){ 5226 const dependents=['gasTube','gasBlock','bcg','handguard','muzzleDevice','suppressor'];
5227 dependents.forEach(id=>delete selections[id]); 5228 } 5229 5230 const idx=STEPS.findIndex(s=>s.id===stepId); 5231 render(); 5232 5233 5234 if(idx<STEPS.length-1){ 5235 setTimeout(()=>{ 5236 currentStep=idx+1; 5237 5238 while(currentStep<STEPS.length-1&&getAutoSkip(STEPS[currentStep].id)){ 5239 currentStep++; 5240 } 5241 5242 const next=STEPS[currentStep]; 5243 if(next.autoSelect){ 5244 const opts=next.products().filter(p=>p.inventory>0&&next.compat(p)); 5245 if(opts.length===1) selections[next.id]=opts[0]; 5246 } 5247 render(); 5248 scrollToConfig(); 5249 },350); 5250 } 5251} 5252 5253function removeSelection(stepId){ 5254 delete selections[stepId]; 5255 if(stepId==='barrel'){ 5256 ['gasTube','gasBlock','bcg','handguard','muzzleDevice','suppressor'].forEach(id=>delete selections[id]); 5257 } 5258 render(); 5259} 5260 5261function goToStep(idx){ currentStep=idx; render(); scrollToConfig(); } 5262 5263function nextStep(){ 5264 if(currentStep<STEPS.length-1){ 5265 currentStep++; 5266 render(); 5267 scrollToConfig(); 5268 } 5269} 5270 5271function skipStep(){ 5272 delete selections[STEPS[currentStep].id]; 5273 nextStep(); 5274} 5275 5276function setFilter(stepId,key){ activeFilters[stepId]=key; render(); } 5277 5278function finishBuild(){ startAddToCart(); } 5279 5280function showWelcomeModal(){
5281 try{ if(localStorage.getItem('faxon_welcome_seen')) return; }catch(e){} 5282 var m=document.createElement('div'); 5283 m.id='faxon-welcome'; 5284 m.innerHTML= 5285 '<div class="welcome-backdrop"></div>'+ 5286 '<div class="welcome-dialog">'+ 5287 '<div class="welcome-kicker"><img src="https://cdn11.bigcommerce.com/s-f1hwux/images/stencil/original/image-manager/faxon-x-logo-white.png?t=1780661121" alt="Faxon Firearms" style="height:80px;margin-bottom:4px"></div>'+ 5288 '<h2 class="welcome-title">AR15 Upper Builder</h2>'+ 5289 '<p class="welcome-body">Build your perfect AR15 upper step by step. Start with a barrel and we\'ll guide you through every compatible component \u2014 gas system, bolt carrier group, handguard, upper receiver, muzzle device, suppressor, and accessories.</p>'+ 5290 '<p class="welcome-body">Compatible options update automatically based on your selections. Out-of-stock items are shown greyed out so you can see the full lineup.</p>'+ 5291 '<div class="welcome-steps">'+ 5292 '<span class="welcome-step-chip">Barrel</span>'+ 5293 '<span class="welcome-step-chip">Gas Tube</span>'+ 5294 '<span class="welcome-step-chip">Gas Block</span>'+ 5295 '<span class="welcome-step-chip">BCG</span>'+ 5296 '<span class="welcome-step-chip">Handguard</span>'+ 5297 '<span class="welcome-step-chip">Upper Receiver</span>'+ 5298 '<span class="welcome-step-chip">Charging Handle</span>'+ 5299 '<span class="welcome-step-chip">Muzzle Device</span>'+ 5300 '<span class="welcome-step-chip">Suppressor</span>'+ 5301 '<span class="welcome-step-chip">Accessories</span>'+ 5302 '</div>'+ 5303 '<button type="button" class="welcome-btn" id="welcome-start">Start Building \u2192</button>'+ 5304 '</div>'; 5305 document.body.appendChild(m); 5306 m.style.display='flex'; 5307 function dismiss(){ 5308 m.style.display='none';
5309 try{localStorage.setItem('faxon_welcome_seen','1');}catch(e){} 5310 } 5311 document.getElementById('welcome-start').onclick=dismiss; 5312 m.querySelector('.welcome-backdrop').onclick=dismiss; 5313} 5314 5315var HEADSPACE_ID=432; 5316 5317function shouldShowHeadspaceUpsell(){ 5318 var barrel=selections['barrel']; 5319 var bcg=selections['bcg']; 5320 if(!barrel||!bcg) return false; 5321 return barrel.caliber!=='9mm'&&barrel.caliber!=='10mm'; 5322} 5323 5324function getOrCreateHsModal(){ 5325 var m=document.getElementById('hs-modal'); 5326 if(m) return m; 5327 m=document.createElement('div'); 5328 m.id='hs-modal'; 5329 m.innerHTML= 5330 '<div class="hs-backdrop"></div>'+ 5331 '<div class="hs-dialog">'+ 5332 '<div class="hs-icon">\uD83C\uDFAF</div>'+ 5333 '<h2 class="hs-title">Headspace Match Service</h2>'+ 5334 '<p class="hs-body">Faxon will precision headspace-match your bolt carrier group to your barrel, then laser engrave a matching number on both parts \u2014 ensuring optimal headspace for maximum accuracy and reliability.</p>'+ 5335 '<p class="hs-note">Adds 3\u20135 business days to shipping time.</p>'+ 5336 '<div class="hs-price">+$25.00</div>'+ 5337 '<div class="hs-actions">'+ 5338 '<button type="button" id="hs-yes" class="hs-btn-yes">Yes, add headspace matching \u2014 $25</button>'+ 5339 '<button type="button" id="hs-no" class="hs-btn-no">No thanks, skip this</button>'+ 5340 '</div>'+ 5341 '</div>'; 5342 document.body.appendChild(m); 5343 return m; 5344} 5345 5346function showHeadspaceUpsell(callback){ 5347 var m=getOrCreateHsModal(); 5348 m.style.display='flex'; 5349 document.getElementById('hs-yes').onclick=function(){m.style.display='none';callback(true);}; 5350 document.getElementById('hs-no').onclick=function(){m.style.display='none';callback(false);}; 5351 m.querySelector('.hs-backdrop').onclick=function(){m.style.display='none';callback(false);}; 5352} 5353 5354function startAddToCart(){ 5355 if(shouldShowHeadspaceUpsell()){ 5356 showHeadspaceUpsell(function(addMatch){ 5357 addBuildToCart(addMatch?HEADSPACE_ID:null); 5358 }); 5359 } else { 5360 addBuildToCart(null); 5361 } 5362} 5363 5364function addBuildToCart(extraProductId){ 5365 var lineItems=[]; 5366 Object.entries(selections).forEach(function(entry){ 5367 var sid=entry[0],sel=entry[1]; 5368 if(Array.isArray(sel)){ 5369 sel.forEach(function(p){if(p&&p.id)lineItems.push({productId:p.id,quantity:1});}); 5370 } else if(sel&&sel.id){ 5371 lineItems.push({productId:sel.id,quantity:1}); 5372 } 5373 }); 5374 if(extraProductId) lineItems.push({productId:extraProductId,quantity:1}); 5375 console.log('[Faxon] addBuildToCart called, items:',lineItems.length,lineItems.map(function(i){return i.productId;})); 5376 if(!lineItems.length){console.warn('[Faxon] no line items');return;} 5377 5378 var sideBtn=document.getElementById('cart-btn'); 5379 var status=document.getElementById('cart-status'); 5380 5381 var finishBtn=document.querySelector('#main-content [data-action="nav"]'); 5382 var origFinish=finishBtn?finishBtn.textContent:''; 5383 5384 if(finishBtn){finishBtn.textContent='Adding to Cart\u2026';finishBtn.disabled=true;} 5385 if(sideBtn){sideBtn.textContent='Adding\u2026';sideBtn.disabled=true;} 5386 if(status){status.textContent='';status.style.color='';} 5387 5388 function showError(msg){ 5389 console.error('[Faxon] cart error:',msg); 5390 if(finishBtn){finishBtn.textContent=origFinish;finishBtn.disabled=false;} 5391 if(sideBtn){sideBtn.textContent='Add Build to Cart';sideBtn.disabled=false;} 5392 if(status){status.textContent='Cart error \u2014 see details below.';status.style.color='#c0392b';} 5393 var mc=document.getElementById('main-content'); 5394 if(mc){ 5395 var old=mc.querySelector('.cart-error-msg');if(old)old.remove(); 5396 var d=document.createElement('div'); 5397 d.className='cart-error-msg'; 5398 d.style.cssText='color:#ffaaaa;background:#2a0808;border:1px solid #c0392b;border-radius:4px;padding:14px;margin-top:16px;font-size:13px;line-height:1.5;'; 5399 d.innerHTML='<strong>Could not add to cart:</strong> '+msg+'<br><small>Check browser console for details. You can also use the individual product links above.</small>'; 5400 mc.appendChild(d); 5401 } 5402 } 5403 5404 fetch('/api/storefront/carts',{credentials:'same-origin'}) 5405 .then(function(r){return r.ok?r.json():[];}) 5406 .then(function(carts){ 5407 var cartId=(Array.isArray(carts)&&carts.length)?carts[0].id:null; 5408 var url=cartId?('/api/storefront/carts/'+cartId+'/items'):'/api/storefront/carts'; 5409 return fetch(url,{method:'POST',credentials:'same-origin', 5410 headers:{'Content-Type':'application/json'},body:JSON.stringify({lineItems:lineItems})}); 5411 }) 5412 .then(function(res){ 5413 if(!res.ok) return res.text().then(function(t){throw new Error(res.status+' '+res.statusText+': '+t);}); 5414 if(status){status.textContent='\u2713 '+lineItems.length+' items added \u2014 redirecting\u2026';status.style.color='#4caf50';} 5415 if(finishBtn){finishBtn.textContent='\u2713 Added!';} 5416 var dest='/cart.php'+(CHECKOUT_COUPON?'?couponcode='+encodeURIComponent(CHECKOUT_COUPON):''); 5417 setTimeout(function(){window.location.href=dest;},800); 5418 }) 5419 .catch(function(err){ 5420 showError(err.message||String(err)); 5421 }); 5422} 5423 5424var _handling=false; 5425function handleAction(el,e){ 5426 if(_handling) return; 5427 _handling=true; 5428 setTimeout(function(){_handling=false;},300); 5429 if(e&&e.preventDefault) e.preventDefault(); 5430 var action=el.dataset.action; 5431 5432 if(action==='select'){ 5433 var step=STEPS.find(function(s){return s.id===el.dataset.step;}); 5434 if(!step) return; 5435 var pid=parseInt(el.dataset.pid); 5436 var product=step.products().find(function(p){return p.id===pid;}); 5437 if(!product||product.inventory<=0) return; 5438 if(!step.compat(product)) return; 5439 if(el.dataset.step==='accessory'){ 5440 var acc=(selections['accessory']||[]).slice(); 5441 var aidx=acc.findIndex(function(p){return p.id===pid;}); 5442 if(aidx>=0) acc.splice(aidx,1); else acc.push(product); 5443 selections['accessory']=acc; 5444 render(); 5445 return; 5446 } 5447 selections[el.dataset.step]=product; 5448 if(el.dataset.step==='barrel'){ 5449 ['gasTube','gasBlock','bcg','handguard','muzzleDevice','suppressor'] 5450 .forEach(function(id){delete selections[id];}); 5451 }
5452 var idx=STEPS.findIndex(function(s){return s.id===el.dataset.step;}); 5453 render(); 5454 if(idx<STEPS.length-1){ 5455 setTimeout(function(){ 5456 currentStep=idx+1; 5457 while(currentStep<STEPS.length-1&&getAutoSkip(STEPS[currentStep].id)) currentStep++; 5458 var next=STEPS[currentStep]; 5459 if(next.autoSelect){ 5460 var opts=next.products().filter(function(p){return p.inventory>0&&next.compat(p);}); 5461 if(opts.length===1) selections[next.id]=opts[0]; 5462 } 5463 render(); 5464 scrollToConfig(); 5465 },350); 5466 } 5467 5468 } else if(action==='nav'){ 5469 if(el.disabled||el.hasAttribute('disabled')) return; 5470 var isLast=currentStep===STEPS.length-1; 5471 if(isLast) startAddToCart(); 5472 else{ currentStep++; render(); scrollToConfig(); } 5473 5474 } else if(action==='skip'){ 5475 delete selections[STEPS[currentStep].id]; 5476 currentStep++; render(); scrollToConfig(); 5477 5478 } else if(action==='remove'){ 5479 var sid=el.dataset.step; 5480 if(sid==='accessory'){ 5481 var rpid=parseInt(el.dataset.pid); 5482 selections['accessory']=(selections['accessory']||[]).filter(function(p){return p.id!==rpid;}); 5483 } else { 5484 delete selections[sid]; 5485 if(sid==='barrel'){ 5486 ['gasTube','gasBlock','bcg','handguard','muzzleDevice','suppressor'] 5487 .forEach(function(id){delete selections[id];}); 5488 } 5489 } 5490 render(); 5491 5492 } else if(action==='goto'){ 5493 currentStep=parseInt(el.dataset.idx); render(); scrollToConfig(); 5494 5495 } else if(action==='filter'){ 5496 if(el.dataset.fgroup==='length') activeFilters[el.dataset.step+':len']=el.dataset.fkey; 5497 else activeFilters[el.dataset.step]=el.dataset.fkey; 5498 render(); 5499 } 5500} 5501 5502(function(){ 5503 function dispatch(el,e){ 5504 if(!el||!el.dataset||!el.dataset.action) return; 5505 handleAction(el,e); 5506 } 5507 if(typeof jQuery!=='undefined'){ 5508 5509 jQuery(document).on('click','[data-action]',function(e){ 5510 dispatch(this,e); 5511 }); 5512 jQuery(document).on('mousedown','[data-action]',function(e){ 5513 dispatch(this,e); 5514 }); 5515 } else { 5516 5517 document.addEventListener('click',function(e){ 5518 var el=e.target&&e.target.closest?e.target.closest('[data-action]'):null; 5519 dispatch(el,e); 5520 },true); 5521 document.addEventListener('mousedown',function(e){ 5522 var el=e.target&&e.target.closest?e.target.closest('[data-action]'):null; 5523 dispatch(el,e); 5524 },true); 5525 } 5526})(); 5527 5528 5529 showWelcomeModal(); 5530 const loadingEl = document.getElementById('faxon-loading'); 5531 fetchCatalog().then(function(cat){ 5532 CATALOG = cat; 5533 if(loadingEl) loadingEl.style.display='none'; 5534 render(); 5535 }).catch(function(err){ 5536 console.error('[Faxon] Catalog fetch failed:',err); 5537 if(loadingEl) loadingEl.innerHTML='<p style="color:#ffaaaa;font-family:sans-serif;padding:20px">Failed to load product catalog. Please refresh the page.</p>'; 5538 }); 5539 } 5540 5541
5542 if(document.readyState==='loading'){ 5543 document.addEventListener('DOMContentLoaded',function(){waitForRoot(20);}); 5544 } else { 5545 waitForRoot(20); 5546 } 5547})(); 5548</script>
5548<script> 5549/* FAXON DEALER - ORDER FORM (ship now + backorder, one purchase order) 5550 * Script Manager: Footer | All Pages | Script | Essential. Groups , dryRun false. 5551 * Minified (terser). Readable source: storefront/faxon-dealer-backorder.js 5552 * Built from faxon-dealer-backorder.js sha256 9a82c03310599ed389d75203026876347c22fa4d0f22f42e7aaa421ea1c38ca0 5553 * See DEALER-BACKORDER.md. No inbound traffic: submissions are wishlists on the dealer's account. */ 5554!function(){"use strict";var e={groupIds:[],storefrontToken:"eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NiJ9.eyJjaWQiOlsxXSwiY29ycyI6WyJodHRwczovL3d3dy5mYXhvbmZpcmVhcm1zLmNvbSIsImh0dHBzOi8vZmF4b25maXJlYXJtcy5jb20iXSwiZWF0IjoxODIxNjE4NzIwLCJpYXQiOjE3OTAwODI3MjEsImlzcyI6IkJDIiwianRpIjoiYjg4ZGY0ZTAtY2FjZC00MThiLTg0ZDItMTRjNjBhM2JlNDFhIiwic2lkIjo4MzYxMDAsInN1YiI6ImdwMHBsOWZhNjd0cGQ5Z2JycjVtM2tiampoeDNybmsiLCJzdWJfdHlwZSI6MiwidG9rZW5fdHlwZSI6MX0.IEt8m1dldB-MSb1BchLXLKKvj3WiaMHMSRd1kLcAMBcOC97tDldL-gt-zT3DZ3O0-jsmnhegZfbhG-Sf9HDUAQ",dryRun:!1,shipMarker:"DSO",backorderMarker:"DBO",headerMarker:"DOH",hideCheckout:!1,checkoutLabel:"Check Out (Credit Card Only)",paymentNote:"No payment is taken online. Faxon applies your terms or payment on file, and adds shipping and any tax (if applicable) when the order is reviewed.",storageKey:"faxon-dealer-bo:v1",pendingKey:"faxon-dealer-bo:pending:v1",seenKey:"faxon-dealer-bo:seen:v1",maxLines:50,maxQty:9999,maxPoLength:30,stockUrl:"/faxon-dealer-stock-data/",stockLabel:"Available to ship:",maxNotesLength:200,maxNameLength:255,exclusions:[{name:"Fulfillment Source",values:["Trusted Distribution Partner"]},{name:"SKU Status",values:["Dropship","Discontinued"]}],excludedCategoryIds:[202,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,229,232,233],contactLine:"Faxon Firearms \xb7 [email protected]",debug:!1};function t(){e.debug&&window.console&&console.log.apply(console,["[DealerOrder]"].concat([].slice.call(arguments)))}function o(e){return e<10?"0"+e:String(e)}function n(e){return String(e.getFullYear()).slice(2)+o(e.getMonth()+1)+o(e.getDate())}function r(e){var t=e.getHours(),n=t<12?"AM":"PM";return function(e){return o(e.getMonth()+1)+"/"+o(e.getDate())+"/"+e.getFullYear()}(e)+" "+(t%12||12)+":"+o(e.getMinutes())+" "+n}function a(e){return(Math.round(100*(Number(e)||0))/100).toFixed(2)}function i(e){var t=a(e).split(".");return"$"+t[0].replace(/\B(?=(\d{3})+(?!\d))/g,",")+"."+t[1]}function d(e){return String(null==e?"":e).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function s(t){var o=String(null==t?"":t).trim();if(!/^\d+$/.test(o))return null;var n=parseInt(o,10);return n>=1&&n<=e.maxQty?n:null}function l(t){return String(t||"").replace(/[^A-Za-z0-9 \-_\/.#]/g,"").replace(/\s+/g," ").trim().slice(0,e.maxPoLength).trim()}function c(e,t){var o=String(t||"").replace(/[^A-Za-z0-9\-]/g,"");return n(e)+"-"+(o||"Dealer")}function u(t,o,r,a,i){return e.headerMarker+" "+n(i)+" "+t+" | "+o+" | S"+r+" B"+a}function f(t,o){if(t.length>e.maxNameLength)throw new Error("SKU and PO number are too long to file together. Use a shorter PO number.");var n=function(e,t){return String(e||"").replace(/[\r\n\t]+/g," ").replace(/[<>]/g,"").replace(/\|/g,"/|").trim().slice(0,Math.max(0,t)).trim()}(o,Math.min(e.maxNotesLength,e.maxNameLength-t.length-3));return n?t+" | "+n:t}function p(e,t,o,r,a,i){return f(function(e,t,o,r,a){return e+" "+n(a)+" "+t+" x"+o.qty+" "+o.sku+" | "+r}(e,t,o,r,i),a)}function b(e,t,o,n,r,a){return f(u(e,t,o,n,a),r)}var m=/^(DSO|DBO)\s+(\d{6})\s+([A-Z2-9]{4})\s+x(\d+)\s+(.+?)\s+\|\s+([^|]+?)(?:\s+\|\s?(.*))?$/,h=/^DOH\s+(\d{6})\s+([A-Z2-9]{4})\s+\|\s+([^|]+?)\s+\|\s+S(\d+)\s+B(\d+)(?:\s+\|\s?(.*))?$/;function g(e){var t=String(e||"").trim(),o=m.exec(t);return o?{kind:o[1],date:o[2],token:o[3],qty:parseInt(o[4],10),sku:o[5].trim(),po:o[6].trim(),note:o[7]||""}:(o=h.exec(t))?{kind:"DOH",date:o[1],token:o[2],po:o[3].trim(),ship:parseInt(o[4],10),back:parseInt(o[5],10),note:o[6]||""}:null}var y={};function v(e){var t=null;try{t=window.localStorage.getItem(e)}catch(e){t=null}null==t&&(t=y[e]||null);try{return t?JSON.parse(t):null}catch(e){return null}}function x(e,t){var o=null==t?null:JSON.stringify(t);y[e]=o;try{null==o?window.localStorage.removeItem(e):window.localStorage.setItem(e,o)}catch(e){}}function k(){var t=v(e.storageKey);return t&&Array.isArray(t.lines)?t:{v:1,customerId:null,lines:[]}}var w={customer:null,store:null,stock:{}};function S(){return w.store&&w.store.lines||[]}function I(e){for(var t=S(),o=0;o<t.length;o++)if(t[o].productId===e)return t[o];return null}function E(){x(e.storageKey,w.store)}
5554function C(e){w.store.lines=e,w.store.customerId=w.customer?w.customer.entityId:null,E(),Ie()}function A(e){C(S().filter(function(t){return t.productId!==e}))}function N(t,o){return fetch("/graphql",{method:"POST",credentials:"same-origin",headers:{"Content-Type":"application/json",Authorization:"Bearer "+e.storefrontToken},body:JSON.stringify({query:t,variables:o||{}})}).then(function(e){if(!e.ok)throw new Error("GraphQL HTTP "+e.status);return e.json()}).then(function(e){if(e.errors&&e.errors.length)throw new Error(e.errors[0].message);return e.data})}var O=["entityId name sku path","availabilityV2 { status }","inventory { isInStock }","categories(first: 25) { edges { node { entityId name } } }","prices { price { value currencyCode } salePrice { value } }","customFields(names: $fields) { edges { node { name value } } }"].join("\n"),L="customer { entityId firstName lastName email customerGroupId customerGroupName }",q="query DealerCustomer { "+L+" }",T=L.replace(/ \}$/,' metafields(namespace: "faxon_dealer", keys: ["stock_key"], first: 1) { edges { node { key value } } } }'),z="query DealerCustomer { "+T+" }",D="query DealerPdp($productId: Int!, $fields: [String!]) {\n "+T+"\n site { product(entityId: $productId) {\n"+O+"\n } }\n}",P="query DealerList($ids: [Int!], $fields: [String!]) {\n site { products(entityIds: $ids, first: 50) { edges { node {\n"+O+"\n } } } }\n}";function F(){return e.exclusions.map(function(e){return e.name})}function M(e){var t=e.prices||{};return t.salePrice&&null!=t.salePrice.value?Number(t.salePrice.value):t.price&&null!=t.price.value?Number(t.price.value):null}function j(e){var t=e.inventory&&e.inventory.isInStock,o=e.availabilityV2&&e.availabilityV2.status;return!t&&"Preorder"!==o}function B(t){for(var o=t.categories&&t.categories.edges||[],n=0;n<o.length;n++){var r=o[n].node||{};if(-1!==e.excludedCategoryIds.indexOf(r.entityId))return"category "+r.entityId}var a={};(t.customFields&&t.customFields.edges||[]).forEach(function(e){var t=e.node||{};a[String(t.name).trim().toLowerCase()]=String(t.value||"").trim().toLowerCase()});for(var i=0;i<e.exclusions.length;i++){var d=e.exclusions[i],s=a[d.name.trim().toLowerCase()];if(s)for(var l=0;l<d.values.length;l++)if(s===d.values[l].trim().toLowerCase())return d.name+" = "+d.values[l]}return t.sku?null==M(t)?"no price":null:"no SKU"}function R(){return document.querySelector("main[data-cart]")||document.querySelector(".page-content[data-cart]")}function U(){var e=S().map(function(e){return e.productId});return e.length?N(P,{ids:e,fields:F()}).then(function(t){var o={};(t&&t.site&&t.site.products&&t.site.products.edges||[]).forEach(function(e){var t=e.node;if(t){o[t.entityId]=!0,w.stock[t.entityId]={inStock:!j(t),blocked:B(t)};var n=I(t.entityId),r=M(t);n&&null!=r&&(n.price=r)}}),e.forEach(function(e){o[e]||(w.stock[e]={inStock:!1,blocked:"no longer available"})}),E()}).catch(function(e){t("stock refresh failed:",e.message)}):Promise.resolve()}function H(e){var t=w.stock[e.productId];return t?t.blocked?"gone":t.inStock?"instock":"backorder":"backorder"}function K(){return S().filter(function(e){return"backorder"===H(e)})}function J(){return fetch("/api/storefront/carts?include=lineItems.physicalItems.options",{credentials:"same-origin"}).then(function(e){return e.ok?e.json():[]}).then(function(e){var t=e&&e[0],o={id:t?t.id:null,lines:[],unsupported:[]};if(!t)return o;var n=t.lineItems||{};return(n.physicalItems||[]).forEach(function(e){e.sku?o.lines.push({productId:e.productId,variantId:e.variantId,sku:e.sku,name:e.name,url:e.url||"",qty:e.quantity,price:null!=e.salePrice?Number(e.salePrice):Number(e.listPrice||0),options:(e.options||[]).map(function(e){return e.name+": "+e.value}).join("; ")}):o.unsupported.push(e.name+" (no SKU)")}),[].concat(n.digitalItems||[],n.customItems||[]).forEach(function(e){o.unsupported.push(e.name)}),(n.giftCertificates||[]).forEach(function(){o.unsupported.push("Gift certificate")}),o}).catch(function(){return{id:null,lines:[],unsupported:[]}})}function Y(e){return e.lines.map(function(e){return e.sku+"x"+e.qty}).sort().join(",")+"|"+e.unsupported.length}function _(t){var o=[];if(!t)return o;for(var n=(new DOMParser).parseFromString(t,"text/html").querySelectorAll("a, td, th, span, li, p, h1, h2, h3, h4, h5, strong, div"),r=[e.shipMarker+" ",e.backorderMar
5554ker+" ",e.headerMarker+" "],a=0;a<n.length;a++){var i=n[a];if(!i.children.length)for(var d=(i.textContent||"").replace(/\s+/g," ").trim(),s=0;s<r.length;s++)if(0===d.indexOf(r[s])&&-1===o.indexOf(d)){o.push(d);break}}return o}function G(e){return String(e||"").toUpperCase()}function Z(e,t){var o=new URLSearchParams;return o.set("wishlistname",t),o.set("publicwishlist","0"),o.set("submit","Save"),fetch("/wishlist.php?action=addwishlist&product_id="+encodeURIComponent(e),{method:"POST",credentials:"same-origin",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:o.toString()}).then(function(e){if(!e.ok)throw new Error("HTTP "+e.status);return e.text()}).then(function(e){return!!W(e,t)||fetch("/wishlist.php",{credentials:"same-origin",cache:"no-store"}).then(function(e){return e.ok?e.text():""}).then(function(e){if(W(e,t))return!0;throw new Error("not confirmed by the store")})})}function W(e,t){if(!e)return!1;var o=g(t);if(_(e).map(g).filter(Boolean).some(function(e){return $(e,o)}))return!0;var n=t.split(" | ").slice(0,2).join(" | "),r=(new DOMParser).parseFromString(e,"text/html");return-1!==(r.body&&r.body.textContent||"").replace(/\s+/g," ").indexOf(n)}function $(e,t){return!(!e||!t||e.kind!==t.kind||e.token!==t.token)&&(("DOH"===e.kind||G(e.sku)===G(t.sku)&&e.qty===t.qty)&&G(e.po)===G(t.po))}function X(t){var o=v(e.pendingKey),n=!!(o&&o.token&&o.customerId===w.customer.entityId&&Date.now()-o.ts<864e5),r=n?new Date(o.ts):new Date,a=l(t.po)||c(r,w.customer.lastName);n&&G(o.po)!==G(a)&&(n=!1,r=new Date,a=l(t.po)||c(r,w.customer.lastName));var i=n?o.token:function(){for(var e="ABCDEFGHJKLMNPQRSTUVWXYZ23456789",t="",o=0;o<4;o++)t+=e.charAt(Math.floor(32*Math.random()));return t}();x(e.pendingKey,{token:i,po:a,ts:r.getTime(),customerId:w.customer.entityId});var d,s=t.ship,u=t.back;if(!s.length&&!u.length)return Promise.reject(new Error("There is nothing to submit."));try{d=s.map(function(t){return{line:t,kind:e.shipMarker,name:p(e.shipMarker,i,t,a,t.options,r)}}).concat(u.map(function(t){return{line:t,kind:e.backorderMarker,name:p(e.backorderMarker,i,t,a,"",r)}}));var f=b(i,a,s.length,u.length,t.notes,r)}catch(e){return Promise.reject(e)}var m={po:a,token:i,date:r,ship:s,back:u,notes:t.notes,dryRun:e.dryRun,ok:!1,failures:[]};return e.dryRun?(window.console&&(console.log("[DealerOrder] DRY RUN \u2014 nothing was written. PO "+a+", reference "+i),d.forEach(function(e){console.log(" "+e.name+" ("+e.name.length+")")}),console.log(" "+f+" ("+f.length+")")),x(e.pendingKey,null),m.ok=!0,Promise.resolve(m)):fetch("/wishlist.php",{credentials:"same-origin"}).then(function(e){return e.ok?e.text():""}).then(function(e){return _(e).map(g).filter(Boolean)}).catch(function(){return[]}).then(function(e){var t=Promise.resolve();return d.forEach(function(o){t=t.then(function(){var t=g(o.name);if(!e.some(function(e){return $(e,t)})){if(!e.some(function(e){return e.kind===o.kind&&e.token!==i&&G(e.sku)===G(o.line.sku)&&G(e.po)===G(a)}))return Z(o.line.productId,o.name).then(null,function(e){m.failures.push({line:o.line,reason:e.message||"failed"})});m.failures.push({line:o.line,reason:"already submitted on PO "+a})}})}),t.then(function(){if(m.failures.length)return m;var t=(s[0]||u[0]).productId,o=g(f);return e.some(function(e){return $(e,o)})?(m.ok=!0,m):Z(t,f).then(function(){return m.ok=!0,m},function(e){return m.failures.push({line:{sku:"order header"},reason:e.message||"failed"}),m})})}).then(function(t){return t.ok&&x(e.pendingKey,null),t})}var V=[278,278,355,556,556,889,667,191,333,333,389,584,278,333,278,278,556,556,556,556,556,556,556,556,556,556,278,278,584,584,584,556,1015,667,667,722,722,667,611,778,722,278,500,667,556,833,722,778,667,778,722,667,611,722,667,944,667,667,611,278,278,278,469,556,333,556,556,500,556,556,278,556,556,222,222,500,222,833,556,556,556,556,333,500,278,556,500,722,500,500,500,334,260,334,584],Q=[278,333,474,556,556,889,722,238,333,333,389,584,278,333,278,278,556,556,556,556,556,556,556,556,556,556,333,333,584,584,584,611,975,722,722,722,722,667,611,778,722,278,556,722,611,833,722,778,667,778,722,667,611,722,667,944,667,667,611,333,278,333,584,556,333,556,611,556,611,556,333,611,611,278,278,556,278,889,611,611,611,611,389,556,333,611,556,778,556,556,500,389,280,389,584],ee={8212:151,8211:150,8217:146,8216:145,8220:147,8221:148,8226:149,8230:133};function te(e){var t="";e=String(null==e?"":e);for(var o=0;o<e.length;o++){var n=e.charCodeAt(o);9!==n&&10!==n&&13!==n||(n=32),t+=n>=32&&n<127?String.fromCharCode(n):ee[n]?String.fromCharCode(ee[n]):n>=160&&n<=255?String.fromCharCode(n):"?"}return t}function oe(e,t,o){for(var n=0,r=t?Q:V,a=0;a<e.length;a++){var i=e.charCodeAt(a);n+=i>=32&&i<=126?r[i-32]:556}return n*o/1e3}function ne(){this.pages=[],this.add()}function re(e){var t=parseInt(e.slice(1),16);return[(t>>16&255)/255,(t>>8&255)/255,(255&t)/255].map(function(e){return e.toFixed(3)}).join(" ")}function ae(e){return(Math.round(100*e)/100).toString()}ne.prototype.add=function(){this.cur=[],this.pages.push(this.cur)},ne.prototype.text=function(e,t,o,n){var r=(n=n||{}).size||10,a=!!n.bold,i=te(o);if(n.maxWidth&&oe(i,a,r)>n.maxWidth){for(;i.length&&oe(i+"...",a,r)>
5554n.maxWidth;)i=i.slice(0,-1);i=i.replace(/\s+$/,"")+"..."}var d=oe(i,a,r);"right"===n.align?e-=d:"center"===n.align&&(e-=d/2);var s=i.replace(/\\/g,"\\\\").replace(/\(/g,"\\(").replace(/\)/g,"\\)");return this.cur.push("BT /"+(a?"F2":"F1")+" "+r+" Tf "+re(n.color||"#333333")+" rg "+ae(e)+" "+ae(792-t)+" Td ("+s+") Tj ET"),d},ne.prototype.rect=function(e,t,o,n,r){this.cur.push(re(r)+" rg "+ae(e)+" "+ae(792-t-n)+" "+ae(o)+" "+ae(n)+" re f")},ne.prototype.line=function(e,t,o,n,r,a){this.cur.push(re(r||"#E4E1DA")+" RG "+(a||.75)+" w "+ae(e)+" "+ae(792-t)+" m "+ae(o)+" "+ae(792-n)+" l S")},ne.prototype.wrap=function(e,t,o,n){var r=te(e).split(/\s+/),a=[],i="";return r.forEach(function(e){var r=i?i+" "+e:e;oe(r,n,o)<=t||!i?i=r:(a.push(i),i=e)}),i&&a.push(i),a},ne.prototype.bytes=function(e){var t=[],o=[];t[1]="<< /Type /Catalog /Pages 2 0 R >>",t[3]="<< /Type /Font /Subtype /Type1 /BaseFont /Helvetica /Encoding /WinAnsiEncoding >>",t[4]="<< /Type /Font /Subtype /Type1 /BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding >>",t[5]="<< /Title ("+te(e).replace(/[\\()]/g,"")+") /Producer (Faxon dealer order form) >>";var n=6;this.pages.forEach(function(e){var r=e.join("\n");t[n]="<< /Length "+r.length+" >>\nstream\n"+r+"\nendstream",t[n+1]="<< /Type /Page /Parent 2 0 R /MediaBox [0 0 612 792] /Resources << /Font << /F1 3 0 R /F2 4 0 R >> >> /Contents "+n+" 0 R >>",o.push(n+1+" 0 R"),n+=2}),t[2]="<< /Type /Pages /Kids ["+o.join(" ")+"] /Count "+o.length+" >>";for(var r="%PDF-1.4\n%\xe2\xe3\xcf\xd3\n",a=[],i=1;i<t.length;i++)a[i]=r.length,r+=i+" 0 obj\n"+t[i]+"\nendobj\n";var d=r.length;
5554r+="xref\n0 "+t.length+"\n0000000000 65535 f \n";for(var s=1;s<t.length;s++)r+=("0000000000"+a[s]).slice(-10)+" 00000 n \n";r+="trailer\n<< /Size "+t.length+" /Root 1 0 R /Info 5 0 R >>\nstartxref\n"+d+"\n%%EOF";for(var l=new Uint8Array(r.length),c=0;c<r.length;c++)l[c]=255&r.charCodeAt(c);return l};var ie="#001734",de="#832729",se="#333333",le="#6B6560",ce="#E4E1DA";function ue(t){var o,n=new ne,a=40,d=572,s=[{k:"sku",x:46,w:122},{k:"desc",x:174,w:220},{k:"qty",x:432,w:40,right:!0},{k:"unit",x:502,w:64,right:!0},{k:"total",x:566,w:70,right:!0}];function l(){n.rect(0,0,612,72,ie),n.text(a,44,"FAXON FIREARMS",{size:22,bold:!0,color:"#FFFFFF"}),n.text(d,36,"DEALER PURCHASE ORDER",{size:12,bold:!0,color:"#FFFFFF",align:"right"}),n.text(d,52,"PO "+t.po,{size:10,color:"#FFFFFF",align:"right"})}function c(e){return!(o+e<=736)&&(n.add(),l(),o=96,!0)}function u(e,t,o,r,a){n.text(e,t,o,{size:7.5,bold:!0,color:le}),n.text(e,t+12,r,{size:10,color:se,maxWidth:a})}function f(){n.rect(a,o,532,18,"#F0EDE8"),[["SKU",0],["DESCRIPTION",1],["QTY",2],["UNIT",3],["TOTAL",4]].forEach(function(e){var t=s[e[1]];n.text(t.x,o+12.5,e[0],{size:7.5,bold:!0,color:le,align:t.right?"right":"left"})}),o+=18}function p(e,t,r,l){if(c(60),o+=18,n.text(a,o,e,{size:12,bold:!0,color:ie}),t&&n.text(d,o,t,{size:8.5,color:le,align:"right"}),o+=6,n.line(a,o,d,o,de,1.5),o+=4,!r.length)return o+=14,n.text(46,o,l,{size:9.5,color:le}),o+=6,0;f();var u=0;return r.forEach(function(e){var t=e.options?28:18;c(t+4)&&f();var r=e.qty*e.price;u+=r,n.text(s[0].x,o+12.5,e.sku,{size:9,bold:!0,color:ie,maxWidth:s[0].w}),n.text(s[1].x,o+12.5,e.name,{size:9,color:se,maxWidth:s[1].w}),e.options&&n.text(s[1].x,o+23.5,e.options,{size:7.5,color:le,maxWidth:s[1].w}),n.text(s[2].x,o+12.5,String(e.qty),{size:9,align:"right"}),n.text(s[3].x,o+12.5,i(e.price),{size:9,align:"right"}),n.text(s[4].x,o+12.5,i(r),{size:9,bold:!0,align:"right"}),o+=t,n.line(a,o,d,o,ce,.5)}),o+=14,n.text(s[3].x,o,"Subtotal",{size:9,color:le,align:"right"}),n.text(s[4].x,o,i(u),{size:10,bold:!0,color:ie,align:"right"}),o+=8,u}l(),o=96,n.rect(a,o-13,532,20,"navy"===t.statusColor?"#E6EAF0":"#F6E9E9"),n.text(48,o+1,t.status,{size:9.5,bold:!0,color:"navy"===t.statusColor?ie:de});var b=256,m=316;u(40,o+=26,"DEALER",t.dealer.company||t.dealer.name,b),u(m,o,"PO NUMBER",t.po+(t.poAuto?" (assigned)":""),b),u(40,o+=30,"CONTACT",t.dealer.name+" \xb7 "+t.dealer.email,b),u(m,o,"SUBMITTED",r(t.date)+" \xb7 ref "+t.token,b),u(40,o+=30,"ACCOUNT",t.dealer.group,b),u(m,o,"PAYMENT","Terms / payment on file \u2014 applied by Faxon",b),o+=30,(t.extra||[]).forEach(function(e,t){t%2==0&&t&&(o+=30),u(t%2?m:40,o,e[0],e[1],b)}),(t.extra||[]).length&&(o+=30);var h=p("SHIP NOW",t.shipSub||"In stock at submission",t.ship,"Nothing to ship now."),g=p("BACKORDER \u2014 SHIPS AS PRODUCED",t.backSub||"Allocated as production becomes available",t.back,"No backordered items.");c(90),o+=26;var y=352;if(n.rect(y,o-14,220,66,"#F5F4F1"),n.text(362,o,"Ship now",{size:9.5,color:le}),n.text(562,o,i(h),{size:9.5,align:"right"}),n.text(362,o+15,"Backorder",{size:9.5,color:le}),n.text(562,o+15,i(g),{size:9.5,align:"right"}),n.line(362,o+22,562,o+22,"#C9C4BC",.75),n.text(362,o+38,"Merchandise total",{size:10.5,bold:!0,color:ie}),n.text(562,o+38,i(h+g),{size:11,bold:!0,color:ie,align:"right"}),n.wrap("Shipping, tax (if applicable) and any adjustments are added by Faxon when the order is reviewed. Prices are your account pricing at the time of submission.",292,8.5).forEach(function(e,t){n.text(a,o+11*t,e,{size:8.5,color:le})}),o+=66,t.notes){var v=n.wrap(t.notes,516,9.5);c(30+13*v.length),o+=12,n.text(a,o,"NOTES",{size:7.5,bold:!0,color:le}),o+=4,v.forEach(function(e){o+=13,n.text(a,o,e,{size:9.5})})}var x=n.pages.length;return n.pages.forEach(function(t,o){n.cur=t,n.line(a,760,d,760,ce,.75),n.text(a,774,e.contactLine,{size:8,color:le}),n.text(d,774,"Page "+(o+1)+" of "+x,{size:8,color:le,align:"right"})}),n.bytes("Dealer Purchase Order "+t.po)}function fe(e,o){try{var n=new Blob([e],{type:"application/pdf"}),r=URL.createObjectURL(n),a=document.createElement("a");return a.href=r,a.download=o,a.style.display="none",document.body.appendChild(a),a.click(),setTimeout(function(){URL.revokeObjectURL(r),a.parentNode&&a.parentNode.removeChild(a)},4e3),!0}catch(e){return t("download failed",e.message),!1}}function pe(){return S().map(function(e){var t=H(e),o="",n='<button type="button" class="fdbo-link fdbo-remove" data-id="'+e.productId+'">Remove</button>';
5554return"instock"===t?(o='<span class="fdbo-badge fdbo-badge--stock">Back in stock \u2014 not included</span>',n='<button type="button" class="fdbo-btn fdbo-btn--small fdbo-move" data-id="'+e.productId+'">Move to cart</button> '+n):"gone"===t&&(o='<span class="fdbo-badge fdbo-badge--gone">Can no longer be backordered</span>'),'<tr class="'+("backorder"===t?"":"fdbo-line--held")+'"><td><span class="fdbo-sku">'+d(e.sku)+"</span>"+(e.url?'<a class="fdbo-name" href="'+d(e.url)+'">'+d(e.name)+"</a>":'<span class="fdbo-name">'+d(e.name)+"</span>")+o+'</td><td class="fdbo-num" data-label="Price">$'+a(e.price)+'</td><td class="fdbo-num" data-label="Qty"><input type="number" min="1" step="1" inputmode="numeric" class="fdbo-qty" aria-label="Backorder quantity for '+d(e.sku)+'" data-id="'+e.productId+'" value="'+e.qty+'"></td><td class="fdbo-num fdbo-line-total" data-label="Total">$'+a(e.qty*e.price)+'</td><td class="fdbo-num">'+n+"</td></tr>"}).join("")}var be='<colgroup><col style="width:38%"><col style="width:12%"><col style="width:10%"><col style="width:13%"><col style="width:27%"></colgroup><thead><tr><th>Item</th><th class="fdbo-num">Price</th><th class="fdbo-num">Qty</th><th class="fdbo-num">Total</th><th></th></tr></thead>';function me(e,t){Array.prototype.forEach.call(e.querySelectorAll(".fdbo-qty"),function(e){e.addEventListener("input",function(){var o=I(parseInt(e.getAttribute("data-id"),10)),n=s(e.value);if(o){var r=e.parentNode.parentNode.querySelector(".fdbo-line-total");n?(o.qty=n,r.textContent="$"+a(n*o.price),E(),t.changed()):r.textContent="\u2014"}}),e.addEventListener("blur",function(){var t=I(parseInt(e.getAttribute("data-id"),10));t&&!s(e.value)&&(e.value=t.qty)})}),Array.prototype.forEach.call(e.querySelectorAll(".fdbo-remove"),function(e){e.addEventListener("click",function(){A(parseInt(e.getAttribute("data-id"),10)),t.rerender()})}),Array.prototype.forEach.call(e.querySelectorAll(".fdbo-move"),function(e){e.addEventListener("click",function(){var o,n,r,a=parseInt(e.getAttribute("data-id"),10),i=I(a);i&&(e.disabled=!0,e.textContent="Adding\u2026",(o=a,n=i.qty,r=JSON.stringify({lineItems:[{productId:o,quantity:n}]}),fetch("/api/storefront/carts",{credentials:"same-origin"}).then(function(e){return e.ok?e.json():[]}).then(function(e){var t=e&&e.length&&e[0].id?"/api/storefront/carts/"+encodeURIComponent(e[0].id)+"/items":"/api/storefront/carts";return fetch(t,{method:"POST",credentials:"same-origin",headers:{"Content-Type":"application/json"},body:r})}).then(function(e){if(!e.ok)throw new Error("Could not add to cart ("+e.status+").");return!0})).then(function(){A(a),R()?window.location.reload():t.rerender()}).catch(function(o){e.disabled=!1,e.textContent="Move to cart",t.error((o&&o.message?o.message+" ":"")+"Open the product page to choose options and add it there.")}))})})}function he(e){if(!document.querySelector(".fdbo-overlay")){var t=document.createElement("div");t.className="fdbo-overlay",t.setAttribute("role","dialog"),t.setAttribute("aria-modal","true"),t.setAttribute("aria-labelledby","fdbo-title"),t.innerHTML='<div class="fdbo-modal"><div class="fdbo-modal__head"><h2 id="fdbo-title">Backorder List</h2><button type="button" class="fdbo-modal__close" aria-label="Close">×</button></div><div class="fdbo-modal-body"><div class="fdbo-panel">Checking stock\u2026</div></div></div>',document.body.appendChild(t);var o=t.querySelector(".fdbo-modal-body");document.addEventListener("keydown",r),t.addEventListener("mousedown",function(e){e.target===t&&n()}),t.querySelector(".fdbo-modal__close").addEventListener("click",n),U().then(function(){if(t.parentNode){a();var e=o.querySelector(".fdbo-qty, .fdbo-close");e&&e.focus()}})}function n(){document.removeEventListener("keydown",r),t.parentNode&&t.parentNode.removeChild(t),Ie(),e&&e.focus&&e.focus()}function r(e){if("Escape"===e.key&&n(),"Tab"===e.key){var o=t.querySelectorAll("button:not([disabled]), input, textarea, a[href]");if(!o.length)return;var r=o[0],a=o[o.length-1];e.shiftKey&&document.activeElement===r?(e.preventDefault(),a.focus()):e.shiftKey||document.activeElement!==a||(e.preventDefault(),r.focus())}}function a(){if(!S().length)return o.innerHTML='<div class="fdbo-panel"><p>Your backorder list is empty.</p><div class="fdbo-actions"><button type="button" class="fdbo-btn fdbo-btn--ghost fdbo-close">Close</button></div></div>',void o.querySelector(".fdbo-close").addEventListener("click",n);var e=K().length;o.innerHTML='<div class="fdbo-panel"><p>
5554Out-of-stock items you have added. They are submitted from your cart page together with your in-stock items, on one purchase order.</p><div class="fdbo-error" style="display:none" role="alert"></div><table class="fdbo-lines">'+be+"<tbody>"+pe()+'</tbody></table><div class="fdbo-totals"><div class="fdbo-grand"><span>Backorder ('+e+(1===e?" item":" items")+')</span><span class="fdbo-back-total">'+i(ge(K()))+'</span></div></div><div class="fdbo-actions"><button type="button" class="fdbo-btn fdbo-btn--ghost fdbo-close">Keep shopping</button><a class="fdbo-btn fdbo-go" href="/cart.php">Review & Submit Order</a></div></div>';var t=o.querySelector(".fdbo-error");o.querySelector(".fdbo-close").addEventListener("click",n),me(o,{changed:function(){o.querySelector(".fdbo-back-total").textContent=i(ge(K())),ke()},rerender:a,error:function(e){t.textContent=e,t.style.display=""}})}}function ge(e){return e.reduce(function(e,t){return e+t.qty*t.price},0)}var ye={cart:null,po:"",notes:"",stock:null,keys:null};function ve(){var t=R();if(t){!function(){if(!e.hideCheckout&&e.checkoutLabel){var t=document.querySelector('.cart-actions a.button--primary[href*="checkout"]');t&&(t.textContent=e.checkoutLabel,t.setAttribute("title",e.checkoutLabel))}}();var o=document.getElementById("faxon-dealer-order");return o||((o=document.createElement("section")).id="faxon-dealer-order",o.setAttribute("aria-labelledby","fdbo-order-title"),t.appendChild(o)),o.innerHTML='<div class="fdbo-panel">Loading your order\u2026</div>',Promise.all([J(),U(),De(ye.keys)]).then(function(e){ye.cart=e[0],ye.stock=e[2],xe(o)})}}function xe(t,o){var r=ye.cart,f=K();if(!r.lines.length&&!S().length&&!r.unsupported.length)return t.innerHTML="",void(t.style.display="none");t.style.display="";var p=new Date,b=c(p,w.customer.lastName),m=r.lines.map(function(e){return'<tr><td><span class="fdbo-sku">'+d(e.sku)+'</span><span class="fdbo-name">'+d(e.name)+"</span>"+(e.options?'<span class="fdbo-opts">'+d(e.options)+"</span>":"")+function(e){var t=ye.stock,o=Le(t,e.sku);if(null===o||o>=t.plenty||e.qty<=o)return"";var n=e.qty-o;return'<span class="fdbo-stock-note">'+(0===o?"None of these can ship now. Submit Order sends all "+e.qty+" to backorder.":"Only "+o+" of your "+e.qty+" can ship now. Submit Order sends the other "+n+" to backorder.")+"</span>"}(e)+'</td><td class="fdbo-num" data-label="Price">$'+a(e.price)+'</td><td class="fdbo-num" data-label="Qty">'+e.qty+'</td><td class="fdbo-num" data-label="Total">$'+a(e.qty*e.price)+'</td><td class="fdbo-act"></td></tr>'}).join(""),h=ge(r.lines),g=ge(f);t.innerHTML=['<h2 id="fdbo-order-title">Dealer Order</h2>','<div class="fdbo-panel">',"<p>Submit your cart and your backorder list together on one purchase order. You will get a PDF copy right away.</p>",o?'<div class="fdbo-error" role="alert">'+o+"</div>":"",'<div class="fdbo-error fdbo-err" style="display:none" role="alert"></div>',r.unsupported.length?'<div class="fdbo-error">These cart items cannot go on a dealer order: '+d(r.unsupported.join(", "))+". Remove them above, or pay by card at checkout.</div>":"","<h3>Ship now</h3>",r.lines.length?'<table class="fdbo-lines">'+be+"<tbody>"+m+'</tbody></table><p class="fdbo-hint">Change ship-now quantities in the cart above.</p>':'<p class="fdbo-empty">Nothing in your cart.</p>',"<h3>Backorder \u2014 ships as produced</h3>",S().length?'<table class="fdbo-lines fdbo-back">'+be+"<tbody>"+pe()+"</tbody></table>":'<p class="fdbo-empty">No backordered items. Out-of-stock items can be added from their product page.</p>','<div class="fdbo-fields">','<div class="fdbo-field">',' <label for="fdbo-po">Purchase Order Number</label>',' <input type="text" id="fdbo-po" class="fdbo-po" maxlength="'+e.maxPoLength+'" autocomplete="off" placeholder="'+d(b)+'">',' <p class="fdbo-hint">Leave blank and we will assign <span class="fdbo-ref">'+d(b)+"</span>. "," Letters, numbers, spaces and - _ / . # only.</p>","</div>",'<div class="fdbo-field">',' <label for="fdbo-notes">Notes <span style="font-weight:400;color:#9A9490">(optional)</span></label>',' <textarea id="fdbo-notes" class="fdbo-notes"></textarea>',' <p class="fdbo-hint fdbo-count"></p>',"</div>","</div>",'<div class="fdbo-totals">',' <div><span>Ship now</span><span class="fdbo-t-ship">'+i(h)+"</span></div>",' <div><span>
5554Backorder</span><span class="fdbo-t-back">'+i(g)+"</span></div>",' <div class="fdbo-grand"><span>Merchandise total</span><span class="fdbo-t-all">'+i(h+g)+"</span></div>","</div>",'<div class="fdbo-pay">'+d(e.paymentNote)+"</div>",'<div class="fdbo-actions">',' <button type="button" class="fdbo-btn fdbo-submit">Submit Order</button>',"</div>",r.lines.length?e.hideCheckout?'<p class="fdbo-card">Prefer to pay by card now? <a href="/checkout">Continue to checkout</a> (your backorder list stays saved).</p>':'<p class="fdbo-card">Paying by card instead? Use the <strong>'+d(e.checkoutLabel||"Check out")+"</strong> button above (your backorder list stays saved).</p>":"","</div>"].join("");var y=t.querySelector(".fdbo-err"),v=t.querySelector(".fdbo-po"),x=t.querySelector(".fdbo-notes"),k=t.querySelector(".fdbo-count"),I=t.querySelector(".fdbo-submit");function E(e){y.textContent=e,y.style.display="",y.scrollIntoView({block:"nearest"})}function A(){y.style.display="none"}function N(){var o=K(),n=ge(o);t.querySelector(".fdbo-t-back").textContent=i(n),t.querySelector(".fdbo-t-all").textContent=i(h+n);var a=r.lines.length+o.length;I.disabled=!a||r.unsupported.length>0,I.textContent=a?"Submit Order ("+a+(1===a?" line)":" lines)"):"Nothing to submit";var d={s:r.lines.length,b:K().length},s=function(t,o,n,r,a){return Math.max(0,Math.min(e.maxNotesLength,e.maxNameLength-u(t,o,n,r,a).length-3))}("XXXX",l(v.value)||b,d.s,d.b,p);x.value.length>s&&(x.value=x.value.slice(0,s)),x.setAttribute("maxlength",s);var c=s-x.value.length;k.textContent=c<40?"("+c+" characters left)":"",ye.po=v.value,ye.notes=x.value}v.value=ye.po,x.value=ye.notes,me(t,{changed:function(){N(),ke()},rerender:function(){xe(t)},error:E}),v.addEventListener("input",function(){A(),N()}),v.addEventListener("blur",function(){v.value=l(v.value),N()}),x.addEventListener("input",N),I.addEventListener("click",function(){for(var e=t.querySelectorAll(".fdbo-back .fdbo-qty"),o=0;o<e.length;o++)if(!s(e[o].value))return E("Every quantity must be a whole number of 1 or more."),void e[o].focus();A(),I.disabled=!0,I.textContent="Submitting\u2026";var a=Y(r);J().then(function(e){return Y(e)!==a?(ye.cart=e,xe(t,"Your cart changed since this form was shown. Check it and submit again."),null):X({po:v.value,notes:x.value.trim(),ship:e.lines,back:K()}).then(function(o){if(o.poAuto=!l(v.value),o.ok){var r,a=o.back.map(function(e){return e.productId}),i=function(){C(S().filter(function(e){return-1===a.indexOf(e.productId)})),ye.po="",ye.notes="",function(e,t){var o=function(e){return ue({po:e.po,poAuto:e.poAuto,token:e.token,date:e.date,status:e.dryRun?"DRY RUN \u2014 NOT SUBMITTED":"SUBMITTED \u2014 PENDING FAXON REVIEW. This is your copy; no payment has been taken.",dealer:{name:(w.customer.firstName+" "+w.customer.lastName).trim(),email:w.customer.email,group:w.customer.customerGroupName||"Group "+w.customer.customerGroupId},ship:e.ship,back:e.back,notes:e.notes})}(t),r=function(e){return("Faxon PO "+e.po+" "+n(e.date)+" "+e.token).replace(/[^A-Za-z0-9 \-_.#]/g,"")+".pdf"}(t);["[data-cart-content]","[data-cart-totals]",".cart-actions",".cart-additionalCheckoutButtons","[data-cart-status]"].forEach(function(e){var t=document.querySelector(e);t&&(t.style.display="none")}),Array.prototype.forEach.call(document.querySelectorAll(".cart-quantity"),function(e){e.textContent="0"}),e.innerHTML=['<h2 id="fdbo-order-title">Order submitted</h2>','<div class="fdbo-panel">',t.dryRun?'<div class="fdbo-error">DRY RUN \u2014 nothing was submitted and your cart was not changed. The wishlist names are in the browser console.</div>':"",'<div class="fdbo-ok"><strong>PO <span class="fdbo-ref">'+d(t.po)+"</span></strong> \u2014 "+t.ship.length+" ship-now and "+t.back.length+" backorder "+(t.ship.length+t.back.length===1?"line":"lines")+". Reference "+d(t.token)+".</div>","<p>Faxon will review your order, apply your terms or payment on file, and confirm shipping to "+d(w.customer.email)+". Ship-now items appear in your account order history once entered.</p>",'<div class="fdbo-actions"><button type="button" class="fdbo-btn fdbo-pdf">Download PDF</button>','<a class="fdbo-btn fdbo-btn--ghost" href="/">Continue shopping</a></div>',"</div>"].join(""),e.querySelector(".fdbo-pdf").addEventListener("click",function(){fe(o,r)}),fe(o,r),e.lastPdf={bytes:o,name:r},e.querySelector(".fdbo-pdf").focus()}(t,o)};if(!o.dryRun)return(r=e.id,r?fetch("/api/storefront/carts/"+encodeURIComponent(r),{method:"DELETE",credentials:"same-origin"}).then(function(){},function(){}):Promise.resolve()).then(i);i()}else!function(e,t){xe(e,"Your order was not submitted. "+t.failures.map(function(e){return d(e.line.sku)+": "+d(e.reason)}).join("; ")+". Nothing has been ordered yet \u2014 fix the lines above and press Submit Order again, or contact customer service.")}(t,o)})}).catch(function(e){I.disabled=!1,N(),E(e&&e.message?e.message:"Something went wrong. Please try again or c
5554ontact customer service.")})}),N()}function ke(){var e=S().length,t=document.getElementById("faxon-dealer-bo-pill");e&&!R()?(t||((t=document.createElement("button")).type="button",t.id="faxon-dealer-bo-pill",t.className="fdbo-pill",t.addEventListener("click",function(){he(t)}),document.body.appendChild(t)),t.innerHTML="Backorder List <b>"+e+"</b>",t.setAttribute("aria-label","Backorder list, "+e+(1===e?" item":" items"))):t&&t.parentNode&&t.parentNode.removeChild(t)}var we=null;function Se(t){if(we){var o=we.product,n=I(o.entityId);we.box.innerHTML='<p class="fdbo-note"><strong>Out of stock \u2014 dealer backorder.</strong> Add it to your backorder list and keep shopping. It is submitted from your cart page with your in-stock items, on one purchase order.</p><div class="fdbo-row"> <input type="number" min="1" step="1" inputmode="numeric" class="fdbo-pdp-qty" aria-label="Backorder quantity" value="'+(n?n.qty:1)+'"> <button type="button" class="fdbo-btn fdbo-pdp-add">'+(n?"Update Backorder List":"Add to Backorder List")+'</button></div><p class="fdbo-flash" role="status">'+(t||(n?"On your list: "+n.qty+'. <button type="button" class="fdbo-link fdbo-pdp-view">View list</button>':""))+"</p>";var r=we.box.querySelector(".fdbo-pdp-qty"),a=we.box.querySelector(".fdbo-pdp-view");a&&a.addEventListener("click",function(){he(a)}),we.box.querySelector(".fdbo-pdp-add").addEventListener("click",function(){var t=s(r.value);if(t){try{!function(t){for(var o=S().slice(),n=0;n<o.length;n++)if(o[n].productId===t.productId)return o[n]=t,void C(o);if(o.length>=e.maxLines)throw new Error("Your backorder list is full ("+e.maxLines+" items).");o.push(t),C(o)}({productId:o.entityId,sku:o.sku,name:o.name||o.sku,url:o.path||"",price:M(o),qty:t,addedAt:Date.now()})}catch(e){return void Se(d(e.message))}
5554w.stock[o.entityId]={inStock:!1,blocked:null},Se("Added "+t+' to your backorder list. <button type="button" class="fdbo-link fdbo-pdp-view">View list ('+S().length+")</button>");var n=we.box.querySelector(".fdbo-pdp-view");n&&n.addEventListener("click",function(){he(n)})}else Se("Enter a whole number of 1 or more.")})}}function Ie(){ke(),we&&Se()}function Ee(){var t=window.FaxonDealerOrderConfig;if(t&&"[object Array]"===Object.prototype.toString.call(t.groupIds)){for(var o=[],n=0;n<t.groupIds.length;n++){var r=parseInt(t.groupIds[n],10);r>0&&String(r)===String(t.groupIds[n])&&o.push(r)}return o}return e.groupIds}function Ce(){if(0!==String(e.storefrontToken).indexOf("REPLACE")){var o=!(!document.querySelector(".productView")||!document.querySelector('form[data-cart-item-add] input[name="product_id"]')),n=!!R(),r=k().lines.length>0,a=!!v(e.seenKey);if(o||n||r||a){var i,d,s=o?(i=document.querySelector('form[data-cart-item-add] input[name="product_id"]'),(d=i&&parseInt(i.value,10))>0?d:null):null;(s?N(D,{productId:s,fields:F()}):N(n?z:q,{})).then(function(n){var r=n&&n.customer;if(function(e){return!(!e||-1===Ee().indexOf(e.customerGroupId))}(r)){x(e.seenKey,1),function(t){w.customer=t,w.store=k(),w.store.customerId&&w.store.customerId!==t.entityId&&(w.store={v:1,customerId:t.entityId,lines:[]},E(),x(e.pendingKey,null)),w.store.customerId=t.entityId}(r),function(){if(!document.getElementById("faxon-dealer-bo-css")){var t=[e.hideCheckout?['body.fdbo-dealer .cart-actions a[href*="checkout"],',"body.fdbo-dealer .cart-actions .checkoutMultiple,","body.fdbo-dealer .cart-additionalCheckoutButtons,",'body.fdbo-dealer .previewCart a.button--primary[href*="checkout"],',"body.fdbo-dealer .previewCartCheckout-additionalCheckoutButtons{display:none!important}"].join(""):"",".fdbo-stock{display:block;width:100%;flex-basis:100%;margin:.4rem 0;font-size:15px;color:#4A4642}",".fdbo-stock strong{color:#001734}",".fdbo-stock-dot{display:inline-block;width:9px;height:9px;border-radius:50%;margin-right:.45em;vertical-align:1px;background:#9A9490}",".fdbo-stock--plenty .fdbo-stock-dot{background:#2e7d32}",".fdbo-stock--limited .fdbo-stock-dot{background:#c77c02}",".fdbo-stock--low .fdbo-stock-dot,.fdbo-stock--out .fdbo-stock-dot{background:#832729}",".fdbo-stock--low strong,.fdbo-stock--out strong{color:#832729}",".fdbo-stock-note{display:block;color:#832729;font-size:13px;font-weight:600;margin-top:.25rem}",'.fdbo-note{font-family:"Crimson Pro",Georgia,serif;font-size:14px;color:#4A4642;margin:0 0 .75rem;line-height:1.5}',".fdbo-note strong{color:#001734}","#faxon-dealer-bo{margin:1.5rem 0 0}",".fdbo-row{display:flex;gap:.75rem;
5554align-items:stretch}",".fdbo-row input{width:96px;padding:10px 12px;border:1px solid #9A9490;border-radius:3px;font-size:16px;box-sizing:border-box}",'.fdbo-btn{display:inline-flex;align-items:center;justify-content:center;gap:.5rem;padding:14px 24px;border:0;border-radius:4px;background:#832729;color:#fff!important;font-family:"Bebas Neue","Crimson Pro",sans-serif;font-size:20px;letter-spacing:.06em;text-transform:uppercase;cursor:pointer;text-decoration:none;transition:background .18s ease}',".fdbo-row .fdbo-btn{flex:1}",".fdbo-btn:hover,.fdbo-btn:focus{background:#6e1f21}",".fdbo-btn:focus-visible{outline:3px solid #001734;outline-offset:2px}",".fdbo-btn[disabled]{opacity:.55;cursor:not-allowed}",".fdbo-btn--ghost{background:#fff;color:#001734!important;border:1px solid #9A9490}",".fdbo-btn--ghost:hover,.fdbo-btn--ghost:focus{background:#F0EDE8}",".fdbo-btn--small{padding:6px 12px;font-size:15px}",".fdbo-link{background:none;border:0;padding:0;color:#832729;text-decoration:underline;cursor:pointer;font:inherit}",'.fdbo-flash{font-family:"Crimson Pro",Georgia,serif;font-size:14px;color:#001734;margin:.6rem 0 0}','.fdbo-pill{position:fixed;right:16px;bottom:16px;z-index:99990;display:inline-flex;align-items:center;gap:.5rem;padding:12px 18px;border:0;border-radius:999px;background:#001734;color:#fff;font-family:"Bebas Neue",sans-serif;font-size:18px;letter-spacing:.05em;cursor:pointer;box-shadow:0 6px 20px rgba(0,0,0,.3)}',".fdbo-pill b{background:#832729;border-radius:999px;padding:1px 9px;font-weight:400}",".fdbo-pill:focus-visible{outline:3px solid #832729;outline-offset:2px}",".fdbo-overlay{position:fixed;inset:0;background:rgba(13,13,13,.6);display:flex;align-items:center;justify-content:center;z-index:100000;padding:16px}",".fdbo-modal{background:#fff;max-width:720px;width:100%;max-height:90vh;overflow:auto;border-radius:6px;box-shadow:0 18px 50px rgba(0,0,0,.35)}",".fdbo-modal__head{background:#001734;color:#fff;padding:18px 24px;display:flex;align-items:center;justify-content:space-between}",'.fdbo-modal__head h2{margin:0;font-family:"Bebas Neue",sans-serif;font-size:26px;letter-spacing:.04em;font-weight:400;color:#fff}',".fdbo-modal__close{background:none;border:0;color:#fff;font-size:28px;line-height:1;cursor:pointer;padding:0 4px}",'.fdbo-panel{font-family:"Crimson Pro",Georgia,serif;color:#4A4642;font-size:15px;line-height:1.55}',".fdbo-modal .fdbo-panel{padding:24px}","#faxon-dealer-order{margin:2.5rem 0 0;border-top:3px solid #832729;padding-top:1.25rem}",'#faxon-dealer-order h2{font-family:"Bebas Neue",sans-serif;font-weight:400;letter-spacing:.04em;color:#001734;margin:0 0 .25rem;font-size:30px}','.fdbo-panel h3{font-family:"Bebas Neue",sans-serif;font-weight:400;letter-spacing:.04em;color:#001734;margin:1.25rem 0 .35rem;font-size:21px}',".fdbo-panel p{margin:0 0 1rem}",".fdbo-lines{width:100%;border-collapse:collapse;margin:0 0 .5rem;table-layout:fixed}",".fdbo-lines th{text-align:left;font-size:13px;color:#9A9490;font-weight:600;border-bottom:1px solid #E4E1DA;padding:6px 8px}",".fdbo-lines td{border-bottom:1px solid #E4E1DA;padding:10px 8px;vertical-align:middle}",".fdbo-lines td.fdbo-num,.fdbo-lines th.fdbo-num{text-align:right;white-space:nowrap}",".fdbo-lines input{width:72px;padding:6px 8px;border:1px solid #9A9490;border-radius:3px;font-size:15px}",".fdbo-sku{font-family:ui-monospace,Menlo,Consolas,monospace;color:#001734;font-size:13px}",".fdbo-name{display:block;color:#4A4642;font-size:14px}",".fdbo-opts{display:block;color:#9A9490;font-size:13px}",".fdbo-badge{display:inline-block;margin-top:4px;padding:1px 8px;border-radius:3px;font-size:12px;font-weight:600}",".fdbo-badge--stock{background:#e6f2ea;color:#1d5b33}",".fdbo-badge--gone{background:#fdecea;color:#8a1d12}",".fdbo-line--held td{background:#FAF9F6}",".fdbo-empty{color:#9A9490;font-style:italic;margin:0 0 .5rem}",".fdbo-field{margin:0 0 1.15rem}",".fdbo-field label{display:block;font-weight:600;color:#001734;margin:0 0 .35rem;font-size:14px}",".fdbo-field input,.fdbo-field textarea{width:100%;padding:10px 12px;border:1px solid #9A9490;border-radius:3px;font-family:inherit;font-size:15px;color:#333;background:#fff;box-sizing:border-box}",".fdbo-field input:focus,.fdbo-field textarea:focus{outline:2px solid #832729;outline-offset:0;border-color:#832729}",".fdbo-field textarea{min-height:72px;resize:vertical}",".fdbo-hint{font-size:13px;color:#9A9490;margin:.3rem 0 0}",".fdbo-fields{margin-top:1.5rem}",".fdbo-totals{border-top:1px solid #E4E1DA;padding-top:.75rem;margin:0 0 1rem}",".fdbo-totals div{display:flex;justify-content:space-between;font-size:15px;margin:0 0 .2rem}",".fdbo-totals .fdbo-grand{font-size:18px;color:#001734;font-weight:700;border-top:1px solid #E4E1DA;padding-top:.4rem;margin-top:.4rem}",".fdbo-pay{background:#F5F4F1;border-left:3px solid #001734;padding:10px 14px;margin:0 0 1.25rem;font-size:14px}",".fdbo-error{background:#fdecea;border-left:3px solid #F54A3A;padding:10px 14px;margin:0 0 1rem;font-size:14px;color:#8a1d12}",".fdbo-ok{background:#e6f2ea;border-left:3px solid #1d5b33;padding:10px 14px;margin:0 0 1rem;font-size:14px;color:#1d5b33}",".fdbo-actions{display:flex;gap:.75rem;flex-wrap:wrap;align-items:center}",".fdbo-actions .fdbo-btn{flex:1}",".fdbo-card{font-size:14px;margin:.75rem 0 0}",".fdbo-card a{color:#832729}",".fdbo-ref{font-family:ui-monospace,Menlo,Consolas,monospace;background:#F5F4F1;padding:4px 8px;border-radius:3px;color:#001734}",".fdbo-results{margin:0 0 1rem;padding-left:1.1rem}",'@media (max-width:600px){.fdbo-lines{table-layout:auto}
5554.fdbo-lines thead,.fdbo-lines colgroup{display:none}.fdbo-lines tr{display:flex;flex-wrap:wrap;gap:4px 16px;align-items:center;border-bottom:1px solid #E4E1DA;padding:10px 0}.fdbo-lines td{display:block;border:0;padding:0}.fdbo-lines td:first-child{flex-basis:100%}.fdbo-lines td.fdbo-num{text-align:left}.fdbo-lines td[data-label]::before{content:attr(data-label) " ";color:#9A9490;font-size:12px}.fdbo-lines td.fdbo-act:empty{display:none}}',"@media (prefers-reduced-motion: reduce){.fdbo-btn{transition:none}}"].join(""),o=document.createElement("style");o.id="faxon-dealer-bo-css",o.appendChild(document.createTextNode(t)),document.head.appendChild(o)}}(),document.body&&document.body.classList.add("fdbo-dealer");var a=n.site&&n.site.product;a&&j(a)&&!B(a)&&function(e){var t=document.getElementById("add-to-cart-wrapper")||document.querySelector(".productView-options")||document.querySelector(".productView-details");if(t){var o=document.getElementById("faxon-dealer-bo");o||((o=document.createElement("div")).id="faxon-dealer-bo",t.parentNode?t.parentNode.insertBefore(o,t.nextSibling):t.appendChild(o)),we={box:o,product:e},Se()}}(a),o&&function(e){var o=Ae(e),n=document.querySelector(".productView [data-product-sku]")||document.querySelector("[data-product-sku]");if(!o||!n)return;De(o).then(function(e){e?(Te(n,e),window.MutationObserver&&new MutationObserver(function(){Te(n,e)}).observe(n,{childList:!0,characterData:!0,subtree:!0})):t("stock: no matching key")})}(r),ye.keys=Ae(r),ve(),ke()}else t("not an eligible dealer")}).catch(function(e){t("boot failed:",e.message)})}}}function Ae(e){var t=e&&e.metafields&&e.metafields.edges,o=t&&t[0]&&t[0].node;if(!o||!o.value)return null;try{var n=JSON.parse(o.value);return n&&n.keys&&"object"==typeof n.keys&&Object.keys(n.keys).length?n.keys:null}catch(e){return null}}function Ne(e){for(var t=atob(String(e||"")),o=new Uint8Array(t.length),n=0;n<t.length;n++)o[n]=t.charCodeAt(n);return o}function Oe(e){if(!e||"object"!=typeof e)return null;if(e.stock&&"object"==typeof e.stock){var t=e.tiers||{},o=t.low>0?t.low:10,n=t.plenty>o?t.plenty:50;return{stock:e.stock,low:o,plenty:n}}return{stock:e,low:10,plenty:50}}function Le(e,t){return t=String(t||"").trim(),e&&t&&Object.prototype.hasOwnProperty.call(e.stock,t)&&"number"==typeof e.stock[t]?e.stock[t]:null}function qe(e,t){return e<=0?{cls:"out",head:"Out of stock",tail:"add it to your backorder list to hold your place"}:e<=t.low?{cls:"low",head:"Only "+e+" left to ship",tail:"order today"}:e<t.plenty?{cls:"limited",head:"Limited stock",tail:"order soon"}:{cls:"plenty",head:"In stock: "+t.plenty+"+ ready to ship",tail:""}}function Te(e,t){var o=document.getElementById("fdbo-stock");if(!o){(o=document.createElement("div")).id="fdbo-stock",o.setAttribute("role","status");for(var n=e.closest&&e.closest(".productSKU")||e,r=n,a=n.nextElementSibling;a&&("SPAN"===a.tagName||a.classList&&a.classList.contains("productUPC"));a=a.nextElementSibling)r=a;r.parentNode.insertBefore(o,r.nextSibling)}var i=Le(t,e.textContent);if(null!==i){var d=qe(i,t);o.className="fdbo-stock fdbo-stock--"+d.cls,o.textContent="";var s=document.createElement("span");s.className="fdbo-stock-dot";var l=document.createElement("strong");l.textContent=d.head,o.appendChild(s),o.appendChild(l),d.tail&&o.appendChild(document.createTextNode(" \u2014 "+d.tail)),o.style.display=""}else o.style.display="none"}var ze=null;function De(o){return o?ze||(ze=fetch(e.stockUrl,{credentials:"same-origin",headers:{Accept:"application/json"}}).then(function(e){if(!e.ok)throw new Error("stock page HTTP "+e.status);return e.text()}).then(function(e){var t=e.indexOf("{"),n=e.lastIndexOf("}");return function(e,t){var o=window.crypto&&window.crypto.subtle;return o&&e&&t[e.kid]&&window.TextEncoder&&window.TextDecoder?o.importKey("raw",Ne(t[e.kid]),{name:"AES-GCM"},!1,["decrypt"]).then(function(t){return o.decrypt({name:"AES-GCM",iv:Ne(e.iv),additionalData:(new TextEncoder).encode(e.kid)},t,Ne(e.ct))}).then(function(e){return JSON.parse((new TextDecoder).decode(e))}):Promise.resolve(null)}(t>=0&&n>t?JSON.parse(e.slice(t,n+1)):null,o)}
5554).then(Oe).catch(function(e){return t("stock not shown:",e&&e.message),null}),ze):Promise.resolve(null)}window.__faxonDealerOrder={lineName:p,headerName:b,parseName:g,sanitizePo:l,autoPo:c,markerNamesIn:_,orderPdf:ue,winAnsi:te,cfg:e,groupIds:Ee,stockKeys:Ae,stockTier:qe,stockData:Oe},"loading"===document.readyState?document.addEventListener("DOMContentLoaded",Ce):Ce()}(); 5555</script>
5555<script> 5556/* FAXON REP HOME - Script Manager: FOOTER | All Pages | Script | Essential. 5557 * Minified (terser). Readable source: storefront/faxon-rep-home.js, sha256 8b9b05035e4fb0c1c67c2d7c41fd99e9e4dfd597dff13cf153ca78803a1e53f4 5558 * See REP-HOME.md. A rep's dashboard comes from their own account, never this script. */ 5559!function(){"use strict";var e={storefrontToken:"eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NiJ9.eyJjaWQiOlsxXSwiY29ycyI6WyJodHRwczovL3d3dy5mYXhvbmZpcmVhcm1zLmNvbSIsImh0dHBzOi8vZmF4b25maXJlYXJtcy5jb20iXSwiZWF0IjoxODIxNjE4NzIwLCJpYXQiOjE3OTAwODI3MjEsImlzcyI6IkJDIiwianRpIjoiYjg4ZGY0ZTAtY2FjZC00MThiLTg0ZDItMTRjNjBhM2JlNDFhIiwic2lkIjo4MzYxMDAsInN1YiI6ImdwMHBsOWZhNjd0cGQ5Z2JycjVtM2tiampoeDNybmsiLCJzdWJfdHlwZSI6MiwidG9rZW5fdHlwZSI6MX0.IEt8m1dldB-MSb1BchLXLKKvj3WiaMHMSRd1kLcAMBcOC97tDldL-gt-zT3DZ3O0-jsmnhegZfbhG-Sf9HDUAQ",path:"/rep-home/",namespace:"faxon_rep",keys:["d0","d1","d2","d3","d4","d5","d6","d7","d8","d9"],invKeys:["i0","i1","i2","i3"],seenKey:"faxon-rep-seen",pageSize:100,contact:"[email protected]"};if(!window.__faxonRepHome){var t={tab:"dealers",q:"",rep:"",agency:!1,inStock:!1,shown:0,open:{},sort:{dealers:["c",1],orders:["dt",-1],bo:["dt",-1],inv:["o",1]}},n=null,r=null,o=null,a=null,i=null,d=null,l=null,p="Confidential & Proprietary - This document and its contents are intended solely for authorized Faxon Firearms dealers and partners. Distribution, reproduction, or disclosure without prior written consent from Faxon Firearms is strictly prohibited.",s="Available to ship: on hand less safety stock",f="Quantities change through the day. Confirm before promising a ship date.",c="iVBORw0KGgoAAAANSUhEUgAAAJ4AAACgCAMAAADKKyWUAAAAkFBMVEX///////7//v7+///+/v7+/f39/f38/Pz7/Pz5+vvz9Pbm5+rNz9StsrzIo6GdnaiGk6R/hJORYmZTZ35CWHE2S2aFLS5IMkQWLUsHHjwHHDsEGjl5GBoSFzMDGDcCGDcBFzYBETEAFzYAFjcAFjUAFjQAFDMAEDAADS0ACywACioACCkABygABicABSYAAiF7qzaGAAAZAklEQVR42s1cibaiuhLN0cgYlNEF4gL0KSA4/P/fvapKAngmj3b37c57t9dRMWxq3FVJZOvtvzfCN2YwEQSBYNtw+a+NEOE5gR/4Edsu2b82wjXjzA1WiRcAPFP4/9IQJsAj6YmApBfc+uu/Ms63FSN42vYAXpfl+eZfGABj5xG8N864yxnBu+T7XfcvjPpQnBQ8kB/KUMLbpfG/MLI6H+Ax8A8lvU0f/RM+m7RTeGwCj5sL+9Vh8nGYL88CX/4aHun635Ue47YfvDhcztVsMh68NFZs9h085mS3yyuhqr8FzFSzLVjyWhA935JH8NIiezJK0djUqcO4Fl6R67efGtkueSy9rn9m1PsDjaJfMYsmMzFIyTf37VNzdY+k9+ZET450V0l4XSKlx0EDjXyvapInZwu+h/e85/paUoeDoK+bzOsKKbtjIX6v5xrccT8Ox6RhD68NUw3LdLX48rN0DoPFCl4OE9o2Y67nk2R84TBm03eHu1jm3dzO9/CYk6QfRuajVVkzP9PvuEwHEWswtKoh50DHOCrd1oLbzI3S9nIGyzpfmjRw8BEspqfKpMGaTNAbWfzQc0+75n7UEDMstKn4Wss3Lp7yApAVdze1tj58e3SMoo/h9Sq77Mq8gJHnVXNNBVwB8G40VX1NtEH0NU78OLDsyup+5D3CA+qa1vIjrUYVRqJzrp1jzvkMHKNU4hSc+X2dI/o9PUKZt7nHDIDX5zhTWeUu4gN4LbxRnB7DU143DkRjwf+8VprUoTwlhlYuM7mojvL940HM7bl3Kga0+B3EWuVHoEk0WZO5oHFfPVJ+IcMx5eTlj+FV+TA2nYQ3RLOq3rijj4Mr9MoVLgGzh1dI2py0RXT7ut9ndX/Y00XgLwM89aTPwtvvxmB5Qtub83lyIkHchWBp1kOYA+fQpli2ic1WPaKodpkvXBHUJOUKAtAA73CoMRw9CQ+u81aeHivBuMHcDO8LSkJ1R6PxgXckndbnanQMcJS5/KCqPRki6RXKeISHr8xn4aEG7oclg22dYZgr29Rm81F83qlUkGJLqhMvcebyiQoMf4ZhmTY5DYl1gEdT8WfhnSPLtoZBvoUOWrVpAFAqnSFozLmdKK+pM1/prDivGJNeAnLklgyRCAosV0yUW7YQap6HNxoXJdKZjWKBUCZa+tyffA7BTbnD4aAIApqhIRPe/ljKZ7G4zHZF603g0a1+FR7kgj0Ydn4N7Ay0W9ylZ86HWHc4HoaAYbMIUatsQnPUEpA/gUcfW78IDwSEExa9x9CBh1vqT/1zMQ2V1S51QaGUfOGekkdr78I4quEdZQCyn4Zn2jrtmwblBpQE6omSRLUTE99F8e2q95H8jSdoe8i0DMm0JH3AZ/flJGlWS8/5Nc8lDqeERrHs3vimDFTGbUgNJpOeCu6s4Y2qIXjFOUq6Ei9mz8EDHBOO6GPolSEinjOhQsh8MTFNLvU2MXdToxnsFNgMRR2kCgQPLNm/5hTkn84a5/4sBzJse05OiDqTbgCJwJ0Y37349nUhuKF1OXWjhOCBtuV018DdHfb4qM/nXF3ObNpEU0wMCbYy+NabatfgYjOID2moyabwzDt4Jw0PTAjMc4+B8El448DvMDJ9shJbygmTkXUXeeIh9iGTInhD0pDwZuT1NKFSRsRRy2jIz0qv0CMH6cG3ZTrikxBlTJTLuTs+V9H57IfwmNgc9yjOpxlLNxAWgBfo6UwVvUiSxsT20MjHSOtyjvAeKBfmm5Op7FzRPeO5d700YBgUwUAJGA1t6X/dxPjeBT6iIT+wPYBH+TC/+k/Bex/3pJqgtKFXFJjvSJU1rSdV0jDfBxYgD+m95yI8nBr52+tZw5bUY3/MZRxMiBJOSNU06U44uvM+LMs4nZ913DtHKjEfN0F5fDXnWiySsjmSMZ4bpCWVJiIq5+bvcq7DuTGEuc+zhoSHNGZfp/mr8Di3klbxTRqq7B4Y/UR41WHKWIgso6mp7oamBHfwpNXWOoY9DQ98NT++L9+mNjUhLPVxFJ+iEeWEUJXH/YRQKaonOcbL8Aa2OcbCSVdACU9PHw1Vm880O1b5T3FO8vkR3qRAfQ2eKaVAsZBGf1IS0j2foWq9rohM453QeWWhBnSdm8SW9XViAk+RoZfhaYebxMKECm9VQo+Wh/FERkgqNnxJblT5y4Ceki2S1Ed4UzbxCryBg6O65LBVQItlA2KlLG8Is1r3MoATagNKUUGRGwnDPTxdJ78Ez5pLnQBHMaAeNIyFKUkLmj/IbhLzKsHGV+gBUi5wV4jn3JOfIHmf
5559wsOnVYHhFXgLyUUmSdbi6rZAqsxReBR/x14HeqwiqWWbJ3FSK3SJbd3Bm3zleXg6mAJdsfhM192trvdtPnl2yMIGdjH2g/UpolDWp66l4FFJzjiFZygbfQmeoUxjkmN1yQWC4GONi1mOc100KfHZ8S2nzkxJnapDUV19aqBNlQvpRbYZfgJvlxfFphvgYS9uU+BbY9tnZiUNdhSPoG9HC2/ohQltivl5xZyob8u8KGEA/T50DVBBeCa/24x3oVuUilo+Wji4tqdTe4sVlrnBkxu+czqNpSNEwltzwstWqgk1sU1IgadRfMBkk+Zyxgm687mKBTItUC7NeZPwoJCqu5bmewCP26orhbWMHIZuVDnDih5UFvqywfIG5auKXTdabGYLP0pwRL7AduXk+8Nd9D3Eb144WKne2ViYjzkOxWf/1oWDmRMnT41h1eWUzPn7Zj0QpeS5+aLHtnf6+br6qRvWrEZuD76eH3Wnqu2emK79yZLfcyt+qpzDDDIfm/XomDT+9pLf2H82x2a9d31lksdLftxe+atXhj+uNmMWfXUW73t45t9eqZ/P59/AWzC5kvf84Hd3eWUGS7YSv5OeBeinWlqYi4VulM1MczF527y7yJxNvjT+ze8+4iYf/pVXTqdhfE7jC3h5nalYFv0oOs9+WZPTGaAkSOXts7r4FN6+PrU4zqrGmTGHttIpYuXqP2dMwJ/DSvKMLpq0+5aOujGnC5emLiTF0uXmzIWvDm8sQ9WkpjxOt59uUhrhIS/Bfp4kIiQ/01xuXRFK+ZtOuHb1XbdL+D9bSLoKf7qhkK/gX3e7nJlqucFZh+46lB/B08KfJgu38lHgyrVwQ1d+arD4lJcSQN5+hEccBAYGfFX/m2wJFzlcSX8ZSqkA5Vgvmb4r3sVltI4tXy71J3hluJQbBQmeHa4Fc8O1SfPQc8FTSxRyza4lCO3tPTxTqDW0VbpDQmtqeEu4wfBipuA5a9CKinQID17ZbLABsVUSAfGF4XKtBIsfhSFbLte2fszlFp5z3CBRNIFiLq75TnojYTjlmnkiIjAPBY8v14sRHnzdZAM8AQb2pmW83KqvAHtBeA4f4IGml2Kt10TASsKtBC87HLU73Zw5wFuHeggz7jYXf4Q3XEQvBuUKZ7Q9F6RlL+k6sK/QcZZKfXCltIJBsGB4NkpPNjXQvdZLtUFC1MhobQ1kHb6N8IbtuEsoFTaKWb4twFiW5tCeRcuRNi3WIWBYLrhSUahNAF6AK4L4KNgBIHANvBiLqAV+JpZoMPRgZDrwFlkMLdcDPXQnG4NnGh7YgBzbkPmXje4pMdN1Xa5jFG7u0O1I3NLhCnN45brm8JH9Bi8Xw3ccoMtKm/iCz/Q0YCNCiMXYg8P7irVGshwzrBNuB3irLm/TH+TexU+D7+L7WD4bFkY2fTwIahtOvyfGd6HQqoc1FT7JcLPxxQz/4ouhAQhjNrzAT7h+fwHeNFsoLXH6YzINJLW3odgHmw9GPbqzxSSjaPGtqbKvxS9tNOSGaenEys13bOGL/IabHvuVxjFVLdm91rlrpU3eea9SKw5w9JNZjmMr+vzwa9jGLxpPwduGpnGfkJVUIQwlJGXraabGDeBEko3irqmYtjslceDZj59VxpXcNdcShnhn2guNGyLLeXN+lpiCzN4GZHGaNd3lcr3if33XJY91gdvWKK58olod+3VkOW/aZM74z8EZNJkjQGZJtuvPl3Pf5inxozQ/FQ12Lr6fAYvPTRdLF92uncXsA35SL8DzmqK+Xw59IDi40hZBkpYtIWuyJPI94djw/hw+KHbFxX9gLJzFlA0kBvExas0ME9W7XdvgukUjfqjdOV4mgrTuL+dL12Rp7Huubg28kQxE2j7yNWoQa8fdhp9du1AR2wU2vTn7P/MNmMf24rI/93WKMlPIoNTA5gkWBoaNTomr98a3npEfMZyRA7h88Wl0R9E+4xuGwaxV0vb9LgmEInyGZRr3dmHjTtw+/i68WNIzHEf6xacJiS8c0O12+eafc9o69APReUnbdVnk2dJ7UWgfr7Mpn36n3sEzULVv5le3A8fBtIbbpB7mDUhNIm5OXRZg1WGN5dd76UESsZOmTSxj/uVUQJV1SnO/zOYG6d5xpJlaD0Q397PTaRO5GFi4CnquIOt7h9B6A7aEPWXzc4jUDUaOHm4/hryJ9WFuA7cGyveoY2AxN4a6LgbJqSQ2twwL4Hk+OAghnE91B84bO6qv/3GyOZjeLnUXIWSzxewbD1oCfu73+f0upE/QifR0Sj3k+OqrkDVs8lvhR4HnkMLJfWFWv8ciMI0jT7DxKxNNgDeC6bmfhrwpPh6i8eXH8rvIB8FuVTSn2EXfHXTtRWkqG7QQCONA2MOc/nUHWe58u11PWeK77zkClUH52efL71Q75DaXg6FOd9d+yBPMb3dtMJ+uWrrJqWsayBt1ir5ie1EcrISk1ZBDoAQMIOO1l75Tm5fvXBJ37kDUg6qJP6C28Ahv4OZtYs/mX3lF0DUbbxQCR133zW5XlsUmby4YBjHRYRtNTO7IXZDwqe3Te81QWAHPdtbLR9GWL+x1SCstX1JSXIaoUs9dYV6eG6YJMvQ2TRV4aVPt2/6YH5rbLUsCrJxdmUTwH5tu7fpp28KzTebG3ZMYVsRWzBYPYy0UppABv+R8Fm58gBR2Dmx9Cyeo6zJ3WQT+5/vZDqK6rKeF7uhCSWQhJTQBohu1u2zy7LR/rGpQt+bDvtLiTWBoQVJlsfmn6bGoq7K5+ViG0gJFkN7aTdEKK+myq8f8U5vgZiZl9lRtJ3WerEjL3HFY0JwSe9A5VUGQpux1+DiTzphJ2i0xQ5ufBHg3bcui2UHYRvBgYEkDzO7cbHy2aq+ZsL1b6jLPNSfJ13ZX6e1GvXtugkijdlwCQ7aidfsD2o/atb/UrombRvaXbLIFCJzTCSLPBTsTGFaiVjDPe38ne5XQ3UH6gjvpOdHSMznKgnRr/6BnaNJjBJdPIzPuUS6qOnYd+13WRwNDRLYPwVpEzn1a4+YkyPnoqoP1UUz+qW7J/FC7Ne7W49b75I59pDoJYl/XY1BbBMiN5TdtU6xs5qUf1cTNhT7pFAjuNSclfxmTlW5/Ao98FyPzxzU2Ezc/Hcv8FknL5oYIgihK0gwIPARhSileMkgGC973LMua+z4T2VURXqJ6uKMI/fbtR00HF5ILkL77PXDKL3ZVWeGud36nNKrPcjqxkoPqZdPJGr88syZxxIuAQF+VZePGyk2XsB/E5ME8whApDi4gm+8C8qUod63PRnnQ0R+FUeARQY9yqmy/Q/EGmcMjser0bDAvHuGBp1S43wnyrfvDtg0Wbciqcrn8PhEehIC8Ba815+/DzVRUJp9bxFyS7HLD0QIREJqpAKAEHl4p19ROCBL5YW3IqUcN7n63hVD14Fow+8+J6lwammnQaSWoQTowyAhNM+tv100kmD4XBKx9J6cmc5GOsfxx5W8id7Cwi5vMjbuY1zUQcq1HDSBm+WkWr3R1ZCETOF+LSB2zWgVz/1yQ+9CmB+kY9uynCyXSOVZ9Ue3EfBqx0jYTP6gwvSRZIbQ3iw7ukl0Gad+T4DGwsOhGQVWaS49EdPlE22SBbk4lRzQ9FCTqs8/sRxWSG8XeXZYGli+ZwGmDGnXwDNFVbXDyugJ36/zcMe4yxxH3b0/PFQjDeNhr8lSooQ3t6MjcnGOA9/MWU7VtQVSWOXdhggWdEgszxhMNxbcZZg4XqNF5FJ+hVfIIH5K6OGv6Hs/2NWnkUd1hQTbJTjsPI0x0oZBKx3jQ/5YPaozPYwuKLxez4bmSWzznjxpCEFGirLtc+uaQ73ctQGwTT00hgGkIIM3ZGXU7MwwQHkQvcx0+hY7NZvZahuZBfOgZt+m2vi9EJ6IcEGErSAioK4Mkr09NEsArGEGLMS7oG3leEfgFVtTLrXiynziK76Csz5gkyq/QWUBYsq7fxZLEMwcGUL3qmGX/+9//9nhQ63/XwEl7ZKNzA0g8CM8xwnDGn0KHm2WU9enmDR4XGjfbqpr2fcATSX+i2hzoOySELMvyPMsqqKtckp7rgtnFtTrsCaGreEl4E/HRSS1V7uk2HTd49KFBCQ/hF6cdFEkQj0Xi2tFlV9OgvXOavKa7HaDlcyJnOfwJlscXT6JjMw7WN8eUA46vzzHqpUoLKPF7eBDQ4vOxSPxokzKvSN3kmssTqbSPk9POSTy92W9oGiJnuLC83L6yTCHFBzkH5W/ewYMIeH3f3sVS95wfyrTpr5HftWnajxvBq2OuuBl2q27obXh+Z1d0iWE/67bDks06tCCPUXOGT5QLWfO0S+/hWRjUEM+uKqqsPZS7+030Q7sVLC7HTiluN86x3HpNeDJ1LHEfptyliHsoe0+e1G2K5r4/Ce/VTaGP+dXl/lDd7ROnrZ1qu4XrMXUqBSd2n0sY7zKvw+I+p044BhbssEPwr+u8iye9Ymq61OXhm3G3DsapaGkLPA8Vbl2+eA3eDImL2NQFBieDKO4c0FW7krYoD0QPN1tW36Kbni3ihjrOibsPn+F5X3jHJZeTW2DUM0IHd/NcbXyIri+qb9HhrtVJPkQ7LsAvLAt43oK/CI/6QaadnJD44RGwW8L8ZkfH1EQixgMH3SN092eLpGrxRxVeich37AjVCzOBeiELXLOkxS3BZRdHN3W7n6A7yv2H5uBI0TnHQsvdvhRU7hZ6XYCVEzVYdeWplEjSXSnhoQtWj2SnzsxZkx4XqNbm4Hovq1buwXJIvR0FZ1Ee9dGKGpRlkI17u+99Fs88x01JxjfXffhdgUf7ll8tsTwZ/ATOVwhrPLCkzrDgr0XsHqCD4aXt0LLBvAEkFLzW3Ya/vGEQ1StkSZA60XBWDvfvo1W7et/yN6O4et5pl8uVnBkdjMLzh/avqlZ7LwRnAJZfI/1TJniwxfdjZjrJkFmPx6/8IsNDhpmkoNT6Ld
5559DTnmbwX1eVIXPA/MouGg5CHouoiwx9QuygfxLgs5CyS9LMg0LttlIZsSrrXPxSQH4fnJegRbC7Y1ZrkZTlNZqc7UPo7afwii5KohQPMAvMfmir+PMKkGvfzBn7LfjI/OpjeahHleHBxtMQ8I6F94X08msQ+UHqyJnQVumcBxjejP8OdECtTNxZuLqPvtXOH92iOEdu/bnxARV143mUuLjlwE2h+LlExjz8LYY3rhWFzv3xdBDf5Fxk0QrxhQtXTWp5HvNjgUtHfZ73CW0C+42bkDG5hSYb44r0hmoioeHgxkc2ABwb6iJ35aCf5yeww9+LTkZniKHRnfyqCVcX/O4I7J3x0S/TYZdFo6O5Zuy34sMntuNPMYCXsOGI0EftYqPGVJrF9qD4ftX2l/Bd80+oZmxYw887fRZaYtzvkJ4kOrLjBWN/Ap/zUX55l7qYSOl0+xf4VpA2oLY4Ebr1H0DHZoaUX3Qt9lPV5WdqmNLZsKL93/7TxJEFeVPmvUTn/gF0uGee8M2jc6GFVJV5fU1oUVzUh31+TaLTZwLcH7sjRGO4UvwpdLTdEfGNVdmxbi9ZYEPcocWT6hzZ0ef+WxVlcYkd3Ini/LGfSCT9QvzzNi2ByLM0cKlbBZVXXzVQZiZfBOfy2EcWftv5Q7KT6U3eQaR9vofqxtP7KhZQJsGr+x8WmbpPe/Bxg29o/0F0eqeQy9z4UpX7OvNtgjdndpoK+tWXz4SH7gPcNUTL+KPoiHTgLqx5ULd5tTvjyVuLGnsunvP+NHWU9TmGJ0J0C87Yn8bnwI3emJeeq6I4HdD6bO461BP7JHVUeZeDYgVtCJ2xPz4WZEQuc6KmzfPjJfVt1TiZ2R8rj6JGCS/oG//NQSlOOxHBjrz0cszzpk88PPnKJ0eHB70WfeZbUrH/3TEuUjAKMMj7EjJpl+AOPtt45xlVLjeBLbd4GGDB2H+Hjy1JgCJugf8WbZfi3qj73xXJmzNuAhMhxiLzjf2HA2QBGgsFru91LQI8p4EYf3AHwO3AKh3mkOjYgv3HA5d/1qhhtko6kGDeXPPNcbA5kBz49NsSopD9H8STTwVo42EfSKK4hfQAXnzUCbbtKd0p/Av2VwbcFjSMAOdeXF2aHEs5IDF9S+u5QmrfnLG/NPA8GgF0aW9119f54XTOYm8OroPvY4+L/cXBlQRRh44XZ+eatjc6YHMhpJbZXwUnW4AAkNDg78euaG9muCa1/v3ztBogimtNkBAqafvfAEcATSWzdYiKBl/5yzb3wQYRoLMMteB+J7j/A90TIIcc61TJAAAAAElFTkSuQmCC",h=95,u=96,m=[22,14,24,20,26,13,12,52,10,10],g=7,x=null,b='<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\n',v="http://schemas.openxmlformats.org/spreadsheetml/2006/main",y="http://schemas.openxmlformats.org/officeDocument/2006/relationships",C="http://schemas.openxmlformats.org/package/2006/relationships",w="application/vnd.openxmlformats-officedocument.",k=b+'<styleSheet xmlns="'+v+'"><numFmts count="1"><numFmt numFmtId="164" formatCode=""$"#,##0.00"/></numFmts><fonts count="9"><font><sz val="10"/><color rgb="FF000000"/><name val="Calibri"/><family val="2"/></font><font><b/><sz val="15"/><color rgb="FFFFFFFF"/><name val="Calibri"/><family val="2"/></font><font><b/><sz val="11"/><color rgb="FF001635"/><name val="Calibri"/><family val="2"/></font><font><sz val="10"/><color rgb="FF4A4642"/><name val="Calibri"/><family val="2"/></font><font><i/><sz val="8"/><color rgb="FF6B6660"/><name val="Calibri"/><family val="2"/></font><font><b/><sz val="11"/><color rgb="FFFFFFFF"/><name val="Calibri"/><family val="2"/></font><font><b/><sz val="11"/><color rgb="FF832729"/><name val="Calibri"/><family val="2"/></font><font><b/><sz val="10"/><color rgb="FF001635"/><name val="Calibri"/><family val="2"/></font><font><b/><sz val="10"/><color rgb="FF832729"/><name val="Calibri"/><family val="2"/></font></fonts><fills count="4"><fill><patternFill patternType="none"/></fill><fill><patternFill patternType="gray125"/></fill><fill><patternFill patternType="solid"><fgColor rgb="FF001635"/><bgColor indexed="64"/></patternFill></fill><fill><patternFill patternType="solid"><fgColor rgb="FF761E1C"/><bgColor indexed="64"/></patternFill></fill></fills><borders count="2"><border><left/><right/><top/><bottom/><diagonal/></border><border>'+["left","right","top","bottom"].map(function(e){return"<"+e+' style="thin"><color rgb="FFD9D5D0"/></'+e+">"}).join("")+'<diagonal/></border></borders><cellStyleXfs count="1"><xf numFmtId="0" fontId="0" fillId="0" borderId="0"/></cellStyleXfs><cellXfs count="12"><xf numFmtId="0" fontId="0" fillId="0" borderId="0" xfId="0"/><xf numFmtId="0" fontId="1" fillId="2" borderId="0" xfId="0" applyFont="1" applyFill="1" applyAlignment="1"><alignment vertical="center" indent="1"/></xf><xf numFmtId="0" fontId="2" fillId="0" borderId="0" xfId="0" applyFont="1" applyAlignment="1"><alignment vertical="center"/></xf><xf numFmtId="0" fontId="3" fillId="0" borderId="0" xfId="0" applyFont="1" applyAlignment="1"><alignment vertical="center"/></xf><xf numFmtId="0" fontId="4" fillId="0" borderId="0" xfId="0" applyFont="1" applyAlignment="1"><alignment vertical="center" wrapText="1"/></xf><xf numFmtId="0" fontId="5" fillId="3" borderId="1" xfId="0" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" wrapText="1"/></xf><xf numFmtId="0" fontId="0" fillId="0" borderId="1" xfId="0" applyBorder="1" applyAlignment="1"><alignment vertical="center"/></xf><xf numFmtId="49" fontId="0" fillId="0" borderId="1" xfId="0" applyNumberFormat="1" applyBorder="1" applyAlignment="1"><alignment horizontal="left" vertical="center"/></xf><xf numFmtId="3" fontId="7" fillId="0" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center"/></xf><xf numFmtId="3" fontId="8" fillId="0" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center"/></xf><xf numFmtId="164" fontId="0" fillId="0" borderId="1" xfId="0" applyNumberFormat="1" applyBorder="1" applyAlignment="1"><alignment vertical="center"/></xf><xf numFmtId="0" fontId="0" fillId="0" borderId="1" xfId="0" applyBorder="1" applyAlignment="1"><alignment vertical="center" wrapText="1"/></xf></cellXfs><cellStyles count="1"><cellStyle name="Normal" xfId="0" builtinId="0"/></cellStyles></styleSheet>',I=["@page{size:letter landscape;margin:.35in .3in .45in}","*{box-sizing:border-box;-webkit-print-color-adjust:exact;print-color-adjust:exact}","body{margin:0;font:9px Calibri,Carlito,Arial,sans-serif;color:#111}",".b{display:flex;align-items:center;gap:12px;margin:0 0 6px}.b img{height:62px;width:auto}.w{flex:1}",".t{background:#001635;color:#fff;font-size:15px;font-weight:700;padding:5px 10px;letter-spacing:.02em}",".l{display:flex;gap:16px;margin-top:4px}.s{color:#001635;font-weight:700;font-size:10px}.m{color:#4A4642;font-size:9px}",".n{color:#6B6660;
5559font-size:7px;font-style:italic;max-width:380px;margin-left:auto}","table{width:100%;border-collapse:collapse;table-layout:fixed}thead{display:table-header-group}tr{break-inside:avoid}","th{background:#761E1C;color:#fff;font-weight:700;padding:4px 3px;border:1px solid #761E1C;font-size:8.5px}","td{border:1px solid #D9D5D0;padding:2px 3px;white-space:nowrap;overflow:hidden}td.d{white-space:normal;overflow:visible}","td.q{text-align:center;font-weight:700;color:#001635}td.z{color:#832729}td.r{text-align:right}",".f{margin-top:6px;color:#6B6660;font-size:8px}"].join("");window.__faxonRepHome={isRepGroup:A,joined:N,decode:T,csv:Y,cfg:e,xlsx:xe,printDoc:be,fileName:de,stockOf:ve,invRows:function(e){return r.rows.filter(function(t){return!e||"number"==typeof t[6]&&t[6]>0})},state:function(){return{view:t,data:n,inv:r}}},"loading"===document.readyState?document.addEventListener("DOMContentLoaded",we):we()}function A(e){var t=String(e||"").trim().toLowerCase();return 0===t.indexOf("test-")&&(t=t.slice(5)),"salesrep"===(t=t.replace(/[^a-z0-9]/g,""))||"salesreps"===t||"faxonsalesrep"===t||"faxonsalesreps"===t}function F(t){return fetch("/graphql",{method:"POST",credentials:"same-origin",headers:{"Content-Type":"application/json",Authorization:"Bearer "+e.storefrontToken},body:JSON.stringify({query:t})}).then(function(e){if(!e.ok)throw new Error("GraphQL HTTP "+e.status);return e.json()}).then(function(e){if(e.errors&&e.errors.length)throw new Error(e.errors[0].message);return e.data})}function S(){return!!document.querySelector('a[href*="action=logout"], a[href*="logout.php"]')}function L(t){try{t?window.localStorage.setItem(e.seenKey,"1"):window.localStorage.removeItem(e.seenKey)}catch(e){}}function E(t,n){var r=t&&t.metafields&&t.metafields.edges||[],o={};return r.forEach(function(e){e&&e.node&&(o[e.node.key]=String(e.node.value||""))}),(n||e.keys).map(function(e){return o[e]||""})}function N(t){var n=String(t[0]||"").split("|");if(n.length<5||"0"===n[1])return null;var r=parseInt(n[1],10),o=n[3],a={};if(!(r>0)||r>e.keys.length)return null;t.forEach(function(e){var t=String(e||"").split("|");t.length>=5&&t[3]===o&&(a[parseInt(t[2],10)]=t.slice(4).join("|"))});for(var i="",d=0;d<r;d++){if(void 0===a[d])return null;i+=a[d]}return i}function T(e){var t=N(e);if(null===t)return Promise.resolve(null);if("undefined"==typeof DecompressionStream)return Promise.reject(new Error("old-browser"));for(var n=atob(t),r=new Uint8Array(n.length),o=0;o<n.length;o++)r[o]=n.charCodeAt(o);var a=new Blob([r]).stream().pipeThrough(new DecompressionStream("gzip"));
5559return new Response(a).text().then(function(e){return JSON.parse(e)})}function U(e,t,n){var r=document.createElement(e);return t&&(r.className=t),null!=n&&""!==n&&(r.textContent=String(n)),r}function z(e){return"$"+Math.round(Number(e)||0).toLocaleString("en-US")}function D(e){if(!e)return"";var t=/^(\d{4})-(\d{2})-(\d{2})/.exec(e);return t?parseInt(t[2],10)+"/"+parseInt(t[3],10)+"/"+t[1]:String(e)}function B(e){if(!e)return"";var t=new Date(e);return isNaN(t.getTime())?String(e):t.toLocaleString("en-US",{month:"short",day:"numeric",hour:"numeric",minute:"2-digit"})}function O(e,t){var n=U("a","frh-link",t);return n.href=e,n}function j(e,t){o.textContent="",o.appendChild(U("h1","","Rep Home"));var n=U("p","frh-note",e);t&&(n.appendChild(document.createTextNode(" ")),n.appendChild(t)),o.appendChild(n)}function P(){var e={};return n.dealers.forEach(function(t){e[t.i]=t}),e}function H(e){var n=t.q.trim().toLowerCase();return!n||-1!==String(e).toLowerCase().indexOf(n)}function G(e){if(e.n)return e.n;if(r&&e.sku)for(var t=String(e.sku).toUpperCase(),n=0;n<r.rows.length;n++)if(String(r.rows[n][4]).toUpperCase()===t)return r.rows[n][7]||"";return""}function J(){return!!(n&&n.me&&n.me.principal)}function W(){return J()?t.agency?t.rep:n.me.name:""}function X(e){var t=W();return!t||!(!e||e.r!==t)}function q(e,t){var n=W(),r=t[e.d];return!n||(r?r.r:e.r)===n}function M(e){var o,a=P();o="dealers"===e?n.dealers.filter(function(e){return X(e)&&H([e.c,e.n,e.e,e.p,e.ci,e.st,e.g,e.r].join(" "))}):"orders"===e?n.orders.filter(function(e){var t=a[e.d];return X(t)&&H([e.i,t&&t.c,e.s].join(" "))}):"inv"===e?function(){l&&l.src===r||(l={src:r,list:r.rows.map(function(e,t){return{o:t,c:e[0],pf:e[1],se:e[2],ca:e[3],sku:e[4],upc:e[5],q:"number"==typeof e[6]?e[6]:null,d:e[7],ms:e[8],mp:e[9],r:e}})});return l.list}().filter(function(e){return(!t.inStock||e.q>0)&&H([e.sku,e.d,e.c,e.pf,e.se,e.ca,e.upc].join(" "))}):n.bo.filter(function(e){var t=a[e.d];return!!q(e,a)&&H([t?t.c:e.c,e.po,e.sku,G(e)].join(" "))});var i=t.sort[e],d=i[0],p=i[1],s=function(t){if("dealers"!==e&&"inv"!==e&&"c"===d){var n=a[t.d];return(n?n.c:t.c||"").toLowerCase()}var r=t[d];return"string"==typeof r?r.toLowerCase():null==r?-1/0:r};return o.slice().sort(function(e,t){var n=s(e),r=s(t);return n<r?-p:n>r?p:0})}function R(e,n,r,o){var a=U("th",o||"",n);if(r){var i=t.sort[e];i[0]===r&&(a.textContent=n+(i[1]>0?" \u25b2":" \u25bc")),a.addEventListener("click",function(){t.sort[e]=[r,i[0]===r?-i[1]:/^(c|n|g|st|ci|sku|d|ca|o)$/.test(r)?1:-1],K()})}return a}function Q(e,t){return U("td",t||"",e)}function Z(e,r){var o=U("table","frh-t"),a=U("tr"),i=U("tbody"),d=P(),l=J()&&t.agency&&!t.rep;if("dealers"===e){[["Dealer","c"],["Contact","n"],["Location","st","frh-hide-sm"],["Program","g","frh-hide-sm"]].forEach(function(t){a.appendChild(R(e,t[0],t[1],t[2]))}),l&&a.appendChild(R(e,"Rep","r","frh-hide-sm")),n.sales_at&&(a.appendChild(R(e,"YTD","y","frh-num")),a.appendChild(R(e,"Last YTD","py","frh-num frh-hide-sm")),a.appendChild(R(e,"12 mo","l","frh-num frh-hide-sm"))),a.appendChild(R(e,"Open","oo","frh-num")),a.appendChild(R(e,"BO","bl","frh-num"));var p=a.children.length;r.forEach(function(e){var r=U("tr","frh-row"),o=U("td");o.appendChild(U("div","frh-strong",e.c)),e.n&&e.n!==e.c&&o.appendChild(U("div","frh-meta",e.n)),r.appendChild(o);var a,d=U("td");e.p&&(d.appendChild(O((a=e.p,"tel:"+String(a||"").replace(/[^0-9+]/g,"")),e.p)),d.appendChild(U("br"))),e.e&&d.appendChild(O("mailto:"+e.e,e.e)),r.appendChild(d),r.appendChild(Q([e.ci,e.st].filter(Boolean).join(", "),"frh-hide-sm")),r.appendChild(Q(e.g,"frh-hide-sm")),l&&r.appendChild(Q(e.r,"frh-hide-sm")),n.sales_at&&(r.appendChild(Q(z(e.y),"frh-num")),r.appendChild(Q(z(e.py),"frh-num frh-hide-sm")),r.appendChild(Q(z(e.l),"frh-num frh-hide-sm"))),r.appendChild(Q(e.oo?e.oo+" \xb7 "+z(e.ov):"\u2013","frh-num")),r.appendChild(Q(e.bl?e.bl+" \xb7 "+z(e.bv):"\u2013","frh-num")),[d].forEach(function(e){e.addEventListener("click",function(e){e.stopPropagation()})}),r.addEventListener("click",function(){t.open[e.i]=!t.open[e.i],K()}),i.appendChild(r),t.open[e.i]&&i.appendChild(function(e,t){var r=U("tr","frh-detail"),o=U("td");o.colSpan=t;var a=n.orders.filter(function(t){return t.d===e.i}),i=n.bo.filter(function(t){return t.d===e.i}),d=[];return e.t&&d.push("Terms: "+e.t),e.lo&&d.push("Last order: "+D(e.lo)),d.length&&o.appendChild(U("div","frh-meta",d.join(" \xb7 "))),o.appendChild(U("h4","",a.length?"Open orders":"No open orders")),a.forEach(function(e){o.appendChild(U("div","","#"+e.i+" \xb7 "+D(e.dt)+" \xb7 "+e.s+" \xb7 "+e.q+" item(s) \xb7 "+z(e.t)))}),o.appendChild(U("h4","",i.length?"Open backorder lines":"No open backorders")),i.forEac
5559h(function(e){o.appendChild(U("div","",e.sku+(G(e)?" \xb7 "+G(e):"")+" \xd7 "+e.q+" \xb7 ordered "+e.dt+(e.due?" \xb7 due "+e.due:"")+(e.po?" \xb7 PO "+e.po:"")+" \xb7 "+z(e.t)))}),r.appendChild(o),r}(e,p))})}else"orders"===e?([["Order","i"],["Date","dt"],["Dealer","c"],["Status","s"],["Items","q","frh-num frh-hide-sm"],["Total","t","frh-num"]].forEach(function(t){a.appendChild(R(e,t[0],t[1],t[2]))}),r.forEach(function(e){var t=d[e.d],n=U("tr");n.appendChild(Q("#"+e.i)),n.appendChild(Q(D(e.dt))),n.appendChild(Q(t?t.c:""));var r=U("td");r.appendChild(U("span","frh-badge",e.s)),n.appendChild(r),n.appendChild(Q(e.q,"frh-num frh-hide-sm")),n.appendChild(Q(z(e.t),"frh-num")),i.appendChild(n)})):"inv"===e?([["SKU","sku"],["Description","d","frh-hide-sm"],["Category","c","frh-hide-sm"],["Caliber","ca","frh-hide-sm"],["Available","q","frh-num"],["MSRP","ms","frh-num frh-hide-sm"],["MAP","mp","frh-num"]].forEach(function(t){a.appendChild(R(e,t[0],t[1],t[2]))}),r.forEach(function(e){var t=U("tr"),n=U("td");n.appendChild(U("div","frh-strong",e.sku)),n.appendChild(U("div","frh-meta frh-show-sm",e.d)),t.appendChild(n),t.appendChild(Q(e.d,"frh-hide-sm")),t.appendChild(Q(e.c,"frh-hide-sm")),t.appendChild(Q(e.ca,"frh-hide-sm")),t.appendChild(Q(null===e.q?"\u2013":e.q.toLocaleString("en-US"),"frh-num"+(0===e.q?" frh-zero":" frh-strong"))),t.appendChild(Q(oe(e.ms),"frh-num frh-hide-sm")),t.appendChild(Q(oe(e.mp),"frh-num")),i.appendChild(t)})):([["Ordered","dt"],["Due","due","frh-hide-sm"],["Dealer","c"],["PO","po","frh-hide-sm"],["Item","sku"],["Qty","q","frh-num"],["Total","t","frh-num"]].forEach(function(t){a.appendChild(R(e,t[0],t[1],t[2]))}),r.forEach(function(e){var t=d[e.d],n=U("tr");n.appendChild(Q(e.dt)),n.appendChild(Q(e.due,"frh-hide-sm")),n.appendChild(Q(t?t.c:e.c)),n.appendChild(Q(e.po,"frh-hide-sm"));var r=U("td");r.appendChild(U("div","frh-strong",e.sku)),G(e)&&r.appendChild(U("div","frh-meta",G(e))),n.appendChild(r),n.appendChild(Q(e.q,"frh-num")),n.appendChild(Q(z(e.t),"frh-num")),i.appendChild(n)}));var s=U("thead");return s.appendChild(a),o.appendChild(s),o.appendChild(i),o}function Y(e,t){var n=P(),o=[],a=function(e){return e=null==e?"":String(e),/[",\n]/.test(e)?'"'+e.replace(/"/g,'""')+'"':e};return"dealers"===e?(o.push(["Dealer","Contact","Email","Phone","City","State","Program","Rep","Terms","Last order","YTD","Last YTD","12 months","Open orders","Open order $","BO lines","BO $"]),t.forEach(function(e){o.push([e.c,e.n,e.e,e.p,e.ci,e.st,e.g,e.r,e.t,e.lo,e.y,e.py,e.l,e.oo,e.ov,e.bl,e.bv])})):"orders"===e?(o.push(["Order","Date","Dealer","Status","Items","Total"]),t.forEach(function(e){var t=n[e.d];o.push([e.i,e.dt,t?t.c:"",e.s,e.q,e.t])})):"inv"===e?(o.push(r.cols),t.forEach(function(e){o.push(e.r)})):(o.push(["Ordered","Due","Dealer","PO","SKU","Description","Qty","Total"]),t.forEach(function(e){var t=n[e.d];o.push([e.dt,e.due,t?t.c:e.c,e.po,e.sku,G(e),e.q,e.t])})),o.map(function(e){return e.map(a).join(",")}).join("\r\n")}function V(e,t,n){var r=U("div","frh-tile");return r.appendChild(U("div","frh-tile-k",e)),r.appendChild(U("div","frh-tile-v",t)),n&&r.appendChild(U("div","frh-tile-s",n)),r}function K(){a.textContent="";var r=M(t.tab);if("bo"===t.tab&&n.bo_unavailable&&a.appendChild(U("p","frh-note","Backorders could not be loaded at the last update. They will be back at the next one.")),r.length){var o=t.shown||e.pageSize,i=U("div","frh-wrap");if(i.appendChild(Z(t.tab,r.slice(0,o))),a.appendChild(i),r.length>o){var d=U("div","frh-more"),l=U("button","frh-btn","Show more ("+(r.length-o)+" left)");l.type="button",l.addEventListener("click",function(){t.shown=o+e.pageSize,K()}),d.appendChild(l),a.appendChild(d)}}else a.appendChild(U("p","frh-meta",t.q||J()&&W()?"Nothing matches.":"dealers"===t.tab?"No dealers yet.":"orders"===t.tab?"No open orders.":"inv"===t.tab?"No inventory.":"No open backorders."))}function _(){var e=function(){var e=P(),t=n.dealers.filter(X),r={},o={dealers:t.length,orders:0,open:0,bo:0,bv:0,ytd:0,pytd:0,l12m:0};return t.forEach(function(e){r[e.i]=1,o.ytd+=Number(e.y)||0,o.pytd+=Number(e.py)||0,o.l12m+=Number(e.l)||0}
5559),n.orders.forEach(function(e){r[e.d]&&(o.orders++,o.open+=Number(e.t)||0)}),n.bo.forEach(function(t){q(t,e)&&(o.bo++,o.bv+=Number(t.t)||0)}),o}();i.textContent="",i.appendChild(V("Dealers",String(e.dealers))),i.appendChild(V("Open orders",String(e.orders),z(e.open))),i.appendChild(V("Open backorder lines",String(e.bo),z(e.bv))),n.sales_at&&(i.appendChild(V("Sales this year",z(e.ytd),function(e,t){if(!t)return"";var n=Math.round((e-t)/t*100);return(n>=0?"+":"")+n+"% vs last year"}(e.ytd,e.pytd)||"Last year to date "+z(e.pytd))),i.appendChild(V("Last 12 months",z(e.l12m))))}function $(e){var t=0;return n.dealers.forEach(function(n){n.r===e&&t++}),t}function ee(){t.shown=0,t.open={},te(),_(),K()}function te(){if(d.textContent="",[[!1,"My accounts",$(n.me.name)],[!0,"Whole agency",n.dealers.length]].forEach(function(e){var n=U("button","frh-tab"+(t.agency===e[0]?" on":""),e[1]+" ("+e[2]+")");n.type="button",n.setAttribute("data-scope",e[0]?"agency":"mine"),n.setAttribute("aria-pressed",t.agency===e[0]?"true":"false"),n.addEventListener("click",function(){t.agency!==e[0]&&(t.agency=e[0],t.rep="",ee())}),d.appendChild(n)}),t.agency){var e=U("select");e.setAttribute("aria-label","Rep"),e.appendChild(new Option("All reps ("+n.dealers.length+")","")),(n.reps||[]).forEach(function(t){var r=$(t);(r||t===n.me.name)&&e.appendChild(new Option(t+(t===n.me.name?" (you)":"")+" ("+r+")",t))}),$("(agency)")&&e.appendChild(new Option("Agency accounts ("+$("(agency)")+")","(agency)")),e.value=t.rep,e.addEventListener("change",function(){t.rep=e.value,ee()}),d.appendChild(e)}var r;d.appendChild(U("span","frh-meta frh-scope-label",(r=W(),t.agency?r?"(agency)"===r?"Agency accounts (no rep named on the group)":r===n.me.name?"Your own accounts":r+"\u2019s accounts":"Every dealer of "+n.me.agency:"Your own accounts")))}function ne(e){n=e,t.agency=J()&&!$(e.me.name),t.rep="",o.textContent="",o.appendChild(U("h1","","Rep Home")),o.appendChild(U("p","frh-sub","Welcome, "+e.me.name+" \xb7 "+e.me.agency)),o.appendChild(U("p","frh-meta","Updated "+B(e.at)+(e.sales_at?" \xb7 sales as of "+B(e.sales_at):""))),J()&&(d=U("div","frh-bar frh-scope"),o.appendChild(d),te()),i=U("div","frh-tiles"),o.appendChild(i),_(),o.appendChild(function(){var e=U("div","frh-inv");if(!r)return e.appendChild(U("span","frh-meta","The inventory list is not ready yet. It comes with the next update.")),e;var n=U("div");n.appendChild(U("strong","","Available inventory")),n.appendChild(U("span","frh-meta"," as of "+B(r.at)+" \xb7 on hand less safety stock")),e.appendChild(n),e.appendChild(U("span","frh-spacer"));var o=U("label"),a=U("input");a.type="checkbox",a.checked=t.inStock,a.addEventListener("change",function(){t.inStock=a.checked,t.shown=0,"inv"===t.tab&&K()}),o.appendChild(a),o.appendChild(document.createTextNode("In stock only")),e.appendChild(o);var i=U("button","frh-btn frh-btn-p","Download Excel");i.type="button",i.addEventListener("click",function(){var e,n,o,a;e=t.inStock,n=xe(r,e),o=de(r.at,e),(a=document.createElement("a")).href=URL.createObjectURL(n),a.download=o,document.body.appendChild(a),a.click(),setTimeout(function(){URL.revokeObjectURL(a.href),a.parentNode&&a.parentNode.removeChild(a)},1e3)}),e.appendChild(i);var d=U("button","frh-btn","Print / PDF");return d.type="button",d.addEventListener("click",function(){!function(e){var t=document.getElementById("frh-print");t&&t.parentNode.removeChild(t);var n=document.createElement("iframe");n.id="frh-print",n.setAttribute("aria-hidden","true"),n.style.cssText="position:fixed;right:0;bottom:0;width:0;height:0;border:0;visibility:hidden",document.body.appendChild(n);var o=n.contentDocument;be(o,r,e);var a=o.querySelector("img"),i=function(){try{n.contentWindow.focus(),n.contentWindow.print()}catch(e){}};a&&!a.complete?(a.onload=i,a.onerror=i):i()}(t.inStock)}),e.appendChild(d),e}());var l=U("div","frh-bar"),p=[["dealers","Dealers"],["orders","Open orders"],["bo","Backorders"]];r&&p.push(["inv","Inventory"]),p.forEach(function(e){var n=U("button","frh-tab"+(t.tab===e[0]?" on":""),e[1]);n.type="button",n.setAttribute("data-tab",e[0]),n.addEventListener("click",function(){t.tab=e[0],t.shown=0,Array.prototype.forEach.call(l.querySelectorAll(".frh-tab"),function(e){e.className="frh-tab"+(e.getAttribute("data-tab")===t.tab?" on":"")}),K()}),l.appendChild(n)});var s=U("input");s.type="search",s.placeholder="Search dealers, contacts, POs, SKUs, products",s.addEventListener("input",function(){t.q=s.value,t.shown=0,K()}),l.appendChild(s);var f=U("button","frh-btn","Download CSV");f.type="button",f.addEventListener("click",function(){var e,n,r;e=t.tab,n=Y(e,M(e)),(r=document.createElement("a")).href=URL.createObjectURL(new Blob([n],{type:"text/csv"})),r.download="rep-home-"+e+".csv",document.body.appendChild(r),r.click(),setTimeout(function(){URL.revokeObjectURL(r.href),r.parentNode.removeChild(r)},1e3)}),l.appendChild(f),o.appendChild(l),a=U("div","frh-body"),o.appendChild(a),K()}function re(e){return!!(e&&e.rows&&e.rows.length&&e.cols&&10===e.cols.length&&e.stock&&"object"==typeof e.stock)}
5559function oe(e){return"number"==typeof e?"$"+e.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}):""}function ae(e){var t=new Date(e);return isNaN(t.getTime())?new Date:t}function ie(e){return ae(e).toLocaleString("en-US",{weekday:"long",month:"long",day:"numeric",year:"numeric",hour:"numeric",minute:"2-digit"})}function de(e,t,n){var r=ae(e),o=function(e){return(e<10?"0":"")+e};return o(r.getFullYear()%100)+o(r.getMonth()+1)+o(r.getDate())+"-Active-Inventory-MSRP-MAP-Only"+(t?"-In-Stock":"")+"."+(n||"xlsx")}function le(e,t){return"FAXON FIREARMS "+ae(e).getFullYear()+" ACTIVE INVENTORY"+(t?" (IN STOCK)":"")}function pe(e,t){var n=new TextEncoder,r=[],o=[],a=0,i=new Date,d=i.getHours()<<11|i.getMinutes()<<5|i.getSeconds()>>1,l=i.getFullYear()-1980<<9|i.getMonth()+1<<5|i.getDate();e.forEach(function(e){var t=n.encode(e.name),i="string"==typeof e.data?n.encode(e.data):e.data,p=function(e){if(!x){x=[];for(var t=0;t<256;t++){for(var n=t,r=0;r<8;r++)n=1&n?3988292384^n>>>1:n>>>1;x[t]=n>>>0}}for(var o=4294967295,a=0;a<e.length;a++)o=x[255&(o^e[a])]^o>>>8;return(4294967295^o)>>>0}(i),s=new DataView(new ArrayBuffer(30));s.setUint32(0,67324752,!0),s.setUint16(4,20,!0),s.setUint16(6,2048,!0),s.setUint16(8,0,!0),s.setUint16(10,d,!0),s.setUint16(12,l,!0),s.setUint32(14,p,!0),s.setUint32(18,i.length,!0),s.setUint32(22,i.length,!0),s.setUint16(26,t.length,!0),s.setUint16(28,0,!0),r.push(new Uint8Array(s.buffer),t,i);var f=new DataView(new ArrayBuffer(46));f.setUint32(0,33639248,!0),f.setUint16(4,20,!0),f.setUint16(6,20,!0),f.setUint16(8,2048,!0),f.setUint16(10,0,!0),f.setUint16(12,d,!0),f.setUint16(14,l,!0),f.setUint32(16,p,!0),f.setUint32(20,i.length,!0),f.setUint32(24,i.length,!0),f.setUint16(28,t.length,!0),f.setUint32(42,a,!0),o.push(new Uint8Array(f.buffer),t),a+=30+t.length+i.length});var p=0;o.forEach(function(e){p+=e.length});var s=new DataView(new ArrayBuffer(22));return s.setUint32(0,101010256,!0),s.setUint16(8,e.length,!0),s.setUint16(10,e.length,!0),s.setUint32(12,p,!0),s.setUint32(16,a,!0),new Blob(r.concat(o,[new Uint8Array(s.buffer)]),{type:t})}function se(e){return String(null==e?"":e).replace(/[\u0000-\u0008\u000b\u000c\u000e-\u001f\ufffe\uffff]/g,"").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")}function fe(e){for(var t=atob(e),n=new Uint8Array(t.length),r=0;r<t.length;r++)n[r]=t.charCodeAt(r);return n}function ce(e,t){return"ABCDEFGHIJ".charAt(e)+t}function he(e,t,n,r){return'<c r="'+ce(e,t)+'" s="'+n+'" t="inlineStr"><is><t xml:space="preserve">'+se(r)+"</t></is></c>"}function ue(e,t,n,r){return'<c r="'+ce(e,t)+'" s="'+n+'"><v>'+r+"</v></c>"}function me(e,t,n){return'<c r="'+ce(e,t)+'" s="'+n+'"/>'}function ge(e,t,n){return'<row r="'+e+'"'+(t?' ht="'+t+'" customHeight="1"':"")+">"+n.join("")+"</row>"}function xe(e,t){for(var n=e.rows.filter(function(e){return!t||"number"==typeof e[6]&&e[6]>0}),r=g+Math.max(n.length,1),o=[me(0,2,0),he(1,2,1,le(e.at,t))],a=2;a<10;a++)o.push(me(a,2,1));var i=[ge(1,6,[]),ge(2,26,o),ge(3,17,[he(1,3,2,s),he(5,3,4,p)]),ge(4,17,[he(1,4,3,"As of "+ie(e.at))]),ge(5,17,[he(1,5,3,f)]),ge(6,8,[]),ge(g,32,e.cols.map(function(e,t){return he(t,g,5,e)}))];n.forEach(function(e,t){for(var n=g+1+t,r=[],o=0;o<10;o++){var a=e[o];6===o?r.push("number"==typeof a?ue(o,n,0===a?9:8,a):me(o,n,8)):o>=8?r.push("number"==typeof a?ue(o,n,10,a):me(o,n,10)):r.push(he(o,n,5===o?7:2===o||3===o||7===o?11:6,a))}i.push(ge(n,0,r))});var d="A"+g+":J"+r,l="&L&8"+se("\xa9"+ae(e.at).getFullYear()+" FAXON FIREARMS \xb7 Active Inventory as of "+B(e.at))+"&R&8Page &P of &N",x=b+'<worksheet xmlns="'+v+'" xmlns:r="'+y+'"><sheetPr><pageSetUpPr fitToPage="1"/></sheetPr><dimension ref="A1:J'+r+'"/><sheetViews><sheetView showGridLines="0" workbookViewId="0"><pane ySplit="'+g+'" topLeftCell="A'+(g+1)+'" activePane="bottomLeft" state="frozen"/><selection pane="bottomLeft" activeCell="A'+(g+1)+'" sqref="A'+(g+1)+'"/></sheetView></sheetViews><sheetFormatPr defaultRowHeight="15"/><cols>'+m.map(function(e,t){return'<col min="'+(t+1)+'" max="'+(t+1)+'" width="'+e+'" customWidth="1"/>'}).join("")+"</cols><sheetData>"+i.join("")+'</sheetData><autoFilter ref="'+d+'"/><mergeCells count="2"><mergeCell ref="B2:J2"/><mergeCell ref="F3:J5"/></mergeCells><printOptions horizontalCentered="1"/><pageMargins left="0.25" right="0.25" top="0.5" bottom="0.6" header="0.3" footer="0.3"/><pageSetup paperSize="1" orientation="landscape" fitToWidth="1" fitToHeight="0"/><headerFooter><oddFooter>
5559'+l+'</oddFooter></headerFooter><drawing r:id="rId1"/></worksheet>',I=9525,A="'Active Inventory'",F=b+'<xdr:wsDr xmlns:xdr="http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing" xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="'+y+'"><xdr:oneCellAnchor><xdr:from><xdr:col>0</xdr:col><xdr:colOff>95250</xdr:colOff><xdr:row>0</xdr:row><xdr:rowOff>57150</xdr:rowOff></xdr:from><xdr:ext cx="'+h*I+'" cy="'+u*I+'"/><xdr:pic><xdr:nvPicPr><xdr:cNvPr id="2" name="Faxon Firearms"/><xdr:cNvPicPr><a:picLocks noChangeAspect="1"/></xdr:cNvPicPr></xdr:nvPicPr><xdr:blipFill><a:blip r:embed="rId1"/><a:stretch><a:fillRect/></a:stretch></xdr:blipFill><xdr:spPr><a:xfrm><a:off x="0" y="0"/><a:ext cx="'+h*I+'" cy="'+u*I+'"/></a:xfrm><a:prstGeom prst="rect"><a:avLst/></a:prstGeom></xdr:spPr></xdr:pic><xdr:clientData/></xdr:oneCellAnchor></xdr:wsDr>',S=function(e,t,n){return'<Relationship Id="'+e+'" Type="'+y+"/"+t+'" Target="'+n+'"/>'},L=function(e){return b+'<Relationships xmlns="'+C+'">'+e+"</Relationships>"};return pe([{name:"[Content_Types].xml",data:b+'<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types"><Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml"/><Default Extension="xml" ContentType="application/xml"/><Default Extension="png" ContentType="image/png"/><Override PartName="/xl/workbook.xml" ContentType="'+w+'spreadsheetml.sheet.main+xml"/><Override PartName="/xl/worksheets/sheet1.xml" ContentType="'+w+'spreadsheetml.worksheet+xml"/><Override PartName="/xl/styles.xml" ContentType="'+w+'spreadsheetml.styles+xml"/><Override PartName="/xl/drawings/drawing1.xml" ContentType="'+w+'drawing+xml"/></Types>'},{name:"_rels/.rels",data:L(S("rId1","officeDocument","xl/workbook.xml"))},{name:"xl/workbook.xml",data:b+'<workbook xmlns="'+v+'" xmlns:r="'+y+'"><bookViews><workbookView xWindow="0" yWindow="0" windowWidth="28800" windowHeight="16000"/></bookViews><sheets><sheet name="Active Inventory" sheetId="1" r:id="rId1"/></sheets><definedNames><definedName name="_xlnm._FilterDatabase" localSheetId="0" hidden="1">'+A+"!$A$"+g+":$J$"+r+'</definedName><definedName name="_xlnm.Print_Titles" localSheetId="0">'+A+"!$"+g+":$"+g+"</definedName></definedNames></workbook>"},{name:"xl/_rels/workbook.xml.rels",data:L(S("rId1","worksheet","worksheets/sheet1.xml")+S("rId2","styles","styles.xml"))},{name:"xl/styles.xml",data:k},{name:"xl/worksheets/sheet1.xml",data:x},{name:"xl/worksheets/_rels/sheet1.xml.rels",data:L(S("rId1","drawing","../drawings/drawing1.xml"))},{name:"xl/drawings/drawing1.xml",data:F},{name:"xl/drawings/_rels/drawing1.xml.rels",data:L(S("rId1","image","../media/image1.png"))},{name:"xl/media/image1.png",data:fe(c)}],w+"spreadsheetml.sheet")}function be(e,t,n){var r=function(t,n,r){var o=e.createElement(t);return n&&(o.className=n),null!=r&&""!==r&&(o.textContent=String(r)),o};e.title=de(t.at,n,"pdf").replace(/\.pdf$/,"");var o=e.createElement("style");o.textContent=I,e.head.appendChild(o);var a=r("div","b"),i=r("img");i.src="data:image/png;base64,"+c,i.alt="Faxon Firearms",a.appendChild(i);var d=r("div","w");d.appendChild(r("div","t",le(t.at,n)));var l=r("div","l"),h=r("div");h.appendChild(r("div","s",s)),h.appendChild(r("div","m","As of "+ie(t.at))),h.appendChild(r("div","m",f)),l.appendChild(h),l.appendChild(r("div","n",p)),d.appendChild(l),a.appendChild(d),e.body.appendChild(a);var u=r("table"),g=r("tr"),x=r("tbody"),b=r("colgroup"),v=0;m.forEach(function(e){v+=e}),m.forEach(function(e){var t=r("col");t.style.width=(e/v*100).toFixed(2)+"%",b.appendChild(t)}),u.appendChild(b),t.cols.forEach(function(e){g.appendChild(r("th","",e))});var y=r("thead");y.appendChild(g),u.appendChild(y);var C=t.rows.filter(function(e){return!n||"number"==typeof e[6]&&e[6]>0});
5559return C.forEach(function(e){var t=r("tr");e.forEach(function(e,n){6===n?t.appendChild(r("td","number"==typeof e?"q"+(0===e?" z":""):"q","number"==typeof e?e.toLocaleString("en-US"):"")):n>=8?t.appendChild(r("td","r",oe(e))):t.appendChild(r("td",2===n||3===n||7===n?"d":"",e))}),x.appendChild(t)}),u.appendChild(x),e.body.appendChild(u),e.body.appendChild(r("div","f","\xa9"+ae(t.at).getFullYear()+" FAXON FIREARMS \xb7 "+C.length+" SKUs \xb7 Active Inventory as of "+B(t.at))),e}function ve(e,t){if(t=String(t||"").trim())return Object.prototype.hasOwnProperty.call(e.stock,t)?e.stock[t]:(e.upper||(e.upper={},Object.keys(e.stock).forEach(function(t){var n=t.toUpperCase();n in e.upper||(e.upper[n]=e.stock[t])})),Object.prototype.hasOwnProperty.call(e.upper,t.toUpperCase())?e.upper[t.toUpperCase()]:void 0)}function ye(e,t){var n=document.getElementById("frh-stock");if(!n){(n=document.createElement("div")).id="frh-stock",n.setAttribute("role","status");for(var r=e.closest&&e.closest(".productSKU")||e,o=r,a=r.nextElementSibling;a&&("SPAN"===a.tagName||a.classList&&a.classList.contains("productUPC"));a=a.nextElementSibling)o=a;o.parentNode.insertBefore(n,o.nextSibling)}var i=ve(t,e.textContent);n.textContent="",n.className="frh-stock"+(0===i?" frh-stock--out":""),n.appendChild(U("span","frh-stock-tag","Rep")),n.appendChild(U("strong","","number"==typeof i?i.toLocaleString("en-US")+" available to ship"+(0===i?" (out of stock)":""):"Not tracked in inventory")),n.appendChild(U("span","frh-stock-at"," \xb7 on hand less safety stock, as of "+B(t.at)))}function Ce(){var t=document.querySelector(".productView [data-product-sku]")||document.querySelector("[data-product-sku]");t&&S()&&function(){try{return"1"===window.localStorage.getItem(e.seenKey)}catch(e){return!1}}()&&F('query RepStock { customer { entityId customerGroupName metafields(namespace: "'+e.namespace+'", keys: '+JSON.stringify(e.invKeys)+", first: "+e.invKeys.length+") { edges { node { key value } } } } }").then(function(n){var r=n&&n.customer;return r&&A(r.customerGroupName)?T(E(r,e.invKeys)).then(function(e){re(e)&&(!function(){if(!document.getElementById("frh-pdp-css")){var e=document.createElement("style");e.id="frh-pdp-css",e.textContent=".frh-stock{display:block;width:100%;flex-basis:100%;margin:.4rem 0;padding:6px 10px;font-size:15px;color:#4A4642;background:#f3f5f8;border-left:4px solid #001734;border-radius:3px}.frh-stock strong{color:#001734}.frh-stock--out strong{color:#832729}.frh-stock-tag{display:inline-block;margin-right:.5em;padding:0 6px;border-radius:3px;background:#001734;color:#fff;font-size:11px;letter-spacing:.06em;text-transform:uppercase;vertical-align:1px}.frh-stock-at{color:#6b6660;font-size:13px}",(document.head||document.documentElement).appendChild(e)}}(),ye(t,e),window.MutationObserver&&new MutationObserver(function(){ye(t,e)}).observe(t,{childList:!0,characterData:!0,subtree:!0}))}):(L(!1),null)}).catch(function(){})}function we(){var t;(window.location.pathname||"/").replace(/\/?$/,"/").toLowerCase()===e.path?(o=document.getElementById("faxon-rep-home"))&&(function(){if(!document.getElementById("frh-css")){var e=document.createElement("style");e.id="frh-css",e.textContent=["#faxon-rep-home{font-size:15px;color:#2c2a27;max-width:1280px;margin:0 auto 2rem}",'#faxon-rep-home h1{font-family:"Bebas Neue",sans-serif;letter-spacing:.03em;color:#001734;margin:.2rem 0}',".frh-sub{color:#4A4642;margin:0 0 .25rem}.frh-meta{color:#6b6660;font-size:13px}",".frh-tiles{display:flex;flex-wrap:wrap;gap:12px;margin:1rem 0}",".frh-tile{flex:1 1 180px;box-sizing:border-box;border:1px solid #d9d5d0;border-left:4px solid #832729;border-radius:4px;padding:12px 14px;background:#fff}",".frh-tile-k{font-size:12px;text-transform:uppercase;letter-spacing:.06em;color:#6b6660}",".frh-tile-v{font-size:22px;font-weight:700;color:#001734;margin-top:2px}.frh-tile-s{font-size:13px;color:#4A4642}",".frh-bar{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin:.5rem 0}",".frh-tab{border:1px solid #d9d5d0;background:#fff;color:#001734;padding:7px 14px;border-radius:4px;cursor:pointer;font-size:14px}",".frh-tab.on{background:#001734;color:#fff;border-color:#001734}",".frh-bar input,.frh-bar select{height:36px;padding:0 10px;border:1px solid #d9d5d0;border-radius:4px;font-size:14px}",".frh-bar input{flex:1 1 220px;min-width:180px}.frh-spacer{flex:1}",".frh-btn{border:1px solid #d9d5d0;background:#fff;color:#832729;padding:7px 12px;border-radius:4px;cursor:pointer;font-size:13px}",".frh-wrap{overflow-x:auto;border:1px solid #e6e2dd;border-radius:4px}","table.frh-t{width:100%;border-collapse:collapse;font-size:14px;background:#fff}",".frh-t th{text-align:left;font-size:12px;text-transform:uppercase;letter-spacing:.05em;
5559color:#6b6660;padding:8px;border-bottom:2px solid #e6e2dd;cursor:pointer;white-space:nowrap;background:#faf9f7}",".frh-t td{padding:8px;border-bottom:1px solid #eee;vertical-align:top}",".frh-t tr.frh-row{cursor:pointer}.frh-t tr.frh-row:hover td{background:#faf7f2}",".frh-num{text-align:right;white-space:nowrap}.frh-strong{font-weight:700;color:#001734}",".frh-link{color:#832729;text-decoration:none}.frh-link:hover{text-decoration:underline}",".frh-detail td{background:#fbfaf8}.frh-detail h4{margin:.25rem 0;font-size:14px;color:#001734}",".frh-badge{display:inline-block;padding:1px 8px;border-radius:999px;font-size:12px;background:#f1ece6;color:#4A4642;white-space:nowrap}",".frh-note{border-left:4px solid #832729;background:#f7f5f2;padding:10px 14px;margin:.75rem 0}",".frh-more{margin:10px 0;text-align:center}",".frh-scope{margin:.75rem 0 0}.frh-scope select{min-width:200px}.frh-scope-label{margin-left:4px}",".frh-inv{display:flex;flex-wrap:wrap;gap:8px 12px;align-items:center;border:1px solid #d9d5d0;border-left:4px solid #001734;border-radius:4px;padding:10px 14px;background:#fff;margin:0 0 .75rem}",".frh-inv strong{color:#001734}.frh-inv label{font-size:14px;color:#4A4642;display:inline-flex;gap:6px;align-items:center;cursor:pointer}",".frh-btn-p{background:#001734;color:#fff;border-color:#001734}.frh-zero{color:#832729;font-weight:700}",".frh-show-sm{display:none}","@media (max-width:760px){.frh-hide-sm{display:none}.frh-show-sm{display:block}.frh-tile{flex-basis:130px}.frh-tile-v{font-size:18px}}"].join(""),(document.head||document.documentElement).appendChild(e)}}(),S()?F((t=e.keys.concat(e.invKeys),'query RepHome { customer { entityId firstName lastName customerGroupName metafields(namespace: "'+e.namespace+'", keys: '+JSON.stringify(t)+", first: "+t.length+") { edges { node { key value } } } } }")).then(function(t){var n=t&&t.customer;if(!n||!A(n.customerGroupName))return L(!1),j("This page is for Faxon sales reps. If you are one and see this, contact "+e.contact+"."),null;L(!0);var o=T(E(n,e.invKeys)).then(function(e){return re(e)?e:null},function(){return null});return Promise.all([T(E(n)),o]).then(function(t){var n=t[0];r=t[1],n?ne(n):j("Your dashboard is not ready yet. It appears within the hour after your account is set up. Questions: "+e.contact+".")})}).catch(function(e){j(e&&"old-browser"===e.message?"This page needs a newer browser (the current Chrome, Edge, Safari or Firefox).":"Your dashboard could not be loaded just now. Please refresh the page in a minute.")}):j("This page is for Faxon sales reps.",O("/login.php","Log in"))):Ce()}}(); 5560</script>
5560<!-- ============================================================ 5561 faxonfirearms.com â footer scripts 5562 Last cleaned: 2026-09-16 5563 ============================================================ --> 5564 5565<!-- Elfsight widget platform -->
5566<script src="https://apps.elfsight.com/p/platform.js" defer></script>
5566 5567<div class="elfsight-app-3764479f-8262-448f-8e87-8ee8e4b21897"></div> 5568 5569<!-- NOTE: Google only reads this tag from <head>. It is inert here. 5570 Kept as-is so nothing changes; move to <head> if you ever need 5571 to re-verify Search Console. --> 5572<meta name="google-site-verification" content="911WyqwjZ-hoUtVg8aswVEV8UXqEedYLFm8m6hKuIEc" /> 5573 5574<!-- Google tag (gtag.js) -->
vendor: 64 bytes, lines 5574-5575
5574 5575<script async src="https://www.googletagmanager.com/gtag/js?id=
5575G-N43JEEJNHD
vendor: 12 bytes, line 5575
5575"></script>
5576<script> 5577
vendor: 134 bytes, lines 5577-5581
5577window.dataLayer = window.dataLayer || []; 5578 function gtag(){dataLayer.push(arguments);} 5579 gtag('js', new Date()); 5580 5581 gtag('config', '
5581G-N43JEEJNHD
vendor: 4 bytes, line 5581
5581');
5582</script>
5582 5583 5584<!-- Hides Custom Address Fields In Checkout (fields 40, 42, 44, 46) 5585 WARNING: this hides the fields but does NOT disable validation. 5586 If any of the four are set to "required" in the form builder, 5587 checkout will silently fail for shoppers. --> 5588<style> 5589#FormField_40, 5590#FormField_42, 5591#FormField_44, 5592#FormField_46 { display: none !important; } 5593 5594.dynamic-form-field.dynamic-form-field--field_40, 5595.dynamic-form-field.dynamic-form-field--field_42, 5596.dynamic-form-field.dynamic-form-field--field_44, 5597.dynamic-form-field.dynamic-form-field--field_46 { display: none !important; } 5598</style> 5599 5600<!-- CSS for Returns-Exchanges Page --> 5601<style id="frp-styles"> 5602#faxon-returns-portal *{box-sizing:border-box;margin:0;padding:0} 5603#faxon-returns-portal{font-family:Arial,Helvetica,sans-serif;font-size:14px;color:#222} 5604#faxon-returns-portal .frp-hero{background:#832729;color:#fff;text-align:center;padding:36px 24px 28px;margin:0 -30px 28px} 5605#faxon-returns-portal .frp-hero h2{font-size:26px;font-weight:700;margin-bottom:8px;color:#fff;border:none;padding:0} 5606#faxon-returns-portal .frp-hero p{font-size:15px;opacity:.9;max-width:580px;margin:0 auto;line-height:1.5;color:#fff} 5607#faxon-returns-portal .frp-layout{display:flex;gap:28px;align-items:flex-start} 5608#faxon-returns-portal .frp-main{flex:1;min-width:0} 5609#faxon-returns-portal .frp-sidebar{width:310px;flex-shrink:0} 5610#faxon-returns-portal .frp-card{background:#fff;border-radius:6px;border:1px solid #ddd;overflow:hidden;margin-bottom:20px} 5611#faxon-returns-portal .frp-card-hdr{background:#001734;color:#fff;font-size:13px;font-weight:700;text-transform:uppercase;letter-spacing:.8px;padding:12px 20px} 5612#faxon-returns-portal .frp-card-body{padding:22px 20px} 5613#faxon-returns-portal .frp-steps{display:flex;flex-direction:column;gap:14px} 5614#faxon-returns-portal .frp-step{display:flex;gap:12px;align-items:flex-start} 5615#faxon-returns-portal .frp-step-num{flex-shrink:0;width:26px;height:26px;border-radius:50%;background:#832729;color:#fff;font-size:12px;font-weight:700;display:flex;align-items:center;justify-content:center;line-height:1} 5616#faxon-returns-portal .frp-step-txt{font-size:13px;line-height:1.5} 5617#faxon-returns-portal .frp-section-lbl{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.8px;color:#888;border-bottom:1px solid #ddd;padding-bottom:5px;margin:22px 0 16px} 5618#faxon-returns-portal .frp-row{margin-bottom:16px} 5619#faxon-returns-portal .frp-row label{display:block;font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.5px;color:#001734;margin-bottom:5px} 5620#faxon-returns-portal .frp-row input,#faxon-returns-portal .frp-row select,#faxon-returns-portal .frp-row textarea{width:100%;padding:9px 12px;border:1px solid #ddd;border-radius:4px;font-family:Arial,Helvetica,sans-serif;font-size:14px;color:#222;background:#fff;outline:none} 5621#faxon-returns-portal .frp-row input:focus,#faxon-returns-portal .frp-row select:focus,#faxon-returns-portal .frp-row textarea:focus{border-color:#832729;box-shadow:0 0 0 2px rgba(131,39,41,.12)} 5622#faxon-returns-portal .frp-row textarea{resize:vertical;min-height:88px;line-height:1.5} 5623#faxon-returns-portal .frp-hint{font-size:11px;color:#888;margin-top:4px;line-height:1.4} 5624#faxon-returns-portal .frp-req{color:#832729;margin-left:2px} 5625#faxon-returns-portal .frp-2col{display:grid;grid-template-columns:1fr 1fr;gap:14px} 5626#faxon-returns-portal .frp-res-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px} 5627#faxon-returns-portal .frp-res-opt input[type=radio]{display:none} 5628#faxon-returns-portal .frp-res-opt label{display:flex;align-items:center;gap:9px;padding:11px 13px;border:2px solid #ddd;border-radius:5px;cursor:pointer;font-size:13px;font-weight:600;color:#222} 5629#faxon-returns-portal .frp-res-opt label:hover{border-color:#001734} 5630#faxon-returns-portal .frp-res-opt input[type=radio]:checked+label{border-color:#832729;background:rgba(131,39,41,.05);color:#832729} 5631#faxon-returns-portal .frp-policy{display:flex;gap:10px;align-items:flex-start;margin-bottom:18px} 5632#faxon-returns-portal .frp-policy input[type=checkbox]{width:15px;height:15px;margin-top:3px;flex-shrink:0;cursor:pointer} 5633#faxon-returns-portal .frp-policy p{font-size:13px;color:#666;line-height:1.5} 5634#faxon-returns-portal .frp-btn{width:100%;padding:13px;background:#832729;color:#fff;border:none;border-radius:4px;font-size:15px;font-weight:700;cursor:pointer;letter-spacing:.3px} 5635#faxon-returns-portal .frp-btn:hover{background:#6b1f21} 5636#faxon-returns-portal .frp-btn:disabled{background:#aaa;cursor:not-allowed} 5637#faxon-returns-portal .frp-note{text-align:center;font-size:12px;color:#888;margin-top:12px;line-height:1.5} 5638#faxon-returns-portal .frp-success{display:none;text-align:center;padding:32px 20px} 5639#faxon-returns-portal .frp-success-icon{width:56px;height:56px;background:#e8f5e9;border-radius:50%;display:flex;align-items:center;justify-content:center;margin:0 auto 16px} 5640#faxon-returns-portal .frp-success h3{font-size:20px;color:#001734;margin-bottom:8px} 5641#faxon-returns-portal .frp-success p{font-size:14px;color:#666;line-height:1.6} 5642#faxon-returns-portal .frp-rma{display:inline-block;margin:14px auto;padding:10px 24px;background:#f4f4f4;border:2px dashed #ddd;border-radius:4px;font-size:18px;font-weight:700;letter-spacing:2px;color:#001734} 5643#faxon-returns-portal .frp-error-msg{background:#fff0f0;border:1px solid #832729;border-radius:4px;padding:12px 16px;font-size:13px;color:#832729;margin-bottom:16px;display:none} 5644#faxon-returns-portal .frp-policy-list{list-style:none} 5645#faxon-returns-portal .frp-policy-list li{padding:9px 0;border-bottom:1px solid #eee;font-size:13px;line-height:1.5;display:flex;gap:8px} 5646#faxon-returns-portal .frp-policy-list li:last-child{border-bottom:none} 5647#faxon-returns-portal .frp-dot{flex-shrink:0;color:#832729} 5648#faxon-returns-portal .frp-elig-list{list-style:none} 5649#faxon-returns-portal .frp-elig-list li{padding:8px 0;border-bottom:1px solid #eee;font-size:13px;display:flex;gap:8px;line-height:1.4} 5650#faxon-returns-portal .frp-elig-list li:last-child{border-bottom:none} 5651#faxon-returns-portal .frp-yes{color:#1F7A1F;font-weight:700;flex-shrink:0} 5652#faxon-returns-portal .frp-no{color:#832729;font-weight:700;flex-shrink:0} 5653#faxon-returns-portal .frp-disclaimer{margin-top:12px;padding:11px 14px;border-left:3px solid #832729;background:#fff8f8;font-size:12px;color:#666;line-height:1.6;border-radius:0 4px 4px 0} 5654#faxon-returns-portal .frp-disclaimer+.frp-disclaimer{margin-top:8px} 5655#faxon-returns-portal .frp-contact{display:flex;flex-direction:column;gap:11px} 5656#faxon-returns-portal .frp-contact-row{display:flex;gap:9px;font-size:13px;align-items:flex-start} 5657#faxon-returns-portal .frp-contact-row a{color:#832729;text-decoration:none;font-weight:600} 5658#faxon-returns-portal .frp-addr{margin-top:12px;padding:11px;background:#f4f4f4;border:1px solid #ddd;border-radius:4px;font-size:12px;color:#666;line-height:1.7} 5659#faxon-returns-portal .frp-addr strong{display:block;font-size:11px;text-transform:uppercase;letter-spacing:.5px;color:#001734;margin-bottom:3px} 5660#faxon-returns-portal .frp-ship-block{font-size:13px;color:#444;line-height:1.6} 5661#faxon-returns-portal .frp-ship-block+.frp-ship-block{margin-top:13px} 5662#faxon-returns-portal .frp-ship-block strong{display:block;color:#001734;margin-bottom:3px} 5663@media(max-width:720px){#faxon-returns-portal .frp-layout{flex-direction:column}#faxon-returns-portal .frp-sidebar{width:100%}#faxon-returns-portal .frp-hero{margin:0 -20px 20px}} 5664@media(max-width:560px){#faxon-returns-portal .frp-2col,#faxon-returns-portal .frp-res-grid{grid-template-columns:1fr}} 5665</style> 5666
5667<script> 5668window.addEventListener('load', function() { 5669 setTimeout(function() { 5670 if (typeof jQuery !== 'undefined' && window.innerWidth <= 800) { 5671 jQuery('.heroCarousel').each(function() { 5672 if (jQuery(this).hasClass('slick-initialized')) { 5673 jQuery(this).slick('setPosition'); 5674 } 5675 }); 5676 } 5677 }, 150); 5678}); 5679</script>
5679 5680
5680<script>window.__CF$cv$params={r:'a44ffc18599110f5',t:'MTc5MTA3Mjg0OA==',u:'01a10442cc777283a35bfc1f169872b7',ut:'H6x1gRmxb_Bc4ueeQusYIBrrWlXzbiFAq2ttr40S.Jo-1791072849-1.2.1.1-0teW_J_LP9nmcJDTgnnWAolwn_QC3qJkOWzk3hlTjBHgnoiI7rnmGm3t3dc.Mm3GrtLWsRL3DBKE7s6B277NdOhvlEO89JjmGaFPYYo8F1M',i:60};(function(){if(!document.body)return;var s=document.createElement('script');s.src='/cdn-cgi/challenge-platform/scripts/precursor/main.js';document.head.appendChild(s);})();</script>
5680</body> 5681</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.