1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17<!doctype html> 18<html class="no-js no-touch" lang="en"> 19 <head>
19<script data-source-attribution="shopify.event_observer.bootstrap"> 20(function(){let e=navigator,t=`prototype`,n=`sendBeacon`,r=e[n],i=fetch,a=XMLHttpRequest[t],{open:o,send:s}=a,c=`EventListener`,l=`add${c}`,u=`remove${c}`,d=EventTarget[t],f=d[l],p=d[u],m=e=>Error((e=document.currentScript)&&[e?.src,e?.id||e?.dataset?.sourceAttribution]),h=(e=[],t=0)=>(e.p=n=>e[t++%1e3]=n,[e,t=>(e.forEach(e.p=t),e.length=0)]),[g,_]=h(),[v,y]=h(),b,x=new WeakMap,S=e=>e&&g.p([e,b||[m()]]);d[l]=function(e,t,n){let r=this,i=t?.handleEvent||t,a=x.get(t),o=m();i?.call&&!a&&x.set(t,a=function(e){b=[o,e.type];try{i.call(t==i?this:t,e)}finally{b=null}}),v.p([e,o,a,r?.tagName||r+``,r?.id]),f.call(r,e,a||t,n)},d[u]=function(e,t,n){p.call(this,e,x.get(t)||t,n)},a.open=function(e,t){x.set(this,[t+``,e]),o.apply(this,arguments)},a.send=function(e){S(x.get(this)),s.call(this,e)},fetch=(e,t)=>(S([(e?.url||e)+``,t?.method]),i(e,t)),e[n]=(t,n)=>(S([t+``,``]),r.call(e,t,n)),setTimeout(()=>import("//foxfirelites.com/cdn/shopifycloud/storefront/assets/storefront/event_observer_reporter-ed358274.js").then(e=>e.$(_,y,f,i,`53362458807`)))})(); 21//# sourceURL=event-observer-collector.js 22</script>
22 23 24 25
25<script type="text/javascript" async src="https://na.shgcdn3.com/pixel-collector.js"></script>
25 26 <meta charset="utf-8"> 27 <meta http-equiv="x-ua-compatible" content="IE=edge"> 28 29 <link rel="preconnect" href="https://cdn.shopify.com"> 30 <link rel="preconnect" href="https://fonts.shopifycdn.com"> 31 <link rel="preconnect" href="https://v.shopify.com"> 32 <link rel="preconnect" href="https://cdn.shopifycloud.com"> 33 34 <title>Your Shopping Cart â FoxFire Safety Lites</title> 35 36 37 38 39 40 41 <link rel="canonical" href="https://foxfirelites.com/cart" /> 42 43 44 <meta name="viewport" content="width=device-width"> 45 46 47 48 49 50 51 52 53<meta property="og:site_name" content="FoxFire Safety Lites"> 54<meta property="og:url" content="https://foxfirelites.com/cart"> 55<meta property="og:title" content="Your Shopping Cart"> 56<meta property="og:type" content="website"> 57<meta property="og:description" content="Increase visibility with Foxfire Safety Light products that include personal safety lighting, construction zone lighting, jobsite lighting and products that help mark your vehicles with amber and red lights. "> 58 59 60 61 62 63 64 65 66 67 68 <meta 69 property="og:image" 70 content="https://foxfirelites.com/cdn/shop/files/about_ff_43dff437-4fd2-4ce8-b57c-a50555d0a3b6_1200x857.jpg?v=1621973101" 71 /> 72 <meta 73 property="og:image:secure_url" 74 content="https://foxfirelites.com/cdn/shop/files/about_ff_43dff437-4fd2-4ce8-b57c-a50555d0a3b6_1200x857.jpg?v=1621973101" 75 /> 76 <meta property="og:image:width" content="1200" /> 77 <meta property="og:image:height" content="857" /> 78 79 80 <meta property="og:image:alt" content="Social media image" /> 81 82 83 84 85 86 87 88 89 90 91 92 93 94<meta name="twitter:title" content="Your Shopping Cart"> 95<meta name="twitter:description" content="Increase visibility with Foxfire Safety Light products that include personal safety lighting, construction zone lighting, jobsite lighting and products that help mark your vehicles with amber and red lights. "> 96 97 98 99 100 101 102 103 <meta name="twitter:card" content="summary_large_image"> 104 105 106 <meta 107 property="twitter:image" 108 content="https://foxfirelites.com/cdn/shop/files/about_ff_43dff437-4fd2-4ce8-b57c-a50555d0a3b6_1200x600_crop_center.jpg?v=1621973101" 109 /> 110 <meta property="twitter:image:width" content="1200" /> 111 <meta property="twitter:image:height" content="600" /> 112 113 114 <meta property="twitter:image:alt" content="Social media image" /> 115 116 117 118 119 <link rel="preload" href="//foxfirelites.com/cdn/fonts/lato/lato_n4.c3b93d431f0091c8be23185e15c9d1fee1e971c5.woff2" as="font" crossorigin="anonymous"> 120 <link rel="preload" as="style" href="//foxfirelites.com/cdn/shop/t/18/assets/theme.css?v=41735844184499907181791212955">
120<script async crossorigin fetchpriority="high" src="/cdn/shopifycloud/importmap-polyfill/es-modules-shim.2.4.0.js"></script>
vendor: 1 bytes, line 120
120
121<script type="importmap"> 122{ 123 "imports": { 124 "element.base-media": "//foxfirelites.com/cdn/shop/t/18/assets/element.base-media.js?v=61305152781971747521790694046", 125 "element.image.parallax": "//foxfirelites.com/cdn/shop/t/18/assets/element.image.parallax.js?v=59188309605188605141790694072", 126 "element.model": "//foxfirelites.com/cdn/shop/t/18/assets/element.model.js?v=101001098341450788491790694042", 127 "element.quantity-selector": "//foxfirelites.com/cdn/shop/t/18/assets/element.quantity-selector.js?v=68208048201360514121790694064", 128 "element.text.rte": "//foxfirelites.com/cdn/shop/t/18/assets/element.text.rte.js?v=28194737298593644281790694064", 129 "element.video": "//foxfirelites.com/cdn/shop/t/18/assets/element.video.js?v=47354384994497331701790694057", 130 "es-module-shims": "//foxfirelites.com/cdn/shop/t/18/assets/es-module-shims.min.js?v=3197203922110785981790694081", 131 "is-land": "//foxfirelites.com/cdn/shop/t/18/assets/is-land.min.js?v=92343381495565747271790694066", 132 "lightbox": "//foxfirelites.com/cdn/shop/t/18/assets/lightbox.js?v=116354114233759933611790694071", 133 "product.gallery": "//foxfirelites.com/cdn/shop/t/18/assets/product.gallery.js?v=169430556141423714401790694063", 134 "section.slideshow": "//foxfirelites.com/cdn/shop/t/18/assets/section.slideshow.js?v=176892809315355130961790694079", 135 "util.events": "//foxfirelites.com/cdn/shop/t/18/assets/util.events.js?v=163430142883111782711790694053", 136 "util.misc": "//foxfirelites.com/cdn/shop/t/18/assets/util.misc.js?v=117964846174238173191790694065", 137 "util.resource-loader": "//foxfirelites.com/cdn/shop/t/18/assets/util.resource-loader.js?v=81301169148003274841790694058", 138 "utility.stylesheet": "//foxfirelites.com/cdn/shop/t/18/assets/utility.stylesheet.js?v=115421978848924304161790694082", 139 "vendor.drift-zoom": "//foxfirelites.com/cdn/shop/t/18/assets/vendor.drift-zoom.js?v=58010873367620907491790694056", 140 "vendor.in-view": "//foxfirelites.com/cdn/shop/t/18/assets/vendor.in-view.js?v=126891093837844970591790694048", 141 "vendor.photoswipe-ui-default": "//foxfirelites.com/cdn/shop/t/18/assets/vendor.photoswipe-ui-default.min.js?v=60644649669025199041790694052", 142 "vendor.photoswipe": "//foxfirelites.com/cdn/shop/t/18/assets/vendor.photoswipe.min.js?v=169650331104647059261790694048", 143 "vendor.swiper": "//foxfirelites.com/cdn/shop/t/18/assets/vendor.swiper.js?v=76943365775285958891790694075" 144 } 145} 146</script>
146<script> 147 if (!(HTMLScriptElement.supports && HTMLScriptElement.supports('importmap'))) { 148 const el = document.createElement('script') 149 el.async = true 150 el.src = "//foxfirelites.com/cdn/shop/t/18/assets/es-module-shims.min.js?v=3197203922110785981790694081" 151 document.head.appendChild(el) 152 } 153</script>
vendor: 1 bytes, line 153
153
154<script type="module" src="//foxfirelites.com/cdn/shop/t/18/assets/is-land.min.js?v=92343381495565747271790694066"></script>
154 155<style data-shopify>:root { 156 /* Core Sizes */ 157 --size-0-25: 0.0625rem; /* 1px */ 158 --size-0-5: 0.125rem; /* 2px */ 159 --size-1: 0.25rem; /* 4px */ 160 --size-1-5: 0.375rem; /* 6px */ 161 --size-2: 0.5rem; /* 8px */ 162 --size-2-5: 0.625rem; /* 10px */ 163 --size-3: 0.75rem; /* 12px */ 164 --size-3-5: 0.875rem; /* 14px */ 165 --size-4: 1rem; /* 16px */ 166 --size-4-5: 1.125rem; /* 18px */ 167 --size-5: 1.25rem; /* 20px */ 168 --size-5-5: 1.375rem; /* 22px */ 169 --size-6: 1.5rem; /* 24px */ 170 --size-6-5: 1.625rem; /* 26px */ 171 --size-7: 1.75rem; /* 28px */ 172 --size-7-5: 1.875rem; /* 30px */ 173 --size-8: 2rem; /* 32px */ 174 --size-8-5: 2.125rem; /* 34px */ 175 --size-9: 2.25rem; /* 36px */ 176 --size-9-5: 2.375rem; /* 38px */ 177 --size-10: 2.5rem; /* 40px */ 178 --size-11: 2.75rem; /* 44px */ 179 --size-12: 3rem; /* 48px */ 180 --size-14: 3.5rem; /* 56px */ 181 --size-16: 4rem; /* 64px */ 182 --size-18: 4.5rem; /* 72px */ 183 --size-20: 5rem; /* 80px */ 184 --size-24: 6rem; /* 96px */ 185 --size-28: 7rem; /* 112px */ 186 --size-32: 8rem; /* 128px */ 187 188 /* Text Sizes */ 189 --text-size-2: 0.5rem; /* 8px */ 190 --text-size-2-5: 0.625rem; /* 10px */ 191 --text-size-3: 0.75rem; /* 12px */ 192 --text-size-3-5: 0.875rem; /* 14px */ 193 --text-size-4: 1rem; /* 16px */ 194 --text-size-4-5: 1.125rem; /* 18px */ 195 --text-size-5: 1.25rem; /* 20px */ 196 --text-size-5-5: 1.375rem; /* 22px */ 197 --text-size-6: 1.5rem; /* 24px */ 198 --text-size-6-5: 1.625rem; /* 26px */ 199 --text-size-7: 1.75rem; /* 28px */ 200 --text-size-7-5: 1.875rem; /* 30px */ 201 --text-size-8: 2rem; /* 32px */ 202 --text-size-8-5: 2.125rem; /* 34px */ 203 --text-size-9: 2.25rem; /* 36px */ 204 --text-size-9-5: 2.375rem; /* 38px */ 205 --text-size-10: 2.5rem; /* 40px */ 206 --text-size-11: 2.75rem; /* 44px */ 207 --text-size-12: 3rem; /* 48px */ 208 --text-size-14: 3.5rem; /* 56px */ 209 --text-size-16: 4rem; /* 64px */ 210 --text-size-18: 4.5rem; /* 72px */ 211 --text-size-20: 5rem; /* 80px */ 212 --text-size-24: 6rem; /* 96px */ 213 --text-size-28: 7rem; /* 112px */ 214 --text-size-32: 8rem; /* 128px */ 215 216 /* Line */ 217 --line-size-none: 0px; 218 --line-size-xs: 0.5px; 219 --line-size-sm: 1px; 220 --line-size-md: 2px; 221 --line-size-lg: 4px; 222 --line-size-xl: 8px; 223 224 /* Gap */ 225 --gap-size-none: 0px; 226 --gap-size-xs: 8px; 227 --gap-size-sm: 16px; 228 --gap-size-md: 32px; 229 --gap-size-lg: 48px; 230 --gap-size-xl: 64px; 231 232 /* Radius */ 233 --radius-xs: 4px; 234 --radius-sm: 8px; 235 --radius-md: 12px; 236 --radius-lg: 16px; 237 --radius-xl: 24px; 238 --radius-2xl: 32px; 239 --radius-none: 0px; 240 --radius-full: 999px; 241 242 /* Dropshadow */ 243 --shadow-none: 0px 0px 0px 0px rgba(0, 0, 0, 0); 244 --shadow-sm: 0px 1px 2px 0px rgba(0, 0, 0, 0.08); 245 --shadow-md: 0px 2px 4px -1px rgba(0, 0, 0, 0.08); 246 --shadow-lg: 0px 8px 16px -4px rgba(0, 0, 0, 0.08); 247 --shadow-xl: 0px 16px 32px -6px rgba(0, 0, 0, 0.12); 248 --shadow-2xl: 0px 16px 64px -12px rgba(0, 0, 0, 0.22); 249 250 /* Font Weights */ 251 --font-weight-100: 100; 252 --font-weight-200: 200; 253 --font-weight-300: 300; 254 --font-weight-400: 400; 255 --font-weight-500: 500; 256 --font-weight-600: 600; 257 --font-weight-700: 700; 258 --font-weight-800: 800; 259 --font-weight-900: 900; 260 261 /* Letter Spacings */ 262 --letter-space-2xs: -0.05em; 263 --letter-space-xs: -0.03em; 264 --letter-space-sm: -0.015em; 265 --letter-space-md: 0em; 266 --letter-space-lg: 0.015em; 267 --letter-space-xl: 0.03em; 268 --letter-space-2xl: 0.05em; 269 --letter-space-3xl: 0.08em; 270 --letter-space-4xl: 0.12em; 271 272 /* Line Heights */ 273 --line-height-2xs: 0.9; 274 --line-height-xs: 1; 275 --line-height-sm: 1.1; 276 --line-height-md: 1.2; 277 --line-height-lg: 1.5; 278 --line-height-xl: 1.7; 279 --line-height-2xl: 2; 280 281 /* Color Shades */ 282 --shade-0: 0%; 283 --shade-4: 4%; 284 --shade-8: 8%; 285 --shade-12: 12%; 286 --shade-16: 16%; 287 --shade-20: 20%; 288 --shade-30: 30%; 289 --shade-40: 40%; 290 --shade-50: 50%; 291 --shade-60: 60%; 292 --shade-70: 70%; 293 --shade-80: 80%; 294 --shade-90: 90%; 295 --shade-100: 100%; 296 }</style><style data-shopify>/* Root Variables */ 297 :root { 298 --root-font-size: 16px; 299 --root-color-primary: #000; 300 --root-color-secondary: #fff; 301 } 302 303 /* Colors */ 304 :root { 305 --color-primary: var(--root-color-primary); 306 --color-secondary: var(--root-color-secondary); 307 --color-focus: #4a9afc; 308 --color-error: #ba4444; 309 --color-price: var(--color-primary); 310 --color-text-savings: var(--color-primary); 311 --disabled-grey: #f6f6f6; 312 --disabled-border: #b6b6b6; 313 --disabled-grey-text: #b6b6b6; 314 --success-green: #56ad6a; 315 --success-green-bg: #ecfef0; 316 --color-sticky-nav-links: #fff; 317 } 318 319 /* Body Font Stack */ 320 :root { 321 --body-font-family: 'Arial'; 322 --body-font-family-fallback: 'sans-serif'; 323 --body-font-weight: var(--font-weight-400); 324 --body-letter-spacing: var(--letter-space-md); 325 --body-line-height: var(--line-height-md); 326 --body-text-transform: none; 327 --body-lg-font-size: var(--text-size-4); 328 --body-md-font-size: var(--text-size-3-5); 329 --body-sm-font-size: var(--text-size-3); 330 --body-xs-font-size: var(--text-size-2-5); 331 332 @media screen and (min-width: 769px) { 333 --body-lg-font-size: var(--text-size-4-5); 334 --body-md-font-size: var(--text-size-4); 335 --body-sm-font-size: var(--text-size-3-5); 336 --body-xs-font-size: var(--text-size-3); 337 } 338 } 339 340 /* Heading Font Stack */ 341 :root { 342 --heading-font-family: 'Arial'; 343 --heading-font-family-fallback: 'sans-serif';
344 --heading-font-weight: var(--font-weight-700); 345 --heading-letter-spacing: var(--letter-space-md); 346 347 --heading-2xl-line-height: var(--line-height-md); 348 --heading-xl-line-height: var(--line-height-md); 349 --heading-lg-line-height: var(--line-height-md); 350 --heading-md-line-height: var(--line-height-md); 351 --heading-sm-line-height: var(--line-height-md); 352 --heading-xs-line-height: var(--line-height-md); 353 354 --heading-2xl-font-size: var(--text-size-12); 355 --heading-xl-font-size: var(--text-size-8); 356 --heading-lg-font-size: var(--text-size-6); 357 --heading-md-font-size: var(--text-size-5); 358 --heading-sm-font-size: var(--text-size-4-5); 359 --heading-xs-font-size: var(--text-size-4); 360 361 @media screen and (min-width: 769px) { 362 --heading-2xl-font-size: var(--text-size-16); 363 --heading-xl-font-size: var(--text-size-12); 364 --heading-lg-font-size: var(--text-size-8); 365 --heading-md-font-size: var(--text-size-6); 366 --heading-sm-font-size: var(--text-size-5); 367 --heading-xs-font-size: var(--text-size-4-5); 368 } 369 } 370 371 /* Accent Font Stack */ 372 :root { 373 --accent-font-family: 'Arial'; 374 --accent-font-family-fallback: 'sans-serif'; 375 --accent-font-weight: var(--font-weight-400); 376 --accent-letter-spacing: var(--letter-space-4xl); 377 --accent-line-height: var(--line-height-md); 378 --accent-text-transform: uppercase; 379 } 380 381 /* ==================================================================== */ 382 /* OLD CSS VARIABLES THAT NEEDS TO ð¥ */ 383 /* ==================================================================== */ 384 :root { 385 --z-index-modal: 30; 386 --z-index-toolbar: 7; 387 --z-index-header: 6; 388 --z-index-header-submenu: 7; 389 --z-index-header-bottom-row: 3; 390 --z-index-header-drawers: 5; 391 --z-index-header-drawers-mobile: 3; 392 --z-index-header-search: 7; 393 --z-index-loader: 4; 394 --z-index-header-search-overlay: 1; 395 --url-ico-select: url(//foxfirelites.com/cdn/shop/t/18/assets/ico-select.svg); 396 --url-swirl-svg: url(//foxfirelites.com/cdn/shop/t/18/assets/swirl.svg); 397 --header-padding-bottom: 0; 398 --gutter: 30px; 399 --page-width: 1500px; 400 --page-width-narrow: 1000px; 401 --page-width-gutter-small: 17px; 402 --grid-gutter: 22px; 403 --grid-gutter-small: 16px; 404 --slide-curve: 0.25s cubic-bezier(0.165, 0.84, 0.44, 1); 405 --drawer-box-shadow: 0 10px 25px rgba(0, 0, 0, 0.15); 406 --product-grid-margin: 10px; 407 --product-grid-padding: 12px; 408 --product-radius: 10px; 409 --page-top-padding: 35px; 410 --page-narrow: 780px; 411 --page-width-padding: 40px; 412 --grid-gutter: 22px; 413 --index-section-padding: 60px; 414 --section-header-bottom: 40px; 415 --size-chart-margin: 30px 0; 416 --size-chart-icon-margin: 5px; 417 --newsletter-reminder-padding: 20px 30px 20px 25px; 418 --text-frame-margin: 10px; 419 --desktop-menu-chevron-size: 10px; 420 --site-nav-item-padding: 20px; 421 --site-nav-item-padding-top-bottom: 16px; 422 --site-nav-icon-padding: 12px; 423 } 424 425 @media screen and (max-width: 768px) { 426 :root { 427 --page-top-padding: 15px; 428 --page-narrow: 330px; 429 --page-width-padding: 17px; 430 --grid-gutter: 16px; 431 --index-section-padding: 40px; 432 --section-header-bottom: 25px; 433 --text-frame-margin: 7px; 434 } 435 }</style> 436<style data-shopify>:root { 437 --text-size-scale-n-4: var(--text-size-2); /* 8px */ 438 --text-size-scale-n-3: var(--text-size-2-5); /* 10px */ 439 --text-size-scale-n-2: var(--text-size-3); /* 12px */ 440 --text-size-scale-n-1: var(--text-size-3-5); /* 14px */ 441 --text-size-scale-n0: var(--text-size-4); /* 16px */ 442 --text-size-scale-n1: var(--text-size-4-5); /* 18px */ 443 --text-size-scale-n2: var(--text-size-5); /* 20px */ 444 --text-size-scale-n3: var(--text-size-6); /* 24px */ 445 --text-size-scale-n4: var(--text-size-6-5); /* 26px */ 446 --text-size-scale-n5: var(--text-size-7); /* 28px */ 447 --text-size-scale-n6: var(--text-size-8); /* 32px */ 448 --text-size-scale-n7: var(--text-size-9); /* 36px */ 449 --text-size-scale-n8: var(--text-size-10); /* 40px */ 450 --text-size-scale-n9: var(--text-size-12); /* 48px */ 451 --text-size-scale-n10: var(--text-size-14); /* 56px */ 452 --text-size-scale-n11: var(--text-size-16); /* 64px */ 453 --text-size-scale-n12: var(--text-size-18); /* 72px */ 454 --text-size-scale-n13: var(--text-size-20); /* 80px */ 455 --text-size-scale-n14: var(--text-size-24); /* 96px */ 456 457 --font-weight-scale-n-3: var(--font-weight-100); 458 --font-weight-scale-n-2: var(--font-weight-200); 459 --font-weight-scale-n-1: var(--font-weight-300); 460 --font-weight-scale-n0: var(--font-weight-400); 461 --font-weight-scale-n1: var(--font-weight-500); 462 --font-weight-scale-n2: var(--font-weight-600); 463 --font-weight-scale-n3: var(--font-weight-700); 464 --font-weight-scale-n4: var(--font-weight-800); 465 --font-weight-scale-n5: var(--font-weight-900); 466 467 --letter-spacing-scale-n-3: var(--letter-space-2xs); 468 --letter-spacing-scale-n-2: var(--letter-space-xs); 469 --letter-spacing-scale-n-1: var(--letter-space-sm); 470 --letter-spacing-scale-n0: var(--letter-space-md); 471 --letter-spacing-scale-n1: var(--letter-space-lg); 472 --letter-spacing-scale-n2: var(--letter-space-xl); 473 --letter-spacing-scale-n3: var(--letter-space-2xl); 474 --letter-spacing-scale-n4: var(--letter-space-3xl); 475 --letter-spacing-scale-n5: var(--letter-space-4xl); 476 477 --line-height-scale-n-3: var(--line-height-2xs); 478 --line-height-scale-n-2: var(--line-height-xs); 479 --line-height-scale-n-1: var(--line-height-sm); 480 --line-height-scale-n0: var(--line-height-md); 481 --line-height-scale-n1: var(--line-height-lg); 482 --line-height-scale-n2: var(--line-height-xl); 483 --line-height-scale-n3: var(--line-height-2xl); 484 485 /* Body Font Scales */--body-letter-spacing: var(--letter-spacing-scale-n0);--body-line-height: var(--line-height-scale-n1);--body-lg-font-size: var(--text-size-scale-n0); 486 --body-md-font-size: var(--text-size-scale-n-1); 487 --body-sm-font-size: var(--text-size-scale-n-2); 488 --body-xs-font-size: var(--text-size-scale-n-3);/* Heading Font Scales */--heading-letter-spacing: var(--letter-spacing-scale-n0);--heading-line-height: var(--line-height-scale-n0);/* Accent Font Scales */@media screen and (min-width: 769px) { 489 /* Body Font Desktop Sizes */--body-lg-font-size: var(--text-size-scale-n1); 490 --body-md-font-size: var(--text-size-scale-n0); 491 --body-sm-font-size: var(--text-size-scale-n-1); 492 --body-xs-font-size: var(--text-size-scale-n-2);/* Heading Desktop Font Sizes */--heading-2xl-font-size: max(var(--text-size-scale-n11), var(--body-md-font-size)); 493 --heading-xl-font-size: max(var(--text-size-scale-n9), var(--body-md-font-size)); 494 --heading-lg-font-size: max(var(--text-size-scale-n6), var(--body-md-font-size)); 495 --heading-md-font-size: max(var(--text-size-scale-n3), var(--body-md-font-size)); 496 --heading-sm-font-size: max(var(--text-size-scale-n2), var(--body-md-font-size)); 497 --heading-xs-font-size: max(var(--text-size-scale-n1), var(--body-md-font-size));} 498 }</style> 499<style data-shopify>:root { 500 501 502 503 } 504 505 506 507 508 509 /* LEGACY TOKENS THAT WE NEED TO KILLLLLLLLLLLLL */ 510 /* --------------------------------------------- */ 511 512 :root { 513 /* Fixed colors */ 514 --color-price: ; 515 --color-text-savings: ; 516 517 /* TODO: Move to component that uses this */ 518 --color-button-primary: #000; /* TODO: Remove this */ 519 --color-button-primary-light: #1a1a1a; /* TODO: Remove this */ 520 --color-button-primary-dim: #000000; /* TODO: Remove this */ 521 --color-button-primary-text: #ffffff; /* TODO: Remove this */ 522 523 --color-sale-tag: ; 524 --color-sale-tag-text: ; 525 }</style><style data-shopify> 526 :root { 527 528 529 --color-background: #fff; 530 --color-background-alpha-0: rgba(255, 255, 255, 0); 531 --color-background-alpha-90: rgba(255, 255, 255, 0.9); 532 533 /* Typography */ 534 535 536 --color-headings: #1d1d1d; 537 --color-text: #1d1d1d; 538 539 --color-text-05: #f4f4f4; 540 --color-text-05-alpha-0: rgba(244, 244, 244, 0); 541 542 --color-text-hover: #1d1d1d; 543 --color-text-light: #1d1d1d; 544 --color-links: #046e82; 545 --color-link-hover: #1d1d1d; 546 547 /* Products */ 548 --color-products-in-stock: #268c0b; 549 --color-products-low-stock: #cc1313; 550 --color-products-no-stock: #121212; 551 552 /* Buttons */ 553 554 555 556 --color-button-text: #ffffff; 557 --color-button-background: #f04f36; 558 --color-button-background-hover: #f2614a; 559 560 --color-button-background-focus: #dddddd; 561 --color-button-disable: #939393; 562 563 --color-button-secondary-text: #f04f36; 564 --color-button-secondary-background: #ffffff; 565 --color-button-secondary-background-hover: #ffffff; 566 --color-button-secondary-background-focus: #e6e6e6; 567 --color-button-secondary-border: #dddddd; 568 --color-button-secondary-border-hover: #c7c7c7; 569 570 --button-primary-text-color: #ffffff; 571 --button-primary-text-color-highlight: #ffffff; 572 --button-primary-bg-color: #000000; 573 --button-primary-bg-color-highlight: #606060; 574 --button-primary-border-color: rgba(0,0,0,0); 575 --button-primary-border-color-highlight: rgba(0,0,0,0); 576 577 --button-secondary-text-color: #000000; 578 --button-secondary-text-color-highlight: #ffffff; 579 --button-secondary-bg-color: rgba(0,0,0,0); 580 --button-secondary-bg-color-highlight: #000000; 581 --button-secondary-border-color: #000000; 582 --button-secondary-border-color-highlight: #000000; 583 584 --button-link-text-color: #000000; 585 --button-link-text-color-highlight: #ccc; 586 587 /* Header */ 588 --color-header-text: #1d1d1d; 589 --color-header-background: #fff; 590 591 /* Forms */ 592 593 --color-input-text: #4d4d4d; 594 595 --color-input-text-hover: #dddddd; 596 597 --color-input-background: #fff; 598 --color-input-background-hover: #f4f4f4; 599 600 --color-input-border: #dddddd; 601 --color-input-border-alpha-25: rgba(221, 221, 221, 0.25); 602 603 604 --color-input-border-morph-2: #c7c7c7; 605 --color-input-border-morph-4: #b1b1b1; 606 --color-input-border-morph-10: #858585; 607 --color-input-border-morph-12: #767676; 608 609 --color-input-border-hover: #c7c7c7; 610 611 --color-product-sale-accent: #f04f36; 612 --color-product-review-star: #ffab41; 613 614 /* Footer */ 615 --color-footer-text: #1d1d1d; 616 617 --color-footer-background: #f5f3ed; 618 619 620 --color-footer-link: #3c3c3c; 621 --color-footer-color-alt: rgba(29, 29, 29, 0.8); 622 --color-additional-accent: rgba(29, 29, 29, 0.5); 623 624 /* Placeholders */ 625 --color-placeholder-background: #ededed; 626 --color-placeholder-fill: #b0b0b0; 627 628 /* General */ 629 630 631 632 --color-black: #000; 633 --color-white: #fff; 634 635 --color-border: #808080; 636 --color-border-modify: rgba(128, 128, 128, 0.3); 637 --color-border-less-soft: rgba(0, 0, 0, 0.25); 638 --color-border-soft: rgba(0, 0, 0, 0.15); 639 --color-border-softer: rgba(0, 0, 0, 0.1); 640 641 642 --color-overlay-background: Liquid error (snippets/head.styles.legacy-settings-color line 118): Alpha must be a float between 0 and 1; 643 644 645 --color-background-8: #ededed; 646 --color-background-4: #f6f6f6; 647 648 --color-background-light: #f2f2f2; 649 --color-search-category-background: #e8e8e8; 650 651 --color-box-shadow-border: rgba(128, 128, 128, 0.16); 652 --color-box-shadow-shadow: rgba(128, 128, 128, 0.11); 653 --color-box-shadow-border-focused: rgba(128, 128, 128, 0.5); 654 --color-box-shadow-shadow-focused: rgba(128, 128, 128, 0.5); 655 656 --color-box-shadow-shadow-headings: rgba(128, 128, 128, 0.05); 657 658 --color-error: #f05d5d; 659 --color-success: #51a551; 660 --color-warning: #dfa354; 661 --color-highlight: #fffbd9;
662 --color-notice: --color-text; 663 --color-sale: --color-product-sale-accent; 664 --color-star: --color-product-review-star; 665 --color-star-empty: #8e8e8e; 666 667 --color-facebook: #425dab; 668 --color-x: #000; 669 --color-pinterest: #bd1c1c; 670 --color-linkedin: #0077B5; 671 } 672</style> 673<style data-shopify>:root { 674 --heading-font-family: 'Open Sans', sans-serif; 675 --heading-font-weight: 400; 676 --heading-letter-spacing: 0px; 677 --body-font-family: 'Open Sans', sans-serif; 678 679 --heading-font-style: normal; 680 --subheading-font-family: 'Open Sans', sans-serif; 681 --button-font-family: 'Open Sans', sans-serif; 682 683 /* Font sizes */ 684 --heading-xl-font-size: 40px; 685 --heading-lg-font-size: 20px; 686 --body-md-font-size: 15px; 687 688 --button-primary-font-size: 1rem; 689 --button-primary-line-height: inherit; 690 691 --button-secondary-font-size: 1rem; 692 --button-secondary-line-height: inherit; 693 694 --button-link-style-font-size: 1rem; 695 --button-link-style-line-height: inherit; 696 697 --heading-responsive: 1; 698 --subheading-responsive: 1; 699 700 /* Button styles */ 701 --button-font-weight: 700; 702 --button-font-style: normal; 703 --button-letter-spacing: 0px; 704 --button-transition-speed: 0.3s; 705 --button-font-capitalization: none; 706 707 --button-primary-border-radius: 0px; 708 --button-secondary-border-radius: 0px; 709 --button-link-underline-thickness: 1px; 710 --button-link-underline-style: solid; 711 }</style> 712<style-sheet name="vendor.flickity.css" remove-duplicate="true" load="async" style="display: none;"><link href="//foxfirelites.com/cdn/shop/t/18/assets/vendor.flickity.css?v=168134560433028609901790694083" rel="preload" as="style" onload="this.rel='stylesheet'">
713<script type="module" src="//foxfirelites.com/cdn/shop/t/18/assets/utility.stylesheet.js?v=115421978848924304161790694082"></script>
713</style-sheet> 714 715<style-sheet name="vendor.swiper.css" remove-duplicate="true" load="async" style="display: none;"><link href="//foxfirelites.com/cdn/shop/t/18/assets/vendor.swiper.css?v=103091539061108917781790694057" rel="preload" as="style" onload="this.rel='stylesheet'">
716<script type="module" src="//foxfirelites.com/cdn/shop/t/18/assets/utility.stylesheet.js?v=115421978848924304161790694082"></script>
716</style-sheet> 717 718 719 720<style data-shopify> 721 :root { 722 /* Backgrounds */ 723 724 725 726 --color-background: 727 728rgb(255, 255, 255) 729 ; 730 --color-background-alpha-0: rgba(255, 255, 255, 0); 731 --color-background-alpha-90: rgba(255, 255, 255, 0.9); 732 733 /* Typography */ 734 --color-headings: #121212; 735 --color-text: #121212; 736 737 --color-text-05: #f3f3f3; 738 --color-text-05-alpha-0: rgba(243, 243, 243, 0); 739 740 741 742 743 744 745 746 747 748 --color-text-hover: 749 750#2f2f2f 751 ; 752 --color-text-light: #111111; 753 --color-links: #121212; 754 755 756 757 758 759 --color-link-hover: 760 761#232323 762 ; 763 764 /* Products */ 765 --color-products-in-stock: #268c0b; 766 --color-products-low-stock: #cc1313; 767 --color-products-no-stock: #121212; 768 769 /* Buttons */ 770 --color-button-text: #ffffff; 771 --color-button-background: #cc1313; 772 --color-button-background-hover: rgb(209, 43, 43); 773 774 775 776 777 --color-button-background-focus: 778 779#b91111 780 ; 781 --color-button-disable: #707070; 782 783 --color-button-secondary-text: #ffffff; 784 --color-button-secondary-background: #121212; 785 --color-button-secondary-background-hover: rgb(65, 65, 65); 786 787 788 789 790 --color-button-secondary-background-focus: 791 792#1d1d1d 793 ; 794 --color-button-secondary-border: #121212; 795 796 797 798 799 --color-button-secondary-border-hover: 800 801#1d1d1d 802 ; 803 804 /* Header */ 805 --color-header-text: #ffffff; 806 807 808 809 810 --color-header-background: 811 812rgb(18, 18, 18) 813 ; 814 815 /* Forms */ 816 --color-input-text: #4d4d4d; 817 818 819 820 821 --color-input-text-hover: 822 823#434343 824 ; 825 826 --color-input-background: #ffffff; 827 --color-input-background-hover: #f3f3f3; 828 829 --color-input-border: #dddddd; 830 --color-input-border-alpha-25: rgba(221, 221, 221, 0.25); 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 --color-input-border-morph-2: 847 848#cecece 849 ; 850 --color-input-border-morph-4: 851 852#bebebe 853 ; 854 --color-input-border-morph-10: 855 856#919191 857 ; 858 --color-input-border-morph-12: 859 860#818181 861 ; 862 863 --color-input-border-hover: 864 865#cecece 866 ; 867 868 --color-product-sale-accent: #cc1313; 869 --color-product-review-star: #121212; 870 871 /* Footer */ 872 --color-footer-text: #ffffff; 873 874 875 876 877 --color-footer-background: 878 879rgb(18, 18, 18) 880 ; 881 882 883 884 885 --color-footer-link: 886 887#ebebeb 888 ; 889 --color-footer-color-alt: rgba(255, 255, 255, 0.8); 890 --color-additional-accent: rgba(255, 255, 255, 0.5); 891 892 /* Placeholders */ 893 --color-placeholder-background: #ececec; 894 --color-placeholder-fill: #acacac; 895 896 /* General */ 897 898 899 900 --color-black: #000; 901 --color-white: #fff; 902 903 904 905 906 907 908 909 910 911 --color-border: rgb(128, 128, 128); 912 --color-border-modify: rgba(128, 128, 128, 0.3); 913 --color-border-less-soft: rgba(0, 0, 0, 0.25); 914 --color-border-soft: rgba(0, 0, 0, 0.15); 915 --color-border-softer: rgba(0, 0, 0, 0.1); 916 917 918 919 --color-overlay-background: rgba(18, 18, 18, 0.5); 920 921 922 923 --color-background-8: #ececec; 924 --color-background-4: #f6f6f6; 925 926 --color-background-light: #f3f3f3; 927 --color-search-category-background: #e7e7e7; 928 929 --color-box-shadow-border: rgba(128, 128, 128, 0.16); 930 --color-box-shadow-shadow: rgba(128, 128, 128, 0.11); 931 --color-box-shadow-border-focused: rgba(128, 128, 128, 0.5); 932 --color-box-shadow-shadow-focused: rgba(128, 128, 128, 0.5); 933 934 --color-box-shadow-shadow-headings: rgba(128, 128, 128, 0.05); 935 936 --color-error: #f05d5d; 937 --color-success: #51a551; 938 --color-warning: #dfa354; 939 --color-highlight: #fffbd9; 940 --color-notice: --color-text; 941 --color-sale: --color-product-sale-accent; 942 --color-star: --color-product-review-star; 943 --color-star-empty: #898989; 944 945 --color-facebook: #425dab; 946 --color-x: #000; 947 --color-pinterest: #bd1c1c; 948 --color-linkedin: #0077B5; 949 } 950</style> 951 952<style data-shopify>:root { 953 /* Override heading font stack with empire legacy settings */ 954 --heading-font-family: Lato,sans-serif; 955 --heading-font-scale: 1.2;
956 --heading-font-weight: 400; 957 --heading-font-style: normal; 958 --heading-font-capitalization: uppercase; 959 --heading-letter-spacing: 0.02em; 960 --subheading-font-family: 'Nunito Sans', sans-serif; 961 --button-font-family: Lato,sans-serif; 962 --button-font-weight: 400; 963 --button-font-style: normal; 964 --button-font-capitalization: initial; 965 --button-letter-spacing: 0.0em; 966 967 --heading-responsive: 1; 968 --subheading-responsive: 1; 969 --body-font-family: Lato; 970 971 --menu-font-family: Lato,sans-serif; 972 --menu-font-weight: 400; 973 --menu-font-style: normal; 974 --menu-font-capitalization: uppercase; 975 --menu-letter-spacing: 0.01em; 976 }</style> 977
977<script>window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.start');</script>
977<meta id="shopify-digital-wallet" name="shopify-digital-wallet" content="/53362458807/digital_wallets/dialog"> 978<meta id="in-context-paypal-metadata" data-shop-id="53362458807" data-venmo-supported="true" data-environment="production" data-locale="en_US" data-paypal-v4="true" data-currency="USD"> 979<link rel="ucp" href="/.well-known/ucp" version="2026-08-25">
979<script async="async" src="/checkouts/internal/preloads.js?locale=en-US&default_configuration_id=9797815"></script>
979 980<link rel="preconnect" href="https://shop.app" crossorigin="anonymous">
981<script async="async" src="https://shop.app/checkouts/internal/preloads.js?locale=en-US&default_configuration_id=9797815&shop_id=53362458807" crossorigin="anonymous"></script>
vendor: 1 bytes, line 981
981
982<script id="apple-pay-shop-capabilities" type="application/json">{"shopId":53362458807,"countryCode":"US","currencyCode":"USD","merchantCapabilities":["supports3DS"],"merchantId":"gid:\/\/shopify\/Shop\/53362458807","merchantName":"FoxFire Safety Lites","requiredBillingContactFields":["postalAddress","email"],"requiredShippingContactFields":["postalAddress","email"],"shippingType":"shipping","supportedNetworks":["visa","masterCard","discover","amex","elo","jcb"],"total":{"type":"pending","label":"FoxFire Safety Lites","amount":"1.00"},"shopifyPaymentsEnabled":true,"supportsSubscriptions":true}</script>
vendor: 1 bytes, line 982
982
983<script id="shopify-features" type="application/json">{"accessToken":"8c2b200b217737ade010dd9259c2ef6f","betas":["rich-media-storefront-analytics"],"domain":"foxfirelites.com","predictiveSearch":true,"shopId":53362458807,"locale":"en"}</script>
vendor: 1 bytes, line 983
983
984<script>var Shopify = Shopify || {}; 985Shopify.shop = "foxfirelites.myshopify.com"; 986Shopify.locale = "en"; 987Shopify.currency = {"active":"USD","rate":"1.0"}; 988Shopify.country = "US"; 989Shopify.theme = {"name":"Updated copy of Patrol Release Theme - 2026-09-29","id":207850602865,"schema_name":"Empire","schema_version":"13.0.1","theme_store_id":838,"role":"main"}; 990Shopify.theme.handle = "null"; 991Shopify.theme.style = {"id":null,"handle":null}; 992Shopify.cdnHost = "foxfirelites.com/cdn"; 993Shopify.routes = Shopify.routes || {}; 994Shopify.routes.root = "/"; 995Shopify.shopJsCdnBaseUrl = "https://cdn.shopify.com/shopifycloud/shop-js"; 996Shopify.SignInWithShop = Shopify.SignInWithShop || {}; 997Shopify.SignInWithShop.User = Shopify.SignInWithShop.User || {}; 998Shopify.SignInWithShop.User.recognized = false;</script>
vendor: 1 bytes, line 998
998
999<script type="module">!function(o){(o.Shopify=o.Shopify||{}).modules=!0}(window);</script>
vendor: 1 bytes, line 999
999
1000<script>!function(o){function n(){var o=[];function n(){o.push(Array.prototype.slice.apply(arguments))}return n.q=o,n}var t=o.Shopify=o.Shopify||{};t.loadFeatures=n(),t.autoloadFeatures=n()}(window);</script>
vendor: 1 bytes, line 1000
1000
1001<script> 1002 window.ShopifyPay = window.ShopifyPay || {}; 1003 window.ShopifyPay.apiHost = "shop.app\/pay"; 1004 window.ShopifyPay.redirectState = null; 1005</script>
vendor: 1 bytes, line 1005
1005
1006<script> 1007 window.Shopify = window.Shopify || {}; 1008 window.Shopify.SignInWithShop = window.Shopify.SignInWithShop || {}; 1009 window.Shopify.SignInWithShop.assetMetrics = { sampleRate: 0.25 }; 1010 window.Shopify.SignInWithShop.eligible = true; 1011</script>
vendor: 1 bytes, line 1011
1011
1012<script id="shop-js-analytics" type="application/json">{"pageType":"cart"}</script>
vendor: 1 bytes, line 1012
1012
1013<script defer="defer" async type="module" src="https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/loader.init-shop-cart-sync.en.esm.js"></script>
vendor: 1 bytes, line 1013
1013
1014<script type="module"> 1015 await import("https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/loader.init-shop-cart-sync.en.esm.js"); 1016 1017 window.Shopify.SignInWithShop?.initShopCartSync?.({"fedCMEnabled":true,"windoidEnabled":true}); 1018 1019</script>
vendor: 1 bytes, line 1019
1019
1020<script> 1021 window.Shopify = window.Shopify || {}; 1022 if (!window.Shopify.featureAssets) window.Shopify.featureAssets = {}; 1023 window.Shopify.featureAssets['shop-js'] = {"avatar":["modules/v2/loader.avatar.en.esm.js"],"checkout-modal":["modules/v2/loader.checkout-modal.en.esm.js"],"init-customer-accounts-sign-up":["modules/v2/loader.init-customer-accounts-sign-up.en.esm.js"],"init-customer-accounts":["modules/v2/loader.init-customer-accounts.en.esm.js"],"init-fed-cm":["modules/v2/loader.init-fed-cm.en.esm.js"],"init-shop-cart-sync":["modules/v2/loader.init-shop-cart-sync.en.esm.js"],"init-shop-email-lookup-coordinator":["modules/v2/loader.init-shop-email-lookup-coordinator.en.esm.js"],"init-shop-for-new-customer-accounts":["modules/v2/loader.init-shop-for-new-customer-accounts.en.esm.js"],"init-shop-user-recognition":["modules/v2/loader.init-shop-user-recognition.en.esm.js"],"init-windoid":["modules/v2/loader.init-windoid.en.esm.js"],"lead-capture":["modules/v2/loader.lead-capture.en.esm.js"],"listener":["modules/v2/loader.listener.en.esm.js"],"pay-button":["modules/v2/loader.pay-button.en.esm.js"],"payment-terms":["modules/v2/loader.payment-terms.en.esm.js"],"shop-button":["modules/v2/loader.shop-button.en.esm.js"],"shop-cart-sync":["modules/v2/loader.shop-cart-sync.en.esm.js"],"shop-cash-offers":["modules/v2/loader.shop-cash-offers.en.esm.js"],"shop-follow-button":["modules/v2/loader.shop-follow-button.en.esm.js"],"shop-login-button":["modules/v2/loader.shop-login-button.en.esm.js"],"shop-login":["modules/v2/loader.shop-login.en.esm.js"],"shop-toast-manager":["modules/v2/loader.shop-toast-manager.en.esm.js"],"shop-user-recognition":["modules/v2/loader.shop-user-recognition.en.esm.js"]}; 1024</script>
vendor: 1 bytes, line 1024
1024
1025<script>(function() { 1026 var isLoaded = false; 1027 function asyncLoad() { 1028 if (isLoaded) return; 1029 isLoaded = true; 1030 var urls = ["https:\/\/chimpstatic.com\/mcjs-connected\/js\/users\/1f46a78d665fdd73d49beb7da\/01d6ae0a799133baf2bec493c.js?shop=foxfirelites.myshopify.com","https:\/\/cdn-widgetsrepository.yotpo.com\/v1\/loader\/ceVTFAl0eNXykv1OxAEHPFkOImHoSY5DgQx3bCvA?shop=foxfirelites.myshopify.com"]; 1031 for (var i = 0; i < urls.length; i++) { 1032 var s = document.createElement('script'); 1033 s.type = 'text/javascript'; 1034 s.async = true; 1035 s.src = urls[i]; 1036 var x = document.getElementsByTagName('script')[0]; 1037 x.parentNode.insertBefore(s, x); 1038 } 1039 }; 1040 if(window.attachEvent) { 1041 window.attachEvent('onload', asyncLoad); 1042 } else { 1043 window.addEventListener('load', asyncLoad, false); 1044 } 1045})();</script>
vendor: 1 bytes, line 1045
1045
1046<script id="__st">var __st={"a":53362458807,"offset":-14400,"reqid":"a2237326-bebd-4f2a-add7-9ec71180af33-1791596663","pageurl":"foxfirelites.com\/cart","u":"68d11277a30c","p":"cart"};</script>
vendor: 1 bytes, line 1046
1046
1047<script>window.ShopifyPaypalV4VisibilityTracking = true;</script>
vendor: 1 bytes, line 1047
1047
1048<script id="captcha-bootstrap">!function(){'use strict';const t='contact',e='account',n='new_comment',o=[[t,t],['blogs',n],['comments',n],[t,'customer']],c=[[e,'customer_login'],[e,'guest_login'],[e,'recover_customer_password'],[e,'create_customer']],r=t=>t.map((([t,e])=>`form[action*='/${t}']:not([data-nocaptcha='true']) input[name='form_type'][value='${e}']`)).join(','),a=t=>()=>t?[...document.querySelectorAll(t)].map((t=>t.form)):[];function s(){const t=[...o],e=r(t);return a(e)}const i='password',u='form_key',d=['recaptcha-v3-token','g-recaptcha-response','h-captcha-response',i],f=()=>{try{return window.sessionStorage}catch{return}},m='__shopify_v',_=t=>t.elements[u];function p(t,e,n=!1){try{const o=window.sessionStorage,c=JSON.parse(o.getItem(e)),{data:r}=function(t){const{data:e,action:n}=t;return t[m]||n?{data:e,action:n}:{data:t,action:n}}(c);for(const[e,n]of Object.entries(r))t.elements[e]&&(t.elements[e].value=n);n&&o.removeItem(e)}catch(o){console.error('form repopulation failed',{error:o})}}const l='form_type',E='cptcha';function T(t){t.dataset[E]=!0}const w=window,h=w.document,L='Shopify',v='ce_forms',y='captcha';let A=!1;((t,e)=>{const n=(g='f06e6c50-85a8-45c8-87d0-21a2b65856fe',I='https://cdn.shopify.com/shopifycloud/storefront-forms-hcaptcha/ce_storefront_forms_captcha_hcaptcha.v1.5.3.iife.js',D={infoText:'Protected by hCaptcha',privacyText:'Privacy',termsText:'Terms'},(t,e,n)=>{const o=w[L][v],c=o.bindForm;if(c)return c(t,g,e,D).then(n);var r;o.q.push([[t,g,e,D],n]),r=I,A||(h.body.append(Object.assign(h.createElement('script'),{id:'captcha-provider',async:!0,src:r})),A=!0)});var g,I,D;w[L]=w[L]||{},w[L][v]=w[L][v]||{},w[L][v].q=[],w[L][y]=w[L][y]||{},w[L][y].protect=function(t,e){n(t,void 0,e),T(t)},Object.freeze(w[L][y]),function(t,e,n,w,h,L){const[v,y,A,g]=function(t,e,n){const i=e?o:[],u=t?c:[],d=[...i,...u],f=r(d),m=r(i),_=r(d.filter((([t,e])=>n.includes(e))));return[a(f),a(m),a(_),s()]}(w,h,L),I=t=>{const e=t.target;return e instanceof HTMLFormElement?e:e&&e.form},D=t=>v().includes(t);t.addEventListener('submit',(t=>{const e=I(t);if(!e)return;const n=D(e)&&!e.dataset.hcaptchaBound&&!e.dataset.recaptchaBound,o=_(e),c=g().includes(e)&&(!o||!o.value);(n||c)&&t.preventDefault(),c&&!n&&(function(t){try{if(!f())return;!function(t){const e=f();if(!e)return;const n=_(t);if(!n)return;const o=n.value;o&&e.removeItem(o)}(t);const e=Array.from(Array(32),(()=>Math.random().toString(36)[2])).join('');!function(t,e){_(t)||t.append(Object.assign(document.createElement('input'),{type:'hidden',name:u})),t.elements[u].value=e}(t,e),function(t,e){const n=f();if(!n)return;const o=[...t.querySelectorAll(`input[type='${i}']`)].map((({name:t})=>t)),c=[...d,...o],r={};for(const[a,s]of new FormData(t).entries())c.includes(a)||(r[a]=s);n.setItem(e,JSON.stringify({[m]:1,action:t.action,data:r}))}(t,e)}catch(e){console.error('failed to persist form',e)}}(e),e.submit())}));const S=(t,e)=>{t&&!t.dataset[E]&&(n(t,e.some((e=>e===t))),T(t))};for(const o of['focusin','change'])t.addEventListener(o,(t=>{const e=I(t);D(e)&&S(e,y())}));const B=e.get('form_key'),M=e.get(l),P=B&&M;t.addEventListener('DOMContentLoaded',(()=>{const t=y();if(P)for(const e of t)e.elements[l].value===M&&p(e,B);[...new Set([...A(),...v().filter((t=>'true'===t.dataset.shopifyCaptcha))])].forEach((e=>S(e,t)))}))}(h,new URLSearchParams(w.location.search),n,t,e,['guest_login'])})(!0,!0)}();</script>
vendor: 1 bytes, line 1048
1048
1049<script integrity="sha256-JjoPp5ZfB1sSAs5SQaol1x1GgvveM+BgmRzyDexInEQ=" data-source-attribution="shopify.loadfeatures" defer="defer" src="//foxfirelites.com/cdn/shopifycloud/storefront/assets/storefront/load_feature-1bd60354.js" crossorigin="anonymous"></script>
vendor: 1 bytes, line 1049
1049
1050<script>(function () {var userAgent = navigator.userAgent;var platform = navigator.platform;var maxTouchPoints = navigator.maxTouchPoints || 0;var isIOS = /iPad|iPhone|iPod/.test(platform) || (platform === 'MacIntel' && maxTouchPoints > 1);var isMacSafari = platform.indexOf('Mac') === 0 && /Safari/.test(userAgent) && !/Chrome|Chromium|CriOS|FxiOS|Edg|OPR|Android/.test(userAgent);var isAppleSafari = isIOS || isMacSafari;if (isAppleSafari) {fetch('/sf_private_access_tokens' + location.search).catch(function () {});}function browserMajorVersion(pattern) {var match = userAgent.match(pattern);return match ? parseInt(match[1], 10) : null;}function shouldLoadAutosizesPolyfill() {if (!window.PerformanceObserver?.supportedEntryTypes?.includes('paint')) {return false;}var chromeVersion = browserMajorVersion(/Chrome\/(\d+)/);if (chromeVersion !== null) {return chromeVersion < 126;}var firefoxVersion = browserMajorVersion(/Firefox\/(\d+)/);if (firefoxVersion !== null) {return firefoxVersion < 150;}var safariVersion = isAppleSafari ? browserMajorVersion(/Version\/(\d+).*Safari\//) : null;if (safariVersion !== null) {return safariVersion < 27;}return true;}if (shouldLoadAutosizesPolyfill()) {var autosizesScript = document.createElement('script');autosizesScript.async = true;autosizesScript.crossOrigin = 'anonymous';autosizesScript.src = "//foxfirelites.com/cdn/shopifycloud/storefront/assets/storefront/autosizes-84416378.js";(document.head || document.documentElement).appendChild(autosizesScript);}window.ShopifyAnalytics = window.ShopifyAnalytics || {};window.ShopifyAnalytics.performance = window.ShopifyAnalytics.performance || {};(function () {var LONG_FRAME_THRESHOLD = 50;var longAnimationFrames = [];var activeRafId = null;function collectLongFrames() {var previousTime = null;function rafMonitor(now) {if (activeRafId === null) {return;}var delta = now - previousTime;if (delta > LONG_FRAME_THRESHOLD) {longAnimationFrames.push({startTime: previousTime,endTime: now,});}previousTime = now;activeRafId = requestAnimationFrame(rafMonitor);}previousTime = performance.now();activeRafId = requestAnimationFrame(rafMonitor);}if (!window.PerformanceObserver?.supportedEntryTypes?.includes('long-animation-frame')) {collectLongFrames();var timeoutId = setTimeout(function () {cancelAnimationFrame(activeRafId);}, 10000);window.ShopifyAnalytics.performance.getLongAnimationFrames = function (stopCollection) {if (stopCollection === undefined) {stopCollection = false;}if (stopCollection) {clearTimeout(timeoutId);cancelAnimationFrame(activeRafId);}return longAnimationFrames;};}})();})();</script>
1050<script crossorigin="anonymous" defer="defer" src="//foxfirelites.com/cdn/shopifycloud/storefront/assets/shopify_pay/storefront-f0e26bdf.js?v=20250812"></script>
vendor: 1 bytes, line 1050
1050
1051<script id="shopify-origin-trials" async="async" integrity="sha256-qJbe/jEZBHtr5W/BlA2cKAz3vkXu6vJQyLjgvgCC86g=" src="//cdn.shopify.com/shopifycloud/storefront/assets/storefront/origin_trials-318ab40a.js" crossorigin="anonymous" onload="window.__shopifyOriginTrialsDone = true" onerror="window.__shopifyOriginTrialsDone = true"></script>
vendor: 1 bytes, line 1051
1051
1052<script> 1053 window.Shopify = window.Shopify || {}; 1054 window.Shopify.MCP = window.Shopify.MCP || {}; 1055 window.Shopify.MCP.enabled = true; 1056 window.Shopify.MCP.shop = "foxfirelites.myshopify.com"; 1057 window.Shopify.MCP.mcpEndpoint = "https:\/\/foxfirelites.com\/api\/mcp"; 1058 window.Shopify.MCP.tools = [{"name":"search_shop_policies_and_faqs","description":"Used to get facts about the stores policies, products, or services.\nSome examples of questions you can ask are:\n - What is your return policy?\n - What is your shipping policy?\n - What is your phone number?\n - What are your hours of operation?\"\nSet policy_types to also get the store's written policies (full text and URL).\n","inputSchema":{"$schema":"https:\/\/json-schema.org\/draft\/2020-12\/schema","type":"object","properties":{"query":{"type":"string","description":"A natural language query."},"context":{"type":"string","description":"Additional information about the request such as user demographics, mood, location, or other relevant details that could help in tailoring the response appropriately."},"policy_types":{"type":"array","items":{"type":"string","enum":["refund","shipping","privacy","terms_of_service","terms_of_sale","subscription","legal_notice","contact"]},"description":"Policy kinds to fetch, chosen from the user's question â e.g. [\"refund\"] for returns\/exchanges\/damaged items, [\"contact\"] for phone\/hours\/address. Include every kind the question touches. Omit it to get only FAQ answers."}},"required":["query"]}}]; 1059</script>
vendor: 1 bytes, line 1059
1059
1060<script>(()=>{var d="shopify:webmcp_adapter_loaded",n=Symbol.for("shopify.webmcp_adapter_loading");function s(c,a,{win:r=window,doc:o=document}={}){function p(){try{return r.localStorage.getItem(d)==="true"}catch{return!1}}function l(){try{r.localStorage.setItem(d,"true")}catch{}}function u(){return typeof(o.modelContext||r.navigator?.modelContext)?.registerTool=="function"}function f(){if(r[n]||!u())return;let t=o.head||o.getElementsByTagName("head")[0];if(!t)return;let e=o.createElement("script");e.type="module",e.crossOrigin="anonymous",a&&(e.integrity=a),e.src=c,e.addEventListener("load",l,{once:!0}),e.addEventListener("error",()=>{r[n]=!1},{once:!0}),t.appendChild(e),r[n]=!0}function _(t){let e=o.getElementById("shopify-origin-trials");if(!e||r.__shopifyOriginTrialsDone){t();return}e.addEventListener("load",t,{once:!0}),e.addEventListener("error",t,{once:!0})}function i(){_(()=>r.setTimeout(f,0))}function m(){o.addEventListener("DOMContentLoaded",i,{once:!0})}p()?i():m()}s("\/\/foxfirelites.com\/cdn\/shopifycloud\/storefront\/assets\/storefront\/webmcp-f427de6a.js","sha256-ypGF+5vIq4Psw4WG7nsVtdd\/TCfsJWnrNuACdqLCElY=");})(); 1061</script>
vendor: 1 bytes, line 1061
1061
1062<script data-source-attribution="shopify.dynamic_checkout.dynamic.init">var Shopify=Shopify||{};Shopify.PaymentButton=Shopify.PaymentButton||{isStorefrontPortableWallets:!0,init:function(){window.Shopify.PaymentButton.init=function(){};var t=document.createElement("script");t.src="https://foxfirelites.com/cdn/shopifycloud/portable-wallets/latest/portable-wallets.en.js",t.type="module",document.head.appendChild(t)}}; 1063</script>
vendor: 1 bytes, line 1063
1063
1064<script data-source-attribution="shopify.dynamic_checkout.buyer_consent"> 1065 function portableWalletsHideBuyerConsent(e){var t=document.getElementById("shopify-buyer-consent"),n=document.getElementById("shopify-subscription-policy-button");t&&n&&(t.classList.add("hidden"),t.setAttribute("aria-hidden","true"),n.removeEventListener("click",e))}function portableWalletsShowBuyerConsent(e){var t=document.getElementById("shopify-buyer-consent"),n=document.getElementById("shopify-subscription-policy-button");t&&n&&(t.classList.remove("hidden"),t.removeAttribute("aria-hidden"),n.addEventListener("click",e))}window.Shopify?.PaymentButton&&(window.Shopify.PaymentButton.hideBuyerConsent=portableWalletsHideBuyerConsent,window.Shopify.PaymentButton.showBuyerConsent=portableWalletsShowBuyerConsent); 1066</script>
vendor: 1 bytes, line 1066
1066
1067<script data-source-attribution="shopify.dynamic_checkout.cart.bootstrap">document.addEventListener("DOMContentLoaded",(function(){function t(){return document.querySelector("shopify-accelerated-checkout-cart, shopify-accelerated-checkout")}if(t())Shopify.PaymentButton.init();else{new MutationObserver((function(e,n){t()&&(Shopify.PaymentButton.init(),n.disconnect())})).observe(document.body,{childList:!0,subtree:!0})}})); 1068</script>
1068 1069<link id="shopify-accelerated-checkout-styles" rel="stylesheet" media="screen" href="https://foxfirelites.com/cdn/shopifycloud/portable-wallets/latest/accelerated-checkout-backwards-compat.css" crossorigin="anonymous"> 1070<style id="shopify-accelerated-checkout-cart"> 1071 #shopify-buyer-consent { 1072 margin-top: 1em; 1073 display: inline-block; 1074 width: 100%; 1075} 1076 1077#shopify-buyer-consent.hidden { 1078 display: none; 1079} 1080 1081#shopify-subscription-policy-button { 1082 background: none; 1083 border: none; 1084 padding: 0; 1085 text-decoration: underline; 1086 font-size: inherit; 1087 cursor: pointer; 1088} 1089 1090#shopify-subscription-policy-button::before { 1091 box-shadow: none; 1092} 1093 1094 </style> 1095<link rel="compression-dictionary" href="//foxfirelites.com/cdn/shop/t/18/compiled_assets/styles.css?v=55596397364742937191790694102" crossorigin="anonymous"> 1096<link rel="stylesheet" media="screen" href="//foxfirelites.com/cdn/shop/t/18/compiled_assets/styles.css?v=55596397364742937191790694102&subset=AAAAAAAAAAAAAAAAAAE" crossorigin="anonymous">
1097<script id="shopify-cfh-end">window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.end');</script>
1097 1098 1099 1100 1101 1102 1103 1104
1104<script type="text/javascript"> 1105 1106 window.__shgMoneyFormat = window.__shgMoneyFormat || {"USD":{"currency":"USD","currency_symbol":"$","currency_symbol_location":"left","decimal_places":2,"decimal_separator":".","thousands_separator":","}}; 1107 1108 window.__shgCurrentCurrencyCode = window.__shgCurrentCurrencyCode || { 1109 currency: "USD", 1110 currency_symbol: "$", 1111 decimal_separator: ".", 1112 thousands_separator: ",", 1113 decimal_places: 2, 1114 currency_symbol_location: "left" 1115 }; 1116 </script>
1116 1117 1118 1119 1120 <link href="//foxfirelites.com/cdn/shop/t/18/assets/stylesheet-tags.css?v=14080549596461555881790694063" rel="stylesheet" type="text/css" media="all" /> 1121 1122 <style> 1123 :root { 1124 /* ------------------------------------------------------------ 1125 Typography 1126 ------------------------------------------------------------ */ 1127 /* Body */ 1128 --element-text-font-family--body: Lato, sans-serif; 1129 --element-text-font-weight--body: 400; 1130 --element-text-font-size--rte-body: 16px; 1131 --element-text-line-height--body: var(--line-height-lg); 1132 /* Headings */ 1133 --element-text-font-family--heading: Lato, sans-serif; 1134 --element-text-font-weight--heading: 400; 1135 --element-text-letter-spacing--heading: 0.02em; 1136 --element-text-text-transform--heading: uppercase;--element-text-font-size--heading-xl: 31.5px; 1137 @media screen and (max-width: 719px) { 1138 --element-text-font-size--heading-xl: 27px; 1139 }/* Buttons */ 1140 --element-button-font-size: 13px; 1141 --element-button-radius: 3px; 1142 --element-badge-radius: 0px; 1143 --element-badge-px: var(--size-2); 1144 --element-badge-py: var(--size-0-5); 1145 1146 /* ------------------------------------------------------------ 1147 Colors 1148 ------------------------------------------------------------ */ 1149 --color-primary: #121212; 1150 --color-secondary: #ffffff; 1151 --root-color-primary: #121212; 1152 --root-color-secondary: #ffffff; 1153 --element-text-color: #121212; 1154 --color-sale-tag-text: #fff ; 1155 --color-sale-tag: #cc1313; 1156 } 1157 1158 /* Override Shopify Payment Button styles */ 1159 .shopify-payment-button .shopify-payment-button__button--unbranded, 1160 .shopify-payment-button .shopify-payment-button__button { 1161 --element-text-line-height--body-md: 1; 1162 --element-button-text-transform: none; 1163 --element-button-letter-spacing: 0.0em; 1164 --element-button-font-family: Lato, sans-serif; 1165 --color-primary: #cc1313; 1166 border: none!important; 1167 } 1168 1169 .add-to-cart-button{ 1170 --element-text-line-height--body-md: 1; 1171 --element-button-font-size: var(--font-size-button-large); 1172 --element-button-text-transform: none; 1173 --element-button-letter-spacing: 0.0em; 1174 --element-button-font-family: Lato, sans-serif; 1175 --element-text-font-weight: 700; 1176 --element-text-color: #ffffff; 1177 --element-button-color-secondary: #121212; 1178 box-shadow: inset 0 0 0 1px #121212; 1179 } 1180 1181 .add-to-cart-button:focus-visible{ 1182 box-shadow: 0 0 0 2px #fff, 0 0 0 5px #19f6, 0 3px 8px #0000001a; 1183 } 1184 1185 .add-to-cart-button:not(.element-button--inverted) { 1186 --element-button-color-primary: #121212; 1187 --element-button-color-secondary: #121212; 1188 } 1189 1190 .element-button{ 1191 box-sizing: border-box; 1192 } 1193 1194 .product-title{ 1195 --element-text-color: #121212; 1196 } 1197 1198 .vendor{ 1199 --element-text-color: #121212; 1200 text-decoration: none; 1201 } 1202 1203 .sale-price{ 1204 --element-text-color: #cc1313; 1205 } 1206 1207 .compare-at-price{ 1208 --element-text-color: #111111; 1209 } 1210 1211 .variant-option-value-name-selected{ 1212 --element-button-color-primary: white!important; 1213 --element-button-color-secondary: #121212!important; 1214 } 1215 1216 .sku{ 1217 --element-text-color: #111111; 1218 } 1219 1220 .inventory-status--low-stock { 1221 --element-text-color: #cc1313; 1222 } 1223 1224 .inventory-status--in-stock { 1225 --element-text-color: #268c0b; 1226 } 1227 1228 .inventory-status--sold-out { 1229 --element-text-color: #121212; 1230 } 1231 1232 .overlay-lightbox__overlay { 1233 z-index: 10000; 1234 } 1235 1236 .element-text--rte ul { 1237 padding-left: 20px; 1238 margin: 1rem 0; 1239 } 1240 1241 .element-text--rte table { 1242 display: block; 1243 border-collapse: collapse; 1244 width: fit-content; 1245 max-width: 100%; 1246 height: auto; 1247 overflow: auto; 1248 white-space: nowrap; 1249 box-shadow: 0 1px 4px rgba(0, 0, 0, 0.1); 1250 } 1251 1252 .element-text--rte table th, 1253 .element-text--rte table td { 1254 border: 1px solid rgba(0, 0, 0, 0.1); 1255 } 1256 1257 .element-text--rte table th { 1258 font-family: var(--element-text-font-family--heading);
1259 font-weight: var(--element-text-font-weight--heading); 1260 font-size: var(--element-text-font-size--rte-body); 1261 padding: 8px; 1262 text-align: left; 1263 color: var(--color-primary); 1264 } 1265 1266 .element-text--rte table td { 1267 font-size: var(--element-text-font-size--rte-body); 1268 padding: 0.75rem 1rem; 1269 } 1270 </style> 1271 1272 <link href="//foxfirelites.com/cdn/shop/t/18/assets/theme.css?v=41735844184499907181791212955" rel="stylesheet" type="text/css" media="all" /> 1273 1274 1275 <link href="//foxfirelites.com/cdn/shop/t/18/assets/ripple.css?v=100240391239311985871790694100" rel="stylesheet" type="text/css" media="all" /> 1276 1277 1278 1279
1279<script> 1280 window.Theme = window.Theme || {}; 1281 window.Theme.version = '13.0.1'; 1282 window.Theme.name = 'Empire'; 1283 window.Theme.routes = { 1284 "root_url": "/", 1285 "account_url": "/account", 1286 "account_login_url": "/account/login", 1287 "account_logout_url": "/account/logout", 1288 "account_register_url": "/account/register", 1289 "account_addresses_url": "/account/addresses", 1290 "collections_url": "/collections", 1291 "all_products_collection_url": "/collections/all", 1292 "search_url": "/search", 1293 "predictive_search_url": "/search/suggest", 1294 "cart_url": "/cart", 1295 "cart_add_url": "/cart/add", 1296 "cart_change_url": "/cart/change", 1297 "cart_clear_url": "/cart/clear", 1298 "product_recommendations_url": "/recommendations/products", 1299 }; 1300 </script>
1300 1301 1302 1303 1304 1305
1306<script type="text/javascript"> 1307 1308 window.SHG_CUSTOMER = null; 1309 1310</script>
1310 1311 1312 1313 1314 1315 1316 1317 1318<!-- BEGIN app block: shopify://apps/yotpo-product-reviews/blocks/settings/eb7dfd7d-db44-4334-bc49-c893b51b36cf --> 1319 1320
1321<script type="text/javascript"> 1322 (function e(){var e=document.createElement("script"); 1323 e.type="text/javascript",e.async=true, 1324 e.src="//staticw2.yotpo.com//widget.js?lang=en"; 1325 var t=document.getElementsByTagName("script")[0]; 1326 t.parentNode.insertBefore(e,t)})(); 1327</script>
1327 1328 1329 1330 1331 1332<!-- END app block --><!-- BEGIN app block: shopify://apps/yotpo-product-reviews/blocks/reviews_tab/eb7dfd7d-db44-4334-bc49-c893b51b36cf --> 1333 1334 1335 1336<!-- END app block --><!-- BEGIN app block: shopify://apps/patrol/blocks/theme-injection/019c9621-793f-7152-a8bf-bac8d71d9665 --> 1337 1338 1339
1340<script> 1341 window.__patrolConsentPopupActive = false; 1342 window.__patrolConsentAppearance = null; 1343 window.__patrolPreviewScriptUrl = "https:\/\/cdn.shopify.com\/extensions\/01a112bf-11a4-7c62-8bc0-61a9aa2231f5\/patrol-90\/assets\/patrol-preview.js"; 1344</script>
1344 1345 1346<!-- END app block -->
1346<script src="https://cdn.shopify.com/extensions/01a112bf-11a4-7c62-8bc0-61a9aa2231f5/patrol-90/assets/patrol-modules.js" type="text/javascript" defer="defer"></script>
1346 1347<link href="https://monorail-edge.shopifysvc.com" rel="dns-prefetch">
1348<script>(function(){if ("sendBeacon" in navigator && "performance" in window) {try {var session_token_from_headers = performance.getEntriesByType('navigation')[0].serverTiming.find(x => x.name == '_s').description;} catch {var session_token_from_headers = undefined;}var session_cookie_matches = document.cookie.match(/_shopify_s=([^;]*)/);var session_token_from_cookie = session_cookie_matches && session_cookie_matches.length === 2 ? session_cookie_matches[1] : "";var session_token = session_token_from_headers || session_token_from_cookie || "";function handle_abandonment_event(e) {var entries = performance.getEntries().filter(function(entry) {return /monorail-edge.shopifysvc.com/.test(entry.name);});if (!window.abandonment_tracked && entries.length === 0) {window.abandonment_tracked = true;var currentMs = Date.now();var navigation_start = performance.timing.navigationStart;var payload = {shop_id: 53362458807,url: window.location.href,navigation_start,duration: currentMs - navigation_start,session_token,page_type: "cart"};window.navigator.sendBeacon("https://monorail-edge.shopifysvc.com/v1/produce", JSON.stringify({schema_id: "online_store_buyer_site_abandonment/1.1",payload: payload,metadata: {event_created_at_ms: currentMs,event_sent_at_ms: currentMs}}));}}window.addEventListener('pagehide', handle_abandonment_event);}}());</script>
vendor: 1 bytes, line 1348
1348
1349<script> 1350 window.__TREKKIE_SHIM_QUEUE = window.__TREKKIE_SHIM_QUEUE || []; 1351</script>
vendor: 1 bytes, line 1351
1351
1352<script>(function(){var wpmLoader=function(){"use strict";var e=/Googlebot|Storebot-Google|bingbot|Baiduspider|YandexBot|DuckDuckBot|Slurp|facebookexternalhit|Twitterbot|LinkedInBot|Applebot|AdsBot-Google|Mediapartners-Google|APIs-Google|PetalBot|SemrushBot|AhrefsBot|MJ12bot|DotBot|Acunetix|PerplexityBot|Perplexity-User/i,t=/bytedance/i;function i(){try{var e=document.cookie;if(!e||"string"!=typeof e)return;for(var t=0,i=e.split(";");t<i.length;t++){var n=i[t],r=n.indexOf("=");if(-1!==r){var o=n.slice(0,r).trim();if(o){var a=void 0;try{a=decodeURIComponent(o)}catch(e){a=o}if("_shopify_s"===a){var d=n.slice(r+1).trim();try{return decodeURIComponent(d)}catch(e){return d}}}}}return}catch(e){return}}function n(e){try{"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn(e)}catch(e){}}function r(e,t){return"string"==typeof e&&e.length>0&&e.length<=t?e:void 0}function o(e){var t;switch(null==(t=null==e?void 0:e.navigation)?void 0:t.type){case 0:return"navigate";case 1:return"reload";case 2:return"back_forward";default:return}}function a(){var e,t,i;try{var n=null==(i=null==(t=null==(e=self.ShopifyAnalytics)?void 0:e.lib)?void 0:t.trekkie)?void 0:i.state;return"awaiting-consent"===n||"initialized"===n?n:void 0}catch(e){return}}return function(d,s,u,l){var c=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{};try{var p=c.trekkieShim;!0!==p&&"true"!==p||null!=window.__TREKKIE_SHIM_QUEUE||(window.__TREKKIE_SHIM_QUEUE=[])}catch(e){}var f,v,h,y,g=(v=(f={modern:/Edge?\/(1{2}[4-9]|1[2-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Firefox\/(1{2}[4-9]|1[2-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Chrom(ium|e)\/(9{2}|\d{3,})\.\d+(\.\d+|)|(Maci|X1{2}).+ Version\/(15\.\d+|(1[6-9]|[2-9]\d|\d{3,})\.\d+)([,.]\d+|)( \(\w+\)|)( Mobile\/\w+|) Safari\/|Chrome.+OPR\/(9{2}|\d{3,})\.\d+\.\d+|(CPU[ +]OS|iPhone[ +]OS|CPU[ +]iPhone|CPU IPhone OS|CPU iPad OS)[ +]+(15[._]\d+|(1[6-9]|[2-9]\d|\d{3,})[._]\d+)([._]\d+|)|Android:?[ /-](14[89]|1[5-9]\d|[2-9]\d{2}|\d{4,})(\.\d+|)(\.\d+|)|Android.+Firefox\/(15\d|1[6-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Android.+Chrom(ium|e)\/(14[89]|1[5-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|SamsungBrowser\/([2-9]\d|\d{3,})\.\d+/,legacy:/Edge?\/(1[6-9]|[2-9]\d|\d{3,})\.\d+(\.\d+|)|Firefox\/(5[4-9]|[6-9]\d|\d{3,})\.\d+(\.\d+|)|Chrom(ium|e)\/(5[1-9]|[6-9]\d|\d{3,})\.\d+(\.\d+|)([\d.]+$|.*Safari\/(?![\d.]+ Edge\/[\d.]+$))|(Maci|X1{2}).+ Version\/(10\.\d+|(1[1-9]|[2-9]\d|\d{3,})\.\d+)([,.]\d+|)( \(\w+\)|)( Mobile\/\w+|) Safari\/|Chrome.+OPR\/(3[89]|[4-9]\d|\d{3,})\.\d+\.\d+|(CPU[ +]OS|iPhone[ +]OS|CPU[ +]iPhone|CPU IPhone OS|CPU iPad OS)[ +]+(10[._]\d+|(1[1-9]|[2-9]\d|\d{3,})[._]\d+)([._]\d+|)|Android:?[ /-](14[89]|1[5-9]\d|[2-9]\d{2}|\d{4,})(\.\d+|)(\.\d+|)|Mobile Safari.+OPR\/([89]\d|\d{3,})\.\d+\.\d+|Android.+Firefox\/(15\d|1[6-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Android.+Chrom(ium|e)\/(14[89]|1[5-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Android.+(UC? ?Browser|UCWEB|U3)[ /]?(15\.([5-9]|\d{2,})|(1[6-9]|[2-9]\d|\d{3,})\.\d+)\.\d+|SamsungBrowser\/(5\.\d+|([6-9]|\d{2,})\.\d+)|Android.+MQ{2}Browser\/(14(\.(9|\d{2,})|)|(1[5-9]|[2-9]\d|\d{3,})(\.\d+|))(\.\d+|)|K[Aa][Ii]OS\/(3\.\d+|([4-9]|\d{2,})\.\d+)(\.\d+|)/}).modern,h=f.legacy,(y=navigator.userAgent).match(e)?"bot":y.match(v)?"modern":y.match(h)?"legacy":y.match(t)?"bot":"unknown"),m=function(e){var t,i,n=r(e,128);try{var a=window.performance,d=null==(t=null==a?void 0:a.getEntriesByType)?void 0:t.call(a,"navigation")[0];if(!d)return{requestId:n,navigationType:o(a)};var s="type"in d?r(d.type,64):void 0,u="serverTiming"in d&&Array.isArray(d.serverTiming)?d.serverTiming:[];return{requestId:null!=n?n:r(null==(i=u.find(function(e){return"requestID"===e.name}))?void 0:i.description,128),navigationType:s}}catch(e){return{requestId:n}}}(c.requestId),w=function(e){var t=e.version,r=e.browserTarget,o=e.surface,a=e.shopId,d=e.monorailEndpoint,s=window.location.href;return{emit:function(e){var u=e.status,l=e.errorMsg,c=e.failureReason,p=e.useKeepaliveFallback,f=void 0!==p&&p,v=e.navigationType,h=e.pagehidePersisted,y=e.requestId,g=e.trekkieState;if(d){var m,w;try{var b=(new Date).getTime();m=JSON.stringify({metadata:{event_sent_at_ms:b},events:[{schema_id:"web_pixels_manager_load/3.3",payload:{version:t,bundle_target:r,page_url:s,status:u,surface:o,error_msg:l,failure_reason:c,navigation_type:v,pagehide_persisted:h,request_id:y,trekkie_state:g,shop_id:a,visit_token:i()},metadata:{event_created_at_ms:b}}]})}catch(e){return}try{if("function"==typeof window.navigator.sendBeacon&&-1===(w=window.navigator.userAgent).indexOf("iPhone; CPU iPhone OS 12_")&&-1===w.indexOf("iPad; CPU OS 12_")&&-1===w.indexOf("iPod touch; CPU iPhone OS 12_")&&window.navigator.sendBeacon.bind(window.navigator)(d,m))return}catch(e){}if(f)try{"function"==typeof window.fetch&&window.fetch(d,{method:"POST",headers:{"Content-Type":"text/plain"},body:m,keepalive:!0}
1352).catch(function(){})}catch(e){}else try{var _=new XMLHttpRequest;_.open("POST",d,!0),_.setRequestHeader("Content-Type","text/plain"),_.send(m)}catch(e){n("[Web Pixels Manager] Got an unhandled error while logging to Monorail.")}}else n("[Web Pixels Manager] No Monorail endpoint provided, skipping logging.")}}}({version:u,browserTarget:g,surface:d.surface,shopId:d.shopId,monorailEndpoint:d.monorailEndpoint});if(Boolean(null==(_=null==(b=window.Shopify)?void 0:b.analytics)?void 0:_.replayQueue))w.emit({status:"setup-skipped",errorMsg:"replay queue already initialized."});else{var b,_;w.emit({status:"setup-started"}),window.Shopify=window.Shopify||{};var S=window.Shopify;S.analytics=S.analytics||{};var P=S.analytics;P.replayQueue=[],P.publish=function(e,t,i){return P.replayQueue.push([e,t,i]),!0};try{self.performance.mark("wpm:start")}catch(e){}var k,C="modern"===g?"modern":"legacy",E=(null!=l?l:{modern:"",legacy:""})[C],I=[(k={baseUrl:s,hashVersion:u,buildTarget:C}).baseUrl,"/wpm","/b",k.hashVersion,"modern"===k.buildTarget?"m":"l",".js"].join(""),O=!1,T=!1;try{c.browserTarget=g,function(){O=!0;try{window.addEventListener("pagehide",M)}catch(e){O=!1}}(),R(function(){try{R(x)}catch(e){D(e)}}),w.emit({status:"loading",requestId:m.requestId,navigationType:m.navigationType,trekkieState:a()})}catch(e){D(e)}}function U(){var e;if(q(),!function(){var e,t;return Boolean(null==(t=null==(e=window.Shopify)?void 0:e.analytics)?void 0:t.initialized)}()){var t,i,n;try{if("function"!=typeof(null==(e=window.webPixelsManager)?void 0:e.init))return void A();if(!(null!==(n=i=t=window.webPixelsManager.init(d))&&"function"!=typeof n&&Object(n)===n&&"publish"in i&&"function"==typeof i.publish&&"publishCustomEvent"in i&&"function"==typeof i.publishCustomEvent&&"visitor"in i&&"function"==typeof i.visitor))return void A()}catch(e){return void A(e)}var r=window.Shopify.analytics;r.replayQueue.forEach(function(e){var i=e[0],n=e[1],r=e[2];t.publishCustomEvent(i,n,r)}),r.replayQueue=[],r.publish=t.publishCustomEvent,r.visitor=t.visitor,r.initialized=!0}}function A(e){B("manager_api_unavailable",void 0===e?void 0:Q(e))}function x(){B("script_load_failed","".concat(I," has failed to load"))}function B(e,t){T||(T=!0,q(),w.emit({status:"failed",errorMsg:t,failureReason:e,requestId:m.requestId,navigationType:m.navigationType,trekkieState:a()}))}function M(e){O&&(q(),w.emit({status:"pagehide-while-loading",useKeepaliveFallback:!0,pagehidePersisted:e.persisted,requestId:m.requestId,navigationType:m.navigationType,trekkieState:a()}))}function q(){O=!1;try{window.removeEventListener("pagehide",M)}catch(e){}}function R(e){var t;!function(e){var t=e.src,i=e.async,n=void 0===i||i,r=e.onload,o=e.onerror,a=e.sri,d=e.scriptDataAttributes,s=void 0===d?{}:d,u=document.createElement("script"),l=document.querySelector("head"),c=document.querySelector("body");if(u.async=n,u.src=t,a&&(u.integrity=a,u.crossOrigin="anonymous"),s)for(var p in s)if(Object.prototype.hasOwnProperty.call(s,p))try{u.dataset[p]=String(s[p])}catch(e){}if(r&&u.addEventListener("load",r),o&&u.addEventListener("error",o),l)l.appendChild(u);else{if(!c)throw new Error("Did not find a head or body element to append the script");c.appendChild(u)}}({src:I,async:!0,onload:U,onerror:e,sri:(t=E,"string"==typeof t&&/^sha384-[A-Za-z0-9+/=]+$/.test(t)?E:""),scriptDataAttributes:c})}function D(e){B("script_append_failed",Q(e))}function Q(e){return e instanceof Error?e.message:"Unknown error"}}}();wpmLoader({shopId: 53362458807,storefrontBaseUrl: "https://foxfirelites.com",extensionsBaseUrl: "https://extensions.shopifycdn.com/cdn/shopifycloud/web-pixels-manager",monorailEndpoint: "https://foxfirelites.com/.well-known/shopify/monorail/unstable/produce_batch",surface: "storefront-renderer",enabledBetaFlags: ["4c64608a","16072cab"],webPixelsConfigList: [{"id":"3337257329","configuration":"{\"mailchimp_store_id\":\"store_xkk9edeh9yhyszj9rtqw\", \"mailchimp_user_id\":\"126869082\",\"mailchimp_list_id\":\"194a6ce533\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"e357a49eadeb6216a959d63fa3fb8f55","type":"APP","apiClientId":2585307,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":[]},"dataSharingState":"optimized","enabledFlags":["9a3ed68a"]},{"id":"901087601","configuration":"{\"config\":\"{\\\"google_tag_ids\\\":[\\\"G-0JGGWVQZH0\\\"],\\\"target_country\\\":\\\"US\\\",\\\"gtag_events\\\":[{\\\"type\\\":\\\"begin_checkout\\\",\\\"action_label\\\":\\\"G-0JGGWVQZH0\\\"},{\\\"type\\\":\\\"search\\\",\\\"action_label\\\":\\\"G-0JGGWVQZH0\\\"},{\\\"type\\\":\\\"remove_from_cart\\\",\\\"action_label\\\":\\\"G-0JGGWVQZH0\\\"},{\\\"type\\\":\\\"view_item\\\",\\\"action_label\\\":\\\"G-0JGGWVQZH0\\\"},{\\\"type\\\":\\\"add_shipping_info\\\",\\\"action_label\\\":\\\"G-0JGGWVQZH0\\\"},{\\\"type\\\":\\\"purchase\\\",\\\"action_label\\\":\\\"G-0JGGWVQZH0\\\"},{\\\"type\\\":\\\"page_view\\\",\\\"action_label\\\":\\\"G-0JGGWVQZH0\\\"},{\\\"type\\\":\\\"view_item_list\\\",\\\"action_label\\\":\\\"G-0JGGWVQZH0\\\"},{\\\"type\\\":\\\"add_payment_info\\\",\\\"action_label\\\":\\\"G-0JGGWVQZH0\\\"},{\\\"type\\\":\\\"add_to_cart\\\",\\\"action_label\\\":\\\"G-0JGGWVQZH0\\\"},{\\\"type\\\":\\\"view_cart\\\",\\\"action_label\\\":\\\"G-0JGGWVQZH0\\\"}],\\\"enable_monitoring_mode\\\":false}\"}","eventPayloadVersion":"v1","runtimeContext":"OPEN","scriptVersion":"a3321ca85cf5aaf6b57585fcd8d67b3a","type":"APP","apiClientId":1780363,"privacyPurposes":[],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized","enabledFlags":["9a3ed68a"]},{"id":"287670455","configuration":"{\"site_id\":\"2c4504af-88a3-4f09-beff-961938bd370a\",\"analytics_endpoint\"
1352:\"https:\\\/\\\/na.shgcdn3.com\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"695709fc3f146fa50a25299517a954f2","type":"APP","apiClientId":1158168,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_personal_data"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"},{"id":"shopify-app-pixel","configuration":"{}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"0530","apiClientId":"shopify-pixel","type":"APP","privacyPurposes":["ANALYTICS","MARKETING"]},{"id":"shopify-custom-pixel","eventPayloadVersion":"v1","runtimeContext":"LAX","scriptVersion":"0530","apiClientId":"shopify-pixel","type":"CUSTOM","privacyPurposes":["ANALYTICS","MARKETING"]}],isMerchantRequest: false,initData: {"shop":{"name":"FoxFire Safety Lites","paymentSettings":{"currencyCode":"USD"},"myshopifyDomain":"foxfirelites.myshopify.com","countryCode":"US","storefrontUrl":"https:\/\/foxfirelites.com"},"customer":null,"cart":null,"checkout":null,"productVariants":[],"products":[],"purchasingCompany":null},},"https://foxfirelites.com/cdn","7ec887c8w14f9f074p854094e1m1370c602",{"modern":"","legacy":""},{"trekkieShim":true,"agentContext":true,"apiClientId":"580111","facebookCapiEnabled":"false","themeId":"207850602865","themeStoreId":"838","themePublished":"true","eventMetadataId":"40a92c0e-57e1-41d2-9a28-10783721f779","pageType":"cart","shopId":"53362458807","storefrontBaseUrl":"https:\/\/foxfirelites.com","extensionBaseUrl":"https:\/\/extensions.shopifycdn.com\/cdn\/shopifycloud\/web-pixels-manager","surface":"storefront-renderer","enabledBetaFlags":"[\"4c64608a\", \"16072cab\"]","isMerchantRequest":"false","hashVersion":"7ec887c8w14f9f074p854094e1m1370c602","publish":"custom","events":"[[\"page_viewed\",{}]]"});})();</script>
1352<script> 1353 window.ShopifyAnalytics = window.ShopifyAnalytics || {}; 1354 window.ShopifyAnalytics.meta = window.ShopifyAnalytics.meta || {}; 1355 window.ShopifyAnalytics.meta.currency = 'USD'; 1356 var meta = {"page":{"pageType":"cart","requestId":"a2237326-bebd-4f2a-add7-9ec71180af33-1791596663"}}; 1357 for (var attr in meta) { 1358 window.ShopifyAnalytics.meta[attr] = meta[attr]; 1359 } 1360</script>
vendor: 1 bytes, line 1360
1360
1361<script class="analytics"> 1362 (function () { 1363 var customDocumentWrite = function(content) { 1364 var jquery = null; 1365 1366 if (window.jQuery) { 1367 jquery = window.jQuery; 1368 } else if (window.Checkout && window.Checkout.$) { 1369 jquery = window.Checkout.$; 1370 } 1371 1372 if (jquery) { 1373 jquery('body').append(content); 1374 } 1375 }; 1376 1377 var hasLoggedConversion = function(token) { 1378 if (token) { 1379 return document.cookie.indexOf('loggedConversion=' + token) !== -1; 1380 } 1381 return false; 1382 } 1383 1384 var setCookieIfConversion = function(token) { 1385 if (token) { 1386 var twoMonthsFromNow = new Date(Date.now()); 1387 twoMonthsFromNow.setMonth(twoMonthsFromNow.getMonth() + 2); 1388 1389 document.cookie = 'loggedConversion=' + token + '; expires=' + twoMonthsFromNow; 1390 } 1391 } 1392 1393 var trekkie = window.ShopifyAnalytics.lib = window.trekkie = window.trekkie || []; 1394 window.ShopifyAnalytics.lib.trekkie = window.trekkie; 1395 if (trekkie.integrations) { 1396 return; 1397 } 1398 trekkie.methods = [ 1399 'identify', 1400 'page', 1401 'ready', 1402 'track', 1403 'trackForm', 1404 'trackLink' 1405 ]; 1406 trekkie.factory = function(method) { 1407 return function() { 1408 var args = Array.prototype.slice.call(arguments); 1409 args.unshift(method); 1410 trekkie.push(args); 1411 if (method == 'track' || method == 'page') { 1412 var pageUrl; 1413 try { 1414 pageUrl = window.location.href; 1415 } catch (e) {} 1416 var pageReferrer; 1417 try { 1418 pageReferrer = document.referrer; 1419 } catch (e) {} 1420 try { 1421 if (window.__TREKKIE_SHIM_QUEUE == null) { 1422 window.__TREKKIE_SHIM_QUEUE = []; 1423 } 1424 window.__TREKKIE_SHIM_QUEUE.push({ 1425 from: 'trekkie-stub', 1426 method: method, 1427 args: args.slice(1), 1428 pageContext: { 1429 url: pageUrl, 1430 referrer: pageReferrer 1431 } 1432 }); 1433 } catch (e) { 1434 // no-op 1435 } 1436 } 1437 return trekkie; 1438 }; 1439 }; 1440 for (var i = 0; i < trekkie.methods.length; i++) { 1441 var key = trekkie.methods[i]; 1442 trekkie[key] = trekkie.factory(key); 1443 } 1444 trekkie.load = function(config) { 1445 trekkie.config = config || {}; 1446 trekkie.config.initialDocumentCookie = document.cookie; 1447 var first = document.getElementsByTagName('script')[0]; 1448var script = document.createElement('script'); 1449script.type = 'text/javascript'; 1450script.onerror = function(e) { 1451 var scriptFallback = document.createElement('script'); 1452 scriptFallback.type = 'text/javascript'; 1453 scriptFallback.onerror = function(error) { 1454 var Monorail = { 1455 produce: function produce(monorailDomain, schemaId, payload) { 1456 var currentMs = new Date().getTime(); 1457 var event = { 1458 schema_id: schemaId, 1459 payload: payload, 1460 metadata: { 1461 event_created_at_ms: currentMs, 1462 event_sent_at_ms: currentMs 1463 } 1464 }; 1465 return Monorail.sendRequest("https://" + monorailDomain + "/v1/produce", JSON.stringify(event)); 1466 }, 1467 sendRequest: function sendRequest(endpointUrl, payload) { 1468 // Try the sendBeacon API 1469 if (window && window.navigator && typeof window.navigator.sendBeacon === 'function' && typeof window.Blob === 'function' && !Monorail.isIos12()) { 1470 var blobData = new window.Blob([payload], { 1471 type: 'text/plain' 1472 }); 1473 1474 if (window.navigator.sendBeacon(endpointUrl, blobData)) { 1475 return true; 1476 } // sendBeacon was not successful 1477 1478 } // XHR beacon 1479 1480 var xhr = new XMLHttpRequest(); 1481 1482 try { 1483 xhr.open('POST', endpointUrl); 1484 xhr.setRequestHeader('Content-Type', 'text/plain'); 1485 xhr.send(payload); 1486 } catch (e) { 1487 console.log(e); 1488 } 1489 1490 return false; 1491 }, 1492 isIos12: function isIos12() { 1493 return window.navigator.userAgent.lastIndexOf('iPhone; CPU iPhone OS 12_') !== -1 || window.navigator.userAgent.lastIndexOf('iPad; CPU OS 12_') !== -1; 1494 } 1495 }; 1496 Monorail.produce('monorail-edge.shopifysvc.com', 1497 'trekkie_storefront_load_errors/1.1', 1498 {shop_id: 53362458807, 1499 theme_id: 207850602865, 1500 app_name: "storefront", 1501 context_url: window.location.href, 1502 source_url: "//foxfirelites.com/cdn/s/trekkie.storefront.51e69540e15035ae012ec8cc42e8f9cd792233a0.min.js"}); 1503 1504 }; 1505 scriptFallback.async = true; 1506 scriptFallback.src = '//foxfirelites.com/cdn/s/trekkie.storefront.51e69540e15035ae012ec8cc42e8f9cd792233a0.min.js'; 1507 first.parentNode.insertBefore(scriptFallback, first); 1508}; 1509script.async = true; 1510script.src = '//foxfirelites.com/cdn/s/trekkie.storefront.51e69540e15035ae012ec8cc42e8f9cd792233a0.min.js'; 1511first.parentNode.insertBefore(script, first); 1512 1513 }; 1514 trekkie.load( 1515 {"Trekkie":{"appName":"storefront","development":false,"defaultAttributes":{"shopId":53362458807,"isMerchantRequest":null,"themeId":207850602865,"themeCityHash":"6713508650300882134","contentLanguage":"en","currency":"USD","eventMetadataId":"40a92c0e-57e1-41
1515d2-9a28-10783721f779"},"isServerSideCookieWritingEnabled":true,"monorailRegion":"shop_domain","enabledBetaFlags":["764d78cb","4c64608a"]},"Session Attribution":{},"S2S":{"facebookCapiEnabled":false,"source":"trekkie-storefront-renderer","apiClientId":580111}} 1516 ); 1517 1518 var loaded = false; 1519 trekkie.ready(function() { 1520 if (loaded) return; 1521 loaded = true; 1522 1523 window.ShopifyAnalytics.lib = window.trekkie; 1524 1525 var originalDocumentWrite = document.write; 1526 document.write = customDocumentWrite; 1527 try { window.ShopifyAnalytics.merchantGoogleAnalytics.call(this); } catch(error) {}; 1528 document.write = originalDocumentWrite; 1529 1530 var match = window.location.pathname.match(/checkouts\/(.+)\/(thank_you|post_purchase)/) 1531 var token = match? match[1]: undefined; 1532 if (!hasLoggedConversion(token)) { 1533 setCookieIfConversion(token); 1534 1535 } 1536 }); 1537 1538 window.ShopifyAnalytics.lib.page(null,{"pageType":"cart","requestId":"a2237326-bebd-4f2a-add7-9ec71180af33-1791596663","shopifyEmitted":true}); 1539 1540 var eventsListenerScript = document.createElement('script'); 1541 eventsListenerScript.async = true; 1542 eventsListenerScript.src = "//foxfirelites.com/cdn/shopifycloud/storefront/assets/shop_events_listener-4e26a9ce.js"; 1543 document.getElementsByTagName('head')[0].appendChild(eventsListenerScript); 1544})();</script>
vendor: 1 bytes, line 1544
1544
1545<script 1546 defer 1547 src="https://foxfirelites.com/cdn/shopifycloud/perf-kit/shopify-perf-kit-3.10.1.min.js" 1548 data-application="storefront-renderer" 1549 data-shop-id="53362458807" 1550 data-render-region="gcp-us-central1" 1551 data-page-type="cart" 1552 data-theme-instance-id="207850602865" 1553 data-theme-name="Empire" 1554 data-theme-version="13.0.1" 1555 data-monorail-region="shop_domain" 1556 data-resource-timing-sampling-rate="10" 1557 data-shs="true" 1558 data-shs-beacon="true" 1559 data-shs-export-with-fetch="true" 1560 data-shs-logs-sample-rate="1" 1561 data-shs-beacon-endpoint="https://foxfirelites.com/api/collect" 1562></script>
vendor: 1 bytes, line 1562
1562
1563<script src="https://cdn.shopify.com/storefront/web-components/account.js" type="module" crossorigin fetchpriority="low" async></script>
1563<script id="shopify-customer-account-data" type="application/json">{"customer":null,"shop":{"id":"53362458807","customerAccountTranslations":[{"key":"account_menu.signed_out_state.sheet_title","value":"Sign in or create account"},{"key":"account_menu.signed_out_state.section_divider","value":"More ways to sign in"},{"key":"account_menu.signed_out_state.alternate_divider","value":"OR"},{"key":"account_menu.signed_out_state.email_field_label","value":"Email"},{"key":"account_menu.signed_out_state.orders_button","value":"Orders"},{"key":"account_menu.signed_out_state.profile_button","value":"Profile"},{"key":"account_menu.signed_out_state.shop_login_button","value":"Sign in with Shop"},{"key":"account_menu.signed_out_state.continue_with_google","value":"Continue with Google"},{"key":"account_menu.signed_out_state.continue_with_facebook","value":"Continue with Facebook"},{"key":"account_menu.signed_out_state.marketing_consent_label","value":"Email me with news and offers"},{"key":"account_menu.signed_in_state.greeting_with_name","value":"Hi, {{first_name}}"},{"key":"account_menu.signed_in_state.greeting_without_name","value":"Account"},{"key":"account_menu.signed_in_state.orders_button","value":"Orders"},{"key":"account_menu.signed_in_state.profile_button","value":"Profile"},{"key":"account_menu.location_picker.sheet_title","value":"Locations"},{"key":"account_menu.location_picker.search_field_placeholder","value":"Search"},{"key":"account_menu.aria_labels.close_menu","value":"Close menu"},{"key":"account_menu.aria_labels.back_to_main_menu","value":"Back to main menu from {{title}}"},{"key":"account_menu.aria_labels.open_submenu","value":"{{title}}, opens submenu"},{"key":"account_menu.aria_labels.loading_menu","value":"Loading menu"},{"key":"account_menu.aria_labels.loading","value":"Loading"},{"key":"account_menu.aria_labels.account","value":"Account"},{"key":"account_menu.aria_labels.sign_in_with_email","value":"Sign in with email"},{"key":"account_menu.aria_labels.sign_in","value":"Sign in"}],"socialLoginProviders":[{"handle":"Shop"}],"legacyCustomerAccounts":true,"signInLinksVisible":true,"b2bEnabled":true,"marketingConsentSigninEnabled":true,"marketingConsentPreselected":true},"visitor":{"country":"US","language":"en"}}</script>
1563 1564<meta name="shopify-y" content="e653df45-4535-48f7-a7ff-e9a0ed8273b9" data-expiration="1823154263000"><meta name="shopify-s" content="d929b01c-8810-4166-863b-1d244dd38783" data-expiration="1791598463000"> 1565</head> 1566 1567 <body class="template-cart" data-instant-allow-query-string > 1568
1568<script> 1569 document.documentElement.className=document.documentElement.className.replace(/\bno-js\b/,'js'); 1570 if(window.Shopify&&window.Shopify.designMode)document.documentElement.className+=' in-theme-editor'; 1571 if(('ontouchstart' in window)||window.DocumentTouch&&document instanceof DocumentTouch)document.documentElement.className=document.documentElement.className.replace(/\bno-touch\b/,'has-touch'); 1572 </script>
1572 1573 1574 1575 <svg 1576 class="icon-star-reference" 1577 aria-hidden="true" 1578 focusable="false" 1579 role="presentation" 1580 xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="3 3 17 17" fill="none" 1581 > 1582 <symbol id="icon-star"> 1583 <rect class="icon-star-background" width="20" height="20" fill="currentColor"/> 1584 <path d="M10 3L12.163 7.60778L17 8.35121L13.5 11.9359L14.326 17L10 14.6078L5.674 17L6.5 11.9359L3 8.35121L7.837 7.60778L10 3Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" fill="none"/> 1585 </symbol> 1586 <clipPath id="icon-star-clip"> 1587 <path d="M10 3L12.163 7.60778L17 8.35121L13.5 11.9359L14.326 17L10 14.6078L5.674 17L6.5 11.9359L3 8.35121L7.837 7.60778L10 3Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> 1588 </clipPath> 1589 </svg> 1590 1591 1592 1593 <a class="skip-to-main" href="#site-main">Skip to content</a> 1594 1595 <!-- BEGIN sections: header-group --> 1596<div id="shopify-section-sections--32261645664625__announcement-bar" class="shopify-section shopify-section-group-header-group site-announcement">
1596<script 1597 type="application/json" 1598 data-section-id="sections--32261645664625__announcement-bar" 1599 data-section-type="static-announcement"> 1600</script>
1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 <div 1612 class=" 1613 announcement-bar 1614 1615 " 1616 style=" 1617 color: #dddddd; 1618 background: #cc1313; 1619 " 1620 data-announcement-bar 1621 > 1622 1623 <a 1624 class="announcement-bar-link" 1625 href="/pages/foxfire-portable-safety-flashers" 1626 ></a> 1627 1628 1629 1630 <div class="announcement-bar-text"> 1631 NEW! FL263 SIGNAL LIGHT 1632 </div> 1633 1634 1635 <div class="announcement-bar-text-mobile"> 1636 1637 NEW! FL263 SIGNAL LIGHT 1638 1639 </div> 1640 </div> 1641 1642 1643 1644</div><div id="shopify-section-sections--32261645664625__utility-bar" class="shopify-section shopify-section-group-header-group"><style data-shopify> 1645 .utility-bar { 1646 background-color: #121212; 1647 border-bottom: 1px solid rgba(0,0,0,0); 1648 } 1649 1650 .utility-bar .social-link, 1651 .utility-bar__menu-link { 1652 color: #ffffff; 1653 } 1654 1655 .utility-bar .disclosure__toggle { 1656 --disclosure-toggle-text-color: #ffffff; 1657 --disclosure-toggle-background-color: #121212; 1658 } 1659 1660 .utility-bar .disclosure__toggle:hover { 1661 --disclosure-toggle-text-color: #ffffff; 1662 } 1663 1664 .utility-bar .social-link:hover, 1665 .utility-bar__menu-link:hover { 1666 color: #ffffff; 1667 } 1668 1669 .utility-bar .disclosure__toggle::after { 1670 --disclosure-toggle-svg-color: #ffffff; 1671 } 1672 1673 .utility-bar .disclosure__toggle:hover::after { 1674 --disclosure-toggle-svg-color: #ffffff; 1675 } 1676</style> 1677
1678<script 1679 type="application/json" 1680 data-section-type="static-utility-bar" 1681 data-section-id="sections--32261645664625__utility-bar" 1682 data-section-data 1683> 1684 { 1685 "settings": { 1686 "mobile_layout": "below" 1687 } 1688 } 1689</script>
1689 1690 1691 1692 1693 1694 <section 1695 class=" 1696 utility-bar 1697 1698 " 1699 data-utility-bar 1700 > 1701 <div class="utility-bar__content"> 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 <div class="utility-bar__content-left"> 1788 1789 1790 1791 </div> 1792 1793 <div class="utility-bar__content-right" data-disclosure-items> 1794 1795 1796 1797 1798 <div class="shopify-cross-border"> 1799 1800 1801 1802 </div> 1803 1804 1805 1806 </div> 1807 </div> 1808 </section> 1809 1810 1811 1812 1813 1814 1815 <div class="utility-bar__mobile-disclosure" style="display: none;" data-utility-bar-mobile> 1816 1817 1818 1819 <span class="utility-bar__mobile__border"></span> 1820 1821 <div class="utility-bar__disclosure--mobile"> 1822 1823 <div class="shopify-cross-border"> 1824 1825 1826 1827 </div> 1828 1829 1830 </div> 1831 1832 </div> 1833 1834 1835</div><div id="shopify-section-sections--32261645664625__header" class="shopify-section shopify-section-group-header-group site-header-wrapper"> 1836
1837<script 1838 type="application/json" 1839 data-section-id="sections--32261645664625__header" 1840 data-section-type="static-header" 1841 data-section-data> 1842 { 1843 "settings": { 1844 "sticky_header": true, 1845 "has_box_shadow": false, 1846 "live_search": { 1847 "enable": true, 1848 "money_format": "${{amount}}", 1849 "show_mobile_search_bar": false 1850 } 1851 } 1852 } 1853</script>
1853 1854 1855 1856 1857 1858 1859<style data-shopify> 1860 .site-logo { 1861 max-width: 150px; 1862 } 1863 1864 .site-logo-image { 1865 max-height: 40px; 1866 } 1867</style> 1868 1869<header 1870 class="site-header site-header-nav--open" 1871 role="banner" 1872 data-site-header 1873> 1874 <div 1875 class=" 1876 site-header-main 1877 1878 site-header--full-width 1879 1880 " 1881 data-site-header-main 1882 data-site-header-sticky 1883 1884 data-site-header-mobile-search-button 1885 1886 > 1887 <button class="site-header-menu-toggle" data-menu-toggle> 1888 <div class="site-header-menu-toggle--button" tabindex="-1"> 1889 <span class="toggle-icon--bar toggle-icon--bar-top"></span> 1890 <span class="toggle-icon--bar toggle-icon--bar-middle"></span> 1891 <span class="toggle-icon--bar toggle-icon--bar-bottom"></span> 1892 <span class="visually-hidden">Menu</span> 1893 </div> 1894 </button> 1895 1896 1897 1898 1899 1900 <button 1901 class="site-header-mobile-search-button" 1902 data-mobile-search-button 1903 > 1904 1905 <div class="site-header-mobile-search-button--button" tabindex="-1"> 1906 <svg 1907 aria-hidden="true" 1908 focusable="false" 1909 role="presentation" 1910 xmlns="http://www.w3.org/2000/svg" 1911 width="23" 1912 height="24" 1913 fill="none" 1914 viewBox="0 0 23 24" 1915> 1916 <path d="M21 21L15.5 15.5" stroke="currentColor" stroke-width="2" stroke-linecap="round"/> 1917 <circle cx="10" cy="9" r="8" stroke="currentColor" stroke-width="2"/> 1918</svg> 1919 1920 <span class="visually-hidden">Search</span> 1921 </div> 1922 1923 </button> 1924 1925 1926 1927 <div 1928 class=" 1929 site-header-main-content 1930 1931 " 1932 > 1933 <div class="site-header-logo"> 1934 <a 1935 class="site-logo" 1936 href="/"> 1937 1938 1939 1940 1941 1942 1943 1944 1945 <img 1946 1947 src="//foxfirelites.com/cdn/shop/files/FOXFIRELOGO_whitetext_red_x_987x150.png?v=1716222049" 1948 1949 alt="" 1950 1951 1952 data-rimg 1953 srcset="//foxfirelites.com/cdn/shop/files/FOXFIRELOGO_whitetext_red_x_987x150.png?v=1716222049 1x, //foxfirelites.com/cdn/shop/files/FOXFIRELOGO_whitetext_red_x_997x152.png?v=1716222049 1.01x" 1954 1955 1956 class="site-logo-image" 1957 style=" 1958 object-fit:cover;object-position:50.0% 50.0%; 1959 1960" 1961 1962 > 1963 1964 1965 1966 1967 1968 </a> 1969 </div> 1970 1971 1972 1973 1974 1975 1976 1977<div class="live-search" data-live-search><form 1978 class=" 1979 live-search-form 1980 form-fields-inline 1981 1982 " 1983 action="/search" 1984 method="get" 1985 role="search" 1986 aria-label="Product" 1987 data-live-search-form 1988 > 1989 <div class="form-field no-label"><span class="form-field-select-wrapper live-search-filter-wrapper"> 1990 <select 1991 class="live-search-filter" 1992 id="live-search-filter" 1993 data-live-search-filter 1994 data-filter-all="All categories" 1995 > 1996 1997 <option value="" selected>All categories</option> 1998 <option value="" disabled>------</option> 1999 2000 2001<option value="product_type:Accessories">Accessories</option> 2002<option value="product_type:Safety Lites">Safety Lites</option> 2003<option value="product_type:Warning Lites">Warning Lites</option> 2004 2005 </select> 2006 2007 <label 2008 class=" 2009 live-search-filter-label 2010 form-field-select 2011 " 2012 for="live-search-filter" 2013 data-live-search-filter-label 2014 >All categories 2015</label> 2016 <svg 2017 aria-hidden="true" 2018 focusable="false" 2019 role="presentation" 2020 width="8" 2021 height="6" 2022 viewBox="0 0 8 6" 2023 fill="none" 2024 xmlns="http://www.w3.org/2000/svg" 2025 class="icon-chevron-down" 2026> 2027<path class="icon-chevron-down-left" d="M4 4.5L7 1.5" stroke="currentColor" stroke-width="1.25" stroke-linecap="square"/> 2028<path class="icon-chevron-down-right" d="M4 4.5L1 1.5" stroke="currentColor" stroke-width="1.25" stroke-linecap="square"/> 2029</svg> 2030 2031 </span><input 2032 class="form-field-input live-search-form-field" 2033 type="text" 2034 name="q" 2035 aria-label="Search" 2036 placeholder="What are you looking for?" 2037 2038 autocomplete="off" 2039 data-live-search-input 2040 > 2041 <button 2042 class="live-search-takeover-cancel" 2043 type="button" 2044 data-live-search-takeover-cancel> 2045 Cancel 2046 </button> 2047 2048 <button 2049 class="live-search-button" 2050 type="submit" 2051 aria-label="Search" 2052 data-live-search-submit 2053 >
2054 <span class="search-icon search-icon--inactive"> 2055 <svg 2056 aria-hidden="true" 2057 focusable="false" 2058 role="presentation" 2059 xmlns="http://www.w3.org/2000/svg" 2060 width="23" 2061 height="24" 2062 fill="none" 2063 viewBox="0 0 23 24" 2064> 2065 <path d="M21 21L15.5 15.5" stroke="currentColor" stroke-width="2" stroke-linecap="round"/> 2066 <circle cx="10" cy="9" r="8" stroke="currentColor" stroke-width="2"/> 2067</svg> 2068 2069 </span> 2070 <span class="search-icon search-icon--active"> 2071 <svg 2072 aria-hidden="true" 2073 focusable="false" 2074 role="presentation" 2075 width="26" 2076 height="26" 2077 viewBox="0 0 26 26" 2078 xmlns="http://www.w3.org/2000/svg" 2079> 2080 <g fill-rule="nonzero" fill="currentColor"> 2081 <path d="M13 26C5.82 26 0 20.18 0 13S5.82 0 13 0s13 5.82 13 13-5.82 13-13 13zm0-3.852a9.148 9.148 0 1 0 0-18.296 9.148 9.148 0 0 0 0 18.296z" opacity=".29"/><path d="M13 26c7.18 0 13-5.82 13-13a1.926 1.926 0 0 0-3.852 0A9.148 9.148 0 0 1 13 22.148 1.926 1.926 0 0 0 13 26z"/> 2082 </g> 2083</svg> 2084 </span> 2085 </button> 2086 </div> 2087 2088 <div class="search-flydown" data-live-search-flydown> 2089 <div class="search-flydown--placeholder" data-live-search-placeholder> 2090 <div class="search-flydown--product-items"> 2091 2092 <a class="search-flydown--product search-flydown--product" href="#"> 2093 2094 <div class="search-flydown--product-image"> 2095 <svg class="placeholder--image placeholder--content-image" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 525.5 525.5"><path d="M324.5 212.7H203c-1.6 0-2.8 1.3-2.8 2.8V308c0 1.6 1.3 2.8 2.8 2.8h121.6c1.6 0 2.8-1.3 2.8-2.8v-92.5c0-1.6-1.3-2.8-2.9-2.8zm1.1 95.3c0 .6-.5 1.1-1.1 1.1H203c-.6 0-1.1-.5-1.1-1.1v-92.5c0-.6.5-1.1 1.1-1.1h121.6c.6 0 1.1.5 1.1 1.1V308z"/><path d="M210.4 299.5H240v.1s.1 0 .2-.1h75.2v-76.2h-105v76.2zm1.8-7.2l20-20c1.6-1.6 3.8-2.5 6.1-2.5s4.5.9 6.1 2.5l1.5 1.5 16.8 16.8c-12.9 3.3-20.7 6.3-22.8 7.2h-27.7v-5.5zm101.5-10.1c-20.1 1.7-36.7 4.8-49.1 7.9l-16.9-16.9 26.3-26.3c1.6-1.6 3.8-2.5 6.1-2.5s4.5.9 6.1 2.5l27.5 27.5v7.8zm-68.9 15.5c9.7-3.5 33.9-10.9 68.9-13.8v13.8h-68.9zm68.9-72.7v46.8l-26.2-26.2c-1.9-1.9-4.5-3-7.3-3s-5.4 1.1-7.3 3l-26.3 26.3-.9-.9c-1.9-1.9-4.5-3-7.3-3s-5.4 1.1-7.3 3l-18.8 18.8V225h101.4z"/><path d="M232.8 254c4.6 0 8.3-3.7 8.3-8.3s-3.7-8.3-8.3-8.3-8.3 3.7-8.3 8.3 3.7 8.3 8.3 8.3zm0-14.9c3.6 0 6.6 2.9 6.6 6.6s-2.9 6.6-6.6 6.6-6.6-2.9-6.6-6.6 3-6.6 6.6-6.6z"/></svg> 2096 </div> 2097 2098 2099 <div class="search-flydown--product-text"> 2100 <span class="search-flydown--product-title placeholder--content-text"></span> 2101 <span class="search-flydown--product-price placeholder--content-text"></span> 2102 </div> 2103 </a> 2104 2105 <a class="search-flydown--product search-flydown--product" href="#"> 2106 2107 <div class="search-flydown--product-image"> 2108 <svg class="placeholder--image placeholder--content-image" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 525.5 525.5"><path d="M324.5 212.7H203c-1.6 0-2.8 1.3-2.8 2.8V308c0 1.6 1.3 2.8 2.8 2.8h121.6c1.6 0 2.8-1.3 2.8-2.8v-92.5c0-1.6-1.3-2.8-2.9-2.8zm1.1 95.3c0 .6-.5 1.1-1.1 1.1H203c-.6 0-1.1-.5-1.1-1.1v-92.5c0-.6.5-1.1 1.1-1.1h121.6c.6 0 1.1.5 1.1 1.1V308z"/><path d="M210.4 299.5H240v.1s.1 0 .2-.1h75.2v-76.2h-105v76.2zm1.8-7.2l20-20c1.6-1.6 3.8-2.5 6.1-2.5s4.5.9 6.1 2.5l1.5 1.5 16.8 16.8c-12.9 3.3-20.7 6.3-22.8 7.2h-27.7v-5.5zm101.5-10.1c-20.1 1.7-36.7 4.8-49.1 7.9l-16.9-16.9 26.3-26.3c1.6-1.6 3.8-2.5 6.1-2.5s4.5.9 6.1 2.5l27.5 27.5v7.8zm-68.9 15.5c9.7-3.5 33.9-10.9 68.9-13.8v13.8h-68.9zm68.9-72.7v46.8l-26.2-26.2c-1.9-1.9-4.5-3-7.3-3s-5.4 1.1-7.3 3l-26.3 26.3-.9-.9c-1.9-1.9-4.5-3-7.3-3s-5.4 1.1-7.3 3l-18.8 18.8V225h101.4z"/><path d="M232.8 254c4.6 0 8.3-3.7 8.3-8.3s-3.7-8.3-8.3-8.3-8.3 3.7-8.3 8.3 3.7 8.3 8.3 8.3zm0-14.9c3.6 0 6.6 2.9 6.6 6.6s-2.9 6.6-6.6 6.6-6.6-2.9-6.6-6.6 3-6.6 6.6-6.6z"/></svg> 2109 </div> 2110 2111 2112 <div class="search-flydown--product-text"> 2113 <span class="search-flydown--product-title placeholder--content-text"></span>
2114 <span class="search-flydown--product-price placeholder--content-text"></span> 2115 </div> 2116 </a> 2117 2118 <a class="search-flydown--product search-flydown--product" href="#"> 2119 2120 <div class="search-flydown--product-image"> 2121 <svg class="placeholder--image placeholder--content-image" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 525.5 525.5"><path d="M324.5 212.7H203c-1.6 0-2.8 1.3-2.8 2.8V308c0 1.6 1.3 2.8 2.8 2.8h121.6c1.6 0 2.8-1.3 2.8-2.8v-92.5c0-1.6-1.3-2.8-2.9-2.8zm1.1 95.3c0 .6-.5 1.1-1.1 1.1H203c-.6 0-1.1-.5-1.1-1.1v-92.5c0-.6.5-1.1 1.1-1.1h121.6c.6 0 1.1.5 1.1 1.1V308z"/><path d="M210.4 299.5H240v.1s.1 0 .2-.1h75.2v-76.2h-105v76.2zm1.8-7.2l20-20c1.6-1.6 3.8-2.5 6.1-2.5s4.5.9 6.1 2.5l1.5 1.5 16.8 16.8c-12.9 3.3-20.7 6.3-22.8 7.2h-27.7v-5.5zm101.5-10.1c-20.1 1.7-36.7 4.8-49.1 7.9l-16.9-16.9 26.3-26.3c1.6-1.6 3.8-2.5 6.1-2.5s4.5.9 6.1 2.5l27.5 27.5v7.8zm-68.9 15.5c9.7-3.5 33.9-10.9 68.9-13.8v13.8h-68.9zm68.9-72.7v46.8l-26.2-26.2c-1.9-1.9-4.5-3-7.3-3s-5.4 1.1-7.3 3l-26.3 26.3-.9-.9c-1.9-1.9-4.5-3-7.3-3s-5.4 1.1-7.3 3l-18.8 18.8V225h101.4z"/><path d="M232.8 254c4.6 0 8.3-3.7 8.3-8.3s-3.7-8.3-8.3-8.3-8.3 3.7-8.3 8.3 3.7 8.3 8.3 8.3zm0-14.9c3.6 0 6.6 2.9 6.6 6.6s-2.9 6.6-6.6 6.6-6.6-2.9-6.6-6.6 3-6.6 6.6-6.6z"/></svg> 2122 </div> 2123 2124 2125 <div class="search-flydown--product-text"> 2126 <span class="search-flydown--product-title placeholder--content-text"></span> 2127 <span class="search-flydown--product-price placeholder--content-text"></span> 2128 </div> 2129 </a> 2130 2131 </div> 2132 </div> 2133 2134 <div 2135 class=" 2136 search-flydown--results 2137 2138 " 2139 data-live-search-results 2140 ></div> 2141 2142 2143 </div> 2144 </form> 2145</div> 2146 2147 2148 2149 </div> 2150 2151 <div class="site-header-right"> 2152 <ul class="site-header-actions" data-header-actions> 2153 2154 <li class="site-header-actions__account-link"> 2155 2156 2157 2158 <shopify-store store-domain="https://foxfirelites.com" country="US" language="en"></shopify-store> 2159<shopify-account 2160 2161 menu="customer-account-main-menu" 2162 2163 > 2164 <div slot="signed-out-avatar"> 2165 <div 2166 class="site-header_account-link-anchor" 2167 role="button" 2168 tabindex="0" 2169 > 2170 <span class="site-header__account-icon"> 2171 2172 2173 2174 <svg class="icon-account " aria-hidden="true" focusable="false" role="presentation" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 26" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M11.3336 14.4447C14.7538 14.4447 17.5264 11.6417 17.5264 8.18392C17.5264 4.72616 14.7538 1.9231 11.3336 1.9231C7.91347 1.9231 5.14087 4.72616 5.14087 8.18392C5.14087 11.6417 7.91347 14.4447 11.3336 14.4447Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> <path d="M20.9678 24.0769C19.5098 20.0278 15.7026 17.3329 11.4404 17.3329C7.17822 17.3329 3.37107 20.0278 1.91309 24.0769" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> </svg> 2175 2176 </span> 2177 2178 <span class="site-header_account-link-text"> 2179 Login 2180 </span> 2181 </div> 2182 </div> 2183 </shopify-account> 2184 2185 2186 2187 2188 </li> 2189 2190</ul> 2191 2192 2193 <div class="site-header-cart"> 2194 <a class="site-header-cart--button" href="/cart"> 2195 <span 2196 class="site-header-cart--count " 2197 data-header-cart-count=""> 2198 </span> 2199 <span class="site-header-cart-icon site-header-cart-icon--svg"> 2200 2201 2202 2203 2204 <svg width="25" height="24" viewBox="0 0 25 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"> <path fill-rule="evenodd" clip-rule="evenodd" d="M1 0C0.447715 0 0 0.447715 0 1C0 1.55228 0.447715 2 1 2H1.33877H1.33883C1.61048 2.00005 2.00378 2.23945 2.10939 2.81599L2.10937 2.816L2.11046 2.82171L5.01743 18.1859C5.12011 18.7286 5.64325 19.0852 6.18591 18.9826C6.21078 18.9779 6.23526 18.9723 6.25933 18.9658C6.28646 18.968 6.31389 18.9692 6.34159 18.9692H18.8179H18.8181C19.0302 18.9691 19.2141 18.9765 19.4075 18.9842L19.4077 18.9842C19.5113 18.9884 19.6175 18.9926 19.7323 18.9959C20.0255 19.0043 20.3767 19.0061 20.7177 18.9406C21.08 18.871 21.4685 18.7189 21.8028 18.3961C22.1291 18.081 22.3266 17.6772 22.4479 17.2384C22.4569 17.2058 22.4642 17.1729 22.4699 17.1396L23.944 8.46865C24.2528 7.20993 23.2684 5.99987 21.9896 6H21.9894H4.74727L4.07666 2.45562L4.07608 2.4525C3.83133 1.12381 2.76159 8.49962e-05 1.33889 0H1.33883H1ZM5.12568 8L6.8227 16.9692H18.8178H18.8179C19.0686 16.9691 19.3257 16.9793 19.5406 16.9877L19.5413 16.9877C19.633 16.9913 19.7171 16.9947 19.7896 16.9967C20.0684 17.0047 20.2307 16.9976 20.3403 16.9766C20.3841 16.9681 20.4059 16.96 20.4151 16.9556C20.4247 16.9443 20.4639 16.8918 20.5077 16.7487L21.9794 8.09186C21.9842 8.06359 21.9902 8.03555 21.9974 8.0078C21.9941 8.00358 21.9908 8.00108 21.989 8H5.12568ZM20.416 16.9552C20.4195 16.9534 20.4208 16.9524 20.4205 16.9523C20.4204 16.9523 20.4199 16.9525 20.4191 16.953L2
22040.416 16.9552ZM10.8666 22.4326C10.8666 23.2982 10.195 24 9.36658 24C8.53815 24 7.86658 23.2982 7.86658 22.4326C7.86658 21.567 8.53815 20.8653 9.36658 20.8653C10.195 20.8653 10.8666 21.567 10.8666 22.4326ZM18.0048 24C18.8332 24 19.5048 23.2982 19.5048 22.4326C19.5048 21.567 18.8332 20.8653 18.0048 20.8653C17.1763 20.8653 16.5048 21.567 16.5048 22.4326C16.5048 23.2982 17.1763 24 18.0048 24Z" fill="currentColor"/> </svg> 2205 2206 2207 </span> 2208 <span class="visually-hidden">View cart</span> 2209 </a> 2210 </div> 2211 </div> 2212 </div> 2213 2214 <div 2215 class=" 2216 site-navigation-wrapper 2217 2218 site-navigation--has-actions 2219 2220 2221 site-header--full-width 2222 2223 " 2224 data-site-navigation 2225 id="site-header-nav" 2226 > 2227 <nav 2228 class="site-navigation" 2229 aria-label="Main" 2230 > 2231 2232 2233 2234 2235 2236<ul 2237 class="navmenu navmenu-depth-1" 2238 data-navmenu 2239 aria-label="Main menu" 2240> 2241 2242 2243 2244 2245 2246 2247 2248 2249<li 2250 class="navmenu-item navmenu-basic__item navmenu-id-home" 2251 2252 2253 2254 > 2255 2256 <a 2257 2258 class=" 2259 navmenu-link 2260 navmenu-link-depth-1 2261 2262 2263 " 2264 2265 href="/" 2266 2267 > 2268 Home 2269 2270 2271 </a> 2272 2273 2274 2275 </details> 2276 </li> 2277 2278 2279 2280 2281 2282 2283 2284 2285<li 2286 class="navmenu-item navmenu-basic__item navmenu-item-parent navmenu-basic__item-parent navmenu-id-shop" 2287 2288 data-navmenu-parent 2289 2290 > 2291 2292 <details data-navmenu-details> 2293 <summary 2294 2295 class=" 2296 navmenu-link 2297 navmenu-link-depth-1 2298 navmenu-link-parent 2299 2300 " 2301 2302 aria-haspopup="true" 2303 aria-expanded="false" 2304 data-href="/collections/shop-all" 2305 2306 > 2307 Shop 2308 2309 <span 2310 class="navmenu-icon navmenu-icon-depth-1" 2311 data-navmenu-trigger 2312 > 2313 <svg 2314 aria-hidden="true" 2315 focusable="false" 2316 role="presentation" 2317 width="8" 2318 height="6" 2319 viewBox="0 0 8 6" 2320 fill="none" 2321 xmlns="http://www.w3.org/2000/svg" 2322 class="icon-chevron-down" 2323> 2324<path class="icon-chevron-down-left" d="M4 4.5L7 1.5" stroke="currentColor" stroke-width="1.25" stroke-linecap="square"/> 2325<path class="icon-chevron-down-right" d="M4 4.5L1 1.5" stroke="currentColor" stroke-width="1.25" stroke-linecap="square"/> 2326</svg> 2327 2328 </span> 2329 2330 2331 </summary> 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348<ul 2349 class=" 2350 navmenu 2351 navmenu-depth-2 2352 navmenu-submenu 2353 2354 " 2355 data-navmenu 2356 2357 data-navmenu-submenu 2358 aria-label="Main menu" 2359> 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372<li 2373 class="navmenu-item navmenu-item-parent navmenu-id-f263-portable-magnetic-led-flashers" 2374 data-navmenu-parent 2375 > 2376 2377 <details data-navmenu-details> 2378 <summary 2379 data-href="/collections/magnetic-signal-lights" 2380 2381 class="navmenu-link navmenu-link-parent " 2382 2383 aria-haspopup="true" 2384 aria-expanded="false" 2385 2386 > 2387 2388 F263 Portable Magnetic LED Flashers 2389 2390 <span 2391 class="navmenu-icon navmenu-icon-depth-2" 2392 data-navmenu-trigger 2393 > 2394 <svg 2395 aria-hidden="true" 2396 focusable="false" 2397 role="presentation" 2398 width="8" 2399 height="6" 2400 viewBox="0 0 8 6" 2401 fill="none" 2402 xmlns="http://www.w3.org/2000/svg" 2403 class="icon-chevron-down" 2404> 2405<path class="icon-chevron-down-left" d="M4 4.5L7 1.5" stroke="currentColor" stroke-width="1.25" stroke-linecap="square"/> 2406<path class="icon-chevron-down-right" d="M4 4.5L1 1.5" stroke="currentColor" stroke-width="1.25" stroke-linecap="square"/> 2407</svg> 2408 2409 </span> 2410 2411 2412 </summary> 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431<ul
2432 class=" 2433 navmenu 2434 navmenu-depth-3 2435 navmenu-submenu 2436 2437 " 2438 data-navmenu 2439 2440 data-navmenu-submenu 2441 aria-label="Main menu" 2442> 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 <li 2456 class="navmenu-item navmenu-id-magnetic-single-flashers" 2457 > 2458 <a 2459 class=" 2460 navmenu-link 2461 navmenu-link-depth-3 2462 2463 " 2464 href="/collections/magnetic-single-lights" 2465 > 2466 2467 Magnetic Single Flashers 2468</a> 2469 </li> 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 <li 2484 class="navmenu-item navmenu-id-magnetic-4-light-flasher-kits" 2485 > 2486 <a 2487 class=" 2488 navmenu-link 2489 navmenu-link-depth-3 2490 2491 " 2492 href="/collections/foxfire-magnetic-flasher-kits" 2493 > 2494 2495 Magnetic 4 Light Flasher Kits 2496</a> 2497 </li> 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 <li 2512 class="navmenu-item navmenu-id-flasher-accessories" 2513 > 2514 <a 2515 class=" 2516 navmenu-link 2517 navmenu-link-depth-3 2518 2519 " 2520 href="/collections/foxfire-flashing-light-accessories" 2521 > 2522 2523 Flasher Accessories 2524</a> 2525 </li> 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 <li 2540 class="navmenu-item navmenu-id-which-light-is-right-for-me" 2541 > 2542 <a 2543 class=" 2544 navmenu-link 2545 navmenu-link-depth-3 2546 2547 " 2548 href="/pages/foxfire-portable-safety-flashers" 2549 > 2550 2551 Which light is right for me? 2552</a> 2553 </li> 2554 2555 2556</ul> 2557 2558 2559 2560 </details> 2561 2562 </li> 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576<li 2577 class="navmenu-item navmenu-item-parent navmenu-id-logging-lights" 2578 data-navmenu-parent 2579 > 2580 2581 <details data-navmenu-details> 2582 <summary 2583 data-href="/collections/logging-lites" 2584 2585 class="navmenu-link navmenu-link-parent " 2586 2587 aria-haspopup="true" 2588 aria-expanded="false" 2589 2590 > 2591 2592 Logging Lights 2593 2594 <span 2595 class="navmenu-icon navmenu-icon-depth-2" 2596 data-navmenu-trigger 2597 > 2598 <svg 2599 aria-hidden="true" 2600 focusable="false" 2601 role="presentation" 2602 width="8" 2603 height="6" 2604 viewBox="0 0 8 6" 2605 fill="none" 2606 xmlns="http://www.w3.org/2000/svg" 2607 class="icon-chevron-down" 2608> 2609<path class="icon-chevron-down-left" d="M4 4.5L7 1.5" stroke="currentColor" stroke-width="1.25" stroke-linecap="square"/> 2610<path class="icon-chevron-down-right" d="M4 4.5L1 1.5" stroke="currentColor" stroke-width="1.25" stroke-linecap="square"/> 2611</svg> 2612 2613 </span> 2614 2615 2616 </summary> 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635<ul 2636 class=" 2637 navmenu 2638 navmenu-depth-3 2639 navmenu-submenu 2640 2641 " 2642 data-navmenu 2643 2644 data-navmenu-submenu 2645 aria-label="Main menu" 2646> 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 <li 2660 class="navmenu-item navmenu-id-red-and-amber-logging-kit" 2661 > 2662 <a 2663 class=" 2664 navmenu-link 2665 navmenu-link-depth-3 2666 2667 " 2668 href="/collections/logging-lites" 2669 > 2670 2671 Red and Amber Logging Kit 2672</a> 2673 </li> 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 <li 2688 class="navmenu-item navmenu-id-logging-light-accessory" 2689 > 2690 <a 2691 class=" 2692 navmenu-link 2693 navmenu-link-depth-3 2694 2695 " 2696 href="/products/replacement-t-handle-foxfire-s-logger-lite-kits" 2697 > 2698 2699 Logging Light Accessory 2700</a> 2701 </li> 2702 2703 2704</ul> 2705 2706 2707 2708 </details> 2709 2710 </li> 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 <li 2725 class="navmenu-item navmenu-id-hard-hat-light-kits" 2726 > 2727 <a 2728 class=" 2729 navmenu-link 2730 navmenu-link-depth-2 2731 2732 " 2733 href="/collections/hard-hat-lite-kits" 2734 > 2735 2736 Hard Hat Light Kits 2737</a> 2738 </li> 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752<li 2753 class="navmenu-item navmenu-item-parent navmenu-id-personal-safety-lights" 2754 data-navmenu-parent 2755 > 2756 2757 <details data-navmenu-details> 2758 <summary 2759 data-href="/collections/personal-safety-lites" 2760 2761 class="navmenu-link navmenu-link-parent " 2762 2763 aria-haspopup="true" 2764 aria-expanded="false" 2765 2766 > 2767 2768 Personal Safety Lights 2769
2770 <span 2771 class="navmenu-icon navmenu-icon-depth-2" 2772 data-navmenu-trigger 2773 > 2774 <svg 2775 aria-hidden="true" 2776 focusable="false" 2777 role="presentation" 2778 width="8" 2779 height="6" 2780 viewBox="0 0 8 6" 2781 fill="none" 2782 xmlns="http://www.w3.org/2000/svg" 2783 class="icon-chevron-down" 2784> 2785<path class="icon-chevron-down-left" d="M4 4.5L7 1.5" stroke="currentColor" stroke-width="1.25" stroke-linecap="square"/> 2786<path class="icon-chevron-down-right" d="M4 4.5L1 1.5" stroke="currentColor" stroke-width="1.25" stroke-linecap="square"/> 2787</svg> 2788 2789 </span> 2790 2791 2792 </summary> 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811<ul 2812 class=" 2813 navmenu 2814 navmenu-depth-3 2815 navmenu-submenu 2816 2817 " 2818 data-navmenu 2819 2820 data-navmenu-submenu 2821 aria-label="Main menu" 2822> 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 <li 2836 class="navmenu-item navmenu-id-personal-safety-light-kit" 2837 > 2838 <a 2839 class=" 2840 navmenu-link 2841 navmenu-link-depth-3 2842 2843 " 2844 href="/products/foxfire-psl56-personal-safety-lite" 2845 > 2846 2847 Personal Safety Light Kit 2848</a> 2849 </li> 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 <li 2864 class="navmenu-item navmenu-id-lighted-safety-bands" 2865 > 2866 <a 2867 class=" 2868 navmenu-link 2869 navmenu-link-depth-3 2870 2871 " 2872 href="/products/foxfire-lsb-g-lighted-safety-band" 2873 > 2874 2875 Lighted Safety Bands 2876</a> 2877 </li> 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 <li 2892 class="navmenu-item navmenu-id-clip-on-safety-light" 2893 > 2894 <a 2895 class=" 2896 navmenu-link 2897 navmenu-link-depth-3 2898 2899 " 2900 href="/products/foxfire-sl34-personal-safety-lite" 2901 > 2902 2903 Clip-On Safety Light 2904</a> 2905 </li> 2906 2907 2908</ul> 2909 2910 2911 2912 </details> 2913 2914 </li> 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928<li 2929 class="navmenu-item navmenu-item-parent navmenu-id-strobe-and-beacon-lights" 2930 data-navmenu-parent 2931 > 2932 2933 <details data-navmenu-details> 2934 <summary 2935 data-href="/collections/strobe-beacon-lites" 2936 2937 class="navmenu-link navmenu-link-parent " 2938 2939 aria-haspopup="true" 2940 aria-expanded="false" 2941 2942 > 2943 2944 Strobe and Beacon Lights 2945 2946 <span 2947 class="navmenu-icon navmenu-icon-depth-2" 2948 data-navmenu-trigger 2949 > 2950 <svg 2951 aria-hidden="true" 2952 focusable="false" 2953 role="presentation" 2954 width="8" 2955 height="6" 2956 viewBox="0 0 8 6" 2957 fill="none" 2958 xmlns="http://www.w3.org/2000/svg" 2959 class="icon-chevron-down" 2960> 2961<path class="icon-chevron-down-left" d="M4 4.5L7 1.5" stroke="currentColor" stroke-width="1.25" stroke-linecap="square"/> 2962<path class="icon-chevron-down-right" d="M4 4.5L1 1.5" stroke="currentColor" stroke-width="1.25" stroke-linecap="square"/> 2963</svg> 2964 2965 </span> 2966 2967 2968 </summary> 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987<ul 2988 class=" 2989 navmenu 2990 navmenu-depth-3 2991 navmenu-submenu 2992 2993 " 2994 data-navmenu 2995 2996 data-navmenu-submenu 2997 aria-label="Main menu" 2998> 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 <li 3012 class="navmenu-item navmenu-id-flashing-strobe-beacon" 3013 > 3014 <a 3015 class=" 3016 navmenu-link 3017 navmenu-link-depth-3 3018 3019 " 3020 href="/products/flashing-strobe-beacon" 3021 > 3022 3023 Flashing Strobe Beacon 3024</a> 3025 </li> 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 <li 3040 class="navmenu-item navmenu-id-strobe-warning-lite" 3041 > 3042 <a 3043 class=" 3044 navmenu-link 3045 navmenu-link-depth-3 3046 3047 " 3048 href="/products/strobe-warning-light" 3049 > 3050 3051 Strobe Warning Lite 3052</a> 3053 </li> 3054 3055 3056</ul> 3057 3058 3059 3060 </details> 3061 3062 </li> 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076<li 3077 class="navmenu-item navmenu-item-parent navmenu-id-traffic-control-lights" 3078 data-navmenu-parent 3079 > 3080 3081 <details data-navmenu-details> 3082 <summary 3083 data-href="/collections/roadside-safety-lights" 3084 3085 class="navmenu-link navmenu-link-parent " 3086 3087 aria-haspopup="true" 3088 aria-expanded="false" 3089 3090 > 3091 3092 Traffic Control Lights 3093
3094 <span 3095 class="navmenu-icon navmenu-icon-depth-2" 3096 data-navmenu-trigger 3097 > 3098 <svg 3099 aria-hidden="true" 3100 focusable="false" 3101 role="presentation" 3102 width="8" 3103 height="6" 3104 viewBox="0 0 8 6" 3105 fill="none" 3106 xmlns="http://www.w3.org/2000/svg" 3107 class="icon-chevron-down" 3108> 3109<path class="icon-chevron-down-left" d="M4 4.5L7 1.5" stroke="currentColor" stroke-width="1.25" stroke-linecap="square"/> 3110<path class="icon-chevron-down-right" d="M4 4.5L1 1.5" stroke="currentColor" stroke-width="1.25" stroke-linecap="square"/> 3111</svg> 3112 3113 </span> 3114 3115 3116 </summary> 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135<ul 3136 class=" 3137 navmenu 3138 navmenu-depth-3 3139 navmenu-submenu 3140 3141 " 3142 data-navmenu 3143 3144 data-navmenu-submenu 3145 aria-label="Main menu" 3146> 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 <li 3160 class="navmenu-item navmenu-id-dot-warning-triangles" 3161 > 3162 <a 3163 class=" 3164 navmenu-link 3165 navmenu-link-depth-3 3166 3167 " 3168 href="/products/warning-triangles-dot-approved" 3169 > 3170 3171 DOT Warning Triangles 3172</a> 3173 </li> 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 <li 3188 class="navmenu-item navmenu-id-traffic-warning-arrow" 3189 > 3190 <a 3191 class=" 3192 navmenu-link 3193 navmenu-link-depth-3 3194 3195 " 3196 href="/products/led-traffic-warning-arrow" 3197 > 3198 3199 Traffic Warning Arrow 3200</a> 3201 </li> 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 <li 3216 class="navmenu-item navmenu-id-traffic-batons" 3217 > 3218 <a 3219 class=" 3220 navmenu-link 3221 navmenu-link-depth-3 3222 3223 " 3224 href="/products/traffic-baton-kit" 3225 > 3226 3227 Traffic Batons 3228</a> 3229 </li> 3230 3231 3232</ul> 3233 3234 3235 3236 </details> 3237 3238 </li> 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 <li 3253 class="navmenu-item navmenu-id-accessories" 3254 > 3255 <a 3256 class=" 3257 navmenu-link 3258 navmenu-link-depth-2 3259 3260 " 3261 href="/collections/accessories-1" 3262 > 3263 3264 Accessories 3265</a> 3266 </li> 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 <li 3281 class="navmenu-item navmenu-id-sale" 3282 > 3283 <a 3284 class=" 3285 navmenu-link 3286 navmenu-link-depth-2 3287 3288 " 3289 href="/collections/sale" 3290 > 3291 3292 SALE 3293</a> 3294 </li> 3295 3296 3297</ul> 3298 3299 3300 </details> 3301 </li> 3302 3303 3304 3305 3306 3307 3308 3309 3310<li 3311 class="navmenu-item navmenu-basic__item navmenu-id-catalog" 3312 3313 3314 3315 > 3316 3317 <a 3318 3319 class=" 3320 navmenu-link 3321 navmenu-link-depth-1 3322 3323 3324 " 3325 3326 href="https://cdn.shopify.com/s/files/1/0533/6245/8807/files/FOXFIRE_CATALOG_-_2023.pdf?v=1698691008" 3327 3328 > 3329 Catalog 3330 3331 3332 </a> 3333 3334 3335 3336 </details> 3337 </li> 3338 3339 3340 3341 3342 3343 3344 3345 3346<li 3347 class="navmenu-item navmenu-basic__item navmenu-id-dealer-application" 3348 3349 3350 3351 > 3352 3353 <a 3354 3355 class=" 3356 navmenu-link 3357 navmenu-link-depth-1 3358 3359 3360 " 3361 3362 href="/pages/wholesale-application" 3363 3364 > 3365 Dealer Application 3366 3367 3368 </a> 3369 3370 3371 3372 </details> 3373 </li> 3374 3375 3376 3377 3378 3379 3380 3381 3382<li 3383 class="navmenu-item navmenu-basic__item navmenu-id-contact-us" 3384 3385 3386 3387 > 3388 3389 <a 3390 3391 class=" 3392 navmenu-link 3393 navmenu-link-depth-1 3394 3395 3396 " 3397 3398 href="/pages/contact-us" 3399 3400 > 3401 Contact Us 3402 3403 3404 </a> 3405 3406 3407 3408 </details> 3409 </li> 3410 3411 3412 3413 3414 3415 3416 3417 3418<li 3419 class="navmenu-item navmenu-basic__item navmenu-id-about-us" 3420 3421 3422 3423 > 3424 3425 <a 3426 3427 class=" 3428 navmenu-link 3429 navmenu-link-depth-1 3430 3431 3432 " 3433 3434 href="/pages/about-us" 3435 3436 > 3437 About Us 3438 3439 3440 </a> 3441 3442 3443 3444 </details> 3445 </li> 3446 3447</ul> 3448 3449 3450 3451 </nav> 3452 </div> 3453 3454 <div class="site-mobile-nav" id="site-mobile-nav" data-mobile-nav tabindex="0">
3455 <div class="mobile-nav-panel" data-mobile-nav-panel> 3456 3457 <ul class="site-header-actions" data-header-actions> 3458 3459 <li class="site-header-actions__account-link"> 3460 3461 3462 3463 <shopify-account 3464 3465 menu="customer-account-main-menu" 3466 3467 > 3468 <div slot="signed-out-avatar"> 3469 <div 3470 class="site-header_account-link-anchor" 3471 role="button" 3472 tabindex="0" 3473 > 3474 <span class="site-header__account-icon"> 3475 3476 3477 3478 <svg class="icon-account " aria-hidden="true" focusable="false" role="presentation" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 26" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M11.3336 14.4447C14.7538 14.4447 17.5264 11.6417 17.5264 8.18392C17.5264 4.72616 14.7538 1.9231 11.3336 1.9231C7.91347 1.9231 5.14087 4.72616 5.14087 8.18392C5.14087 11.6417 7.91347 14.4447 11.3336 14.4447Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> <path d="M20.9678 24.0769C19.5098 20.0278 15.7026 17.3329 11.4404 17.3329C7.17822 17.3329 3.37107 20.0278 1.91309 24.0769" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> </svg> 3479 3480 </span> 3481 3482 <span class="site-header_account-link-text"> 3483 Login 3484 </span> 3485 </div> 3486 </div> 3487 </shopify-account> 3488 3489 3490 3491 3492 </li> 3493 3494</ul> 3495 3496 3497 <a 3498 class="mobile-nav-close" 3499 href="#site-header-nav" 3500 data-mobile-nav-close> 3501 <svg 3502 aria-hidden="true" 3503 focusable="false" 3504 role="presentation" 3505 xmlns="http://www.w3.org/2000/svg" 3506 width="13" 3507 height="13" 3508 viewBox="0 0 13 13" 3509> 3510 <path fill="currentColor" fill-rule="evenodd" d="M5.306 6.5L0 1.194 1.194 0 6.5 5.306 11.806 0 13 1.194 7.694 6.5 13 11.806 11.806 13 6.5 7.694 1.194 13 0 11.806 5.306 6.5z"/> 3511</svg> 3512 <span class="visually-hidden">Close</span> 3513 </a> 3514 3515 <div class="mobile-nav-content" data-mobile-nav-content> 3516 3517 3518 3519 3520 3521<ul
3522 class="navmenu navmenu-depth-1" 3523 data-navmenu 3524 aria-label="Main menu" 3525> 3526 3527 3528 3529 3530 3531 3532 3533<li 3534 class="navmenu-item navmenu-id-home" 3535 3536 > 3537 <a 3538 class="navmenu-link " 3539 href="/" 3540 3541 > 3542 Home 3543 </a> 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 </li> 3554 3555 3556 3557 3558 3559 3560 3561<li 3562 class="navmenu-item navmenu-item-parent navmenu-id-shop" 3563 data-navmenu-parent 3564 > 3565 <a 3566 class="navmenu-link navmenu-link-parent " 3567 href="/collections/shop-all" 3568 3569 aria-haspopup="true" 3570 aria-expanded="false" 3571 3572 > 3573 Shop 3574 </a> 3575 3576 3577 3578 3579 3580 3581<button 3582 class="navmenu-button" 3583 data-navmenu-trigger 3584 aria-expanded="false" 3585> 3586 <div class="navmenu-button-wrapper" tabindex="-1"> 3587 <span class="navmenu-icon "> 3588 <svg 3589 aria-hidden="true" 3590 focusable="false" 3591 role="presentation" 3592 width="8" 3593 height="6" 3594 viewBox="0 0 8 6" 3595 fill="none" 3596 xmlns="http://www.w3.org/2000/svg" 3597 class="icon-chevron-down" 3598> 3599<path class="icon-chevron-down-left" d="M4 4.5L7 1.5" stroke="currentColor" stroke-width="1.25" stroke-linecap="square"/> 3600<path class="icon-chevron-down-right" d="M4 4.5L1 1.5" stroke="currentColor" stroke-width="1.25" stroke-linecap="square"/> 3601</svg> 3602 3603 </span> 3604 <span class="visually-hidden">Shop</span> 3605 </div> 3606</button> 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627<ul 3628 class=" 3629 navmenu 3630 navmenu-depth-2 3631 navmenu-submenu 3632 3633 " 3634 data-navmenu 3635 data-accordion-content 3636 data-navmenu-submenu 3637 aria-label="Main menu" 3638> 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651<li 3652 class="navmenu-item navmenu-item-parent navmenu-id-f263-portable-magnetic-led-flashers" 3653 data-navmenu-parent 3654 > 3655 3656 <a 3657 href="/collections/magnetic-signal-lights" 3658 3659 class="navmenu-link navmenu-link-parent " 3660 3661 aria-haspopup="true" 3662 aria-expanded="false" 3663 3664 > 3665 3666 F263 Portable Magnetic LED Flashers 3667 3668 3669 </a> 3670 3671 3672 3673 3674 3675 3676 3677<button 3678 class="navmenu-button" 3679 data-navmenu-trigger 3680 aria-expanded="false" 3681> 3682 <div class="navmenu-button-wrapper" tabindex="-1"> 3683 <span class="navmenu-icon navmenu-icon-depth-2"> 3684 <svg 3685 aria-hidden="true" 3686 focusable="false" 3687 role="presentation" 3688 width="8" 3689 height="6" 3690 viewBox="0 0 8 6" 3691 fill="none" 3692 xmlns="http://www.w3.org/2000/svg" 3693 class="icon-chevron-down" 3694> 3695<path class="icon-chevron-down-left" d="M4 4.5L7 1.5" stroke="currentColor" stroke-width="1.25" stroke-linecap="square"/> 3696<path class="icon-chevron-down-right" d="M4 4.5L1 1.5" stroke="currentColor" stroke-width="1.25" stroke-linecap="square"/> 3697</svg> 3698 3699 </span> 3700 <span class="visually-hidden">F263 Portable Magnetic LED Flashers</span> 3701 </div> 3702</button> 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720<ul 3721 class=" 3722 navmenu 3723 navmenu-depth-3 3724 navmenu-submenu 3725 3726 " 3727 data-navmenu 3728 data-accordion-content 3729 data-navmenu-submenu 3730 aria-label="Main menu" 3731> 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 <li 3745 class="navmenu-item navmenu-id-magnetic-single-flashers" 3746 > 3747 <a 3748 class=" 3749 navmenu-link 3750 navmenu-link-depth-3 3751 3752 " 3753 href="/collections/magnetic-single-lights" 3754 > 3755 3756 Magnetic Single Flashers 3757</a> 3758 </li> 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 <li 3773 class="navmenu-item navmenu-id-magnetic-4-light-flasher-kits" 3774 > 3775 <a 3776 class=" 3777 navmenu-link 3778 navmenu-link-depth-3 3779 3780 " 3781 href="/collections/foxfire-magnetic-flasher-kits" 3782 > 3783 3784 Magnetic 4 Light Flasher Kits 3785</a> 3786 </li> 3787 3788 3789 3790 3791 3792 3793 3794 3795 3796 3797 3798 3799 3800 <li 3801 class="navmenu-item navmenu-id-flasher-accessories" 3802 > 3803 <a 3804 class=" 3805 navmenu-link 3806 navmenu-link-depth-3 3807 3808 " 3809 href="/collections/foxfire-flashing-light-accessories" 3810 > 3811 3812 Flasher Accessories 3813</a> 3814 </li> 3815 3816 3817 3818 3819 3820 3821 3822 3823 3824 3825 3826 3827 3828 <li 3829 class="navmenu-item navmenu-id-which-light-is-right-for-me" 3830 > 3831 <a 3832 class=" 3833 navmenu-link 3834 navmenu-link-depth-3 3835 3836 " 3837 href="/pages/foxfire-portable-safety-flashers" 3838 > 3839 3840 Which light is right for me? 3841</a> 3842 </li> 3843 3844 3845</ul> 3846 3847 3848 3849 </li> 3850 3851 3852 3853 3854 3855 3856 3857 3858 3859 3860 3861 3862 3863<li 3864 class="navmenu-item navmenu-item-parent navmenu-id-logging-lights" 3865 data-navmenu-parent 3866 > 3867 3868 <a 3869 href="/collections/logging-lites" 3870 3871 class="navmenu-link navmenu-link-parent " 3872 3873 aria-haspopup="true" 3874 aria-expanded="false" 3875 3876 > 3877 3878 Logging Lights 3879 3880 3881 </a> 3882 3883 3884 3885 3886 3887 3888 3889<button 3890 class="navmenu-button" 3891 data-navmenu-trigger 3892 aria-expanded="false" 3893> 3894 <div class="navmenu-button-wrapper" tabindex="-1"> 3895 <span class="navmenu-icon navmenu-icon-depth-2"> 3896 <svg 3897 aria-hidden="true" 3898 focusable="false" 3899 role="presentation" 3900 width="8" 3901 height="6" 3902 viewBox="0 0 8 6" 3903 fill="none" 3904 xmlns="http://www.w3.org/2000/svg" 3905 class="icon-chevron-down" 3906> 3907<path class="icon-chevron-down-left" d="M4 4.5L7 1.5" stroke="currentColor" stroke-width="1.25" stroke-linecap="square"/> 3908<path class="icon-chevron-down-right" d="M4 4.5L1 1.5" stroke="currentColor" stroke-width="1.25" stroke-linecap="square"/> 3909</svg> 3910 3911 </span> 3912 <span class="visually-hidden">Logging Lights</span> 3913 </div> 3914</button> 3915 3916 3917 3918 3919 3920 3921 3922 3923 3924 3925 3926 3927 3928 3929 3930 3931 3932<ul
3933 class=" 3934 navmenu 3935 navmenu-depth-3 3936 navmenu-submenu 3937 3938 " 3939 data-navmenu 3940 data-accordion-content 3941 data-navmenu-submenu 3942 aria-label="Main menu" 3943> 3944 3945 3946 3947 3948 3949 3950 3951 3952 3953 3954 3955 3956 <li 3957 class="navmenu-item navmenu-id-red-and-amber-logging-kit" 3958 > 3959 <a 3960 class=" 3961 navmenu-link 3962 navmenu-link-depth-3 3963 3964 " 3965 href="/collections/logging-lites" 3966 > 3967 3968 Red and Amber Logging Kit 3969</a> 3970 </li> 3971 3972 3973 3974 3975 3976 3977 3978 3979 3980 3981 3982 3983 3984 <li 3985 class="navmenu-item navmenu-id-logging-light-accessory" 3986 > 3987 <a 3988 class=" 3989 navmenu-link 3990 navmenu-link-depth-3 3991 3992 " 3993 href="/products/replacement-t-handle-foxfire-s-logger-lite-kits" 3994 > 3995 3996 Logging Light Accessory 3997</a> 3998 </li> 3999 4000 4001</ul> 4002 4003 4004 4005 </li> 4006 4007 4008 4009 4010 4011 4012 4013 4014 4015 4016 4017 4018 4019 <li 4020 class="navmenu-item navmenu-id-hard-hat-light-kits" 4021 > 4022 <a 4023 class=" 4024 navmenu-link 4025 navmenu-link-depth-2 4026 4027 " 4028 href="/collections/hard-hat-lite-kits" 4029 > 4030 4031 Hard Hat Light Kits 4032</a> 4033 </li> 4034 4035 4036 4037 4038 4039 4040 4041 4042 4043 4044 4045 4046 4047<li 4048 class="navmenu-item navmenu-item-parent navmenu-id-personal-safety-lights" 4049 data-navmenu-parent 4050 > 4051 4052 <a 4053 href="/collections/personal-safety-lites" 4054 4055 class="navmenu-link navmenu-link-parent " 4056 4057 aria-haspopup="true" 4058 aria-expanded="false" 4059 4060 > 4061 4062 Personal Safety Lights 4063 4064 4065 </a> 4066 4067 4068 4069 4070 4071 4072 4073<button 4074 class="navmenu-button" 4075 data-navmenu-trigger 4076 aria-expanded="false" 4077> 4078 <div class="navmenu-button-wrapper" tabindex="-1"> 4079 <span class="navmenu-icon navmenu-icon-depth-2"> 4080 <svg 4081 aria-hidden="true" 4082 focusable="false" 4083 role="presentation" 4084 width="8" 4085 height="6" 4086 viewBox="0 0 8 6" 4087 fill="none" 4088 xmlns="http://www.w3.org/2000/svg" 4089 class="icon-chevron-down" 4090> 4091<path class="icon-chevron-down-left" d="M4 4.5L7 1.5" stroke="currentColor" stroke-width="1.25" stroke-linecap="square"/> 4092<path class="icon-chevron-down-right" d="M4 4.5L1 1.5" stroke="currentColor" stroke-width="1.25" stroke-linecap="square"/> 4093</svg> 4094 4095 </span> 4096 <span class="visually-hidden">Personal Safety Lights</span> 4097 </div> 4098</button> 4099 4100 4101 4102 4103 4104 4105 4106 4107 4108 4109 4110 4111 4112 4113 4114 4115 4116<ul 4117 class=" 4118 navmenu 4119 navmenu-depth-3 4120 navmenu-submenu 4121 4122 " 4123 data-navmenu 4124 data-accordion-content 4125 data-navmenu-submenu 4126 aria-label="Main menu" 4127> 4128 4129 4130 4131 4132 4133 4134 4135 4136 4137 4138 4139 4140 <li 4141 class="navmenu-item navmenu-id-personal-safety-light-kit" 4142 > 4143 <a 4144 class=" 4145 navmenu-link 4146 navmenu-link-depth-3 4147 4148 " 4149 href="/products/foxfire-psl56-personal-safety-lite" 4150 > 4151 4152 Personal Safety Light Kit 4153</a> 4154 </li> 4155 4156 4157 4158 4159 4160 4161 4162 4163 4164 4165 4166 4167 4168 <li 4169 class="navmenu-item navmenu-id-lighted-safety-bands" 4170 > 4171 <a 4172 class=" 4173 navmenu-link 4174 navmenu-link-depth-3 4175 4176 " 4177 href="/products/foxfire-lsb-g-lighted-safety-band" 4178 > 4179 4180 Lighted Safety Bands 4181</a> 4182 </li> 4183 4184 4185 4186 4187 4188 4189 4190 4191 4192 4193 4194 4195 4196 <li 4197 class="navmenu-item navmenu-id-clip-on-safety-light" 4198 > 4199 <a 4200 class=" 4201 navmenu-link 4202 navmenu-link-depth-3 4203 4204 " 4205 href="/products/foxfire-sl34-personal-safety-lite" 4206 > 4207 4208 Clip-On Safety Light 4209</a> 4210 </li> 4211 4212 4213</ul> 4214 4215 4216 4217 </li> 4218 4219 4220 4221 4222 4223 4224 4225 4226 4227 4228 4229 4230 4231<li 4232 class="navmenu-item navmenu-item-parent navmenu-id-strobe-and-beacon-lights" 4233 data-navmenu-parent 4234 > 4235 4236 <a 4237 href="/collections/strobe-beacon-lites" 4238 4239 class="navmenu-link navmenu-link-parent " 4240 4241 aria-haspopup="true" 4242 aria-expanded="false" 4243 4244 > 4245 4246 Strobe and Beacon Lights 4247 4248 4249 </a> 4250 4251 4252 4253 4254 4255 4256 4257<button 4258 class="navmenu-button" 4259 data-navmenu-trigger 4260 aria-expanded="false" 4261> 4262 <div class="navmenu-button-wrapper" tabindex="-1"> 4263 <span class="navmenu-icon navmenu-icon-depth-2"> 4264 <svg 4265 aria-hidden="true" 4266 focusable="false" 4267 role="presentation" 4268 width="8" 4269 height="6" 4270 viewBox="0 0 8 6" 4271 fill="none" 4272 xmlns="http://www.w3.org/2000/svg" 4273 class="icon-chevron-down" 4274> 4275<path class="icon-chevron-down-left" d="M4 4.5L7 1.5" stroke="currentColor" stroke-width="1.25" stroke-linecap="square"/> 4276<path class="icon-chevron-down-right" d="M4 4.5L1 1.5" stroke="currentColor" stroke-width="1.25" stroke-linecap="square"/> 4277</svg> 4278 4279 </span> 4280 <span class="visually-hidden">Strobe and Beacon Lights</span> 4281 </div> 4282</button> 4283 4284 4285 4286 4287 4288 4289 4290 4291 4292 4293 4294 4295 4296 4297 4298 4299 4300<ul
4301 class=" 4302 navmenu 4303 navmenu-depth-3 4304 navmenu-submenu 4305 4306 " 4307 data-navmenu 4308 data-accordion-content 4309 data-navmenu-submenu 4310 aria-label="Main menu" 4311> 4312 4313 4314 4315 4316 4317 4318 4319 4320 4321 4322 4323 4324 <li 4325 class="navmenu-item navmenu-id-flashing-strobe-beacon" 4326 > 4327 <a 4328 class=" 4329 navmenu-link 4330 navmenu-link-depth-3 4331 4332 " 4333 href="/products/flashing-strobe-beacon" 4334 > 4335 4336 Flashing Strobe Beacon 4337</a> 4338 </li> 4339 4340 4341 4342 4343 4344 4345 4346 4347 4348 4349 4350 4351 4352 <li 4353 class="navmenu-item navmenu-id-strobe-warning-lite" 4354 > 4355 <a 4356 class=" 4357 navmenu-link 4358 navmenu-link-depth-3 4359 4360 " 4361 href="/products/strobe-warning-light" 4362 > 4363 4364 Strobe Warning Lite 4365</a> 4366 </li> 4367 4368 4369</ul> 4370 4371 4372 4373 </li> 4374 4375 4376 4377 4378 4379 4380 4381 4382 4383 4384 4385 4386 4387<li 4388 class="navmenu-item navmenu-item-parent navmenu-id-traffic-control-lights" 4389 data-navmenu-parent 4390 > 4391 4392 <a 4393 href="/collections/roadside-safety-lights" 4394 4395 class="navmenu-link navmenu-link-parent " 4396 4397 aria-haspopup="true" 4398 aria-expanded="false" 4399 4400 > 4401 4402 Traffic Control Lights 4403 4404 4405 </a> 4406 4407 4408 4409 4410 4411 4412 4413<button 4414 class="navmenu-button" 4415 data-navmenu-trigger 4416 aria-expanded="false" 4417> 4418 <div class="navmenu-button-wrapper" tabindex="-1"> 4419 <span class="navmenu-icon navmenu-icon-depth-2"> 4420 <svg 4421 aria-hidden="true" 4422 focusable="false" 4423 role="presentation" 4424 width="8" 4425 height="6" 4426 viewBox="0 0 8 6" 4427 fill="none" 4428 xmlns="http://www.w3.org/2000/svg" 4429 class="icon-chevron-down" 4430> 4431<path class="icon-chevron-down-left" d="M4 4.5L7 1.5" stroke="currentColor" stroke-width="1.25" stroke-linecap="square"/> 4432<path class="icon-chevron-down-right" d="M4 4.5L1 1.5" stroke="currentColor" stroke-width="1.25" stroke-linecap="square"/> 4433</svg> 4434 4435 </span> 4436 <span class="visually-hidden">Traffic Control Lights</span> 4437 </div> 4438</button> 4439 4440 4441 4442 4443 4444 4445 4446 4447 4448 4449 4450 4451 4452 4453 4454 4455 4456<ul 4457 class=" 4458 navmenu 4459 navmenu-depth-3 4460 navmenu-submenu 4461 4462 " 4463 data-navmenu 4464 data-accordion-content 4465 data-navmenu-submenu 4466 aria-label="Main menu" 4467> 4468 4469 4470 4471 4472 4473 4474 4475 4476 4477 4478 4479 4480 <li 4481 class="navmenu-item navmenu-id-dot-warning-triangles" 4482 > 4483 <a 4484 class=" 4485 navmenu-link 4486 navmenu-link-depth-3 4487 4488 " 4489 href="/products/warning-triangles-dot-approved" 4490 > 4491 4492 DOT Warning Triangles 4493</a> 4494 </li> 4495 4496 4497 4498 4499 4500 4501 4502 4503 4504 4505 4506 4507 4508 <li 4509 class="navmenu-item navmenu-id-traffic-warning-arrow" 4510 > 4511 <a 4512 class=" 4513 navmenu-link 4514 navmenu-link-depth-3 4515 4516 " 4517 href="/products/led-traffic-warning-arrow" 4518 > 4519 4520 Traffic Warning Arrow 4521</a> 4522 </li> 4523 4524 4525 4526 4527 4528 4529 4530 4531 4532 4533 4534 4535 4536 <li 4537 class="navmenu-item navmenu-id-traffic-batons" 4538 > 4539 <a 4540 class=" 4541 navmenu-link 4542 navmenu-link-depth-3 4543 4544 " 4545 href="/products/traffic-baton-kit" 4546 > 4547 4548 Traffic Batons 4549</a> 4550 </li> 4551 4552 4553</ul> 4554 4555 4556 4557 </li> 4558 4559 4560 4561 4562 4563 4564 4565 4566 4567 4568 4569 4570 4571 <li 4572 class="navmenu-item navmenu-id-accessories" 4573 > 4574 <a 4575 class=" 4576 navmenu-link 4577 navmenu-link-depth-2 4578 4579 " 4580 href="/collections/accessories-1" 4581 > 4582 4583 Accessories 4584</a> 4585 </li> 4586 4587 4588 4589 4590 4591 4592 4593 4594 4595 4596 4597 4598 4599 <li 4600 class="navmenu-item navmenu-id-sale" 4601 > 4602 <a 4603 class=" 4604 navmenu-link 4605 navmenu-link-depth-2 4606 4607 " 4608 href="/collections/sale" 4609 > 4610 4611 SALE 4612</a> 4613 </li> 4614 4615 4616</ul> 4617 4618 4619 4620 4621 </li> 4622 4623 4624 4625 4626 4627 4628 4629<li 4630 class="navmenu-item navmenu-id-catalog" 4631 4632 > 4633 <a 4634 class="navmenu-link " 4635 href="https://cdn.shopify.com/s/files/1/0533/6245/8807/files/FOXFIRE_CATALOG_-_2023.pdf?v=1698691008" 4636 4637 > 4638 Catalog 4639 </a> 4640 4641 4642 4643 4644 4645 4646 4647 4648 4649 </li> 4650 4651 4652 4653 4654 4655 4656 4657<li 4658 class="navmenu-item navmenu-id-dealer-application" 4659 4660 > 4661 <a 4662 class="navmenu-link " 4663 href="/pages/wholesale-application" 4664 4665 > 4666 Dealer Application 4667 </a> 4668 4669 4670 4671 4672 4673 4674 4675 4676 4677 </li> 4678 4679 4680 4681 4682 4683 4684 4685<li 4686 class="navmenu-item navmenu-id-contact-us" 4687 4688 > 4689 <a 4690 class="navmenu-link " 4691 href="/pages/contact-us" 4692 4693 > 4694 Contact Us 4695 </a> 4696 4697 4698 4699 4700 4701 4702 4703 4704 4705 </li> 4706 4707 4708 4709 4710 4711 4712 4713<li 4714 class="navmenu-item navmenu-id-about-us" 4715 4716 > 4717 <a 4718 class="navmenu-link " 4719 href="/pages/about-us" 4720 4721 > 4722 About Us 4723 </a> 4724 4725 4726 4727 4728 4729 4730 4731 4732 4733 </li> 4734 4735</ul> 4736 4737 4738 4739 </div> 4740 <div class="utility-bar__mobile-disclosure" data-utility-mobile></div> 4741 </div> 4742 4743 <div class="mobile-nav-overlay" data-mobile-nav-overlay></div> 4744</div> 4745 4746</header> 4747 4748</div> 4749<!-- END sections: header-group --> 4750 4751 <div style="--background-color: #ffffff"> 4752 4753 4754 4755 </div> 4756 4757 <div class="intersection-target" data-header-intersection-target></div> 4758 <div class="site-main-dimmer" data-site-main-dimmer></div> 4759 <main id="site-main" class="site-main" aria-label="Main content" tabindex="-1"> 4760 <div id="shopify-section-template--32261644976497__main" class="shopify-section cart
4760--section section--canonical"> 4761 4762
4763<script 4764 type="application/json" 4765 data-section-type="static-cart" 4766 data-section-id="template--32261644976497__main" 4767 data-section-data> 4768 { 4769 "settings": { 4770 "shipping": true, 4771 "money_format": "${{amount}}" 4772 }, 4773 "shipping": { 4774 "calculate_shipping": "Calculate Shipping", 4775 "calculating": "Calculating", 4776 "customer": false, 4777 "multiple_rates": "We found *number_of_rates* shipping rates available for *address*, starting at *rate*.", 4778 "one_rate": "We found one shipping rate available for *address*.", 4779 "no_rates": "Sorry, we do not ship to this destination.", 4780 "rate_value": "*rate_title* at *rate*", 4781 "zip": "Zip \/ Postal Code", 4782 "shipment_too_heavy": "Sorry, but this shipment is too heavy to ship.", 4783 "error_general": "Sorry, we\u0026#39;re not able to calculate your shipping at this time." 4784 } 4785 } 4786</script>
4786 4787 4788<form 4789 action="/cart" 4790 method="post" 4791 aria-label="cart checkout" 4792><header class="cart-title"> 4793 <div class="cart-title-left"> 4794 <h1>Your cart</h1> 4795 4796 4797 </div> 4798 4799 4800 <div class="cart-title-right"> 4801 4802 <a class="cart-continue" href="/collections/all"> 4803 Continue shopping 4804 4805 4806 4807 <svg class="icon-signpost-arrow " aria-hidden="true" focusable="false" role="presentation" xmlns="http://www.w3.org/2000/svg" width="18" height="12" viewBox="0 0 18 12" fill="none"> <path fill-rule="evenodd" clip-rule="evenodd" d="M14.7272 5.6364L10.3636 1.27279L11.6364 0L17.2728 5.6364L11.6364 11.2728L10.3636 10L14.7272 5.6364Z" fill="currentColor"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M0 4.73645L16 4.73645L16 6.53645L-1.57361e-07 6.53645L0 4.73645Z" fill="currentColor"/> </svg> 4808 4809 </a> 4810 4811 </div> 4812 4813 </header> 4814 4815 <section class="cartitems--container "> 4816 <div class="cartitems" data-html="list"> 4817 4818 <div class="cartitems-empty"> 4819 <div class="cartitems-empty--inner"> 4820 <p>Your cart is empty</p> 4821 4822 4823 <a class="button-primary" href="/collections/all"> 4824 4825 4826 4827 <svg width="25" height="24" viewBox="0 0 25 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"> <path fill-rule="evenodd" clip-rule="evenodd" d="M1 0C0.447715 0 0 0.447715 0 1C0 1.55228 0.447715 2 1 2H1.33877H1.33883C1.61048 2.00005 2.00378 2.23945 2.10939 2.81599L2.10937 2.816L2.11046 2.82171L5.01743 18.1859C5.12011 18.7286 5.64325 19.0852 6.18591 18.9826C6.21078 18.9779 6.23526 18.9723 6.25933 18.9658C6.28646 18.968 6.31389 18.9692 6.34159 18.9692H18.8179H18.8181C19.0302 18.9691 19.2141 18.9765 19.4075 18.9842L19.4077 18.9842C19.5113 18.9884 19.6175 18.9926 19.7323 18.9959C20.0255 19.0043 20.3767 19.0061 20.7177 18.9406C21.08 18.871 21.4685 18.7189 21.8028 18.3961C22.1291 18.081 22.3266 17.6772 22.4479 17.2384C22.4569 17.2058 22.4642 17.1729 22.4699 17.1396L23.944 8.46865C24.2528 7.20993 23.2684 5.99987 21.9896 6H21.9894H4.74727L4.07666 2.45562L4.07608 2.4525C3.83133 1.12381 2.76159 8.49962e-05 1.33889 0H1.33883H1ZM5.12568 8L6.8227 16.9692H18.8178H18.8179C19.0686 16.9691 19.3257 16.9793 19.5406 16.9877L19.5413 16.9877C19.633 16.9913 19.7171 16.9947 19.7896 16.9967C20.0684 17.0047 20.2307 16.9976 20.3403 16.9766C20.3841 16.9681 20.4059 16.96 20.4151 16.9556C20.4247 16.9443 20.4639 16.8918 20.5077 16.7487L21.9794 8.09186C21.9842 8.06359 21.9902 8.03555 21.9974 8.0078C21.9941 8.00358 21.9908 8.00108 21.989 8H5.12568ZM20.416 16.9552C20.4195 16.9534 20.4208 16.9524 20.4205 16.9523C20.4204 16.9523 20.4199 16.9525 20.4191 16.953L20.416 16.9552ZM10.8666 22.4326C10.8666 23.2982 10.195 24 9.36658 24C8.53815 24 7.86658 23.2982 7.86658 22.4326C7.86658 21.567 8.53815 20.8653 9.36658 20.8653C10.195 20.8653 10.8666 21.567 10.8666 22.4326ZM18.0048 24C18.8332 24 19.5048 23.2982 19.5048 22.4326C19.5048 21.567 18.8332 20.8653 18.0048 20.8653C17.1763 20.8653 16.5048 21.567 16.5048 22.4326C16.5048 23.2982 17.1763 24 18.0048 24Z" fill="currentColor"/> </svg> 4828 4829 Continue shopping 4830 </a> 4831 4832 </div> 4833 </div> 4834 4835 </div> 4836 4837 4838 </section> 4839</form> 4840 4841</div> 4842 </main><!-- BEGIN sections: footer-group --> 4843<div id="shopify-section-sections--32261645697393__footer" class="shopify-section shopify-section-group-footer-group">
4843<script 4844 type="application/json" 4845 data-section-id="sections--32261645697393__footer" 4846 data-section-type="static-footer"> 4847</script>
4847 4848 4849 4850 4851 4852 4853<footer role="contentinfo" aria-label="Footer"> 4854 <section class="site-footer-wrapper"> 4855 4856 <div class="site-footer-item"> 4857 <div class="site-footer-blocks column-count-4"> 4858 <div class="site-footer-block-item site-footer-block-menu has-accordion" > 4859 4860 4861 <h2 class="site-footer-block-title" data-accordion-trigger> 4862 Main menu 4863 4864 <span class="site-footer-block-icon accordion--icon"> 4865 <svg 4866 aria-hidden="true" 4867 focusable="false" 4868 role="presentation" 4869 width="14" 4870 height="8" 4871 viewBox="0 0 14 8" 4872 fill="none" 4873 xmlns="http://www.w3.org/2000/svg" 4874> 4875 <path class="icon-chevron-down-left" d="M7 6.75L12.5 1.25" stroke="currentColor" stroke-width="1.75" stroke-linecap="square"/> 4876 <path class="icon-chevron-down-right" d="M7 6.75L1.5 1.25" stroke="currentColor" stroke-width="1.75" stroke-linecap="square"/> 4877</svg> 4878 4879 </span> 4880 </h2> 4881 4882 <div class="site-footer-block-content"> 4883 4884 4885 4886 4887 4888 4889 4890 4891 4892 4893 4894 4895 4896<ul 4897 class=" 4898 navmenu 4899 navmenu-depth-1 4900 4901 4902 " 4903 data-navmenu 4904 data-accordion-content 4905 4906 4907> 4908 4909 4910 4911 4912 4913 4914 4915 4916 4917 4918 4919 4920 <li 4921 class="navmenu-item navmenu-id-home" 4922 > 4923 <a 4924 class=" 4925 navmenu-link 4926 navmenu-link-depth-1 4927 4928 " 4929 href="/" 4930 > 4931 4932 Home 4933</a> 4934 </li> 4935 4936 4937 4938 4939 4940 4941 4942 4943 4944 4945 4946 4947 4948 <li 4949 class="navmenu-item navmenu-id-shop" 4950 > 4951 <a 4952 class=" 4953 navmenu-link 4954 navmenu-link-depth-1 4955 4956 " 4957 href="/collections/shop-all" 4958 > 4959 4960 Shop 4961</a> 4962 </li> 4963 4964 4965 4966 4967 4968 4969 4970 4971 4972 4973 4974 4975 4976 <li 4977 class="navmenu-item navmenu-id-catalog" 4978 > 4979 <a 4980 class=" 4981 navmenu-link 4982 navmenu-link-depth-1 4983 4984 " 4985 href="https://cdn.shopify.com/s/files/1/0533/6245/8807/files/FOXFIRE_CATALOG_-_2023.pdf?v=1698691008" 4986 > 4987 4988 Catalog 4989</a> 4990 </li> 4991 4992 4993 4994 4995 4996 4997 4998 4999 5000 5001 5002 5003 5004 <li 5005 class="navmenu-item navmenu-id-dealer-application" 5006 > 5007 <a 5008 class=" 5009 navmenu-link 5010 navmenu-link-depth-1 5011 5012 " 5013 href="/pages/wholesale-application" 5014 > 5015 5016 Dealer Application 5017</a> 5018 </li> 5019 5020 5021 5022 5023 5024 5025 5026 5027 5028 5029 5030 5031 5032 <li 5033 class="navmenu-item navmenu-id-contact-us" 5034 > 5035 <a 5036 class=" 5037 navmenu-link 5038 navmenu-link-depth-1 5039 5040 " 5041 href="/pages/contact-us" 5042 > 5043 5044 Contact Us 5045</a> 5046 </li> 5047 5048 5049 5050 5051 5052 5053 5054 5055 5056 5057 5058 5059 5060 <li 5061 class="navmenu-item navmenu-id-about-us" 5062 > 5063 <a 5064 class=" 5065 navmenu-link 5066 navmenu-link-depth-1 5067 5068 " 5069 href="/pages/about-us" 5070 > 5071 5072 About Us 5073</a> 5074 </li> 5075 5076 5077</ul> 5078 5079 </div> 5080 5081</div> 5082<div class="site-footer-block-item site-footer-block-menu has-accordion" > 5083 5084 5085 <h2 class="site-footer-block-title" data-accordion-trigger> 5086 5087 5088 <span class="site-footer-block-icon accordion--icon"> 5089 <svg 5090 aria-hidden="true" 5091 focusable="false" 5092 role="presentation" 5093 width="14" 5094 height="8" 5095 viewBox="0 0 14 8" 5096 fill="none" 5097 xmlns="http://www.w3.org/2000/svg" 5098> 5099 <path class="icon-chevron-down-left" d="M7 6.75L12.5 1.25" stroke="currentColor" stroke-width="1.75" stroke-linecap="square"/> 5100 <path class="icon-chevron-down-right" d="M7 6.75L1.5 1.25" stroke="currentColor" stroke-width="1.75" stroke-linecap="square"/> 5101</svg> 5102 5103 </span> 5104 </h2> 5105 5106 <div class="site-footer-block-content"> 5107 5108 5109 5110 5111 5112 5113 5114 5115 5116 5117 5118 5119 5120<ul 5121 class=" 5122 navmenu 5123 navmenu-depth-1 5124 5125 5126 " 5127 data-navmenu 5128 data-accordion-content 5129 5130 5131> 5132 5133</ul> 5134 5135 </div> 5136 5137</div> 5138<div class="site-footer-block-item site-footer-block-menu has-accordion" > 5139 5140 5141 <h2 class="site-footer-block-title" data-accordion-trigger> 5142 5143 5144 <span class="site-footer-block-icon accordion--icon"> 5145 <svg 5146 aria-hidden="true" 5147 focusable="false" 5148 role="presentation" 5149 width="14" 5150 height="8" 5151 viewBox="0 0 14 8" 5152 fill="none" 5153 xmlns="http://www.w3.org/2000/svg" 5154> 5155 <path class="icon-chevron-down-left" d="M7 6.75L12.5 1.25" stroke="currentColor" stroke-width="1.75" stroke-linecap="square"/> 5156 <path class="icon-chevron-down-right" d="M7 6.75L1.5 1.25" stroke="currentColor" stroke-width="1.75" stroke-linecap="square"/> 5157</svg> 5158 5159 </span> 5160 </h2> 5161 5162 <div class="site-footer-block-content"> 5163 5164 5165 5166 5167 5168 5169 5170 5171 5172 5173 5174 5175 5176<ul
5177 class=" 5178 navmenu 5179 navmenu-depth-1 5180 5181 5182 " 5183 data-navmenu 5184 data-accordion-content 5185 5186 5187> 5188 5189</ul> 5190 5191 </div> 5192 5193</div> 5194<div class="site-footer-block-item site-footer-block-newsletter " > 5195 5196 5197 5198 <h2 class="site-footer-block-title"> 5199 Subscribe 5200 </h2> 5201 5202 5203 5204 <div class="site-footer-block-content rte"> 5205 <p>Sign up for early release products, promotions and more.</p> 5206 </div> 5207 5208 5209 5210 5211 5212 5213<div class="newsletter"> 5214 <form method="post" action="/contact#footer_newsletter_newsletter" id="footer_newsletter_newsletter" accept-charset="UTF-8" class="contact-form"><input type="hidden" name="form_type" value="customer" /><input type="hidden" name="utf8" value="â" /> 5215 5216 <input 5217 type="hidden" 5218 name="contact[tags]" 5219 value="prospect, newsletter" 5220 > 5221 5222 <div class="form-fields-inline pxs-newsletter-form-fields"> 5223 <div class="form-field newsletter-input"> 5224 <input 5225 class=" 5226 form-field-input 5227 form-field-text 5228 " 5229 type="email" 5230 id="footer_newsletter_email" 5231 name="contact[email]" 5232 aria-label="Email address" 5233 placeholder=" " 5234 > 5235 5236 <label 5237 class="form-field-title" 5238 for="footer_newsletter_email" 5239 > 5240 Email address 5241 </label> 5242 </div> 5243 5244 <div class="form-field newsletter-submit"> 5245 <button 5246 class="button-primary" 5247 name="subscribe" 5248 type="submit" 5249 > 5250 Sign up 5251 </button> 5252 </div> 5253 </div> 5254 5255 </form> 5256</div> 5257 5258 5259 5260</div> 5261 5262 </div> 5263 </div> 5264 5265 5266 <div class="site-footer-item site-footer-item--information"> 5267 <div class="site-footer__row site-footer__row--first"> 5268 5269 </div> 5270 5271 <div class="site-footer__row site-footer__row--second"> 5272 <div class="site-footer__row-inner-wrapper-left"><nav 5273 class="site-footer-navigation" 5274 aria-label="Footer" 5275 > 5276 5277 5278 5279 5280 5281 5282 5283 5284 5285 5286 5287 5288 5289<ul 5290 class=" 5291 navmenu 5292 navmenu-depth-1 5293 5294 5295 " 5296 data-navmenu 5297 5298 5299 5300> 5301 5302 5303 5304 5305 5306 5307 5308 5309 5310 5311 5312 5313 <li 5314 class="navmenu-item navmenu-id-search" 5315 > 5316 <a 5317 class=" 5318 navmenu-link 5319 navmenu-link-depth-1 5320 5321 " 5322 href="/search" 5323 > 5324 5325 Search 5326</a> 5327 </li> 5328 5329 5330 5331 5332 5333 5334 5335 5336 5337 5338 5339 5340 5341 <li 5342 class="navmenu-item navmenu-id-wholesale-application" 5343 > 5344 <a 5345 class=" 5346 navmenu-link 5347 navmenu-link-depth-1 5348 5349 " 5350 href="/pages/wholesale-application" 5351 > 5352 5353 Wholesale Application 5354</a> 5355 </li> 5356 5357 5358 5359 5360 5361 5362 5363 5364 5365 5366 5367 5368 5369 <li 5370 class="navmenu-item navmenu-id-shopify-collective" 5371 > 5372 <a 5373 class=" 5374 navmenu-link 5375 navmenu-link-depth-1 5376 5377 " 5378 href="https://foxfirelites.com/apps/collective/retailer-referral" 5379 > 5380 5381 Shopify Collective 5382</a> 5383 </li> 5384 5385 5386 5387 5388 5389 5390 5391 5392 5393 5394 5395 5396 5397 <li 5398 class="navmenu-item navmenu-id-accessibility-statement" 5399 > 5400 <a 5401 class=" 5402 navmenu-link 5403 navmenu-link-depth-1 5404 5405 " 5406 href="/pages/accessibility-statement" 5407 > 5408 5409 Accessibility Statement 5410</a> 5411 </li> 5412 5413 5414</ul> 5415 5416 </nav><p class="site-footer-credits">Copyright © 2026 FoxFire Safety Lites. 5417 </p> 5418 5419 <p class="site-footer-credits"> 5420 <a target="_blank" rel="nofollow" href="https://www.shopify.com?utm_campaign=poweredby&utm_medium=shopify&utm_source=onlinestore">Powered by Shopify</a> 5421 </p> 5422 </div> 5423 5424 5425 5426 </div> 5427 </div> 5428 </section> 5429</footer> 5430 5431</div> 5432<!-- END sections: footer-group --> 5433 5434 5435 <div style="display: none;" aria-hidden="true" data-templates> 5436 5437 <div 5438 class="message-banner--container" 5439 role="alert" 5440 data-message-banner 5441 > 5442 <div class="message-banner--outer"> 5443 <div class="message-banner--inner" data-message-banner-content></div> 5444 5445 <button 5446 class="message-banner--close" 5447 type="button" 5448 aria-label="Close" 5449 data-message-banner-close 5450 ><svg 5451 aria-hidden="true" 5452 focusable="false" 5453 role="presentation" 5454 xmlns="http://www.w3.org/2000/svg" 5455 width="13" 5456 height="13" 5457 viewBox="0 0 13 13" 5458>
5459 <path fill="currentColor" fill-rule="evenodd" d="M5.306 6.5L0 1.194 1.194 0 6.5 5.306 11.806 0 13 1.194 7.694 6.5 13 11.806 11.806 13 6.5 7.694 1.194 13 0 11.806 5.306 6.5z"/> 5460</svg></button> 5461 </div> 5462 </div> 5463 5464 5465 5466 <section class="atc-banner--container" role="log" data-atc-banner> 5467 <div class="atc-banner--outer"> 5468 <div class="atc-banner--inner"> 5469 <div class="atc-banner--product"> 5470 <h2 class="atc-banner--product-title"> 5471 <span class="atc-banner--product-title--icon"> 5472 5473 5474 5475 <svg class="icon-checkmark " aria-hidden="true" focusable="false" role="presentation" xmlns="http://www.w3.org/2000/svg" width="18" height="13" viewBox="0 0 18 13" xmlns="http://www.w3.org/2000/svg"> <path fill="currentColor" fill-rule="evenodd" d="M6.23 9.1L2.078 5.2 0 7.15 6.23 13 18 1.95 15.923 0z" /> </svg> 5476 5477 </span> 5478 Added to your cart: 5479 </h2> 5480 5481 <div class="atc--product"> 5482 <div class="atc--product-image" data-atc-banner-product-image> 5483 <svg class="placeholder--image" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 525.5 525.5"><path d="M324.5 212.7H203c-1.6 0-2.8 1.3-2.8 2.8V308c0 1.6 1.3 2.8 2.8 2.8h121.6c1.6 0 2.8-1.3 2.8-2.8v-92.5c0-1.6-1.3-2.8-2.9-2.8zm1.1 95.3c0 .6-.5 1.1-1.1 1.1H203c-.6 0-1.1-.5-1.1-1.1v-92.5c0-.6.5-1.1 1.1-1.1h121.6c.6 0 1.1.5 1.1 1.1V308z"/><path d="M210.4 299.5H240v.1s.1 0 .2-.1h75.2v-76.2h-105v76.2zm1.8-7.2l20-20c1.6-1.6 3.8-2.5 6.1-2.5s4.5.9 6.1 2.5l1.5 1.5 16.8 16.8c-12.9 3.3-20.7 6.3-22.8 7.2h-27.7v-5.5zm101.5-10.1c-20.1 1.7-36.7 4.8-49.1 7.9l-16.9-16.9 26.3-26.3c1.6-1.6 3.8-2.5 6.1-2.5s4.5.9 6.1 2.5l27.5 27.5v7.8zm-68.9 15.5c9.7-3.5 33.9-10.9 68.9-13.8v13.8h-68.9zm68.9-72.7v46.8l-26.2-26.2c-1.9-1.9-4.5-3-7.3-3s-5.4 1.1-7.3 3l-26.3 26.3-.9-.9c-1.9-1.9-4.5-3-7.3-3s-5.4 1.1-7.3 3l-18.8 18.8V225h101.4z"/><path d="M232.8 254c4.6 0 8.3-3.7 8.3-8.3s-3.7-8.3-8.3-8.3-8.3 3.7-8.3 8.3 3.7 8.3 8.3 8.3zm0-14.9c3.6 0 6.6 2.9 6.6 6.6s-2.9 6.6-6.6 6.6-6.6-2.9-6.6-6.6 3-6.6 6.6-6.6z"/></svg> 5484 </div> 5485 <div class="atc--product-details"> 5486 <h2 class="atc--product-details--title" data-atc-banner-product-title></h2> 5487 <span class="atc--product-details--options" data-atc-banner-product-options></span> 5488 <span class="atc--product-details--price"> 5489 <span class="atc--product-details--price-quantity" data-atc-banner-product-price-quantity></span> 5490 <span class="atc--product-details--price-value money" data-atc-banner-product-price-value></span> 5491 <span class="atc--product-details--price-discounted money" data-atc-banner-product-price-discounted></span> 5492 <span class="atc--product-details--unit-price hidden" data-atc-banner-unit-price> 5493 ** total_quantity ** | ** unit_price ** / ** unit_measure ** 5494 </span> 5495 </span> 5496 <ul class="discount-list" data-atc-banner-product-discounts> 5497 <li class="discount-list-item"> 5498 5499 5500 5501 <svg class="icon-sale-tag " aria-hidden="true" focusable="false" role="presentation" xmlns="http://www.w3.org/2000/svg" width="350" height="350" viewBox="0 0 350 350" fill="none"> <path fill="currentColor" fill-rule="evenodd" clip-rule="evenodd" d="M0 197.826C0 192.95 1.93821 188.275 5.38762 184.83L179.459 10.7587C186.348 3.86966 195.692 -0.000356971 205.435 2.46966e-08H334.782C343.187 2.46966e-08 350 6.81304 350 15.2173V144.565C350 154.308 346.13 163.651 339.241 170.541L165.17 344.612C161.725 348.061 157.049 350 152.174 350C147.299 350 142.624 348.061 139.179 344.612L5.38762 210.821C1.93821 207.376 0 202.701 0 197.826ZM304.348 68.4786C304.348 81.085 294.128 91.3046 281.521 91.3046C268.915 91.3046 258.695 81.085 258.695 68.4786C258.695 55.8721 268.915 45.6525 281.521 45.6525C294.128 45.6525 304.348 55.8721 304.348 68.4786Z" fill="currentColor"/> </svg> 5502
5503 <span class="discount-title"></span> 5504 (-<span class="money discount-amount"></span>) 5505 </li> 5506 </ul> 5507 <span class="atc--line-item-subscriptions" data-atc-banner-product-subscription-title></span> 5508 </div> 5509 </div> 5510 </div> 5511 5512 <div class="atc-banner--cart"> 5513 <div class="atc-banner--cart-subtotal"> 5514 <span class="atc-subtotal--label"> 5515 Cart subtotal 5516 </span> 5517 <span class="atc-subtotal--price money" data-atc-banner-cart-subtotal></span> 5518 </div> 5519<footer class="atc-banner--cart-footer"> 5520 <a class="button-secondary atc-button--viewcart" href="/cart" data-atc-banner-cart-button> 5521 View cart (<span></span>) 5522 </a> 5523 <form 5524 class="atc-banner__form" 5525 action="/cart" 5526 method="post" 5527 aria-label="cart checkout" 5528 > 5529 <button class="button-primary atc-button--checkout" type="submit" name="checkout"> 5530 5531 <span>Checkout</span> 5532 </button> 5533 </form> 5534 </footer> 5535 </div> 5536 </div> 5537 5538 <button 5539 class="atc-banner--close" 5540 type="button" 5541 aria-label="Close" 5542 data-atc-banner-close 5543 ><svg 5544 aria-hidden="true" 5545 focusable="false" 5546 role="presentation" 5547 xmlns="http://www.w3.org/2000/svg" 5548 width="13" 5549 height="13" 5550 viewBox="0 0 13 13" 5551> 5552 <path fill="currentColor" fill-rule="evenodd" d="M5.306 6.5L0 1.194 1.194 0 6.5 5.306 11.806 0 13 1.194 7.694 6.5 13 11.806 11.806 13 6.5 7.694 1.194 13 0 11.806 5.306 6.5z"/> 5553</svg></button> 5554 </div> 5555 </section> 5556 5557 5558 </div> 5559 5560 5561 5562 <div class="modal" data-modal-container aria-label="modal window" data-trap-focus> 5563 <div class="modal-inner" data-modal-inner> 5564 <button 5565 class="modal-close" 5566 type="button" 5567 aria-label="Close" 5568 data-modal-close 5569 > 5570 <svg 5571 aria-hidden="true" 5572 focusable="false" 5573 role="presentation" 5574 xmlns="http://www.w3.org/2000/svg" 5575 width="13" 5576 height="13" 5577 viewBox="0 0 13 13" 5578> 5579 <path fill="currentColor" fill-rule="evenodd" d="M5.306 6.5L0 1.194 1.194 0 6.5 5.306 11.806 0 13 1.194 7.694 6.5 13 11.806 11.806 13 6.5 7.694 1.194 13 0 11.806 5.306 6.5z"/> 5580</svg> 5581 </button> 5582 <div class="modal-content" data-modal-content></div> 5583 </div> 5584 </div> 5585 5586 <div class="modal-1" data-modal-container-1 aria-label="modal window"> 5587 <div class="modal-inner" data-modal-inner> 5588 <button 5589 class="modal-close" 5590 type="button" 5591 aria-label="Close" 5592 data-modal-1-close 5593 > 5594 <svg 5595 aria-hidden="true" 5596 focusable="false" 5597 role="presentation" 5598 xmlns="http://www.w3.org/2000/svg" 5599 width="13" 5600 height="13" 5601 viewBox="0 0 13 13" 5602> 5603 <path fill="currentColor" fill-rule="evenodd" d="M5.306 6.5L0 1.194 1.194 0 6.5 5.306 11.806 0 13 1.194 7.694 6.5 13 11.806 11.806 13 6.5 7.694 1.194 13 0 11.806 5.306 6.5z"/> 5604</svg> 5605 </button> 5606 <div class="modal-content" data-modal-content></div> 5607 </div> 5608 </div> 5609 5610 5611 5612 5613 5614 5615 5616 5617 5618 5619 5620 5621 5622
5622<script> 5623 ( 5624 function () { 5625 var classes = { 5626 block: 'pxu-lia-block', 5627 element: 'pxu-lia-element', 5628 }; 5629 5630 document 5631 .querySelectorAll('[type="application/pxs-animation-mapping+json"]') 5632 .forEach(function (mappingEl) { 5633 const section = mappingEl.parentNode; 5634 try { 5635 const mapping = JSON.parse(mappingEl.innerHTML); 5636 mapping.elements.forEach(function (elementSelector) { 5637 section 5638 .querySelectorAll(elementSelector) 5639 .forEach(function (element) { element.classList.add(classes.element); }); 5640 }); 5641 5642 mapping.blocks.forEach(function (blockSelector) { 5643 section 5644 .querySelectorAll(blockSelector) 5645 .forEach(function (block) { block.classList.add(classes.block); }); 5646 }); 5647 } catch (error) { 5648 console.warn('Unable to parse animation mapping', mappingEl, error); 5649 } 5650 }); 5651 } 5652 )() 5653 </script>
5653 5654
5655<script 5656 src="//foxfirelites.com/cdn/shop/t/18/assets/empire.min.js?v=8791642673198322091790694058" 5657 data-scripts 5658 data-shopify-api-url="//foxfirelites.com/cdn/shopifycloud/storefront/assets/themes_support/api.jquery-7ab1a3a4.js" 5659 data-shopify-countries="/services/javascripts/countries.js" 5660 data-shopify-common="//foxfirelites.com/cdn/shopifycloud/storefront/assets/themes_support/shopify_common-5f594365.js" 5661 data-shopify-cart="//foxfirelites.com/cdn/shop/t/18/assets/jquery.cart.js?v=11295" 5662 data-pxu-polyfills="//foxfirelites.com/cdn/shop/t/18/assets/polyfills.min.js?v=106201537444437039941790694060" 5663 async 5664 ></script>
5664 5665 5666 5667 5668 5669 5670 5671 5672 5673
5673<script type="application/ld+json"> 5674 { 5675 "@context": "http://schema.org", 5676 "@type": "BreadcrumbList", 5677 "itemListElement": [ 5678 5679 { 5680 "@type": "ListItem", 5681 "position": 1, 5682 "item": { 5683 "@id": "https://foxfirelites.com/cart", 5684 "name": "Cart" 5685 } 5686 } 5687 5688 ] 5689 } 5690 </script>
5690 5691 5692 5693 5694 5695 5696 5697 5698
5699<script type="application/ld+json"> 5700 { 5701 "@context": "http://schema.org", 5702 "@type": "WebSite", 5703 "name": "FoxFire Safety Lites", 5704 "url": "https://foxfirelites.com" 5705 } 5706</script>
5706 5707 5708 5709
5709<script> 5710 (function () { 5711 function handleFirstTab(e) { 5712 if (e.keyCode === 9) { // the "I am a keyboard user" key 5713 document.body.classList.add('user-is-tabbing'); 5714 window.removeEventListener('keydown', handleFirstTab); 5715 } 5716 } 5717 window.addEventListener('keydown', handleFirstTab); 5718 })(); 5719 </script>
5719 5720 5721
5721<script 5722 src="//foxfirelites.com/cdn/shop/t/18/assets/instantPage.min.js?v=106097555643400646271790694049" 5723 type="module" 5724 defer 5725 > 5726 </script>
5726 5727
5727<script>(function(n, v) {/* eslint-disable-next-line max-len */if (window.Shopify && window.Shopify.theme && navigator && navigator.sendBeacon && window.Shopify.designMode) {if (sessionStorage.getItem('oots_beacon')) return;navigator.sendBeacon('https://app.outofthesandbox.com/beacon', new URLSearchParams({shop_domain: window.Shopify.shop.toLowerCase(),shop_id: '53362458807',shop_email: '[email protected]',theme_name: n.toLowerCase(),theme_version: v.toLowerCase(),theme_store_id: window.Shopify.theme.theme_store_id,theme_id: window.Shopify.theme.id,theme_role: window.Shopify.theme.role,}));sessionStorage.setItem('oots_beacon', '');}}('empire','13.0.1'))</script>
5727 5728 <div id="shopify-block-AQ3lzVEIvN2NlS2kzR__8176430683102238291" class="shopify-block shopify-app-block"> 5729
5730<script> 5731 window.accessProAiA11yFixes = {"fixes":[]}; 5732</script>
5732 5733
5734<script src="https://cdn.shopify.com/extensions/01a1115f-a4db-79a9-998b-83572f4594c6/access-pro-2-247/assets/ai-a11y-fixes.js" defer></script>
5734 5735 5736 5737</div><div id="shopify-block-Ad0NQMEFOV1NvbFdBR__8086182589341073271" class="shopify-block shopify-app-block"> 5738
5739<script> 5740 5741 window.accessProCookieBannerSettings = null; 5742 5743 5744 if (!window.accessProProxyHandle) { 5745 5746 window.accessProProxyHandle = '/apps/access-pro'; 5747 5748 } 5749 5750 5751 window.accessProCookieBannerSettingsUrl = window.accessProProxyHandle + '/theme/cookie-banner/'; 5752</script>
5752 5753
5754<script src="https://cdn.shopify.com/extensions/01a1115f-a4db-79a9-998b-83572f4594c6/access-pro-2-247/assets/cookie-banner.js" defer></script>
5754 5755 5756 5757</div><div id="shopify-block-AdTBORzdUdm95L0F1Z__1537173939754162885" class="shopify-block shopify-app-block"> 5758
5759<script> 5760 window.accessProWidgetSettings = {"icon_size":"default","widget_size":"small","icon_position":"BL","enable_features":true,"icon_color_fill":"#419d4a","icon_color_stroke":"#419d4a","enableMenuSettings":{"links":true,"reset":true,"cursor":true,"images":true,"sounds":true,"videos":true,"mission":true,"contrast":true,"dyslexic":true,"headings":true,"profiles":true,"alignment":true,"animation":true,"fontscale":true,"languages":true,"magnifier":true,"fontweight":true,"saturation":true,"adhdprofile":true,"linespacing":true,"readingmask":true,"text2speech":true,"textsummary":true,"readingguide":true,"letterspacing":true,"pagestructure":true,"readerprofile":true,"describeimages":true,"seizureprofile":true,"cognitiveprofile":true},"menu_content_color":"#111111","selected_languages":["en","fr","es","de"],"default_menu_language":"en","menu_header_font_color":"#f2f2f2","open_accessibility_profile":true,"menu_header_background_color":"#850e0e"}; 5761 window.accessProComplianceSettings = {"compliance_title":"Compliance","compliance_content":"\u003cdiv class=\"ap-compliance-main-title\"\u003e\u003cstrong\u003eAccessPro Compliance Mission Statement\u003c\/strong\u003e\u003c\/div\u003e \u003cdiv class=\"ap-compliance-list-wrapper\"\u003e\u003cdiv class=\"ap-compliance-list-item\"\u003e⢠\u003cstrong\u003eWCAG 2.2 Commitment:\u003c\/strong\u003e We strictly adhere to WCAG 2.2 AA guidelines.\u003c\/div\u003e\u003cdiv class=\"ap-compliance-list-item\"\u003e⢠\u003cstrong\u003ePersonalized UI:\u003c\/strong\u003e Users with disabilities can personalize the interface.\u003c\/div\u003e\u003cdiv class=\"ap-compliance-list-item\"\u003e⢠\u003cstrong\u003eAI-Based Compliance:\u003c\/strong\u003e We use AI to maintain accessibility during updates.\u003c\/div\u003e\u003cdiv class=\"ap-compliance-list-item\"\u003e⢠\u003cstrong\u003eARIA Attributes:\u003c\/strong\u003e Meaningful data for screen-readers using ARIA attributes.\u003c\/div\u003e \u003c\/div\u003e \u003cdiv class=\"ap-compliance-list-wrapper\"\u003e\u003cdiv class=\"ap-compliance-list-title\"\u003e\u003cstrong\u003eOptimized Screen Reader and Keyboard Navigation:\u003c\/strong\u003e\u003c\/div\u003e\u003cdiv class=\"ap-compliance-list\"\u003e\u003cdiv class=\"ap-compliance-list-item\"\u003e⢠\u003cstrong\u003eScreen-reader Optimization:\u003c\/strong\u003e ARIA attributes for meaningful data.\u003c\/div\u003e \u003cdiv class=\"ap-compliance-list-item\"\u003e⢠\u003cstrong\u003eImage Description:\u003c\/strong\u003e Auto image descriptions for better understanding.\u003c\/div\u003e \u003cdiv class=\"ap-compliance-list-item\"\u003e⢠\u003cstrong\u003eOCR Technology:\u003c\/strong\u003e Text extraction from images.\u003c\/div\u003e \u003cdiv class=\"ap-compliance-list-item\"\u003e⢠\u003cstrong\u003eKeyboard Navigation:\u003c\/strong\u003e Enhanced keyboard operability. \u003c\/div\u003e\u003cdiv class=\"ap-compliance-list-item\"\u003e⢠\u003cstrong\u003eContent-skip Menus:\u003c\/strong\u003e Easy navigation with shortcuts.\u003c\/div\u003e\u003cdiv class=\"ap-compliance-list-item\"\u003e⢠\u003cstrong\u003ePopup Handling:\u003c\/strong\u003e Improved handling of popups.\u003c\/div\u003e\u003cdiv class=\"ap-compliance-list-item\"\u003e⢠\u003cstrong\u003eShortcuts:\u003c\/strong\u003e Quick access to key elements with shortcuts.\u003c\/div\u003e\u003c\/div\u003e \u003c\/div\u003e \u003cdiv class=\"ap-compliance-list-wrapper\"\u003e\u003cdiv class=\"ap-compliance-list-title\"\u003e\u003cstrong\u003eSpecialized Profiles for Disabilities:\u003c\/strong\u003e\u003c\/div\u003e\u003cdiv class=\"ap-compliance-list\"\u003e\u003cdiv class=\"ap-compliance-list-item\"\u003e⢠\u003cstrong\u003eEpilepsy Safe Profile:\u003c\/strong\u003e Safe browsing with reduced triggers.\u003c\/div\u003e\u003cdiv class=\"ap-compliance-list-item\"\u003e⢠\u003cstrong\u003eVision Impaired Profile:\u003c\/strong\u003e Enhanced interface for visual impairments.\u003c\/div\u003e \u003cdiv class=\"ap-compliance-list-item\"\u003e⢠\u003cstrong\u003eCognitive Disability Profile:\u003c\/strong\u003e Assistive features for cognitive disabilities.\u003c\/div\u003e \u003cdiv class=\"ap-compliance-list-item\"\u003e⢠\u003cstrong\u003eADHD-Friendly Profile:\u003c\/strong\u003e Minimized distractions for ADHD users.\u003c\/div\u003e\u003cdiv class=\"ap-compliance-list-item\"\u003e⢠\u003cstrong\u003eBlind Users Profile:\u003c\/strong\u003e Compatibility with popular screen-readers.\u003c\/div\u003e\u003cdiv class=\"ap-compliance-list-item\"\u003e⢠\u003cstrong\u003eKe
5761yboard Navigation Profile:\u003c\/strong\u003e Navigate with keyboard commands.\u003c\/div\u003e\u003c\/div\u003e \u003c\/div\u003e \u003cdiv class=\"ap-compliance-list-wrapper\"\u003e\u003cdiv class=\"ap-compliance-list-title\"\u003e\u003cstrong\u003eCustomizable User Interface Adjustments:\u003c\/strong\u003e\u003c\/div\u003e\u003cdiv class=\"ap-compliance-list\"\u003e\u003cdiv class=\"ap-compliance-list-item\"\u003e⢠\u003cstrong\u003eFont Adjustments:\u003c\/strong\u003e Customize font settings for readability.\u003c\/div\u003e\u003cdiv class=\"ap-compliance-list-item\"\u003e⢠\u003cstrong\u003eColour Adjustments:\u003c\/strong\u003e Choose contrast profiles and color schemes.\u003c\/div\u003e\u003cdiv class=\"ap-compliance-list-item\"\u003e⢠\u003cstrong\u003eAnimations:\u003c\/strong\u003e Disable animations for user safety.\u003c\/div\u003e\u003cdiv class=\"ap-compliance-list-item\"\u003e⢠\u003cstrong\u003eContent Highlighting:\u003c\/strong\u003e Emphasize key elements.\u003c\/div\u003e\u003cdiv class=\"ap-compliance-list-item\"\u003e⢠\u003cstrong\u003eAudio Muting:\u003c\/strong\u003e Instantly mute the website.\u003c\/div\u003e\u003cdiv class=\"ap-compliance-list-item\"\u003e⢠\u003cstrong\u003eCognitive Disorders:\u003c\/strong\u003e Linked search engine for better understanding.\u003c\/div\u003e\u003cdiv class=\"ap-compliance-list-item\"\u003e⢠\u003cstrong\u003eAdditional Functions:\u003c\/strong\u003e Various customizable options.\u003c\/div\u003e\u003c\/div\u003e \u003c\/div\u003e \u003cdiv class=\"ap-compliance-list-wrapper\"\u003e\u003cdiv class=\"ap-compliance-list-title\"\u003e\u003cstrong\u003eBrowser and Assistive Technology Support:\u003c\/strong\u003e\u003c\/div\u003e\u003cdiv class=\"ap-compliance-list\"\u003e\u003cdiv class=\"ap-compliance-list-item\"\u003e⢠\u003cstrong\u003eSupported Browsers:\u003c\/strong\u003e Google Chrome, Mozilla Firefox, Apple Safari, Opera, Microsoft Edge.\u003c\/div\u003e\u003cdiv class=\"ap-compliance-list-item\"\u003e⢠\u003cstrong\u003eSupported Screen Readers:\u003c\/strong\u003e JAWS (Windows\/MAC), NVDA (Windows\/MAC).\u003c\/div\u003e\u003c\/div\u003e \u003c\/div\u003e \u003cdiv class=\"ap-compliance-list-wrapper\"\u003e\u003cdiv class=\"ap-compliance-list-title\"\u003e\u003cstrong\u003eContinual Accessibility Improvement:\u003c\/strong\u003e\u003c\/div\u003e\u003cdiv class=\"ap-compliance-list\"\u003e \u003cdiv class=\"ap-compliance-list-item\"\u003e⢠\u003cstrong\u003eOngoing Efforts:\u003c\/strong\u003e We continuously enhance accessibility. \u003c\/div\u003e \u003cdiv class=\"ap-compliance-list-item\"\u003e⢠\u003cstrong\u003eGoal:\u003c\/strong\u003e Achieve maximum accessibility with evolving technology.\u003c\/div\u003e\u003cdiv class=\"ap-compliance-list-item\"\u003e⢠\u003cstrong\u003eContact Us:\u003c\/strong\u003e Reach out via the websiteâs contact form for queries or concerns.\u003c\/div\u003e\u003c\/div\u003e \u003c\/div\u003e","statement_action":"popup","statement_redirect_url":"","statement_redirect_page_id":""}; 5762 window.accessProCurrentPage = { 5763 pageType: "cart", 5764 path: "\/cart" 5765 }; 5766</script>
5766 5767 5768<style> 5769 5770 5771 .asw-widget-button-top { 5772 position: absolute !important; 5773 top: 10px !important; 5774 left: 10px !important; 5775 background-color: #000 !important; 5776 color: #fff !important; 5777 text-decoration: none !important; 5778 overflow: hidden; 5779 width: 1px !important; 5780 height: 1px !important; 5781 margin: -1px !important; 5782 padding: 0 !important; 5783 border: 0 !important; 5784 clip: rect(0 0 0 0) !important; 5785 word-wrap: normal !important; 5786 } 5787 .asw-widget-button-top-focused, 5788 .asw-widget-button-top:focus { 5789 z-index: 9999 !important; 5790 overflow: auto !important; 5791 width: auto !important; 5792 height: auto !important; 5793 clip: auto !important; 5794 padding: 10px 15px !important; 5795 } 5796 5797 #acp-virtualKeyboardPopup { 5798 position: fixed; 5799 bottom: 80px; 5800 left: 50%; 5801 transform: translateX(-50%); 5802 background: #ffffff !important; 5803 border: 1px solid #ccc; 5804 padding: 8px; 5805 box-shadow: 0 8px 20px rgba(0, 0, 0, 0.2); 5806 z-index: 9999; 5807 display: none; 5808 width: 90%; 5809 max-width: 600px; 5810 border-radius: 10px; 5811 } 5812 5813 #acp-virtual-input { 5814 width: 100%; 5815 padding: 10px; 5816 font-size: 16px; 5817 margin-bottom: 10px; 5818 } 5819 5820 #acp-closeKeyboardBtn { 5821 color: #fff; 5822 border: none; 5823 padding: 1px 3px; 5824 cursor: pointer; 5825 float: right; 5826 border-radius: 4px; 5827 margin-bottom: 5px; 5828 } 5829 #acp-definition-popup { 5830 position: absolute; 5831 display: none; 5832 padding: 10px; 5833 background: white; 5834 border: 1px solid #ccc; 5835 z-index: 1000; 5836 border-radius: 14px; 5837 } 5838</style> 5839 5840<div id="acp-icon"></div> 5841<div id="acp-widget"></div> 5842 5843<!-- Virtual Keyboard Input and Keyboard --> 5844<div 5845 id="acp-definition-popup" 5846></div> 5847<div 5848 id="acp-dictionary-toast" 5849 class="asw-text-speech-bar" 5850 style="display: none;" 5851 data-ap-translate="DICTIONARY DESC" 5852> 5853 Double click on a word to see the definition. 5854</div> 5855<div id="acp-virtualKeyboardPopup" role="dialog" aria-modal="true" aria-label="Virtual keyboard popup"> 5856 <button id="acp-closeKeyboardBtn" aria-label="Close virtual keyboard"> 5857 <svg 5858 xmlns="http://www.w3.org/2000/svg" 5859 width="24" 5860 height="24" 5861 viewBox="0 0 24 24" 5862 fill="none" 5863 > 5864 <path 5865 d="M18 6L6 18" 5866 stroke="black" 5867 strokeWidth="2" 5868 strokeLinecap="round" 5869 strokeLinejoin="round" 5870 /> 5871 <path 5872 d="M6 6L18 18" 5873 stroke="black" 5874 strokeWidth="2" 5875 strokeLinecap="round" 5876 strokeLinejoin="round" 5877 /> 5878 </svg> 5879 </button> 5880 5881 <div id="acp-virtual-keyboard" class="simple-keyboard"></div> 5882
5882<script> 5883 function makeDraggableVirtualKeyboard(el) { 5884 let pos1 = 0, 5885 pos2 = 0, 5886 pos3 = 0, 5887 pos4 = 0; 5888 5889 el.onmousedown = dragMouseDown; 5890 5891 function dragMouseDown(e) { 5892 e.preventDefault(); 5893 pos3 = e.clientX; 5894 pos4 = e.clientY; 5895 document.onmouseup = closeDragElement; 5896 document.onmousemove = elementDrag; 5897 } 5898 5899 function elementDrag(e) { 5900 e.preventDefault(); 5901 pos1 = pos3 - e.clientX; 5902 pos2 = pos4 - e.clientY; 5903 pos3 = e.clientX; 5904 pos4 = e.clientY; 5905 el.style.top = el.offsetTop - pos2 + 'px'; 5906 el.style.left = el.offsetLeft - pos1 + 'px'; 5907 el.style.bottom = 'unset'; 5908 el.style.right = 'unset'; 5909 } 5910 5911 function closeDragElement() { 5912 document.onmouseup = null; 5913 document.onmousemove = null; 5914 } 5915 } 5916 5917 makeDraggableVirtualKeyboard(document.getElementById('acp-virtualKeyboardPopup')); 5918 </script>
5918 5919</div>
5920<script> 5921 // App Procxy Handle 5922 5923 window.accessProProxyHandle = '/apps/access-pro'; 5924 5925 5926 // URLs 5927 window.accessProSettingsUrl = `${window.accessProProxyHandle}/theme/settings/`; 5928 window.accessProPageViewsCountUrl = `${window.accessProProxyHandle}/theme/views/update/count`; 5929 5930 5931 // Translation URL 5932 var shopify_domain = `foxfirelites.myshopify.com`; 5933 window.accessProTranslationUrl = `https://access-pro-api.entanglecommerce.com/api/v1/language/translate/?domain=${shopify_domain}`; 5934 window.pageViewsCountURL = `${window.accessProProxyHandle}/theme/views/update/count`; 5935</script>
5935 5936
5937<script src="https://cdn.shopify.com/extensions/01a1115f-a4db-79a9-998b-83572f4594c6/access-pro-2-247/assets/main.js" defer></script>
vendor: 1 bytes, line 5937
5937
5938<script> 5939 (function () { 5940 var params = new URLSearchParams(window.location.search); 5941 var token = params.get('acp_scan'); 5942 if (!token) return; 5943 5944 function showScanOverlay(message) { 5945 var el = document.getElementById('acp-scan-overlay'); 5946 if (!el) { 5947 el = document.createElement('div'); 5948 el.id = 'acp-scan-overlay'; 5949 el.style.cssText = 5950 'position:fixed;inset:0;background:rgba(255,255,255,0.94);z-index:2147483647;display:flex;align-items:center;justify-content:center;font-family:system-ui,-apple-system,sans-serif;'; 5951 el.innerHTML = 5952 '<div style="text-align:center;max-width:320px;padding:24px">' + 5953 '<p style="font-size:18px;font-weight:600;margin:0 0 8px;color:#111">Scanning for accessibility</p>' + 5954 '<p id="acp-scan-overlay-status" style="font-size:14px;color:#666;margin:0"></p>' + 5955 '</div>'; 5956 document.body.appendChild(el); 5957 } 5958 var status = document.getElementById('acp-scan-overlay-status'); 5959 if (status) status.textContent = message || 'Please waitâ¦'; 5960 } 5961 5962 showScanOverlay('Preparing accessibility scanâ¦'); 5963 5964 function hideOverlay() { 5965 var el = document.getElementById('acp-scan-overlay'); 5966 if (el) el.style.display = 'none'; 5967 } 5968 5969 function pageIsThemePreview() { 5970 try { 5971 return Boolean(new URLSearchParams(window.location.search).get('preview_theme_id')); 5972 } catch (e) { 5973 return false; 5974 } 5975 } 5976 5977 // Shopify stores the unpublished theme in a storefront cookie. Clear it 5978 // here so the scan window never has to navigate to the live theme. 5979 var previewExitPromise = null; 5980 function exitThemePreviewQuietly() { 5981 if (!pageIsThemePreview()) return Promise.resolve(); 5982 if (previewExitPromise) return previewExitPromise; 5983 previewExitPromise = new Promise(function (resolve) { 5984 var settled = false; 5985 function finish() { 5986 if (settled) return; 5987 settled = true; 5988 resolve(); 5989 } 5990 setTimeout(finish, 2000); 5991 try { 5992 var frame = document.createElement('iframe'); 5993 frame.setAttribute('aria-hidden', 'true'); 5994 frame.title = ''; 5995 frame.style.cssText = 5996 'position:absolute;width:0;height:0;border:0;visibility:hidden'; 5997 frame.src = window.location.origin + '/?exitPreview=1'; 5998 (document.body || document.documentElement).appendChild(frame); 5999 } catch (e) {} 6000 try { 6001 fetch(window.location.origin + '/?exitPreview=1', { 6002 credentials: 'include', 6003 cache: 'no-store', 6004 redirect: 'follow', 6005 }).catch(function () {}); 6006 } catch (e) {} 6007 }); 6008 return previewExitPromise; 6009 } 6010 6011 window.addEventListener('message', function (event) { 6012 if (event.source !== window.opener) return; 6013 var data = event.data; 6014 if (!data || data.type !== 'accesspro-exit-preview') return; 6015 exitThemePreviewQuietly().then(function () { 6016 if (window.opener) { 6017 window.opener.postMessage({ type: 'accesspro-preview-exited' }, '*'); 6018 } 6019 }); 6020 }); 6021 6022 function submitScanResult(payload) { 6023 var params = new URLSearchParams(window.location.search); 6024 var jobId = params.get('acp_job'); 6025 if (!jobId) { 6026 return; 6027 } 6028 6029 var pageUrl = window.location.origin + window.location.pathname; 6030 fetch(window.accessProProxyHandle + '/theme/accessibility-scan/complete', { 6031 method: 'POST', 6032 headers: { 'Content-Type': 'application/json' }, 6033 body: JSON.stringify({ 6034 jobId: jobId, 6035 scanToken: token, 6036 url: pageUrl, 6037 axeResults: payload.results || null, 6038 error: 6039 payload.type === 'accesspro-axe-scan-error' 6040 ? payload.message || 'Accessibility scan failed' 6041 : null, 6042 }), 6043 }) 6044 .then(function (response) { 6045 return response.json().catch(function () { 6046 return {}; 6047 }); 6048 }) 6049 .then(function (data) { 6050 if (window.opener) { 6051 var isFinal = data.reportId != null; 6052 var hasError = !data.success; 6053 var isNextScanPage = false;
6054 if (data.redirectUrl) { 6055 try { 6056 isNextScanPage = new URL(data.redirectUrl).searchParams.has('acp_scan'); 6057 } catch (e) {} 6058 } 6059 var continuing = isNextScanPage && data.redirectUrl && !isFinal && !hasError; 6060 6061 function deliver() { 6062 window.opener.postMessage( 6063 { 6064 type: 'accesspro-axe-scan-progress', 6065 jobId: jobId, 6066 redirectUrl: data.redirectUrl || null, 6067 reportId: data.reportId != null ? data.reportId : null, 6068 error: data.success ? null : (data.message || 'Scan failed'), 6069 }, 6070 '*', 6071 ); 6072 6073 if (isFinal) { 6074 showScanOverlay('Returning to your audit reportâ¦'); 6075 return; 6076 } 6077 6078 if (continuing) { 6079 showScanOverlay('Scanning next pageâ¦'); 6080 window.location.href = data.redirectUrl; 6081 return; 6082 } 6083 6084 setTimeout(function () { 6085 window.close(); 6086 }, 400); 6087 } 6088 6089 if (pageIsThemePreview() && !continuing) { 6090 if (isFinal) showScanOverlay('Returning to your audit reportâ¦'); 6091 exitThemePreviewQuietly().then(deliver); 6092 return; 6093 } 6094 6095 deliver(); 6096 return; 6097 } 6098 if (data.redirectUrl) { 6099 showScanOverlay('Returning to your audit reportâ¦'); 6100 window.location.href = data.redirectUrl; 6101 return; 6102 } 6103 showScanOverlay(data.message || 'Scan failed'); 6104 if (window.opener) { 6105 window.opener.postMessage( 6106 { 6107 type: 'accesspro-axe-scan-progress', 6108 jobId: jobId, 6109 error: data.message || 'Scan failed', 6110 }, 6111 '*', 6112 ); 6113 } 6114 }) 6115 .catch(function (err) { 6116 var message = 6117 (err && err.message) || 'Scan failed'; 6118 showScanOverlay(message); 6119 function deliver() { 6120 if (!window.opener) return; 6121 var jobIdErr = new URLSearchParams(window.location.search).get('acp_job'); 6122 window.opener.postMessage( 6123 { 6124 type: 'accesspro-axe-scan-progress', 6125 jobId: jobIdErr, 6126 error: message, 6127 }, 6128 '*', 6129 ); 6130 } 6131 if (pageIsThemePreview()) { 6132 exitThemePreviewQuietly().then(deliver); 6133 return; 6134 } 6135 deliver(); 6136 }); 6137 } 6138 6139 function waitForFullPageLoad() { 6140 return new Promise(function (resolve) { 6141 function settle() { 6142 // Extended settle time for dynamic content, carousels, lazy sections 6143 // Wait for network idle + animations + JS state changes 6144 setTimeout(function() { 6145 // Wait for any lazy images to finish loading 6146 var images = Array.prototype.slice.call(document.querySelectorAll('img[loading="lazy"]')); 6147 var pendingImages = images.filter(function(img) { 6148 return !img.complete; 6149 }); 6150 6151 if (pendingImages.length > 0) { 6152 var loaded = 0; 6153 var timeout = setTimeout(function() { 6154 resolve(); // Don't wait forever 6155 }, 2000); 6156 6157 pendingImages.forEach(function(img) { 6158 function handleLoad() { 6159 loaded++; 6160 if (loaded >= pendingImages.length) { 6161 clearTimeout(timeout); 6162 // Additional wait for any pending RAF or microtasks 6163 requestAnimationFrame(function() { 6164 setTimeout(resolve, 100); 6165 }); 6166 } 6167 } 6168 img.addEventListener('load', handleLoad, { once: true }); 6169 img.addEventListener('error', handleLoad, { once: true }); 6170 }); 6171 } else {
6172 // Additional wait for any pending RAF or microtasks 6173 requestAnimationFrame(function() { 6174 setTimeout(resolve, 100); 6175 }); 6176 } 6177 }, 3000); 6178 } 6179 if (document.readyState === 'complete') { 6180 settle(); 6181 return; 6182 } 6183 window.addEventListener('load', settle, { once: true }); 6184 }); 6185 } 6186 6187 // Port of accessibility-scanner Phase 3 WCAG 2.2 / APG checks (browser-side). 6188 // Findings are merged into axe violations/incomplete so the existing pipeline needs no changes. 6189 function isAccessProScanElement(el) { 6190 if (!el || !el.closest) return false; 6191 return !!( 6192 el.closest('#acp-icon') || 6193 el.closest('#acp-widget') || 6194 el.closest('#acp-virtualKeyboardPopup') || 6195 el.closest('#acp-definition-popup') || 6196 el.closest('#acp-dictionary-toast') || 6197 el.closest('#acp-scan-overlay') || 6198 el.closest('[id^="acp-"]') || 6199 el.closest('.asw-widget-button-top') 6200 ); 6201 } 6202 6203 // Enhanced element visibility check including all CSS hiding techniques 6204 function isElementVisible(el) { 6205 if (!el || !el.getBoundingClientRect) return false; 6206 var style = window.getComputedStyle(el); 6207 if (style.display === 'none' || style.visibility === 'hidden') return false; 6208 if (style.opacity === '0') return false; 6209 if (style.position === 'absolute' && style.clip === 'rect(0px, 0px, 0px, 0px)') return false; 6210 if (style.width === '1px' && style.height === '1px' && style.overflow === 'hidden') return false; 6211 var rect = el.getBoundingClientRect(); 6212 if (rect.width === 0 || rect.height === 0) return false; 6213 return true; 6214 } 6215 6216 function runWcag22Checks() { 6217 var violations = []; 6218 var incomplete = []; 6219 6220 try { 6221 // WCAG 2.4.11 Focus Not Obscured â sticky/fixed heuristic (manual review) 6222 var stickyElements = Array.prototype.slice 6223 .call(document.querySelectorAll('*')) 6224 .filter(function (el) { 6225 if (isAccessProScanElement(el)) return false; 6226 if (!isElementVisible(el)) return false; 6227 var style = getComputedStyle(el); 6228 return ( 6229 (style.position === 'sticky' || style.position === 'fixed') && 6230 el.getBoundingClientRect().height > 40 6231 ); 6232 }) 6233 .slice(0, 5) 6234 .map(function (el) { 6235 var style = getComputedStyle(el); 6236 return { 6237 tag: el.tagName.toLowerCase(), 6238 id: el.id || null, 6239 height: Math.round(el.getBoundingClientRect().height), 6240 position: style.position, 6241 }; 6242 }); 6243 6244 if (stickyElements.length > 0) { 6245 incomplete.push({ 6246 id: 'focus-not-obscured', 6247 impact: 'serious', 6248 tags: ['wcag22aa', 'wcag2411'], 6249 description: 6250 'WCAG 2.4.11: Focused elements must not be entirely obscured. Fixed/sticky elements detected â manual keyboard testing required.', 6251 helpUrl: 6252 'https://www.w3.org/WAI/WCAG22/Understanding/focus-not-obscured-minimum.html', 6253 nodes: stickyElements.map(function (e) { 6254 return { 6255 html: 6256 '<' + 6257 e.tag + 6258 (e.id ? ' id="' + e.id + '"' : '') + 6259 '> (' + 6260 e.position + 6261 ', ' + 6262 e.height + 6263 'px tall)', 6264 target: [e.tag + (e.id ? '#' + e.id : '')], 6265 failureSummary: 6266 'Fixed/sticky element may obscure focused components. Verify with keyboard navigation.', 6267 }; 6268 }), 6269 }); 6270 } 6271 6272 // NEW: aria-hidden-focus check - elements with aria-hidden="true" that are focusable 6273 var hiddenFocusable = []; 6274 document.querySelectorAll('[aria-hidden="true"]').forEach(function(el) { 6275 if (isAccessProScanElement(el)) return; 6276 // Check if this element or any descendant is focusable 6277 var focusableSelectors = 'a[href], button, input, select, textarea, [tabindex]:not
6277([tabindex="-1"])'; 6278 var focusables = el.matches(focusableSelectors) ? [el] : Array.prototype.slice.call(el.querySelectorAll(focusableSelectors)); 6279 focusables.forEach(function(focusEl) { 6280 if (isElementVisible(focusEl) && focusEl.tabIndex >= 0) { 6281 hiddenFocusable.push({ 6282 html: focusEl.outerHTML.slice(0, 500), 6283 selector: buildScanSelector(focusEl), 6284 parentHiddenHtml: el.outerHTML.slice(0, 200) 6285 }); 6286 } 6287 }); 6288 }); 6289 6290 if (hiddenFocusable.length > 0) { 6291 violations.push({ 6292 id: 'aria-hidden-focus', 6293 impact: 'serious', 6294 tags: ['wcag2aa', 'wcag412'], 6295 description: 'WCAG 4.1.2: Focusable elements must not be hidden with aria-hidden="true"', 6296 helpUrl: 'https://www.w3.org/WAI/WCAG22/Understanding/name-role-value.html', 6297 nodes: hiddenFocusable.slice(0, 10).map(function(item) { 6298 return { 6299 html: item.html, 6300 target: [item.selector], 6301 failureSummary: 'Focusable element is inside aria-hidden="true" container' 6302 }; 6303 }) 6304 }); 6305 } 6306 6307 // WCAG 2.5.3 Label in Name - Enhanced with better visible text extraction 6308 // Visible text = text rendered on screen (excludes aria-hidden, sr-only, SVG internals). 6309 function getVisibleText(el) { 6310 var text = ''; 6311 for (var i = 0; i < el.childNodes.length; i++) { 6312 var child = el.childNodes[i]; 6313 if (child.nodeType === 3) { text += child.textContent; continue; } 6314 if (child.nodeType !== 1) continue; 6315 if (child.getAttribute('aria-hidden') === 'true') continue; 6316 var st = window.getComputedStyle(child); 6317 if (st.display === 'none' || st.visibility === 'hidden') continue; 6318 if (st.opacity === '0') continue; 6319 if (st.position === 'absolute') { 6320 var clip = st.clip; 6321 if (clip === 'rect(0px, 0px, 0px, 0px)' || clip === 'rect(0, 0, 0, 0)') continue; 6322 } 6323 if (st.width === '1px' && st.height === '1px' && st.overflow === 'hidden') continue; 6324 if (st.fontSize === '0px' || st.width === '0px' || st.height === '0px') continue; 6325 text += getVisibleText(child); 6326 } 6327 return text; 6328 } 6329 function buildScanSelector(el) { 6330 if (el.id) return '#' + CSS.escape(el.id); 6331 var testId = el.getAttribute('data-testid') || el.getAttribute('data-test-id'); 6332 if (testId) return '[data-testid="' + testId + '"]'; 6333 var tag = el.tagName.toLowerCase(); 6334 var cls = (el.getAttribute('class') || '').split(/\s+/).filter(function (c) { 6335 return c && c.length < 60 && !/^(active|is-|js-|open|hidden|focus|hover)/i.test(c); 6336 }).slice(0, 3); 6337 return cls.length ? tag + '.' + cls.join('.') : tag; 6338 } 6339 6340 // Enhanced selector to catch more interactive elements 6341 var interactiveSelector = 'button, [role="button"], a[aria-label], [role="link"][aria-label], ' + 6342 '[role="menuitem"][aria-label], [role="tab"][aria-label], [role="checkbox"][aria-label], ' + 6343 '[role="radio"][aria-label], [role="switch"][aria-label], [role="combobox"][aria-label], ' + 6344 '[role="searchbox"][aria-label], [role="textbox"][aria-label]'; 6345 6346 var mismatches = Array.prototype.slice 6347 .call(document.querySelectorAll(interactiveSelector)) 6348 .filter(function (el) { 6349 return !isAccessProScanElement(el) && isElementVisible(el); 6350 }) 6351 .map(function (el) { 6352 var ariaLabel = el.getAttribute('aria-label') || ''; 6353 var visibleText = getVisibleText(el).replace(/\s+/g, ' ').trim(); 6354 if (!ariaLabel || !visibleText) return null; 6355 if (visibleText.length <= 1) return null; 6356 6357 // Normalize for comparison - remove punctuation and make case-insensitive 6358 var normalizedLabel = ariaLabel.toLowerCase().replace(/[^\w\s]/g, ''); 6359 var normalizedVisible = visibleText.toLowerCase().replace(/[^\w\s]/g, ''); 6360 6361 // Check if visible text is substring of aria-label
6362 if (normalizedLabel.includes(normalizedVisible)) return null; 6363 6364 // Check word-by-word containment for multi-word labels 6365 var visibleWords = normalizedVisible.split(/\s+/).filter(Boolean); 6366 if (visibleWords.length > 0) { 6367 var allWordsPresent = visibleWords.every(function(word) { 6368 return normalizedLabel.includes(word); 6369 }); 6370 if (allWordsPresent) return null; 6371 } 6372 6373 return { 6374 html: el.outerHTML.slice(0, 500), 6375 selector: buildScanSelector(el), 6376 ariaLabel: ariaLabel, 6377 visibleText: visibleText, 6378 }; 6379 }) 6380 .filter(Boolean) 6381 .slice(0, 10); 6382 6383 if (mismatches.length > 0) { 6384 violations.push({ 6385 id: 'label-in-name', 6386 impact: 'serious', 6387 tags: ['wcag21a', 'wcag253'], 6388 description: 'WCAG 2.5.3: Accessible name must contain visible label text', 6389 helpUrl: 'https://www.w3.org/WAI/WCAG22/Understanding/label-in-name.html', 6390 nodes: mismatches.map(function (m) { 6391 return { 6392 html: m.html, 6393 target: [m.selector], 6394 failureSummary: 6395 'aria-label="' + 6396 m.ariaLabel + 6397 '" does not contain visible text "' + 6398 m.visibleText + 6399 '"', 6400 }; 6401 }), 6402 }); 6403 } 6404 6405 // 2.5.7 Dragging Movements 6406 var draggableElements = Array.prototype.slice 6407 .call( 6408 document.querySelectorAll( 6409 '[draggable="true"], [data-sortable], .sortable-item', 6410 ), 6411 ) 6412 .filter(function (el) { 6413 return !isAccessProScanElement(el); 6414 }) 6415 .slice(0, 5) 6416 .map(function (el) { 6417 return { 6418 html: el.outerHTML.slice(0, 500), 6419 selector: buildScanSelector(el), 6420 }; 6421 }); 6422 6423 if (draggableElements.length > 0) { 6424 incomplete.push({ 6425 id: 'dragging-movements', 6426 impact: 'serious', 6427 tags: ['wcag22aa', 'wcag257'], 6428 description: 6429 'WCAG 2.5.7: Draggable elements must have a single-pointer alternative. Manual verification required.', 6430 helpUrl: 'https://www.w3.org/WAI/WCAG22/Understanding/dragging-movements.html', 6431 nodes: draggableElements.map(function (e) { 6432 return { 6433 html: e.html, 6434 target: [e.selector], 6435 failureSummary: 6436 'Verify that a keyboard or single-pointer alternative exists for this drag operation.', 6437 }; 6438 }), 6439 }); 6440 } 6441 6442 // ARIA APG: Dialog Pattern 6443 var badDialogs = Array.prototype.slice 6444 .call(document.querySelectorAll('[role="dialog"], [role="alertdialog"]')) 6445 .filter(function (el) { 6446 if (isAccessProScanElement(el)) return false; 6447 return !( 6448 el.hasAttribute('aria-labelledby') || el.hasAttribute('aria-label') 6449 ); 6450 }) 6451 .slice(0, 5) 6452 .map(function (el) { 6453 return { 6454 html: el.outerHTML.slice(0, 500), 6455 selector: buildScanSelector(el), 6456 }; 6457 }); 6458 6459 if (badDialogs.length > 0) { 6460 violations.push({ 6461 id: 'dialog-missing-label', 6462 impact: 'serious', 6463 tags: ['aria-apg', 'wcag2aa'], 6464 description: 6465 'ARIA APG Dialog Pattern: role="dialog" must have aria-labelledby or aria-label', 6466 helpUrl: 'https://www.w3.org/WAI/ARIA/apg/patterns/dialog-modal/', 6467 nodes: badDialogs.map(function (d) { 6468 return { 6469 html: d.html, 6470 target: [d.selector], 6471 failureSummary: 6472 'Add aria-labelledby pointing to a visible dialog title, or aria-label.', 6473 }; 6474 }), 6475 }); 6476 } 6477 6478 // ARIA APG: Tabs Pattern â tabs must have aria-selected (true on active, false on others
6478) 6479 var badTabs = []; 6480 Array.prototype.slice 6481 .call(document.querySelectorAll('[role="tablist"]')) 6482 .forEach(function (tabList) { 6483 if (isAccessProScanElement(tabList)) return; 6484 var tabs = Array.prototype.slice.call(tabList.querySelectorAll('[role="tab"]')); 6485 var hasAnySelected = tabs.some(function (t) { return t.getAttribute('aria-selected') === 'true'; }); 6486 tabs.forEach(function (tab) { 6487 if (isAccessProScanElement(tab)) return; 6488 if (!tab.hasAttribute('aria-selected')) { 6489 // Detect if this tab appears active (has aria-current, class "active", etc.) 6490 var looksActive = !hasAnySelected && tab.classList.contains('active'); 6491 badTabs.push({ 6492 html: tab.outerHTML.slice(0, 500), 6493 selector: buildScanSelector(tab), 6494 suggestValue: looksActive ? 'true' : 'false', 6495 }); 6496 } 6497 }); 6498 }); 6499 badTabs = badTabs.slice(0, 5); 6500 6501 if (badTabs.length > 0) { 6502 violations.push({ 6503 id: 'tabs-missing-aria-selected', 6504 impact: 'serious', 6505 tags: ['aria-apg', 'wcag2aa'], 6506 description: 6507 'ARIA APG Tabs Pattern: each [role="tab"] must have aria-selected="true" or aria-selected="false"', 6508 helpUrl: 'https://www.w3.org/WAI/ARIA/apg/patterns/tabs/', 6509 nodes: badTabs.map(function (t) { 6510 return { 6511 html: t.html, 6512 target: [t.selector], 6513 failureSummary: 6514 'Tab missing aria-selected. Suggested value: aria-selected="' + (t.suggestValue || 'false') + '"', 6515 }; 6516 }), 6517 }); 6518 } 6519 } catch (err) { 6520 console.warn( 6521 '[AccessPro][AxeScan][storefront] WCAG 2.2 checks error', 6522 err && err.message ? err.message : err, 6523 ); 6524 } 6525 6526 return { violations: violations, incomplete: incomplete }; 6527 } 6528 6529 function runAxeScan() { 6530 if (!window.axe) { 6531 showScanOverlay('Scan failed: axe-core not loaded'); 6532 notifyScanOpener({ 6533 type: 'accesspro-axe-scan-error', 6534 token: token, 6535 message: 'axe-core failed to load', 6536 }); 6537 return; 6538 } 6539 6540 // CRITICAL: Hide overlay before scan to prevent interference with color-contrast/visibility checks 6541 hideOverlay(); 6542 6543 // Run axe WITHOUT overlay visible to get accurate color contrast and visibility results 6544 window.axe 6545 .run(document, { 6546 runOnly: { 6547 type: 'tag', 6548 values: ['wcag2a', 'wcag2aa', 'wcag21aa', 'wcag22aa'], 6549 }, 6550 exclude: [ 6551 ['#acp-icon'], 6552 ['#acp-widget'], 6553 ['#acp-virtualKeyboardPopup'], 6554 ['#acp-definition-popup'], 6555 ['#acp-dictionary-toast'], 6556 ['#acp-scan-overlay'], 6557 ['.asw-widget-button-top'], 6558 ], 6559 }) 6560 .then(function (results) { 6561 // Now safe to show overlay after scan completes 6562 showScanOverlay('Processing scan resultsâ¦'); 6563 var extra = runWcag22Checks(); 6564 if (!results.violations) results.violations = []; 6565 if (!results.incomplete) results.incomplete = []; 6566 // Scanner stores customChecks separately; merge into axe arrays so 6567 // buildAxeScanSummary (customChecks: []) still surfaces them. 6568 results.violations = results.violations.concat(extra.violations || []); 6569 results.incomplete = results.incomplete.concat(extra.incomplete || []); 6570 6571 // List rule only: axe often stores just the opening <ul> tag. 6572 // Re-serialize with direct children so the report/AI Fixes show the real issue. 6573 enrichListViolationNodes(results); 6574 6575 notifyScanOpener({ 6576 type: 'accesspro-axe-scan', 6577 token: token, 6578 url: window.location.href, 6579 results: results, 6580 }); 6581 }) 6582 .catch(function (err) { 6583 showScanOverlay('Scan failed'); 6584 notifyScanOpener({ 6585 type: 'accesspro-axe-scan-error', 6586 token: token, 6587 message: err && err.message ? err.message : 'Accessibility scan failed', 6588 }); 6589 }); 6590 } 6591 6592 /** 6593 * Optimize axe `list` node payloads only (no other rules). 6594 * Horizon overflow-list / ul[part=list] failures need children in HTML 6595 * so merchants see role=presentation / non-li children clearly. 6596 */ 6597 function enrichListViolationNodes(results) { 6598 var violations = results && results.violations; 6599 if (!violations || !violations.length) return; 6600 6601 function queryInRoot(root, sel) { 6602 if (!root || !sel) return null; 6603 try { 6604 return root.querySelector(sel); 6605 } catch (e) { 6606 return null; 6607 } 6608 } 6609 6610 function resolveShadowPath(path) { 6611 if (!path) return null; 6612 if (typeof path === 'string') { 6613 return ( 6614 queryInRoot(document, path) || 6615 queryDeepAll(path)[0] || 6616 null 6617 ); 6618 } 6619 if (!Array.isArray(path) || !path.length) return null; 6620 6621 // Nested shadow path: ["host", "inner"] or [["host", "inner"]] 6622 var steps = path; 6623 if (steps.length === 1 && Array.isArray(steps[0])) { 6624 steps = steps[0]; 6625 } 6626 6627 var ctx = document; 6628 var el = null; 6629 for (var i = 0; i < steps.length; i++) { 6630 var step = steps[i]; 6631 if (Array.isArray(step)) { 6632 el = resolveShadowPath(step); 6633 } else { 6634 el = queryInRoot(ctx, String(step)); 6635 if (!el && ctx === document) { 6636 el = queryDeepAll(String(step))[0] || null; 6637 } 6638 } 6639 if (!el) return null; 6640 ctx = el.shadowRoot || el; 6641 } 6642 return el; 6643 } 6644 6645 function queryDeepAll(sel) { 6646 var out = []; 6647 function walk(root) { 6648 if (!root || !root.querySelectorAll) return; 6649 try { 6650 Array.prototype.push.apply(out, root.querySelectorAll(sel)); 6651 } catch (e) { 6652 /* invalid selector */ 6653 } 6654 var all = root.querySelectorAll ? root.querySelectorAll('*') : []; 6655 for (var i = 0; i < all.length; i++) { 6656 if (all[i].shadowRoot) walk(all[i].shadowRoot); 6657 } 6658 } 6659 walk(document); 6660 return out; 6661 } 6662 6663 function serializeChildSnippet(child) { 6664 if (!child || !child.tagName) return ''; 6665 var tag = child.tagName.toLowerCase(); 6666 var role = (child.getAttribute && child.getAttribute('role')) || ''; 6667 var part = (child.getAttribute && child.getAttribute('part')) || ''; 6668 var cls = (child.getAttribute && child.getAttribute('class')) || ''; 6669 var open = 6670 '<' + 6671 tag + 6672 (role ? ' role="' + role + '"' : '') + 6673 (part ? ' part="' + part + '"' : '') + 6674 (cls 6675 ? ' class="' + 6676 String(cls) 6677 .trim() 6678 .split(/\s+/) 6679 .slice(0, 3) 6680 .join(' ') + 6681 '"' 6682 : '') + 6683 '>'; 6684 var text = (child.textContent || '').replace(/\s+/g, ' ').trim().slice(0, 40); 6685 return open + (text ? text : 'â¦') + '</' + tag + '>'; 6686 } 6687 6688 function serializeListHtml(listEl) { 6689 if (!listEl || !listEl.tagName) return ''; 6690 var tag = listEl.tagName.toLowerCase(); 6691 if (tag !== 'ul' && tag !== 'ol') return ''; 6692 var openMatch = String(listEl.outerHTML || '').match(/^<[^>]+>/); 6693 var openTag = openMatch ? openMatch[0] : '<' + tag + '>'; 6694 var children = Array.prototype.slice.call(listEl.children || []).slice(0, 10); 6695 if (!children.length) return openTag; 6696 var lines = children.map(function (child) { 6697 return ' ' + serializeChildSnippet(child); 6698 }); 6699 if ((listEl.children || []).length > 10) { 6700 lines.push(' <!-- ⦠' + (listEl.children.length - 10) + ' more -->'); 6701 } 6702 return openTag + '\n' + lines.join('\n') + '\n</' + tag + '>'; 6703 } 6704 6705 function findListFallback() { 6706 var candidates = queryDeepAll('ul[part="list"], overflow-list ul, ul, ol'); 6707 var withBad = candidates.filter(function (listEl) { 6708 return Array.prototype.some.call(listEl.children || [], function (child) { 6709 var role = (child.getAttribute && child.getAttribute('role')) || ''; 6710 var t = (child.tagName || '').toLowerCase(); 6711 return ( 6712 role === 'presentation' || 6713 role === 'none' || 6714 (t !== 'li' && t !== 'script' && t !== 'template' && t !== 'style') 6715 ); 6716 }); 6717 }); 6718 return withBad.length === 1 ? withBad[0] : null; 6719 } 6720 6721 violations.forEach(function (v) { 6722 if (!v || v.id !== 'list') return;
6723 (v.nodes || []).forEach(function (node) { 6724 if (!node) return; 6725 var hintHtml = String(node.html || ''); 6726 var el = resolveShadowPath(node.target); 6727 6728 // Flat axe targets like ["ul"] are too generic â prefer part=list from html hint. 6729 if ( 6730 el && 6731 /part\s*=\s*["']list["']/i.test(hintHtml) && 6732 !(el.getAttribute && el.getAttribute('part') === 'list') 6733 ) { 6734 var partLists = queryDeepAll('ul[part="list"]'); 6735 if (partLists.length === 1) el = partLists[0]; 6736 else if (partLists.length > 1) { 6737 var badPart = partLists.filter(function (listEl) { 6738 return Array.prototype.some.call(listEl.children || [], function (child) { 6739 var role = (child.getAttribute && child.getAttribute('role')) || ''; 6740 return role === 'presentation' || role === 'none'; 6741 }); 6742 }); 6743 if (badPart.length === 1) el = badPart[0]; 6744 } 6745 } 6746 6747 if (el && el.tagName) { 6748 var t = el.tagName.toLowerCase(); 6749 if (t !== 'ul' && t !== 'ol' && el.closest) { 6750 el = el.closest('ul, ol') || el; 6751 } 6752 } 6753 if (!el || !el.tagName || !/^(UL|OL)$/.test(el.tagName)) { 6754 el = findListFallback(); 6755 } 6756 if (!el) return; 6757 6758 var better = serializeListHtml(el); 6759 if (better && better.length > hintHtml.length) { 6760 node.html = better.slice(0, 2500); 6761 } 6762 6763 // Prefer a stable, actionable selector for Horizon chrome lists. 6764 if (el.getAttribute && el.getAttribute('part') === 'list') { 6765 node.target = ['ul[part="list"]']; 6766 } 6767 }); 6768 }); 6769 } 6770 6771 function notifyScanOpener(payload) { 6772 if (window.opener && payload.type === 'accesspro-axe-scan-error') { 6773 var jobId = new URLSearchParams(window.location.search).get('acp_job'); 6774 showScanOverlay('Scan failed'); 6775 window.opener.postMessage( 6776 { 6777 type: 'accesspro-axe-scan-progress', 6778 jobId: jobId, 6779 error: payload.message || 'Accessibility scan failed', 6780 }, 6781 '*', 6782 ); 6783 setTimeout(function () { 6784 window.close(); 6785 }, 400); 6786 return; 6787 } 6788 submitScanResult(payload); 6789 } 6790 6791 var script = document.createElement('script'); 6792 // cdnjs only goes up to 4.10.3; jsDelivr serves 4.11.1 (matches accessibility-scanner). 6793 script.src = 'https://cdn.jsdelivr.net/npm/[email protected]/axe.min.js'; 6794 script.onload = function () { 6795 waitForFullPageLoad().then(runAxeScan); 6796 }; 6797 script.onerror = function () { 6798 notifyScanOpener({ 6799 type: 'accesspro-axe-scan-error', 6800 token: token, 6801 message: 'Failed to load axe-core', 6802 }); 6803 }; 6804 document.head.appendChild(script); 6805 })(); 6806</script>
6806 6807 6808 6809<style> 6810 .accesspro-icon { 6811 display: inline-flex; 6812 flex-direction: column; 6813 align-items: center; 6814 gap: 4px; 6815 cursor: pointer; 6816 text-decoration: none; 6817 vertical-align: middle; 6818 color: var(--acp-trigger-color, #23185c); 6819 } 6820 6821 /* Icon-only triggers should not reserve a text line box. */ 6822 .accesspro-icon[icon='true']:not(.acp-trigger--has-text) { 6823 line-height: 0; 6824 } 6825 6826 .accesspro-icon .asw-menu-btn-container { 6827 flex-shrink: 0; 6828 } 6829 6830 /* The cloned icon is inert; the host element is the control. */ 6831 .accesspro-icon .asw-menu-btn-container, 6832 .accesspro-icon .asw-menu-btn { 6833 pointer-events: none; 6834 } 6835</style>
6836<script> 6837 (function () { 6838 var SELECTOR = '.accesspro-icon'; 6839 var BOUND = 'acpTriggerBound'; 6840 var FILLED = 'acpTriggerFilled'; 6841 var settings = window.accessProWidgetSettings || {}; 6842 var inlineMode = !!settings.hide_floating_icon; 6843 var fallbackReady = inlineMode; 6844 document.documentElement.style.setProperty( 6845 '--acp-trigger-color', 6846 settings.icon_color_fill || '#23185c' 6847 ); 6848 6849 /* ---- open the widget ------------------------------------------------ */ 6850 /* main.js is deferred, so iconInstance may not exist on an early click. */ 6851 function openWidget(event) { 6852 if (event) event.preventDefault(); 6853 if (window.iconInstance) { 6854 window.iconInstance.toggleWidget(); 6855 return; 6856 } 6857 var waited = 0; 6858 var timer = setInterval(function () { 6859 if (window.iconInstance) { 6860 clearInterval(timer); 6861 window.iconInstance.toggleWidget(); 6862 } else if ((waited += 100) >= 10000) { 6863 clearInterval(timer); 6864 console.error('[AccessPro] Widget did not load â cannot open menu.'); 6865 } 6866 }, 100); 6867 } 6868 6869 /* ---- clone the floating icon ---------------------------------------- */ 6870 function buildIcon() { 6871 var source = document.querySelector('#Access-Pro-Icon .asw-menu-btn-container'); 6872 if (!source) return null; 6873 6874 var clone = source.cloneNode(true); 6875 6876 // Strip ids: the widget mutates apMenuIconStroke / apMenuIconFill by id 6877 // when contrast modes change, and duplicates would shadow the original. 6878 clone.removeAttribute('id'); 6879 clone.querySelectorAll('[id]').forEach(function (node) { 6880 node.removeAttribute('id'); 6881 }); 6882 6883 // The dismiss "X" and loading dots belong to the floating icon only. 6884 clone.querySelectorAll('.asw-hide-widget-icon, .acp-floating-dots').forEach(function (node) { 6885 node.remove(); 6886 }); 6887 6888 // A <button> nested inside the merchant's <a>
6888 is invalid HTML. Swap it 6889 // for a <span> carrying the same classes so the widget CSS still applies. 6890 var button = clone.querySelector('.asw-menu-btn'); 6891 if (button) { 6892 var span = document.createElement('span'); 6893 span.className = button.className; 6894 span.setAttribute('style', button.getAttribute('style') || ''); 6895 span.setAttribute('aria-hidden', 'true'); 6896 while (button.firstChild) span.appendChild(button.firstChild); 6897 button.parentNode.replaceChild(span, button); 6898 } 6899 6900 return clone; 6901 } 6902 6903 6904 /* ---- fallback: build the icon from settings ------------------------- */ 6905 /* Used when the floating icon is not in the DOM â the widget skips 6906 render() entirely if the visitor dismissed it, if a page/country filter 6907 bails out of init(), or if trigger display is set to title-only. 6908 Geometry below mirrors render() in main.js exactly. */ 6909 var GLYPHS = { 6910 default: '<svg class="asw-main-icon" xmlns="http://www.w3.org/2000/svg" fill="#ffffff" style="height: 45%; width: 45%; fill: #ffffff" viewBox="0 0 512 512" aria-hidden="true" focusable="false"><path d="M256,112a56,56,0,1,1,56-56A56.06,56.06,0,0,1,256,112Z" /><path d="M432,112.8l-.45.12h0l-.42.13c-1,.28-2,.58-3,.89-18.61,5.46-108.93,30.92-172.56,30.92-59.13,0-141.28-22-167.56-29.47a73.79,73.79,0,0,0-8-2.58c-19-5-32,14.3-32,31.94,0,17.47,15.7,25.79,31.55,31.76v.28l95.22,29.74c9.73,3.73,12.33,7.54,13.6,10.84,4.13,10.59.83,31.56-.34,38.88l-5.8,45L150.05,477.44q-.15.72-.27,1.47l-.23,1.27h0c-2.32,16.15,9.54,31.82,32,31.82,19.6,0,28.25-13.53,32-31.94h0s28-157.57,42-157.57,42.84,157.57,42.84,157.57h0c3.75,18.41,12.4,31.94,32,31.94,22.52,0,34.38-15.74,32-31.94-.21-1.38-.46-2.74-.76-4.06L329,301.27l-5.79-45c-4.19-26.21-.82-34.87.32-36.9a1.09,1.09,0,0,0,.08-.15c1.08-2,6-6.48,17.48-10.79l89.28-31.21a16.9,16.9,0,0,0,1.62-.52c16-6,32-14.3,32-31.93S451,107.81,432,112.8Z" /></svg>', 6911 wheelchair: '<svg class="asw-main-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 960 960" fill="#ffffff" aria-hidden="true" focusable="false"> <path d="M480 240q-33 0-56.5-23.5T400 160q0-33 23.5-56.5T480 80q33 0 56.5 23.5T560 160q0 33-23.5 56.5T480 240ZM680 880V680H480q-33 0-56.5-23.5T400 600V360q0-33 23.5-56.5T480 280q24 0 41.5 10.5T559 324q55 66 99.5 90.5T760 480v80q-53 0-107-23t-93-55v138h120q33 0 56.5 23.5T760 680v220h-80ZM400 880q-83 0-141.5-58.5T200 680q0-72 45.5-127T360 484v82q-35 14-57.5 44.5T280 680q0 50 35 85t85 35q39 0 69.5-22.5T514 720h82q-14 69-69 114.5T400 880Z" /> </svg>', 6912 blind: '<svg class="asw-main-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#ffffff" style="fill: #ffffff" aria-hidden="true" focusable="false"> <path d="m240-60-64-48 104-139v-213q0-31 5.5-68.5T300-596l-60 34v142h-80v-188l216-123q8-5 17-7t19-2q24 0 44 12t30 33l31 67q20 44 61 66t102 22v80h-39L860-78l-35 20-237-413q-40-13-72.5-37.5T460-568q-10 29-15.5 66.5T441-432l79 112v260h-80v-200l-71-102-9 142L240-60Zm220-700q-33 0-56.5-23.5T380-840q0-33 23.5-56.5T460-920q33 0 56.5 23.5T540-840q0 33-23.5 56.5T460-760Z" /> </svg>', 6913 eye: '<svg class="asw-main-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#ffffff" style="fill: #ffffff" aria-hidden="true" focusable="false"><path d="m644-428-58-58q9-47-27-88t-93-32l-58-58q17-8 34.5-12t37.5-4q75 0 127.5 52.5T660-500q0 20-4 37.5T644-428Zm128 126-58-56q38-29 67.5-63.5T832-500q-50-101-143.5-160.5T480-720q-29 0-57 4t-55 12l-62-62q41-17 84-25.5t90-8.5q151 0 269 83.5T920-500q-23 59-60.5 109.5T772-302Zm20 246L624-222q-35 11-70.5 16.5T480-200q-151 0-269-83.5T40-500q21-53 53-98.5t73-81.5L56-792l56-56 736 736-56 56ZM222-624q-29 26-53 57t-41 67q50 101 143.5 160.5T480-280q20 0 39-2.5t39-5.5l-36-38q-11 3-21 4.5t-21 1.5q-75 0-127.5-52.5T300-500q0-11 1.5-21t4.5-21l-84-82Zm319 93Zm-151 75Z" /></svg>', 6914 accStraight: '<svg class="asw-main-icon" xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" fill="#ffffff" style="fill: #ffffff" aria-hidden="true" focusable="false"><path d="M480-720q-33 0-56.5-23.5T400-800q0-33 23.5-56.5T480-880q33 0 56.5 23.5T560-800q0 33-23.5 56.5T480-720ZM360-80v-520H120v-80h720v80H600v520h-80v-240h-80v240h-80Z" /></svg>', 6915 settings: '<svg class="asw-main-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#ffffff" style="fill: #ffffff" aria-hidden="true" focusable="false">
6915<path d="m370-80-16-128q-13-5-24.5-12T307-235l-119 50L78-375l103-78q-1-7-1-13.5v-27q0-6.5 1-13.5L78-585l110-190 119 50q11-8 23-15t24-12l16-128h220l16 128q13 5 24.5 12t22.5 15l119-50 110 190-103 78q1 7 1 13.5v27q0 6.5-2 13.5l103 78-110 190-118-50q-11 8-23 15t-24 12L590-80H370Zm70-80h79l14-106q31-8 57.5-23.5T639-327l99 41 39-68-86-65q5-14 7-29.5t2-31.5q0-16-2-31.5t-7-29.5l86-65-39-68-99 42q-22-23-48.5-38.5T533-694l-13-106h-79l-14 106q-31 8-57.5 23.5T321-633l-99-41-39 68 86 64q-5 15-7 30t-2 32q0 16 2 31t7 30l-86 65 39 68 99-42q22 23 48.5 38.5T427-266l13 106Zm42-180q58 0 99-41t41-99q0-58-41-99t-99-41q-59 0-99.5 41T342-480q0 58 40.5 99t99.5 41Zm-2-140Z" /></svg>' 6916 }; 6917 6918 var SIZES = { 6919 small: 40, '0.5x': 40, 6920 medium: 50, '1x': 50, default: 50, 6921 large: 60, '1.5x': 60, 6922 extraLarge: 75, '2x': 75 6923 }; 6924 6925 function buildIconFromSettings() { 6926 var s = window.accessProWidgetSettings || {}; 6927 var style = s.icon_style || 'thick'; 6928 var square = s.icon_shape === 'square'; 6929 // Defaults must match mergeSettings() in main.js and DEFAULT_SETTINGS in 6930 // app/constants/settings.js â both use #23185c for stroke AND fill â so a 6931 // metafield missing these keys renders identically on either path. 6932 var stroke = s.icon_color_stroke || '#23185c'; 6933 var fill = s.icon_color_fill || '#23185c'; 6934 var px = SIZES[s.icon_size] || 50; 6935 var solid = style === 'solid'; 6936 var thin = style === 'thin'; 6937 var shapes = ''; 6938 6939 if (square) { 6940 var sizes = [ 6941 [solid ? 100 : 98, stroke, 12], 6942 [solid ? 0 : thin ? 86 : 82, '#ffffff', 10], 6943 [solid || thin ? 80 : 70, fill, 8] 6944 ];
6945 sizes.forEach(function (d) { 6946 if (!d[0]) return; 6947 var off = (100 - d[0]) / 2; 6948 shapes += '<rect x="' + off + '" y="' + off + '" width="' + d[0] + '" height="' + d[0] + 6949 '" rx="' + d[2] + '" ry="' + d[2] + '" fill="' + d[1] + '" />'; 6950 }); 6951 } else { 6952 [ 6953 [solid ? 50 : 49, stroke], 6954 [solid ? 0 : thin ? 43 : 41, '#ffffff'], 6955 [solid || thin ? 40 : 35, fill] 6956 ].forEach(function (d) { 6957 shapes += '<circle cx="50" cy="50" r="' + d[0] + '" fill="' + d[1] + '" />'; 6958 }); 6959 } 6960 6961 var name = GLYPHS[s.icon] ? s.icon : 'default'; 6962 var box = document.createElement('div'); 6963 box.className = 'asw-menu-btn-container'; 6964 box.setAttribute('style', 'position:relative;width:' + px + 'px;height:' + px + 'px;'); 6965 // The widget stylesheet may not be loaded when render() never ran, so 6966 // every layout-critical rule is inlined rather than left to the classes. 6967 box.innerHTML = 6968 '<span class="asw-menu-btn' + (square ? ' asw-menu-btn--square' : '') + '" aria-hidden="true"' + 6969 ' style="position:relative;display:flex;align-items:center;justify-content:center;' + 6970 'width:100%;height:100%;background:transparent;border:none;padding:0;margin:0;' + 6971 'border-radius:' + (square ? '12%' : '50%') + ';">' + 6972 '<svg class="asw-outer-svg" viewBox="0 0 100 100" aria-hidden="true" focusable="false"' + 6973 ' style="width:100%;height:100%;display:block;">' + shapes + '</svg>' + 6974 GLYPHS[name] + '</span>'; 6975 6976 var glyph = box.querySelector('.asw-main-icon'); 6977 if (glyph) { 6978 // .asw-main-icon sizes to 50% via CSS; the default glyph overrides to 45% inline. 6979 var pct = name === 'default' ? '45%' : '50%'; 6980 glyph.setAttribute( 6981 'style', 6982 'position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);' + 6983 'width:' + pct + ';height:' + pct + ';fill:#ffffff;z-index:100;' 6984 ); 6985 } 6986 return box; 6987 } 6988 6989 /* Name from the host only. Text inside aria-hidden (the cloned icon) does not count. */ 6990 function triggerNeedsName(el) { 6991 if ((el.getAttribute('aria-label') || '').trim()) return false; 6992 if ((el.getAttribute('aria-labelledby') || '').trim()) return false; 6993 if ((el.getAttribute('title') || '').trim()) return false; 6994 var node = el.firstChild; 6995 while (node) { 6996 if (node.nodeType === 3) { 6997 if (node.textContent.trim()) return false; 6998 } else if (node.nodeType === 1 && node.getAttribute('aria-hidden') !== 'true') { 6999 if (!triggerNeedsName(node)) return false; 7000 } 7001 node = node.nextSibling; 7002 } 7003 return true; 7004 } 7005 7006 function ensureTriggerName(el) { 7007 if (triggerNeedsName(el)) { 7008 el.setAttribute('aria-label', 'Open Accessibility Menu'); 7009 } 7010 } 7011 7012 /* ---- wire one element ----------------------------------------------- */ 7013 function bind(el) { 7014 if (el.dataset[BOUND]) return; 7015 el.dataset[BOUND] = '1'; 7016 7017 el.addEventListener('click', openWidget); 7018 el.addEventListener('keydown', function (event) { 7019 if (event.key === 'Enter' || event.key === ' ') openWidget(event); 7020 }); 7021 7022 // A non-anchor host (div/span) needs explicit button semantics. 7023 var tag = el.tagName.toLowerCase(); 7024 if (tag !== 'a' && tag !== 'button') { 7025 if (!el.hasAttribute('role')) el.setAttribute('role', 'button'); 7026 if (!el.hasAttribute('tabindex')) el.setAttribute('tabindex', '0'); 7027 } 7028 7029 if (el.textContent.trim()) el.classList.add('acp-trigger--has-text'); 7030 ensureTriggerName(el); 7031 } 7032 7033 function fillIcon(el, allowFallback) { 7034 if (el.dataset[FILLED]) return true; 7035 if (el.getAttribute('icon') !== 'true') return true; 7036 7037 // Prefer cloning the live icon; fall back to rebuilding from settings. 7038 var icon = buildIcon(); 7039 if (!icon && (allowFallback || inlineMode)) icon = buildIconFromSettings(); 7040 if (!icon) return false; 7041 7042 // The clone's size lives only in the container's inline style. If the 7043 // widget rendered without one, size it from settings so it cannot 7044 // collapse to zero height inside the merchant's layout. 7045 if (!/\bheight\s*:/.test(icon.getAttribute('style') || '')) { 7046 var px = SIZES[(window.accessProWidgetSettings || {}).icon_size] || 50; 7047 icon.style.position = 'relative'; 7048 icon.style.width = px + 'px'; 7049 icon.style.height = px + 'px'; 7050 } 7051 7052 el.insertBefore(icon, el.firstChild); 7053 el.dataset[FILLED] = '1'; 7054 ensureTriggerName(el); 7055 return true; 7056 } 7057 7058 /* ---- scan ------------------------------------------------------------ */
7059 /* Clicks are wired immediately so the trigger works before the icon 7060 renders; icons are filled in once the floating icon exists. */ 7061 var pendingIcons = false; 7062 7063 function scan(allowFallback) { 7064 pendingIcons = false; 7065 document.querySelectorAll(SELECTOR).forEach(function (el) { 7066 bind(el); 7067 if (!fillIcon(el, allowFallback)) pendingIcons = true; 7068 }); 7069 } 7070 7071 function start() { 7072 scan(inlineMode); 7073 7074 // Inline mode hides the floating icon, so build from settings immediately. 7075 if (inlineMode) { 7076 // console.log('[AccessPro] Inline triggers â using widget settings for icons'); 7077 } 7078 7079 // The floating icon only renders after the settings request resolves and 7080 // the widget chunk loads, so poll until it appears. If it never does, 7081 // stop waiting and build the icon from settings instead. 7082 var FALLBACK_AFTER = 2500; 7083 var waited = 0; 7084 var timer = setInterval(function () { 7085 if (!pendingIcons) { 7086 clearInterval(timer); 7087 return; 7088 } 7089 waited += 200; 7090 if (waited < FALLBACK_AFTER) { 7091 scan(false); 7092 return; 7093 } 7094 fallbackReady = true; 7095 clearInterval(timer); 7096 scan(true); 7097 if (pendingIcons) { 7098 console.warn('[AccessPro] Could not render inline icons.'); 7099 } 7100 }, 200); 7101 7102 // Catch triggers added later (theme editor re-renders, dynamic sections). 7103 // Debounced: the widget itself mutates the DOM heavily as it renders. 7104 if (window.MutationObserver) { 7105 var queued = false; 7106 new window.MutationObserver(function () { 7107 if (queued) return; 7108 queued = true; 7109 requestAnimationFrame(function () { 7110 queued = false; 7111 scan(fallbackReady || inlineMode); 7112 }); 7113 }).observe(document.body, { childList: true, subtree: true }); 7114 } 7115 } 7116 7117 if (document.readyState === 'loading') { 7118 document.addEventListener('DOMContentLoaded', start); 7119 } else { 7120 start(); 7121 } 7122 })(); 7123</script>
7123 7124 7125 7126</div>
7126<script src="https://cdn.shopify.com/storefront/standard-actions.js" type="module" data-source-attribution="shopify.standard_actions"></script>
7126 7127</body> 7128</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.