PageSourceSearch

https://faxonfirearms.com/login.php

html faxonfirearms.com collected 2026-10-04 00:14:10 UTC 405,881 bytes, 5,681 lines download raw bytes

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&#x3D;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&#x3D;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&#x3D;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 &amp; 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 &amp; 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 &amp; 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 &amp; 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 &amp; 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 &amp; 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&amp;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&amp;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&amp;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&amp;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&amp;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 &amp; 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&amp;family=Creepster&amp;family=Luckiest+Guy&amp;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 &amp; 10/22 Day<em>&#9654; COMING SOON</em>',
2103    live: '<span class="fxn-plate">FAXON</span>Glocktober &amp; 10/22 Day<em>&#9654; 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.&nbsp;<strong>UPS&nbsp;</strong>AND&nbsp;<strong>FEDEX&nbsp;</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&#x3D;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&#x3D;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&#x27;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&#x3D;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">&#215;</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 &amp; 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 &amp; 10/22 DAY 2026</a>
2628                        </li>
2629                        <li>
2630                            <a href="https://faxonfirearms.com/haunted-range/">FAXON HAUNTED RANGE | 10/22 DAY &amp; 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 &amp; 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&#x3D;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">&copy; 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&apos;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">&times;</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 &mdash; 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 &mdash; 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;">&times;</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">&times;</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">&#10003;</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 + ' &times; ' + 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, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;')
4043      .replace(/"/g, '&quot;').replace(/'/g, '&#39;');
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,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")}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">&times;</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 &amp; 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="&quot;$&quot;#,##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,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}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="&amp;L&amp;8"+se("\xa9"+ae(e.at).getFullYear()+" FAXON FIREARMS \xb7 Active Inventory as of "+B(e.at))+"&amp;R&amp;8Page &amp;P of &amp;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.