1 2 3<!DOCTYPE html> 4<html class="no-js" lang="en"> 5 <head> 6 7 <title>Military Backpacks, Multicam OCP Gear, Military Bags , Military Luggage</title> 8 9 <link rel="dns-prefetch preconnect" href="https://cdn11.bigcommerce.com/s-3lem6ywgsw" crossorigin><link rel="dns-prefetch preconnect" href="https://fonts.googleapis.com/" crossorigin><link rel="dns-prefetch preconnect" href="https://fonts.gstatic.com/" crossorigin> 10 11 12 <meta property="og:site_name" content="Military Luggage"> 13<meta property="og:type" content="website"> 14<meta property="og:locale" content="en_US"> 15 16<meta property="og:title" content="Military Luggage"> 17 18 19<meta property="og:url" content="militaryluggage.com/"> 20 21 <meta property="og:image" content="https://cdn11.bigcommerce.com/s-3lem6ywgsw/images/stencil/original/download_tran_1770231120__77374.original.png"> 22 23 <title>Firefighter Tools and Apparel Store | Fire Authority</title> 24 25 <meta name="description" content="Gear up with Fire Authority. Your #1 source for top-tier tools and apparel built for first responders. Shop now to stay ready for every call."> 26 27 <!--Router > Homepage > Schema--> 28 <!--MLC Homepage > Schema-->
29<script type="application/ld+json"> 30{ 31 "@context": "https://schema.org", 32 "@type": "Organization", 33 "name": "Military Luggage Company", 34 "url": "https://militaryluggage.com/", 35 "description": "Military Luggage offers a wide selection of durable, high-quality tactical bags and gear. Find the best products for military, outdoor, and travel needs.", 36 "logo": "Website_Logo.png", 37 "contactPoint": [ 38 { 39 "@type": "ContactPoint", 40 "telephone": "+1-844-464-2557", 41 "contactType": "Customer Service", 42 "areaServed": "US", 43 "availableLanguage": ["English"] 44 }, 45 { 46 "@type": "ContactPoint", 47 "telephone": "+1-800-876-4242", 48 "contactType": "Sales", 49 "name": "Agency Services", 50 "areaServed": "US", 51 "availableLanguage": ["English"] 52 } 53 ], 54 "address": { 55 "@type": "PostalAddress", 56 "streetAddress": "1340 Russell Cave Rd", 57 "addressLocality": "Lexington", 58 "addressRegion": "KY", 59 "postalCode": "40505", 60 "addressCountry": "US" 61 }, 62 "sameAs": [ 63 "https://www.facebook.com/militaryluggage", 64 "https://www.instagram.com/militaryluggage", 65 "https://www.linkedin.com/company/military-luggage-company/" 66 ] 67} 68</script>
68 69
70<script type="application/ld+json"> 71{ 72 "@context": "https://schema.org", 73 "@type": "WebSite", 74 "name": "Military Luggage Company", 75 "url": "https://militaryluggage.com", 76 "description": "Military Luggage offers a wide selection of durable, high-quality tactical bags and gear. Find the best products for military, outdoor, and travel needs.", 77 "publisher": { 78 "@type": "Organization", 79 "name": "Military Luggage Company", 80 "url": "https://militaryluggage.com", 81 "logo": "https://cdn11.bigcommerce.com/s-oa21m3mi3f/images/stencil/250x100/ml-logo-new_1767194053__85501.original.jpg" 82 } 83} 84</script>
84 85 86<meta property="og:description" content="Military Luggage offers a wide selection of durable, high-quality tactical bags and gear. Find the best products for military, outdoor, and travel needs."> 87 88 89 <link href="https://cdn11.bigcommerce.com/s-3lem6ywgsw/product_images/MLC_favicon.jpg?t=1525225194" rel="shortcut icon"> 90 <meta name="viewport" content="width=device-width, initial-scale=1"> 91 92
92<script nonce=""> 93 //Change document class from no-js to js so we can detect this in css 94 document.documentElement.className = document.documentElement.className.replace('no-js', 'js'); 95 </script>
95 96 97
97<script nonce=""> 98 function browserSupportsAllFeatures() { 99 return window.Promise 100 && window.fetch 101 && window.URL 102 && window.URLSearchParams 103 && window.WeakMap 104 // object-fit support 105 && ('objectFit' in document.documentElement.style); 106 } 107 108 function loadScript(src) { 109 var js = document.createElement('script'); 110 js.src = src; 111 js.onerror = function () { 112 console.error('Failed to load polyfill script ' + src); 113 }; 114 document.head.appendChild(js); 115 } 116 117 if (!browserSupportsAllFeatures()) { 118 loadScript('https://cdn11.bigcommerce.com/s-3lem6ywgsw/stencil/ca2c5200-a308-013f-e7cf-5e53173c381a/e/8dd29750-b2b5-013e-f7a2-4ef3209772a9/dist/theme-bundle.polyfills.js'); 119 } 120</script>
120 121
121<script nonce="">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>
121 122 123 <!-- Load Lazysizes script ASAP so images will appear --> 124
124<script nonce=""> 125 // Only load visible elements until the onload event fires, after which preload nearby elements 126 window.lazySizesConfig = window.lazySizesConfig || {}; 127 window.lazySizesConfig.loadMode = 1; 128 </script>
128 129
129<script nonce="" async src="https://cdn11.bigcommerce.com/s-3lem6ywgsw/stencil/ca2c5200-a308-013f-e7cf-5e53173c381a/e/8dd29750-b2b5-013e-f7a2-4ef3209772a9/dist/theme-bundle.head_async.js"></script>
129 130 131 <!-- GSAP --> 132
132<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.12.5/gsap.min.js"></script>
132 133 134 <!-- Bootstrap --> 135 <link rel="stylesheet" href="https://cdn11.bigcommerce.com/s-3lem6ywgsw/stencil/ca2c5200-a308-013f-e7cf-5e53173c381a/e/8dd29750-b2b5-013e-f7a2-4ef3209772a9/scss/vendor/bootstrap/bootstrap.min.css"> 136
136<script src="https://cdn11.bigcommerce.com/s-3lem6ywgsw/stencil/ca2c5200-a308-013f-e7cf-5e53173c381a/e/8dd29750-b2b5-013e-f7a2-4ef3209772a9/js/custom/vendor/bootstrap/bootstrap.bundle.min.js"></script>
136 137 <!-- end --> 138 139 <link href="https://fonts.googleapis.com/css?family=Roboto:400&display=block" rel="stylesheet"> 140 141
141<script nonce="" async src="https://cdn11.bigcommerce.com/s-3lem6ywgsw/stencil/ca2c5200-a308-013f-e7cf-5e53173c381a/e/8dd29750-b2b5-013e-f7a2-4ef3209772a9/dist/theme-bundle.font.js"></script>
141 142 143 <link data-stencil-stylesheet href="https://cdn11.bigcommerce.com/s-3lem6ywgsw/stencil/ca2c5200-a308-013f-e7cf-5e53173c381a/e/8dd29750-b2b5-013e-f7a2-4ef3209772a9/css/theme-e10b7960-a308-013f-3ff1-32ae7d358884.css" rel="stylesheet"> 144 145 <!--Intercepting script injection when the URL contains paypal.com/sdk/js--> 146 <!--end--> 147 148 <!-- Start Tracking Code for analytics_googleanalytics --> 149
150<script>
vendor: 355 bytes, lines 150-156
150 151 (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ 152 (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), 153 m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) 154 })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); 155 156 ga('create', '
156UA-34909546-1
vendor: 61 bytes, lines 156-158
156', 'militaryluggage.com'); 157 ga('send', 'pageview'); 158
158ga('require', 'ecommerce', 'ecommerce.js'); 159 160 function trackEcommerce() { 161 this._addTrans = addTrans; 162 this._addItem = addItems; 163 this._trackTrans = trackTrans; 164 } 165 function addTrans(orderID,store,total,tax,shipping,city,state,country) { 166 ga('ecommerce:addTransaction', { 167 'id': orderID, 168 'affiliation': store, 169 'revenue': total, 170 'tax': tax, 171 'shipping': shipping, 172 'city': city, 173 'state': state, 174 'country': country 175 }); 176 } 177 function addItems(orderID,sku,product,variation,price,qty) { 178 ga('ecommerce:addItem', { 179 'id': orderID, 180 'sku': sku, 181 'name': product, 182 'category': variation, 183 'price': price, 184 'quantity': qty 185 }); 186 } 187 function trackTrans() { 188 ga('ecommerce:send'); 189 } 190 var pageTracker = new trackEcommerce(); 191</script>
191 192 193<meta name="google-site-verification" content="gq7XId9mkSPgyoUWPf4GlsUdHV5nlmKSW-Bl3fnRcA0" /> 194 195<!-- Bing tracking-->
196<script>(function(w,d,t,r,u){var f,n,i;w[u]=w[u]||[],f=function(){var o={ti:"6025655"};o.q=w[u],w[u]=new UET(o),w[u].push("pageLoad")},n=d.createElement(t),n.src=r,n.async=1,n.onload=n.onreadystatechange=function(){var s=this.readyState;s&&s!=="loaded"&&s!=="complete"||(f(),n.onload=n.onreadystatechange=null)},i=d.getElementsByTagName(t)[0],i.parentNode.insertBefore(n,i)})(window,document,"script","//bat.bing.com/bat.js","uetq"); 197</script>
197 198 199<!-- Global site tag (gtag.js) - Google Ads: 1006524478 -->
vendor: 65 bytes, lines 199-200
199 200<script async src="https://www.googletagmanager.com/gtag/js?id=
200AW-1006524478
vendor: 13 bytes, line 200
200"></script>
201<script> 202
vendor: 138 bytes, lines 202-206
202window.dataLayer = window.dataLayer || []; 203 function gtag(){dataLayer.push(arguments);} 204 gtag('js', new Date()); 205 206 gtag('config', '
206AW-1006524478
vendor: 5 bytes, line 206
206');
207</script>
207 208 209 210<!-- Event snippet for ECi - Purchase/Sale conversion page -->
211<script> 212 gtag('event', 'conversion', { 213 'send_to': 'AW-1006524478/lKgwCPmhxYEBEL6w-d8D', 214 'value': 0.0, 215 'currency': 'USD' 216 }); 217</script>
217 218 219<!-- End Tracking Code for analytics_googleanalytics --> 220 221<!-- Start Tracking Code for analytics_googleanalytics4 --> 222
223<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 223
223
224<script data-cfasync="false"> 225 (function () { 226 window.dataLayer = window.dataLayer || []; 227 228 function gtag(){ 229 dataLayer.push(arguments); 230 } 231 232 function initGA4(event) { 233 function setupGtag() { 234 function configureGtag() { 235 gtag('js', new Date()); 236 gtag('set', 'developer_id.dMjk3Nj', true); 237 gtag('config', 'G-WFKZNR5M6G'); 238 } 239 240 var script = document.createElement('script'); 241 242 script.src = 'https://www.googletagmanager.com/gtag/js?id=G-WFKZNR5M6G'; 243 script.async = true; 244 script.onload = configureGtag; 245 246 document.head.appendChild(script); 247 } 248 249 setupGtag(); 250 251 if (typeof subscribeOnBodlEvents === 'function') { 252 subscribeOnBodlEvents('G-WFKZNR5M6G', false); 253 } 254 255 window.removeEventListener(event.type, initGA4); 256 } 257 258 259 260 var eventName = document.readyState === 'complete' ? 'consentScriptsLoaded' : 'DOMContentLoaded'; 261 window.addEventListener(eventName, initGA4, false); 262 })() 263</script>
263 264 265<!-- End Tracking Code for analytics_googleanalytics4 --> 266 267<!-- Start Tracking Code for analytics_segment --> 268
269<script> 270!function(){var analytics=window.analytics=window.analytics||[];if(!analytics.initialize)if(analytics.invoked)window.console&&console.error&&console.error("Segment snippet included twice.");else{analytics.invoked=!0;analytics.methods=["trackSubmit","trackClick","trackLink","trackForm","pageview","identify","reset","group","track","ready","alias","debug","page","once","off","on"];analytics.factory=function(t){return function(){var e=Array.prototype.slice.call(arguments);e.unshift(t);analytics.push(e);return analytics}};for(var t=0;t<analytics.methods.length;t++){var e=analytics.methods[t];analytics[e]=analytics.factory(e)}analytics.load=function(t,e){var n=document.createElement("script");n.type="text/javascript";n.async=!0;n.src="https://cdn.segment.com/analytics.js/v1/"+t+"/analytics.min.js";var a=document.getElementsByTagName("script")[0];a.parentNode.insertBefore(n,a);analytics._loadOptions=e};analytics.SNIPPET_VERSION="4.1.0"; 271analytics.load("HcZw1HmTvZ9y9FHiI3ClWsGt5MMaNwCl"); 272 273analytics.page(); 274}}(); 275</script>
275 276 277<!-- End Tracking Code for analytics_segment --> 278 279<!-- Start Tracking Code for analytics_siteverification --> 280 281<meta name="p:domain_verify" content="8368eb9f8eba0d209b53233be7835971"/> 282<meta name="google-site-verification" content="XfUMOL2hw56MhVqekRe17hQB5h8tks3Togd7O0E-UTs" /> 283 284<!-- End Tracking Code for analytics_siteverification --> 285 286
287<script type="text/javascript" src="https://checkout-sdk.bigcommerce.com/v1/loader.js" defer ></script>
vendor: 1 bytes, line 287
287
288<script type="text/javascript"> 289var BCData = {}; 290</script>
vendor: 1 bytes, line 290
290
291<script type="text/javascript"> 292 var dataLayer = new Array(); 293 // console.log(dataLayer); 294 function trackGTMEcommerce() { 295 this._addTrans = addTrans; 296 this._addItem = addItems; 297 this._trackTrans = trackTrans; 298 } 299 var transaction = {}; 300 transaction.transactionProducts = []; 301 function addTrans(orderID, store, total, tax, shipping, city, state, country) { 302 transaction.transactionId = orderID; 303 transaction.transactionAffiliation = store; 304 transaction.transactionTotal = total; 305 transaction.transactionTax = tax; 306 transaction.transactionShipping = shipping; 307 // console.log(11) 308 } 309 function addItems(orderID, sku, product, variation, price, quantity) { 310 transaction.transactionProducts.push({ 311 'id': orderID, 312 'sku': sku, 313 'name': product, 314 'category': variation, 315 'price': price, 316 'quantity': quantity 317 }); 318 // console.log('a') 319 } 320 function trackTrans() { 321 transaction.event = 'bcTransactionComplete'; 322 // console.log(transaction); 323 dataLayer.push(transaction); 324 } 325 var pageTracker = new trackGTMEcommerce(); 326 </script>
326 327 <!-- Google Tag Manager --> 328
328<script>
vendor: 375 bytes, lines 328-332
328(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 329 new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 330 j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 331 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 332 })(window,document,'script','dataLayer','
332GTM-P3HFGLC
vendor: 3 bytes, line 332
332');
332</script>
332 333 <!-- End Google Tag Manager -->
333<script type="text/javascript"> (function(c,l,a,r,i,t,y){ c[a]=c[a]||function(){(c[a].q=c[a].q||[]).push(arguments)}; t=l.createElement(r);t.async=1;t.src="https://www.clarity.ms/tag/"+i; y=l.getElementsByTagName(r)[0];y.parentNode.insertBefore(t,y); })(window, document, "clarity", "script", "r983nu68s9"); </script>
333<script src="https://cdn.jsdelivr.net/npm/@algolia/[email protected]/dist/umd/index.production.js" crossorigin="anonymous"></script>
333<script src="https://cdn.jsdelivr.net/npm/@algolia/[email protected]/dist/umd/index.production.js" integrity="sha256-wuHAV2PFleGxZJP0z7SBR37XYeLwiNPkGXAW3WFf9YM=" crossorigin="anonymous"></script>
333 334 <!-- WARNING: Modifying this file directly will cause it to be out of sync with Algolia --> 335
335<script> 336 const algoliaAutocompleteConfig = {"currentCurrencyCode":"USD","appId":"2QDQXHVX0K","publicApiKey":"c74a1b33e4fde4c422a6a777b31bfc96","hitsPerPage":6,"recordType":"product","algolia_search_css_selector":"#quickSearch","mobile_screen_size":0,"indexName":"ML_PROD","isDistinct":false,"debug_mode":false,"javascript":"const autocompleteFilters = [`is_visible=1`]\n// if (!algoliaAutocompleteConfig.showOutOfStockItems) {\n// autocompleteFilters.push('in_stock>0')\n// }\n\nasync function getUserTokenAsync() {\n return new Promise((resolve, reject) => {\n aa('getUserToken', {}, (err, userToken) => {\n if (err) {\n reject(err)\n } else {\n resolve(userToken)\n }\n })\n })\n}\n\n\n// function createAcHitTemplateHtml(item, html, insights) {\n// let addToCartParam;\n// let price;\n// let salesPrice;\n\n// if (algoliaAutocompleteConfig.recordType === 'variant') {\n// addToCartParam = `sku=${item.sku}`;\n// price = formatAcPrice(item.prices, algoliaAutocompleteConfig.currentCurrencyCode);\n// salesPrice = formatAcPrice(item.sales_prices, algoliaAutocompleteConfig.currentCurrencyCode);\n// } else if (algoliaAutocompleteConfig.recordType === 'product') {\n// addToCartParam = `product_id=${item.objectID}`;\n\n// const priceRange = formatAcPriceRange(\n// item.variants,\n// algoliaAutocompleteConfig.currentCurrencyCode,\n// 'prices'\n// );\n\n// const salesRange = formatAcPriceRange(\n// item.variants,\n// algoliaAutocompleteConfig.currentCurrencyCode,\n// 'sales_prices'\n// );\n\n// price = (priceRange.min === null && priceRange.max === null)\n// ? 'View For Pricing'\n// : (priceRange.min !== priceRange.max\n// ? `${priceRange.min} - ${priceRange.max}`\n// : priceRange.min);\n\n// salesPrice = (salesRange.min !== salesRange.max)\n// ? `${salesRange.min} - ${salesRange.max}`\n// : salesRange.min;\n// }\n\n// const hasSales = salesPrice && salesPrice !== price && salesPrice !== 'View For Pricing';\n\n// return html`\n// <div class=\"hit-card\">\n// <div class=\"hit-header\">\n// <a class=\"hit-link search_result_link\" href=\"${item.url}?query_id=${item.__autocomplete_queryID}\">\n// <img class=\"hit-image\" src=\"${item.image_url}\" alt=\"${item.name}\" />\n// </a>\n// </div>\n// <div class=\"hit-body\">\n// <a class=\"hit-link search_result_link\" href=\"${item.url}?query_id=${item.__autocomplete_queryID}\">\n// <div class=\"hit-title\">${item.name}</div>\n// </a>\n// <a class=\"hit-link search_result_link\" href=\"${item.brand_name}?query_id=${item.__autocomplete_queryID}\">\n// <div class=\"hit-brand\">${item.brand_name}</div>\n// </a>\n \n// <div class=\"hit-price\">\n// ${hasSales\n// ? html`<div class=\"aa-ItemContentPrice\">\n// <span class=\"original-price\">${price}</span>\n// <span class=\"sale-price\">${salesPrice}</span>\n// </div>`\n// : html`<div class=\"aa-ItemContentPrice\">${price}</div>`}\n// </div>\n\n// <a\n// style=\"display: none\"\n// class=\"add-to-cart\"\n// onClick=\"${(event) => {\n// event.preventDefault();\n// event.stopPropagation();\n// if (\n// insights && //Fixed query_id=undefined [Step 2 of 2]\n// algoliaAutocompleteConfig.isInsightsEnabled &&\n// algoliaAutocompleteConfig.isDataLayerEnabled &&\n// algoliaAutocompleteConfig.addToCartDataLayer\n// ) {\n// insights.convertedObjectIDsAfterSearch({\n// eventName: 'Product Added To Cart',\n// index: item.__autocomplete_indexName,\n// objectIDs: [item.objectID],\n// queryID: item.__autocomplete_queryID,\n// });\n// }\n\n// window.location = `/cart.php?action=add&${addToCartParam}`;\n// }}\"\n// >
336\n// <svg\n// viewBox=\"0 0 24 24\"\n// width=\"18\"\n// height=\"18\"\n// fill=\"currentColor\"\n// >\n// <path\n// d=\"M19 5h-14l1.5-2h11zM21.794 5.392l-2.994-3.992c-0.196-0.261-0.494-0.399-0.8-0.4h-12c-0.326 0-0.616 0.156-0.8 0.4l-2.994 3.992c-0.043 0.056-0.081 0.117-0.111 0.182-0.065 0.137-0.096 0.283-0.095 0.426v14c0 0.828 0.337 1.58 0.879 2.121s1.293 0.879 2.121 0.879h14c0.828 0 1.58-0.337 2.121-0.879s0.879-1.293 0.879-2.121v-14c0-0.219-0.071-0.422-0.189-0.585-0.004-0.005-0.007-0.010-0.011-0.015zM4 7h16v13c0 0.276-0.111 0.525-0.293 0.707s-0.431 0.293-0.707 0.293h-14c-0.276 0-0.525 0.111-0.707 0.293s-0.293-0.431-0.293-0.707zM15 10c0 0.829-0.335 1.577-0.879 2.121s-1.292 0.879-2.121 0.879-1.577-0.335-2.121-0.879-0.879-1.292-0.879-2.121c0-0.552-0.448-1-1-1s-1 0.448-1 1c0 1.38 0.561 2.632 1.464 3.536s2.156 1.464 3.536 1.464 2.632-0.561 3.536-1.464 1.464-2.156 1.464-3.536c0-0.552-0.448-1-1-1s-1 0.448-1 1z\"\n// />\n// </svg>\n// </a>\n// </div>\n// </div>\n// `;\n// }\n\nlet _appEnv = 'Sandbox';\nif (window.location.hostname.includes(\"militaryluggage.com\")) {\n _appEnv = 'PROD'; //PROD\n}\nconst _indexName = `ML_${_appEnv}`;\nconst querySuggestionsIndexName = `QuerySuggestions_ML_${_appEnv}`;\n\nconst autocompleteOptions = {\n debug: algoliaAutocompleteConfig.debug_mode,\n insights: algoliaAutocompleteConfig.isInsightsEnabled,\n onSubmit({ state }) {\n const encodedQuery = state.query\n\n if (algoliaAutocompleteConfig.isInstantSearchEnabled) {\n window.location.href = `${algoliaAutocompleteConfig.instantSearchUrl}?search_query=${encodedQuery}`\n } else {\n window.location.href = `/search.php?search_query=${encodedQuery}`\n }\n },\n getSources() {\n return [\n {\n // sourceId: 'querySuggestions',\n sourceId: 'productResults', //This will be ID for section.aa-Source\n \n //Fixed query_id=undefined [Step 1 of 2]\n async getItems({ query }) {\n let algoliaUserToken;\n try { algoliaUserToken = await getUserTokenAsync(); } catch (_) {}\n\n const indexName = _indexName;\n const params = {\n query,\n hitsPerPage: algoliaAutocompleteConfig.hitsPerPage,\n filters: autocompleteFilters.join(' AND '),\n attributesToRetrieve: [\n 'objectID',\n 'name',\n 'custom_fields', \n 'image_url', \n 'url',\n '__queryID',\n 'sales_prices',\n 'variants',\n 'metafields',\n 'is_visible',\n 'date_created',\n 'variants_image_url_root'\n ],\n distinct: algoliaAutocompleteConfig.isDistinct,\n clickAnalytics: true, // required so response includes queryID\n userToken: algoliaUserToken || undefined,\n };\n\n // Use the low-level client to access the response.queryID\n const { results } = await autocompleteClient.search([{ indexName, params }]);\n const result = results[0];\n\n // Attach queryID + indexName (+position) onto each hit\n return result.hits.map((hit, i) => ({\n ...hit,\n __autocomplete_queryID: result.queryID,\n __autocomplete_indexName: indexName,\n __autocomplete_position: i + 1,\n }));\n },\n\n templates: {\n header({ html, state }) {\n const q = (state.query || '').trim();\n const encoded = encodeURIComponent(q);\n const href = algoliaAutocompleteConfig.isInstantSearchEnabled\n ? `${algoliaAutocompleteConfig.instantSearchUrl}?search_query=${encoded}`\n : `/search.php?search_query=${encoded}`;\n\n return html`\n <div class=\"aa-SourceHeaderRow\">
336\n <span class=\"aa-SourceHeaderTitle\">Top Results</span>\n ${q\n ? html`<a class=\"aa-SourceHeaderAction\" href=\"${href}\">View All \"<span class='aa-SourceHeaderQuery'>${q}</span>\"</a>`\n : ''}\n </div>\n `;\n },\n item({ item, html }) {\n return al_RenderItemCard(item, html);\n \n },\n footer({ state, html }) {\n if (algoliaAutocompleteConfig.isInstantSearchEnabled) {\n return html`\n <a\n class=\"show-all-products-btn\"\n href=\"${algoliaAutocompleteConfig.instantSearchUrl}?search_query=${encodeURIComponent(\n state.query\n )}\"\n >Show all products</a\n >\n `\n }\n },\n noResults({ html }) {\n return html` <div>No results found</div> `\n },\n },\n },\n ]\n },\n}\n\nconst { autocomplete, getAlgoliaResults } = window['@algolia/autocomplete-js']\n\nconst autocompleteClient = algoliasearch(\n algoliaAutocompleteConfig.appId,\n algoliaAutocompleteConfig.publicApiKey\n)\nautocompleteClient.addAlgoliaAgent('BigCommerce Integration')\n\nlet container\nif (\n algoliaAutocompleteConfig.algolia_search_css_selector_mobile !== '' &&\n algoliaAutocompleteConfig.mobile_screen_size > 0 &&\n screen.width <= algoliaAutocompleteConfig.mobile_screen_size\n) {\n // mobile\n container = document.querySelector(algoliaAutocompleteConfig.algolia_search_css_selector_mobile)\n} else {\n // desktop\n container = document.querySelector(algoliaAutocompleteConfig.algolia_search_css_selector)\n}\n\n// For lighthouse accessiblity requirement\nconst AA_ID = 'fa-autocomplete';\ncontainer.insertAdjacentHTML(\n 'beforebegin',\n `<label for=\"${AA_ID}-input\" class=\"sr-only\">Search products</label>`\n);\n\ncontainer.innerHTML = ''\nconst containerClasses = container.classList\ncontainerClasses.add('aa-MainContainer')\n\n/* Query Suggestions */\nconst { createQuerySuggestionsPlugin } = window['@algolia/autocomplete-plugin-query-suggestions'];\nconst querySuggestionsPlugin = createQuerySuggestionsPlugin({\n searchClient: autocompleteClient,\n indexName: querySuggestionsIndexName,\n getSearchParams() {\n return {\n hitsPerPage: 5,\n clickAnalytics: true, // ensures suggestions responses also have queryID\n };\n },\n transformSource({ source }) {\n return {\n ...source,\n templates: {\n ...source.templates,\n header({ html }) {\n return html`\n <span class=\"aa-SourceHeaderTitle\">Suggestions</span>\n `;\n },\n },\n onSelect({ item }) {\n const encodedQuery = encodeURIComponent(item.query || item.label || '');\n const targetURL = algoliaAutocompleteConfig.isInstantSearchEnabled\n ? `${algoliaAutocompleteConfig.instantSearchUrl}?search_query=${encodedQuery}`\n : `/search.php?search_query=${encodedQuery}`;\n window.location.href = targetURL;\n },\n };\n },\n // categoryAttribute: '', // Optional: provide if we want category-based suggestions\n});\n/* End */\n\n\n// const autocompleteInitOptions = algoliaAutocompleteConfig.hooks.triggerHooks(\n// 'autocompleteInitOptions',\n// autocompleteOptions\n// );\n\n/* Recent Searches */\nconst { createLocalStorageRecentSearchesPlugin } = window['@algolia/autocomplete-plugin-recent-searches'];\nconst recentSearchesPlugin = createLocalStorageRecentSearchesPlugin({\n key: 'ac_recent_searches', // localStorage key\n limit: 5, // number of stored recent searches\n transformSource({ source }) {\n return {\n ...source,\n templates: {\n ...source.templates,\n header({ html }) {\n return html`<span class=\"aa-SourceHeaderTitle\">Recent Searches</span>`;\n },\n },\n onSelect({ item }) {\n const encodedQuery = encodeURIComponent(item.label || item.query || '');\n const targetURL = algoliaAutocompleteConfig.isInstantSearchEnabled\n ? `${algoliaAutocompleteConfig.instantSearchUrl}?search_query=${encodedQuery}`\n : `/search.php?search_query=${encodedQuery}`;\n window.location.href = targetURL;\n },\n };\n },\n});\n/* End */\n\n\nconst autocompleteInitOptions = algoliaAutocompleteConfig.hooks.triggerHooks(\n 'autocompleteInitOptions',\n {\n ...autocompleteOptions,\n plugins: [querySuggestionsPlugin, recentSearchesPlugin],\n }\n);\n\nautocomplete({\n container,\n ...autocompleteInitOptions,\n id: AA_ID,\n placeholder: 'What can we help you find?', //Add Placeholder\n insights: true,\n openOnFocus: true, //Show results on Focus\n // detachedMediaQuery: 'max-width: 0px', //Forces desktop mode on all screen size \n onStateChange({ state }) {\n\n if (!state.isOpen) return; //Prevents from running when the autocomplete panel is closed.\n\n }\n\n})\n\n\nfunction al_RenderItemCard(item, html) {\n const item_id = item.objectID || \"\";\n const item_title= item.name || \"\";\n const item_brand= item.custom_fields?.Brand || \"\";\n const item_url = item.url || \"\";\n const item_reviews_average_rating = item.custom_fields?.reviews_average_rating || 0;\n const item_reviews_approved_count = item.custom_fields?.reviews_approved_count || 0;\n // const item_tag_badge = \"\";\n // const item_tag_inline_title = \"\";\n\n const item_total_inventory = (() =>
336 {\n if (!Array.isArray(item.variants)) return 0;\n let total = 0;\n for (const v of item.variants) {\n const inv = v?.metafields?.gq_meta?.gqlexinv;\n const n = Number(inv);\n if (Number.isFinite(n)) total += n;\n }\n return total;\n })();\n\n //if total inventory > 0, in stock\n const item_in_stock = item_total_inventory > 0;\n\n const item_new_arrivals = (() => {\n if (!item.date_created) return false;\n const createdDate = new Date(item.date_created);\n const now = new Date();\n const diffTime = Math.abs(now - createdDate);\n const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));\n return diffDays <= 14;\n })();\n\n\n const item_image = item.image_url.replace(/products\\/\\d+\\/images/, `images/stencil/300w/products/${item_id}`);\n\n /* Enable Query ID */\n const qid = item.__autocomplete_queryID || ''; // set by Insights middleware\n const join = item_url && item_url.includes('?') ? '&' : '?';\n const item_url_with_qid = qid ? `${item_url}${join}query_id=${encodeURIComponent(qid)}` : item_url;\n /* end */\n\n /* Has Sale Price */\n const hasSale = \n (Number(item?.sales_prices?.USD) > 0) || \n (Array.isArray(item.variants) && item.variants.some(v => Number(v?.sales_prices?.USD) > 0));\n /* end */\n\n /* tags_INLINE */\n // const fullTagsInline = (item?.custom_fields?.tags_INLINE ?? '').toString();\n // const tags_Inline = fullTagsInline\n // .split('^')\n // .map(s => s.trim())\n // .filter(Boolean);\n // /* end */\n\n /* tags_INLINE */\n const tags_Inline = Array.isArray(item?.custom_fields?.tags_INLINE) ? item.custom_fields.tags_INLINE : [];\n\n // tags to show on new lines\n const tagNewlines = []\n .concat(\"\") // tmpRandomCustomizeValue placeholder\n .concat(\"\") // tmpRandomShipsFree placeholder\n .filter(Boolean);\n\n /* Tag [Badge]: \n Clearance: Priority 1\n Exclusive: Priority 2\n Top Rated: Priority 3\n */\n //Check for Clearance tag\n let item_tag_badge =\n hasSale && //Only when sale price exist\n Array.isArray(item.variants) &&\n item.variants.some(v => String(v?.metafields?.gq_meta?.gqclearance ?? '').toUpperCase() === 'Y')\n ? 'Clearance'\n : '';\n //Check for Exclusive tag\n if (item_tag_badge == '') {\n for (const part of tags_Inline) {\n const p = part.toLowerCase();\n if (!item_tag_badge && p.includes('exclusive')) item_tag_badge = part;\n }\n }\n //Check for Top Rated tag (Disable for now)\n // if (\n // (item_tag_badge == '') &&\n // (item.custom_fields?.reviews_average_rating == 5)\n // ) {\n // item_tag_badge = 'Top Rated';\n // }\n /* end */\n\n /* Tag [Inline]: Sale or Final Sale */\n //Has Sale Price â show tag only if the UI will actually show a sale price\n const variants = Array.isArray(item?.variants) ? item.variants : [];\n const toNum = (v) => { const n = Number(v); return Number.isFinite(n) ? n : null; };\n\n // collect base prices\n const baseNums = variants.length\n ? variants.map(v => toNum(v?.prices?.USD)).filter(n => n != null)\n : [toNum(item?.prices?.USD)].filter(n => n != null);\n\n // collect sale prices (strictly positive only)\n const saleNums = variants.length\n ? variants.map(v => toNum(v?.sales_prices?.USD)).filter(n => n != null && n > 0)\n : [toNum(item?.sales_prices?.USD)].filter(n => n != null && n > 0);\n\n // mirror al_PriceMarkup: show sale only if saleMin < baseMin\n const showSaleTag = saleNums.length > 0 && (\n baseNums.length === 0 ? true : Math.min(...saleNums) < Math.min(...baseNums)\n );\n\n /* Tag [Inline]: Sale or Final Sale] â only if showSaleTag is true */\n const hasSale_label = item_tag_badge === 'Clearance' ? 'FINAL SALE' : 'SALE';\n // const item_tag_inline_price = showSaleTag\n // ? `<span class=\"hasSale\">${hasSale_label}</span>` // keep distinct from price--discount (MAP logic)\n // : ``;\n\n /* end */\n\n /* Tag [New Line]: BMSM */\n let item_tag_bmsm = '';\n for (const part of tags_Inline) {\n const p = part.toLowerCase();\n if (!item_tag_bmsm && p.includes('buy more')) item_tag_bmsm = part;\n }\n /* end */\n\n /* Tag [New Line]: BMSM */\n let item_tag_closeout_deal = '';\n for (const part of tags_Inline) {\n const p = part.toLowerCase();\n if (!item_tag_closeout_deal && p.includes('closeout')) item_tag_closeout_deal = part;\n }\n /* end */\n\n /* Tag [New Line]: Why_Buys (First 3 only, split by ^, wrapped in <span> */\n // const item_why_buys = (() =>
336 {\n // const src = item?.custom_fields?.Features ?? item?.custom_fields?.features; // case-safe\n // const raw = Array.isArray(src) ? src[0] : (typeof src === 'string' ? src : '');\n // if (!raw.trim()) return '';\n // return raw\n // .split('^')\n // .map(s => s.trim())\n // .filter(Boolean)\n // .slice(0, 3)\n // .map(f => `<span>${f}</span>`)\n // .join('');\n // })();\n // /* end */\n\n const whyBuys =\n item.custom_fields?.Features === \"\"\n ? []\n : (item.custom_fields?.Features || [])\n .map(s => String(s).trim())\n .filter(Boolean)\n .slice(0, 3);\n\n const item_color_swatch = (() => {\n const variants = Array.isArray(item?.variants) ? item.variants : [];\n const colorMap = new Map();\n\n const getStr = (v) => (typeof v === 'string' ? v : (v && v.value) || '');\n const norm = (s) => getStr(s).trim();\n\n for (const v of variants) {\n const colorRaw = v?.options?.COLOR;\n const color = norm(colorRaw);\n if (!color) continue;\n\n const key = color.toLowerCase();\n const href = `${item_url_with_qid}&color=${encodeURIComponent(key)}`;\n\n const imgURL = getStr(v?.image_url) || '';\n const img = imgURL ? imgURL.replace(\"/product_images/\", \"/images/stencil/32x32/\") : '';\n\n if (!colorMap.has(key)) {\n colorMap.set(key, { label: color, css: key, img, href });\n } else if (!colorMap.get(key).img && img) {\n const cur = colorMap.get(key);\n cur.img = img;\n cur.href = href;\n }\n }\n\n const all = Array.from(colorMap.values());\n let maxVisible = 2;\n if (window.matchMedia('(max-width: 1024px)').matches) {\n maxVisible = 3;\n }\n\n if (window.matchMedia('(min-width: 1500px)').matches) {\n maxVisible = 3;\n }\n\n const first = all.slice(0, maxVisible);\n const rest = all.slice(maxVisible);\n const moreCount = rest.length;\n\n const renderSwatch = ({ label, css, img, href }) => html`\n <a class=\"swatch\" data-color=\"${css}\" href=\"${href || '#'}\" aria-label=\"${label}\">\n <img alt=\"${label}\" title=\"${label}\" src=\"${img}\" data-image=\"${img}\" />\n </a>\n `;\n\n const inlineNodes = first.map(renderSwatch);\n\n if (moreCount === 0) return inlineNodes;\n\n const menuId = `swatch-menu-${item_id}-1`;\n\n const restNodes = rest.map(renderSwatch);\n\n return html`\n ${inlineNodes}\n\n <span class=\"swatch-more-wrap\">\n <button\n type=\"button\"\n class=\"swatch swatch-more-btn\"\n aria-haspopup=\"menu\"\n aria-expanded=\"false\"\n aria-controls=\"${menuId}\"\n data-swatch-more-btn=\"1\"\n data-menu-id=\"${menuId}\"\n aria-label=\"Show ${moreCount} more color${moreCount > 1 ? 's' : ''}\"\n >\n <i class=\"fa-regular fa-plus\" aria-hidden=\"true\"></i>\n </button>\n\n <div\n id=\"${menuId}\"\n class=\"swatch-menu\"\n role=\"menu\"\n aria-label=\"More colors\"\n hidden\n >\n ${restNodes}\n </div>\n </span>\n `;\n })();\n\n\n const price = al_PriceParts(item);\n\n //get rid of clearance badge\n if (item_tag_badge == 'Clearance') {\n item_tag_badge = '';\n }\n\n /* Social Proof */\n\n const item_social_proof = (() => {\n let text = '';\n let query = '';\n\n const threshold = { purchases: 10, views: 5, cart: 2 };\n\n const purchases = Number(item.metafields?.sp?.sp_purchases_last_30d) || 0;\n const views = Number(item.metafields?.sp?.sp_views_last_3d) || 0;\n const cart = Number(item.metafields?.sp?.sp_add_to_cart_last_3d) || 0;\n\n if (purchases > threshold.purchases) {\n text = `${purchases} bought recently`;\n query = 'in-demand';\n } else if (views > threshold.views) {\n text = `${views} viewed this`;\n query = 'views';\n } else if (cart > threshold.cart) {\n text = `${cart} in cart now`;\n query = 'in-cart';\n } else {\n return '';\n }\n\n return html`<div class=\"hit-social-proof-row\" data-query=\"${query}\">${text}</div>`;\n })();\n\n /* end */\n\n return html`\n <div class=\"hit-card\" data-product-id=\"${item_id}\">\n <div class=\"hit-header\">\n <a class=\"hit-link search_result_link\" href=\"${item_url_with_qid}\">\n <img class=\"hit-image\" src=\"${item_image}\" alt=\"${decodeEntities(item_title)}\" />\n <div class=\"hit-tag-badge-container\">\n ${item_new_arrivals\n ? html`<span\n class=\"hit-tag hit-tag-badge new-arrivals-badge\"\n data-query=\"New Arrival\"\n >NEW</span>`\n : ''\n }
336\n <span class=\"hit-tag hit-tag-badge\" data-query=\"${item_tag_badge}\">${item_tag_badge}</span>\n </div>\n </a>\n \n <div class=\"hit-social-proof\">\n ${html`${item_social_proof}`}\n </div>\n <div class=\"hit-tag hit-tag-closeout-deal\" data-title=\"${item_tag_closeout_deal.length}\">${item_tag_closeout_deal}</div>\n </div>\n\n <div class=\"hit-body\">\n <div class=\"hit-color\">\n <div class=\"hit-color-slick\">\n ${html`${item_color_swatch}`}\n </div>\n ${(Number(item_reviews_approved_count) > 0 && Number(item_reviews_average_rating) > 0)\n ? html`<div class=\"rating\">\n <i class=\"fa-solid fa-star\" aria-hidden=\"true\"></i>\n ${item_reviews_average_rating} (${item_reviews_approved_count})\n </div>`\n : ''\n }\n </div>\n\n <div class=\"hit-title\">\n <a class=\"hit-link search_result_link\" href=\"${item_url_with_qid}\">${decodeEntities(item_title)}</a>\n </div>\n\n <div class=\"hit-brand\">${item_brand}</div>\n\n <div class=\"hit-price hidden\">\n ${showSaleTag\n ? html`<span class=\"hasSale\">${hasSale_label}</span>` // keep distinct from price--discount (MAP logic)\n : ``}\n\n ${\n price.showSale\n ? html`\n <span class=\"${price.classes.sale}\">${price.saleLbl}</span>\n ${price.baseLbl\n ? html`<span class=\"${price.classes.baseWhenSale}\">${price.baseLbl}</span>`\n : ``}\n `\n : price.baseLbl\n ? html`<span class=\"${price.classes.baseNoSale}\">${price.baseLbl}</span>`\n : ``\n }\n </div>\n ${item_in_stock ? html`<div class=\"in-stock\">IN STOCK - READY TO SHIP</div>` : ''}\n\n <div class=\"hit-tag hit-tag-bmsm\" data-title=\"${item_tag_bmsm.length}\">${item_tag_bmsm}</div>\n <div class=\"hit-tag hit-tag-whybuys\" data-title=\"${whyBuys.length}\">\n ${whyBuys.map(f => html`<span>${f}</span>`)}\n </div>\n ${tagNewlines.map(t => html`\n <div class=\"hit-tag hit-tag-inline hit-tag-newline\" data-query=\"${t}\">${t}</div>\n `)}\n </div>\n </div>\n `;\n}\n\nfunction al_PriceParts(\n item,\n { currency = \"USD\", locale = \"en-US\", classes = {}, mapCacheTtlMs = 5 * 60 * 1000 } = {}\n) {\n al_PriceParts._respectMapFlagCache = al_PriceParts._respectMapFlagCache || new Map();\n\nconst revealPrices = () => {\n try {\n if (typeof $ === \"function\") $(\"#hits .hit-price\").removeClass(\"hidden\");\n else document.querySelectorAll(\"#hits .hit-price.hidden\").forEach((el) => el.classList.remove(\"hidden\"));\n } catch (_) {\n \n }\n };\n\n // Scoped retry-unhide (handle late DOM mount without touching other cards)\n const unhideEventually = (selector, { retries = 6, interval = 100 } = {}) => {\n let attempts = 0;\n const tick = () => {\n attempts += 1;\n try {\n const exists =\n (typeof $ === \"function\" && $(selector).length > 0) ||\n (typeof document !== \"undefined\" && !!document.querySelector(selector));\n if (exists) {\n if (typeof $ === \"function\") $(selector).removeClass(\"hidden\");\n else document.querySelectorAll(selector).forEach((el) => el.classList.remove(\"hidden\"));\n return;\n }\n } catch (_) {\n // ignore and continue retries\n }\n if (attempts < retries) setTimeout(tick, interval);\n else {\n // Final attempt even if not found yet (no-op if still absent)\n try {\n if (typeof $ === \"function\") $(selector).removeClass(\"hidden\");\n else document.querySelectorAll(selector).forEach((el) => el.classList.remove(\"hidden\"));\n } catch (_) { /* ignore */ }\n }\n };\n // microtask first to let DOM batch before first check\n Promise.resolve().then(tick);\n };\n const variants = Array.isArray(item?.variants) ? item.variants : [];\n \n if (!Array.isArray(variants) || variants.length === 0) {\n return { baseLbl: null, saleLbl: null, showSale: false, classes: {} };\n }\n\n const lowestVariant = variants.reduce((min, variant) =>\n variant.calculated_prices.USD < min.calculated_prices.USD ? variant : min\n );
336\n\n const productId = item?.objectID ?? item?.id ?? null;\n const variantId = lowestVariant.id;\n \n const fmt = (n) =>\n new Intl.NumberFormat(locale, { style: \"currency\", currency }).format(n);\n\n const toNum = (v) => {\n const n = Number(v);\n return Number.isFinite(n) ? n : null;\n };\n\n const collectFromArray = (arr, key) => {\n const out = [];\n for (const node of arr) {\n const n = toNum(node?.[key]?.[currency]);\n if (n != null) out.push(n);\n }\n return out;\n };\n const collectFromHit = (node, key) => {\n const n = toNum(node?.[key]?.[currency]);\n return n != null ? [n] : [];\n };\n\n // Only include strictly positive sales (why: 0 means \"no sale\" in your index)\n const collectSaleFromArray = (arr) => {\n const out = [];\n for (const node of arr) {\n const n = toNum(node?.sales_prices?.[currency]);\n if (n != null && n > 0) out.push(n);\n }\n return out;\n };\n const collectSaleFromHit = (node) => {\n const n = toNum(node?.sales_prices?.[currency]);\n return n != null && n > 0 ? [n] : [];\n };\n\n const label = (nums) => {\n if (!nums.length) return null;\n const min = Math.min(...nums);\n const max = Math.max(...nums);\n return min === max ? fmt(min) : `${fmt(min)} - ${fmt(max)}`;\n };\n\n const baseNums = variants.length ? collectFromArray(variants, \"prices\") : collectFromHit(item, \"prices\");\n \n const saleNums = variants.length ? collectSaleFromArray(variants) : collectSaleFromHit(item);\n const baseLbl = label(baseNums);\n const saleLbl = label(saleNums);\n\n const baseMin = baseNums.length ? Math.min(...baseNums) : null;\n const saleMin = saleNums.length ? Math.min(...saleNums) : null;\n const showSale = Boolean(saleLbl && saleMin != null && (baseMin == null || saleMin < baseMin));\n\n const brandName = (() => {\n const raw = item?.custom_fields?.Brand;\n if (Array.isArray(raw)) return (raw[0] ?? '').toString();\n return typeof raw === 'string' ? raw : '';\n })();\n\n\n\n if (\n showSale &&\n productId != null && productId !== \"\" &&\n variantId != null && variantId !== \"\"\n ) {\n (async () => {\n try {\n const flag = await (async function getCachedRespectMapFlag(brand, fetchFn, ttlMs = mapCacheTtlMs) {\n const key = String(brand).trim().toLowerCase();\n if (!key) return null;\n\n const now = Date.now();\n const cache = al_PriceParts._respectMapFlagCache; // local to function symbol\n const entry = cache.get(key);\n if (entry && entry.expiresAt > now && typeof entry.value !== \"undefined\") return entry.value;\n if (entry && entry.promise) return entry.promise;\n\n const promise = (async () => {\n try {\n const val = await fetchFn(); // boolean\n cache.set(key, { value: !!val, expiresAt: now + ttlMs, promise: null });\n return !!val;\n } catch (e) {\n cache.set(key, { value: false, expiresAt: now + 15 * 1000, promise: null }); // short backoff on error\n throw e;\n }\n })();\n\n cache.set(key, { value: undefined, expiresAt: 0, promise });\n \n return promise;\n })(brandName, () => getRespectMAPFlag(brandName));\n\n if (flag !== true) return;\n \n const pid = Number(productId);\n const vid = Number(variantId);\n if (!Number.isFinite(pid) || !Number.isFinite(vid)) return;\n\n const mapPrice = await getCachedMapPrice(\n pid,\n vid,\n () => getMapPriceForVariant(pid, vid),\n mapCacheTtlMs\n );\n\n const mapVal = Number(mapPrice);\n console.log(`Sale Price: ${saleMin} , MAP: ${mapVal}`);\n if (Number.isFinite(mapVal) && saleMin < mapVal) {\n const saleNode = document.querySelector(\n `.aa-Item .hit-card[data-product-id=\"${productId}\"] .hit-price .price--discount`\n );\n if (saleNode) {\n saleNode.textContent = \"See Updated Price In Cart\";\n const hasSaleNode = document.querySelector(\n `.aa-Item .hit-card[data-product-id=\"${productId}\"] .hit-price .hasSale`\n );\n if (hasSaleNode) hasSaleNode.style.display = \"none\"; // guard: node may not exist\n }\n }\n } catch (err) {\n console.error(\"[al_PriceMarkup][MAP override] error:\", err);\n } finally {\n // Always unhide price block after async completes (success or error)\n revealPrices();\n // Scoped unhide with short retry to beat timing races (no logic changes)\n if (productId != null && productId !== \"\") {\n const cardSel = `.hit-card[data-product-id=\"${productId}\"] .hit-price`;\n unhideEventually(cardSel, { retries: 8, interval: 100 });\n }\n }\n })();\n } else {\n // No async path => unhide immediately\n revealPrices();\n // Scoped unhide with short retry to beat timing races (no logic changes)\n if (productId != null && productId !== \"\") {\n const cardSel = `.hit-card[data-product-id=\"${productId}\"] .hit-price`;\n unhideEventually(cardSel, { retries: 8, interval: 100 });\n }\n }\n\n return {\n baseLbl,\n saleLbl,\n showSale,\n classes: {\n baseWhenSale:\n classes.baseWhenSale ??\n \"price-section price-section--withoutTax non-sale-price--withoutTax\",\n baseNoSale: classes.baseNoSale ?? \"price\",\n sale: classes.sale ?? \"price price--discount\",\n },\n };\n}\n\nconst _mapPriceCache = new Map();\n\n\nasync function getMapPriceForVariant(productId, variantId) {\n\n const pid = Number(productId);\n const vid = Number(variantId);\n if (!Number.isFinite(pid) || !Number.isFinite(vid)) return null;\n try {\n\n const mapRes = await getMetafield(pid, {\n variantId: vid, //variantId must match\n namespace: 'gq_meta',\n keys: ['map_price'],\n });\n\n // Extract the value for 'map_price' (API returns [{ id,key,value }
336, ...])\n // Datatype: number or null\n const rawMapVal = Array.isArray(mapRes)\n ? mapRes.find(m => m?.key === 'map_price')?.value\n : null;\n /* END */\n\n return parseNumber(rawMapVal); //Parse map_price value\n\n } catch (err) {\n console.error('[getMapPriceForVariant] Error:', err);\n return null;\n }\n\n \n}\n\nasync function getMetafield(productId, { variantId = null, namespace, keys = [] } = {}) {\n const { token, endpoint } = getGraphQLConfig();\n const pid = Number(productId);\n const vid = variantId != null ? Number(variantId) : null;\n\n if (!Number.isFinite(pid)) return [];\n if (!namespace || !Array.isArray(keys) || keys.length === 0) {\n console.error(\"[getMetafield] You must provide namespace and keys[] per BigCommerce GraphQL schema\");\n return [];\n }\n\n const PRODUCT_QUERY = `\n query ProductMetafields($id: Int!, $namespace: String!, $keys: [String!]!) {\n site {\n product(entityId: $id) {\n metafields(namespace: $namespace, keys: $keys, first: 50) {\n edges { node { id key value } }\n }\n }\n }\n }\n `;\n\n const VARIANT_QUERY = `\n query VariantMetafields($id: Int!, $namespace: String!, $keys: [String!]!) {\n site {\n product(entityId: $id) {\n variants(first: 250) {\n edges {\n node {\n entityId\n metafields(namespace: $namespace, keys: $keys, first: 50) {\n edges { node { id key value } }\n }\n }\n }\n }\n }\n }\n }\n `;\n\n try {\n const variables = { id: pid, namespace, keys };\n const query = vid ? VARIANT_QUERY : PRODUCT_QUERY;\n const data = await fetchGraphQL(endpoint, token, query, variables);\n\n if (!vid) {\n const metafields = data?.site?.product?.metafields?.edges || [];\n return metafields.map(edge => ({\n id: edge?.node?.id ?? null,\n key: edge?.node?.key ?? \"\",\n value: edge?.node?.value ?? \"\",\n }));\n }\n\n // variant mode â find the matching variant\n const variants = data?.site?.product?.variants?.edges || [];\n const variant = variants.find(v => v?.node?.entityId === vid);\n const metafields = variant?.node?.metafields?.edges || [];\n\n return metafields.map(edge => ({\n id: edge?.node?.id ?? null,\n key: edge?.node?.key ?? \"\",\n value: edge?.node?.value ?? \"\",\n }));\n } catch (err) {\n console.error('[getMetafield] Error:', err);\n return [];\n }\n}\n\n\nfunction getGraphQLConfig() {\n const configEl = document.getElementById(\"GraphQLConfig\");\n if (!configEl) throw new Error(\"GraphQLConfig element missing in DOM\");\n return {\n token: configEl.dataset.storefrontToken || \"\",\n endpoint: configEl.dataset.graphqlEndpoint || \"/graphql\"\n };\n}\n\nasync function fetchGraphQL(endpoint, token, query, variables) {\n if (!token) throw new Error(\"Missing Storefront API token\");\n\n const res = await fetch(endpoint, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: token.startsWith(\"Bearer \") ? token : `Bearer ${token}`,\n },\n body: JSON.stringify({ query, variables }),\n credentials: \"same-origin\",\n });\n\n const data = await res.json();\n if (data.errors) throw new Error(data.errors.map(e => e.message).join(\"; \"));\n return data.data;\n}\n\nasync function getCachedMapPrice(pid, vid, fetchFn, ttlMs = 5 * 60 * 1000) {\n const key = `${pid}:${vid}`;\n const now = Date.now();\n const entry = _mapPriceCache.get(key);\n\n // Fresh cached value\n if (entry && entry.expiresAt > now && typeof entry.value !== \"undefined\") {\n //console.log(`[MAP cache] HIT ${key} (expires in ${msLeft}ms)`);\n return entry.value;\n }\n\n // Share in-flight request\n if (entry && entry.promise) {\n //console.log(`[MAP cache] IN-FLIGHT ${key} (sharing promise)`);\n return entry.promise;\n }\n\n console.log(`[MAP cache] MISS ${key} (calling API)`);\n const promise = (async () => {\n try {\n const val = await fetchFn();
336 // may be number or null\n _mapPriceCache.set(key, { value: val, expiresAt: now + ttlMs, promise: null });\n // console.log(`[MAP cache] STORE ${key} (ttl=${ttlMs}ms, value=${String(val)})`);\n return val;\n } catch (e) {\n // Short TTL on failure to prevent hammering\n _mapPriceCache.set(key, { value: null, expiresAt: now + 15 * 1000, promise: null });\n //console.warn(`[MAP cache] ERROR ${key}: ${e && e.message ? e.message : e}`);\n throw e;\n }\n })();\n\n _mapPriceCache.set(key, { value: undefined, expiresAt: 0, promise });\n return promise;\n}\n\n\nfunction decodeEntities(str = '') {\n const ta = document.createElement('textarea');\n ta.innerHTML = str;\n return ta.value;\n}\n\nfunction splitRating(avg = 0) {\n let r = Math.max(0, Math.min(5, Number(avg) || 0));\n let full = Math.floor(r);\n const frac = +(r - full).toFixed(1);\n let half = 0;\n if (frac >= 0.8) full += 1;\n else if (frac >= 0.3) half = 1;\n const empty = Math.max(0, 5 - full - half);\n return { full, half, empty };\n}\n\nfunction parseNumber(input) {\n if (input == null) return null;\n const s = String(input).trim();\n if (!s) return null;\n\n // Keep digits, comma, dot, minus; drop currency symbols/letters/spaces\n let t = s.replace(/[^0-9.,-]/g, '');\n\n // If both , and . exist, treat comma as thousands sep â remove commas\n if (t.includes(',') && t.includes('.')) {\n t = t.replace(/,/g, '');\n } else if (t.includes(',') && !t.includes('.')) {\n // Only comma: treat as decimal sep (EU) â replace with dot\n t = t.replace(/,/g, '.');\n }\n\n // Remove thousands commas left, just in case\n t = t.replace(/,(?=\\d{3}\\b)/g, '');\n\n const n = Number(t);\n return Number.isFinite(n) ? n : null;\n}\n\nasync function getRespectMAPFlag(brand, options = {}) {\n const { token, endpoint } = getGraphQLConfig();\n\n // input validation\n if (!endpoint || !token) return false;\n if (typeof brand !== 'string') return false;\n const targetName = brand.trim();\n if (!targetName) return false;\n\n // tunables\n const PAGE_SIZE = Math.min(Math.max(1, Number(options.pageSize) || 50), 50); // BigCommerce cap = 50\n const MAX_PAGES = Math.max(1, Number(options.maxPages) || 100);\n const retries = Math.max(0, Number(options.retries) || 1);\n const retryDelayMs = Math.max(0, Number(options.retryDelayMs) || 250);\n\n // metafield search settings\n const keyCandidates =\n Array.isArray(options.keyCandidates) && options.keyCandidates.length\n ? options.keyCandidates\n : ['Respect MAP', 'respect_map', 'respect-map'];\n\n const namespaceCandidates =\n Array.isArray(options.namespaceCandidates) && options.namespaceCandidates.length\n ? options.namespaceCandidates\n : [\n // why: namespace is required on brand metafields, vary by store/app conventions\n 'gq_meta',\n 'brand',\n 'global',\n 'store',\n 'settings',\n ];\n\n const nameEq = (a, b) => a?.trim().toLowerCase() === b?.trim().toLowerCase();\n const isYesY = (v) => typeof v === 'string' && v.trim().toLowerCase() === 'y';\n const wait = (ms) => new Promise((res) => setTimeout(res, ms));\n\n // 1) page through brands to find the exact name match\n const BRANDS_QUERY = `\n query Brands($first: Int!, $after: String) {\n site {\n brands(first: $first, after: $after) {\n pageInfo { hasNextPage endCursor }\n edges { node { entityId name } }\n }\n }\n }\n `;\n\n let brandId = null;\n let after = null;\n let pages = 0;\n\n try {\n // eslint-disable-next-line no-constant-condition\n while (true) {\n if (pages++ >= MAX_PAGES) break;\n\n let data;\n let attempt = 0;\n for (;;) {\n try {\n data = await fetchGraphQL(\n endpoint,\n token,\n BRANDS_QUERY,\n { first: PAGE_SIZE, after }\n );\n break;\n } catch (err) {\n if (attempt >= retries) throw err;\n await wait(retryDelayMs * Math.pow(2, attempt));\n attempt += 1;\n }\n }\n\n const conn = data?.site?.brands;\n const edges = Array.isArray(conn?.edges) ? conn.edges : [];\n\n for (const edge of edges) {\n const node = edge?.node;\n if (!node?.name) continue;
336\n if (nameEq(node.name, targetName)) {\n brandId = node.entityId;\n break;\n }\n }\n if (brandId != null) break;\n\n const { hasNextPage, endCursor } = conn?.pageInfo || {};\n if (!hasNextPage || !endCursor) break;\n after = endCursor;\n }\n\n if (brandId == null) return false;\n\n // 2) for the matched brand, try metafields per namespace until a positive hit\n const BRAND_MF_QUERY = `\n query BrandMetafields($id: Int!, $namespace: String!, $keys: [String!]!, $first: Int!) {\n site {\n brand(entityId: $id) {\n entityId\n metafields(namespace: $namespace, keys: $keys, first: $first) {\n edges { node { key value } }\n }\n }\n }\n }\n `;\n\n for (const ns of namespaceCandidates) {\n let data;\n let attempt = 0;\n for (;;) {\n try {\n data = await fetchGraphQL(\n endpoint,\n token,\n BRAND_MF_QUERY,\n { id: Number(brandId), namespace: ns, keys: keyCandidates, first: 50 }\n );\n break;\n } catch (err) {\n if (attempt >= retries) {\n // continue to next namespace on persistent schema/permission errors\n data = null;\n break;\n }\n await wait(retryDelayMs * Math.pow(2, attempt));\n attempt += 1;\n }\n }\n const edges = data?.site?.brand?.metafields?.edges || [];\n for (const e of edges) {\n const mf = e?.node;\n if (!mf?.key) continue;\n // key equality ignoring case & common separators\n const norm = (s) => String(s).trim().toLowerCase().replace(/[_-]+/g, ' ');\n if (norm(mf.key) === norm('Respect MAP')) {\n return isYesY(mf.value);\n }\n }\n // try next namespace\n }\n\n return false;\n } catch (err) {\n console.error('[getRespectMAPFlag] Error:', err);\n return false;\n }\n}","css":"/* version 1.11 */\n.aa-Panel {\n z-index: 100;\n max-width: 800px;\n top: 135px !important;\n}\n\n.aa-Source {\n margin: 0;\n padding: 0;\n position: relative;\n width: 100% !important;\n}\n.aa-Item { pointer-events: none; }\n\n/* re-enable */\n.aa-Item .swatch,\n.aa-Item a,\n.aa-Source[data-autocomplete-source-id*=\"querySuggestionsPlugin\"] li.aa-Item,\n.aa-Source[data-autocomplete-source-id*=\"recentSearchesPlugin\"] li.aa-Item {\n pointer-events: auto;\n}\n\n.aa-Autocomplete {\n margin: 0 auto !important;\n max-width: 100%;\n width: 800px;\n}\n\n.aa-Source .aa-List {\n display: grid;\n}\n\n@media (max-width: 800px) {\n .hit-tag-whybuys {\n flex-wrap: wrap !important;\n }\n}\n\n.aa-SourceHeaderAction {\n color: black;\n margin-left: 24px;\n}\n\n.aa-SourceHeaderQuery {\n font-weight: 700;\n}\n\n@media (max-width: 800px) {\n .aa-Panel {\n margin-top: 55px !important;\n }\n}\n\n@media (max-width: 768px) {\n .aa-Panel {\n margin-top: 35px !important;\n }\n\n .aa-Source .aa-List {\n grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));\n }\n}\n\n@media (max-width: 690px) {\n .aa-Panel {\n top: 0px !important;\n margin-top: -10px !important;\n }\n}\n\n.aa-Item {\n height: 100% !important;\n align-items: start !important;\n border-radius: 3px !important;\n margin-bottom: -20px;\n}\n\n.aa-Input {\n padding-left: 10px !important;\n}\n\ninput[type='search'] {\n box-sizing: inherit !important;\n}\n\n.aa-GridItem {\n flex: 0 0 calc(33.333% - 10px);\n margin-bottom: 1rem;\n background-color: #fff;\n border-radius: 5px;\n text-decoration: none;\n width: 100%;\n height: 100%;\n min-height: 100%;\n margin-top: 1rem;\n}\n\n.aa-ItemPicture {\n position: relative;\n height: 150px;\n width: 100%;\n margin-bottom: 10px;\n}\n\n.aa-ItemPicture img {\n position: absolute;\n margin: auto;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n max-width: 100%;\n max-height: 100%;\n}\n\n.aa-ItemContentBody {\n max-width: 100%;\n padding: 10px;\n height: 250px;\n}\n\n.aa-ItemContentNameWrapper {\n height: 2.5rem;\n width: 200px;\n}\n\n.aa-ItemContentTitle {\n max-width: 100%;\n display: -webkit-box; \n -webkit-box-orient: vertical;\n line-clamp: 2; \n -webkit-line-clamp: 2; \n overflow: hidden; \n white-space: normal; \n}\n\n.aa-ItemContentBodyFooter {\n display: flex;\n justify-content: space-between;\n max-width: 100%;\n width: 100%;\n padding-top: 5px;\n}\n\n.aa-ItemContentPrice {\n margin: 5px 0;\n max-width: 100%;\n}\n\n.aa-SourceFooter {\n text-align: center;\n padding: 2rem;\n padding-bottom: 15px;\n}\n\n.aa-SourceFooter a {\n text-decoration: none;\n}\n\n.show-all-products-btn {\n background-color: rgba(var(--aa-primary-color-rgb), 0.8);\n transition: background 0.2s ease-out;\n color: #fff;\n padding: calc(var(--aa-spacing-half) * 1.5) var(--aa-spacing);\n border-radius: calc(var(--aa-spacing-half) / 2);\n}\n\n.show-all-products-btn:hover {\n background-color: rgba(var(--aa-primary-color-rgb), 1);\n color: #fff;\n}\n\n.show-all-products:hover {\n background-color: #0c7cd5;\n}\n\n.aa-DetachedContainer .aa-Panel {\n margin-top: -10px !important;\n}\n\n.aa-ItemContentPrice {\n display: flex;\n gap: 8px;
336\n align-items: center;\n}\n\n.original-price {\n text-decoration: line-through;\n color: #888;\n font-size: 0.9em;\n}\n\n.sale-price {\n color: #e60023;\n font-weight: bold;\n font-size: 1em;\n}\n\n\n\n\n\n/* ==============================+++++ HEADER CSS OVERRIDE +++++============================== */\n\n:root {\n --al_Site_Background_Color: #FF4800;\n --al_Header_Font_Size_Heading: 16px;\n --al_Header_Font_Size_Title: 14px;\n --al_Header_Font_Size_Content: 12px;\n --al_Header_Box_Shadow: 0px 2px 3px 0px rgba(0, 0, 0, 0.10), 0px 4px 6px -1px rgba(0, 0, 0, 0.05), 0px 2px 4px -2px rgba(0, 0, 0, 0.03);\n --al_Header_Transition_All: all 0.3s ease;\n --al_Header_Font_Size_Filter_Body: 14px;\n}\n\n\n/* Searchbar Settings */\n.aa-Autocomplete {\n width: 100%;\n max-width: 800px;\n}\n.aa-Form,\n.aa-DetachedSearchButton {\n height: 50px !important;\n /* background-color: #F4F4F4 !important; */\n border-radius: 24px !important;\n border: 1px black solid !important;\n}\n@media (max-width: 800px) {\n .aa-Form,\n .aa-DetachedSearchButton {\n height: 40px !important;\n }\n .aa-Autocomplete {\n margin-bottom: 10px !important;\n }\n .aa-DetachedFormContainer {\n align-items: center;\n }\n .aa-DetachedSearchButton, .aa-DetachedCancelButton {\n height: unset;\n margin: 0;\n }\n}\n.aa-Form:focus-within {\n border: black 1px solid !important;\n box-shadow: none;\n}\n.aa-SubmitIcon {\n color: #000 !important;\n}\n.aa-Input {\n padding-left: 0 !important;\n}\n\n.aa-Input:focus {\n outline: none !important;\n}\n.aa-Item[aria-selected=true] {\n background-color: transparent !important;\n}\n.aa-ItemContentPrice,\n.aa-ItemContentPrice span {\n display: block;\n}\n/* end */\n\n\n/* Layout Settings */\n.aa-Panel {\n width: 100% !important;\n left: 0 !important;\n right: 0 !important;\n top: 138px !important;\n z-index: 999999 !important;\n box-shadow: var(--al_Header_Box_Shadow);\n padding: 20px 80px 30px 80px !important;\n border-top: 1px solid #E5E5E5 !important;\n border-radius: 0 !important;\n}\n.aa-Source[data-autocomplete-source-id*=\"productResults\" i] .hit-brand {\n font-weight: normal;\n padding-top: 6px;\n}\n\n@media (min-width: 801px) {\n .aa-PanelLayout {\n display: grid;\n grid-template-columns: 20% 80%;\n grid-template-areas:\n \"querySuggestionsPlugin productResults\"\n \"recentSearchesPlugin productResults\";\n column-gap: 16px;\n row-gap: 0;\n\n margin: 0 auto !important;\n max-width: 2000px !important;\n }\n .aa-Source[data-autocomplete-source-id*=\"querySuggestionsPlugin\" i] {\n grid-area: querySuggestionsPlugin;\n }\n .aa-Source[data-autocomplete-source-id*=\"recentSearchesPlugin\" i] {\n grid-area: recentSearchesPlugin;\n }\n /* Hide suggestions row if EMPTY */\n .aa-Source[data-autocomplete-source-id*=\"querySuggestionsPlugin\" i]:empty {\n display: none !important;\n }\n /* Promote recentSearches to 'suggestions' slot when needed */\n .aa-Source[data-autocomplete-source-id*=\"querySuggestionsPlugin\" i]:empty+.aa-Source[data-autocomplete-source-id*=\"recentSearchesPlugin\" i] {\n grid-area: querySuggestionsPlugin;\n }\n .aa-Source[data-autocomplete-source-id*=\"productResults\" i] {\n grid-area: productResults;\n }\n\n /* If there is NO querySuggestions source, promote recentSearches to the left column */\n .aa-PanelLayout:not(:has(.aa-Source[data-autocomplete-source-id*=\"querySuggestionsPlugin\" i]))\n .aa-Source[data-autocomplete-source-id*=\"recentSearchesPlugin\" i] {\n grid-area: querySuggestionsPlugin;\n }\n}\n\n@media (max-width: 800px) {\n .aa-Panel {\n top: 9px !important;\n }\n .aa-Source[data-autocomplete-source-id*=\"productResults\" i] {\n padding-bottom: 100px;\n }\n}\n/* end */\n\n\n/* Query Suggestions AND Recent Searches */\n.aa-Source[data-autocomplete-source-id*=\"querysuggestions\" i] li.aa-Item,\n.aa-Source[data-autocomplete-source-id*=\"recentSearchesPlugin\" i] li.aa-Item {\n margin-bottom: 0 !important;\n min-height: unset !important;\n}\n.aa-Source[data-autocomplete-source-id*=\"querysuggestions\" i] .aa-ItemContentBody,\n.aa-Source[data-autocomplete-source-id*=\"recentSearchesPlugin\" i] .aa-ItemContentBody {\n height: unset !important;\n margin: 0 !important;\n padding: 0 !important;\n}\n.aa-Source[data-autocomplete-source-id*=\"querysuggestions\" i] .aa-ItemContentTitle,\n.aa-Source[data-autocomplete-source-id*=\"recentSearchesPlugin\" i] .aa-ItemContentTitle {\n height: unset !important;\n}\n.aa-Source[data-autocomplete-source-id*=\"querysuggestions\" i] svg,\n.aa-Source[data-autocomplete-source-id*=\"recentSearchesPlugin\" i] svg {\n width: 16px !important;\n}\n.aa-Source[data-autocomplete-source-id*=\"querysuggestions\" i] .aa-Item,\n.aa-Source[data-autocomplete-source-id*=\"recentSearchesPlugin\" i] .aa-Item {\n padding-left: 0\n}\n.aa-Source[data-autocomplete-source-id*=\"querysuggestions\" i] .aa-ItemContent,\n.aa-Source[data-autocomplete-source-id*=\"recentSearchesPlugin\" i] .aa-ItemContent {\n gap: 2px;\n}\n/* end */\n\n\n/* Hit Results */\n.aa-Source[data-autocomplete-source-id*=\"productResults\" i] ul.aa-List {\n grid-template-columns: repeat(6, 1fr) !important;\n}\n@media (max-width: 1024px) {\n .aa-Source[data-autocomplete-source-id*=\"productResults\" i] ul.aa-List {\n grid-template-columns: repeat(3, 1fr) !important;\n }\n}\n@media (max-width: 800px) {\n .aa-Source[data-autocomplete-source-id*=\"productResults\" i] ul.aa-List {\n grid-template-columns: repeat(2, 1fr) !important;\n }\n}\n.aa-SourceHeaderTitle {\n font-size: var(--al_Header_Font_Size_Heading) !important;\n color: #000 !important;\n}\n.aa-SourceHeaderLine {\n display: none !important;\n}\n/* end */\n\n\n/* Hit Footer */\n.show-all-products-btn {\n color: #FFF;\n background-color: #000;\n}\n.show-all-products-btn:hover {\n background-color: var(--al_Site_Backgroun
336d_Color);\n}\n\n.aa-Source[data-autocomplete-source-id*=\"productResults\" i] ul.aa-List.aa-Item.hit-card.hit-color {\n --cap: 4; /* show 4 on desktop */\n display: flex;\n gap: 4px;\n position: relative;\n}\n\n/* tablet */\n@media (max-width: 1024px) {\n .aa-Source[data-autocomplete-source-id*=\"productResults\" i] ul.aa-List.aa-Item.hit-card.hit-color {\n --cap: 3;\n }\n}\n\n/* phone (optional) */\n@media (max-width: 800px) {\n .aa-Source[data-autocomplete-source-id*=\"productResults\" i] ul.aa-List.aa-Item.hit-card.hit-color {\n --cap: 2;\n }\n}\n\n/* .hit-color-swatch {\n width: 20px; height: 20px;\n border-radius: 50%;\n border: 1px solid rgba(0,0,0,.15);\n} */\n\n/* swatch menu caret */\n.aa-Item .swatch-menu::before {\n right: 8px !important;\n}\n\n.aa-Item .swatch-menu::after {\n right: 8px !important;\n}\n\n/* â+Nâ badge; only visible when JS adds .has-overflow and data-hidden-count */\n.aa-Source[data-autocomplete-source-id*=\"productResults\" i] ul.aa-List.aa-Item.hit-card.hit-color.has-overflow::after \n{\n content: attr(data-hidden-count);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 20px; height: 20px;\n border-radius: 50%;\n margin-left: 4px;\n font-size: 12px;\n background: #f3f3f3;\n color: #111;\n border: 1px solid rgba(0,0,0,.15);\n}\n/* end */\n\n\n/* ==============================+++++ END HEADER CSS OVERRIDE +++++============================== */\n","showOutOfStockItems":false,"isInstantSearchEnabled":false,"instantSearchUrl":"/search-results","isInsightsEnabled":true,"insightsUseCookies":true}; 337 338 339 </script>
339 340
340<script data-cfasync="false" src="https://microapps.bigcommerce.com/bodl-events/1.9.4/index.js" integrity="sha256-Y0tDj1qsyiKBRibKllwV0ZJ1aFlGYaHHGl/oUFoXJ7Y=" nonce="{{nonce}}" crossorigin="anonymous"></script>
340 341
341<script data-cfasync="false" nonce="{{nonce}}"> 342 343 (function() { 344 function decodeBase64(base64) { 345 const text = atob(base64); 346 const length = text.length; 347 const bytes = new Uint8Array(length); 348 for (let i = 0; i < length; i++) { 349 bytes[i] = text.charCodeAt(i); 350 } 351 const decoder = new TextDecoder(); 352 return decoder.decode(bytes); 353 } 354 window.bodl = JSON.parse(decodeBase64("eyJzZXNzaW9uIjp7ImlkIjoiODdhOTNjOTgtNzQ3OS00ODA2LTk1ZTAtZDBhNWViNmVhNTZmIiwiZmlyc3RfdG91Y2hfdGltZXN0YW1wIjoiMjAyNi0xMC0wNlQxMzo0OTowOCIsImZpcnN0X3RvdWNoX3JlZmVycmFsX3VybCI6IiIsImZpcnN0X3RvdWNoX3JlcXVlc3RfdXJsIjoiaHR0cHM6Ly9taWxpdGFyeWx1Z2dhZ2UuY29tLyJ9LCJzaG9wcGVyIjp7InZpc2l0b3JfaWQiOiIiLCJjdXN0b21lcl9pZCI6bnVsbCwiZW1haWwiOm51bGwsImZpcnN0X25hbWUiOm51bGwsImxhc3RfbmFtZSI6bnVsbH0sImRhdGFfY29uc2VudCI6eyJmdW5jdGlvbmFsIjp0cnVlLCJhbmFseXRpY3MiOnRydWUsImFkdmVydGlzaW5nIjp0cnVlfSwiZXZlbnRzIjpbeyJib2RsX3YxX3ZpZXdfYmFubmVyIjp7ImV2ZW50X2lkIjoiN2QxMWFjZTMtMWQ1NC00NjFkLThiY2EtMWRhNDU4MDM5YzNhIiwiY2hhbm5lbF9pZCI6MSwiYmFubmVyX2lkIjoiMjMiLCJiYW5uZXJfbmFtZSI6IkhvbWUgUGFnZSAtIDEyMjYyNSJ9fV19")); 355 })() 356 357 </script>
357 358 359
360<script> 361!function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window,document,'script','https://connect.facebook.net/en_US/fbevents.js'); 362 363fbq('set', 'autoConfig', 'false', '331481404281528'); 364fbq('dataProcessingOptions', ['LDU'], 0, 0); 365fbq('init', '331481404281528', {"external_id":"93a5b46d-3643-4e14-b413-9af0f40893d9"}); 366fbq('set', 'agent', 'bigcommerce', '331481404281528'); 367</script>
367 368<noscript><img height="1" width="1" style="display:none" alt="null" src="https://www.facebook.com/tr?id=331481404281528&ev=PageView&noscript=1&a=plbigcommerce1.2&eid=f0915894-608a-450c-9861-15184f347e54"/></noscript> 369
370<script nonce="{{nonce}}"> 371if(typeof fbq === 'function') { 372 fbq('trackSingle', '331481404281528', 'PageView', {}, {"eventID":"f0915894-608a-450c-9861-15184f347e54"}); 373} else if (typeof window.addEventListener === 'function') { 374 window.addEventListener("load", function() { fbq('trackSingle', '331481404281528', 'PageView', {}, {"eventID":"f0915894-608a-450c-9861-15184f347e54"}); }, false) 375} 376</script>
376 377
378<script nonce="{{nonce}}"> 379(function () { 380 var xmlHttp = new XMLHttpRequest(); 381 382 xmlHttp.open('POST', 'https://bes.gcp.data.bigcommerce.com/nobot'); 383 xmlHttp.setRequestHeader('Content-Type', 'application/json'); 384 xmlHttp.send('{"store_id":"999489771","timezone_offset":"-4.0","timestamp":"2026-10-06T13:49:08.08654000Z","visit_id":"30899b41-cac0-4d43-80c2-680440547eef","channel_id":1}'); 385})(); 386</script>
386 387 388 389 <!-- LIBRARY --> 390
390<script src="https://unpkg.com/feather-icons"></script>
390 <!--Feather Icons--> 391 <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/[email protected]/css/all.min.css"> <!--Font Awesome--> 392 <!-- end --> 393 394 <!-- ALGOLIA CORE --> 395
395<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/algoliasearch-lite.umd.js"></script>
395 396
396<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/instantsearch.production.min.js"></script>
396 397 <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/themes/satellite-min.css" integrity="sha256-woeV7a4SRDsjDc395qjBJ4+ZhDdFn8AqswN1rlTO64E=" crossorigin="anonymous"> 398 <!-- end --> 399 400 <!-- Autocomplete core + CSS --> 401 <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@algolia/autocomplete-theme-classic@1/dist/theme.min.css"> 402
402<script src="https://cdn.jsdelivr.net/npm/@algolia/autocomplete-js@1/dist/umd/index.production.min.js"></script>
402 403 404 <!-- Optional plugins (UMD builds) --> 405
405<script src="https://cdn.jsdelivr.net/npm/@algolia/autocomplete-plugin-query-suggestions@1/dist/umd/index.production.min.js"></script>
405 406
406<script src="https://cdn.jsdelivr.net/npm/@algolia/autocomplete-plugin-recent-searches@1/dist/umd/index.production.min.js"></script>
406 407 408 <!--Store Flags--> 409
409<script> 410 window.flags = { 411 store_code: "MLC", 412 store_color: "#000", 413 features: { 414 attentive: false, 415 klaviyo: true, 416 trust_pilot: false, 417 bazaarvoice: false 418 } 419 } 420</script>
420 421 <!-- Bazaarvoice --> 422
422<script> 423 (function () { 424 var storeCode = (window.flags && window.flags.store_code) || ''; 425 426 // Only FA has Bazaarvoice right now 427 if (storeCode !== 'FA') return; 428 429 var host = window.location.hostname || ''; 430 var isProd = host.includes('fireauthority.com'); 431 var env = isProd ? 'production' : 'staging'; 432 433 var deployment = 'fireauthority'; 434 435 var s = document.createElement('script'); 436 s.async = true; 437 s.src = 'https://apps.bazaarvoice.com/deployments/' + deployment + '/main_site/' + env + '/en_US/bv.js'; 438 s.type = 'text/javascript'; 439 document.head.appendChild(s); 440 })(); 441 </script>
441 442 <!-- end --> 443 444 </head> 445 <body class="page-type-default" id="STORE_MLC"> 446 <svg data-src="https://cdn11.bigcommerce.com/s-3lem6ywgsw/stencil/ca2c5200-a308-013f-e7cf-5e53173c381a/e/8dd29750-b2b5-013e-f7a2-4ef3209772a9/img/icon-sprite.svg" class="icons-svg-sprite"></svg> 447 448 <!--Router > Header--> 449 <!--MLC Header--> 450<a href="#main-content" class="skip-to-main-link">Skip to main content</a> 451 452<div class="sandbox-banner" id="sandbox-banner" hidden style="width: 100%; text-align: center; padding: 6px 16px; background-color: #FBBF18; font-weight: 700;"> 453 You are in our sandbox — please visit <a href="https://www.militaryluggage.com">militaryluggage.com</a> to Shop 454</div>
455<script> 456 /* Hidden by default, revealed only on a sandbox hostname -- if this script 457 fails to run, production stays clean rather than showing the banner. */ 458 (function () { 459 if (window.location.hostname.indexOf('sandbox') === -1) return; 460 var banner = document.getElementById('sandbox-banner'); 461 if (banner) banner.hidden = false; 462 })(); 463</script>
463 464 465<header class="header" role="banner"> 466 467 <!--Router > Header > Navigation--> 468 <!--MLC > Header > Navigation--> 469<nav class="navUser"> 470 471 472 <ul class="navUser-section navUser-section--alt"> 473 474 475 <!--Manual Navigation Option (Desktop)--> 476 <li class="navUser-item navUser-item--patriot"> 477 <a href="https://www.uspatriottactical.com/?utm_source=military_luggage&utm_medium=referral&utm_campaign=cross_site_banner" target="_blank" rel="noopener noreferrer" aria-label="U.S. Patriot (opens in a new tab)"> 478 <img src="https://cdn11.bigcommerce.com/s-3lem6ywgsw/stencil/ca2c5200-a308-013f-e7cf-5e53173c381a/e/8dd29750-b2b5-013e-f7a2-4ef3209772a9/img/us-patriot-logo-white.png" alt="U.S. Patriot" title="U.S. Patriot"> 479 </a> 480 </li> 481 <li class="navUser-item navUser-item--ml"> 482 <a href="https://militaryluggage.com/"> 483 <img src="https://cdn11.bigcommerce.com/s-3lem6ywgsw/stencil/ca2c5200-a308-013f-e7cf-5e53173c381a/e/8dd29750-b2b5-013e-f7a2-4ef3209772a9/img/ml-logo-dark.png" alt="Military Luggage" title="Military Luggage"> 484 </a> 485 </li> 486 <li class="navUser-item navUser-item--help"> 487 <a href="/contact-us" target="_blank" aria-label="Help Center (opens in a new tab)" class="hidden-md">Help</a> 488 <a href="/contact-us" target="_blank" aria-label="Help Center (opens in a new tab)" class="hidden visible-md"> 489 <i data-feather="help-circle" aria-hidden="true"></i> 490 </a> 491 </li> 492 <li class="navUser-item hidden-md"> 493 <a href="/account.php?action=order_status">Orders</a> 494 </li> 495 <li class="navUser-item hidden-md"> 496 <a href="/return-exchange">Returns</a> 497 </li> 498 <li class="navUser-item navUser-item--call hidden-md"> 499 <a href="tel:888.959.5579"> 500 <i data-feather="phone" aria-hidden="true"></i> 501 <span>Call</span> 502 </a> 503 </li> 504 <!--end--> 505 506 </ul> 507</nav> 508 509 <div class="header-main"> 510 511 <!--Mobile Toggle Menu--> 512 <div class="mobileMenu-toggle" data-mobile-menu-toggle="menu" role="button" aria-label="Open menu" tabindex="0"> 513 <i data-feather="menu"></i> 514 </div> 515 516 <!--Logo--> 517 <div class="header-logo header-logo--center"> 518 <a href="https://militaryluggage.com/" class="header-logo__link" data-header-logo-link> 519 <div class="header-logo-image-container"> 520 <img class="header-logo-image" 521 src="https://cdn11.bigcommerce.com/s-3lem6ywgsw/images/stencil/250x100/download_tran_1770231120__77374.original.png" 522 srcset="https://cdn11.bigcommerce.com/s-3lem6ywgsw/images/stencil/250x100/download_tran_1770231120__77374.original.png" 523 alt="Military Luggage" 524 title="Military Luggage"> 525 </div> 526</a> 527 </div> 528 529 <!-- MOBILE CART: before search in DOM --> 530 <div class="main-nav-item hidden-lg"> 531 <a class="navUser-action" 532 data-cart-preview 533 id="cart-icon-mobile" 534 data-dropdown="cart-preview-dropdown" 535 data-options="align:right" 536 href="https://militaryluggage.com/cart.php" 537 aria-label="Cart with 0 items"> 538 <span class="navUser-item-cartLabel"> 539 <i data-feather="shopping-cart" aria-hidden="true"></i> 540 <span class="countPill cart-quantity"></span> 541 <div class="navUser-action-label hidden-lg">Cart</div> 542 </span> 543 </a> 544 </div> 545 546 <!--Searchbox--> 547 <div class="dropdown dropdown--quickSearch" id="quickSearch" data-prevent-quick-search-close> 548 <div class="container"> 549 <form class="form" data-url="https://militaryluggage.com/search.php" data-quick-search-form> 550 <fieldset class="form-fieldset"> 551 <div class="form-field"> 552 <label class="is-srOnly" for="nav-quick-search">Search</label> 553 <input class="form-input" 554 data-search-quick 555 name="nav-quick-search" 556 id="nav-quick-search"
557 data-error-message="Search field cannot be empty." 558 placeholder="Search the store" 559 autocomplete="off" 560 > 561 </div> 562 </fieldset> 563 </form> 564 <section class="quickSearchResults" data-bind="html: results"></section> 565 <p role="status" 566 aria-live="polite" 567 class="aria-description--hidden" 568 data-search-aria-message-predefined-text="product results for" 569 ></p> 570</div> 571 </div> 572 573 574 <div class="main-nav-item sign-in"> 575 <a 576 class="navUser-action navUser-item--compare" 577 id="" 578 data-compare-nav 579 aria-label="Compare" 580 href="https://militaryluggage.com/compare"> 581 <i data-feather="shuffle" aria-hidden="true"></i> 582 <div class="navUser-action-label">Compare<span class="countPill countPill--positive countPill--alt"></span></div> 583 </a> 584 </div> 585 586 <!-- Fire Station --> 587 <div class="main-nav-item fire-station"> 588 <a href="#" 589 class="navUser-action" 590 id="fire-station-toggle" 591 data-dropdown="fire-station-dropdown" 592 role="button" 593 aria-label="Command Center"> 594 <img src="https://cdn11.bigcommerce.com/s-3lem6ywgsw/stencil/ca2c5200-a308-013f-e7cf-5e53173c381a/e/8dd29750-b2b5-013e-f7a2-4ef3209772a9/icons/CommandCenter_Black_V2.png" alt="Command Center Icon" style="width: 30px; height: 20px;" /> 595 <span class="navUser-action-label"> 596 <span data-fire-station-label>Command Center</span> 597 </span> 598 </a> 599 600 <div class="dropdown-menu" id="fire-station-dropdown" data-dropdown-content aria-hidden="true"> 601 602<!-- Placeholder where dropdown is injected --> 603<div id="dropdown-content"></div> 604<button class="close-button" aria-label="Close Dropdown" role="button" tabindex="0"> 605 <i data-feather="x"></i> 606</button> 607<!-- Pre-render All Dropdown Templates --> 608<div id="dropdown-template" class="hidden"> 609 610 <!--Sign In--> 611 <div id="dropdown-template-signin"> 612 <!-- Sign In Content --> 613<div class="dropdown-signin"> 614 <div class="navUser-action-signin-text" style="margin-bottom: 12px;"> 615 <div class="h6">Welcome to Military Luggage</div> 616 <span class="navUser-action-signin-subtitle">Sign in or create an account to get started</span> 617 </div> 618 <div class="sign-in-actions"> 619 <a class="sign-in-button" href="https://militaryluggage.com/login.php">Sign in</a> 620 <a class="create-account-button" href="https://militaryluggage.com/login.php?action=create_account">Create Account</a> 621 </div> 622 <a class="navUser-action-signin" href="https://militaryluggage.com/account.php" aria-label="Orders"> 623 <i data-feather="package" aria-hidden="true"></i> 624 <div class="navUser-action-signin-text"> 625 <div>Orders</div> 626 <span class="navUser-action-signin-subtitle">Track and manage your orders</span> 627 </div> 628 </a> 629</div> 630 </div> 631 <!--end--> 632 633 <!--Fire Station--> 634 <div id="dropdown-template-firestation"> 635 <!--Router > Header > Dropdown Firestation--> 636 <!--MLC > Header > Dropdown Fire Station--> 637<div class="dropdown-firestation"> 638 <div class="h6"> 639 Your Location 640 </div> 641 <div data-zip-root> 642 <div id="location" role="button" tabindex="0" aria-controls="change-zip" aria-expanded="false"></div> 643 <div id="change-zip" hidden> 644 <div class="zip-pop" role="dialog" aria-label="Change location"> 645 <form class="zip-form" id="zipForm"> 646 <div class="zip-field"> 647 <i data-feather="search" aria-hidden="true"></i> 648 <input id="zipInput" type="text" inputmode="numeric" autocomplete="postal-code" 649 placeholder="Enter ZIP code" aria-label="Enter ZIP code" /> 650 </div> 651 <button class="zip-save" type="submit">Save</button> 652 </form> 653 <div class="zip-err" id="zipErr" aria-live="polite"></div> 654 </div> 655 </div> 656 </div> 657 658 659 <a class="navUser-action-firestation" target="_blank" href="https://www.buzzsprout.com/2100384" aria-label="Podcast"> 660 <i data-feather="cast" aria-hidden="true"></i> 661 <div class="navUser-action-firestation-text"> 662 <div>
662Podcast</div> 663 <span class="navUser-action-firestation-subtitle">Honoring Hidden Heroes</span> 664 </div> 665 </a> 666 <a class="navUser-action-firestation" href="/blog" aria-label="The MLC Briefing"> 667 <i data-feather="book-open" aria-hidden="true"></i> 668 <div class="navUser-action-firestation-text"> 669 <div>The MLC Briefing</div> 670 <span class="navUser-action-firestation-subtitle">Sharing What Matters</span> 671 </div> 672 </a> 673</div> 674 </div> 675 <!--end--> 676 677</div> 678 679<style> 680 .close-button { 681 position: absolute; 682 top: 10px; 683 right: 10px; 684 cursor: pointer; 685 font-size: 18px; 686 color: #333; 687 } 688</style> 689 690 </div> 691 </div> 692 693 <!--Sign-In--> 694 <div class="main-nav-item sign-in" id="sign-in"> 695 <a href="#" 696 class="navUser-action" 697 id="signin-icon" 698 data-dropdown="signin-dropdown" 699 role="button" 700 aria-label="User Menu"> 701 <i data-feather="user" aria-hidden="true"></i> 702 <div class="navUser-action-label">Sign in</div> 703 </a> 704 <div class="dropdown-menu" id="signin-dropdown" data-dropdown-content aria-hidden="true"> 705 706<!-- Placeholder where dropdown is injected --> 707<div id="dropdown-content"></div> 708<button class="close-button" aria-label="Close Dropdown" role="button" tabindex="0"> 709 <i data-feather="x"></i> 710</button> 711<!-- Pre-render All Dropdown Templates --> 712<div id="dropdown-template" class="hidden"> 713 714 <!--Sign In--> 715 <div id="dropdown-template-signin"> 716 <!-- Sign In Content --> 717<div class="dropdown-signin"> 718 <div class="navUser-action-signin-text" style="margin-bottom: 12px;"> 719 <div class="h6">Welcome to Military Luggage</div> 720 <span class="navUser-action-signin-subtitle">Sign in or create an account to get started</span> 721 </div> 722 <div class="sign-in-actions"> 723 <a class="sign-in-button" href="https://militaryluggage.com/login.php">Sign in</a> 724 <a class="create-account-button" href="https://militaryluggage.com/login.php?action=create_account">Create Account</a> 725 </div> 726 <a class="navUser-action-signin" href="https://militaryluggage.com/account.php" aria-label="Orders"> 727 <i data-feather="package" aria-hidden="true"></i> 728 <div class="navUser-action-signin-text"> 729 <div>Orders</div> 730 <span class="navUser-action-signin-subtitle">Track and manage your orders</span> 731 </div> 732 </a> 733</div> 734 </div> 735 <!--end--> 736 737 <!--Fire Station--> 738 <div id="dropdown-template-firestation"> 739 <!--Router > Header > Dropdown Firestation--> 740 <!--MLC > Header > Dropdown Fire Station--> 741<div class="dropdown-firestation"> 742 <div class="h6"> 743 Your Location 744 </div> 745 <div data-zip-root> 746 <div id="location" role="button" tabindex="0" aria-controls="change-zip" aria-expanded="false"></div> 747 <div id="change-zip" hidden> 748 <div class="zip-pop" role="dialog" aria-label="Change location"> 749 <form class="zip-form" id="zipForm"> 750 <div class="zip-field"> 751 <i data-feather="search" aria-hidden="true"></i> 752 <input id="zipInput" type="text" inputmode="numeric" autocomplete="postal-code" 753 placeholder="Enter ZIP code" aria-label="Enter ZIP code" /> 754 </div> 755 <button class="zip-save" type="submit">Save</button> 756 </form> 757 <div class="zip-err" id="zipErr" aria-live="polite"></div> 758 </div> 759 </div> 760 </div> 761 762 763 <a class="navUser-action-firestation" target="_blank" href="https://www.buzzsprout.com/2100384" aria-label="Podcast"> 764 <i data-feather="cast" aria-hidden="true"></i> 765 <div class="navUser-action-firestation-text"> 766 <div>Podcast</div> 767 <span class="navUser-action-firestation-subtitle">Honoring Hidden Heroes</span> 768 </div> 769 </a> 770 <a class="navUser-action-firestation" href="/blog" aria-label="The MLC Briefing"> 771 <i data-feather="book-open" aria-hidden="true"></i> 772 <div class="navUser-action-firestation-text"> 773 <div>The MLC Briefing</div>
774 <span class="navUser-action-firestation-subtitle">Sharing What Matters</span> 775 </div> 776 </a> 777</div> 778 </div> 779 <!--end--> 780 781</div> 782 783<style> 784 .close-button { 785 position: absolute; 786 top: 10px; 787 right: 10px; 788 cursor: pointer; 789 font-size: 18px; 790 color: #333; 791 } 792</style> 793 794 </div> 795 </div> 796 797 <!--Cart--> 798 <div class="main-nav-item hidden-md"> 799 <a class="navUser-action" 800 data-cart-preview 801 id="cart-icon" 802 data-dropdown="cart-preview-dropdown" 803 data-options="align:right" 804 href="https://militaryluggage.com/cart.php" 805 aria-label="Cart with 0 items"> 806 <span class="navUser-item-cartLabel"> 807 <i data-feather="shopping-cart" aria-hidden="true"></i> 808 <span class="countPill cart-quantity"></span> 809 <div class="navUser-action-label hidden-md">Cart</div> 810 </span> 811 </a> 812 <div class="dropdown-menu" id="cart-preview-dropdown" data-dropdown-content aria-hidden="true"></div> 813 </div> 814 815 </div> 816 817 <div class="navPages-container" id="menu" data-menu> 818 <!--Router > Header > Navigation Menu--> 819 <!--MLC > Header > Navigation Menu--> 820<nav class="navPages"> 821 <!-- <div class="navPages-quickSearch"> 822 <div class="container"> 823 <form class="form" data-url="https://militaryluggage.com/search.php" data-quick-search-form> 824 <fieldset class="form-fieldset"> 825 <div class="form-field"> 826 <label class="is-srOnly" for="nav-menu-quick-search">Search</label> 827 <input class="form-input" 828 data-search-quick 829 name="nav-menu-quick-search" 830 id="nav-menu-quick-search" 831 data-error-message="Search field cannot be empty." 832 placeholder="Search the store" 833 autocomplete="off" 834 > 835 </div> 836 </fieldset> 837 </form> 838 <section class="quickSearchResults" data-bind="html: results"></section> 839 <p role="status" 840 aria-live="polite" 841 class="aria-description--hidden" 842 data-search-aria-message-predefined-text="product results for" 843 ></p> 844</div> 845 </div> --> 846 <ul class="navPages-list navPages-list--user"> 847 <!--Manual Navigation Options (Not Signed In)--> 848 <li class="navPages-item" style="position: relative;"> 849 <!--Sign In--> 850 <a class="navPages-action" 851 href="https://militaryluggage.com/login.php" 852 aria-label="Sign in" 853 > 854 <i data-feather="user" aria-hidden="true"></i> 855 Sign in 856 </a> 857 <!-- Fire Station --> 858 <div> 859 <a 860 class="navPages-action has-subMenu" 861 id="mobile-fire-station-toggle" 862 data-dropdown="fire-station-dropdown" 863 role="button" 864 tabindex="0" 865 aria-haspopup="menu" 866 role="button" 867 aria-label="Command Center"> 868 <img src="https://cdn11.bigcommerce.com/s-3lem6ywgsw/stencil/ca2c5200-a308-013f-e7cf-5e53173c381a/e/8dd29750-b2b5-013e-f7a2-4ef3209772a9/icons/CommandCenter_White_V2.png" alt="Command Center Icon" style="width: 35px; height: 24px;" /> 869 Command Center 870 </a> 871 872 <div class="dropdown-menu" id="fire-station-dropdown" data-dropdown-content> 873 874<!-- Placeholder where dropdown is injected --> 875<div id="dropdown-content"></div> 876<button class="close-button" aria-label="Close Dropdown" role="button" tabindex="0"> 877 <i data-feather="x"></i> 878</button> 879<!-- Pre-render All Dropdown Templates --> 880<div id="dropdown-template" class="hidden"> 881 882 <!--Sign In--> 883 <div id="dropdown-template-signin"> 884 <!-- Sign In Content --> 885<div class="dropdown-signin"> 886 <div class="navUser-action-signin-text" style="margin-bottom: 12px;"> 887 <div class="h6">Welcome to Military Luggage</div>
888 <span class="navUser-action-signin-subtitle">Sign in or create an account to get started</span> 889 </div> 890 <div class="sign-in-actions"> 891 <a class="sign-in-button" href="https://militaryluggage.com/login.php">Sign in</a> 892 <a class="create-account-button" href="https://militaryluggage.com/login.php?action=create_account">Create Account</a> 893 </div> 894 <a class="navUser-action-signin" href="https://militaryluggage.com/account.php" aria-label="Orders"> 895 <i data-feather="package" aria-hidden="true"></i> 896 <div class="navUser-action-signin-text"> 897 <div>Orders</div> 898 <span class="navUser-action-signin-subtitle">Track and manage your orders</span> 899 </div> 900 </a> 901</div> 902 </div> 903 <!--end--> 904 905 <!--Fire Station--> 906 <div id="dropdown-template-firestation"> 907 <!--Router > Header > Dropdown Firestation--> 908 <!--MLC > Header > Dropdown Fire Station--> 909<div class="dropdown-firestation"> 910 <div class="h6"> 911 Your Location 912 </div> 913 <div data-zip-root> 914 <div id="location" role="button" tabindex="0" aria-controls="change-zip" aria-expanded="false"></div> 915 <div id="change-zip" hidden> 916 <div class="zip-pop" role="dialog" aria-label="Change location"> 917 <form class="zip-form" id="zipForm"> 918 <div class="zip-field"> 919 <i data-feather="search" aria-hidden="true"></i> 920 <input id="zipInput" type="text" inputmode="numeric" autocomplete="postal-code" 921 placeholder="Enter ZIP code" aria-label="Enter ZIP code" /> 922 </div> 923 <button class="zip-save" type="submit">Save</button> 924 </form> 925 <div class="zip-err" id="zipErr" aria-live="polite"></div> 926 </div> 927 </div> 928 </div> 929 930 931 <a class="navUser-action-firestation" target="_blank" href="https://www.buzzsprout.com/2100384" aria-label="Podcast"> 932 <i data-feather="cast" aria-hidden="true"></i> 933 <div class="navUser-action-firestation-text"> 934 <div>Podcast</div> 935 <span class="navUser-action-firestation-subtitle">Honoring Hidden Heroes</span> 936 </div> 937 </a> 938 <a class="navUser-action-firestation" href="/blog" aria-label="The MLC Briefing"> 939 <i data-feather="book-open" aria-hidden="true"></i> 940 <div class="navUser-action-firestation-text"> 941 <div>The MLC Briefing</div> 942 <span class="navUser-action-firestation-subtitle">Sharing What Matters</span> 943 </div> 944 </a> 945</div> 946 </div> 947 <!--end--> 948 949</div> 950 951<style> 952 .close-button { 953 position: absolute; 954 top: 10px; 955 right: 10px; 956 cursor: pointer; 957 font-size: 18px; 958 color: #333; 959 } 960</style> 961 962 </div> 963 </div> 964 965 <!-- Order --> 966 <a class="navPages-action" href="/account.php?action=order_status"> 967 <i data-feather="package" aria-hidden="true"></i> 968 Orders 969 </a> 970 971 <!-- Return --> 972 <a class="navPages-action" href="/return-exchange"> 973 <i data-feather="rotate-cw" aria-hidden="true"></i> 974 Returns 975 </a> 976 <!--end--> 977 978 </li> 979 <!-- Need to be Li with button for voiceover compatibility --> 980 <li id="close-mobile-menu-button-container"> 981 <button id="close-mobile-menu-button" 982 class="mobileMenu-close hidden" 983 type="button" 984 aria-label="Close menu"> 985 <i data-feather="x" aria-hidden="true"></i> 986 </button> 987 </li> 988 989 <!-- --> 990 </ul> 991 <ul class="navPages-list navPages-list--category"> 992 <li class="navPages-item"> 993 <a class="navPages-action has-subMenu" 994 href="https://militaryluggage.com/bags-packs/" 995 data-collapsible="navPages-716"> 996 Bags & Packs 997 <i class="icon navPages-action-moreIcon" aria-hidden="true"> 998 <svg><use href="#icon-chevron-down" /></svg> 999 </i> 1000 </a> 1001 1002 1003<div class="navPage-subMenu" id="navPages-716" aria-hidden="true" tabindex="-1"> 1004 1005
1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 <ul class="navPage-subMenu-list"> 1024 1025 <li class="navPage-subMenu-item navPage-subMenu-col"> 1026 <a class="navPage-subMenu-action navPages-action navPages-action-parentBold" 1027 href="https://militaryluggage.com/bags-packs/" 1028 aria-label="All Bags & Packs"> 1029 All Bags & Packs 1030 1031 <span class="navPages-category-thumb"> 1032 <img class="navPages-category-image" 1033 src="https://cdn11.bigcommerce.com/s-3lem6ywgsw/images/stencil/300x300/j/sv1176_coy_1__07557_category.original.jpg" 1034 alt="Bags & Packs" 1035 loading="lazy"> 1036 </span> 1037 </a> 1038 </li> 1039 1040 1041 <li class="navPage-subMenu-item navPage-subMenu-col childless"> 1042 <ul class="navPage-childList navPage-childList--flat childless"> 1043 1044 <li class="navPage-childList-item"> 1045 <a class="navPage-childList-action navPages-action navPages-action-parentBold" 1046 href="https://militaryluggage.com/bags-packs/deployment-loadout-bags/" 1047 aria-label="Deployment & Loadout Bags"> 1048 Deployment & Loadout Bags 1049 </a> 1050 </li> 1051 1052 <li class="navPage-childList-item"> 1053 <a class="navPage-childList-action navPages-action navPages-action-parentBold" 1054 href="https://militaryluggage.com/bags-packs/backpacks/" 1055 aria-label="Backpacks"> 1056 Backpacks 1057 </a> 1058 </li> 1059 1060 <li class="navPage-childList-item"> 1061 <a class="navPage-childList-action navPages-action navPages-action-parentBold" 1062 href="https://militaryluggage.com/bags-packs/rucksacks/" 1063 aria-label="Rucksacks"> 1064 Rucksacks 1065 </a> 1066 </li> 1067 1068 <li class="navPage-childList-item"> 1069 <a class="navPage-childList-action navPages-action navPages-action-parentBold" 1070 href="https://militaryluggage.com/bags-packs/3-day-packs/" 1071 aria-label="3-Day Packs"> 1072 3-Day Packs 1073 </a> 1074 </li> 1075 1076 <li class="navPage-childList-item"> 1077 <a class="navPage-childList-action navPages-action navPages-action-parentBold" 1078 href="https://militaryluggage.com/bags-packs/hydration-packs/" 1079 aria-label="Hydration Packs"> 1080 Hydration Packs 1081 </a> 1082 </li> 1083 1084 <li class="navPage-childList-item"> 1085 <a class="navPage-childList-action navPages-action navPages-action-parentBold" 1086 href="https://militaryluggage.com/bags-packs/assault-packs/" 1087 aria-label="Assault Packs"> 1088 Assault Packs 1089 </a> 1090 </li> 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 </ul> 1102 </li> 1103 1104 <li class="navPage-subMenu-item navPage-subMenu-col childless childless--overflow"> 1105 <ul class="navPage-childList navPage-childList--flat childless"> 1106 1107 1108 1109 1110 1111 1112 1113 <li class="navPage-childList-item"> 1114 <a class="navPage-childList-action navPages-action navPages-action-parentBold" 1115 href="https://militaryluggage.com/bags-packs/duffle-bags/" 1116 aria-label="Duffle Bags"> 1117 Duffle Bags 1118 </a> 1119 </li> 1120 1121 <li class="navPage-childList-item"> 1122 <a class="navPage-childList-action navPages-action navPages-action-parentBold" 1123 href="https://militaryluggage.com/bags-packs/weapon-bags-cases/" 1124 aria-label="Weapon Bags & Cases"> 1125 Weapon Bags & Cases 1126 </a> 1127 </li> 1128 1129 <li class="navPage-childList-item"> 1130 <a class="navPage-childList-action navPages-action navPages-action-parentBold" 1131 href="https://militaryluggage.com/bags-packs/sling-bags/" 1132 aria-label="Sling Bags"> 1133 Sling Bags 1134 </a> 1135 </li> 1136 1137 <li class="navPage-childList-item"> 1138 <a class="navPage-childList-action navPages-action navPages-action-parentBold" 1139 href="https://militaryluggage.com/bags-packs/waist-fanny-packs/" 1140 aria-label="Waist & Fanny Packs"> 1141 Waist & Fanny Packs 1142 </a> 1143 </li> 1144 1145 <li class="navPage-childList-item"> 1146 <a class="navPage-childList-action navPages-action navPages-action-parentBold" 1147 href="https://militaryluggage.com/bags-packs/range-bags/" 1148 aria-label="Range Bags"> 1149 Range Bags 1150 </a> 1151 </li> 1152 1153 <li class="navPage-childList-item"> 1154 <a class="navPage-childList-action navPages-action navPages-action-parentBold" 1155 href="https://militaryluggage.com/bags-packs/medical-bags/" 1156 aria-label="Medical Bags"> 1157 Medical Bags 1158 </a> 1159 </li> 1160 1161 <li class="navPage-childList-item"> 1162 <a class="navPage-childList-action navPages-action navPages-action-parentBold" 1163 href="https://militaryluggage.com/bags-packs/briefcases/" 1164 aria-label="Briefcases"> 1165 Briefcases 1166 </a> 1167 </li> 1168 1169 <li class="navPage-childList-item"> 1170 <a class="navPage-childList-action navPages-action navPages-action-parentBold" 1171 href="https://militaryluggage.com/bags-packs/travel-kit-bags/" 1172 aria-label="Travel & Kit Bags"> 1173 Travel & Kit Bags 1174 </a> 1175 </li> 1176 1177 <li class="navPage-childList-item"> 1178 <a class="navPage-childList-action navPages-action navPages-action-parentBold" 1179 href="https://militaryluggage.com/bags-packs/bags-packs-accessories/" 1180 aria-label="Bags & Packs Accessories"> 1181 Bags & Packs Accessories 1182 </a> 1183 </li> 1184 1185 </ul> 1186 </li> 1187 1188 1189 1190 </ul> 1191</div> 1192 1193 </li> 1194 <li class="navPages-item"> 1195 <a class="navPages-action has-subMenu" 1196 href="https://militaryluggage.com/pouches/" 1197 data-collapsible="navPages-717"> 1198 Pouches 1199 <i class="icon navPages-action-moreIcon" aria-hidden="true"> 1200 <svg><use href="#icon-chevron-down" /></svg> 1201 </i> 1202 </a> 1203 1204 1205<div class="navPage-subMenu" id="navPages-717" aria-hidden="true" tabindex="-1"> 1206 1207
1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 <ul class="navPage-subMenu-list"> 1220 1221 <li class="navPage-subMenu-item navPage-subMenu-col"> 1222 <a class="navPage-subMenu-action navPages-action navPages-action-parentBold" 1223 href="https://militaryluggage.com/pouches/" 1224 aria-label="All Pouches"> 1225 All Pouches 1226 1227 <span class="navPages-category-thumb"> 1228 <img class="navPages-category-image" 1229 src="https://cdn11.bigcommerce.com/s-3lem6ywgsw/images/stencil/300x300/t/sa686_socp_1500_1__20554_category.original.jpg" 1230 alt="Pouches" 1231 loading="lazy"> 1232 </span> 1233 </a> 1234 </li> 1235 1236 1237 <li class="navPage-subMenu-item navPage-subMenu-col childless"> 1238 <ul class="navPage-childList navPage-childList--flat childless"> 1239 1240 <li class="navPage-childList-item"> 1241 <a class="navPage-childList-action navPages-action navPages-action-parentBold" 1242 href="https://militaryluggage.com/pouches/mag-pouches/" 1243 aria-label="Mag Pouches"> 1244 Mag Pouches 1245 </a> 1246 </li> 1247 1248 <li class="navPage-childList-item"> 1249 <a class="navPage-childList-action navPages-action navPages-action-parentBold" 1250 href="https://militaryluggage.com/pouches/ammo-pouches/" 1251 aria-label="Ammo Pouches"> 1252 Ammo Pouches 1253 </a> 1254 </li> 1255 1256 <li class="navPage-childList-item"> 1257 <a class="navPage-childList-action navPages-action navPages-action-parentBold" 1258 href="https://militaryluggage.com/pouches/radio-pouches/" 1259 aria-label="Radio Pouches"> 1260 Radio Pouches 1261 </a> 1262 </li> 1263 1264 <li class="navPage-childList-item"> 1265 <a class="navPage-childList-action navPages-action navPages-action-parentBold" 1266 href="https://militaryluggage.com/pouches/medical-pouches/" 1267 aria-label="Medical Pouches"> 1268 Medical Pouches 1269 </a> 1270 </li> 1271 1272 <li class="navPage-childList-item"> 1273 <a class="navPage-childList-action navPages-action navPages-action-parentBold" 1274 href="https://militaryluggage.com/pouches/utility-pouches/" 1275 aria-label="Utility Pouches"> 1276 Utility Pouches 1277 </a> 1278 </li> 1279 1280 <li class="navPage-childList-item"> 1281 <a class="navPage-childList-action navPages-action navPages-action-parentBold" 1282 href="https://militaryluggage.com/pouches/admin-pouches/" 1283 aria-label="Admin Pouches"> 1284 Admin Pouches 1285 </a> 1286 </li> 1287 1288 1289 1290 1291 </ul> 1292 </li> 1293 1294 <li class="navPage-subMenu-item navPage-subMenu-col childless childless--overflow"> 1295 <ul class="navPage-childList navPage-childList--flat childless"> 1296 1297 1298 1299 1300 1301 1302 1303 <li class="navPage-childList-item"> 1304 <a class="navPage-childList-action navPages-action navPages-action-parentBold" 1305 href="https://militaryluggage.com/pouches/hydration-pouches/" 1306 aria-label="Hydration Pouches"> 1307 Hydration Pouches 1308 </a> 1309 </li> 1310 1311 <li class="navPage-childList-item"> 1312 <a class="navPage-childList-action navPages-action navPages-action-parentBold" 1313 href="https://militaryluggage.com/pouches/placards/" 1314 aria-label="Placards"> 1315 Placards 1316 </a> 1317 </li> 1318 1319 <li class="navPage-childList-item"> 1320 <a class="navPage-childList-action navPages-action navPages-action-parentBold" 1321 href="https://militaryluggage.com/pouches/pouch-accessories/" 1322 aria-label="Pouch Accessories"> 1323 Pouch Accessories 1324 </a> 1325 </li> 1326 1327 </ul> 1328 </li> 1329 1330 1331 1332 </ul> 1333</div> 1334 1335 </li> 1336 <li class="navPages-item"> 1337 <a class="navPages-action has-subMenu" 1338 href="https://militaryluggage.com/tactical-vests-plate-carriers/" 1339 data-collapsible="navPages-718"> 1340 Tactical Vests & Plate Carriers 1341 <i class="icon navPages-action-moreIcon" aria-hidden="true"> 1342 <svg><use href="#icon-chevron-down" /></svg> 1343 </i> 1344 </a> 1345 1346 1347<div class="navPage-subMenu" id="navPages-718" aria-hidden="true" tabindex="-1"> 1348 1349
1350 1351 1352 1353 1354 1355 1356 1357 1358 <ul class="navPage-subMenu-list"> 1359 1360 <li class="navPage-subMenu-item navPage-subMenu-col"> 1361 <a class="navPage-subMenu-action navPages-action navPages-action-parentBold" 1362 href="https://militaryluggage.com/tactical-vests-plate-carriers/" 1363 aria-label="All Tactical Vests & Plate Carriers"> 1364 All Tactical Vests & Plate Carriers 1365 1366 <span class="navPages-category-thumb"> 1367 <img class="navPages-category-image" 1368 src="https://cdn11.bigcommerce.com/s-3lem6ywgsw/images/stencil/300x300/s/bp4556_mcam_1500_1__23268_category.original.jpg" 1369 alt="Tactical Vests & Plate Carriers" 1370 loading="lazy"> 1371 </span> 1372 </a> 1373 </li> 1374 1375 1376 <li class="navPage-subMenu-item navPage-subMenu-col childless"> 1377 <ul class="navPage-childList navPage-childList--flat childless"> 1378 <li class="navPage-childList-item"> 1379 <a class="navPage-childList-action navPages-action navPages-action-parentBold" 1380 href="https://militaryluggage.com/tactical-vests-plate-carriers/tactical-vests/" 1381 aria-label="Tactical Vests"> 1382 Tactical Vests 1383 </a> 1384 </li> 1385 <li class="navPage-childList-item"> 1386 <a class="navPage-childList-action navPages-action navPages-action-parentBold" 1387 href="https://militaryluggage.com/tactical-vests-plate-carriers/plate-carrier-vest-kits-with-plates/" 1388 aria-label="Plate Carrier Kits with Plates"> 1389 Plate Carrier Kits with Plates 1390 </a> 1391 </li> 1392 <li class="navPage-childList-item"> 1393 <a class="navPage-childList-action navPages-action navPages-action-parentBold" 1394 href="https://militaryluggage.com/tactical-vests-plate-carriers/plate-carrier-vests/" 1395 aria-label="Plate Carriers"> 1396 Plate Carriers 1397 </a> 1398 </li> 1399 <li class="navPage-childList-item"> 1400 <a class="navPage-childList-action navPages-action navPages-action-parentBold" 1401 href="https://militaryluggage.com/tactical-vests-plate-carriers/chest-rigs/" 1402 aria-label="Chest Rigs"> 1403 Chest Rigs 1404 </a> 1405 </li> 1406 <li class="navPage-childList-item"> 1407 <a class="navPage-childList-action navPages-action navPages-action-parentBold" 1408 href="https://militaryluggage.com/tactical-vests-plate-carriers/vest-placards-panels/" 1409 aria-label="Vest Placards & Panels"> 1410 Vest Placards & Panels 1411 </a> 1412 </li> 1413 <li class="navPage-childList-item"> 1414 <a class="navPage-childList-action navPages-action navPages-action-parentBold" 1415 href="https://militaryluggage.com/tactical-vests-plate-carriers/tactical-vest-plate-carrier-accessories/" 1416 aria-label="Tactical Vest & Plate Carrier Accessories"> 1417 Tactical Vest & Plate Carrier Accessories 1418 </a> 1419 </li> 1420 </ul> 1421 </li> 1422 1423 1424 1425 </ul> 1426</div> 1427 1428 </li> 1429 <li class="navPages-item"> 1430 <a class="navPages-action has-subMenu" 1431 href="https://militaryluggage.com/gear/" 1432 data-collapsible="navPages-719"> 1433 Gear 1434 <i class="icon navPages-action-moreIcon" aria-hidden="true"> 1435 <svg><use href="#icon-chevron-down" /></svg> 1436 </i> 1437 </a> 1438 1439 1440<div class="navPage-subMenu" id="navPages-719" aria-hidden="true" tabindex="-1"> 1441 1442 1443 1444 1445 1446 1447 1448 1449 <ul class="navPage-subMenu-list"> 1450 1451 <li class="navPage-subMenu-item navPage-subMenu-col"> 1452 <a class="navPage-subMenu-action navPages-action navPages-action-parentBold" 1453 href="https://militaryluggage.com/gear/" 1454 aria-label="All Gear"> 1455 All Gear 1456
1457 <span class="navPages-category-thumb"> 1458 <img class="navPages-category-image" 1459 src="https://cdn11.bigcommerce.com/s-3lem6ywgsw/images/stencil/300x300/z/te2784_mcam_1500_1__46009_category.original.jpg" 1460 alt="Gear" 1461 loading="lazy"> 1462 </span> 1463 </a> 1464 </li> 1465 1466 1467 <li class="navPage-subMenu-item navPage-subMenu-col childless"> 1468 <ul class="navPage-childList navPage-childList--flat childless"> 1469 </ul> 1470 </li> 1471 1472 1473 <li class="navPage-subMenu-item navPage-subMenu-col"> 1474 <a class="navPage-subMenu-action navPages-action navPages-action-parentBold has-subMenu" 1475 href="https://militaryluggage.com/gear/belts/" 1476 aria-label="Belts" 1477 data-collapsible="navPages-753" 1478 data-collapsible-disabled-breakpoint="medium" 1479 data-collapsible-disabled-state="open" 1480 data-collapsible-enabled-state="closed"> 1481 Belts 1482 <span class="collapsible-icon-wrapper"> 1483 <i class="icon navPages-action-moreIcon" aria-hidden="true"> 1484 <svg><use href="#icon-chevron-down" /></svg> 1485 </i> 1486 </span> 1487 </a> 1488 1489 <ul class="navPage-childList" id="navPages-753"> 1490 <li class="navPage-childList-item mobile-only"> 1491 <a class="navPage-childList-action navPages-action" 1492 href="https://militaryluggage.com/gear/belts/" 1493 aria-label="Belts"> 1494 All Belts 1495 </a> 1496 </li> 1497 1498 <li class="navPage-childList-item"> 1499 <a class="navPage-childList-action navPages-action" 1500 href="https://militaryluggage.com/gear/belts/duty-belts/" 1501 aria-label="Duty Belts"> 1502 Duty Belts 1503 </a> 1504 </li> 1505 <li class="navPage-childList-item"> 1506 <a class="navPage-childList-action navPages-action" 1507 href="https://militaryluggage.com/gear/belts/battle-belts/" 1508 aria-label="Battle Belts"> 1509 Battle Belts 1510 </a> 1511 </li> 1512 </ul> 1513 </li> 1514 <li class="navPage-subMenu-item navPage-subMenu-col"> 1515 <a class="navPage-subMenu-action navPages-action navPages-action-parentBold has-subMenu" 1516 href="https://militaryluggage.com/gear/molle-gear/" 1517 aria-label="MOLLE Gear" 1518 data-collapsible="navPages-754" 1519 data-collapsible-disabled-breakpoint="medium" 1520 data-collapsible-disabled-state="open" 1521 data-collapsible-enabled-state="closed"> 1522 MOLLE Gear 1523 <span class="collapsible-icon-wrapper"> 1524 <i class="icon navPages-action-moreIcon" aria-hidden="true"> 1525 <svg><use href="#icon-chevron-down" /></svg> 1526 </i> 1527 </span> 1528 </a> 1529 1530 <ul class="navPage-childList" id="navPages-754"> 1531 <li class="navPage-childList-item mobile-only"> 1532 <a class="navPage-childList-action navPages-action" 1533 href="https://militaryluggage.com/gear/molle-gear/" 1534 aria-label="MOLLE Gear"> 1535 All MOLLE Gear 1536 </a> 1537 </li> 1538 1539 <li class="navPage-childList-item"> 1540 <a class="navPage-childList-action navPages-action" 1541 href="https://militaryluggage.com/gear/molle-gear/molle-backpacks/" 1542 aria-label="MOLLE Backpacks"> 1543 MOLLE Backpacks 1544 </a> 1545 </li> 1546 <li class="navPage-childList-item"> 1547 <a class="navPage-childList-action navPages-action" 1548 href="https://militaryluggage.com/gear/molle-gear/molle-bags/" 1549 aria-label="MOLLE Bags"> 1550 MOLLE Bags 1551 </a> 1552 </li> 1553 <li class="navPage-childList-item"> 1554 <a class="navPage-childList-action navPages-action" 1555 href="https://militaryluggage.com/gear/molle-gear/molle-pouches/" 1556 aria-label="MOLLE Pouches"> 1557 MOLLE Pouches 1558 </a> 1559 </li> 1560 <li class="navPage-childList-item"> 1561 <a class="navPage-childList-action navPages-action" 1562 href="https://militaryluggage.com/gear/molle-gear/molle-vests/" 1563 aria-label="MOLLE Vests"> 1564 MOLLE Vests 1565 </a> 1566 </li> 1567 <li class="navPage-childList-item"> 1568 <a class="navPage-childList-action navPages-action" 1569 href="https://militaryluggage.com/gear/molle-gear/molle-belts/" 1570 aria-label="MOLLE Belts"> 1571 MOLLE Belts 1572 </a> 1573 </li> 1574 </ul> 1575 </li> 1576 <li class="navPage-subMenu-item navPage-subMenu-col"> 1577 <a class="navPage-subMenu-action navPages-action navPages-action-parentBold has-subMenu" 1578 href="https://militaryluggage.com/gear/notebooks-writing/" 1579 aria-label="Notebooks & Writing" 1580 data-collapsible="navPages-755" 1581 data-collapsible-disabled-breakpoint="medium" 1582 data-collapsible-disabled-state="open" 1583 data-collapsible-enabled-state="closed"> 1584 Notebooks & Writing
1585 <span class="collapsible-icon-wrapper"> 1586 <i class="icon navPages-action-moreIcon" aria-hidden="true"> 1587 <svg><use href="#icon-chevron-down" /></svg> 1588 </i> 1589 </span> 1590 </a> 1591 1592 <ul class="navPage-childList" id="navPages-755"> 1593 <li class="navPage-childList-item mobile-only"> 1594 <a class="navPage-childList-action navPages-action" 1595 href="https://militaryluggage.com/gear/notebooks-writing/" 1596 aria-label="Notebooks & Writing"> 1597 All Notebooks & Writing 1598 </a> 1599 </li> 1600 1601 <li class="navPage-childList-item"> 1602 <a class="navPage-childList-action navPages-action" 1603 href="https://militaryluggage.com/gear/notebooks-writing/field-notebooks/" 1604 aria-label="Field Notebooks"> 1605 Field Notebooks 1606 </a> 1607 </li> 1608 <li class="navPage-childList-item"> 1609 <a class="navPage-childList-action navPages-action" 1610 href="https://militaryluggage.com/gear/notebooks-writing/field-covers/" 1611 aria-label="Field Covers"> 1612 Field Covers 1613 </a> 1614 </li> 1615 </ul> 1616 </li> 1617 <li class="navPage-subMenu-item navPage-subMenu-col"> 1618 <a class="navPage-subMenu-action navPages-action navPages-action-parentBold has-subMenu" 1619 href="https://militaryluggage.com/gear/accessories/" 1620 aria-label="Accessories" 1621 data-collapsible="navPages-756" 1622 data-collapsible-disabled-breakpoint="medium" 1623 data-collapsible-disabled-state="open" 1624 data-collapsible-enabled-state="closed"> 1625 Accessories 1626 <span class="collapsible-icon-wrapper"> 1627 <i class="icon navPages-action-moreIcon" aria-hidden="true"> 1628 <svg><use href="#icon-chevron-down" /></svg> 1629 </i> 1630 </span> 1631 </a> 1632 1633 <ul class="navPage-childList" id="navPages-756"> 1634 <li class="navPage-childList-item mobile-only"> 1635 <a class="navPage-childList-action navPages-action" 1636 href="https://militaryluggage.com/gear/accessories/" 1637 aria-label="Accessories"> 1638 All Accessories 1639 </a> 1640 </li> 1641 1642 <li class="navPage-childList-item"> 1643 <a class="navPage-childList-action navPages-action" 1644 href="https://militaryluggage.com/gear/accessories/wallets-id-holders/" 1645 aria-label="Wallets & ID Holders"> 1646 Wallets & ID Holders 1647 </a> 1648 </li> 1649 <li class="navPage-childList-item"> 1650 <a class="navPage-childList-action navPages-action" 1651 href="https://militaryluggage.com/gear/accessories/for-the-home/" 1652 aria-label="For The Home"> 1653 For The Home 1654 </a> 1655 </li> 1656 </ul> 1657 </li> 1658 1659 </ul> 1660</div> 1661 1662 </li> 1663 <li class="navPages-item"> 1664 <a class="navPages-action has-subMenu" 1665 href="https://militaryluggage.com/boots-footwear/" 1666 data-collapsible="navPages-713"> 1667 Boots & Footwear 1668 <i class="icon navPages-action-moreIcon" aria-hidden="true"> 1669 <svg><use href="#icon-chevron-down" /></svg> 1670 </i> 1671 </a> 1672 1673 1674<div class="navPage-subMenu" id="navPages-713" aria-hidden="true" tabindex="-1"> 1675 1676 1677 1678 1679 1680 1681 <ul class="navPage-subMenu-list"> 1682 1683 <li class="navPage-subMenu-item navPage-subMenu-col"> 1684 <a class="navPage-subMenu-action navPages-action navPages-action-parentBold" 1685 href="https://militaryluggage.com/boots-footwear/" 1686 aria-label="All Boots & Footwear"> 1687 All Boots & Footwear 1688 1689 <span class="navPages-category-thumb"> 1690 <img class="navPages-category-image" 1691 src="https://cdn11.bigcommerce.com/s-3lem6ywgsw/images/stencil/300x300/t/uspt_ft1411_1500_1__34309_category.original.jpg" 1692 alt="Boots & Footwear" 1693 loading="lazy"> 1694 </span> 1695 </a> 1696 </li> 1697 1698 1699 <li class="navPage-subMenu-item navPage-subMenu-col childless"> 1700 <ul class="navPage-childList navPage-childList--flat childless"> 1701 </ul> 1702 </li> 1703 1704 1705 <li class="navPage-subMenu-item navPage-subMenu-col"> 1706 <a class="navPage-subMenu-action navPages-action navPages-action-parentBold has-subMenu" 1707 href="https://militaryluggage.com/boots-footwear/military-boots/" 1708 aria-label="Military Boots" 1709 data-collapsible="navPages-720" 1710 data-collapsible-disabled-breakpoint="medium" 1711 data-collapsible-disabled-state="open" 1712 data-collapsible-enabled-state="closed"> 1713 Military Boots
1714 <span class="collapsible-icon-wrapper"> 1715 <i class="icon navPages-action-moreIcon" aria-hidden="true"> 1716 <svg><use href="#icon-chevron-down" /></svg> 1717 </i> 1718 </span> 1719 </a> 1720 1721 <ul class="navPage-childList" id="navPages-720"> 1722 <li class="navPage-childList-item mobile-only"> 1723 <a class="navPage-childList-action navPages-action" 1724 href="https://militaryluggage.com/boots-footwear/military-boots/" 1725 aria-label="Military Boots"> 1726 All Military Boots 1727 </a> 1728 </li> 1729 1730 <li class="navPage-childList-item"> 1731 <a class="navPage-childList-action navPages-action" 1732 href="https://militaryluggage.com/boots-footwear/military-boots/army-authorized-ar-670-1-boots/" 1733 aria-label="Army Authorized AR 670-1 Boots"> 1734 Army Authorized AR 670-1 Boots 1735 </a> 1736 </li> 1737 <li class="navPage-childList-item"> 1738 <a class="navPage-childList-action navPages-action" 1739 href="https://militaryluggage.com/boots-footwear/military-boots/air-force-authorized-afi-36-2903-boots/" 1740 aria-label="Air Force Authorized AFI 36-2903 Boots"> 1741 Air Force Authorized AFI 36-2903 Boots 1742 </a> 1743 </li> 1744 <li class="navPage-childList-item"> 1745 <a class="navPage-childList-action navPages-action" 1746 href="https://militaryluggage.com/boots-footwear/military-boots/u-s-marine-corps-authorized-ega-boots/" 1747 aria-label="U.S. Marine Corps Authorized EGA Boots"> 1748 U.S. Marine Corps Authorized EGA Boots 1749 </a> 1750 </li> 1751 <li class="navPage-childList-item"> 1752 <a class="navPage-childList-action navPages-action" 1753 href="https://militaryluggage.com/boots-footwear/military-boots/navy-nwu-type-iii-authorized-boots/" 1754 aria-label="Navy NWU Type III Authorized Boots"> 1755 Navy NWU Type III Authorized Boots 1756 </a> 1757 </li> 1758 </ul> 1759 </li> 1760 <li class="navPage-subMenu-item navPage-subMenu-col"> 1761 <a class="navPage-subMenu-action navPages-action navPages-action-parentBold has-subMenu" 1762 href="https://militaryluggage.com/boots-footwear/tactical-boots/" 1763 aria-label="Tactical Boots" 1764 data-collapsible="navPages-785" 1765 data-collapsible-disabled-breakpoint="medium" 1766 data-collapsible-disabled-state="open" 1767 data-collapsible-enabled-state="closed"> 1768 Tactical Boots 1769 <span class="collapsible-icon-wrapper"> 1770 <i class="icon navPages-action-moreIcon" aria-hidden="true"> 1771 <svg><use href="#icon-chevron-down" /></svg> 1772 </i> 1773 </span> 1774 </a> 1775 1776 <ul class="navPage-childList" id="navPages-785"> 1777 <li class="navPage-childList-item mobile-only"> 1778 <a class="navPage-childList-action navPages-action" 1779 href="https://militaryluggage.com/boots-footwear/tactical-boots/" 1780 aria-label="Tactical Boots"> 1781 All Tactical Boots 1782 </a> 1783 </li> 1784 1785 <li class="navPage-childList-item"> 1786 <a class="navPage-childList-action navPages-action" 1787 href="https://militaryluggage.com/boots-footwear/tactical-boots/duty-boots/" 1788 aria-label="Men's Tactical Boots"> 1789 Men's Tactical Boots 1790 </a> 1791 </li> 1792 <li class="navPage-childList-item"> 1793 <a class="navPage-childList-action navPages-action" 1794 href="https://militaryluggage.com/boots-footwear/tactical-boots/womens-tactical-boots/" 1795 aria-label="Women's Tactical Boots"> 1796 Women's Tactical Boots 1797 </a> 1798 </li> 1799 </ul> 1800 </li> 1801 1802 </ul> 1803</div> 1804 1805 </li> 1806 <li class="navPages-item"> 1807 <a class="navPages-action has-subMenu" 1808 href="https://militaryluggage.com/military-uniforms/" 1809 data-collapsible="navPages-721"> 1810 Military Uniforms 1811 <i class="icon navPages-action-moreIcon" aria-hidden="true"> 1812 <svg><use href="#icon-chevron-down" /></svg> 1813 </i> 1814 </a> 1815 1816 1817<div class="navPage-subMenu" id="navPages-721" aria-hidden="true" tabindex="-1"> 1818 1819
1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 <ul class="navPage-subMenu-list"> 1830 1831 <li class="navPage-subMenu-item navPage-subMenu-col"> 1832 <a class="navPage-subMenu-action navPages-action navPages-action-parentBold" 1833 href="https://militaryluggage.com/military-uniforms/" 1834 aria-label="All Military Uniforms"> 1835 All Military Uniforms 1836 1837 <span class="navPages-category-thumb"> 1838 <img class="navPages-category-image" 1839 src="https://cdn11.bigcommerce.com/s-3lem6ywgsw/images/stencil/300x300/b/sh3784_ocp_1500_1__16050_category.original.jpg" 1840 alt="Military Uniforms" 1841 loading="lazy"> 1842 </span> 1843 </a> 1844 </li> 1845 1846 1847 <li class="navPage-subMenu-item navPage-subMenu-col childless"> 1848 <ul class="navPage-childList navPage-childList--flat childless"> 1849 <li class="navPage-childList-item"> 1850 <a class="navPage-childList-action navPages-action navPages-action-parentBold" 1851 href="https://militaryluggage.com/military-uniforms/ocp-uniform-tops/" 1852 aria-label="OCP Uniform Tops"> 1853 OCP Uniform Tops 1854 </a> 1855 </li> 1856 <li class="navPage-childList-item"> 1857 <a class="navPage-childList-action navPages-action navPages-action-parentBold" 1858 href="https://militaryluggage.com/military-uniforms/ocp-uniform-pants/" 1859 aria-label="OCP Uniform Pants"> 1860 OCP Uniform Pants 1861 </a> 1862 </li> 1863 <li class="navPage-childList-item"> 1864 <a class="navPage-childList-action navPages-action navPages-action-parentBold" 1865 href="https://militaryluggage.com/military-uniforms/ocp-jackets/" 1866 aria-label="OCP Jackets"> 1867 OCP Jackets 1868 </a> 1869 </li> 1870 <li class="navPage-childList-item"> 1871 <a class="navPage-childList-action navPages-action navPages-action-parentBold" 1872 href="https://militaryluggage.com/military-uniforms/ocp-combat-shirts/" 1873 aria-label="OCP Combat Shirts"> 1874 OCP Combat Shirts 1875 </a> 1876 </li> 1877 <li class="navPage-childList-item"> 1878 <a class="navPage-childList-action navPages-action navPages-action-parentBold" 1879 href="https://militaryluggage.com/military-uniforms/ocp-combat-pants/" 1880 aria-label="OCP Combat Pants"> 1881 OCP Combat Pants 1882 </a> 1883 </li> 1884 <li class="navPage-childList-item"> 1885 <a class="navPage-childList-action navPages-action navPages-action-parentBold" 1886 href="https://militaryluggage.com/military-uniforms/military-headwear/" 1887 aria-label="Military Headwear"> 1888 Military Headwear 1889 </a> 1890 </li> 1891 </ul> 1892 </li> 1893 1894 1895 <li class="navPage-subMenu-item navPage-subMenu-col"> 1896 <a class="navPage-subMenu-action navPages-action navPages-action-parentBold has-subMenu" 1897 href="https://militaryluggage.com/military-uniforms/military-basics-base-layers/" 1898 aria-label="Military Basics & Base Layers" 1899 data-collapsible="navPages-762" 1900 data-collapsible-disabled-breakpoint="medium" 1901 data-collapsible-disabled-state="open" 1902 data-collapsible-enabled-state="closed"> 1903 Military Basics & Base Layers 1904 <span class="collapsible-icon-wrapper"> 1905 <i class="icon navPages-action-moreIcon" aria-hidden="true"> 1906 <svg><use href="#icon-chevron-down" /></svg> 1907 </i> 1908 </span> 1909 </a> 1910 1911 <ul class="navPage-childList" id="navPages-762"> 1912 <li class="navPage-childList-item mobile-only"> 1913 <a class="navPage-childList-action navPages-action" 1914 href="https://militaryluggage.com/military-uniforms/military-basics-base-layers/" 1915 aria-label="Military Basics & Base Layers"> 1916 All Military Basics & Base Layers 1917 </a> 1918 </li> 1919 1920 <li class="navPage-childList-item"> 1921 <a class="navPage-childList-action navPages-action" 1922 href="https://militaryluggage.com/military-uniforms/military-basics-base-layers/military-base-layers/" 1923 aria-label="Military Base Layers"> 1924 Military Base Layers 1925 </a> 1926 </li> 1927 <li class="navPage-childList-item"> 1928 <a class="navPage-childList-action navPages-action" 1929 href="https://militaryluggage.com/military-uniforms/military-basics-base-layers/military-uniform-t-shirts/" 1930 aria-label="Military Uniform T-Shirts"> 1931 Military Uniform T-Shirts 1932 </a> 1933 </li> 1934 <li class="navPage-childList-item"> 1935 <a class="navPage-childList-action navPages-action" 1936 href="https://militaryluggage.com/military-uniforms/military-basics-base-layers/military-socks/" 1937 aria-label="Military Socks"> 1938 Military Socks 1939 </a> 1940 </li> 1941 </ul> 1942 </li> 1943 1944 </ul> 1945</div> 1946 1947 </li> 1948 <li class="navPages-item"> 1949 <a class="navPages-action has-subMenu" 1950 href="https://militaryluggage.com/deals/" 1951 data-collapsible="navPages-400"> 1952 Deals 1953 <i class="icon navPages-action-moreIcon" aria-hidden="true"> 1954 <svg><use href="#icon-chevron-down" /></svg> 1955 </i> 1956 </a> 1957 1958 1959<div class="navPage-subMenu" id="navPages-400" aria-hidden="true" tabindex="-1"> 1960 1961
1962 1963 1964 1965 1966 <ul class="navPage-subMenu-list"> 1967 1968 <li class="navPage-subMenu-item navPage-subMenu-col"> 1969 <a class="navPage-subMenu-action navPages-action navPages-action-parentBold" 1970 href="https://militaryluggage.com/deals/" 1971 aria-label="All Deals"> 1972 All Deals 1973 1974 </a> 1975 </li> 1976 1977 1978 <li class="navPage-subMenu-item navPage-subMenu-col childless"> 1979 <ul class="navPage-childList navPage-childList--flat childless"> 1980 <li class="navPage-childList-item"> 1981 <a class="navPage-childList-action navPages-action navPages-action-parentBold" 1982 href="https://militaryluggage.com/deals/clearance/" 1983 aria-label="Clearance"> 1984 Clearance 1985 </a> 1986 </li> 1987 <li class="navPage-childList-item"> 1988 <a class="navPage-childList-action navPages-action navPages-action-parentBold" 1989 href="https://militaryluggage.com/deals/sale/" 1990 aria-label="Sale"> 1991 Sale 1992 </a> 1993 </li> 1994 </ul> 1995 </li> 1996 1997 1998 1999 </ul> 2000</div> 2001 2002 </li> 2003 </ul> 2004 2005</nav> 2006 2007 </div> 2008 <div data-content-region="header_navigation_bottom--global"></div> 2009</header> 2010 2011<div data-content-region="header_bottom--global"><div data-layout-id="30d4a600-0391-44ad-97d5-da4162b06d64"> <div data-widget-id="f307deb6-2c40-49ca-a6bc-69b0984caa26" data-placement-id="9f3fe355-85c8-4917-8769-049a65268565" data-placement-status="ACTIVE"><!-- 2012 WARNING: Modifying this file directly will cause it to be out of sync with Algolia 2013 Any changes made to this file will be lost when the app is uninstalled or Autocomplete is disabled 2014 2015 version 1.11 2016 2017 ALGOLIA AUTOCOMPLETE START 2018-->
2019<script type="module"> 2020 function addScriptToHead(src) { 2021 return new Promise((resolve, reject) => { 2022 const scriptElement = document.createElement('script') 2023 scriptElement.src = src 2024 scriptElement.crossOrigin = 'anonymous' 2025 scriptElement.onload = resolve 2026 scriptElement.onerror = reject 2027 document.head.appendChild(scriptElement) 2028 }) 2029 } 2030 2031 function addLinkToHead(href) { 2032 return new Promise((resolve, reject) => { 2033 const linkElement = document.createElement('link') 2034 linkElement.rel = 'stylesheet' 2035 linkElement.href = href 2036 linkElement.crossOrigin = 'anonymous' 2037 linkElement.onload = resolve 2038 linkElement.onerror = reject 2039 document.head.appendChild(linkElement) 2040 }) 2041 } 2042 2043 async function loadScripts() { 2044 await Promise.all([ 2045 addLinkToHead('https://cdn.jsdelivr.net/npm/@algolia/autocomplete-theme-classic'), 2046 addScriptToHead( 2047 'https://cdn.jsdelivr.net/npm/[email protected]/dist/algoliasearch-lite.umd.js' 2048 ), 2049 addScriptToHead('https://cdn.jsdelivr.net/npm/@algolia/[email protected]'), 2050 ]) 2051 } 2052 2053 function loadScriptWithCode(code) { 2054 return new Promise((resolve, reject) => { 2055 try { 2056 const scriptElement = document.createElement('script') 2057 scriptElement.textContent = code 2058 document.head.appendChild(scriptElement) 2059 document.head.removeChild(scriptElement) 2060 2061 resolve() 2062 } catch (error) { 2063 reject(error) 2064 } 2065 }) 2066 } 2067 2068 async function algoliaAutocompleteHooks() { 2069 if (algoliaAutocompleteConfig.hooks_has_initialize) { 2070 return; 2071 } 2072 2073 algoliaAutocompleteConfig.hooks_has_initialize = true; 2074 algoliaAutocompleteConfig.hooks = algoliaAutocompleteConfig.hooks || {}; 2075 algoliaAutocompleteConfig.hooks.allowedHooks = [ 2076 'autocompleteInitOptions', 2077 'autocompleteResultTemplate' 2078 ]; 2079 algoliaAutocompleteConfig.hooks.registeredHooks = []; 2080 algoliaAutocompleteConfig.hooks.registerHook = (hookName, callback) => { 2081 2082 if (algoliaAutocompleteConfig.hooks.allowedHooks.indexOf(hookName) === -1) { 2083 console.error( 2084 `Hook "${hookName}" cannot be defined. Please use one of ${algoliaAutocompleteConfig.hooks.allowedHooks.join( 2085 ', ' 2086 )}` 2087 ); 2088 } 2089 2090 if (!algoliaAutocompleteConfig.hooks.registeredHooks[hookName]) { 2091 algoliaAutocompleteConfig.hooks.registeredHooks[hookName] = [callback]; 2092 } else { 2093 algoliaAutocompleteConfig.hooks.registeredHooks[hookName].push(callback); 2094 } 2095 }; 2096 2097 algoliaAutocompleteConfig.hooks.getRegisteredHooks = hookName => { 2098 if (algoliaAutocompleteConfig.hooks.allowedHooks.indexOf(hookName) === -1) { 2099 console.error( 2100 `Hook "${hookName}" cannot be defined. Please use one of ${algoliaAutocompleteConfig.hooks.allowedHooks.join( 2101 ', ' 2102 )}` 2103 ); 2104 } 2105 if (!algoliaAutocompleteConfig.hooks.registeredHooks[hookName]) { 2106 return []; 2107 } 2108 return algoliaAutocompleteConfig.hooks.registeredHooks[hookName]; 2109 }; 2110 2111 algoliaAutocompleteConfig.hooks.triggerHooks = (hookName, originalData, ...hookArguments) => { 2112 try { 2113 const hooks = algoliaAutocompleteConfig.hooks.getRegisteredHooks(hookName); 2114 return hooks.reduce((currentData, hook) => { 2115 const normalizedData = Array.isArray(currentData) 2116 ? currentData 2117 : [currentData]; 2118 const allParameters = [...normalizedData, ...hookArguments]; 2119 return hook(originalData, ...hookArguments, allParameters); 2120 }, originalData); 2121 } catch (error) { 2122 console.error(`Error occurred in ${hookName}:`, error); 2123 return originalData; 2124 } 2125 }; 2126 2127 const afterInit = new Event('algoliaAutocompleteConfig.hooks.initialize'); 2128 document.dispatchEvent(afterInit); 2129 }; 2130 2131 await algoliaAutocompleteHooks(); 2132 await loadScripts() 2133 2134 const styleElement = document.createElement('style') 2135 styleElement.textContent = `${algoliaAutocompleteConfig.css}` 2136 document.head.appendChild(styleElement) 2137 2138 let isAutocompleteCookiesEnabled = false 2139 const isAutocompleteCookieUsageAllowed = () => { 2140 const cookiesArray = document.cookie.split('; ') 2141 for (let i = 0; i < cookiesArray.length; i++) { 2142 const cookie = cookiesArray[i].split('=') 2143 if (cookie[0] === 'bc_consent') { 2144 const bcConsent = JSON.parse(decodeURIComponent(cookie[1])) 2145 // 2 - Functional 3 - Analytics 4 - Targeting; Advertising 2146 if (('consent', bcConsent.allow.includes(3))) { 2147 return true 2148 } 2149 } 2150 } 2151 2152 return false 2153 } 2154 2155 const addAutocompleteCookieUsage = () => { 2156 isAutocompleteCookiesEnabled = true 2157 aa('init', { 2158 useCookie: true, 2159 partial: true, 2160 }) 2161 aa('addAlgoliaAgent', 'BigCommerce Integration') 2162 } 2163 2164 await loadScriptWithCode(algoliaAutocompleteConfig.javascript) 2165 2166 if ( 2167 algoliaAutocompleteConfig.isInsightsEnabled && 2168 algoliaAutocompleteConfig.insightsUseCookies && 2169 typeof aa !== 'undefined' && 2170 isAutocompleteCookieUsageAllowed() 2171 ) { 2172 addAutocompleteCookieUsage() 2173 } 2174 2175 setInterval(() => { 2176 const cookiesArray = document.cookie.split('; ') 2177 for (let i = 0; i < cookiesArray.length; i++) { 2178 const cookie = cookiesArray[i].split('=') 2179 if (cookie[0] === 'bc_consent') { 2180 const bcConsent = JSON.parse(decodeURIComponent(cookie[1])) 2181 // 2 - Functional 3 - Analytics 4 - Targeting; Advertising 2182 if ( 2183 bcConsent.allow.includes(3) && 2184 !isAutocompleteCookiesEnabled && 2185 algoliaAutocompleteConfig.isInsightsEnabled && 2186 algoliaAutocompleteConfig.insightsUseCookies && 2187 typeof aa !== 'undefined' 2188 ) { 2189 addAutocompleteCookieUsage() 2190 } 2191 } 2192 } 2193 }, 10000) 2194 </script>
2194 2195<!-- ALGOLIA AUTOCOMPLETE END --> 2196 2197</div> 2198</div></div> 2199 2200<!--Announcement bar--> 2201<div class="promo-announcement-banner"> 2202 <div class="promo-announcement-carousel"> 2203 </div> 2204</div> 2205 2206<div class="banners" data-banner-location="top"> 2207 <div class="banner" data-event-type="promotion" data-entity-id="23" data-name="Home Page - 122625" data-position="top" data-banner-id="Home Page - 122625"> 2208 <div data-event-type="promotion-click"> 2209 <div class="hero"> 2210<div class="hero-bg"><img class="hero-img" src="https://cdn11.bigcommerce.com/s-3lem6ywgsw/images/stencil/original/image-manager/020326-hero-desktop-1.jpg?t=1770213457" alt="New Year. Same Us" /> <img class="hero-img-mobile" src="https://cdn11.bigcommerce.com/s-3lem6ywgsw/images/stencil/original/image-manager/020326-hero-mobile-1.jpg?t=1770213458" alt="New year. New us" /></div> 2211<div class="hero-content"> 2212<div class="hero-card left"> 2213<p class="hero-subtitle" style="background: #bdb37a; padding: 8px 10px; font-weight: bold; color: #ffffff;">GEAR UP FOR EVERY MISSION</p> 2214<h1 class="hero-title">Durable Packs, Bags, & More</h1> 2215<p class="hero-subtitle">Built for the toughest conditions.</p> 2216<div class="hero-actions"><a class="btn btn-primary" href="/bags-packs/">SHOP NOW</a> <a class="u-hidden btn btn-secondary" href="https://fireauthority.com/apparel-gear"> Shop By Job Role </a></div> 2217</div> 2218</div> 2219</div> 2220 </div> 2221 </div> 2222</div> 2223 2224 2225 2226<div data-content-region="header_bottom"></div> 2227 2228 <div class="body" role="main" id="main-content" data-currency-code="USD"> 2229 <div data-content-region="home_below_menu"></div> 2230 <div data-content-region="home_below_carousel"></div> 2231 2232 <div class="container"> 2233 2234 2235 <!--Router > Homepage > Home--> 2236 <!--MLC Homepage > Home--> 2237<div class="main full"> 2238 <section class="shop-by-category" aria-labelledby="shopByCategory"> 2239 <div class="container"> 2240 <h2 class="h1" id="shopByCategory">Shop By Category</h2> 2241 2242 2243 <ul class="category-grid"> 2244 <li class="category-card"> 2245 <a href="/bags-packs"> 2246 <div class="img-wrap"> 2247 <img src="https://cdn11.bigcommerce.com/s-3lem6ywgsw/images/stencil/250x250/image-manager/shopp-by-category-bags-and-packs-1.jpg" 2248 alt="Bags & Packs" loading="lazy"> 2249 </div> 2250 <div class="text"> 2251 <span class="title h4">Bags & Packs</span> 2252 <span class="cta">SHOP <i class="fa-solid fa-chevron-right"></i></span> 2253 </div> 2254 </a> 2255 </li> 2256 <li class="category-card"> 2257 <a href="/tactical-vests-plate-carriers"> 2258 <div class="img-wrap"> 2259 <img src="https://cdn11.bigcommerce.com/s-3lem6ywgsw/images/stencil/250x250/image-manager/shop-by-category-molle-gear-1.jpg" 2260 alt="Molle Gear" loading="lazy"> 2261 </div> 2262 <div class="text"> 2263 <span class="title h4">Tactical Vests</span> 2264 <span class="cta">SHOP <i class="fa-solid fa-chevron-right"></i></span> 2265 </div> 2266 </a> 2267 </li> 2268 <li class="category-card"> 2269 <a href="/gear/belts"> 2270 <div class="img-wrap"> 2271 <img src="https://cdn11.bigcommerce.com/s-3lem6ywgsw/images/stencil/250x250/image-manager/shop-by-category-tactical-belts-1.jpg" 2272 alt="Tactical Belts" loading="lazy"> 2273 </div> 2274 <div class="text"> 2275 <span class="title h4">Tactical Belts</span> 2276 <span class="cta">SHOP <i class="fa-solid fa-chevron-right"></i></span> 2277 </div> 2278 </a> 2279 </li> 2280 <li class="category-card"> 2281 <a href="/tactical-vests-plate-carriers/plate-carrier-vests"> 2282 <div class="img-wrap"> 2283 <img src="https://cdn11.bigcommerce.com/s-3lem6ywgsw/images/stencil/250x250/image-manager/shop-by-category-vests-and-plate-carriers-1.jpg" 2284 alt="Plate Carriers" loading="lazy"> 2285 </div> 2286 <div class="text">
2287 <span class="title h4">Plate Carriers</span> 2288 <span class="cta">SHOP <i class="fa-solid fa-chevron-right"></i></span> 2289 </div> 2290 </a> 2291 </li> 2292 <li class="category-card"> 2293 <a href="/boots-footwear"> 2294 <div class="img-wrap"> 2295 <img src="https://cdn11.bigcommerce.com/s-3lem6ywgsw/images/stencil/250x250/image-manager/shop-by-category-boots-1.jpg" 2296 alt="Boots" loading="lazy"> 2297 </div> 2298 <div class="text"> 2299 <span class="title h4">Boots</span> 2300 <span class="cta">SHOP <i class="fa-solid fa-chevron-right"></i></span> 2301 </div> 2302 </a> 2303 </li> 2304 </ul> 2305 </div> 2306 </section> 2307 2308 <section class="arrivals" aria-labelledby="arrivals-title"> 2309 <div class="container"> 2310 <div class="section-text"> 2311 <span class="eyebrow">Shop By</span> 2312 <h2 class="h1" id="arrivals-title">Features</h2> 2313 </div> 2314 <div class="feature-filter"> 2315 <ul class="feature-list" role="group" aria-label="Filter by feature"> 2316 <li> 2317 <button type="button" class="feature-pill is-active" aria-pressed="true"> 2318 Water Resistant 2319 </button> 2320 </li> 2321 <li> 2322 <button type="button" class="feature-pill" aria-pressed="false"> 2323 Ventilated 2324 </button> 2325 </li> 2326 <li> 2327 <button type="button" class="feature-pill" aria-pressed="false"> 2328 Hydration Compatible 2329 </button> 2330 </li> 2331 <li> 2332 <button type="button" class="feature-pill" aria-pressed="false"> 2333 Hidden Pockets (CCW) 2334 </button> 2335 </li> 2336 <li> 2337 <button type="button" class="feature-pill" aria-pressed="false"> 2338 Adjustable Shoulder Strap 2339 </button> 2340 </li> 2341 <li> 2342 <button type="button" class="feature-pill" aria-pressed="false"> 2343 Abrasion Resistant 2344 </button> 2345 </li> 2346 </ul> 2347 </div> 2348 2349 <div id="skeleton-hits"> 2350 <div class="skeleton skeleton_hits"> 2351 <div class="skeleton_card"> 2352 <div class="skeleton_image"></div> 2353 <div class="skeleton_color_swatch_wrapper"> 2354 <div class="skeleton_color_swatch"></div> 2355 <div class="skeleton_color_swatch"></div> 2356 <div class="skeleton_color_swatch"></div> 2357 <div class="skeleton_color_swatch"></div> 2358 </div> 2359 <div class="skeleton_line short"></div> 2360 <div class="skeleton_line"></div> 2361 <div class="skeleton_line short"></div> 2362 </div> 2363 <div class="skeleton_card"> 2364 <div class="skeleton_image"></div> 2365 <div class="skeleton_color_swatch_wrapper"> 2366 <div class="skeleton_color_swatch"></div> 2367 <div class="skeleton_color_swatch"></div> 2368 <div class="skeleton_color_swatch"></div> 2369 <div class="skeleton_color_swatch"></div> 2370 </div> 2371 <div class="skeleton_line short"></div> 2372 <div class="skeleton_line"></div> 2373 <div class="skeleton_line short"></div> 2374 </div> 2375 <div class="skeleton_card"> 2376 <div class="skeleton_image"></div> 2377 <div class="skeleton_color_swatch_wrapper"> 2378 <div class="skeleton_color_swatch"></div> 2379 <div class="skeleton_color_swatch"></div> 2380 <div class="skeleton_color_swatch"></div> 2381 <div class="skeleton_color_swatch"></div> 2382 </div> 2383 <div class="skeleton_line short"></div> 2384 <div class="skeleton_line"></div> 2385 <div class="skeleton_line short"></div> 2386 </div> 2387 <div class="skeleton_card"> 2388 <div class="skeleton_image"></div> 2389 <div class="skeleton_color_swatch_wrapper"> 2390 <div class="skeleton_color_swatch"></div> 2391 <div class="skeleton_color_swatch"></div> 2392 <div class="skeleton_color_swatch"></div> 2393 <div class="skeleton_color_swatch"></div> 2394 </div> 2395 <div class="skeleton_line short"></div> 2396 <div class="skeleton_line"></div> 2397 <div class="skeleton_line short"></div> 2398 </div> 2399 <div class="skeleton_card"> 2400 <div class="skeleton_image"></div> 2401 <div class="skeleton_color_swatch_wrapper"> 2402 <div class="skeleton_color_swatch"></div> 2403 <div class="skeleton_color_swatch"></div> 2404 <div class="skeleton_color_swatch"></div> 2405 <div class="skeleton_color_swatch"></div> 2406 </div> 2407 <div class="skeleton_line short"></div> 2408 <div class="skeleton_line"></div> 2409 <div class="skeleton_line short"></div> 2410 </div> 2411 2412 </div> 2413 </div> 2414 2415 <div class="shop-features-products al-carousel" id="shop-features-products"> 2416 2417 </div> 2418 </div> 2419 </section> 2420 2421 <section class="education" aria-labelledby="edu-title"> 2422 <div class="container"> 2423 <div class="section-text">
2424 <span class="eyebrow">SHARING WHAT MATTERS</span> 2425 <div class="h1" id="edu-title">THE MLC BRIEFING</div> 2426 </div> 2427 2428 <ul class="items"> 2429 <li class="item"> 2430 <a href="https://militaryluggage.com/blog/how-to-use-military-discipline-in-everyday-life/"> 2431 <div class="card"> 2432 <div class="thumb"> 2433 <img src="https://cdn11.bigcommerce.com/s-3lem6ywgsw/images/stencil/160w/uploaded_images/military-disicpline.jpg" alt="How to Use Military Discipline in Everyday Life" title="How to Use Military Discipline in Everyday Life" data-sizes="auto" 2434 srcset="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==" 2435data-srcset="https://cdn11.bigcommerce.com/s-3lem6ywgsw/images/stencil/80w/uploaded_images/military-disicpline.jpg 80w, https://cdn11.bigcommerce.com/s-3lem6ywgsw/images/stencil/160w/uploaded_images/military-disicpline.jpg 160w, https://cdn11.bigcommerce.com/s-3lem6ywgsw/images/stencil/320w/uploaded_images/military-disicpline.jpg 320w, https://cdn11.bigcommerce.com/s-3lem6ywgsw/images/stencil/640w/uploaded_images/military-disicpline.jpg 640w, https://cdn11.bigcommerce.com/s-3lem6ywgsw/images/stencil/960w/uploaded_images/military-disicpline.jpg 960w, https://cdn11.bigcommerce.com/s-3lem6ywgsw/images/stencil/1280w/uploaded_images/military-disicpline.jpg 1280w, https://cdn11.bigcommerce.com/s-3lem6ywgsw/images/stencil/1920w/uploaded_images/military-disicpline.jpg 1920w, https://cdn11.bigcommerce.com/s-3lem6ywgsw/images/stencil/2560w/uploaded_images/military-disicpline.jpg 2560w" 2436 2437class="lazyload" 2438 2439 2440 /> 2441 </div> 2442 <div class="meta"> 2443 <div class="name">How to Use Military Discipline in Everyday Life</div> 2444 <span class="link">Read More <i class="fa-solid fa-chevron-right" 2445 aria-hidden="true"></i></span> 2446 </div> 2447 </div> 2448 </a> 2449 </li> 2450 <li class="item"> 2451 <a href="https://militaryluggage.com/blog/the-best-military-bags-for-civilians/"> 2452 <div class="card"> 2453 <div class="thumb"> 2454 <img src="https://cdn11.bigcommerce.com/s-3lem6ywgsw/images/stencil/160w/uploaded_images/best-military-bags-for-civilians.jpg" alt="The Best Military Bags for Civilians" title="The Best Military Bags for Civilians" data-sizes="auto" 2455 srcset="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==" 2456data-srcset="https://cdn11.bigcommerce.com/s-3lem6ywgsw/images/stencil/80w/uploaded_images/best-military-bags-for-civilians.jpg 80w, https://cdn11.bigcommerce.com/s-3lem6ywgsw/images/stencil/160w/uploaded_images/best-military-bags-for-civilians.jpg 160w, https://cdn11.bigcommerce.com/s-3lem6ywgsw/images/stencil/320w/uploaded_images/best-military-bags-for-civilians.jpg 320w, https://cdn11.bigcommerce.com/s-3lem6ywgsw/images/stencil/640w/uploaded_images/best-military-bags-for-civilians.jpg 640w, https://cdn11.bigcommerce.com/s-3lem6ywgsw/images/stencil/960w/uploaded_images/best-military-bags-for-civilians.jpg 960w, https://cdn11.bigcommerce.com/s-3lem6ywgsw/images/stencil/1280w/uploaded_images/best-military-bags-for-civilians.jpg 1280w, https://cdn11.bigcommerce.com/s-3lem6ywgsw/images/stencil/1920w/uploaded_images/best-military-bags-for-civilians.jpg 1920w, https://cdn11.bigcommerce.com/s-3lem6ywgsw/images/stencil/2560w/uploaded_images/best-military-bags-for-civilians.jpg 2560w" 2457 2458class="lazyload" 2459 2460 2461 /> 2462 </div> 2463 <div class="meta"> 2464 <div class="name">The Best Military Bags for Civilians</div> 2465 <span class="link">Read More <i class="fa-solid fa-chevron-right" 2466 aria-hidden="true"></i></span> 2467 </div> 2468 </div> 2469 </a> 2470 </li> 2471 <li class="item"> 2472 <a href="https://militaryluggage.com/blog/what-to-know-about-joining-the-military-later-in-life/"> 2473 <div class="card"> 2474 <div class="thumb"> 2475 <img src="https://cdn11.bigcommerce.com/s-3lem6ywgsw/images/stencil/160w/uploaded_images/what-to-know-about-joining-the-military-later-in-life.jpg" alt="What to Know About Joining the Military Later in Life" title="What to Know About Joining the Military Later in Life" data-sizes="auto" 2476 srcset="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==" 2477data-srcset="https://cdn11.bigcommerce.com/s-3lem6ywgsw/images/stencil/80w/uploaded_images/what-to-know-about-joining-the-military-later-in-life.jpg 80w, https://cdn11.bigcommerce.com/s-3lem6ywgsw/images/stencil/160w/uploaded_images/what-to-know-about-joining-the-military-later-in-life.jpg 160w, https://cdn11.bigcommerce.com/s-3lem6ywgsw/images/stencil/320w/uploaded_images/what-to-know-about-joining-the-military-later-in-life.jpg 320w, https://cdn11.bigcommerce.com/s-3lem6ywgsw/images/stencil/640w/uploaded_images/what-to-know-about-joining-the-military-later-in-life.jpg 640w, https://cdn11.bigcommerce.com/s-3lem6ywgsw/images/stencil/960w/uploaded_images/what-to-know-about-joining-the-military-later-in-life.jpg 960w, https://cdn11.bigcommerce.com/s-3lem6ywgsw/images/stencil/1280w/uploaded_images/what-to-know-about-joining-the-military-later-in-life.jpg 1280w, https://cdn11.bigcommerce.com/s-3lem6ywgsw/images/stencil/1920w/uploaded_images/what-to-know-about-joining-the-military-later-in-life.jpg 1920w, https://cdn11.bigcommerce.com/s-3lem6ywgsw/images/stencil/2560w/uploaded_images/what-to-know-about-joining-the-military-later-in-life.jpg 2560w" 2478 2479class="lazyload" 2480 2481 2482 /> 2483 </div> 2484 <div class="meta"> 2485 <div class="name">What to Know About Joining the Military Later in Life</div>
2486 <span class="link">Read More <i class="fa-solid fa-chevron-right" 2487 aria-hidden="true"></i></span> 2488 </div> 2489 </div> 2490 </a> 2491 </li> 2492 <li class="item"> 2493 <a href="https://militaryluggage.com/blog/how-to-decide-what-to-do-for-your-career-after-the-military/"> 2494 <div class="card"> 2495 <div class="thumb"> 2496 <img src="https://cdn11.bigcommerce.com/s-3lem6ywgsw/images/stencil/160w/uploaded_images/how-to-decide-what-to-do-for-your-career-after-the-military.jpg" alt="How to Decide What to Do for Your Career After the Military" title="How to Decide What to Do for Your Career After the Military" data-sizes="auto" 2497 srcset="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==" 2498data-srcset="https://cdn11.bigcommerce.com/s-3lem6ywgsw/images/stencil/80w/uploaded_images/how-to-decide-what-to-do-for-your-career-after-the-military.jpg 80w, https://cdn11.bigcommerce.com/s-3lem6ywgsw/images/stencil/160w/uploaded_images/how-to-decide-what-to-do-for-your-career-after-the-military.jpg 160w, https://cdn11.bigcommerce.com/s-3lem6ywgsw/images/stencil/320w/uploaded_images/how-to-decide-what-to-do-for-your-career-after-the-military.jpg 320w, https://cdn11.bigcommerce.com/s-3lem6ywgsw/images/stencil/640w/uploaded_images/how-to-decide-what-to-do-for-your-career-after-the-military.jpg 640w, https://cdn11.bigcommerce.com/s-3lem6ywgsw/images/stencil/960w/uploaded_images/how-to-decide-what-to-do-for-your-career-after-the-military.jpg 960w, https://cdn11.bigcommerce.com/s-3lem6ywgsw/images/stencil/1280w/uploaded_images/how-to-decide-what-to-do-for-your-career-after-the-military.jpg 1280w, https://cdn11.bigcommerce.com/s-3lem6ywgsw/images/stencil/1920w/uploaded_images/how-to-decide-what-to-do-for-your-career-after-the-military.jpg 1920w, https://cdn11.bigcommerce.com/s-3lem6ywgsw/images/stencil/2560w/uploaded_images/how-to-decide-what-to-do-for-your-career-after-the-military.jpg 2560w" 2499 2500class="lazyload" 2501 2502 2503 /> 2504 </div> 2505 <div class="meta"> 2506 <div class="name">How to Decide What to Do for Your Career After the Military</div> 2507 <span class="link">Read More <i class="fa-solid fa-chevron-right" 2508 aria-hidden="true"></i></span> 2509 </div> 2510 </div> 2511 </a> 2512 </li> 2513 <li class="item"> 2514 <a href="https://militaryluggage.com/blog/preparing-your-child-for-your-upcoming-pcs/"> 2515 <div class="card"> 2516 <div class="thumb"> 2517 <img src="https://cdn11.bigcommerce.com/s-3lem6ywgsw/images/stencil/160w/uploaded_images/preparing-your-child-for-your-upcoming-pcs.jpg" alt="Preparing Your Child for Your Upcoming PCS" title="Preparing Your Child for Your Upcoming PCS" data-sizes="auto" 2518 srcset="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==" 2519data-srcset="https://cdn11.bigcommerce.com/s-3lem6ywgsw/images/stencil/80w/uploaded_images/preparing-your-child-for-your-upcoming-pcs.jpg 80w, https://cdn11.bigcommerce.com/s-3lem6ywgsw/images/stencil/160w/uploaded_images/preparing-your-child-for-your-upcoming-pcs.jpg 160w, https://cdn11.bigcommerce.com/s-3lem6ywgsw/images/stencil/320w/uploaded_images/preparing-your-child-for-your-upcoming-pcs.jpg 320w, https://cdn11.bigcommerce.com/s-3lem6ywgsw/images/stencil/640w/uploaded_images/preparing-your-child-for-your-upcoming-pcs.jpg 640w, https://cdn11.bigcommerce.com/s-3lem6ywgsw/images/stencil/960w/uploaded_images/preparing-your-child-for-your-upcoming-pcs.jpg 960w, https://cdn11.bigcommerce.com/s-3lem6ywgsw/images/stencil/1280w/uploaded_images/preparing-your-child-for-your-upcoming-pcs.jpg 1280w, https://cdn11.bigcommerce.com/s-3lem6ywgsw/images/stencil/1920w/uploaded_images/preparing-your-child-for-your-upcoming-pcs.jpg 1920w, https://cdn11.bigcommerce.com/s-3lem6ywgsw/images/stencil/2560w/uploaded_images/preparing-your-child-for-your-upcoming-pcs.jpg 2560w" 2520 2521class="lazyload" 2522 2523 2524 /> 2525 </div> 2526 <div class="meta"> 2527 <div class="name">Preparing Your Child for Your Upcoming PCS</div>
2528 <span class="link">Read More <i class="fa-solid fa-chevron-right" 2529 aria-hidden="true"></i></span> 2530 </div> 2531 </div> 2532 </a> 2533 </li> 2534 </ul> 2535 </div> 2536 </section> 2537 2538 2539 2540 2541 <div data-content-region="home_below_featured_products"></div> 2542 2543 <div data-content-region="home_below_top_products"></div> 2544 2545 <div data-content-region="home_below_new_products"></div> 2546 2547 2548 <div class="fw our-mission"> 2549 <div 2550 style="background-image:url('https://cdn11.bigcommerce.com/s-3lem6ywgsw/images/stencil/original/image-manager/bg-mission.png');"> 2551 <div class="container"> 2552 <div class="inner-content"> 2553 <h3>Our Mission</h3> 2554 2555 <p>Here at Military Luggage Company, we focus on providing Service Members, Veterans, First 2556 Responders and their families tough, rugged and functional Tactical Gear.</p> 2557 2558 <p><em>We are as proud of what we donât sell as what we do sell.</em></p> 2559 </div> 2560 </div> 2561 </div> 2562 </div> 2563 2564</div> 2565 2566 </div> 2567 <div id="modal" class="modal" data-reveal data-prevent-quick-search-close> 2568 <button class="modal-close" 2569 type="button" 2570 title="Close" 2571 2572> 2573 <span class="aria-description--hidden">Close</span> 2574 <span aria-hidden="true">×</span> 2575</button> 2576 <div id="modal-content" class="modal-content"></div> 2577 <div class="loadingOverlay"></div> 2578</div> 2579 <div id="alert-modal" class="modal modal--alert modal--small" data-reveal data-prevent-quick-search-close> 2580 <div class="alert-icon error-icon"> 2581 <span class="icon-content"> 2582 <span class="line line-left"></span> 2583 <span class="line line-right"></span> 2584 </span> 2585 </div> 2586 2587 <div class="alert-icon warning-icon"> 2588 <div class="icon-content">!</div> 2589 </div> 2590 2591 <div class="modal-content"></div> 2592 2593 <div class="button-container"> 2594 <button type="button" class="confirm button" data-reveal-close>OK</button> 2595 <button type="button" class="cancel button" data-reveal-close>Cancel</button> 2596 </div> 2597</div> 2598</div> 2599 2600 <!--Router > Footer--> 2601 <!--MLC Footer--> 2602 2603<footer class="footer" role="contentinfo"> 2604 <div class="footer-title-sr-only">Footer Start</div> 2605 <div class="footer-signup"> 2606 <div class="container"> 2607 <div class="footer-signup-form"> 2608 2609 2610 <!--Features > Klaviyo > Footer Signup--> 2611<!--Note: Klaviyo CSS (_footer)-->
2612<script async type="text/javascript"> 2613 !function(){ 2614 if(!window.klaviyo){ 2615 window._klOnsite = window._klOnsite || []; 2616 window.klaviyo = new Proxy({}, { 2617 get: function(target, prop){ 2618 if(prop === 'push') { 2619 return function(){ 2620 window._klOnsite.push(arguments); 2621 } 2622 } 2623 return function(){ 2624 window._klOnsite.push([prop].concat(Array.prototype.slice.call(arguments))); 2625 } 2626 } 2627 }); 2628 var s = document.createElement('script'); 2629 s.async = true; 2630 s.src = 'https://static.klaviyo.com/onsite/js/klaviyo.js?company_id=UY48GE'; 2631 document.head.appendChild(s); 2632 } 2633 }(); 2634</script>
2634 2635<div class="klaviyo-form-YhMgtP"></div> 2636 </div> 2637 <div class="footerSignupSuccess h1" style="display: none;"></div> 2638 </div> 2639 </div> 2640 <div class="container"> 2641 <section class="footer-info"> 2642 <!--CONTACT US--> 2643 <article class="footer-info-col footer-info-col--small" data-section-type="footer-webPages"> 2644 <div class="footer-info-heading">CONTACT US</div> 2645 <ul class="footer-info-list"> 2646 <li> 2647 <a href="/contact-us">Contact</a> 2648 </li> 2649 <li> 2650 <a href="/shipping-information">Shipping & Returns Policy</a> 2651 </li> 2652 <li> 2653 <a href="/account.php?action=order_status">Order Status</a> 2654 </li> 2655 <li> 2656 <a href="/return-exchange">Returns</a> 2657 </li> 2658 </ul> 2659 </article> 2660 2661 <!--COMPANY INFORMATION--> 2662 <article class="footer-info-col footer-info-col--small" data-section-type="footer-webPages"> 2663 <div class="footer-info-heading">COMPANY INFORMATION</div> 2664 <ul class="footer-info-list"> 2665 <li> 2666 <a href="/about-us">About Us</a> 2667 </li> 2668 <li> 2669 <a href="/accessibility">Accessibility</a> 2670 </li> 2671 <li> 2672 <a href="/content/Galls-889-2025-dba-MLC.pdf">889 Form</a> 2673 </li> 2674 <li> 2675 <a href="/blog">The MLC Briefing</a> 2676 </li> 2677 <li> 2678 <a href="/privacy-policy">Privacy Policy</a> 2679 </li> 2680 <li> 2681 <a href="/terms">Terms of Use</a> 2682 </li> 2683 </ul> 2684 </article> 2685 2686 <!--STAY CONNECTED--> 2687 <article class="footer-info-col footer-info-col--small" data-section-type="footer-webPages"> 2688 <div class="footer-info-heading">STAY CONNECTED</div> 2689 <ul class="footer-info-list"> 2690 <li> 2691 <a href="https://www.facebook.com/militaryluggage/"> 2692 <img src="https://www.galls.com/photos/gar/images/homepage-refresh/galls/footer/facebook.png" class="footer-social-icon"> 2693 Facebook 2694 </a> 2695 </li> 2696 </ul> 2697 </article> 2698 2699 2700 </section> 2701 2702 <section class="footer-logo"> 2703 <img width="140" height="40" src="https://cdn11.bigcommerce.com/s-oa21m3mi3f/images/stencil/original/image-manager/ml-logo-footer.jpg" alt="military luggage logo" loading="lazy"> 2704 <p>Some exclusions and limitations apply</p> 2705 </section> 2706 <section class="footer-links"> 2707 <a href="https://militaryluggage.com/sitemap.php">Sitemap</a> 2708 <a href="/terms">Terms of Sale</a> 2709 </section> 2710 </div> 2711 <div data-content-region="ssl_site_seal--global"></div> 2712</footer> 2713 2714 <div class="scroll-to-top-button"> 2715 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960"><path d="M440-160v-487L216-423l-56-57 320-320 320 320-56 57-224-224v487h-80Z"></path></svg> 2716</div> 2717 2718
2718<script nonce="">window.__webpack_public_path__ = "https://cdn11.bigcommerce.com/s-3lem6ywgsw/stencil/ca2c5200-a308-013f-e7cf-5e53173c381a/e/8dd29750-b2b5-013e-f7a2-4ef3209772a9/dist/";</script>
2718 2719
2719<script nonce=""> 2720 function onThemeBundleMain() { 2721 window.stencilBootstrap("default", "{\"zoomSize\":\"1280x1280\",\"productSize\":\"500x659\",\"genericError\":\"Oops! Something went wrong.\",\"urls\":{\"home\":\"https://militaryluggage.com/\",\"brands\":\"https://militaryluggage.com/brands/\",\"search\":\"https://militaryluggage.com/search.php\",\"compare\":\"https://militaryluggage.com/compare\",\"sitemap\":\"https://militaryluggage.com/sitemap.php\",\"contact_us_submit\":\"https://militaryluggage.com/pages.php?action=sendContactForm\",\"subscribe\":{\"action\":\"https://militaryluggage.com/subscribe.php\"},\"checkout\":{\"single_address\":\"https://militaryluggage.com/checkout\",\"multiple_address\":\"https://militaryluggage.com/checkout.php?action=multiple\"},\"account\":{\"orders\":{\"all\":\"https://militaryluggage.com/account.php?action=order_status\",\"completed\":\"https://militaryluggage.com/account.php?action=view_orders\",\"save_new_return\":\"https://militaryluggage.com/account.php?action=save_new_return\"},\"returns\":\"https://militaryluggage.com/account.php?action=view_returns\",\"addresses\":\"https://militaryluggage.com/account.php?action=address_book\",\"inbox\":\"https://militaryluggage.com/account.php?action=inbox\",\"send_message\":\"https://militaryluggage.com/account.php?action=send_message\",\"add_address\":\"https://militaryluggage.com/account.php?action=add_shipping_address\",\"update_action\":\"https://militaryluggage.com/account.php?action=update_account\",\"details\":\"https://militaryluggage.com/account.php?action=account_details\",\"recent_items\":\"https://militaryluggage.com/account.php?action=recent_items\",\"index\":\"https://militaryluggage.com/account.php\",\"wishlists\":{\"all\":\"https://militaryluggage.com/wishlist.php\",\"add\":\"https://militaryluggage.com/wishlist.php?action=addwishlist\",\"edit\":\"https://militaryluggage.com/wishlist.php?action=editwishlist\",\"delete\":\"https://militaryluggage.com/wishlist.php?action=deletewishlist\"}},\"auth\":{\"login\":\"https://militaryluggage.com/login.php\",\"check_login\":\"https://militaryluggage.com/login.php?action=check_login\",\"create_account\":\"https://militaryluggage.com/login.php?action=create_account\",\"save_new_account\":\"https://militaryluggage.com/login.php?action=save_new_account\",\"forgot_password\":\"https://militaryluggage.com/login.php?action=reset_password\",\"send_password_email\":\"https://militaryluggage.com/login.php?action=send_password_email\",\"save_new_password\":\"https://militaryluggage.com/login.php?action=save_new_password\",\"logout\":\"https://militaryluggage.com/login.php?action=logout\"},\"cart\":\"https://militaryluggage.com/cart.php\",\"product\":{\"post_review\":\"https://militaryluggage.com/postreview.php\"},\"gift_certificate\":{\"purchase\":\"https://militaryluggage.com/giftcertificates.php\",\"redeem\":\"https://militaryluggage.com/giftcertificates.php?action=redeem\",\"balance\":\"https://militaryluggage.com/giftcertificates.php?action=balance\"},\"rss\":{\"products\":{\"new\":\"https://militaryluggage.com/rss.php?type=rss\",\"new_atom\":\"https://militaryluggage.com/rss.php?type=atom\",\"popular\":\"https://militaryluggage.com/rss.php?action=popularproducts&type=rss\",\"popular_atom\":\"https://militaryluggage.com/rss.php?action=popularproducts&type=atom\",\"featured\":\"https://militaryluggage.com/rss.php?action=featuredproducts&type=rss\",\"featured_atom\":\"https://militaryluggage.com/rss.php?action=featuredproducts&type=atom\",\"search\":\"https://militaryluggage.com/rss.php?action=searchproducts&type=rss\",\"search_atom\":\"https://militaryluggage.com/rss.php?action=searchproducts&type=atom\"},\"blog\":\"https://militaryluggage.com/rss.php?action=newblogs&type=rss\",\"blog_atom\":\"https://militaryluggage.com/rss.php?action=newblogs&type=atom\"}},\"secureBaseUrl\":\"https://militaryluggage.com\",\"cartId\":null,\"template\":\"pages/home\",\"validationDictionaryJSON\":\"{\\\"locale\\\":\\\"en\\\",\\\"locales\\\":{\\\"validation_messages.valid_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_n
2721ot_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.valid_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_n
2721ot_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]\",\"giftWrappingRemoveMessage\":\"Are you sure you want to remove the gift wrapping from this item?\"}").load(); 2722 2723 function browserSupportsFormData() { 2724 return typeof FormData !== 'undefined' 2725 && !!FormData.prototype.keys; 2726 } 2727 function loadFormDataPolyfillScript(src) { 2728 var formDataPolyfillScript = document.createElement('script'); 2729 formDataPolyfillScript.src = src; 2730 formDataPolyfillScript.onerror = function () { 2731 console.error('Failed to load formData polyfill script ' + src); 2732 }; 2733 document.body.appendChild(formDataPolyfillScript); 2734 } 2735 2736 if (!browserSupportsFormData()) { 2737 loadFormDataPolyfillScript('https://cdn11.bigcommerce.com/s-3lem6ywgsw/stencil/ca2c5200-a308-013f-e7cf-5e53173c381a/e/8dd29750-b2b5-013e-f7a2-4ef3209772a9/dist/theme-bundle.polyfill_form_data.js'); 2738 } 2739 } 2740 </script>
2740 2741
2741<script id="theme-bundle-main" nonce="" async defer src="https://cdn11.bigcommerce.com/s-3lem6ywgsw/stencil/ca2c5200-a308-013f-e7cf-5e53173c381a/e/8dd29750-b2b5-013e-f7a2-4ef3209772a9/dist/theme-bundle.main.js"></script>
2741 2742
2742<script nonce=""> 2743 const scriptElement = document.getElementById('theme-bundle-main'); 2744 2745 if (scriptElement) { 2746 addEventListener('load', onThemeBundleMain); 2747 } else { 2748 console.error('Could not find script element with id "theme-bundle-main"'); 2749 } 2750 </script>
2750 2751 2752
2752<script type="text/javascript" src="https://cdn11.bigcommerce.com/shared/js/datatags-27c1939f6b704282b2a205ba1b929211c1f56b2a.js" integrity="sha256-yDp8OFwpHTQ0wPxFqLD6Tc+0jIMrIICQWY8+dT7ACTE=" crossorigin="anonymous" defer></script>
vendor: 1 bytes, line 2752
2752
2753<script type="text/javascript"> 2754window.addEventListener('DOMContentLoaded', function () { window.initDataTags([], [], window.analytics, {"channel":{"id":1,"name":"default","type":"default"}}); }) 2755</script>
vendor: 1 bytes, line 2755
2755
2756<script type="text/javascript" src="https://cdn11.bigcommerce.com/shared/js/csrf-protection-header-5eeddd5de78d98d146ef4fd71b2aedce4161903e.js"></script>
vendor: 1 bytes, line 2756
2756
2757<script> (function(){ var s = document.createElement('script'); var h = document.querySelector('head') || document.body; s.src = 'https://acsbapp.com/apps/app/dist/js/app.js'; s.async = true; s.onload = function(){ acsbJS.init({ statementLink : 'https://militaryluggage.com/accessibility/', footerHtml : '', hideMobile : false, hideTrigger : false, disableBgProcess : false, language : 'en', position : 'left', leadColor : '#4f4f4f', triggerColor : '#4f4f4f', triggerRadius : '50%', triggerPositionX : 'left', triggerPositionY : 'bottom', triggerIcon : 'people', triggerSize : 'medium', triggerOffsetX : 20, triggerOffsetY : 20, mobile : { triggerSize : 'small', triggerPositionX : 'right', triggerPositionY : 'center', triggerOffsetX : 10, triggerOffsetY : 0, triggerRadius : '50%' } }); }; h.appendChild(s); })(); </script>
2757<!--
2757<script> 2758var add2Cart = document.querySelectorAll('#form-action-addToCart') 2759 2760add2Cart.forEach(function(cart){ 2761 cart.addEventListener('click',function(){ 2762 fbq('track','AddToCart',{ 2763 content_ids: [BCData.product_attributes.sku], 2764 content_type: 'product', 2765 value: BCData.product_attributes.price.without_tax.value, 2766 currency: 'USD' 2767 }); 2768 }) 2769}) 2770</script>
2770--> 2771<style> 2772 .cartDrawer-figure img{ 2773 2774 width: 100%; 2775 max-width: 75px; 2776 } 2777</style> 2778 2779 2780 2781 2782 2783 <span 2784 class="hidden" 2785 id="GraphQLConfig" 2786 data-graphql-endpoint="/graphql" 2787 data-storefront-token="eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NiJ9.eyJjaWQiOlsxXSwiY29ycyI6WyJodHRwczovL21pbGl0YXJ5bHVnZ2FnZS5jb20iXSwiZWF0IjoxNzkxNDU1MzQzLCJpYXQiOjE3OTEyODI1NDMsImlzcyI6IkJDIiwic2lkIjo5OTk0ODk3NzEsInN1YiI6IkJDIiwic3ViX3R5cGUiOjAsInRva2VuX3R5cGUiOjF9.RCuElVTHT_LLOulI8zwACqZJktY5SY3y7rlBGPzbQvR-UHGzdFW89qicvtC3Rw5PbiOJ2DAy-J_lQ8W_wJ9u3A"> 2788 </span> 2789 2790 <!--Page Type--> 2791 <span style="display: none;" id="page_type">default</span> 2792 2793 <!-- Slide-up Drawer Global Component --> 2794 2795 <!-- Staggered color layers (GSAP animated) --> 2796 <div 2797 class="slide-up-drawer__prelayers" 2798 data-target="slideUpDrawerPrelayers" 2799 aria-hidden="true" 2800 ></div> 2801 2802 <!-- Backdrop --> 2803 <div 2804 class="slide-up-drawer__backdrop" 2805 data-target="slideUpDrawerBackdrop" 2806 aria-hidden="true" 2807 ></div> 2808 2809 <!-- Drawer --> 2810 <div 2811 class="slide-up-drawer b5-active" 2812 data-target="slideUpDrawer" 2813 role="dialog" 2814 aria-hidden="true" 2815 data-position="bottom" 2816 > 2817 <button 2818 type="button" 2819 class="slide-up-drawer__close" 2820 data-target="slideUpDrawerClose" 2821 aria-label="Close" 2822 > 2823 <svg 2824 class="slide-up-drawer__close-icon"
2825 viewBox="0 0 24 24" 2826 fill="none" 2827 stroke="currentColor" 2828 stroke-width="2" 2829 > 2830 <line x1="18" y1="6" x2="6" y2="18"></line> 2831 <line x1="6" y1="6" x2="18" y2="18"></line> 2832 </svg> 2833 </button> 2834 2835 <div class="slide-up-drawer__body" data-target="slideUpDrawerBody"></div> 2836 </div> <!-- End Slide-up Drawer --> 2837 2838
2838<script>window.__CF$cv$params={r:'a46520ac5b4b127b',t:'MTc5MTI5NDU0Nw==',u:'01a11179a8f074bbafc49e95b3058de3',ut:'JU1IODs_wCdIBEdbTS_P_aEMwIHzGNHqsu6DXdBkm.c-1791294548-1.2.1.1-kGQH2mbjDR8kJjcz_uemDRn0JMhAXZ6.Es156jS1GgQr72ZKQCQispguq1uuaxLLNwDbMr0h7.cZvuRObxYZfkqa8KV1XfOK_E5oohf54Sk',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>
2838</body> 2839</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.