1<!doctype html> 2<html lang="en"> 3<head prefix="og: http://ogp.me/ns# cms: http://ogp.me/ns/cms#"> 4 <meta charset="utf-8"/> 5<meta name="title" content="Learn more About AmericanFlags.com"/> 6<meta name="description" content="We've worked hard to make AmericanFlags.com America's most trusted name in flags. We feature a wide selection of American flags, historic flags, flagpoles and more."/> 7<meta name="keywords" content="AmericanFlags.com"/> 8<meta name="robots" content="INDEX,FOLLOW"/> 9<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.0, user-scalable=no"/> 10<title>Learn more About AmericanFlags.com</title> 11<link rel="stylesheet" type="text/css" media="all" href="https://www.americanflags.com/static/frontend/Krish/AmericanFlags/en_US/css/styles.css" />
12<script type="text/javascript" src="https://cdn.moonshot-ai.com/snippets/70407682.js"></script>
vendor: 1 bytes, line 12
12
13<script type="text/javascript" type="text/javascript" src="https://www.americanflags.com/static/frontend/Krish/AmericanFlags/en_US/Magento_Theme/js/swiper.min.js"></script>
13 14<!--[if IE 11]>
15<script type="text/javascript" src="https://www.americanflags.com/static/frontend/Krish/AmericanFlags/en_US/Klevu_Search/js/klevu/ieUrlPolyfill.min.js"></script>
15 16<![endif]--> 17<link rel="canonical" href="https://www.americanflags.com/about" /> 18<link rel="icon" type="image/x-icon" href="https://www.americanflags.com/media/favicon/stores/1/AF_favicon32_5ec8c3ce2a081b16fb0e2c3e7f1f468e.jpg" /> 19<link rel="shortcut icon" type="image/x-icon" href="https://www.americanflags.com/media/favicon/stores/1/AF_favicon32_5ec8c3ce2a081b16fb0e2c3e7f1f468e.jpg" /> 20<!-- Google Tag Manager -->
21<script>window.addEventListener('init-external-scripts', () => {
vendor: 333 bytes, lines 21-26
21 22(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 23new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 24j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 25'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 26})(window,document,'script','dataLayer','
26GTM-P36MHBN
vendor: 5 bytes, line 26
26');
27}, {once: true, passive: true});</script>
27 28<!-- End Google Tag Manager Keep it here --> 29 30 31<style> 32.checkout-index-index #recaptcha-checkout-place-order, 33.checkout-index-index #recaptcha-checkout-braintree, 34.checkout-index-index .tax-exempt-request { display: none; } 35 36.hyva_checkout-index-index .field-alias-street{ position:relative } 37.hyva_checkout-index-index .field-alias-street ul.messages {position: absolute;right: 12px; top: 15px;} 38 39#buttons-container > div > div.paypal-button-row.paypal-button-number-1.paypal-button-layout-vertical.paypal-button-number-multiple.paypal-button-env-production.paypal-button-color-blue.paypal-button-text-color-white.paypal-logo-color-white.paypal-button-shape-rect{ 40 display:none; 41} 42.header-top-shipping .trustpilot-block { flex-shrink:0; } 43.menu-hover .page-wrapper::before { z-index:100; } 44 45.page-header{z-index:100} 46 47@media(max-width:767px) { 48 #gallery { height:570px; } 49 .product-info-main #gallery > div { height:auto; } 50 a[aria-label="store logo"] { height:60px; } 51 #gallery > div:last-child { height:100%; } 52} 53@media(max-width:500px) { 54 #gallery { height:470px; } 55} 56@media(max-width:400px) { 57 #gallery { height:450px; } 58} 59 60.trigger-button.trigger-button--visible.size-medium.position-x-right.position-y-bottom { 61 visibility: hidden; 62display: none; 63} 64</style>
64<script> 65 var BASE_URL = 'https://www.americanflags.com/'; 66 var require = { 67 "baseUrl": "https://www.americanflags.com/static/frontend/Krish/AmericanFlags/en_US" 68 }; 69</script>
69 70 71<link rel="preconnect" href="https://js.klevu.com"/>
72<script type="text/javascript"> 73 var klevu_lang = 'en'; 74 var klevu_baseCurrencyCode = 'USD'; 75 var klevu_currentCurrencyCode = 'USD'; 76 var klevu_pubIsInUse = true; 77 var klevu_current_version = '3.4.2'; 78</script>
78 79
79<script type="text/javascript" src="https://js.klevu.com/core/v2/klevu.js"></script>
vendor: 1 bytes, line 79
79
80<script type="text/javascript" id="klevu_jsapikeys"> 81 klevu({"search":{"apiKey":"klevu-14568465341263011"},"analytics":{"apiKey":"klevu-14568465341263011"}}); 82</script>
vendor: 1 bytes, line 82
82
83<script type="text/javascript" id="klevu_jsmodules"> 84 // Add Price Field Suffix for customer group and currency conversion 85 var klevu_addPriceSuffixToQueryControl = { 86 name: 'addPriceSuffixToQuery', 87 fire: function (data, scope) { 88 var localStorage = JSON.parse( 89 window.localStorage.getItem('klv_mage') || '{}' 90 ); 91 var customerData = localStorage.customerData || {}; 92 if ("undefined" !== typeof customerData.customer_group_id) { 93 klevu.search.modules.addPriceSuffixToQuery(data, scope, klevu_baseCurrencyCode, customerData.customer_group_id); 94 } 95 } 96 }; 97 98 (function (klevu) { 99 klevu.extend(true, klevu.search.modules, { 100 addPriceSuffixToQuery: function (data, scope, currencyCode, customerGroupId) { 101 if (typeof data.request.current === "undefined") { 102 return false; 103 } 104 105 klevu.each(data.request.current.recordQueries, function (key, query) { 106 //code to fetch prices 107 klevu.setObjectPath( 108 data, 109 "localOverrides.query." + query.id + ".settings.priceFieldSuffix", 110 currencyCode + '-' + customerGroupId 111 ); 112 }); 113 }, 114 mageConvertPriceRecordCurrencyData: function (productRecords, currencyCode, currencyRates) { 115 if (!productRecords) { 116 return; 117 } 118 119 klevu.each(productRecords, function (recordKey, productRecord) { 120 var fromRate = parseFloat(currencyRates[productRecord.currency] || 0); 121 var toRate = parseFloat(currencyRates[currencyCode] || 0); 122 if (!fromRate || !toRate) { 123 return; 124 } 125 126 var exchangeRate = toRate / fromRate; 127 128 if (klevu.isNumeric(klevu.getObjectPath(productRecord, "price"))) { 129 productRecord.price *= exchangeRate; 130 } 131 if (klevu.isNumeric(klevu.getObjectPath(productRecord, "salePrice"))) { 132 productRecord.salePrice *= exchangeRate; 133 } 134 if (klevu.isNumeric(klevu.getObjectPath(productRecord, "startPrice"))) { 135 productRecord.startPrice *= exchangeRate; 136 } 137 138 productRecord.currency = currencyCode; 139 }); 140 } 141 }); 142 })(klevu); 143</script>
vendor: 1 bytes, line 143
143
144<script type="text/javascript" id="klevu_jsinteractive"> 145 klevu.interactive(function () { 146 var options = {"url":{"protocol":"https:","landing":"https:\/\/www.americanflags.com\/search\/","search":"https:\/\/uscs2v2.ksearchnet.com\/cs\/v2\/search"},"search":{"minChars":0,"searchBoxSelector":"input[type=text][name=q],input[type=search][name=q],.kuSearchInput"}}; 147 let searchContentElement = document.getElementById("search-content"); 148if (searchContentElement) { 149 let klevuSearchResults_wrapper = document.createElement("div"); 150 klevuSearchResults_wrapper.id = "klevuSearchResults_wrapper"; 151 klevuSearchResults_wrapper.className = "klevuSearchResults_wrapper"; 152 153 let klevuSearchResults = document.createElement("div"); 154 klevuSearchResults.id = "klevuSearchResults"; 155 klevuSearchResults.className = "klevuSearchResults"; 156 157 klevuSearchResults_wrapper.appendChild(klevuSearchResults); 158 searchContentElement.appendChild(klevuSearchResults_wrapper); 159 160 options.search.searchBoxTarget = klevuSearchResults; 161} 162 klevu(options); 163 }); 164</script>
164
164<script type="text/javascript" src="https://js.klevu.com/theme/default/v2/quick-search-theme.lazyload.js"></script>
164 165 166
166<script> 167 /*! modernizr 3.11.4 (Custom Build) | MIT * 168 * https://modernizr.com/download/?-avif-webp-setclasses !*/ 169 !function (A, n, e, o) { 170 function a(A, n) { 171 return typeof A === n 172 } 173 174 function t(A) { 175 var n = f.className, e = Modernizr._config.classPrefix || ""; 176 if (u && (n = n.baseVal), Modernizr._config.enableJSClass) { 177 var o = new RegExp("(^|\\s)" + e + "no-js(\\s|$)"); 178 n = n.replace(o, "$1" + e + "js$2") 179 } 180 Modernizr._config.enableClasses && (A.length > 0 && (n += " " + e + A.join(" " + e)), u ? f.className.baseVal = n : f.className = n) 181 } 182 183 function i(A, n) { 184 if ("object" == typeof A) for (var e in A) r(A, e) && i(e, A[e]); else { 185 A = A.toLowerCase(); 186 var o = A.split("."), a = Modernizr[o[0]]; 187 if (2 === o.length && (a = a[o[1]]), void 0 !== a) return Modernizr; 188 n = "function" == typeof n ? n() : n, 1 === o.length ? Modernizr[o[0]] = n : (!Modernizr[o[0]] || Modernizr[o[0]] instanceof Boolean || (Modernizr[o[0]] = new Boolean(Modernizr[o[0]])), Modernizr[o[0]][o[1]] = n), t([(n && !1 !== n ? "" : "no-") + o.join("-")]), Modernizr._trigger(A, n) 189 } 190 return Modernizr 191 } 192 193 var s = [], l = { 194 _version: "3.11.4", 195 _config: {classPrefix: "", enableClasses: !0, enableJSClass: !0, usePrefixes: !0}, 196 _q: [], 197 on: function (A, n) { 198 var e = this; 199 setTimeout(function () { 200 n(e[A]) 201 }, 0) 202 }, 203 addTest: function (A, n, e) { 204 s.push({name: A, fn: n, options: e}) 205 }, 206 addAsyncTest: function (A) { 207 s.push({name: null, fn: A}) 208 } 209 }, Modernizr = function () { 210 }; 211 Modernizr.prototype = l, Modernizr = new Modernizr; 212 var r, c = [], f = e.documentElement, u = "svg" === f.nodeName.toLowerCase(); 213 !function () { 214 var A = {}.hasOwnProperty; 215 r = a(A, "undefined") || a(A.call, "undefined") ? function (A, n) { 216 return n in A && a(A.constructor.prototype[n], "undefined") 217 } : function (n, e) { 218 return A.call(n, e) 219 } 220 }(), l._l = {}, l.on = function (A, n) { 221 this._l[A] || (this._l[A] = []), this._l[A].push(n), Modernizr.hasOwnProperty(A) && setTimeout(function () { 222 Modernizr._trigger(A, Modernizr[A]) 223 }, 0) 224 }, l._trigger = function (A, n) { 225 if (this._l[A]) { 226 var e = this._l[A]; 227 setTimeout(function () { 228 var A; 229 for (A = 0; A < e.length; A++) (0, e[A])(n) 230 }, 0), delete this._l[A] 231 } 232 }, Modernizr._q.push(function () { 233 l.addTest = i 234 }), Modernizr.addAsyncTest(function () { 235 function A(A, n, e) { 236 function o(n) { 237 var o = !(!n || "load" !== n.type) && 1 === a.width; 238 i(A, "webp" === A && o ? new Boolean(o) : o), e && e(n) 239 } 240 241 var a = new Image; 242 a.onerror = o, a.onload = o, a.src = n 243 } 244 245 var n = [{ 246 uri: "data:image/webp;base64,UklGRiQAAABXRUJQVlA4IBgAAAAwAQCdASoBAAEAAwA0JaQAA3AA/vuUAAA=", 247 name: "webp" 248 }], 249 e = n.shift(); 250 A(e.name, e.uri, function (e) { 251 if (e && "load" === e.type) for (var o = 0; o < n.length; o++) A(n[o].name, n[o].uri) 252 }) 253 }), Modernizr.addAsyncTest(function () { 254 var A = new Image; 255 A.onload = A.onerror = function () { 256 i("avif", 1 === A.width) 257 }, A.src = "data:image/avif;base64,AAAAHGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZgAAAPBtZXRhAAAAAAAAAChoZGxyAAAAAAAAAABwaWN0AAAAAAAAAAAAAAAAbGliYXZpZgAAAAAOcGl0bQAAAAAAAQAAAB5pbG9jAAAAAEQAAAEAAQAAAAEAAAEUAAAAFQAAAChpaW5mAAAAAAABAAAAGmluZmUCAAAAAAEAAGF2MDFDb2xvcgAAAABoaXBycAAAAElpcGNvAAAAFGlzcGUAAAAAAAAAAQAAAAEAAAAOcGl4aQAAAAABCAAAAAxhdj
257FDgQAcAAAAABNjb2xybmNseAABAAEAAQAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAAB1tZGF0EgAKBxgADlgICAkyCB/xgAAghQm0" 258 }), function () { 259 var A, n, e, o, t, i, l; 260 for (var r in s) if (s.hasOwnProperty(r)) { 261 if (A = [], n = s[r], n.name && (A.push(n.name.toLowerCase()), n.options && n.options.aliases && n.options.aliases.length)) for (e = 0; e < n.options.aliases.length; e++) A.push(n.options.aliases[e].toLowerCase()); 262 for (o = a(n.fn, "function") ? n.fn() : n.fn, t = 0; t < A.length; t++) i = A[t], l = i.split("."), 1 === l.length ? Modernizr[l[0]] = o : (Modernizr[l[0]] && (!Modernizr[l[0]] || Modernizr[l[0]] instanceof Boolean) || (Modernizr[l[0]] = new Boolean(Modernizr[l[0]])), Modernizr[l[0]][l[1]] = o), c.push((o ? "" : "no-") + l.join("-")) 263 } 264 }(), t(c), delete l.addTest, delete l.addAsyncTest; 265 for (var d = 0; d < Modernizr._q.length; d++) Modernizr._q[d](); 266 A.Modernizr = Modernizr 267 }(window, window, document); 268 </script>
268 269 270 <!-- Start of MageDelight GA4 Extension --> 271
271<script> window.getStoreCookies = function(name) { 272 match = document.cookie.match(new RegExp(name + '=([^;]+)')); 273 if (match) return decodeURIComponent(match[1].replace(/\+/g, ' ')) ; 274 }; 275 276 window.dataLayer = window.dataLayer || []; 277 if ([[]] != '[[]]') { 278 var mdObj = [[]] 279 for (var i in mdObj) { 280 window.dataLayer.push(mdObj[i]); 281 } 282 } 283 var obtainCookie = ['customerId','customerGroup']; 284 obtainCookie.map(function(cookieName) { 285 var cookieValue = window.getStoreCookies(cookieName); 286 if (cookieValue) { 287 var mdObj = {}; 288 mdObj[cookieName.replace('md_', '')] = cookieValue; 289 window.dataLayer.push(mdObj); 290 } 291 });</script>
291 <!-- End of MageDelight GA4 Extension --> 292 293 294
294<script> 295 /*GTM Optimise*/ 296 (function() { 297 const isMobile = /Mobi|Android/i.test(navigator.userAgent); 298 299 function loadGTM() { 300 <!-- Google Tag Manager Added to Head for Testing --> 301 302<!-- End Google Tag Manager --> 303 304 } 305 306 if (isMobile) { 307 // Load on first interaction (mobile optimization) 308 ['scroll', 'touchstart'].forEach(evt => 309 window.addEventListener(evt, loadGTM, { once: true, passive: true }) 310 ); 311 } else { 312 // Hyväâs event-driven loading (desktop) 313 window.addEventListener('init-external-scripts', loadGTM, { once: true, passive: true }); 314 } 315 })(); 316 </script>
vendor: 1 bytes, line 316
316
317<script type="text/x-magento-init"> 318{ 319 "*": { 320 "SnowcatCloud_SnowplowEventTracker/js/snowplow-event-tracker": {"collector":"sp.americanflags.com","appId":"americanflags","cookieDomain":"","optOutCookie":"notrack","webPage":true,"performanceTiming":false,"linkClickTracking":false,"formTracking":false,"respectDoNotTrack":true} } 321} 322</script>
vendor: 1 bytes, line 322
322
323<script> 324 var BASE_URL = 'https://www.americanflags.com/'; 325 var THEME_PATH = 'https://www.americanflags.com/static/frontend/Krish/AmericanFlags/en_US'; 326 var COOKIE_CONFIG = { 327 "expires": null, 328 "path": "\u002F", 329 "domain": ".www.americanflags.com", 330 "secure": true, 331 "lifetime": "3600", 332 "cookie_restriction_enabled": false }; 333 var CURRENT_STORE_CODE = 'default'; 334 var CURRENT_WEBSITE_ID = '1'; 335 336 window.hyva = window.hyva || {} 337 338 window.cookie_consent_groups = window.cookie_consent_groups || {} 339 window.cookie_consent_groups['necessary'] = true; 340 341 window.cookie_consent_config = window.cookie_consent_config || {}; 342 window.cookie_consent_config['necessary'] = [].concat( 343 window.cookie_consent_config['necessary'] || [], 344 [ 345 'user_allowed_save_cookie', 346 'form_key', 347 'mage-messages', 348 'private_content_version', 349 'mage-cache-sessid', 350 'last_visited_store', 351 'section_data_ids' 352 ] 353 ); 354</script>
vendor: 1 bytes, line 354
354
355<script> 356 'use strict'; 357 (function( hyva, undefined ) { 358 359 function lifetimeToExpires(options, defaults) { 360 361 const lifetime = options.lifetime || defaults.lifetime; 362 363 if (lifetime) { 364 const date = new Date; 365 date.setTime(date.getTime() + lifetime * 1000); 366 return date; 367 } 368 369 return null; 370 } 371 372 function generateRandomString() { 373 374 const allowedCharacters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', 375 length = 16; 376 377 let formKey = '', 378 charactersLength = allowedCharacters.length; 379 380 for (let i = 0; i < length; i++) { 381 formKey += allowedCharacters[Math.round(Math.random() * (charactersLength - 1))] 382 } 383 384 return formKey; 385 } 386 387 const sessionCookieMarker = {noLifetime: true} 388 389 const cookieTempStorage = {}; 390 391 const internalCookie = { 392 get(name) { 393 const v = document.cookie.match('(^|;) ?' + name + '=([^;]*)(;|$)'); 394 return v ? v[2] : null; 395 }, 396 set(name, value, days, skipSetDomain) { 397 let expires, 398 path, 399 domain, 400 secure, 401 samesite; 402 403 const defaultCookieConfig = { 404 expires: null, 405 path: '/', 406 domain: null, 407 secure: false, 408 lifetime: null, 409 samesite: 'lax' 410 }; 411 412 const cookieConfig = window.COOKIE_CONFIG || {}; 413 414 expires = days && days !== sessionCookieMarker 415 ? lifetimeToExpires({lifetime: 24 * 60 * 60 * days, expires: null}, defaultCookieConfig) 416 : lifetimeToExpires(window.COOKIE_CONFIG, defaultCookieConfig) || defaultCookieConfig.expires; 417 418 path = cookieConfig.path || defaultCookieConfig.path; 419 domain = !skipSetDomain && (cookieConfig.domain || defaultCookieConfig.domain); 420 secure = cookieConfig.secure || defaultCookieConfig.secure; 421 samesite = cookieConfig.samesite || defaultCookieConfig.samesite; 422 423 document.cookie = name + "=" + encodeURIComponent(value) + 424 (expires && days !== sessionCookieMarker ? '; expires=' + expires.toGMTString() : '') + 425 (path ? '; path=' + path : '') + 426 (domain ? '; domain=' + domain : '') + 427 (secure ? '; secure' : '') + 428 (samesite ? '; samesite=' + samesite : 'lax'); 429 }, 430 isWebsiteAllowedToSaveCookie() { 431 const allowedCookies = this.get('user_allowed_save_cookie'); 432 if (allowedCookies) { 433 const allowedWebsites = JSON.parse(unescape(allowedCookies)); 434 435 return allowedWebsites[CURRENT_WEBSITE_ID] === 1; 436 } 437 return false; 438 }, 439 getGroupByCookieName(name) { 440 const cookieConsentConfig = window.cookie_consent_config || {}; 441 let group = null; 442 for (let prop in cookieConsentConfig) { 443 if (!cookieConsentConfig.hasOwnProperty(prop)) continue; 444 if (cookieConsentConfig[prop].includes(name)) { 445 group = prop; 446 break; 447 } 448 } 449 return group; 450 }, 451 isCookieAllowed(name) { 452 const cookieGroup = this.getGroupByCookieName(name); 453 return cookieGroup 454 ? window.cookie_consent_groups[cookieGroup] 455 : this.isWebsiteAllowedToSaveCookie(); 456 }, 457 saveTempStorageCookies() { 458 for (const [name, data] of Object.entries(cookieTempStorage)) { 459 if (this.isCookieAllowed(name)) { 460 this.set(name, data['value'], data['days'], data['skipSetDomain']); 461 delete cookieTempStorage[name]; 462 } 463 } 464 } 465 }; 466 467 hyva.getCookie = (name) => { 468 const cookieConfig = window.COOKIE_CONFIG || {}; 469 470 if (cookieConfig.cookie_restriction_enabled && ! internalCookie.isCookieAllowed(name)) { 471 return cookieTempStorage[name] ? cookieTempStorage[name]['value'] : null; 472 } 473 474 return internalCookie.get(name); 475 } 476 477 hyva.setCookie = (name, value, days, skipSetDomain) => { 478 const cookieConfig = window.COOKIE_CONFIG || {}; 479 480 if (cookieConfig.cookie_restriction_enabled && ! internalCookie.isCookieAllowed(name)) { 481 cookieTempStorage[name] = {value, days, skipSetDomain}; 482 return; 483 } 484 return internalCookie.set(name, value, days, skipSetDomain); 485 } 486 487 488 hyva.setSessionCookie = (name, value, skipSetDomain) => { 489 return hyva.setCookie(name, value, sessionCookieMarker, skipSetDomain) 490 } 491 492 hyva.getBrowserStorage = () => { 493 const browserStorage = window.localStorage || window.sessionStorage; 494 if (!browserStorage) { 495 console.warn('Browser Storage is unavailable'); 496 return false;
497 } 498 try { 499 browserStorage.setItem('storage_test', '1'); 500 browserStorage.removeItem('storage_test'); 501 } catch (error) { 502 console.warn('Browser Storage is not accessible', error); 503 return false; 504 } 505 return browserStorage; 506 } 507 508 hyva.postForm = (postParams) => { 509 const form = document.createElement("form"); 510 511 let data = postParams.data; 512 513 if (! postParams.skipUenc && ! data.uenc) { 514 data.uenc = btoa(window.location.href); 515 } 516 form.method = "POST"; 517 form.action = postParams.action; 518 519 Object.keys(postParams.data).map(key => { 520 const field = document.createElement("input"); 521 field.type = 'hidden' 522 field.value = postParams.data[key]; 523 field.name = key; 524 form.appendChild(field); 525 }); 526 527 const form_key = document.createElement("input"); 528 form_key.type = 'hidden'; 529 form_key.value = hyva.getFormKey(); 530 form_key.name="form_key"; 531 form.appendChild(form_key); 532 533 document.body.appendChild(form); 534 535 form.submit(); 536 } 537 538 hyva.getFormKey = function () { 539 let formKey = hyva.getCookie('form_key'); 540 541 if (!formKey) { 542 formKey = generateRandomString(); 543 hyva.setCookie('form_key', formKey); 544 } 545 546 return formKey; 547 } 548 549 hyva.formatPrice = (value, showSign, options = {}) => { 550 const formatter = new Intl.NumberFormat( 551 'en\u002DUS', 552 Object.assign({ 553 style: 'currency', 554 currency: 'USD', 555 signDisplay: showSign ? 'always' : 'auto' 556 }, options) 557 ); 558 return (typeof Intl.NumberFormat.prototype.formatToParts === 'function') ? 559 formatter.formatToParts(value).map(({type, value}) => { 560 switch (type) { 561 case 'currency': 562 return '\u0024' || value; 563 case 'minusSign': 564 return '- '; 565 case 'plusSign': 566 return '+ '; 567 default : 568 return value; 569 } 570 }).reduce((string, part) => string + part) : 571 formatter.format(value); 572 } 573 574 const formatStr = function (str, nStart) { 575 const args = Array.from(arguments).slice(2); 576 577 return str.replace(/(%+)([0-9]+)/g, (m, p, n) => { 578 const idx = parseInt(n) - nStart; 579 580 if (args[idx] === null || args[idx] === void 0) { 581 return m; 582 } 583 return p.length % 2 584 ? p.slice(0, -1).replace('%%', '%') + args[idx] 585 : p.replace('%%', '%') + n; 586 }) 587 } 588 589 hyva.str = function (string) { 590 const args = Array.from(arguments); 591 args.splice(1, 0, 1); 592 593 return formatStr.apply(undefined, args); 594 } 595 596 hyva.strf = function () { 597 const args = Array.from(arguments); 598 args.splice(1, 0, 0); 599 600 return formatStr.apply(undefined, args); 601 } 602 603 /** 604 * Take a html string as `content` parameter and 605 * extract an element from the DOM to replace in 606 * the current page under the same selector, 607 * defined by `targetSelector` 608 */ 609 hyva.replaceDomElement = (targetSelector, content) => { 610 // Parse the content and extract the DOM node using the `targetSelector` 611 const parser = new DOMParser(); 612 const doc = parser.parseFromString(content, 'text/html'); 613 const contentNode = doc.querySelector(targetSelector); 614 615 // Bail if content can't be found 616 if (!contentNode) { 617 return; 618 } 619 620 hyva.activateScripts(contentNode) 621 622 // Replace the old DOM node with the new content
623 document.querySelector(targetSelector).replaceWith(contentNode); 624 625 // Reload customerSectionData and display cookie-messages if present 626 window.dispatchEvent(new CustomEvent("reload-customer-section-data")); 627 hyva.initMessages(); 628 } 629 630 hyva.activateScripts = (contentNode) => { 631 // Extract all the script tags from the content. 632 // Script tags won't execute when inserted into a dom-element directly, 633 // therefore we need to inject them to the head of the document. 634 const tmpScripts = contentNode.getElementsByTagName('script'); 635 636 if (tmpScripts.length > 0) { 637 // Push all script tags into an array 638 // (to prevent dom manipulation while iterating over dom nodes) 639 const scripts = []; 640 for (let i = 0; i < tmpScripts.length; i++) { 641 scripts.push(tmpScripts[i]); 642 } 643 644 // Iterate over all script tags and duplicate+inject each into the head 645 for (let i = 0; i < scripts.length; i++) { 646 let script = document.createElement('script'); 647 script.innerHTML = scripts[i].innerHTML; 648 649 document.head.appendChild(script); 650 651 // Remove the original (non-executing) node from the content 652 scripts[i].parentNode.removeChild(scripts[i]); 653 } 654 } 655 return contentNode; 656 } 657 658 const replace = {['+']: '-', ['/']: '_', ['=']: ','}; 659 hyva.getUenc = () => btoa(window.location.href).replace(/[+/=]/g, match => replace[match]); 660 661 let currentTrap; 662 663 const focusableElements = (rootElement) => { 664 const selector = 'button, [href], input, select, textarea, details, [tabindex]:not([tabindex="-1"]'; 665 return Array.from(rootElement.querySelectorAll(selector)) 666 .filter(el => { 667 return el.style.display !== 'none' 668 && !el.disabled 669 && el.tabIndex !== -1 670 && (el.offsetWidth || el.offsetHeight || el.getClientRects().length) 671 }) 672 } 673 674 const focusTrap = (e) => { 675 const isTabPressed = e.key === 'Tab' || e.keyCode === 9; 676 if (!isTabPressed) return; 677 678 const focusable = focusableElements(currentTrap) 679 const firstFocusableElement = focusable[0] 680 const lastFocusableElement = focusable[focusable.length - 1] 681 682 e.shiftKey 683 ? document.activeElement === firstFocusableElement && (lastFocusableElement.focus(), e.preventDefault()) 684 : document.activeElement === lastFocusableElement && (firstFocusableElement.focus(), e.preventDefault()) 685 }; 686 687 hyva.releaseFocus = (rootElement) => { 688 if (currentTrap && (!rootElement || rootElement === currentTrap)) { 689 currentTrap.removeEventListener('keydown', focusTrap) 690 currentTrap = null 691 } 692 } 693 hyva.trapFocus = (rootElement) => { 694 if (!rootElement) return; 695 hyva.releaseFocus() 696 currentTrap = rootElement 697 rootElement.addEventListener('keydown', focusTrap) 698 const firstElement = focusableElements(rootElement)[0] 699 firstElement && firstElement.focus() 700 } 701 702 hyva.alpineInitialized = (fn) => window.addEventListener('alpine:initialized', fn, {once: true}) 703 window.addEventListener('user-allowed-save-cookie', () => internalCookie.saveTempStorageCookies()) 704 705 }( window.hyva = window.hyva || {} )); 706</script>
vendor: 1 bytes, line 706
706
707<script> 708 if (!window.IntersectionObserver) { 709 window.IntersectionObserver = function (callback) { 710 this.observe = el => el && callback(this.takeRecords()); 711 this.takeRecords = () => [{isIntersecting: true, intersectionRatio: 1}]; 712 this.disconnect = () => {}; 713 this.unobserve = () => {}; 714 } 715 } 716</script>
716 717
718<script type="text/javascript" id="klevu_initsessiondata" async> 719 var nowUnixtime = parseInt(Date.now() / 1000); 720 721 function klevufejs_getCookie(name) { 722 if (typeof (name) === "undefined") { 723 name = "klv_mage"; 724 } 725 var c = "", 726 ca = document.cookie.split(';'); 727 728 for (var i = 0; i < ca.length; i++) { 729 c = ca[i]; 730 if (typeof c !== "string") { 731 continue; 732 } 733 var cookiePair = c.split("="); 734 735 if (name === cookiePair[0].trim()) { 736 try { 737 return JSON.parse(decodeURIComponent(cookiePair[1])); 738 } catch (err) { 739 // this is fine, data will be regenerated 740 } 741 } 742 } 743 return { 744 expire_sections: {} 745 }; 746 } 747 748 document.addEventListener('klevu.customerData.loaded', function (e) { 749 var klevufejs_cookie = klevufejs_getCookie(); 750 klevufejs_cookie.expire_sections.customerData = nowUnixtime + 600; 751 752 document.cookie = "klv_mage=" + JSON.stringify(klevufejs_cookie) 753 + "; expires=" + new Date((nowUnixtime + 3600) * 1000).toUTCString() 754 + "; path=/" 755 + "; samesite=strict"; 756 }); 757 758 var klevufejs_cookie = klevufejs_getCookie(); 759 var klevuData = { 760 ...{ 761 customerData: { 762 revalidate_after: -1 763 } 764 }, 765 ...JSON.parse(window.localStorage.getItem('klv_mage') || '{}') 766 }; 767 768 const klevuCustomerDataLoadedEvent = document.createEvent('CustomEvent'); 769 klevuCustomerDataLoadedEvent.initEvent('klevu.customerData.loaded', false, true); 770 const klevuCustomerDataLoadErrorEvent = document.createEvent('CustomEvent'); 771 klevuCustomerDataLoadErrorEvent.initEvent('klevu.customerData.loadError', false, true); 772 773 if (typeof klevufejs_cookie.expire_sections !== "object" 774 || (klevufejs_cookie.expire_sections.customerData || -1) < nowUnixtime 775 || klevuData.customerData.revalidate_after < nowUnixtime 776 ) { 777 var xhttp = new XMLHttpRequest(); 778 xhttp.onerror = function (request) { 779 document.dispatchEvent(klevuCustomerDataLoadErrorEvent); 780 }; 781 xhttp.ontimeout = function (request) { 782 this.onerror(request); 783 }; 784 xhttp.onload = function (request) { 785 if (this.status >= 400 || this.timeout) { 786 this.onerror(request); 787 return; 788 } 789 790 var klevuData = JSON.parse(window.localStorage.getItem('klv_mage') || '{}'); 791 klevuData.customerData = JSON.parse(this.response); 792 window.localStorage.setItem('klv_mage', JSON.stringify(klevuData)); 793 794 document.dispatchEvent(klevuCustomerDataLoadedEvent); 795 }; 796 xhttp.open('GET', 'https://www.americanflags.com/rest/V1/klevu/customerData', true); 797 xhttp.send(); 798 } else { 799 document.dispatchEvent(klevuCustomerDataLoadedEvent); 800 } 801</script>
801 802</head> 803<body id="html-body" class="cms-about cms-page-view page-layout-1column"> 804 805 <!-- Start of MageDelight GA4 Extension --> 806 <!-- Google Tag Manager (noscript) -->
vendor: 69 bytes, lines 806-807
806 807<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
807GTM-P36MHBN
vendor: 85 bytes, lines 807-808
807" 808height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
809<!-- End Google Tag Manager (noscript) --> <!-- End of MageDelight GA4 Extension --> 810<input name="form_key" type="hidden" value="gibCFwcOTbG2obyl" /> 811 <noscript> 812 <section class="message global noscript border-b-2 border-blue-500 bg-blue-50 shadow-none m-0 px-0 rounded-none font-normal"> 813 <div class="container text-center"> 814 <p> 815 <strong>JavaScript seems to be disabled in your browser.</strong> 816 <span> 817 For the best experience on our site, be sure to turn on Javascript in your browser. </span> 818 </p> 819 </div> 820 </section> 821 </noscript> 822 823
824<script> 825 document.body.addEventListener('touchstart', () => {}, {passive: true}) 826</script>
826 827<div class="page-wrapper"><header class="page-header">
827<script type="application/javascript" async 828 src="https://static.klaviyo.com/onsite/js/klaviyo.js?company_id=NYrVYH"></script>
828 829<div x-data="initKlaviyoCustomerTracking()" 830 @private-content-loaded.window="sendCustomerDataToKlaviyo(event.detail.data)"></div> 831
831<script> 832 function initKlaviyoCustomerTracking() { 833 return { 834 sendCustomerDataToKlaviyo(data) { 835 const _learnq = window._learnq || []; 836 const customer = data.customer; 837 838 if (customer && customer.email) { 839 _learnq.push(['identify', { 840 $email: customer.email, 841 $first_name: customer.firstname ? customer.firstname : '', 842 $last_name: customer.lastname ? customer.lastname : '' 843 }]); 844 } 845 } 846 } 847 } 848 </script>
848 849<a class="action skip sr-only focus:not-sr-only focus:absolute focus:z-40 focus:bg-white 850 contentarea" 851 href="#contentarea"> 852 <span> 853 Skip to Content </span> 854</a>
855<script> 856 function initHeader () { 857 return { 858 searchOpen: false, 859 cart: {}, 860 getData(data) { 861 if (data.cart) { this.cart = data.cart } 862 } 863 } 864 } 865 function initCompareHeader() { 866 return { 867 compareProducts: null, 868 itemCount: 0, 869 receiveCompareData(data) { 870 if (data['compare-products']) { 871 this.compareProducts = data['compare-products']; 872 this.itemCount = this.compareProducts.count; 873 } 874 } 875 } 876 } 877</script>
877 878 879 880 <div id="header" 881 class="relative z-30 w-full bg-white" 882 x-data="initHeader()" 883 @keydown.window.escape="searchOpen = false;" 884 @private-content-loaded.window="getData(event.detail.data)" 885> 886 <div class="max-w-[1700px] px-[15px] flex flex-wrap md:flex-nowrap items-center justify-between w-full px-[15px] pt-[10px] pb-[10px] xl:pb-[10px] mx-auto mt-0 relative bg-white"> 887 888 <div class="flex items-center shrink-0 order-1 ml-[60px] 2lg:ml-0 3xl:ml-[50px]"> 889 <!--Logo--> 890 <div class="max-w-[145px] py-[14px] md:py-0"> 891 <a class="flex items-center justify-center text-xl font-medium tracking-wide text-gray-800 892 no-underline hover:no-underline font-title" 893 href="https://www.americanflags.com/" 894 title="American Flags - Super Fast Shipping!" 895 aria-label="store logo"> 896 <picture> 897 898 <source type="image/webp" 899 900 srcset="https://www.americanflags.com/media/opti_image/webp/logo/stores/1/header-logo.webp"> 901 902 <source type="image/png" 903 904 srcset="https://www.americanflags.com/media/logo/stores/1/header-logo.png"> 905 906 <img src="https://www.americanflags.com/media/logo/stores/1/header-logo.png" 907 title="American Flags - Super Fast Shipping!" 908 alt="American Flags - Super Fast Shipping!" 909 width="125" height="60" /> </picture> 910 911 912 </a> 913</div> 914 </div> 915 <div class="mobile-tp-block md:order-3 order-2"> 916 <!--<div class="trustpilot-block-mobile md:hidden order-2"> 917 <a href="" target="_blank" rel="noopener" class="text-[16px] text-primary text-center inline-block text-sm">Excellent <span class="text-[14px]">4.6 out of 5</span><br/> 918 $heroicons->renderHtml('trustpilot-logo',"w-[95px] h-[25px] inline-block below374:hidden",95,25); ?> 919 </a> 920 </div> --> 921
922<script> 923(function() { 924 'use strict'; 925 926 // accessiBe's newer widget renders its floating trigger button as a 927 // shadow-DOM <access-widget-ui> custom element that ignores the 928 // acsbConfig.hideTrigger option. Hide only that trigger instance (the 929 // interface panel opened by our own header button lives in a separate 930 // <access-widget-ui> instance and is left untouched). 931 function hideAcsbFloatingTrigger() { 932 document.querySelectorAll('access-widget-ui').forEach(function (hostEl) { 933 try { 934 var sr = hostEl.shadowRoot; 935 if (sr && sr.querySelector('.trigger-button')) { 936 //hostEl.style.setProperty('display', 'none', 'important'); 937 hostEl.remove(); 938 } 939 } catch (e) {} 940 }); 941 } 942 943 hideAcsbFloatingTrigger(); 944 new MutationObserver(hideAcsbFloatingTrigger).observe(document.body, { childList: true }); 945})(); 946</script>
vendor: 1 bytes, line 946
946
947<script> 948(function() { 949 'use strict'; 950 951 let acsbLoaded = false; 952 let acsbInitialized = false; 953 let loadingPromise = null; 954 955 // Configuration for the accessibility widget 956 const acsbConfig = { 957 statementLink: '', 958 footerHtml: '', 959 hideMobile: true, 960 hideTrigger: true, 961 disableBgProcess: false, 962 language: 'en', 963 position: 'left', 964 leadColor: '#29527e', 965 triggerColor: '#29527e', 966 triggerRadius: '10px', 967 triggerPositionX: 'left', 968 triggerPositionY: 'center', 969 triggerIcon: 'wheels2', 970 triggerSize: 'medium', 971 triggerOffsetX: 20, 972 triggerOffsetY: 20, 973 }; 974 975 // Preconnect to improve loading when needed 976 const preconnectLink = document.createElement('link'); 977 preconnectLink.rel = 'preconnect'; 978 preconnectLink.href = 'https://acsbapp.com'; 979 document.head.appendChild(preconnectLink); 980 981 // Load the accessibility script only when needed 982 function loadAcsbScript() { 983 if (acsbLoaded) return Promise.resolve(); 984 if (loadingPromise) return loadingPromise; 985 986 loadingPromise = new Promise((resolve, reject) => { 987 const script = document.createElement('script'); 988 script.src = 'https://acsbapp.com/apps/app/dist/js/app.js'; 989 script.async = true; 990 script.defer = true; 991 992 script.onload = function() { 993 acsbLoaded = true; 994 initializeAcsb(); 995 resolve(); 996 }; 997 998 script.onerror = function() { 999 console.error('Failed to load accessibility script'); 1000 reject(new Error('Failed to load accessibility script')); 1001 }; 1002 1003 const head = document.querySelector('head') || document.body; 1004 head.appendChild(script); 1005 }); 1006 1007 return loadingPromise; 1008 } 1009 1010 // Initialize the accessibility widget 1011 function initializeAcsb() { 1012 if (acsbInitialized || typeof acsbJS === 'undefined') return; 1013 1014 try { 1015 acsbJS.init(acsbConfig); 1016 acsbInitialized = true; 1017 console.log('Accessibility widget initialized'); 1018 } catch (error) { 1019 console.error('Error initializing accessibility widget:', error); 1020 } 1021 } 1022 1023 // Handle accessibility button click 1024 function handleAccessibilityButtonClick() { 1025 if (!acsbLoaded) { 1026 // Load script immediately when accessibility button is clicked 1027 loadAcsbScript().then(() => { 1028 // Small delay to ensure script is fully loaded 1029 setTimeout(toggleAccessibilityWidget, 100); 1030 }).catch(error => { 1031 console.error('Error loading accessibility script:', error); 1032 }); 1033 } else { 1034 toggleAccessibilityWidget(); 1035 } 1036 } 1037 1038 function toggleAccessibilityWidget() { 1039 try { 1040 const selectors = [ 1041 '[data-acsb-trigger="true"]', 1042 '.acsb-trigger', 1043 '#acsb-trigger', 1044 '[aria-label*="accessibility" i]', 1045 '[class*="acsb-trigger"]', 1046 '[id*="acsb"]', 1047 '.accessibility-trigger', 1048 '#accessibility-trigger', 1049 '[data-accessibility="trigger"]', 1050 '.acsb-main-button', 1051 '.acsb-button' 1052 ]; 1053 1054 let widgetButton = null; 1055 for (let selector of selectors) { 1056 widgetButton = document.querySelector(selector); 1057 if (widgetButton) break; 1058 } 1059 1060 if (widgetButton) { 1061 widgetButton.click(); 1062 console.log('Accessibility widget toggled'); 1063 } else if (typeof acsbJS !== 'undefined') { 1064 if (acsbJS.toggle) { 1065 acsbJS.toggle(); 1066 } else if (acsbJS.show) { 1067 acsbJS.show(); 1068 } 1069 } else { 1070 console.log('Accessibility widget not ready yet'); 1071 } 1072 } catch (error) { 1073 console.error('Error toggling accessibility widget:', error); 1074 } 1075 } 1076 1077 // Expose the handler globally for the button 1078 window.handleAccessibilityButtonClick = handleAccessibilityButtonClick; 1079 1080 // Optional: Load on user interaction for better UX 1081 const interactionEvents = ['scroll', 'touchstart', 'mousedown', 'ke
1081ydown']; 1082 let userInteracted = false; 1083 1084 function handleUserInteraction() { 1085 if (userInteracted) return; 1086 userInteracted = true; 1087 1088 // Load script after first user interaction (but don't initialize yet) 1089 setTimeout(() => { 1090 loadAcsbScript().catch(error => { 1091 console.error('Error preloading accessibility script:', error); 1092 }); 1093 }, 1000); 1094 1095 // Remove event listeners after first interaction 1096 interactionEvents.forEach(event => { 1097 document.removeEventListener(event, handleUserInteraction, { passive: true }); 1098 }); 1099 } 1100 1101 // Add interaction listeners for preloading 1102 interactionEvents.forEach(event => { 1103 document.addEventListener(event, handleUserInteraction, { passive: true }); 1104 }); 1105})(); 1106</script>
1106 1107 1108 <div class="flex items-center md:order-3 order-2 gap-[15px]"> 1109 <!-- Toggle Button --> 1110 <button id="acsbToggleBtn" class="acsb-toggle-btn" aria-label="Toggle Accessibility Widget"> 1111 <svg fill="currentColor" width="20" height="20" xmlns="http://www.w3.org/2000/svg" xml:space="preserve" viewBox="0 0 42.112 50" part="acsb-trigger-icon-svg" data-testid="base-icon-svg"><path xmlns="http://www.w3.org/2000/svg" d="M35.956.257C35.284.104 34.614 0 33.944 0a8.163 8.163 0 0 0-7.894 6.138 8.1 8.1 0 0 0-.155 3.147c-.153-.154-.36-.258-.567-.361L14.805 3.972c-1.393-.67-2.993-.103-3.715 1.238l-4.488 8.666c-.722 1.393-.154 3.096 1.187 3.817.413.207.876.31 1.29.31a2.856 2.856 0 0 0 2.528-1.548l3.198-6.19 5.416 2.579-3.662 5.726h-.774C7.119 18.467 0 25.586 0 34.304S7.119 50.09 15.836 50.09c7.841 0 14.341-5.675 15.58-13.153v8.511c0 1.807 1.495 3.3 3.301 3.3 1.807 0 3.303-1.493 3.303-3.3V33.221c0-1.341-.826-2.527-2.013-3.043l-5.674-2.321c-.722-1.651-1.755-3.146-2.993-4.436l3.044-4.798c.567-.877.877-1.806.929-2.786.206.104.465.155.671.207.671.155 1.341.258 2.011.258 3.716 0 6.965-2.528 7.895-6.139 1.029-4.334-1.601-8.77-5.934-9.906zM15.94 44.828A10.503 10.503 0 0 1 5.416 34.304 10.502 10.502 0 0 1 15.94 23.782a10.5 10.5 0 0 1 10.524 10.522A10.502 10.502 0 0 1 15.94 44.828z"></path></svg> 1112 <span id="acsbToggleText"></span> 1113 </button> 1114 1115
1115<script> 1116 (function() { 1117 // Prevent multiple injections 1118 if (window.acsbToggleInjected) return; 1119 window.acsbToggleInjected = true; 1120 1121 const button = document.getElementById('acsbToggleBtn'); 1122 const buttonText = document.getElementById('acsbToggleText'); 1123 let isWidgetOpen = false; 1124 1125 function updateButtonState() { 1126 if (isWidgetOpen) { 1127 button.classList.add('open'); 1128 buttonText.textContent = ''; 1129 button.setAttribute('aria-label', 'Close Accessibility Widget'); 1130 } else { 1131 button.classList.remove('open'); 1132 buttonText.textContent = ''; 1133 button.setAttribute('aria-label', 'Open Accessibility Widget'); 1134 } 1135 } 1136 1137 // Use the global handler that manages script loading 1138 button.addEventListener('click', function() { 1139 if (typeof window.handleAccessibilityButtonClick === 'function') { 1140 window.handleAccessibilityButtonClick(); 1141 isWidgetOpen = !isWidgetOpen; 1142 updateButtonState(); 1143 } 1144 }); 1145 1146 // Keyboard support 1147 button.addEventListener('keydown', function(e) { 1148 if (e.key === 'Enter' || e.key === ' ') { 1149 e.preventDefault(); 1150 button.click(); 1151 } 1152 }); 1153 1154 // Monitor for widget state changes 1155 const observer = new MutationObserver(function(mutations) { 1156 mutations.forEach(function(mutation) { 1157 if (mutation.type === 'childList') { 1158 const acsbPanel = document.querySelector('.acsb-panel, #acsb-panel, [class*="acsb-panel"]'); 1159 if (acsbPanel) { 1160 isWidgetOpen = acsbPanel.style.display !== 'none'; 1161 updateButtonState(); 1162 } 1163 } 1164 }); 1165 }); 1166 1167 // Start observing when script loads 1168 setTimeout(() => { 1169 observer.observe(document.body, { 1170 childList: true, 1171 subtree: true 1172 }); 1173 }, 100); 1174 1175 })(); 1176 </script>
1176 1177 <!--Wishlist Icon--> 1178 <a href="https://www.americanflags.com/wishlist/" class="lg:block"> 1179 <svg xmlns="http://www.w3.org/2000/svg" width="25" height="25" viewBox="0 0 44.449 40" class="w-[18px] h-[16px]" role="img"> 1180 <path id="Path_51409" data-name="Path 51409" d="M72.249,42a2,2,0,0,1-1.451-.62L54.236,24.242a12.437,12.437,0,0,1-2.273-2.791l-.118-.2A13.1,13.1,0,0,1,50,14.618,12.446,12.446,0,0,1,62.225,2,12.2,12.2,0,0,1,72.252,7.382a11.952,11.952,0,0,1,19.16-.993,12.928,12.928,0,0,1-1.187,17.88L73.7,41.38a2.016,2.016,0,0,1-1.453.62M62.225,5.729a8.487,8.487,0,0,0-4.409,1.258,8.814,8.814,0,0,0-3.927,5.458,9.034,9.034,0,0,0,.958,6.707c.053.1.109.187.164.271a8.862,8.862,0,0,0,1.658,2.047l15.587,16.1L87.7,21.593a9.34,9.34,0,0,0,1.851-2.2,9.036,9.036,0,0,0-2.8-12.222,8.406,8.406,0,0,0-4.52-1.333A8.522,8.522,0,0,0,74.9,10.049l-2.647,4.52-2.622-4.52a8.532,8.532,0,0,0-7.351-4.32V5.158Z" transform="translate(-50.001 -2)"/> 1181<title>Wishlist</title></svg> 1182 <span class="sr-only label"> 1183 Wishlist </span> 1184 </a> 1185 <!--Customer Icon & Dropdown--> 1186 1187<div 1188 class="relative inline-block ml-1 sm:ml-3" 1189 x-data="{ open: false }" 1190 @keyup.escape="open = false" 1191> 1192 <button 1193 type="button" 1194 id="customer-menu" 1195 class="block hover:text-black" 1196 @click="open = !open" 1197 @click.outside="open = false" 1198 :aria-expanded="open ? 'true' : 'false'" 1199 aria-label="My Account" 1200 aria-haspopup="true" 1201 > 1202 <svg xmlns="http://www.w3.org/2000/svg" width="25" height="25" viewBox="0 0 40 44.423" class="w-[18px] h-[16px]" role="img"> 1203 <path id="Path_51410" data-name="Path 51410" d="M140,43.564a1.929,1.929,0,0,1-3.855,0,9.333,9.333,0,0,0-9.366-9.3c-.049,0-.1,0-.147,0H113.369a9.332,9.332,0,0,0-9.511,9.151c0,.049,0,.1,0,.147a1.929,1.929,0,0,1-3.855,0A13.153,13.153,0,0,1,113.245,30.5h13.388A13.151,13.151,0,0,1,140,43.43c0,.044,0,.089,0,.133M110.909,22.509a12.511,12.511,0,0,1-.167-17.692c.082-.082.167-.164.251-.247a13.488,13.488,0,0,1,18.275,0l.018.024.024.016a12.294,12.294,0,0,1,.562,17.379c-.193.207-.4.407-.6.6a13.231,13.231,0,0,1-18.359-.082m2.758-15.164a8.764,8.764,0,0,0-.078,12.395c.051.053.107.1.16.158a9.275,9.275,0,0,0,12.846-.082,8.546,8.546,0,0,0,.389-12.077c-.133-.142-.271-.28-.413-.411a9.521,9.521,0,0,0-12.9.018Z" transform="translate(-100.001 -1.004)"/> 1204<title>My Account</title></svg> 1205 </button> 1206 <nav 1207 class=" 1208 absolute right-0 z-30 w-[170px] py-2 mt-2 -mr-4 px-1 overflow-auto origin-top-right rounded-sm 1209 shadow-lg sm:w-48 lg:mt-3 bg-container-lighter 1210 " 1211 x-cloak 1212 x-show="open" 1213 aria-labelledby="customer-menu" 1214 @click.outside="open = false" 1215 > 1216 1217<a id="customer.header.sign.in.link" 1218 class="block px-4 py-2 lg:px-5 lg:py-2 hover:bg-gray-100" 1219 onclick="hyva.setCookie && hyva.setCookie( 1220 'login_redirect', 1221 window.location.href, 1222 1 1223 )" 1224 href="https://www.americanflags.com/customer/account/index/" 1225 title="Sign In" 1226> 1227 Sign In</a> 1228 1229 <a id="customer.header.register.link" 1230 class="block px-4 py-2 lg:px-5 lg:py-2 hover:bg-gray-100" 1231 href="https://www.americanflags.com/customer/account/create/" 1232 title="Create an Account" 1233 > 1234 Create an Account </a> 1235 </nav> 1236</div> 1237 1238 <!--Cart Icon--> 1239 <a id="menu-cart-icon" 1240 @click.prevent.stop="$dispatch('toggle-cart',{});" class="relative inline-block no-underline hover:text-black" 1241 href="https://www.americanflags.com/checkout/cart/index/" 1242 > 1243 <span class="sr-only label"> 1244 Cart </span> 1245 1246 <svg xmlns="http://www.w3.org/2000/svg" width="25" height="25" viewBox="0 0 40 44.825" class="w-[19px] h-[22px] fill-black" role="img"> 1247 <path id="Path_51411" data-name="Path 51411" d="M155.781,44.825h24.442A7.787,7.787,0,0,0,188,37.048V13.794a1.383,1.383,0,0,0-1.379-1.377h-8.278v-2.07a10.344,10.344,0,1,0-20.689,0v2.07h-8.274A1.383,1.383,0,0,0,148,13.794V37.048a7.786,7.786,0,0,0,7.779,7.777m4.633-34.478a7.586,7.586,0,0,1,15.171,0v2.07H160.414Zm-9.654,4.827h6.895v3.449a1.379,1.379,0,0,0,2.759,0V15.173h15.171v3.449a1.379,1.379,0,0,0,2.759,0V15.173h6.9V37.048a5.03,5.03,0,0,1-5.02,5.02h-24.44a5.029,5.029,0,0,1-5.02-5.02Z" transform="translate(-148.002)"/> 1248<title>View Cart</title></svg> 1249
1250 <span x-text="cart.summary_count" 1251 class="absolute top-[7px] right-[0] md:right-[-2px] 2xl:right-[-4px] h-5 px-2 py-1 -mt-5 -mr-4 text-xs font-semibold 1252 leading-none text-center text-white uppercase transform -translate-x-1 1253 translate-y-1/2 rounded-full bg-black" 1254 ></span> 1255 </a> 1256 </div> 1257 </div> 1258 1259 <div class="flex justify-center basis-full w-full mx-0 mb-[10px] md:mb-0 md:mx-[20px] lg:mx-[80px] md:order-2 order-3 min-h-40px"> 1260 <!--Search Icon--> 1261 <button id="menu-search-icon" 1262 class="flex gap-[8px] w-full h-[40px] border border-[#858585] items-center rounded-[20px] ml-1 no-underline sm:ml-3 hover:text-black px-[25px] hidden" 1263 @click.prevent=" 1264 searchOpen = !searchOpen; 1265 $nextTick(() => { 1266 const searchInput = document.querySelector('#search'); 1267 searchInput.focus(); 1268 searchInput.select(); 1269 }); 1270 " 1271 > 1272 1273 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="w-[16px] h-[16px]" width="25" height="25" role="img"> 1274 <path stroke-linecap="round" stroke-linejoin="round" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"/> 1275<title>search</title></svg> 1276 <span class="text-[12px] leading-[18px] text-gray-50"> 1277 Enter Keywords or Item # </span> 1278 </button> 1279 1280 <!--Search--> 1281 <div class="top-0 left-0 bg-white z-20 w-full border-container-lighter bg-white relative" 1282 id="search-content" 1283 :class="{ 'block': searchOpen}" x-cloak 1284 @click.outside="searchOpen = false" 1285 > 1286
1286<script> 1287 'use strict'; 1288 1289 function initMiniSearch() { 1290 return { 1291 minSearchLength: 3, 1292 suggestions: [], 1293 suggest() { 1294 const search = this.$refs.searchInput; 1295 if (search.value.length >= this.minSearchLength) { 1296 search.setCustomValidity(''); 1297 search.reportValidity(); 1298 // Start Klevu customisation of default Hyvä template 1299 this.suggestions = []; 1300 // End Klevu customisation of default Hyvä template 1301 } else { 1302 this.suggestions = []; 1303 } 1304 }, 1305 fetchSuggestions(term) { 1306 fetch( 1307 window.BASE_URL + 'search/ajax/suggest?' + new URLSearchParams({q: term}), 1308 { 1309 headers: { 1310 'X-Requested-With': 'XMLHttpRequest' 1311 } 1312 } 1313 ) 1314 .then(response => response.json()) 1315 .then(result => this.suggestions = result); 1316 }, 1317 search(term) { 1318 const search = this.$refs.searchInput; 1319 term = term || search.value; 1320 if (term.length < this.minSearchLength) { 1321 search.setCustomValidity('Minimum\u0020Search\u0020query\u0020length\u0020is\u00203'); 1322 search.reportValidity(); 1323 } else { 1324 search.setCustomValidity(''); 1325 search.value = term; 1326 this.$refs.form.submit(); 1327 } 1328 }, 1329 focusElement(element) { 1330 if (element && element.nodeName === "DIV") { 1331 element.focus(); 1332 return true; 1333 } else { 1334 return false; 1335 } 1336 } 1337 } 1338 } 1339</script>
1339 1340<div class="container mx-auto text-black relative p-0" x-data="initMiniSearch()"> 1341 <form class="form minisearch" id="search_mini_form" x-ref="form" 1342 action="https://www.americanflags.com/search/" method="get"> 1343 <label for="search" data-role="minisearch-label" class="absolute top-0 left-6 m-0 top-1/2 -translate-y-2/4"> 1344 <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="w-[16px] h-[16px]" width="25" height="25" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m21 21-6-6m2-5a7 7 0 1 1-14 0 7 7 0 0 1 14 0Z"></path><title>search</title></svg> 1345 </label> 1346 <input id="search" 1347 x-ref="searchInput" 1348 type="search" 1349 autocomplete="off" 1350 name="q" 1351 value="" 1352 placeholder="Enter Keywords or Item #" 1353 maxlength="128" 1354 class="flex gap-[8px] w-full h-[40px] border border-[#858585] items-center rounded-[20px] no-underline sm:ml-3 hover:text-black px-[25px] placeholder:text-[12px] placeholder:leading-[18px] placeholder:text-gray-50 pl-12 pt-0 pb-1" 1355 /> 1356 <template x-if="suggestions.length > 0"> 1357 <div class="w-full leading-normal transition appearance-none text-grey-800 flex flex-col mt-1"> 1358 <template x-for="suggestion in suggestions"> 1359 <div class="flex justify-between p-2 bg-container-lighter even:bg-container mb-1 cursor-pointer 1360 border border-container hover:bg-container-darker" 1361 tabindex="0" 1362 @click="search(suggestion.title)" 1363 @keydown.enter="search(suggestion.title)" 1364 @keydown.arrow-up.prevent=" 1365 focusElement($event.target.previousElementSibling) || $refs.searchInput.focus() 1366 " 1367 @keydown.arrow-down.prevent="focusElement($event.target.nextElementSibling)" 1368 > 1369 <span x-text="suggestion.title"></span> 1370 <span x-text="suggestion.num_results"></span> 1371 </div> 1372 </template> 1373 </div> 1374 </template> 1375 <button type="submit" 1376 title="Search" 1377 class="action search sr-only" 1378 aria-label="Search" 1379 > 1380 Search </button> 1381 </form> 1382 <button x-on:click="searchOpen = false" class="cross-btn absolute -right-10 top-5 3xl:top-4 3xl:right-4 hidden"> 1383 <svg id="ic_delete" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24"> 1384 <defs> 1385 <clipPath id="clip-path"> 1386 <rect id="Rectangle_2641" data-name="Rectangle 2641" width="24" height="24" fill="none"/> 1387 </clipPath> 1388 </defs> 1389 <g id="Group_269" data-name="Group 269" clip-path="url(#clip-path)"> 1390 <path id="Path_62" data-name="Path 62" d="M2.947,22.177a13.011,13.011,0,0,1-1.169-1.146L21.052,1.739l1.221,1.23Zm17.961-.029c-.014,0-13.771-13.729-19.182-19.179l1.221-1.23L22.076,20.9l-.572.612Z" fill="#231f20"/> 1391 </g> 1392 </svg> 1393 </button> 1394</div> 1395 </div> 1396 </div> 1397 1398 1399 <div class="flex w-full md:w-auto items-center gap-[30px] order-3"> 1400 <!--Compare Icon--> 1401 <a id="compare-link" 1402 class="relative invisible inline-block mx-1 no-underline sm:ml-3 hover:text-black hidden" 1403 :class="{ 'invisible': !(itemCount > 0) }" 1404 href="https://www.americanflags.com/catalog/product_compare/index/" 1405 title="Compare Products" 1406 x-data="initCompareHeader()" 1407 @private-content-loaded.window="receiveCompareData($event.detail.data)" 1408 > 1409 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="w-8 h-8 md:h-6 md:w-6 hover:text-black" width="25" height="25" role="img"> 1410 <path stroke-linecap="round" stroke-linejoin="round" d="M3 6l3 1m0 0l-3 9a5.002 5.002 0 006.001 0M6 7l3 9M6 7l6-2m6 2l3-1m-3 1l-3 9a5.002 5.002 0 006.001 0M18 7l3 9m-3-9l-6-2m0-2v2m0 16V5m0 16H9m3 0h3"/> 1411<title>scale</title></svg> 1412
1413 <span class="sr-only label"> 1414 Compare Products </span> 1415 1416 <span class="absolute top-0 right-0 h-5 px-2 py-1 -mt-5 -mr-4 text-xs font-semibold 1417 leading-none text-center text-white uppercase transform -translate-x-1 1418 translate-y-1/2 bg-yellow-500 rounded-full" 1419 > 1420 <span x-text="itemCount"></span> 1421 <span x-show="itemCount === 1" class="sr-only"> 1422 item </span> 1423 <span x-show="itemCount > 1" class="sr-only"> 1424 items </span> 1425 </span> 1426 </a> 1427 </div> 1428 </div> 1429 1430 <!--Cart Drawer--> 1431
1432<script> 1433 function initCartDrawer() { 1434 const myInterval = setInterval(openMiniCartDrawer, 1000); 1435 function openMiniCartDrawer() { 1436 setTimeout(function () { 1437 if(document.querySelector('.page.messages .message.success')) { 1438 document.querySelector('.minicart-slides')?.classList.add('open-default'); 1439 document.querySelector('.backOverlay')?.classList.add('open-default'); 1440 document.querySelector('.closebtn')?.classList.add('open-default'); 1441 document.querySelector('.cp-closebtn')?.classList.add('open-default'); 1442 clearInterval(myInterval); 1443 } 1444 }, 5000); 1445 if(document.querySelector('.closebtn') != null){ 1446 document.querySelector('.closebtn').addEventListener('click', (e)=> { 1447 document.querySelector('.minicart-slides')?.classList.remove('open-default'); 1448 document.querySelector('.backOverlay')?.classList.remove('open-default'); 1449 document.querySelector('.cp-closebtn')?.classList.remove('open-default'); 1450 }) 1451 } 1452 if(document.querySelector('.cp-closebtn') != null) { 1453 document.querySelector('.cp-closebtn').addEventListener('click', (e)=> { 1454 document.querySelector('.minicart-slides')?.classList.remove('open-default'); 1455 document.querySelector('.backOverlay')?.classList.remove('open-default'); 1456 e.target.classList.remove('open-default'); 1457 }) 1458 } 1459 if(document.querySelector('.backOverlay') != null) { 1460 document.querySelector('.backOverlay').addEventListener('click', (e)=> { 1461 document.querySelector('.minicart-slides')?.classList.remove('open-default'); 1462 e.target.classList.remove('open-default'); 1463 document.querySelector('.cp-closebtn')?.classList.remove('open-default'); 1464 }); 1465 } 1466 } 1467 setTimeout(function() { 1468 clearInterval(myInterval); 1469 }, 5000) 1470 1471 return { 1472 open: false, 1473 isLoading: false, 1474 cart: {}, 1475 cartItems: [], 1476 maxItemsToDisplay: 50, 1477 itemsCount: 0, 1478 totalCartAmount: 0, 1479 1480 getData(data) { 1481 if (data.cart && data.cart.cartId) { 1482 this.cart = data.cart; 1483 this.itemsCount = data.cart.items && data.cart.items.length || 0; 1484 this.totalCartAmount = this.cart.summary_count; 1485 this.setCartItems(); 1486 } 1487 1488 this.isLoading = false; 1489 }, 1490 1491 getItemCountTitle() { 1492 return hyva.strf('(%0 of %1)', this.maxItemsToDisplay, this.itemsCount) 1493 }, 1494 1495 setCartItems() { 1496 this.cartItems = this.cart.items && this.cart.items.sort((a, b) => b.item_id - a.item_id) || []; 1497 1498 if (this.maxItemsToDisplay > 0) { 1499 this.cartItems = this.cartItems.slice(0, parseInt(this.maxItemsToDisplay, 10)); 1500 } 1501 }, 1502 1503 toggleAuth($dispatch) { 1504 hyva.setCookie('mage-messages','', -1, true); 1505 $dispatch('toggle-authentication', {url: 'https://www.americanflags.com/checkout/'}); 1506 }, 1507 1508 goToCartPage() { 1509 hyva.setCookie('mage-messages','', -1, true); 1510 window.location.href = 'https://www.americanflags.com/checkout/cart/'; 1511 }, 1512 1513 goToEditPage(url) { 1514 hyva.setCookie('mage-messages','', -1, true); 1515 window.location.href = url; 1516 }, 1517 1518 decrement(item) { 1519 item.qty-=item.step; 1520 1521 if (item.qty < 1) { 1522 item.qty = 1; 1523 } 1524 1525 this.updateCartItemQty(item); 1526 }, 1527 1528 increment(item) { 1529 item.qty+=item.step; 1530 1531 this.updateCartItemQty(item); 1532 }, 1533 1534 async updateCartItemQty(item) { 1535 this.isLoading = true; 1536 1537 let postParams = { 1538 uenc: hyva.getUenc(), 1539 form_key: hyva.getFormKey(), 1540 product: item.product_id, 1541 item: item.item_id, 1542 qty: item.qty, 1543 }; 1544 1545 if (item.options) { 1546 const attrs = item.options.reduce((r, o) => ({ ...r, [`super_attribute[${o.option_id}]`]: o.option_value }), {}); 1547 1548 postParams = { ...postParams, ...attrs }; 1549 } 1550 1551 let postData = Object.keys(postParams).map((key) => { 1552 return `${key}=${postParams[key]}`; 1553 }).join('&'); 1554 1555 // Take all the input fields that configure this product 1556 // (includes custom, configurable, grouped and bundled options) 1557 Array.from(this.$el.querySelectorAll( 1558 '[name^=options], [name^=super_attribute], [name^=bundle_option], [name^=super_group], [name^=links]') 1559 ).map((input) => { 1560 if (input.type === 'select-multiple') { 1561 Array.from(input.selectedOptions).forEac
1561h((option) => { 1562 postData += `&${input.name}=${option.value}` 1563 }) 1564 } else { 1565 // skip "checkable inputs" that are not checked 1566 if (!(['radio', 'checkbox', 'select'].includes(input.type) && !input.checked)) { 1567 postData += `&${input.name}=${input.value}` 1568 } 1569 } 1570 }); 1571 1572 const postUrl = BASE_URL + 'checkout/cart/updateItemOptions/id/' + item.item_id; 1573 1574 const resp = await fetch(postUrl, { 1575 'headers': { 1576 'content-type': 'application/x-www-form-urlencoded; charset=UTF-8', 1577 }, 1578 'body': postData, 1579 'method': 'POST', 1580 'mode': 'cors', 1581 'credentials': 'include' 1582 }).then(async (response) => { 1583 await window.dispatchEvent(new CustomEvent('reload-customer-section-data')); 1584 this.isLoading = false; 1585 1586 return response; 1587 }).catch((e) => console.error(e)); 1588 1589 setTimeout(() => { 1590 if (resp.status === 200 && resp.ok) { 1591 const browserStorage = hyva.getBrowserStorage(); 1592 const data = JSON.parse(browserStorage.getItem('mage-cache-storage')); 1593 const products = data.cart.items; 1594 1595 const product = products?.find((p) => p.item_id === item.item_id); 1596 1597 if (product) { 1598 if (product.qty === item.qty) { 1599 window.dispatchMessages && window.dispatchMessages([{ 1600 type: 'success', 1601 text: resp.success 1602 ? 'You\u0020updated\u0020the\u0020item\u0020qty.' 1603 : resp.error_message 1604 }], resp.success ? 5000 : 0); 1605 } 1606 } 1607 } 1608 }, 1000); 1609 }, 1610 1611 deleteItemFromCart(itemId) { 1612 this.isLoading = true; 1613 1614 const formKey = hyva.getFormKey(); 1615 const postUrl = BASE_URL + 'checkout/sidebar/removeItem/'; 1616 1617 fetch(postUrl, { 1618 "headers": { 1619 "content-type": "application/x-www-form-urlencoded; charset=UTF-8", 1620 }, 1621 "body": "form_key=" + formKey + "&item_id=" + itemId, 1622 "method": "POST", 1623 "mode": "cors", 1624 "credentials": "include" 1625 }).then(response => { 1626 if (response.redirected) { 1627 window.location.href = response.url; 1628 } else if (response.ok) { 1629 return response.json(); 1630 } else { 1631 window.dispatchMessages && window.dispatchMessages([{ 1632 type: 'warning', 1633 text: 'Could\u0020not\u0020remove\u0020item\u0020from\u0020quote.' 1634 }]); 1635 this.isLoading = false; 1636 } 1637 }).then(result => { 1638 window.dispatchMessages && window.dispatchMessages([{ 1639 type: result.success ? 'success' : 'error', 1640 text: result.success 1641 ? 'You\u0020removed\u0020the\u0020item.' 1642 : result.error_message 1643 }], result.success ? 5000 : 0) 1644 window.dispatchEvent(new CustomEvent('reload-customer-section-data')); 1645 }); 1646 }, 1647 1648 clearCart() { 1649 const postData = { 1650 action: 'https://www.americanflags.com/checkout/cart/updatePost/', 1651 data: { update_cart_action: 'empty_cart' } 1652 }; 1653 1654 hyva.postForm(postData); 1655 }, 1656 1657 manipulateDOM() { 1658 if (this.open === true) { 1659 document.getElementById('html-body').classList.add('overflow-hidden'); 1660 } else { 1661 hyva.setCookie('mage-messages','', -1, true); 1662 document.getElementById('html-body').classList.remove('overflow-hidden'); 1663 } 1664 }, 1665 } 1666 } 1667</script>
1667 1668 1669<section id="cart-drawer" 1670 x-data="initCartDrawer()" 1671 @private-content-loaded.window="getData($event.detail.data)" 1672 @toggle-cart.window="open=true" 1673 @keydown.window.escape="open=false" 1674> 1675 <template x-if="cart && cart.summary_count"> 1676 <div role="dialog" 1677 aria-labelledby="cart-drawer-title" 1678 aria-modal="true" 1679 @click.outside="open=false" 1680 class="fixed inset-y-0 right-0 z-30 flex border-t-[3px] border-red-900 max-w-full"> 1681 <div class="backdrop backOverlay" 1682 x-show="open" 1683 x-transition:enter="ease-in-out duration-500" 1684 x-transition:enter-start="opacity-0" 1685 x-transition:enter-end="opacity-100" 1686 x-transition:leave="ease-in-out duration-500" 1687 x-transition:leave-start="opacity-100" 1688 x-transition:leave-end="opacity-0" 1689 @click="open=false" 1690 aria-label="Close panel"></div> 1691 <div class="relative w-screen max-w-md shadow-2xl minicart-slides" 1692 x-show="open" 1693 x-transition:enter="transform transition ease-in-out duration-500 sm:duration-700" 1694 x-transition:enter-start="translate-x-full" 1695 x-transition:enter-end="translate-x-0" 1696 x-transition:leave="transform transition ease-in-out duration-500 sm:duration-700" 1697 x-transition:leave-start="translate-x-0" 1698 x-transition:leave-end="translate-x-full" 1699 > 1700 <div 1701 x-show="open" 1702 x-transition:enter="ease-in-out duration-500" 1703 x-transition:enter-start="opacity-0" 1704 x-transition:enter-end="opacity-100" 1705 x-transition:leave="ease-in-out duration-500" 1706 x-transition:leave-start="opacity-100" 1707 x-transition:leave-end="opacity-0" class="absolute top-0 right-0 flex p-2 mt-2 closebtn"> 1708 <button @click="open=false" aria-label="Close panel" 1709 class="p-2 text-black transition duration-150 ease-in-out"> 1710 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="24" height="24" role="img"> 1711 <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/> 1712<title>x</title></svg> 1713 </button> 1714 </div> 1715 <div class="flex flex-col h-full py-[23px] bg-white shadow-xl"> 1716 1717 <header class="px-4 sm:px-6"> 1718 <h2 id="cart-drawer-title" class="text-[26px] font-bold leading-[32px] text-brand-basea mb-[30px]"> 1719 Shopping Cart <span class="items-total text-xs" 1720 x-show="maxItemsToDisplay && maxItemsToDisplay < itemsCount" 1721 x-text="itemsCount"> 1722 </span> 1723 </h2> 1724 <div class="flex items-center justify-between border-b border-brand-base pb-[3px]"> 1725 <div class="grow"> 1726 <span class="" x-text="itemsCount + ' Item(s)'"></span> 1727 </div> 1728 <div class=""> 1729 <p class="mb-0"><span>Cart Subtotal</span> <strong x-html="cart.subtotal" class="block text-[26px] text-green-800"></strong></p> 1730 </div> 1731 </div> 1732 </header> 1733 1734 1735 <div class="relative overflow-y-auto"> 1736 <template x-for="item in cartItems"> 1737 <div class="flex items-start p-[15px]"> 1738 <a :href="item.product_url" class="w-1/4"> 1739 <img 1740 :src="item.product_image.src" 1741 :width="item.product_image.width" 1742 :height="item.product_image.height" 1743 loading="lazy" 1744 /> 1745 </a> 1746 <div class="w-3/4"> 1747 <div class="mb-[10px]"> 1748 <a :href="item.product_url" class="text-[14px] font-bold">
1749 <span x-html="item.product_name"></span> 1750 </a> 1751 <!-- <p class="text-sm"><span x-html="item.product_sku"></span></p> --> 1752 </div> 1753 <template x-if="item.product_type === 'configurable'"> 1754 <div x-data="{ open: false }" class="mb-[10px]"> 1755 <button @click="open = !open" class="flex items-center gap-[5px]"> 1756 See Details 1757 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="transition-transform duration-300 ease-in-out transform rotate-180" width="16" height="16" :class="{ 'rotate-180': open, 'rotate-0': !open }" aria-hidden="true"> 1758 <path stroke-linecap="round" stroke-linejoin="round" d="M19 9l-7 7-7-7"/> 1759</svg> 1760 </button> 1761 <div :class="{ 'hidden': !open , 'block': open }"> 1762 <template x-for="option in item.options"> 1763 <div class="flex items-center gap-[10px]"> 1764 <p class="font-semibold mb-0 text-[14px]" x-text="option.label + ':'"></p> 1765 <p class="text-secondary mb-0 text-[14px]" x-html="option.value"></p> 1766 </div> 1767 </template> 1768 </div> 1769 </div> 1770 </template> 1771 <div class="oneline-data flex justify-between gap-5 items-center"> 1772 <p class="mb-0 text-[16px] font-bold leading-[19px] text-green-800"><span x-html="item.product_price"></span></p> 1773 <div class="flex items-center justify-between w-full"> 1774 <div class="flex items-center gap-[11px]"> 1775 <label>Qty</label> 1776 <div class="qty-box relative inline"> 1777 <input 1778 :name='"cart[" + item.item_id + "][qty]"' 1779 :id='"cart-" + item.item_id + "-qty"' 1780 :value="item.qty" 1781 x-model.number="item.qty" 1782 type="number" 1783 min="0" 1784 size="4" 1785 :step="item.step" 1786 @change="updateCartItemQty(item)" 1787 title="Qty" 1788 class="form-input max-w-[70px] h-10 bg-grey-8 border border-grey-3 text-center rounded-md" 1789 required="required" 1790 min ='1' 1791 data-role="cart-item-qty" 1792 /> 1793 </div> 1794 </div> 1795 <div class=""> 1796 <a :href="item.configure_url" 1797 x-show="item.product_type !== 'grouped'" 1798 class="inline-flex mr-2"> 1799 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 40 40" class="w-[12px] h-[12px]" role="img"> 1800 <g id="edit" transform="translate(-0.001 -1.289)"> 1801 <path id="Path_1489" data-name="Path 1489" d="M24.874,7.964l8.137,8.177-20.6,20.7L4.281,28.662ZM39.185,5.992,35.556,2.346a3.589,3.589,0,0,0-5.087,0L26.994,5.839l8.137,8.177,4.055-4.074A2.8,2.8,0,0,0,39.185,5.992ZM.023,40.155a.928.928,0,0,0,1.12,1.107l9.067-2.209L2.078,30.876Z" transform="translate(0 0)"/> 1802 </g> 1803<title>edit</title></svg> 1804 </a> 1805 <button class="inline-flex p-2" 1806 @click="deleteItemFromCart(item.item_id)" 1807 > 1808 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 40 40" class="w-[12px] h-[12px]" role="img"> 1809 <path id="Path_51413" data-name="Path 51413" d="M4.1,41.739A25.387,25.387,0,0,1,1.827,39.5L39.349,1.739l2.377,2.407Zm34.966-.057c-.027,0-26.81-26.869-37.343-37.536L4.1,1.739,41.344,39.232l-1.113,1.2Z" transform="translate(-1.726 -1.739)" fill="#231f20"/> 1810<title>close</title></svg> 1811 </button> 1812 </div> 1813 </div> 1814 </div> 1815 1816 </div> 1817 </div> 1818 </template> 1819 </div> 1820 1821 1822 <div class=""> 1823 <div class="w-full p-3"> 1824 <a @click.prevent.stop="$dispatch('toggle-authentication', 1825 {url: 'https://www.americanflags.com/checkout/'});" 1826 href="https://www.americanflags.com/checkout/" 1827 class="w-full btn btn-primary font-bold text-[20px] py-[15px] mb-[10px]"> 1828 Proceed To Checkout </a> 1829 <!-- <button class="w-full p-2 btn bg-[#FFC439] py-[15px] hover:bg-[#FFC439] mb-[10px]"> 1830 </button> --> 1831 <div class="text-center flex flex-col gap-2.5"> 1832 <a href="https://www.americanflags.com/checkout/cart/" 1833 class="underline text-red-900 text-lg"> 1834 View and Edit Cart </a> 1835 <a href="javascript:void(0);" 1836 class="underline text-red-900 text-lg hidden cp-closebtn"> 1837 Continue Shopping </a> 1838 </div> 1839 </div> 1840 1841 </div> 1842 </div> 1843 <div class="flex flex-row justify-center items-center w-full h-full fixed select-none z-50" 1844 style="left: 50%;top: 50%;transform: translateX(-50%) translateY(-50%);background: rgba(255,255,255,0.7);" 1845 x-show="isLoading" 1846 x-cloak 1847 x-transition:enter="ease-out duration-200" 1848 x-transition:enter-start="opacity-0" 1849 x-transition:enter-end="opacity-100" 1850 x-transition:leave="ease-in duration-200" 1851 x-transition:leave-start="opacity-100" 1852 x-transition:leave-end="opacity-0"> 1853 <!-- By Sam Herbert (@sherb), for everyone. More @ http://goo.gl/7AJzbL --> 1854<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 57 57" stroke="currentColor" class="text-primary" width="57" height="57" role="img"> 1855 <g fill="none" fill-rule="evenodd"> 1856 <g transform="translate(1 1)" stroke-width="2"> 1857 <circle cx="5" cy="50" r="5">
1858 <animate attributeName="cy" begin="0s" dur="2.2s" values="50;5;50;50" calcMode="linear" repeatCount="indefinite"/> 1859 <animate attributeName="cx" begin="0s" dur="2.2s" values="5;27;49;5" calcMode="linear" repeatCount="indefinite"/> 1860 </circle> 1861 <circle cx="27" cy="5" r="5"> 1862 <animate attributeName="cy" begin="0s" dur="2.2s" from="5" to="5" values="5;50;50;5" calcMode="linear" repeatCount="indefinite"/> 1863 <animate attributeName="cx" begin="0s" dur="2.2s" from="27" to="27" values="27;49;5;27" calcMode="linear" repeatCount="indefinite"/> 1864 </circle> 1865 <circle cx="49" cy="50" r="5"> 1866 <animate attributeName="cy" begin="0s" dur="2.2s" values="50;50;5;50" calcMode="linear" repeatCount="indefinite"/> 1867 <animate attributeName="cx" from="49" to="49" begin="0s" dur="2.2s" values="49;5;27;49" calcMode="linear" repeatCount="indefinite"/> 1868 </circle> 1869 </g> 1870 </g> 1871<title>loader</title></svg> 1872 <div class="ml-10 text-primary text-xl"> 1873 Loading... </div> 1874</div> 1875 </div> 1876 </template> 1877</section> 1878 1879 <!--Authentication Pop-Up--> 1880
1880<script> 1881 function initAuthentication() { 1882 return { 1883 open: false, 1884 forceAuthentication: false, 1885 checkoutUrl: 'https://www.americanflags.com/checkout/index/', 1886 errors: 0, 1887 hasCaptchaToken: 0, 1888 displayErrorMessage: false, 1889 errorMessages: [], 1890 setErrorMessages: function setErrorMessages(messages) { 1891 this.errorMessages = [messages]; 1892 this.displayErrorMessage = this.errorMessages.length; 1893 }, 1894 submitForm: function () { 1895 // Do not rename $form, the variable is expected to be declared in the recaptcha output 1896 const $form = document.querySelector('#login-form'); 1897 1898 if (this.errors === 0) { 1899 this.dispatchLoginRequest($form); 1900 } 1901 }, 1902 onPrivateContentLoaded: function (data) { 1903 const isLoggedIn = data.customer && data.customer.firstname; 1904 if (data.cart && !isLoggedIn) { 1905 this.forceAuthentication = !data.cart.isGuestCheckoutAllowed; 1906 } 1907 }, 1908 redirectIfAuthenticated: function (event) { 1909 if (event.detail && event.detail.url) { 1910 this.checkoutUrl = event.detail.url; 1911 } 1912 if (!this.forceAuthentication) { 1913 window.location.href = this.checkoutUrl; 1914 } 1915 }, 1916 dispatchLoginRequest: function(form) { 1917 this.isLoading = true; 1918 const username = this.$refs['customer-email'].value; 1919 const password = this.$refs['customer-password'].value; 1920 const formKey = hyva.getFormKey(); 1921 const bodyFields = { 1922 'username': username, 1923 'password': password, 1924 'formKey': formKey 1925 }; 1926 const fieldName = ''; 1927 const recaptchaField = fieldName && form[fieldName]; 1928 if (recaptchaField) { 1929 bodyFields[fieldName] = recaptchaField.value; 1930 } 1931 fetch('https://www.americanflags.com/customer/ajax/login/', { 1932 method: 'POST', 1933 headers: { 1934 'Content-Type': 'application/json', 1935 'X-Requested-With': 'XMLHttpRequest' 1936 }, 1937 body: JSON.stringify(bodyFields) 1938 } 1939 ).then(response => { 1940 return response.json() 1941 } 1942 ).then(data=> { 1943 this.isLoading = false; 1944 if (data.errors) { 1945 dispatchMessages([{ 1946 type: 'error', 1947 text: data.message 1948 }], 5000); 1949 this.errors = 1; 1950 this.hasCaptchaToken = 0; 1951 } else { 1952 window.location.href = this.checkoutUrl; 1953 } 1954 }); 1955 } 1956 } 1957 } 1958</script>
1958 1959<section id="authentication-popup" 1960 x-data="initAuthentication()" 1961 @private-content-loaded.window="onPrivateContentLoaded($event.detail.data)" 1962 @toggle-authentication.window="open = forceAuthentication; redirectIfAuthenticated(event)" 1963 @keydown.window.escape="open = false" 1964> 1965 <div 1966 class="backdrop" 1967 aria-hidden="true" 1968 x-cloak 1969 x-show="open" 1970 x-transition:enter="ease-in-out duration-500" 1971 x-transition:enter-start="opacity-0" 1972 x-transition:enter-end="opacity-100" 1973 x-transition:leave="ease-in-out duration-500" 1974 x-transition:leave-start="opacity-100" 1975 x-transition:leave-end="opacity-0" 1976 @click="open = false" 1977 ></div> 1978 <div role="dialog" 1979 aria-modal="true" 1980 @click.outside="open = false" 1981 class="inset-y-0 right-0 z-30 flex max-w-full fixed" 1982 x-cloak 1983 x-show="open" 1984 > 1985 <div class="relative w-screen max-w-md pt-16 bg-container-lighter" 1986 x-show="open" 1987 x-cloak="" 1988 x-transition:enter="transform transition ease-in-out duration-500 sm:duration-700" 1989 x-transition:enter-start="translate-x-full" 1990 x-transition:enter-end="translate-x-0" 1991 x-transition:leave="transform transition ease-in-out duration-500 sm:duration-700" 1992 x-transition:leave-start="translate-x-0" 1993 x-transition:leave-end="translate-x-full" 1994 > 1995 <div 1996 x-show="open" 1997 x-cloak="" 1998 x-transition:enter="ease-in-out duration-500" 1999 x-transition:enter-start="opacity-0" 2000 x-transition:enter-end="opacity-100" 2001 x-transition:leave="ease-in-out duration-500" 2002 x-transition:leave-start="opacity-100" 2003 x-transition:leave-end="opacity-0" class="absolute top-0 right-2 flex p-2 mt-2"> 2004 <button 2005 type="button" 2006 @click="open = false;" 2007 aria-label="Close panel" 2008 class="p-2 text-gray-300 transition duration-150 ease-in-out hover:text-black" 2009 > 2010 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="24" height="24" role="img"> 2011 <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/> 2012<title>Close panel</title></svg> 2013 </button> 2014 </div> 2015 <template x-if="open"> 2016 <div class="flex flex-col h-full py-6 space-y-6 bg-white shadow-xl overflow-y-auto"> 2017 <div class="block-customer-login bg-container border border-container mx-4 p-4 shadow-sm"> 2018 <p id="authenticate-customer-login" class="text-lg leading-7 text-gray-900"> 2019 <strong class="font-medium">Checkout using your account</strong> 2020 </p> 2021 2022 <form class="form form-login" 2023 method="post" 2024 @submit.prevent="submitForm();" 2025 id="login-form" 2026 > 2027 <div class="fieldset login"> 2028 <div class="field email required"> 2029 <label class="label" for="form-login-username" form="login-form" > 2030 <span>Email Address</span> 2031 </label> 2032 <div class="control"> 2033 <input name="username" 2034 id="form-login-username" 2035 x-ref="customer-email" 2036 @change="errors = 0" 2037 type="email" 2038 required 2039 autocomplete="off" 2040 class="form-input input-text" 2041 > 2042 </div> 2043 </div> 2044 <div class="field password required"> 2045 <label for="form-login-password" class="label" form="login-form">
2046 <span>Password</span> 2047 </label> 2048 <div class="control"> 2049 <input name="password" 2050 id="form-login-password" 2051 type="password" 2052 class="form-input input-text" 2053 required 2054 x-ref="customer-password" 2055 autocomplete="off" 2056 @change="errors = 0" 2057 > 2058 </div> 2059 </div> 2060 2061 <input name="context" type="hidden" value="checkout" /> 2062 <div class="actions-toolbar flex justify-between pt-6 pb-2 items-center"> 2063 <button type="submit" disabled data-recaptcha-btn class="inline-flex btn btn-primary disabled:opacity-75" 2064 > 2065 Sign In </button> 2066 <a href="https://www.americanflags.com/customer/account/forgotpassword/" 2067 > 2068 Forgot Your Password? </a> 2069 </div> 2070 2071 </div> 2072 </form> 2073 </div> 2074 <div class="mx-4"> 2075 </div> 2076 <div class="block-new-customer bg-container border border-container mx-4 p-4 shadow-sm"> 2077 <p id="authenticate-new-customer" class="text-lg mb-2 leading-7 text-gray-900"> 2078 <strong class="font-medium">Checkout as a new customer</strong> 2079 </p> 2080 2081 <div class="block-content"> 2082 <p class="mb-1"> 2083 Creating an account has many benefits: </p> 2084 <ul class="list-disc pl-5"> 2085 <li> See order and shipping status</li> 2086 <li> Track order history</li> 2087 <li> Check out faster</li> 2088 </ul> 2089 <div class="actions-toolbar flex justify-between mt-6 mb-2 items-center"> 2090 <a href="https://www.americanflags.com/customer/account/create/" 2091 class="inline-flex btn btn-primary"> 2092 Create an Account </a> 2093 </div> 2094 </div> 2095 </div> 2096 </div> 2097 </template> 2098 </div> 2099 </div> 2100</section> 2101 2102 <!--Main Navigation--> 2103 <div x-data="initMenuMobile_6ab573946b157()" 2104 class="z-20 order-1 xl:order-2 navigation 2lg:hidden w-12 h-12 absolute top-[30px] md:top-[20px] xl:top-[30px] left-[15px] md:left-[15px] lg:left-[15px]" 2105> 2106 <!-- mobile --> 2107 <div @load.window="setActiveMenu($root)" 2108 class="bg-container-lighter" 2109 :class="{'h-screen overflow-x-hidden overflow-y-auto fixed top-0 left-0 w-screen' : open}" 2110 @toggle-mobile-menu.window="open = !open" 2111 @keydown.window.escape="open=false" 2112 > 2113 <div class="flex items-baseline justify-between menu-icon"> 2114 <div class="flex justify-end w-full"> 2115 <button @click="$dispatch('toggle-mobile-menu')" 2116 type="button" 2117 class="flex items-center justify-center cursor-pointer" 2118 :class="{ 'ml-auto': open }"> 2119 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="hidden p-4" width="50" height="50" :class="{ 'hidden' : !open, 'block': open }" role="img"> 2120 <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/> 2121<title>x</title></svg> 2122 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="p-3" width="60" height="60" :class="{ 'hidden' : open, 'block': !open }" role="img"> 2123 <path stroke-linecap="round" stroke-linejoin="round" d="M4 6h16M4 12h8m-8 6h16"/> 2124<title>menu-alt-1</title></svg> 2125 </button> 2126 </div> 2127 </div> 2128 2129 <nav 2130 class="hidden w-full duration-150 ease-in-out transform transition-display px-7" 2131 :class="{ 'hidden' : !open }" 2132 > 2133 <div class="level-0">
2134 <span 2135 class="flex items-center transition-transform duration-150 ease-in-out transform" 2136 :class="{ 2137 '-translate-x-full' : mobilePanelActiveId, 2138 'translate-x-0' : !mobilePanelActiveId 2139 }" 2140 > 2141 <a class="flex items-center w-full py-3 border-b cursor-pointer 2142 bg-container-lighter border-container level-0 text-[14px] text-primary uppercase font-bold last:border-b-0" 2143 href="https://www.americanflags.com/american-flags.html" 2144 title="American Flags"> 2145 American Flags </a> 2146 <button class="absolute right-0 flex items-center w-8 h-8 mr-2 cursor-pointer " 2147 type="button" 2148 @click="mobilePanelActiveId = 2149 mobilePanelActiveId === 'category-node-174' ? 2150 0 : 'category-node-174'" 2151 > 2152 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="w-[30px] h-[20px] p-1" width="24" height="24" role="img"> 2153 <path stroke-linecap="round" stroke-linejoin="round" d="M9 5l7 7-7 7"/> 2154<title>chevron-right</title></svg> 2155 </button> 2156 </span> 2157 <div 2158 class="absolute top-0 right-0 z-10 w-full h-full transition-transform duration-200 ease-in-out 2159 translate-x-full transform" 2160 :class="{ 2161 'translate-x-full' : mobilePanelActiveId !== 'category-node-174', 2162 'translate-x-0' : mobilePanelActiveId === 'category-node-174', 2163 }" 2164 > 2165 <button class="w-full flex items-center" 2166 type="button" 2167 @click="mobilePanelActiveId = 0" 2168 > 2169 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="w-[30px] h-[20px] p-1" width="24" height="24" role="img"> 2170 <path stroke-linecap="round" stroke-linejoin="round" d="M15 19l-7-7 7-7"/> 2171<title>chevron-left</title></svg> 2172 <span class="ml-4 text-[14px] font-bold leading-[17px] text-brand-base uppercase"> 2173 American Flags </span> 2174 </button> 2175 2176 <a href="https://www.americanflags.com/american-flags/outdoor-american-flags.html" 2177 title="Outdoor American Flags - Made in USA" 2178 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 2179 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 2180 > 2181 <!-- <span class="w-6"></span> --> 2182 <span class="ml-4 text-gray-700 lg:ml-0"> 2183 Outdoor American Flags - Made in USA </span> 2184 </a> 2185 2186 <a href="https://www.americanflags.com/american-flags/indoor-american-flags.html" 2187 title="Indoor American Flags" 2188 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 2189 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 2190 > 2191 <!-- <span class="w-6"></span> --> 2192 <span class="ml-4 text-gray-700 lg:ml-0"> 2193 Indoor American Flags </span> 2194 </a> 2195 2196 <a href="https://www.americanflags.com/american-flags/america-250-merchandise.html" 2197 title="America's 250th Anniversary Merchandise" 2198 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 2199 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 2200 > 2201 <!-- <span class="w-6"></span> -->
2202 <span class="ml-4 text-gray-700 lg:ml-0"> 2203 America's 250th Anniversary Merchandise </span> 2204 </a> 2205 2206 <a href="https://www.americanflags.com/american-flags/stick-flags-grave-flags-parade-flags.html" 2207 title="US Stick Flags - Cemetery & Parade Flags" 2208 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 2209 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 2210 > 2211 <!-- <span class="w-6"></span> --> 2212 <span class="ml-4 text-gray-700 lg:ml-0"> 2213 US Stick Flags - Cemetery & Parade Flags </span> 2214 </a> 2215 2216 <a href="https://www.americanflags.com/american-flags/car-flags.html" 2217 title="US Car Flags" 2218 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 2219 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 2220 > 2221 <!-- <span class="w-6"></span> --> 2222 <span class="ml-4 text-gray-700 lg:ml-0"> 2223 US Car Flags </span> 2224 </a> 2225 2226 <a href="https://www.americanflags.com/american-flags/casket-funeral-flags.html" 2227 title="Casket, Funeral and Presentation Flags" 2228 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 2229 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 2230 > 2231 <!-- <span class="w-6"></span> --> 2232 <span class="ml-4 text-gray-700 lg:ml-0"> 2233 Casket, Funeral and Presentation Flags </span> 2234 </a> 2235 2236 <a href="https://www.americanflags.com/american-flags/govt-spec-us-flags.html" 2237 title="Govt. Spec. US Flags" 2238 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 2239 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 2240 > 2241 <!-- <span class="w-6"></span> --> 2242 <span class="ml-4 text-gray-700 lg:ml-0"> 2243 Govt. Spec. US Flags </span> 2244 </a> 2245 <a href="https://www.americanflags.com/american-flags.html" 2246 title="American Flags" 2247 class="flex items-center w-full px-8 py-4 border-b cursor-pointer 2248 bg-container-lighter border-container last:border-b-0" 2249 > 2250 <!-- <span class="w-6"></span> --> 2251 <span class="ml-4 text-[14px] font-bold leading-[17px] text-brand-base underline">View All</span> 2252 </a> 2253 </div> 2254 </div> 2255 <div class="level-0"> 2256 <span 2257 class="flex items-center transition-transform duration-150 ease-in-out transform" 2258 :class="{ 2259 '-translate-x-full' : mobilePanelActiveId, 2260 'translate-x-0' : !mobilePanelActiveId 2261 }" 2262 > 2263 <a class="flex items-center w-full py-3 border-b cursor-pointer 2264 bg-container-lighter border-container level-0 text-[14px] text-primary uppercase font-bold last:border-b-0" 2265 href="https://www.americanflags.com/military-flags.html" 2266 title="Military Flags"> 2267 Military Flags </a> 2268 <button class="absolute right-0 flex items-center w-8 h-8 mr-2 cursor-pointer " 2269 type="button" 2270 @click="mobilePanelActiveId = 2271 mobilePanelActiveId === 'category-node-160' ? 2272 0 : 'category-node-160'" 2273 > 2274 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="w-[30px] h-[20px] p-1" width="24" height="24" role="img"> 2275 <path stroke-linecap="round" stroke-linejoin="round" d="M9 5l7 7-7 7"/> 2276<title>chevron-right</title></svg> 2277 </button> 2278 </span> 2279 <div 2280 class="absolute top-0 right-0 z-10 w-full h-full transition-transform duration-200 ease-in-out 2281 translate-x-full transform" 2282 :class="{ 2283 'translate-x-full' : mobilePanelActiveId !== 'category-node-160', 2284 'translate-x-0' : mobilePanelActiveId === 'category-node-160', 2285 }" 2286 > 2287 <button class="w-full flex items-center" 2288 type="button" 2289 @click="mobilePanelActiveId = 0" 2290 > 2291 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="w-[30px] h-[20px] p-1" width="24" height="24" role="img"> 2292 <path stroke-linecap="round" stroke-linejoin="round" d="M15 19l-7-7 7-7"/> 2293<title>chevron-left</title></svg>
2294 <span class="ml-4 text-[14px] font-bold leading-[17px] text-brand-base uppercase"> 2295 Military Flags </span> 2296 </button> 2297 2298 <a href="https://www.americanflags.com/military-flags/armed-forces-bundles.html" 2299 title="Armed Forces Bundles" 2300 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 2301 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 2302 > 2303 <!-- <span class="w-6"></span> --> 2304 <span class="ml-4 text-gray-700 lg:ml-0"> 2305 Armed Forces Bundles </span> 2306 </a> 2307 2308 <a href="https://www.americanflags.com/military-flags/air-force-flags.html" 2309 title="Air Force Flags" 2310 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 2311 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 2312 > 2313 <!-- <span class="w-6"></span> --> 2314 <span class="ml-4 text-gray-700 lg:ml-0"> 2315 Air Force Flags </span> 2316 </a> 2317 2318 <a href="https://www.americanflags.com/military-flags/army-flags.html" 2319 title="Army Flags" 2320 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 2321 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 2322 > 2323 <!-- <span class="w-6"></span> --> 2324 <span class="ml-4 text-gray-700 lg:ml-0"> 2325 Army Flags </span> 2326 </a> 2327 2328 <a href="https://www.americanflags.com/military-flags/navy-flags.html" 2329 title="Navy Flags" 2330 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 2331 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 2332 > 2333 <!-- <span class="w-6"></span> --> 2334 <span class="ml-4 text-gray-700 lg:ml-0"> 2335 Navy Flags </span> 2336 </a> 2337 2338 <a href="https://www.americanflags.com/military-flags/us-marine-corps-flags.html" 2339 title="U.S. Marine Corps Flags" 2340 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 2341 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 2342 > 2343 <!-- <span class="w-6"></span> --> 2344 <span class="ml-4 text-gray-700 lg:ml-0"> 2345 U.S. Marine Corps Flags </span> 2346 </a> 2347 2348 <a href="https://www.americanflags.com/military-flags/coast-guard-flags.html" 2349 title="Coast Guard Flags" 2350 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 2351 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 2352 > 2353 <!-- <span class="w-6"></span> -->
2354 <span class="ml-4 text-gray-700 lg:ml-0"> 2355 Coast Guard Flags </span> 2356 </a> 2357 2358 <a href="https://www.americanflags.com/military-flags/us-space-force-flags.html" 2359 title="US Space Force Flags" 2360 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 2361 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 2362 > 2363 <!-- <span class="w-6"></span> --> 2364 <span class="ml-4 text-gray-700 lg:ml-0"> 2365 US Space Force Flags </span> 2366 </a> 2367 2368 <a href="https://www.americanflags.com/military-flags/merchant-marine-flags.html" 2369 title="Merchant Marine Flags" 2370 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 2371 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 2372 > 2373 <!-- <span class="w-6"></span> --> 2374 <span class="ml-4 text-gray-700 lg:ml-0"> 2375 Merchant Marine Flags </span> 2376 </a> 2377 2378 <a href="https://www.americanflags.com/military-flags/army-national-guard-flags.html" 2379 title="Army 
2379National Guard Flags" 2380 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 2381 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 2382 > 2383 <!-- <span class="w-6"></span> --> 2384 <span class="ml-4 text-gray-700 lg:ml-0"> 2385 Army National Guard Flags </span> 2386 </a> 2387 2388 <a href="https://www.americanflags.com/military-flags/pow-mia-flags.html" 2389 title="POW-MIA Flags" 2390 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 2391 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 2392 > 2393 <!-- <span class="w-6"></span> --> 2394 <span class="ml-4 text-gray-700 lg:ml-0"> 2395 POW-MIA Flags </span> 2396 </a> 2397 2398 <a href="https://www.americanflags.com/military-flags/government-specified-flags-accessories.html" 2399 title="Government Specified Flags" 2400 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 2401 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 2402 > 2403 <!-- <span class="w-6"></span> --> 2404 <span class="ml-4 text-gray-700 lg:ml-0"> 2405 Government Specified Flags </span> 2406 </a> 2407 2408 <a href="https://www.americanflags.com/military-flags/veterans-commemorative-and-retirement-flags.html" 2409 title="Veterans Commemorative and Retirement Flags" 2410 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 2411 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 2412 > 2413 <!-- <span class="w-6"></span> --> 2414 <span class="ml-4 text-gray-700 lg:ml-0"> 2415 Veterans Commemorative and Retirement Flags </span> 2416 </a> 2417 2418 <a href="https://www.americanflags.com/military-flags/service-banners.html" 2419 title="Service Star Banners and Flags" 2420 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 2421 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 2422 > 2423 <!-- <span class="w-6"></span> --> 2424 <span class="ml-4 text-gray-700 lg:ml-0"> 2425 Service Star Banners and Flags </span> 2426 </a> 2427 2428 <a href="https://www.americanflags.com/military-flags/support-our-troops-flags.html" 2429 title="Support Our Troops Flags" 2430 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 2431 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 2432 > 2433 <!-- <span class="w-6"></span> --> 2434 <span class="ml-4 text-gray-700 lg:ml-0"> 2435 Support Our Troops Flags </span> 2436 </a> 2437 <a href="https://www.americanflags.com/military-flags.html" 2438 title="Military Flags" 2439 class="flex items-center w-full px-8 py-4 border-b cursor-pointer 2440 bg-container-lighter border-container last:border-b-0" 2441 > 2442 <!-- <span class="w-6"></span> -->
2443 <span class="ml-4 text-[14px] font-bold leading-[17px] text-brand-base underline">View All</span> 2444 </a> 2445 </div> 2446 </div> 2447 <div class="level-0"> 2448 <span 2449 class="flex items-center transition-transform duration-150 ease-in-out transform" 2450 :class="{ 2451 '-translate-x-full' : mobilePanelActiveId, 2452 'translate-x-0' : !mobilePanelActiveId 2453 }" 2454 > 2455 <a class="flex items-center w-full py-3 border-b cursor-pointer 2456 bg-container-lighter border-container level-0 text-[14px] text-primary uppercase font-bold last:border-b-0" 2457 href="https://www.americanflags.com/city-state-flags.html" 2458 title="City, State & Territory Flags"> 2459 City, State & Territory Flags </a> 2460 <button class="absolute right-0 flex items-center w-8 h-8 mr-2 cursor-pointer " 2461 type="button" 2462 @click="mobilePanelActiveId = 2463 mobilePanelActiveId === 'category-node-170' ? 2464 0 : 'category-node-170'" 2465 > 2466 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="w-[30px] h-[20px] p-1" width="24" height="24" role="img"> 2467 <path stroke-linecap="round" stroke-linejoin="round" d="M9 5l7 7-7 7"/> 2468<title>chevron-right</title></svg> 2469 </button> 2470 </span> 2471 <div 2472 class="absolute top-0 right-0 z-10 w-full h-full transition-transform duration-200 ease-in-out 2473 translate-x-full transform" 2474 :class="{ 2475 'translate-x-full' : mobilePanelActiveId !== 'category-node-170', 2476 'translate-x-0' : mobilePanelActiveId === 'category-node-170', 2477 }" 2478 > 2479 <button class="w-full flex items-center" 2480 type="button" 2481 @click="mobilePanelActiveId = 0" 2482 > 2483 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="w-[30px] h-[20px] p-1" width="24" height="24" role="img"> 2484 <path stroke-linecap="round" stroke-linejoin="round" d="M15 19l-7-7 7-7"/> 2485<title>chevron-left</title></svg> 2486 <span class="ml-4 text-[14px] font-bold leading-[17px] text-brand-base uppercase"> 2487 City, State & Territory Flags </span> 2488 </button> 2489 2490 <a href="https://www.americanflags.com/city-state-flags/alabama-state-flags.html" 2491 title="Alabama State Flags" 2492 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 2493 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 2494 > 2495 <!-- <span class="w-6"></span> --> 2496 <span class="ml-4 text-gray-700 lg:ml-0"> 2497 Alabama State Flags </span> 2498 </a> 2499 2500 <a href="https://www.americanflags.com/city-state-flags/alaska-state-flags.html" 2501 title="Alaska State Flags" 2502 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 2503 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 2504 > 2505 <!-- <span class="w-6"></span> -->
2506 <span class="ml-4 text-gray-700 lg:ml-0"> 2507 Alaska State Flags </span> 2508 </a> 2509 2510 <a href="https://www.americanflags.com/city-state-flags/arizona-state-flags.html" 2511 title="Arizona State Flags" 2512 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 2513 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 2514 > 2515 <!-- <span class="w-6"></span> --> 2516 <span class="ml-4 text-gray-700 lg:ml-0"> 2517 Arizona State Flags </span> 2518 </a> 2519 2520 <a href="https://www.americanflags.com/city-state-flags/arkansas-state-flags.html" 2521 title="Arkansas State Flags" 2522 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 2523 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 2524 > 2525 <!-- <span class="w-6"></span> --> 2526 <span class="ml-4 text-gray-700 lg:ml-0"> 2527 Arkansas State Flags </span> 2528 </a> 2529 2530 <a href="https://www.americanflags.com/city-state-flags/calfornia-state-flags.html" 2531 title="California State Flags" 2532 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 2533 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 2534 > 2535 <!-- <span class="w-6"></span> --> 2536 <span class="ml-4 text-gray-700 lg:ml-0"> 2537 California State Flags </span> 2538 </a> 2539 2540 <a href="https://www.americanflags.com/city-state-flags/colorado-state-flags.html" 2541 title="Colorado State Flags" 2542 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 2543 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 2544 > 2545 <!-- <span class="w-6"></span> --> 2546 <span class="ml-4 text-gray-700 lg:ml-0"> 2547 Colorado State Flags </span> 2548 </a> 2549 2550 <a href="https://www.americanflags.com/city-state-flags/connecticut-state-flags.html" 2551 title="Connecticut State Flags" 2552 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 2553 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 2554 > 2555 <!-- <span class="w-6"></span> --> 2556 <span class="ml-4 text-gray-700 lg:ml-0"> 2557 Connecticut State Flags </span> 2558 </a> 2559 2560 <a href="https://www.americanflags.com/city-state-flags/delaware-state-flags.html" 2561 title="Delaware State Flags" 2562 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 2563 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 2564 > 2565 <!-- <span class="w-6"></span> -->
2566 <span class="ml-4 text-gray-700 lg:ml-0"> 2567 Delaware State Flags </span> 2568 </a> 2569 2570 <a href="https://www.americanflags.com/city-state-flags/district-of-columbia-flags.html" 2571 title="Washington D.C. Flags " 2572 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 2573 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 2574 > 2575 <!-- <span class="w-6"></span> --> 2576 <span class="ml-4 text-gray-700 lg:ml-0"> 2577 Washington D.C. Flags </span> 2578 </a> 2579 2580 <a href="https://www.americanflags.com/city-state-flags/florida-state-flags.html" 2581 title="Florida State Flags" 2582 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 2583 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 2584 > 2585 <!-- <span class="w-6"></span> --> 2586 <span class="ml-4 text-gray-700 lg:ml-0"> 2587 Florida State Flags </span> 2588 </a> 2589 2590 <a href="https://www.americanflags.com/city-state-flags/georgia-state-flags.html" 2591 title="Georgia State Flags" 2592 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 2593 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 2594 > 2595 <!-- <span class="w-6"></span> --> 2596 <span class="ml-4 text-gray-700 lg:ml-0"> 2597 Georgia State Flags </span> 2598 </a> 2599 2600 <a href="https://www.americanflags.com/city-state-flags/guamflags.html" 2601 title="Guam Flags" 2602 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 2603 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 2604 > 2605 <!-- <span class="w-6"></span> --> 2606 <span class="ml-4 text-gray-700 lg:ml-0"> 2607 Guam Flags </span> 2608 </a> 2609 2610 <a href="https://www.americanflags.com/city-state-flags/hawaii-state-flags.html" 2611 title="Hawaii State Flags" 2612 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 2613 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 2614 > 2615 <!-- <span class="w-6"></span> --> 2616 <span class="ml-4 text-gray-700 lg:ml-0"> 2617 Hawaii State Flags </span> 2618 </a> 2619 2620 <a href="https://www.americanflags.com/city-state-flags/idaho-state-flags.html" 2621 title="Idaho State Flags" 2622 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 2623 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 2624 > 2625 <!-- <span class="w-6"></span> -->
2626 <span class="ml-4 text-gray-700 lg:ml-0"> 2627 Idaho State Flags </span> 2628 </a> 2629 2630 <a href="https://www.americanflags.com/city-state-flags/illinois-state-flags.html" 2631 title="Illinois State Flags" 2632 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 2633 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 2634 > 2635 <!-- <span class="w-6"></span> --> 2636 <span class="ml-4 text-gray-700 lg:ml-0"> 2637 Illinois State Flags </span> 2638 </a> 2639 2640 <a href="https://www.americanflags.com/city-state-flags/indiana-state-flags.html" 2641 title="Indiana State Flags" 2642 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 2643 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 2644 > 2645 <!-- <span class="w-6"></span> --> 2646 <span class="ml-4 text-gray-700 lg:ml-0"> 2647 Indiana State Flags </span> 2648 </a> 2649 2650 <a href="https://www.americanflags.com/city-state-flags/iowa-state-flags.html" 2651 title="Iowa State Flags" 2652 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 2653 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 2654 > 2655 <!-- <span class="w-6"></span> --> 2656 <span class="ml-4 text-gray-700 lg:ml-0"> 2657 Iowa State Flags </span> 2658 </a> 2659 2660 <a href="https://www.americanflags.com/city-state-flags/kansas-state-flags.html" 2661 title="Kansas State Flags" 2662 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 2663 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 2664 > 2665 <!-- <span class="w-6"></span> --> 2666 <span class="ml-4 text-gray-700 lg:ml-0"> 2667 Kansas State Flags </span> 2668 </a> 2669 2670 <a href="https://www.americanflags.com/city-state-flags/kentucky-state-flags.html" 2671 title="Kentucky State Flags" 2672 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 2673 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 2674 > 2675 <!-- <span class="w-6"></span> --> 2676 <span class="ml-4 text-gray-700 lg:ml-0"> 2677 Kentucky State Flags </span> 2678 </a> 2679 2680 <a href="https://www.americanflags.com/city-state-flags/louisiana-state-flags.html" 2681 title="Louisiana State Flags" 2682 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 2683 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 2684 > 2685 <!-- <span class="w-6"></span> -->
2686 <span class="ml-4 text-gray-700 lg:ml-0"> 2687 Louisiana State Flags </span> 2688 </a> 2689 2690 <a href="https://www.americanflags.com/city-state-flags/maine-state-flags.html" 2691 title="Maine State Flags" 2692 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 2693 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 2694 > 2695 <!-- <span class="w-6"></span> --> 2696 <span class="ml-4 text-gray-700 lg:ml-0"> 2697 Maine State Flags </span> 2698 </a> 2699 2700 <a href="https://www.americanflags.com/city-state-flags/maryland-state-flags.html" 2701 title="Maryland State Flags" 2702 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 2703 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 2704 > 2705 <!-- <span class="w-6"></span> --> 2706 <span class="ml-4 text-gray-700 lg:ml-0"> 2707 Maryland State Flags </span> 2708 </a> 2709 2710 <a href="https://www.americanflags.com/city-state-flags/massachusetts-state-flags.html" 2711 title="Massachusetts State Flags" 2712 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 2713 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 2714 > 2715 <!-- <span class="w-6"></span> --> 2716 <span class="ml-4 text-gray-700 lg:ml-0"> 2717 Massachusetts State Flags </span> 2718 </a> 2719 2720 <a href="https://www.americanflags.com/city-state-flags/michigan-state-flags.html" 2721 title="Michigan State Flags" 2722 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 2723 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 2724 > 2725 <!-- <span class="w-6"></span> --> 2726 <span class="ml-4 text-gray-700 lg:ml-0"> 2727 Michigan State Flags </span> 2728 </a> 2729 2730 <a href="https://www.americanflags.com/city-state-flags/minnesota-state-flags.html" 2731 title="Minnesota State Flags" 2732 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 2733 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 2734 > 2735 <!-- <span class="w-6"></span> --> 2736 <span class="ml-4 text-gray-700 lg:ml-0"> 2737 Minnesota State Flags </span> 2738 </a> 2739 2740 <a href="https://www.americanflags.com/city-state-flags/mississippi-state-flags.html" 2741 title="Mississippi State Flags" 2742 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 2743 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 2744 > 2745 <!-- <span class="w-6"></span> -->
2746 <span class="ml-4 text-gray-700 lg:ml-0"> 2747 Mississippi State Flags </span> 2748 </a> 2749 2750 <a href="https://www.americanflags.com/city-state-flags/missouri-state-flags.html" 2751 title="Missouri State Flags" 2752 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 2753 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 2754 > 2755 <!-- <span class="w-6"></span> --> 2756 <span class="ml-4 text-gray-700 lg:ml-0"> 2757 Missouri State Flags </span> 2758 </a> 2759 2760 <a href="https://www.americanflags.com/city-state-flags/montana-state-flags.html" 2761 title="Montana State Flags" 2762 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 2763 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 2764 > 2765 <!-- <span class="w-6"></span> --> 2766 <span class="ml-4 text-gray-700 lg:ml-0"> 2767 Montana State Flags </span> 2768 </a> 2769 2770 <a href="https://www.americanflags.com/city-state-flags/nebraska-state-flags.html" 2771 title="Nebraska State Flags" 2772 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 2773 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 2774 > 2775 <!-- <span class="w-6"></span> --> 2776 <span class="ml-4 text-gray-700 lg:ml-0"> 2777 Nebraska State Flags </span> 2778 </a> 2779 2780 <a href="https://www.americanflags.com/city-state-flags/nevada-state-flags.html" 2781 title="Nevada State Flags" 2782 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 2783 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 2784 > 2785 <!-- <span class="w-6"></span> --> 2786 <span class="ml-4 text-gray-700 lg:ml-0"> 2787 Nevada State Flags </span> 2788 </a> 2789 2790 <a href="https://www.americanflags.com/city-state-flags/new-hampshire-state-flags.html" 2791 title="New Hampshire State Flags" 2792 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 2793 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 2794 > 2795 <!-- <span class="w-6"></span> --> 2796 <span class="ml-4 text-gray-700 lg:ml-0"> 2797 New Hampshire State Flags </span> 2798 </a> 2799 2800 <a href="https://www.americanflags.com/city-state-flags/new-jersey-state-flags.html" 2801 title="New Jersey State Flags" 2802 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 2803 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 2804 > 2805 <!-- <span class="w-6"></span> -->
2806 <span class="ml-4 text-gray-700 lg:ml-0"> 2807 New Jersey State Flags </span> 2808 </a> 2809 2810 <a href="https://www.americanflags.com/city-state-flags/new-mexico-state-flags.html" 2811 title="New Mexico State Flags" 2812 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 2813 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 2814 > 2815 <!-- <span class="w-6"></span> --> 2816 <span class="ml-4 text-gray-700 lg:ml-0"> 2817 New Mexico State Flags </span> 2818 </a> 2819 2820 <a href="https://www.americanflags.com/city-state-flags/new-york-state-flags.html" 2821 title="New York State Flags" 2822 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 2823 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 2824 > 2825 <!-- <span class="w-6"></span> --> 2826 <span class="ml-4 text-gray-700 lg:ml-0"> 2827 New York State Flags </span> 2828 </a> 2829 2830 <a href="https://www.americanflags.com/city-state-flags/north-carolina-state-flags.html" 2831 title="North Carolina State Flags" 2832 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 2833 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 2834 > 2835 <!-- <span class="w-6"></span> --> 2836 <span class="ml-4 text-gray-700 lg:ml-0"> 2837 North Carolina State Flags </span> 2838 </a> 2839 2840 <a href="https://www.americanflags.com/city-state-flags/north-dakota-state-flags.html" 2841 title="North Dakota State Flags" 2842 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 2843 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 2844 > 2845 <!-- <span class="w-6"></span> --> 2846 <span class="ml-4 text-gray-700 lg:ml-0"> 2847 North Dakota State Flags </span> 2848 </a> 2849 2850 <a href="https://www.americanflags.com/city-state-flags/ohio-state-flags.html" 2851 title="Ohio State Flags" 2852 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 2853 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 2854 > 2855 <!-- <span class="w-6"></span> --> 2856 <span class="ml-4 text-gray-700 lg:ml-0"> 2857 Ohio State Flags </span> 2858 </a> 2859 2860 <a href="https://www.americanflags.com/city-state-flags/oklahoma-state-flags.html" 2861 title="Oklahoma State Flags" 2862 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 2863 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 2864 > 2865 <!-- <span class="w-6"></span> -->
2866 <span class="ml-4 text-gray-700 lg:ml-0"> 2867 Oklahoma State Flags </span> 2868 </a> 2869 2870 <a href="https://www.americanflags.com/city-state-flags/oregon-state-flags.html" 2871 title="Oregon State Flags" 2872 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 2873 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 2874 > 2875 <!-- <span class="w-6"></span> --> 2876 <span class="ml-4 text-gray-700 lg:ml-0"> 2877 Oregon State Flags </span> 2878 </a> 2879 2880 <a href="https://www.americanflags.com/city-state-flags/pennsylvania-state-flags.html" 2881 title="Pennsylvania State Flags" 2882 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 2883 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 2884 > 2885 <!-- <span class="w-6"></span> --> 2886 <span class="ml-4 text-gray-700 lg:ml-0"> 2887 Pennsylvania State Flags </span> 2888 </a> 2889 2890 <a href="https://www.americanflags.com/city-state-flags/puerto-rico-flags.html" 2891 title="Puerto Rico Flags" 2892 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 2893 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 2894 > 2895 <!-- <span class="w-6"></span> --> 2896 <span class="ml-4 text-gray-700 lg:ml-0"> 2897 Puerto Rico Flags </span> 2898 </a> 2899 2900 <a href="https://www.americanflags.com/city-state-flags/rhode-island-state-flags.html" 2901 title="Rhode Island State Flags" 2902 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 2903 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 2904 > 2905 <!-- <span class="w-6"></span> --> 2906 <span class="ml-4 text-gray-700 lg:ml-0"> 2907 Rhode Island State Flags </span> 2908 </a> 2909 2910 <a href="https://www.americanflags.com/city-state-flags/south-carolina-state-flags.html" 2911 title="South Carolina State Flags" 2912 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 2913 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 2914 > 2915 <!-- <span class="w-6"></span> --> 2916 <span class="ml-4 text-gray-700 lg:ml-0"> 2917 South Carolina State Flags </span> 2918 </a> 2919 2920 <a href="https://www.americanflags.com/city-state-flags/south-dakota-state-flags.html" 2921 title="South Dakota State Flags" 2922 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 2923 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 2924 > 2925 <!-- <span class="w-6"></span> -->
2926 <span class="ml-4 text-gray-700 lg:ml-0"> 2927 South Dakota State Flags </span> 2928 </a> 2929 2930 <a href="https://www.americanflags.com/city-state-flags/tennessee-state-flags.html" 2931 title="Tennessee State Flags" 2932 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 2933 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 2934 > 2935 <!-- <span class="w-6"></span> --> 2936 <span class="ml-4 text-gray-700 lg:ml-0"> 2937 Tennessee State Flags </span> 2938 </a> 2939 2940 <a href="https://www.americanflags.com/city-state-flags/texas-state-flags.html" 2941 title="Texas State Flags" 2942 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 2943 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 2944 > 2945 <!-- <span class="w-6"></span> --> 2946 <span class="ml-4 text-gray-700 lg:ml-0"> 2947 Texas State Flags </span> 2948 </a> 2949 2950 <a href="https://www.americanflags.com/city-state-flags/utah-state-flags.html" 2951 title="Utah State Flags" 2952 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 2953 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 2954 > 2955 <!-- <span class="w-6"></span> --> 2956 <span class="ml-4 text-gray-700 lg:ml-0"> 2957 Utah State Flags </span> 2958 </a> 2959 2960 <a href="https://www.americanflags.com/city-state-flags/vermont-state-flags.html" 2961 title="Vermont State Flags" 2962 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 2963 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 2964 > 2965 <!-- <span class="w-6"></span> --> 2966 <span class="ml-4 text-gray-700 lg:ml-0"> 2967 Vermont State Flags </span> 2968 </a> 2969 2970 <a href="https://www.americanflags.com/city-state-flags/virginia-state-flags.html" 2971 title="Virginia State Flags" 2972 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 2973 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 2974 > 2975 <!-- <span class="w-6"></span> --> 2976 <span class="ml-4 text-gray-700 lg:ml-0"> 2977 Virginia State Flags </span> 2978 </a> 2979 2980 <a href="https://www.americanflags.com/city-state-flags/washington-state-flags.html" 2981 title="Washington State Flags" 2982 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 2983 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 2984 > 2985 <!-- <span class="w-6"></span> -->
2986 <span class="ml-4 text-gray-700 lg:ml-0"> 2987 Washington State Flags </span> 2988 </a> 2989 2990 <a href="https://www.americanflags.com/city-state-flags/west-virginia-state-flags.html" 2991 title="West Virginia State Flags" 2992 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 2993 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 2994 > 2995 <!-- <span class="w-6"></span> --> 2996 <span class="ml-4 text-gray-700 lg:ml-0"> 2997 West Virginia State Flags </span> 2998 </a> 2999 3000 <a href="https://www.americanflags.com/city-state-flags/wisconsin-state-flags.html" 3001 title="Wisconsin State Flags" 3002 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 3003 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 3004 > 3005 <!-- <span class="w-6"></span> --> 3006 <span class="ml-4 text-gray-700 lg:ml-0"> 3007 Wisconsin State Flags </span> 3008 </a> 3009 3010 <a href="https://www.americanflags.com/city-state-flags/wyoming-state-flags.html" 3011 title="Wyoming State Flags" 3012 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 3013 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 3014 > 3015 <!-- <span class="w-6"></span> --> 3016 <span class="ml-4 text-gray-700 lg:ml-0"> 3017 Wyoming State Flags </span> 3018 </a> 3019 3020 <a href="https://www.americanflags.com/city-state-flags/full-set-of-50-state-flags.html" 3021 title="Complete Set of 50 State Flags" 3022 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 3023 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 3024 > 3025 <!-- <span class="w-6"></span> --> 3026 <span class="ml-4 text-gray-700 lg:ml-0"> 3027 Complete Set of 50 State Flags </span> 3028 </a> 3029 3030 <a href="https://www.americanflags.com/city-state-flags/us-virgin-islands-flags.html" 3031 title="US Virgin Islands Flags" 3032 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 3033 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 3034 > 3035 <!-- <span class="w-6"></span> --> 3036 <span class="ml-4 text-gray-700 lg:ml-0"> 3037 US Virgin Islands Flags </span> 3038 </a> 3039 3040 <a href="https://www.americanflags.com/city-state-flags/american-samoa-flags.html" 3041 title="American Samoa Flags" 3042 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 3043 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 3044 > 3045 <!-- <span class="w-6"></span> -->
3046 <span class="ml-4 text-gray-700 lg:ml-0"> 3047 American Samoa Flags </span> 3048 </a> 3049 <a href="https://www.americanflags.com/city-state-flags.html" 3050 title="City, State & Territory Flags" 3051 class="flex items-center w-full px-8 py-4 border-b cursor-pointer 3052 bg-container-lighter border-container last:border-b-0" 3053 > 3054 <!-- <span class="w-6"></span> --> 3055 <span class="ml-4 text-[14px] font-bold leading-[17px] text-brand-base underline">View All</span> 3056 </a> 3057 </div> 3058 </div> 3059 <div class="level-0"> 3060 <span 3061 class="flex items-center transition-transform duration-150 ease-in-out transform" 3062 :class="{ 3063 '-translate-x-full' : mobilePanelActiveId, 3064 'translate-x-0' : !mobilePanelActiveId 3065 }" 3066 > 3067 <a class="flex items-center w-full py-3 border-b cursor-pointer 3068 bg-container-lighter border-container level-0 text-[14px] text-primary uppercase font-bold last:border-b-0" 3069 href="https://www.americanflags.com/flags.html" 3070 title="Other Flags"> 3071 Other Flags </a> 3072 <button class="absolute right-0 flex items-center w-8 h-8 mr-2 cursor-pointer " 3073 type="button" 3074 @click="mobilePanelActiveId = 3075 mobilePanelActiveId === 'category-node-159' ? 3076 0 : 'category-node-159'" 3077 > 3078 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="w-[30px] h-[20px] p-1" width="24" height="24" role="img"> 3079 <path stroke-linecap="round" stroke-linejoin="round" d="M9 5l7 7-7 7"/> 3080<title>chevron-right</title></svg> 3081 </button> 3082 </span> 3083 <div 3084 class="absolute top-0 right-0 z-10 w-full h-full transition-transform duration-200 ease-in-out 3085 translate-x-full transform" 3086 :class="{ 3087 'translate-x-full' : mobilePanelActiveId !== 'category-node-159', 3088 'translate-x-0' : mobilePanelActiveId === 'category-node-159', 3089 }" 3090 > 3091 <button class="w-full flex items-center" 3092 type="button" 3093 @click="mobilePanelActiveId = 0" 3094 > 3095 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="w-[30px] h-[20px] p-1" width="24" height="24" role="img"> 3096 <path stroke-linecap="round" stroke-linejoin="round" d="M15 19l-7-7 7-7"/> 3097<title>chevron-left</title></svg> 3098 <span class="ml-4 text-[14px] font-bold leading-[17px] text-brand-base uppercase"> 3099 Other Flags </span> 3100 </button> 3101 3102 <a href="https://www.americanflags.com/flags/political-flags.html" 3103 title="Political Flags" 3104 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 3105 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 3106 > 3107 <!-- <span class="w-6"></span> -->
3108 <span class="ml-4 text-gray-700 lg:ml-0"> 3109 Political Flags </span> 3110 </a> 3111 3112 <a href="https://www.americanflags.com/flags/historic-flags.html" 3113 title="Historic Flags" 3114 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 3115 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 3116 > 3117 <!-- <span class="w-6"></span> --> 3118 <span class="ml-4 text-gray-700 lg:ml-0"> 3119 Historic Flags </span> 3120 </a> 3121 3122 <a href="https://www.americanflags.com/flags/world-flags.html" 3123 title="World Flags" 3124 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 3125 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 3126 > 3127 <!-- <span class="w-6"></span> --> 3128 <span class="ml-4 text-gray-700 lg:ml-0"> 3129 World Flags </span> 3130 </a> 3131 3132 <a href="https://www.americanflags.com/flags/religious-flags.html" 3133 title="Religious Flags" 3134 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 3135 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 3136 > 3137 <!-- <span class="w-6"></span> --> 3138 <span class="ml-4 text-gray-700 lg:ml-0"> 3139 Religious Flags </span> 3140 </a> 3141 3142 <a href="https://www.americanflags.com/flags/novelty-celebration-flags.html" 3143 title="Novelty, Celebration and Awareness Flags" 3144 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 3145 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 3146 > 3147 <!-- <span class="w-6"></span> --> 3148 <span class="ml-4 text-gray-700 lg:ml-0"> 3149 Novelty, Celebration and Awareness Flags </span> 3150 </a> 3151 3152 <a href="https://www.americanflags.com/flags/holiday-seasonal-flags-banners.html" 3153 title="Holiday and Seasonal Flags" 3154 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 3155 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 3156 > 3157 <!-- <span class="w-6"></span> --> 3158 <span class="ml-4 text-gray-700 lg:ml-0"> 3159 Holiday and Seasonal Flags </span> 3160 </a> 3161 3162 <a href="https://www.americanflags.com/flags/business-advertising-flags.html" 3163 title="Business and Advertising Flags" 3164 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 3165 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 3166 > 3167 <!-- <span class="w-6"></span> -->
3168 <span class="ml-4 text-gray-700 lg:ml-0"> 3169 Business and Advertising Flags </span> 3170 </a> 3171 3172 <a href="https://www.americanflags.com/flags/nautical-flags.html" 3173 title="Nautical Flags" 3174 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 3175 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 3176 > 3177 <!-- <span class="w-6"></span> --> 3178 <span class="ml-4 text-gray-700 lg:ml-0"> 3179 Nautical Flags </span> 3180 </a> 3181 3182 <a href="https://www.americanflags.com/flags/police-fire-thin-line-ems.html" 3183 title="Fire, Police and EMS flags" 3184 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 3185 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 3186 > 3187 <!-- <span class="w-6"></span> --> 3188 <span class="ml-4 text-gray-700 lg:ml-0"> 3189 Fire, Police and EMS flags </span> 3190 </a> 3191 3192 <a href="https://www.americanflags.com/flags/911-honor-flags.html" 3193 title="Patriot Day 9/11 Flags" 3194 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 3195 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 3196 > 3197 <!-- <span class="w-6"></span> --> 3198 <span class="ml-4 text-gray-700 lg:ml-0"> 3199 Patriot Day 9/11 Flags </span> 3200 </a> 3201 <a href="https://www.americanflags.com/flags.html" 3202 title="Other Flags" 3203 class="flex items-center w-full px-8 py-4 border-b cursor-pointer 3204 bg-container-lighter border-container last:border-b-0" 3205 > 3206 <!-- <span class="w-6"></span> --> 3207 <span class="ml-4 text-[14px] font-bold leading-[17px] text-brand-base underline">View All</span> 3208 </a> 3209 </div> 3210 </div> 3211 <div class="level-0"> 3212 <span 3213 class="flex items-center transition-transform duration-150 ease-in-out transform" 3214 :class="{ 3215 '-translate-x-full' : mobilePanelActiveId, 3216 'translate-x-0' : !mobilePanelActiveId 3217 }" 3218 > 3219 <a class="flex items-center w-full py-3 border-b cursor-pointer 3220 bg-container-lighter border-container level-0 text-[14px] text-primary uppercase font-bold last:border-b-0" 3221 href="https://www.americanflags.com/flagpoles.html" 3222 title="Flagpoles"> 3223 Flagpoles </a> 3224 <button class="absolute right-0 flex items-center w-8 h-8 mr-2 cursor-pointer " 3225 type="button" 3226 @click="mobilePanelActiveId = 3227 mobilePanelActiveId === 'category-node-167' ? 3228 0 : 'category-node-167'" 3229 > 3230 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="w-[30px] h-[20px] p-1" width="24" height="24" role="img"> 3231 <path stroke-linecap="round" stroke-linejoin="round" d="M9 5l7 7-7 7"/> 3232<title>chevron-right</title></svg> 3233 </button> 3234 </span> 3235 <div 3236 class="absolute top-0 right-0 z-10 w-full h-full transition-transform duration-200 ease-in-out 3237 translate-x-full transform" 3238 :class="{ 3239 'translate-x-full' : mobilePanelActiveId !== 'category-node-167', 3240 'translate-x-0' : mobilePanelActiveId === 'category-node-167', 3241 }" 3242 > 3243 <button class="w-full flex items-center" 3244 type="button" 3245 @click="mobilePanelActiveId = 0" 3246 > 3247 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="w-[30px] h-[20px] p-1" width="24" height="24" role="img"> 3248 <path stroke-linecap="round" stroke-linejoin="round" d="M15 19l-7-7 7-7"/> 3249<title>chevron-left</title></svg>
3250 <span class="ml-4 text-[14px] font-bold leading-[17px] text-brand-base uppercase"> 3251 Flagpoles </span> 3252 </button> 3253 3254 <a href="https://www.americanflags.com/flagpoles/outdoor-residential-flagpoles.html" 3255 title="Outdoor Residential Flagpoles" 3256 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 3257 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 3258 > 3259 <!-- <span class="w-6"></span> --> 3260 <span class="ml-4 text-gray-700 lg:ml-0"> 3261 Outdoor Residential Flagpoles </span> 3262 </a> 3263 3264 <a href="https://www.americanflags.com/flagpoles/outdoor-commercial-flagpoles.html" 3265 title="Outdoor Commercial Flagpoles" 3266 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 3267 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 3268 > 3269 <!-- <span class="w-6"></span> --> 3270 <span class="ml-4 text-gray-700 lg:ml-0"> 3271 Outdoor Commercial Flagpoles </span> 3272 </a> 3273 3274 <a href="https://www.americanflags.com/flagpoles/outdoor-flagpole-components.html" 3275 title="Outdoor Flagpole Components" 3276 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 3277 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 3278 > 3279 <!-- <span class="w-6"></span> --> 3280 <span class="ml-4 text-gray-700 lg:ml-0"> 3281 Outdoor Flagpole Components </span> 3282 </a> 3283 3284 <a href="https://www.americanflags.com/flagpoles/indoor-flagpoles.html" 3285 title="Indoor Flagpoles and Display Sets" 3286 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 3287 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 3288 > 3289 <!-- <span class="w-6"></span> --> 3290 <span class="ml-4 text-gray-700 lg:ml-0"> 3291 Indoor Flagpoles and Display Sets </span> 3292 </a> 3293 3294 <a href="https://www.americanflags.com/flagpoles/handheld.html" 3295 title="Handheld, Tailgating and Advertising Flagpoles" 3296 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 3297 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 3298 > 3299 <!-- <span class="w-6"></span> --> 3300 <span class="ml-4 text-gray-700 lg:ml-0"> 3301 Handheld, Tailgating and Advertising Flagpoles </span> 3302 </a> 3303 <a href="https://www.americanflags.com/flagpoles.html" 3304 title="Flagpoles" 3305 class="flex items-center w-full px-8 py-4 border-b cursor-pointer 3306 bg-container-lighter border-container last:border-b-0" 3307 > 3308 <!-- <span class="w-6"></span> -->
3309 <span class="ml-4 text-[14px] font-bold leading-[17px] text-brand-base underline">View All</span> 3310 </a> 3311 </div> 3312 </div> 3313 <div class="level-0"> 3314 <span 3315 class="flex items-center transition-transform duration-150 ease-in-out transform" 3316 :class="{ 3317 '-translate-x-full' : mobilePanelActiveId, 3318 'translate-x-0' : !mobilePanelActiveId 3319 }" 3320 > 3321 <a class="flex items-center w-full py-3 border-b cursor-pointer 3322 bg-container-lighter border-container level-0 text-[14px] text-primary uppercase font-bold last:border-b-0" 3323 href="https://www.americanflags.com/patriotic-items.html" 3324 title="Patriotic Items"> 3325 Patriotic Items </a> 3326 <button class="absolute right-0 flex items-center w-8 h-8 mr-2 cursor-pointer " 3327 type="button" 3328 @click="mobilePanelActiveId = 3329 mobilePanelActiveId === 'category-node-162' ? 3330 0 : 'category-node-162'" 3331 > 3332 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="w-[30px] h-[20px] p-1" width="24" height="24" role="img"> 3333 <path stroke-linecap="round" stroke-linejoin="round" d="M9 5l7 7-7 7"/> 3334<title>chevron-right</title></svg> 3335 </button> 3336 </span> 3337 <div 3338 class="absolute top-0 right-0 z-10 w-full h-full transition-transform duration-200 ease-in-out 3339 translate-x-full transform" 3340 :class="{ 3341 'translate-x-full' : mobilePanelActiveId !== 'category-node-162', 3342 'translate-x-0' : mobilePanelActiveId === 'category-node-162', 3343 }" 3344 > 3345 <button class="w-full flex items-center" 3346 type="button" 3347 @click="mobilePanelActiveId = 0" 3348 > 3349 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="w-[30px] h-[20px] p-1" width="24" height="24" role="img"> 3350 <path stroke-linecap="round" stroke-linejoin="round" d="M15 19l-7-7 7-7"/> 3351<title>chevron-left</title></svg> 3352 <span class="ml-4 text-[14px] font-bold leading-[17px] text-brand-base uppercase"> 3353 Patriotic Items </span> 3354 </button> 3355 3356 <a href="https://www.americanflags.com/patriotic-items/commemorative-flag-cases.html" 3357 title="Commemorative Flag Cases" 3358 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 3359 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 3360 > 3361 <!-- <span class="w-6"></span> --> 3362 <span class="ml-4 text-gray-700 lg:ml-0"> 3363 Commemorative Flag Cases </span> 3364 </a> 3365 3366 <a href="https://www.americanflags.com/patriotic-items/service-medallions.html" 3367 title="Service Medallions" 3368 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 3369 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 3370 > 3371 <!-- <span class="w-6"></span> -->
3372 <span class="ml-4 text-gray-700 lg:ml-0"> 3373 Service Medallions </span> 3374 </a> 3375 3376 <a href="https://www.americanflags.com/patriotic-items/patriotic-picture-frames.html" 3377 title="Patriotic Picture Frames" 3378 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 3379 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 3380 > 3381 <!-- <span class="w-6"></span> --> 3382 <span class="ml-4 text-gray-700 lg:ml-0"> 3383 Patriotic Picture Frames </span> 3384 </a> 3385 3386 <a href="https://www.americanflags.com/patriotic-items/grave-markers.html" 3387 title="Grave Markers" 3388 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 3389 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 3390 > 3391 <!-- <span class="w-6"></span> --> 3392 <span class="ml-4 text-gray-700 lg:ml-0"> 3393 Grave Markers </span> 3394 </a> 3395 3396 <a href="https://www.americanflags.com/patriotic-items/patriotic-decorations.html" 3397 title="Patriotic Decorations" 3398 class="flex items-center w-full px-8 py-3 border-b cursor-pointer 3399 bg-container-lighter border-container text-[14px] text-primary uppercase font-bold" 3400 > 3401 <!-- <span class="w-6"></span> --> 3402 <span class="ml-4 text-gray-700 lg:ml-0"> 3403 Patriotic Decorations </span> 3404 </a> 3405 <a href="https://www.americanflags.com/patriotic-items.html" 3406 title="Patriotic Items" 3407 class="flex items-center w-full px-8 py-4 border-b cursor-pointer 3408 bg-container-lighter border-container last:border-b-0" 3409 > 3410 <!-- <span class="w-6"></span> --> 3411 <span class="ml-4 text-[14px] font-bold leading-[17px] text-brand-base underline">View All</span> 3412 </a> 3413 </div> 3414 </div> 3415 <div class="level-0"> 3416 <span 3417 class="flex items-center transition-transform duration-150 ease-in-out transform" 3418 :class="{ 3419 '-translate-x-full' : mobilePanelActiveId, 3420 'translate-x-0' : !mobilePanelActiveId 3421 }" 3422 > 3423 <a class="flex items-center w-full py-3 border-b cursor-pointer 3424 bg-container-lighter border-container level-0 text-[14px] text-primary uppercase font-bold last:border-b-0" 3425 href="https://www.americanflags.com/clearance-items.html" 3426 title="Clearance Items"> 3427 Clearance Items </a> 3428 </span> 3429 </div> 3430 <!-- Mobile Bottom Static Block --> 3431 </nav> 3432 </div> 3433</div>
3434<script> 3435 'use strict'; 3436 3437 const initMenuMobile_6ab573946b157 = () => { 3438 return { 3439 mobilePanelActiveId: null, 3440 open: false, 3441 setActiveMenu(menuNode) { 3442 Array.from(menuNode.querySelectorAll('a')).filter(link => { 3443 return link.href === window.location.href.split('?')[0]; 3444 }).map(item => { 3445 item.classList.add('underline'); 3446 item.closest('div.level-0') && 3447 item.closest('div.level-0').querySelector('a.level-0').classList.add('underline'); 3448 }); 3449 } 3450 } 3451 } 3452</script>
3452 3453 3454<div x-data="initMenuDesktop_6ab57394738b7()" 3455 class="z-20 order-2 sm:order-1 2xl:order-2 navigation hidden 2lg:flex bg-brand-base" > 3456 3457 <!-- desktop --> 3458 <div @load.window="setActiveMenu($root)" 3459 class="justify-between items-center mx-auto w-full container" 3460 > 3461 <nav 3462 class="flex flex-wrap items-center justify-center [&>*:nth-child(7)]:lg:hidden [&>*:nth-child(7)]:xl:flex [&>*:nth-child(7)]:2xl:flex" 3463 > 3464 <div id="hoverEffect" class="level-0 flex items-center p-1 mx-1 transition transition-colors duration-500 group 2lg:px-2 2lg:py-3 xl:mx-2 bg-on-hover"[ 3465 @mouseover.stop="hoverTopPosition = $event.currentTarget.offsetTop + $event.currentTarget.getBoundingClientRect().height" 3466 > 3467 <a href="https://www.americanflags.com/american-flags.html" 3468 @focus="hoverTopPosition = $event.currentTarget.parentNode.offsetTop + $event.currentTarget.parentNode.getBoundingClientRect().height" 3469 title="American Flags" 3470 class="level-0 block text-[16px] text-white font-bold uppercase whitespace-nowrap group"> 3471 <span>American Flags</span> 3472 <span class="inline items-center"> 3473 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-5 h-5 inline group-hover:rotate-180 transition transform duration-500" width="25" height="25" role="img"> 3474 <path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"/> 3475<title>chevron-down</title></svg> 3476 </span> 3477 </a> 3478 <div class="absolute left-0 top-full z-10 border-t-[5px] border-gray-100 -mt-3 w-full bg-white/[.95] opacity-0 transition-opacity ease-out pointer-events-none group-hover:opacity-100 focus-within:opacity-100 group-hover:pointer-events-auto shadow-lg menu-hover-data" 3479 :style="`margin-top: 0; top:100%;`" 3480 > 3481 <div class="flex justify-between relative bg-white"> 3482 <div class="mx-auto max-w-[1700px] w-full p-4"> 3483 <ul class="flex flex-wrap gap-[30px] justify-center"> 3484 <li class="level-1 custom-calc"> 3485 <a href="https://www.americanflags.com/american-flags/outdoor-american-flags.html" 3486 title="Outdoor American Flags - Made in USA" 3487 class="level-1 text-[16px] font-bold leading-[19px] uppercase mb-[6px] block anchor-color"> 3488 Outdoor American Flags - Made in USA </a> 3489 3490 <ul class="z-10 w-full"> 3491 <li class="level-2 mb-2"> 3492 <a href="https://www.americanflags.com/american-flags/outdoor-american-flags/all-american-nylon-american-flags.html" 3493 title="Nylon American Flags" 3494 class="level-2 pl-[15px] block text-[14px] relative before:absolute before:h-[5px] before:w-[5px] before:bg-red-900 before:top-[8px] before:left-0"> 3495 Nylon American Flags </a> 3496 </li> 3497 <li class="level-2 mb-2"> 3498 <a href="https://www.americanflags.com/american-flags/outdoor-american-flags/heavy-duty-polyester.html" 3499 title="Heavy Duty Polyester American Flags" 3500 class="level-2 pl-[15px] block text-[14px] relative before:absolute before:h-[5px] before:w-[5px] before:bg-red-900 before:top-[8px] before:left-0"> 3501 Heavy Duty Polyester American Flags </a> 3502 </li> 3503 <li class="level-2 mb-2"> 3504 <a href="https://www.americanflags.com/american-flags/outdoor-american-flags/americana-embroidered-cotton-american-flags.html" 3505 title="Cotton American Flags" 3506 class="level-2 pl-[15px] block text-[14px] relative before:absolute before:h-[5px] before:w-[5px] before:bg-red-900 before:top-[8px] before:left-0"> 3507 Cotton American Flags </a> 3508 </li> 3509 <li class="level-2 mb-2"> 3510 <a href="https://www.americanflags.com/american-flags/outdoor-american-flags/outdoor-us-flag-sets.html" 3511 title="Outdoor American Flag Sets" 3512 class="level-2 pl-[15px] block text-[14px] relative before:absolute before:h-[5px] before:w-[5px] before:bg-red-900 before:top-[8px] before:left-0"> 3513 Outdoor American Flag Sets </a> 3514 </li> 3515 <li class="level-2 mb-2"> 3516 <a href="https://www.americanflags.com/american-flags/outdoor-american-flags/american-garden-banners.html" 3517 title="American Flag Garden Banners" 3518 class="level-2 pl-[15px] block text-[14px] relative before:absolute before:h-[5px] before:w-[5px] before:bg-red-900 before:top-[8px] before:left-0"> 3519 American Flag Garden Banners </a> 3520 </li> 3521 <li class="level-2 mb-2"> 3522 <a href="https://www.americanflags.com/american-flags/outdoor-american-flags.html" 3523 class="level-2 block text-[14px] text-red-900 font-bold underline"> 3524 Shop All </a> 3525 </li> 3526 </ul> 3527 3528 </li> 3529 <li class="level-1 custom-calc"> 3530 <a href="https://www.americanflags.com/american-flags/indoor-american-flags.html" 3531 title="Indoor American Flags" 3532 class="level-1 text-[16px] font-bold leading-[19px] uppercase mb-[6px] block anchor-color"> 3533 Indoor American Flags </a> 3534 3535 <ul class="z-10 w-full"> 3536 <li class="level-2 mb-2"> 3537 <a href="https://www.americanflags.com/american-flags/indoor-american-flags/indoor-american-flags.html" 3538 title="Nylon Indoor American Flags" 3539 class="level-2 pl-[15px] block text-[14px] relative before:absolute before:h-[5px] before:w-[5px] before:bg-red-900 before:top-[8px] before:left-0"> 3540 Nylon Indoor American Flags </a> 3541 </li> 3542 <li class="level-2 mb-2"> 3543 <a href="https://www.americanflags.com/american-flags/indoor-american-flags/indoor-american-flag-sets.html" 3544 title="American Indoor Flag Sets" 3545 class="level-2 pl-[15px] block text-[14px] relative before:absolute before:h-[5px] before:w-[5px] before:bg-red-900 before:top-[8px] before:left-0"> 3546 American Indoor Flag Sets </a> 3547 </li> 3548 <li class="level-2 mb-2"> 3549 <a href="https://www.americanflags.com/american-flags/indoor-american-flags/school-and-classroom-flags.html" 3550 title="Desk & Classroom US Flags & Holders" 3551 class="level-2 pl-[15px] block text-[14px] relative before:absolute before:h-[5px] before:w-[5px] before:bg-red-900 before:top-[8px] before:left-0"> 3552 Desk & Classroom US Flags & Holders </a> 3553 </li> 3554 </ul> 3555 3556 </li> 3557 <li class="level-1 " style=""> 3558 3559 <a href="https://www.americanflags.com/american-flags/america-250-merchandise.html" 3560 title="America's 250th Anniversary Merchandise" 3561 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 3562 America's 250th Anniversary Merchandise </a> 3563 3564 <a href="https://www.americanflags.com/american-flags/stick-flags-grave-flags-parade-flags.html" 3565 title="US Stick Flags 
3565- Cemetery & Parade Flags" 3566 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 3567 US Stick Flags - Cemetery & Parade Flags </a> 3568 3569 <a href="https://www.americanflags.com/american-flags/car-flags.html" 3570 title="US Car Flags" 3571 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 3572 US Car Flags </a> 3573 3574 <a href="https://www.americanflags.com/american-flags/casket-funeral-flags.html" 3575 title="Casket, Funeral and Presentation Flags" 3576 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 3577 Casket, Funeral and Presentation Flags </a> 3578 3579 <a href="https://www.americanflags.com/american-flags/govt-spec-us-flags.html" 3580 title="Govt. Spec. US Flags" 3581 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 3582 Govt. Spec. US Flags </a> 3583 </li> 3584 </ul> 3585 </div> 3586 </div> 3587 </div> 3588 </div> 3589 <div id="hoverEffect" class="level-0 flex items-center p-1 mx-1 transition transition-colors duration-500 group 2lg:px-2 2lg:py-3 xl:mx-2 bg-on-hover"[ 3590 @mouseover.stop="hoverTopPosition = $event.currentTarget.offsetTop + $event.currentTarget.getBoundingClientRect().height" 3591 > 3592 <a href="https://www.americanflags.com/military-flags.html" 3593 @focus="hoverTopPosition = $event.currentTarget.parentNode.offsetTop + $event.currentTarget.parentNode.getBoundingClientRect().height" 3594 title="Military Flags" 3595 class="level-0 block text-[16px] text-white font-bold uppercase whitespace-nowrap group"> 3596 <span>Military Flags</span> 3597 <span class="inline items-center"> 3598 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-5 h-5 inline group-hover:rotate-180 transition transform duration-500" width="25" height="25" role="img"> 3599 <path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"/> 3600<title>chevron-down</title></svg> 3601 </span> 3602 </a> 3603 <div class="absolute left-0 top-full z-10 border-t-[5px] border-gray-100 -mt-3 w-full bg-white/[.95] opacity-0 transition-opacity ease-out pointer-events-none group-hover:opacity-100 focus-within:opacity-100 group-hover:pointer-events-auto shadow-lg menu-hover-data" 3604 :style="`margin-top: 0; top:100%;`" 3605 > 3606 <div class="flex justify-between relative bg-white"> 3607 <div class="mx-auto max-w-[1700px] w-full p-4"> 3608 <ul class="flex flex-wrap gap-[30px] justify-center"> 3609 <li class="level-1 level--0 flex-1 grid-cols-4 gap-y-2 gap-x-8 px-4 columns-4 lvl-0-menu" style="column-count:4"> 3610 <div class="breakP"> 3611 <a href="https://www.americanflags.com/military-flags/armed-forces-bundles.html" 3612 title="Armed Forces Bundles"
3613 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 3614 Armed Forces Bundles </a> 3615 3616 <a href="https://www.americanflags.com/military-flags/air-force-flags.html" 3617 title="Air Force Flags" 3618 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 3619 Air Force Flags </a> 3620 3621 <a href="https://www.americanflags.com/military-flags/army-flags.html" 3622 title="Army Flags" 3623 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 3624 Army Flags </a> 3625 3626 <a href="https://www.americanflags.com/military-flags/navy-flags.html" 3627 title="Navy Flags" 3628 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 3629 Navy Flags </a> 3630 3631 <a href="https://www.americanflags.com/military-flags/us-marine-corps-flags.html" 3632 title="U.S. Marine Corps Flags" 3633 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 3634 U.S. Marine Corps Flags </a> 3635 </div> <div class="breakP"> 3636 <a href="https://www.americanflags.com/military-flags/coast-guard-flags.html" 3637 title="Coast Guard Flags" 3638 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 3639 Coast Guard Flags </a> 3640 3641 <a href="https://www.americanflags.com/military-flags/us-space-force-flags.html" 3642 title="US Space Force Flags" 3643 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 3644 US Space Force Flags </a> 3645 3646 <a href="https://www.americanflags.com/military-flags/merchant-marine-flags.html" 3647 title="Merchant Marine Flags" 3648 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 3649 Merchant Marine Flags </a> 3650 3651 <a href="https://www.americanflags.com/military-flags/army-national-guard-flags.html" 3652 title="Army 
3652National Guard Flags" 3653 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 3654 Army National Guard Flags </a> 3655 3656 <a href="https://www.americanflags.com/military-flags/pow-mia-flags.html" 3657 title="POW-MIA Flags" 3658 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 3659 POW-MIA Flags </a> 3660 </div> <div class="breakP"> 3661 <a href="https://www.americanflags.com/military-flags/government-specified-flags-accessories.html" 3662 title="Government Specified Flags" 3663 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 3664 Government Specified Flags </a> 3665 3666 <a href="https://www.americanflags.com/military-flags/veterans-commemorative-and-retirement-flags.html" 3667 title="Veterans Commemorative and Retirement Flags" 3668 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 3669 Veterans Commemorative and Retirement Flags </a> 3670 3671 <a href="https://www.americanflags.com/military-flags/service-banners.html" 3672 title="Service Star Banners and Flags" 3673 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 3674 Service Star Banners and Flags </a> 3675 3676 <a href="https://www.americanflags.com/military-flags/support-our-troops-flags.html" 3677 title="Support Our Troops Flags" 3678 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 3679 Support Our Troops Flags </a> 3680 </li> 3681 </ul> 3682 </div> 3683 </div> 3684 </div> 3685 </div> 3686 <div id="hoverEffect" class="level-0 flex items-center p-1 mx-1 transition transition-colors duration-500 group 2lg:px-2 2lg:py-3 xl:mx-2 bg-on-hover"[ 3687 @mouseover.stop="hoverTopPosition = $event.currentTarget.offsetTop + $event.currentTarget.getBoundingClientRect().height" 3688 > 3689 <a href="https://www.americanflags.com/city-state-flags.html" 3690 @focus="hoverTopPosition = $event.currentTarget.parentNode.offsetTop + $event.currentTarget.parentNode.getBoundingClientRect().height" 3691 title="City, State & Territory Flags" 3692 class="level-0 block text-[16px] text-white font-bold uppercase whitespace-nowrap group">
3693 <span>City, State & Territory Flags</span> 3694 <span class="inline items-center"> 3695 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-5 h-5 inline group-hover:rotate-180 transition transform duration-500" width="25" height="25" role="img"> 3696 <path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"/> 3697<title>chevron-down</title></svg> 3698 </span> 3699 </a> 3700 <div class="absolute left-0 top-full z-10 border-t-[5px] border-gray-100 -mt-3 w-full bg-white/[.95] opacity-0 transition-opacity ease-out pointer-events-none group-hover:opacity-100 focus-within:opacity-100 group-hover:pointer-events-auto shadow-lg menu-hover-data" 3701 :style="`margin-top: 0; top:100%;`" 3702 > 3703 <div class="flex justify-between relative bg-white"> 3704 <div class="mx-auto max-w-[1700px] w-full p-4"> 3705 <ul class="flex flex-wrap gap-[30px] justify-center"> 3706 <li class="level-1 level--0 flex-1 grid-cols-4 gap-y-2 gap-x-8 px-4 columns-4 lvl-0-menu" style="column-count:4"> 3707 <div class="breakP"> 3708 <a href="https://www.americanflags.com/city-state-flags/alabama-state-flags.html" 3709 title="Alabama State Flags" 3710 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 3711 Alabama State Flags </a> 3712 3713 <a href="https://www.americanflags.com/city-state-flags/alaska-state-flags.html" 3714 title="Alaska State Flags" 3715 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 3716 Alaska State Flags </a> 3717 3718 <a href="https://www.americanflags.com/city-state-flags/arizona-state-flags.html" 3719 title="Arizona State Flags" 3720 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 3721 Arizona State Flags </a> 3722 3723 <a href="https://www.americanflags.com/city-state-flags/arkansas-state-flags.html" 3724 title="Arkansas State Flags" 3725 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 3726 Arkansas State Flags </a> 3727 3728 <a href="https://www.americanflags.com/city-state-flags/calfornia-state-flags.html" 3729 title="California State Flags" 3730 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 3731 California State Flags </a> 3732 </div> <div class="breakP"> 3733 <a href="https://www.americanflags.com/city-state-flags/colorado-state-flags.html" 3734 title="Colorado State Flags" 3735 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 3736 Colorado State Flags </a> 3737 3738 <a href="https://www.americanflags.com/city-state-flags/connecticut-state-flags.html" 3739 title="Connecticut State Flags" 3740 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 3741 Connecticut State Flags </a> 3742 3743 <a href="https://www.americanflags.com/city-state-flags/delaware-state-flags.html" 3744 title="Delaware State Flags" 3745 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 3746 Delaware State Flags </a> 3747 3748 <a href="https://www.americanflags.com/city-state-flags/district-of-columbia-flags.html" 3749 title="Washington D.C. Flags " 3750 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 3751 Washington D.C. Flags </a> 3752 3753 <a href="https://www.americanflags.com/city-state-flags/florida-state-flags.html" 3754 title="Florida State Flags" 3755 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 3756 Florida State Flags </a> 3757 </div> <div class="breakP"> 3758 <a href="https://www.americanflags.com/city-state-flags/georgia-state-flags.html" 3759 title="Georgia State Flags" 3760 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 3761 Georgia State Flags </a> 3762 3763 <a href="https://www.americanflags.com/city-state-flags/guamflags.html" 3764 title="Guam Flags" 3765 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 3766 Guam Flags </a> 3767 3768 <a href="https://www.americanflags.com/city-state-flags/hawaii-state-flags.html" 3769 title="Hawaii State F
3769lags" 3770 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 3771 Hawaii State Flags </a> 3772 3773 <a href="https://www.americanflags.com/city-state-flags/idaho-state-flags.html" 3774 title="Idaho State Flags" 3775 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 3776 Idaho State Flags </a> 3777 3778 <a href="https://www.americanflags.com/city-state-flags/illinois-state-flags.html" 3779 title="Illinois State Flags" 3780 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 3781 Illinois State Flags </a> 3782 </div> <div class="breakP"> 3783 <a href="https://www.americanflags.com/city-state-flags/indiana-state-flags.html" 3784 title="Indiana State Flags" 3785 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 3786 Indiana State Flags </a> 3787 3788 <a href="https://www.americanflags.com/city-state-flags/iowa-state-flags.html" 3789 title="Iowa State Flags" 3790 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 3791 Iowa State Flags </a> 3792 3793 <a href="https://www.americanflags.com/city-state-flags/kansas-state-flags.html" 3794 title="Kansas State Flags" 3795 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 3796 Kansas State Flags </a> 3797 3798 <a href="https://www.americanflags.com/city-state-flags/kentucky-state-flags.html" 3799 title="Kentucky State Flags" 3800 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 3801 Kentucky State Flags </a> 3802 3803 <a href="https://www.americanflags.com/city-state-flags/louisiana-state-flags.html" 3804 title="Louisiana State Flags" 3805 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 3806 Louisiana State Flags </a> 3807 </div> <div class="breakP"> 3808 <a href="https://www.americanflags.com/city-state-flags/maine-state-flags.html" 3809 title="Maine State Flags" 3810 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 3811 Maine State Flags </a> 3812 3813 <a href="https://www.americanflags.com/city-state-flags/maryland-state-flags.html" 3814 title="Maryland State Flags" 3815 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 3816 Maryland State Flags </a> 3817 3818 <a href="https://www.americanflags.com/city-state-flags/massachusetts-state-flags.html" 3819 title="Massachusetts State Flags" 3820 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 3821 Massachusetts State Flags </a> 3822 3823 <a href="https://www.americanflags.com/city-state-flags/michigan-state-flags.html" 3824 title="Michigan State Flags" 3825 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 3826 Michigan State Flags </a> 3827 3828 <a href="https://www.americanflags.com/city-state-flags/minnesota-state-flags.html" 3829 title="Minnesota State Flags" 3830 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 3831 Minnesota State Flags </a> 3832 </div> <div class="breakP"> 3833 <a href="https://www.americanflags.com/city-state-flags/mississippi-state-flags.html" 3834 title="Mississippi State Flags" 3835 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 3836 Mississippi State Flags </a> 3837 3838 <a href="https://www.americanflags.com/city-state-flags/missouri-state-flags.html" 3839 title="Missouri State Flags" 3840 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 3841 Missouri State Flags </a> 3842 3843 <a href="https://www.americanflags.com/city-state-flags/montana-state-flags.html" 3844 title="Montana State Flags" 3845 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 3846 Montana State Flags </a> 3847 3848 <a href="https://www.americanflags.com/city-state-flags/nebraska-state-flags.html" 3849 title="Nebraska State Flags" 3850 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 3851 Nebraska State Flags </a> 3852 3853 <a href="https://www.americanflags.com/city-state-flags/nevada-state-flags.html" 3854 title="Nevada State Flags" 3855 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 3856 Nevada State Flags </a> 3857 </div> <div class="breakP"> 3858 <a href="https://www.americanflags.com/city-state-flags/new-hampshire-state-flags.html" 3859 title="New Hampshire State Flags" 3860 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 3861 New Hampshire State Flags </a> 3862 3863 <a href="https://www.americanflags.com/city-state-flags/new-jersey-state-flags.html" 3864 title="New Jersey State Flags" 3865 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 3866 New Jersey State Flags </a> 3867 3868 <a href="https://www.americanflags.com/city-state-flags/new-mexico-state-flags.html" 3869 title="New Mexico State Flags" 3870 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 3871 New Mexico State Flags </a> 3872 3873 <a href="https://www.americanflags.com/city-state-flags/new-yor
3873k-state-flags.html" 3874 title="New York State Flags" 3875 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 3876 New York State Flags </a> 3877 3878 <a href="https://www.americanflags.com/city-state-flags/north-carolina-state-flags.html" 3879 title="North Carolina State Flags" 3880 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 3881 North Carolina State Flags </a> 3882 </div> <div class="breakP"> 3883 <a href="https://www.americanflags.com/city-state-flags/north-dakota-state-flags.html" 3884 title="North Dakota State Flags" 3885 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 3886 North Dakota State Flags </a> 3887 3888 <a href="https://www.americanflags.com/city-state-flags/ohio-state-flags.html" 3889 title="Ohio State Flags" 3890 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 3891 Ohio State Flags </a> 3892 3893 <a href="https://www.americanflags.com/city-state-flags/oklahoma-state-flags.html" 3894 title="Oklahoma State Flags" 3895 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 3896 Oklahoma State Flags </a> 3897 3898 <a href="https://www.americanflags.com/city-state-flags/oregon-state-flags.html" 3899 title="Oregon State Flags" 3900 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 3901 Oregon State Flags </a> 3902 3903 <a href="https://www.americanflags.com/city-state-flags/pennsylvania-state-flags.html" 3904 title="Pennsylvania State Flags" 3905 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 3906 Pennsylvania State Flags </a> 3907 </div> <div class="breakP"> 3908 <a href="https://www.americanflags.com/city-state-flags/puerto-rico-flags.html" 3909 title="Puerto Rico Flags" 3910 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 3911 Puerto Rico Flags </a> 3912 3913 <a href="https://www.americanflags.com/city-state-flags/rhode-island-state-flags.html" 3914 title="Rhode Island State Flags" 3915 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 3916 Rhode Island
3916State Flags </a> 3917 3918 <a href="https://www.americanflags.com/city-state-flags/south-carolina-state-flags.html" 3919 title="South Carolina State Flags" 3920 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 3921 South Carolina State Flags </a> 3922 3923 <a href="https://www.americanflags.com/city-state-flags/south-dakota-state-flags.html" 3924 title="South Dakota State Flags" 3925 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 3926 South Dakota State Flags </a> 3927 3928 <a href="https://www.americanflags.com/city-state-flags/tennessee-state-flags.html" 3929 title="Tennessee State Flags" 3930 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 3931 Tennessee State Flags </a> 3932 </div> <div class="breakP"> 3933 <a href="https://www.americanflags.com/city-state-flags/texas-state-flags.html" 3934 title="Texas State Flags" 3935 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 3936 Texas State Flags </a> 3937 3938 <a href="https://www.americanflags.com/city-state-flags/utah-state-flags.html" 3939 title="Utah State Flags" 3940 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 3941 Utah State Flags </a> 3942 3943 <a href="https://www.americanflags.com/city-state-flags/vermont-state-flags.html" 3944 title="Vermont State Flags" 3945 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 3946 Vermont State Flags </a> 3947 3948 <a href="https://www.americanflags.com/city-state-flags/virginia-state-flags.html" 3949 title="Virginia State Flags" 3950 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 3951 Virginia State Flags </a> 3952 3953 <a href="https://www.americanflags.com/city-state-flags/washington-state-flags.html" 3954 title="Washington State Flags" 3955 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 3956 Washington State Flags </a> 3957 </div> <div class="breakP"> 3958 <a href="https://www.americanflags.com/city-state-flags/west-virginia-state-flags.html" 3959 title="West Virginia State Flags" 3960 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 3961 West Virginia State Flags </a> 3962 3963 <a href="https://www.americanflags.com/city-state-flags/wisconsin-state-flags.html" 3964 title="Wisconsin State Flags" 3965 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 3966 Wisconsin State Flags </a> 3967 3968 <a href="https://www.americanflags.com/city-state-flags/wyoming-state-flags.html" 3969 title="Wyoming State Flags" 3970 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 3971 Wyoming State Flags </a> 3972 3973 <a href="https://www.americanflags.com/city-state-flags/full-set-of-50-state-flags.html" 3974 title="Complete Set of 50 State Flags" 3975 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 3976 Complete Set of 50 State Flags </a> 3977 3978 <a href="https://www.americanflags.com/city-state-flags/us-virgin-islands-flags.html" 3979 title="US Virgin Islands Flags" 3980 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 3981 US Virgin Islands Flags </a> 3982 </div> <div class="breakP"> 3983 <a href="https://www.americanflags.com/city-state-flags/american-samoa-flags.html" 3984 title="American Samoa Flags" 3985 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 3986 American Samoa Flags </a> 3987 </li> 3988 </ul> 3989 </div> 3990 </div> 3991 </div> 3992 </div> 3993 <div id="hoverEffect" class="level-0 flex items-center p-1 mx-1 transition transition-colors duration-500 group 2lg:px-2 2lg:py-3 xl:mx-2 bg-on-hover"[ 3994 @mouseover.stop="hoverTopPosition = $event.currentTarget.offsetTop + $event.currentTarget.getBoundingClientRect().height" 3995 > 3996 <a href="https://www.americanflags.com/flags.html" 3997 @focus="hoverTopPosition = $event.currentTarget.parentNode.offsetTop + $event.currentTarget.parentNode.getBoundingClientRect().height" 3998 title="Other Flags" 3999 class="level-0 block text-[16px] text-white font-bold uppercase whitespace-nowrap group">
4000 <span>Other Flags</span> 4001 <span class="inline items-center"> 4002 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-5 h-5 inline group-hover:rotate-180 transition transform duration-500" width="25" height="25" role="img"> 4003 <path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"/> 4004<title>chevron-down</title></svg> 4005 </span> 4006 </a> 4007 <div class="absolute left-0 top-full z-10 border-t-[5px] border-gray-100 -mt-3 w-full bg-white/[.95] opacity-0 transition-opacity ease-out pointer-events-none group-hover:opacity-100 focus-within:opacity-100 group-hover:pointer-events-auto shadow-lg menu-hover-data" 4008 :style="`margin-top: 0; top:100%;`" 4009 > 4010 <div class="flex justify-between relative bg-white"> 4011 <div class="mx-auto max-w-[1700px] w-full p-4"> 4012 <ul class="flex flex-wrap gap-[30px] justify-center"> 4013 <li class="level-1 custom-calc"> 4014 <a href="https://www.americanflags.com/flags/political-flags.html" 4015 title="Political Flags" 4016 class="level-1 text-[16px] font-bold leading-[19px] uppercase mb-[6px] block anchor-color"> 4017 Political Flags </a> 4018 4019 <ul class="z-10 w-full"> 4020 <li class="level-2 mb-2"> 4021 <a href="https://www.americanflags.com/flags/political-flags/donald-trump.html" 4022 title="Donald Trump Flags" 4023 class="level-2 pl-[15px] block text-[14px] relative before:absolute before:h-[5px] before:w-[5px] before:bg-red-900 before:top-[8px] before:left-0"> 4024 Donald Trump Flags </a> 4025 </li> 4026 <li class="level-2 mb-2"> 4027 <a href="https://www.americanflags.com/flags/political-flags/republican-flags.html" 4028 title="Republican Flags" 4029 class="level-2 pl-[15px] block text-[14px] relative before:absolute before:h-[5px] before:w-[5px] before:bg-red-900 before:top-[8px] before:left-0"> 4030 Republican Flags </a> 4031 </li> 4032 <li class="level-2 mb-2"> 4033 <a href="https://www.americanflags.com/flags/political-flags/kamala-harris.html" 4034 title="Kamala Harris Flags" 4035 class="level-2 pl-[15px] block text-[14px] relative before:absolute before:h-[5px] before:w-[5px] before:bg-red-900 before:top-[8px] before:left-0"> 4036 Kamala Harris Flags </a> 4037 </li> 4038 <li class="level-2 mb-2"> 4039 <a href="https://www.americanflags.com/flags/political-flags/democratic-flags.html" 4040 title="Democrat Flags" 4041 class="level-2 pl-[15px] block text-[14px] relative before:absolute before:h-[5px] before:w-[5px] before:bg-red-900 before:top-[8px] before:left-0"> 4042 Democrat Flags </a> 4043 </li> 4044 <li class="level-2 mb-2"> 4045 <a href="https://www.americanflags.com/flags/political-flags/protest-flags.html" 4046 title="Protest Flags" 4047 class="level-2 pl-[15px] block text-[14px] relative before:absolute before:h-[5px] before:w-[5px] before:bg-red-900 before:top-[8px] before:left-0"> 4048 Protest Flags </a> 4049 </li> 4050 </ul> 4051 4052 </li> 4053 <li class="level-1 custom-calc"> 4054 <a href="https://www.americanflags.com/flags/historic-flags.html" 4055 title="Historic Flags" 4056 class="level-1 text-[16px] font-bold leading-[19px] uppercase mb-[6px] block anchor-color"> 4057 Historic Flags </a> 4058 4059 <ul class="z-10 w-full"> 4060 <li class="level-2 mb-2"> 4061 <a href="https://www.americanflags.com/flags/historic-flags/betsy-ross-flags-and-banners.html" 4062 title="Betsy Ross Flags and Banners" 4063 class="level-2 pl-[15px] block text-[14px] relative before:absolute before:h-[5px] before:w-[5px] before:bg-red-900 before:top-[8px] before:left-0"> 4064 Betsy Ross Flags and Banners </a> 4065 </li> 4066 <li class="level-2 mb-2"> 4067 <a href="https://www.americanflags.com/flags/historic-flags/gadsden-dont-tread-on-me-flags.html" 4068 title="Gadsden Don't Tread On Me Flags" 4069 class="level-2 pl-[15px] block text-[14px] relative before:absolute before:h-[5px] before:w-[5px] before:bg-red-900 before:top-[8px] before:left-0"> 4070 Gadsden Don't Tread On Me Flags </a> 4071 </li> 4072 <li class="level-2 mb-2"> 4073 <a href="https://www.americanflags.com/flags/historic-flags/revolutionary-war-flags.html" 4074 title="Revolutionary War Flags" 4075 class="level-2 pl-[15px] block text-[14px] relative before:absolute before:h-[5px] before:w-[5px] before:bg-red-900 before:top-[8px] before:left-0"> 4076 Revolutionary War Flags </a> 4077 </li> 4078 <li class="level-2 mb-2"> 4079 <a href="https://www.americanflags.com/flags/historic-flags/civil-war-flags.html" 4080 title="Civil War Flags" 4081 class="level-2 pl-[15px] block text-[14px] relative before:absolute before:h-[5px] before:w-[5px] before:bg-red-900 before:top-[8px] before:left-0"> 4082 Civil War Flags </a> 4083 </li> 4084 <li class="level-2 mb-2"> 4085 <a href="https://www.americanflags.com/flags/historic-flags/evolution-of-old-glory-13-star-49-star-flags.html" 4086 title="Evolution of Old Glory 
4086- 13 Star - 49 Star Flags" 4087 class="level-2 pl-[15px] block text-[14px] relative before:absolute before:h-[5px] before:w-[5px] before:bg-red-900 before:top-[8px] before:left-0"> 4088 Evolution of Old Glory - 13 Star - 49 Star Flags </a> 4089 </li> 4090 <li class="level-2 mb-2"> 4091 <a href="https://www.americanflags.com/flags/historic-flags.html" 4092 class="level-2 block text-[14px] text-red-900 font-bold underline"> 4093 Shop All </a> 4094 </li> 4095 </ul> 4096 4097 </li> 4098 <li class="level-1 custom-calc"> 4099 <a href="https://www.americanflags.com/flags/world-flags.html" 4100 title="World Flags" 4101 class="level-1 text-[16px] font-bold leading-[19px] uppercase mb-[6px] block anchor-color"> 4102 World Flags </a> 4103 4104 <ul class="z-10 w-full"> 4105 <li class="level-2 mb-2"> 4106 <a href="https://www.americanflags.com/flags/world-flags/canada-flags.html" 4107 title="Canada Flags" 4108 class="level-2 pl-[15px] block text-[14px] relative before:absolute before:h-[5px] before:w-[5px] before:bg-red-900 before:top-[8px] before:left-0"> 4109 Canada Flags </a> 4110 </li> 4111 <li class="level-2 mb-2"> 4112 <a href="https://www.americanflags.com/flags/world-flags/germany-flags.html" 4113 title="Germany Flags" 4114 class="level-2 pl-[15px] block text-[14px] relative before:absolute before:h-[5px] before:w-[5px] before:bg-red-900 before:top-[8px] before:left-0"> 4115 Germany Flags </a> 4116 </li> 4117 <li class="level-2 mb-2"> 4118 <a href="https://www.americanflags.com/flags/world-flags/ireland-flags.html" 4119 title="Ireland Flags" 4120 class="level-2 pl-[15px] block text-[14px] relative before:absolute before:h-[5px] before:w-[5px] before:bg-red-900 before:top-[8px] before:left-0"> 4121 Ireland Flags </a> 4122 </li> 4123 <li class="level-2 mb-2"> 4124 <a href="https://www.americanflags.com/flags/world-flags/mexico-flags.html" 4125 title="Mexico Flags" 4126 class="level-2 pl-[15px] block text-[14px] relative before:absolute before:h-[5px] before:w-[5px] before:bg-red-900 before:top-[8px] before:left-0"> 4127 Mexico Flags </a> 4128 </li> 4129 <li class="level-2 mb-2"> 4130 <a href="https://www.americanflags.com/flags/world-flags/ukraine-flags.html" 4131 title="Ukraine Flags" 4132 class="level-2 pl-[15px] block text-[14px] relative before:absolute before:h-[5px] before:w-[5px] before:bg-red-900 before:top-[8px] before:left-0"> 4133 Ukraine Flags </a> 4134 </li> 4135 <li class="level-2 mb-2"> 4136 <a href="https://www.americanflags.com/flags/world-flags.html" 4137 class="level-2 block text-[14px] text-red-900 font-bold underline"> 4138 Shop All </a> 4139 </li> 4140 </ul> 4141 4142 </li> 4143 <li class="level-1 custom-calc"> 4144 <a href="https://www.americanflags.com/flags/religious-flags.html" 4145 title="Religious Flags" 4146 class="level-1 text-[16px] font-bold leading-[19px] uppercase mb-[6px] block anchor-color"> 4147 Religious Flags </a> 4148 4149 <ul class="z-10 w-full"> 4150 <li class="level-2 mb-2"> 4151 <a href="https://www.americanflags.com/flags/religious-flags/christian-flags.html" 4152 title="Christian Flags" 4153 class="level-2 pl-[15px] block text-[14px] relative before:absolute before:h-[5px] before:w-[5px] before:bg-red-900 before:top-[8px] before:left-0"> 4154 Christian Flags </a> 4155 </li> 4156 <li class="level-2 mb-2"> 4157 <a href="https://www.americanflags.com/flags/religious-flags/catholic-flags.html" 4158 title="Catholic Flags" 4159 class="level-2 pl-[15px] block text-[14px] relative before:absolute before:h-[5px] before:w-[5px] before:bg-red-900 before:top-[8px] before:left-0"> 4160 Catholic Flags </a> 4161 </li> 4162 <li class="level-2 mb-2"> 4163 <a href="https://www.americanflags.com/flags/religious-flags/israel-flags.html" 4164 title="Israel - Jewish Flags" 4165 class="level-2 pl-[15px] block text-[14px] relative before:absolute before:h-[5px] before:w-[5px] before:bg-red-900 before:top-[8px] before:left-0"> 4166 Israel - Jewish Flags </a> 4167 </li> 4168 <li class="level-2 mb-2"> 4169 <a href="https://www.americanflags.com/flags/religious-flags/episcopal-flags.html" 4170 title="Episcopal Flags" 4171 class="level-2 pl-[15px] block text-[14px] relative before:absolute before:h-[5px] before:w-[5px] before:bg-red-900 before:top-[8px] before:left-0"> 4172 Episcopal Flags </a> 4173 </li> 4174 <li class="level-2 mb-2"> 4175 <a href="https://www.americanflags.com/flags/religious-flags/united-methodist-flags.html" 4176 title="United Methodist Flags" 4177 class="level-2 pl-[15px] block text-[14px] relative before:absolute before:h-[5px] before:w-[5px] before:bg-red-900 before:top-[8px] before:left-0"> 4178 United Methodist Flags </a> 4179 </li> 4180 <li class="level-2 mb-2"> 4181 <a href="https://www.americanflags.com/flags/religious-flags.html" 4182 class="level-2 block text-[14px] text-red-900 font-bold underline"> 4183 Shop All </a> 4184 </li> 4185 </ul> 4186 4187 </li> 4188 <li class="level-1 custom-calc"> 4189 <a href="https://www.americanflags.com/flags/novelty-celebration-flags.html" 4190 title="Novelty, Celebration and Awareness Flags" 4191 class="level-1 text-[16px] font-bold leading-[19px] uppercase mb-[6px] block anchor-color"> 4192 Novelty, Celebration and Awareness Flags </a> 4193 4194 <ul class="z-10 w-full"> 4195 <li class="level-2 mb-2"> 4196 <a href="https://www.americanflags.com/flags/novelty-celebration-flags/rainbow-pride-flags.html" 4197 title="Rainbow Pride Flags" 4198 class="level-2 pl-[15px] block text-[14px] relative before:absolute before:h-[5px] before:w-[5px] before:bg-red-900 before:top-[8px] before:left-0"> 4199 Rainbow Pride Flags </a> 4200 </li> 4201 <li class="level-2 mb-2"> 4202 <a href="https://www.americanflags.com/flags/novelty-celebration-flags/breast-cancer-awareness-flags.html" 4203 title="Breast Cancer Awareness Flags" 4204 class="level-2 pl-[15px] block text-[14px] relative before:absolute before:h-[5px] before:w-[5px] before:bg-red-900 before:top-[8px] before:left-0"> 4205 Breast Cancer Awareness Flags </a> 4206 </li> 4207 <li class="level-2 mb-2"> 4208 <a href="https://www.americanflags.com/flags/novelty-celebration-flags/autism-awareness-flags.html" 4209
4209 title="Autism Awareness Flags" 4210 class="level-2 pl-[15px] block text-[14px] relative before:absolute before:h-[5px] before:w-[5px] before:bg-red-900 before:top-[8px] before:left-0"> 4211 Autism Awareness Flags </a> 4212 </li> 4213 <li class="level-2 mb-2"> 4214 <a href="https://www.americanflags.com/flags/novelty-celebration-flags/jolly-roger-flags.html" 4215 title="Jolly Roger Flags" 4216 class="level-2 pl-[15px] block text-[14px] relative before:absolute before:h-[5px] before:w-[5px] before:bg-red-900 before:top-[8px] before:left-0"> 4217 Jolly Roger Flags </a> 4218 </li> 4219 <li class="level-2 mb-2"> 4220 <a href="https://www.americanflags.com/flags/novelty-celebration-flags/celebration-flags-banners.html" 4221 title="celebration flags & Banners" 4222 class="level-2 pl-[15px] block text-[14px] relative before:absolute before:h-[5px] before:w-[5px] before:bg-red-900 before:top-[8px] before:left-0"> 4223 celebration flags & Banners </a> 4224 </li> 4225 <li class="level-2 mb-2"> 4226 <a href="https://www.americanflags.com/flags/novelty-celebration-flags.html" 4227 class="level-2 block text-[14px] text-red-900 font-bold underline"> 4228 Shop All </a> 4229 </li> 4230 </ul> 4231 4232 </li> 4233 <li class="level-1 custom-calc"> 4234 <a href="https://www.americanflags.com/flags/holiday-seasonal-flags-banners.html" 4235 title="Holiday and Seasonal Flags" 4236 class="level-1 text-[16px] font-bold leading-[19px] uppercase mb-[6px] block anchor-color"> 4237 Holiday and Seasonal Flags </a> 4238 4239 <ul class="z-10 w-full"> 4240 <li class="level-2 mb-2"> 4241 <a href="https://www.americanflags.com/flags/holiday-seasonal-flags-banners/mardi-gras-flags-banners.html" 4242 title="Mardi Gras Banners and Flags" 4243 class="level-2 pl-[15px] block text-[14px] relative before:absolute before:h-[5px] before:w-[5px] before:bg-red-900 before:top-[8px] before:left-0"> 4244 Mardi Gras Banners and Flags </a> 4245 </li> 4246 <li class="level-2 mb-2"> 4247 <a href="https://www.americanflags.com/flags/holiday-seasonal-flags-banners/spring-flags.html" 4248 title="Spring Flags and Banners" 4249 class="level-2 pl-[15px] block text-[14px] relative before:absolute before:h-[5px] before:w-[5px] before:bg-red-900 before:top-[8px] before:left-0"> 4250 Spring Flags and Banners </a> 4251 </li> 4252 <li class="level-2 mb-2"> 4253 <a href="https://www.americanflags.com/flags/holiday-seasonal-flags-banners/st-patrick-s-day-flags-banners.html" 4254 title="St. Patrick'
4254s Day Flags & Banners" 4255 class="level-2 pl-[15px] block text-[14px] relative before:absolute before:h-[5px] before:w-[5px] before:bg-red-900 before:top-[8px] before:left-0"> 4256 St. Patrick's Day Flags & Banners </a> 4257 </li> 4258 <li class="level-2 mb-2"> 4259 <a href="https://www.americanflags.com/flags/holiday-seasonal-flags-banners/easter-flags-banners.html" 4260 title="Easter Flags and Banners" 4261 class="level-2 pl-[15px] block text-[14px] relative before:absolute before:h-[5px] before:w-[5px] before:bg-red-900 before:top-[8px] before:left-0"> 4262 Easter Flags and Banners </a> 4263 </li> 4264 <li class="level-2 mb-2"> 4265 <a href="https://www.americanflags.com/flags/holiday-seasonal-flags-banners/summer-flags-and-banners.html" 4266 title="Summer Flags and Banners" 4267 class="level-2 pl-[15px] block text-[14px] relative before:absolute before:h-[5px] before:w-[5px] before:bg-red-900 before:top-[8px] before:left-0"> 4268 Summer Flags and Banners </a> 4269 </li> 4270 <li class="level-2 mb-2"> 4271 <a href="https://www.americanflags.com/flags/holiday-seasonal-flags-banners.html" 4272 class="level-2 block text-[14px] text-red-900 font-bold underline"> 4273 Shop All </a> 4274 </li> 4275 </ul> 4276 4277 </li> 4278 <li class="level-1 custom-calc"> 4279 <a href="https://www.americanflags.com/flags/business-advertising-flags.html" 4280 title="Business and Advertising Flags" 4281 class="level-1 text-[16px] font-bold leading-[19px] uppercase mb-[6px] block anchor-color"> 4282 Business and Advertising Flags </a> 4283 4284 <ul class="z-10 w-full"> 4285 <li class="level-2 mb-2"> 4286 <a href="https://www.americanflags.com/flags/business-advertising-flags/solid-color-flags.html" 4287 title="Solid Color Flags & Pennants " 4288 class="level-2 pl-[15px] block text-[14px] relative before:absolute before:h-[5px] before:w-[5px] before:bg-red-900 before:top-[8px] before:left-0"> 4289 Solid Color Flags & Pennants </a> 4290 </li> 4291 <li class="level-2 mb-2"> 4292 <a href="https://www.americanflags.com/flags/business-advertising-flags/open-flags.html" 4293 title="Open Flags" 4294 class="level-2 pl-[15px] block text-[14px] relative before:absolute before:h-[5px] before:w-[5px] before:bg-red-900 before:top-[8px] before:left-0"> 4295 Open Flags </a> 4296 </li> 4297 <li class="level-2 mb-2"> 4298 <a href="https://www.americanflags.com/flags/business-advertising-flags/welcome-flags.html" 4299 title="Welcome Flags" 4300 class="level-2 pl-[15px] block text-[14px] relative before:absolute before:h-[5px] before:w-[5px] before:bg-red-900 before:top-[8px] before:left-0"> 4301 Welcome Flags </a> 4302 </li> 4303 <li class="level-2 mb-2"> 4304 <a href="https://www.americanflags.com/flags/business-advertising-flags/real-estate-flags.html" 4305 title="Real Estate Flags" 4306 class="level-2 pl-[15px] block text-[14px] relative before:absolute before:h-[5px] before:w-[5px] before:bg-red-900 before:top-[8px] before:left-0"> 4307 Real Estate Flags </a> 4308 </li> 4309 <li class="level-2 mb-2"> 4310 <a href="https://www.americanflags.com/flags/business-advertising-flags/retail-message-flags.html" 4311 title="Retail Message Flags & Banners" 4312 class="level-2 pl-[15px] block text-[14px] relative before:absolute before:h-[5px] before:w-[5px] before:bg-red-900 before:top-[8px] before:left-0"> 4313 Retail Message Flags & Banners </a> 4314 </li> 4315 </ul> 4316 4317 </li> 4318 <li class="level-1 " style=""> 4319 4320 <a href="https://www.americanflags.com/flags/nautical-flags.html" 4321 title="Nautical Flags" 4322 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 4323 Nautical Flags </a> 4324 4325 <a href="https://www.americanflags.com/flags/police-fire-thin-line-ems.html" 4326 title="Fire, Police and EMS flags" 4327 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 4328 Fire, Police and EMS flags </a> 4329 4330 <a href="https://www.americanflags.com/flags/911-honor-flags.html" 4331 title="Patriot Day 9/11 Flags" 4332 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 4333 Patriot Day 9/11 Flags </a> 4334 </li> 4335 </ul> 4336 </div> 4337 </div> 4338 </div> 4339 </div> 4340 <div id="hoverEffect" class="level-0 flex items-center p-1 mx-1 transition transition-colors duration-500 group 2lg:px-2 2lg:py-3 xl:mx-2 bg-on-hover"[ 4341 @mouseover.stop="hoverTopPosition = $event.currentTarget.offsetTop + $event.currentTarget.getBoundingClientRect().height" 4342 > 4343 <a href="https://www.americanflags.com/flagpoles.html" 4344 @focus="hoverTopPosition = $event.currentTarget.parentNode.offsetTop + $event.currentTarget.parentNode.getBoundingClientRect().height" 4345 title="Flagpoles" 4346 class="level-0 block text-[16px] text-white font-bold uppercase whitespace-nowrap group">
4347 <span>Flagpoles</span> 4348 <span class="inline items-center"> 4349 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-5 h-5 inline group-hover:rotate-180 transition transform duration-500" width="25" height="25" role="img"> 4350 <path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"/> 4351<title>chevron-down</title></svg> 4352 </span> 4353 </a> 4354 <div class="absolute left-0 top-full z-10 border-t-[5px] border-gray-100 -mt-3 w-full bg-white/[.95] opacity-0 transition-opacity ease-out pointer-events-none group-hover:opacity-100 focus-within:opacity-100 group-hover:pointer-events-auto shadow-lg menu-hover-data" 4355 :style="`margin-top: 0; top:100%;`" 4356 > 4357 <div class="flex justify-between relative bg-white"> 4358 <div class="mx-auto max-w-[1700px] w-full p-4"> 4359 <ul class="flex flex-wrap gap-[30px] justify-center"> 4360 <li class="level-1 custom-calc"> 4361 <a href="https://www.americanflags.com/flagpoles/outdoor-residential-flagpoles.html" 4362 title="Outdoor Residential Flagpoles" 4363 class="level-1 text-[16px] font-bold leading-[19px] uppercase mb-[6px] block anchor-color"> 4364 Outdoor Residential Flagpoles </a> 4365 4366 <ul class="z-10 w-full"> 4367 <li class="level-2 mb-2"> 4368 <a href="https://www.americanflags.com/flagpoles/outdoor-residential-flagpoles/residential-in-ground-flagpoles.html" 4369 title="Residential In-Ground Flagpoles" 4370 class="level-2 pl-[15px] block text-[14px] relative before:absolute before:h-[5px] before:w-[5px] before:bg-red-900 before:top-[8px] before:left-0"> 4371 Residential In-Ground Flagpoles </a> 4372 </li> 4373 <li class="level-2 mb-2"> 4374 <a href="https://www.americanflags.com/flagpoles/outdoor-residential-flagpoles/home.html" 4375 title="Porch, Deck and Wall Mount Flagpoles" 4376 class="level-2 pl-[15px] block text-[14px] relative before:absolute before:h-[5px] before:w-[5px] before:bg-red-900 before:top-[8px] before:left-0"> 4377 Porch, Deck and Wall Mount Flagpoles </a> 4378 </li> 4379 <li class="level-2 mb-2"> 4380 <a href="https://www.americanflags.com/flagpoles/outdoor-residential-flagpoles/garden-brackets-and-flagpoles.html" 4381 title="Garden Brackets and Flagpoles" 4382 class="level-2 pl-[15px] block text-[14px] relative before:absolute before:h-[5px] before:w-[5px] before:bg-red-900 before:top-[8px] before:left-0"> 4383 Garden Brackets and Flagpoles </a> 4384 </li> 4385 </ul> 4386 4387 </li> 4388 <li class="level-1 custom-calc"> 4389 <a href="https://www.americanflags.com/flagpoles/outdoor-commercial-flagpoles.html" 4390 title="Outdoor Commercial Flagpoles" 4391 class="level-1 text-[16px] font-bold leading-[19px] uppercase mb-[6px] block anchor-color"> 4392 Outdoor Commercial Flagpoles </a> 4393 4394 <ul class="z-10 w-full"> 4395 <li class="level-2 mb-2"> 4396 <a href="https://www.americanflags.com/flagpoles/outdoor-commercial-flagpoles/commercial-in-ground-flagpoles.html" 4397 title="Commercial In-Ground Flagpoles" 4398 class="level-2 pl-[15px] block text-[14px] relative before:absolute before:h-[5px] before:w-[5px] before:bg-red-900 before:top-[8px] before:left-0"> 4399 Commercial In-Ground Flagpoles </a> 4400 </li> 4401 <li class="level-2 mb-2"> 4402 <a href="https://www.americanflags.com/flagpoles/outdoor-commercial-flagpoles/commercial-wall-mounted-and-roof-flagpoles.html" 4403 title="Commercial Wall-Mounted and Roof Flagpoles" 4404 class="level-2 pl-[15px] block text-[14px] relative before:absolute before:h-[5px] before:w-[5px] before:bg-red-900 before:top-[8px] before:left-0"> 4405 Commercial Wall-Mounted and Roof Flagpoles </a> 4406 </li> 4407 </ul> 4408 4409 </li> 4410 <li class="level-1 custom-calc"> 4411 <a href="https://www.americanflags.com/flagpoles/outdoor-flagpole-components.html" 4412 title="Outdoor Flagpole Components" 4413 class="level-1 text-[16px] font-bold leading-[19px] uppercase mb-[6px] block anchor-color"> 4414 Outdoor Flagpole
4414Components </a> 4415 4416 <ul class="z-10 w-full"> 4417 <li class="level-2 mb-2"> 4418 <a href="https://www.americanflags.com/flagpoles/outdoor-flagpole-components/flag-brackets-stands-accessories.html" 4419 title="Flag Holders, Stands, Brackets and Accessories" 4420 class="level-2 pl-[15px] block text-[14px] relative before:absolute before:h-[5px] before:w-[5px] before:bg-red-900 before:top-[8px] before:left-0"> 4421 Flag Holders, Stands, Brackets and Accessories </a> 4422 </li> 4423 <li class="level-2 mb-2"> 4424 <a href="https://www.americanflags.com/flagpoles/outdoor-flagpole-components/flag-clips-fasteners.html" 4425 title="Flag Clips & Fasteners" 4426 class="level-2 pl-[15px] block text-[14px] relative before:absolute before:h-[5px] before:w-[5px] before:bg-red-900 before:top-[8px] before:left-0"> 4427 Flag Clips & Fasteners </a> 4428 </li> 4429 <li class="level-2 mb-2"> 4430 <a href="https://www.americanflags.com/flagpoles/outdoor-flagpole-components/flagpole-lights.html" 4431 title="Flagpole Lighting" 4432 class="level-2 pl-[15px] block text-[14px] relative before:absolute before:h-[5px] before:w-[5px] before:bg-red-900 before:top-[8px] before:left-0"> 4433 Flagpole Lighting </a> 4434 </li> 4435 <li class="level-2 mb-2"> 4436 <a href="https://www.americanflags.com/flagpoles/outdoor-flagpole-components/outdoor-flagpole-ornaments.html" 4437 title="Outdoor Flagpole Ornaments" 4438 class="level-2 pl-[15px] block text-[14px] relative before:absolute before:h-[5px] before:w-[5px] before:bg-red-900 before:top-[8px] before:left-0"> 4439 Outdoor Flagpole Ornaments </a> 4440 </li> 4441 <li class="level-2 mb-2"> 4442 <a href="https://www.americanflags.com/flagpoles/outdoor-flagpole-components/flagpole-parts-hardware.html" 4443 title="Flagpole Parts & Hardware" 4444 class="level-2 pl-[15px] block text-[14px] relative before:absolute before:h-[5px] before:w-[5px] before:bg-red-900 before:top-[8px] before:left-0"> 4445 Flagpole Parts & Hardware </a> 4446 </li> 4447 <li class="level-2 mb-2"> 4448 <a href="https://www.americanflags.com/flagpoles/outdoor-flagpole-components.html" 4449 class="level-2 block text-[14px] text-red-900 font-bold underline"> 4450 Shop All </a> 4451 </li> 4452 </ul> 4453 4454 </li> 4455 <li class="level-1 custom-calc"> 4456 <a href="https://www.americanflags.com/flagpoles/indoor-flagpoles.html" 4457 title="Indoor Flagpoles and Display Sets" 4458 class="level-1 text-[16px] font-bold leading-[19px] uppercase mb-[6px] block anchor-color"> 4459 Indoor Flagpoles and Display Sets </a> 4460 4461 <ul class="z-10 w-full"> 4462 <li class="level-2 mb-2"> 4463 <a href="https://www.americanflags.com/flagpoles/indoor-flagpoles/indoor-flagpoles.html" 4464 title="Indoor Flagpoles & Sets" 4465 class="level-2 pl-[15px] block text-[14px] relative before:absolute before:h-[5px] before:w-[5px] before:bg-red-900 before:top-[8px] before:left-0"> 4466 Indoor Flagpoles & Sets </a> 4467 </li> 4468 <li class="level-2 mb-2"> 4469 <a href="https://www.americanflags.com/flagpoles/indoor-flagpoles/indoor-flag-stands.html" 4470 title="Indoor Flag Stands" 4471 class="level-2 pl-[15px] block text-[14px] relative before:absolute before:h-[5px] before:w-[5px] before:bg-red-900 before:top-[8px] before:left-0"> 4472 Indoor Flag Stands </a> 4473 </li> 4474 <li class="level-2 mb-2"> 4475 <a href="https://www.americanflags.com/flagpoles/indoor-flagpoles/indoor-flagpole-ornaments-finials.html" 4476 title="Indoor Flagpole Ornaments 
4476- Finials" 4477 class="level-2 pl-[15px] block text-[14px] relative before:absolute before:h-[5px] before:w-[5px] before:bg-red-900 before:top-[8px] before:left-0"> 4478 Indoor Flagpole Ornaments - Finials </a> 4479 </li> 4480 <li class="level-2 mb-2"> 4481 <a href="https://www.americanflags.com/flagpoles/indoor-flagpoles/indoor-parade-flag-accessories.html" 4482 title="Indoor & Parade Flag Accessories" 4483 class="level-2 pl-[15px] block text-[14px] relative before:absolute before:h-[5px] before:w-[5px] before:bg-red-900 before:top-[8px] before:left-0"> 4484 Indoor & Parade Flag Accessories </a> 4485 </li> 4486 <li class="level-2 mb-2"> 4487 <a href="https://www.americanflags.com/flagpoles/indoor-flagpoles/guidon-pole-sets-and-accessories.html" 4488 title="Guidon Pole Sets and Accessories" 4489 class="level-2 pl-[15px] block text-[14px] relative before:absolute before:h-[5px] before:w-[5px] before:bg-red-900 before:top-[8px] before:left-0"> 4490 Guidon Pole Sets and Accessories </a> 4491 </li> 4492 </ul> 4493 4494 </li> 4495 <li class="level-1 " style=""> 4496 4497 <a href="https://www.americanflags.com/flagpoles/handheld.html" 4498 title="Handheld, Tailgating and Advertising Flagpoles" 4499 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 4500 Handheld, Tailgating and Advertising Flagpoles </a> 4501 </li> 4502 </ul> 4503 </div> 4504 </div> 4505 </div> 4506 </div> 4507 <div id="hoverEffect" class="level-0 flex items-center p-1 mx-1 transition transition-colors duration-500 group 2lg:px-2 2lg:py-3 xl:mx-2 bg-on-hover"[ 4508 @mouseover.stop="hoverTopPosition = $event.currentTarget.offsetTop + $event.currentTarget.getBoundingClientRect().height" 4509 > 4510 <a href="https://www.americanflags.com/patriotic-items.html" 4511 @focus="hoverTopPosition = $event.currentTarget.parentNode.offsetTop + $event.currentTarget.parentNode.getBoundingClientRect().height" 4512 title="Patriotic Items" 4513 class="level-0 block text-[16px] text-white font-bold uppercase whitespace-nowrap group">
4514 <span>Patriotic Items</span> 4515 <span class="inline items-center"> 4516 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-5 h-5 inline group-hover:rotate-180 transition transform duration-500" width="25" height="25" role="img"> 4517 <path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"/> 4518<title>chevron-down</title></svg> 4519 </span> 4520 </a> 4521 <div class="absolute left-0 top-full z-10 border-t-[5px] border-gray-100 -mt-3 w-full bg-white/[.95] opacity-0 transition-opacity ease-out pointer-events-none group-hover:opacity-100 focus-within:opacity-100 group-hover:pointer-events-auto shadow-lg menu-hover-data" 4522 :style="`margin-top: 0; top:100%;`" 4523 > 4524 <div class="flex justify-between relative bg-white"> 4525 <div class="mx-auto max-w-[1700px] w-full p-4"> 4526 <ul class="flex flex-wrap gap-[30px] justify-center"> 4527 <li class="level-1 level--0 flex-1 grid-cols-4 gap-y-2 gap-x-8 px-4 columns-4 lvl-0-menu" style="column-count:4"> 4528 <div class="breakP"> 4529 <a href="https://www.americanflags.com/patriotic-items/commemorative-flag-cases.html" 4530 title="Commemorative Flag Cases" 4531 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 4532 Commemorative Flag Cases </a> 4533 4534 <a href="https://www.americanflags.com/patriotic-items/service-medallions.html" 4535 title="Service Medallions" 4536 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 4537 Service Medallions </a> 4538 4539 <a href="https://www.americanflags.com/patriotic-items/patriotic-picture-frames.html" 4540 title="Patriotic Picture Frames" 4541 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 4542 Patriotic Picture Frames </a> 4543 4544 <a href="https://www.americanflags.com/patriotic-items/grave-markers.html" 4545 title="Grave Markers" 4546 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 4547 Grave Markers </a> 4548 4549 <a href="https://www.americanflags.com/patriotic-items/patriotic-decorations.html" 4550 title="Patriotic Decorations" 4551 class="level-1 text-[16px] font-bold leading-[19px] block custom-space anchor-color"> 4552 Patriotic Decorations </a> 4553 </li> 4554 </ul> 4555 </div> 4556 </div> 4557 </div> 4558 </div> 4559 <div id="hoverEffect" class="level-0 flex items-center p-1 mx-1 transition transition-colors duration-500 group 2lg:px-2 2lg:py-3 xl:mx-2 bg-on-hover"[ 4560 @mouseover.stop="hoverTopPosition = $event.currentTarget.offsetTop + $event.currentTarget.getBoundingClientRect().height" 4561 > 4562 <a href="https://www.americanflags.com/clearance-items.html" 4563 @focus="hoverTopPosition = $event.currentTarget.parentNode.offsetTop + $event.currentTarget.parentNode.getBoundingClientRect().height" 4564 title="Clearance Items" 4565 class="level-0 block text-[16px] text-white font-bold uppercase whitespace-nowrap group">
4566 <span>Clearance Items</span> 4567 </a> 4568 </div> 4569 4570 </nav> 4571 </div> 4572 4573</div> 4574
4575<script> 4576 'use strict'; 4577 4578 const initMenuDesktop_6ab57394738b7 = () => { 4579 return { 4580 hoverTopPosition: '100%', 4581 setActiveMenu(menuNode) { 4582 Array.from(menuNode.querySelectorAll('a')).filter(link => { 4583 4584 menuNode.addEventListener("mouseleave", function( event ) { 4585 var element = document.getElementById("html-body"); 4586 element.classList.remove("menu-hover"); 4587 }, false); 4588 4589 menuNode.addEventListener("mouseout", function( event ) { 4590 var element = document.getElementById("html-body"); 4591 element.classList.add("menu-hover"); 4592 }, false); 4593 4594 return link.href === window.location.href.split('?')[0]; 4595 }).map(item => { 4596 if (!item.classList.contains('level-0')) { 4597 item.classList.add('underline'); 4598 } 4599 item.closest('div.level-0') && 4600 item.closest('div.level-0').classList.add('border-secondary'); 4601 }); 4602 } 4603 } 4604 } 4605</script>
4605 4606 4607 4608</div> 4609</header><div class="top-container"> <nav class="breadcrumbs mt-[10px] w-full max-w-[1700px] mx-auto 3xl:hidden" aria-label="Breadcrumb"> 4610 <div class="bg-gray-100 px-[15px]"> 4611 <ol class="items list-reset py-4 rounded flex flex-wrap text-sm"> 4612 <li class="item flex home"> 4613 <a href="https://www.americanflags.com/" 4614 class="no-underline text-gray-50" 4615 title="Go to Home Page" 4616 >Home</a> 4617 </li> 4618 <li class="item flex cms_page"> 4619 <span aria-hidden="true" class="separator flex items-center text-primary-lighter px-2"> 4620 <svg xmlns="http://www.w3.org/2000/svg" width="25" height="25" viewBox="0 0 40 25" class="w-[5px] h-[8px] fill-[#999999] -rotate-90" role="img"> 4621 <path id="arrow-left" d="M20.24,0,0,20,20.285,40,25,35.3,9.52,20,25,4.7Z" transform="translate(0 25) rotate(-90)" fill-rule="evenodd"/> 4622<title>af-arrow</title></svg> 4623 </span> 4624 <span 4625 class="text-primary" 4626 aria-current="page" 4627 >About</span> 4628 </li> 4629 </ol> 4630 </div> 4631 </nav> 4632 </div><main id="maincontent" class="page-main"><div id="contentarea" tabindex="-1"></div> 4633<div class="page messages">
4633<script> 4634 window.defaultSuccessMessageTimeout = 10000; 4635 function initMessages() { 4636 "use strict"; 4637 return { 4638 messages: window.mageMessages || [], 4639 isEmpty() { 4640 return this.messages.reduce( 4641 function (isEmpty, message) { 4642 return isEmpty && message === undefined 4643 }, true 4644 ) 4645 }, 4646 removeMessage(messageIndex) { 4647 this.messages[messageIndex] = undefined; 4648 }, 4649 addMessages(messages, hideAfter) { 4650 messages.map((message) => { 4651 this.messages = this.messages.concat(message); 4652 //if (hideAfter === undefined && message.type === 'success' && window.defaultSuccessMessageTimeout) { 4653 if (hideAfter === undefined && window.defaultSuccessMessageTimeout) { 4654 hideAfter = window.defaultSuccessMessageTimeout; 4655 } 4656 if (hideAfter) { 4657 this.setHideTimeOut(this.messages.length -1, hideAfter); 4658 } 4659 }); 4660 }, 4661 setHideTimeOut(messageIndex, hideAfter) { 4662 setTimeout((messageIndex) => { 4663 this.removeMessage(messageIndex); 4664 }, hideAfter, messageIndex); 4665 }, 4666 eventListeners: { 4667 ['@messages-loaded.window'](event) { 4668 this.addMessages(event.detail.messages, event.detail.hideAfter) 4669 }, 4670 ['@private-content-loaded.window'](event) { 4671 const data = event.detail.data; 4672 if ( 4673 data.messages && 4674 data.messages.messages && 4675 data.messages.messages.length 4676 ) { 4677 this.addMessages(data.messages.messages); 4678 } 4679 }, 4680 ['@clear-messages.window']() { 4681 this.messages = []; 4682 } 4683 } 4684 } 4685 } 4686</script>
4686 4687<section id="messages" 4688 x-data="initMessages()" 4689 x-bind="eventListeners" 4690 aria-live="assertive" 4691 role="alert" 4692> 4693 <template x-if="!isEmpty()"> 4694 <div class="w-full"> 4695 <div class="messages mx-auto w-full max-w-[1700px] px-[15px] mb-[20px]"> 4696 <template x-for="(message, index) in messages" :key="index"> 4697 <div> 4698 <template x-if="message"> 4699 <div class="message" :class="message.type" 4700 :ui-id="'message-' + message.type" 4701 > 4702 <span x-html="message.text"></span> 4703 <button 4704 type="button" 4705 class="text-gray-600 hover:text-black" 4706 aria-label="Close message" 4707 @click.prevent="removeMessage(index)" 4708 > 4709 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="stroke-current" width="18" height="18" aria-hidden="true"> 4710 <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/> 4711</svg> 4712 </button> 4713 </div> 4714 </template> 4715 </div> 4716 </template> 4717 </div> 4718 </div> 4719 </template> 4720</section> 4721</div><div class="page-heading flex flex-col md:flex-row flex-wrap font-bold text-center 4722 lg:mt-8 text-3xl "> 4723 <h1 class="text-brand-base page-title title-font" 4724 > 4725 <span class="base" data-ui-id="page-title-wrapper" >AmericanFlags.com - Our Story</span> </h1> 4726 </div> 4727<div class="columns"><div class="column main"> 4728
4728<script> 4729 /* e.g. hyva theme */ 4730 document.addEventListener("DOMContentLoaded", function(){ 4731 var items = document.getElementsByClassName('mfblogunveil'); 4732 var el, url; 4733 if (items.length) { 4734 for (var i=0; i<items.length;i++) { 4735 el = items[i]; 4736 url = el.getAttribute('data-original'); 4737 if (!url) { 4738 continue; 4739 } 4740 if ('IMG' == el.tagName) { 4741 el.src = url; 4742 } else { 4743 el.style.backgroundImage = "url('" + url + "')"; 4744 } 4745 } 4746 } 4747 }); 4748 </script>
4748 4749 4750<style>.cmsp10-table { 4751display: table 4752} 4753.cmsp10-border { 4754border-width: 1px 4755}</style> 4756<style>#html-body [data-pb-style=OM71OLW]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;border-style:none;border-width:1px;border-radius:0;margin:0 0 10px;padding:10px}#html-body [data-pb-style=L4QU3K3]{text-align:center;margin:0}#html-body [data-pb-style=B196Q53],#html-body [data-pb-style=N1WUO9W]{border-style:none;border-width:1px;border-radius:0;padding:0}#html-body [data-pb-style=B196Q53]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;margin:0 0 10px;padding:10px}#html-body [data-pb-style=CNW06KB]{border-style:none;border-width:1px;border-radius:0;margin:0;padding:0}</style><div data-content-type="row" data-appearance="contained" data-element="main"><div data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-video-fallback-src="" data-element="inner" data-pb-style="OM71OLW"><div data-content-type="video" data-appearance="default" data-element="main" data-pb-style="L4QU3K3"><div class="pagebuilder-video-inner" data-element="inner"><div class="pagebuilder-video-wrapper" data-element="wrapper" data-pb-style="N1WUO9W"><div class="pagebuilder-video-container"><iframe frameborder="0" allowfullscreen="" src="https://player.vimeo.com/video/428833919?title=0&byline=0&portrait=0" data-element="video"></iframe></div></div></div></div></div></div><div data-content-type="row" data-appearance="contained" data-element="main"><div data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-video-fallback-src="" data-element="inner" data-pb-style="B196Q53"><div data-content-type="html" data-appearance="default" data-element="main" data-pb-style="CNW06KB" data-decoded="true"><div> 4757<div> 4758<div> 4759<div> 4760<p>As you select a vendor for flags, flagpoles and accessories, we want to tell you a little about AmericanFlags.com, our track record and our commitment to ethical, responsible, and professional business practices...</p> 4761<p>We've worked hard to make AmericanFlags.com America's most trusted name in flags. We feature a wide selection of American flags, historic flags, military flags, world flags, state flags, residential and commercial flagpoles, banners, bunting and patriotic memorabilia. We sell top-quality American-made flags for less and are one of the largest flag retailers!<br /> <br /> Our customers include: every branch of the U.S. armed forces; thousands of major corporations and small businesses; school districts, colleges and universities; police and fire departments; nonprofit organizations, civic groups, and churches; realtors; hardware and home improvement stores; and tens of thousands of patriotic families. They've put their trust in us, our products, our customer service, and our good name. We hope you will too!<br /> <br /> <strong>Our goal is simple: To provide you with top-quality products at fair prices and to make sure that you are so satisfied that you'll tell others about AmericanFlags.com.</strong><br /> <br /> AmericanFlags.com was launched in 2001 and founded by Dr. Jeffrey Reynolds. The Americanflags.com team is a woman-owned and led, by a team of flag industry veterans with over 40 years of experience.<br /> <br /> AmericanFlags.com has been praised in the Congressional Record for our patriotism and profiled by the Wall Street Journal and Forbes. Our site has been featured in more than 1,000 newspaper and magazine articles, including <em>Real Simple Magazine</em> and <em>Romantic Homes</em>.<br /> <br /> We are proud members of FMAA, as well as of the Better Business Bureau. We take security seriously and the security of our site is monitored regularly by a third-party security firm.</p> 4762<p>Finally, we are very active to our local communities and support a variety of local, regional and national charitable organizations. We believe in giving back and do so through flag donations, event sponsorships and direct financial assistance. We are particularly committed to supporting organizations that address the needs of veterans and their families.<br /> <br /> We appreciate your consideration and look forward to serving you. Please don't hesitate to contact us with your questions or comments.</p> 4763</div> 4764<div> <picture> 4765 4766 <source type="image/webp" 4767 4768 srcset="https://www.americanflags.com/media/opti_image/webp/wysiwyg/ey-about-goal.webp"> 4769 4770 <source type="image/jpg"
4771 4772 srcset="https://www.americanflags.com/media/wysiwyg/ey-about-goal.jpg"> 4773 4774 <img src="https://www.americanflags.com/media/wysiwyg/ey-about-goal.jpg" alt="" width="263" height="217" loading="lazy" decoding="async" /> </picture> 4775 4776 <br /> 4777<table border="0" cellspacing="0" cellpadding="0"> 4778<tbody> 4779<tr> 4780<td width="48"> <picture> 4781 4782 <source type="image/webp" 4783 4784 srcset="https://www.americanflags.com/media/opti_image/webp/wysiwyg/ey-con-address-icon.webp"> 4785 4786 <source type="image/png" 4787 4788 srcset="https://www.americanflags.com/media/wysiwyg/ey-con-address-icon.png"> 4789 4790 <img src="https://www.americanflags.com/media/wysiwyg/ey-con-address-icon.png" width="48" height="34" loading="lazy" decoding="async" /> </picture> 4791 4792</td> 4793<td> 4794<div>AmericanFlags.com</div> 47951241 Deer Park Avenue, Suite 1 #1116<br /> North Babylon, NY 11703</td> 4796</tr> 4797<tr> 4798<td width="48"> <picture> 4799 4800 <source type="image/webp" 4801 4802 srcset="https://www.americanflags.com/media/opti_image/webp/wysiwyg/ey-con-phone-icon.webp"> 4803 4804 <source type="image/png" 4805 4806 srcset="https://www.americanflags.com/media/wysiwyg/ey-con-phone-icon.png"> 4807 4808 <img src="https://www.americanflags.com/media/wysiwyg/ey-con-phone-icon.png" width="48" height="31" loading="lazy" decoding="async" /> </picture> 4809 4810</td> 4811<td> 4812<div><a href="tel:1-877-873-5247">1-877-USFLAGS</a></div> 4813<a href="tel:(877)873-5247">1-877-873-5247</a><br /> <br /> Fax: 1.631.750.9472<br /> <br /> <strong>Office Hours</strong><br /> Mon-Fri 8am-6pm EST</td> 4814</tr> 4815<tr> 4816<td width="48"> <picture> 4817 4818 <source type="image/webp" 4819 4820 srcset="https://www.americanflags.com/media/opti_image/webp/wysiwyg/ey-con-mail-icon.webp"> 4821 4822 <source type="image/png" 4823 4824 srcset="https://www.americanflags.com/media/wysiwyg/ey-con-mail-icon.png"> 4825 4826 <img src="https://www.americanflags.com/media/wysiwyg/ey-con-mail-icon.png" width="48" height="26" loading="lazy" decoding="async" /> </picture> 4827 4828</td> 4829<td><a href="/cdn-cgi/l/email-protection#7f1c0a0c0b10121a0d1c1e0d1a3f1e121a0d161c1e1119131e180c511c1012"><span class="__cf_email__" data-cfemail="4625333532292b23342527342306272b23342f252728202a2721356825292b">[email protected]</span></a></td> 4830</tr> 4831</tbody> 4832</table> 4833</div> 4834</div> 4835</div> 4836</div> 4837<div> 4838</div> 4839</div> 4840</div> 4841</div></div></div></div></div></main><footer class="page-footer"><div class="footer content"><div class="xl:max-w-[1700px] w-full mx-auto px-0 md:px-[15px] body-font"> 4842 <div class="py-[10px] border-t-[5px] border-b-[1px] border-brand-base"> 4843 <div class=""> 4844 <style>.cmsb49-mb-0 { 4845margin-bottom: 0px 4846} 4847.cmsb49-mb-5 { 4848margin-bottom: 1.25rem 4849} 4850.cmsb49-mb-\[20px\] { 4851margin-bottom: 20px 4852} 4853.cmsb49-mt-2 { 4854margin-top: 0.5rem 4855} 4856.cmsb49-mt-2\.5 { 4857margin-top: 0.625rem 4858} 4859.cmsb49-block { 4860display: block 4861} 4862.cmsb49-flex { 4863display: flex 4864} 4865.cmsb49-hidden { 4866display: none 4867} 4868.cmsb49-h-\[12px\] { 4869height: 12px 4870} 4871.cmsb49-h-\[30px\] { 4872height: 30px 4873} 4874.cmsb49-h-\[33px\] { 4875height: 33px 4876} 4877.cmsb49-h-\[40px\] { 4878height: 40px 4879} 4880.cmsb49-w-\[12px\] { 4881width: 12px 4882} 4883.cmsb49-w-\[16px\] { 4884width: 16px 4885} 4886.cmsb49-w-\[20px\] { 4887width: 20px 4888} 4889.cmsb49-w-\[33px\] { 4890width: 33px 4891} 4892.cmsb49-w-\[60px\] { 4893width: 60px 4894} 4895.cmsb49-w-full { 4896width: 100% 4897} 4898.cmsb49-max-w-\[127px\] { 4899max-width: 127px 4900} 4901.cmsb49-rotate-180 { 4902--tw-rotate: 180deg; 4903transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)) 4904} 4905.cmsb49-cursor-pointer { 4906cursor: pointer 4907} 4908.cmsb49-flex-col { 4909flex-direction: column 4910} 4911.cmsb49-flex-wrap { 4912flex-wrap: wrap 4913} 4914.cmsb49-items-start { 4915align-items: flex-start 4916} 4917.cmsb49-items-center { 4918align-items: center 4919} 4920.cmsb49-justify-center { 4921justify-content: center 4922} 4923.cmsb49-justify-between { 4924justify-content: space-between 4925} 4926.cmsb49-gap-1 { 4927gap: 0.25rem 4928}
4929.cmsb49-gap-\[10px\] { 4930gap: 10px 4931} 4932.cmsb49-gap-\[20px\] { 4933gap: 20px 4934} 4935.cmsb49-gap-\[8px\] { 4936gap: 8px 4937} 4938.cmsb49-break-all { 4939word-break: break-all 4940} 4941.cmsb49-rounded-\[4px\] { 4942border-radius: 4px 4943} 4944.cmsb49-rounded-full { 4945border-radius: 9999px 4946} 4947.cmsb49-border-2 { 4948border-width: 2px 4949} 4950.cmsb49-border-black { 4951--tw-border-opacity: 1; 4952border-color: rgb(0 0 0 / var(--tw-border-opacity)) 4953} 4954.cmsb49-bg-gray-100 { 4955--tw-bg-opacity: 1; 4956background-color: rgb(243 244 246 / var(--tw-bg-opacity)) 4957} 4958.cmsb49-bg-white { 4959--tw-bg-opacity: 1; 4960background-color: rgb(255 255 255 / var(--tw-bg-opacity)) 4961} 4962.cmsb49-px-\[15px\] { 4963padding-left: 15px; 4964padding-right: 15px 4965} 4966.cmsb49-py-\[30px\] { 4967padding-top: 30px; 4968padding-bottom: 30px 4969} 4970.cmsb49-align-middle { 4971vertical-align: middle 4972} 4973.cmsb49-text-\[14px\] { 4974font-size: 14px 4975} 4976.cmsb49-text-sm { 4977font-size: 0.875rem; 4978line-height: 1.25rem 4979} 4980.cmsb49-font-bold { 4981font-weight: 700 4982} 4983.cmsb49-not-italic { 4984font-style: normal 4985} 4986.cmsb49-leading-7 { 4987line-height: 1.75rem 4988} 4989.cmsb49-leading-\[22px\] { 4990line-height: 22px 4991} 4992.cmsb49-text-\[\#666666\] { 4993--tw-text-opacity: 1; 4994color: rgb(102 102 102 / var(--tw-text-opacity)) 4995} 4996.cmsb49-text-black { 4997--tw-text-opacity: 1; 4998color: rgb(0 0 0 / var(--tw-text-opacity)) 4999} 5000.cmsb49-text-gray-50 { 5001--tw-text-opacity: 1; 5002color: rgb(249 250 251 / var(--tw-text-opacity)) 5003} 5004.cmsb49-text-gray-900 { 5005--tw-text-opacity: 1; 5006color: rgb(17 24 39 / var(--tw-text-opacity)) 5007} 5008.cmsb49-text-red-900 { 5009--tw-text-opacity: 1; 5010color: rgb(127 29 29 / var(--tw-text-opacity)) 5011} 5012.cmsb49-transition-transform { 5013transition-property: transform; 5014transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); 5015transition-duration: 150ms 5016} 5017@media (min-width: 768px) { 5018.cmsb49-md\:mb-\[10px\] { 5019margin-bottom: 10px 5020} 5021.cmsb49-md\:mt-0 { 5022margin-top: 0px 5023} 5024.cmsb49-md\:flex { 5025display: flex 5026} 5027.cmsb49-md\:hidden { 5028display: none 5029} 5030.cmsb49-md\:flex-nowrap { 5031flex-wrap: nowrap 5032} 5033} 5034@media (min-width: 1024px) { 5035.cmsb49-lg\:cursor-default { 5036cursor: default 5037} 5038.cmsb49-lg\:gap-\[60px\] { 5039gap: 60px 5040} 5041} 5042@media (min-width: 1280px) { 5043.cmsb49-xl\:gap-\[60px\] { 5044gap: 60px 5045} 5046.cmsb49-xl\:px-\[30px\] { 5047padding-left: 30px; 5048padding-right: 30px 5049} 5050}</style> 5051<style>#html-body [data-pb-style=E3HWL13],#html-body [data-pb-style=G8E18JO]{background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}#html-body [data-pb-style=G8E18JO]{justify-content:flex-start;display:flex;flex-direction:column}#html-body [data-pb-style=E3HWL13]{align-self:stretch}#html-body [data-pb-style=NOB4BX4]{display:flex;width:100%}#html-body [data-pb-style=HVGY0DM],#html-body [data-pb-style=M5C2TE6],#html-body [data-pb-style=QQJ4N89]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;width:25%;align-self:stretch}#html-body [data-pb-style=M5C2TE6],#html-body [data-pb-style=QQJ4N89]{width:41.6667%}#html-body [data-pb-style=QQJ4N89]{width:33.3333%}</style><div data-content-type="row" data-appearance="full-bleed" data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="main" data-pb-style="G8E18JO"><div class="pagebuilder-column-group af-footer" data-background-images="{}" data-content-type="column-group" data-appearance="default" data-grid-size="12" data-element="main" data-pb-style="E3HWL13"><div class="pagebuilder-column-line" data-content-type="column-line" data-element="main" data-pb-style="NOB4BX4"><div class="pagebuilder-column cmsb49-bg-gray-100 footer-column-1" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="HVGY0DM"><div data-content-type="html" data-appearance="default" data-element="main" data-decoded="true"><div class="cmsb49-xl:px-[30px] cmsb49-px-[15px] cmsb49-py-[30px]"> 5052 <div class="cmsb49-max-w-[127px] cmsb49-mb-[20px] manual-lazy-async"> 5053 <picture> 5054 5055 <source type="image/webp" 5056 5057 srcset="https://www.americanflags.com/media/opti_image/webp/wysiwyg/Hyva/footer-logo.webp"> 5058 5059 <source type="image/png" 5060 5061 srcset="https://www.americanflags.com/media/wysiwyg/Hyva/footer-logo.png"> 5062 5063 <img loading="lazy" decoding="async" src="https://www.americanflags.com/media/wysiwyg/Hyva/footer-logo.png" alt="Footer Logo" width="235" height="97" /> </picture> 5064 5065 5066 </div> 5067 <div class="cmsb49-text-sm"> 5068 <p class="cmsb49-text-gray-50 cmsb49-text-[#666666] cmsb49-text-sm">Join a community of patriots â shop our collection of U.S.-made state, military, American flags and more! </p> 5069 <address class="cmsb49-text-black cmsb49-not-italic cmsb49-text-sm">1241 Deer Park Avenue, Suite 1 #1116, North Babylon, NY 11703</address> 5070 <div class="cmsb49-text-red-900 cmsb49-text-sm cmsb49-flex cmsb49-items-center cmsb49-gap-[10px]"><svg xmlns="http://www.w3.org/2000/svg" id="ic_email" width="16" height="12" viewbox="0 0 16.779 12.584" class="cmsb49-w-[16px] cmsb49-h-[12px]" role="img"> 5071 <g id="Group_63" data-name="Group 63"> 5072 <path id="Path_18" data-name="Path 18" d="M7.037,65.021c2.3,1.95,6.344,5.381,7.531,6.451a.7.7,0,0,0,1.015,0c1.189-1.071,5.23-4.5,7.532-6.453a.349.349,0,0,0,.049-.482,1.388,1.388,0,0,0-1.1-.539H8.085a1.388,1.388,0,0,0-1.1.539A.349.349,0,0,0,7.037,65.021Z" transform="translate(-6.687 -64)" fill="#ac2837"></path> 5073 <path id="Path_19" data-name="Path 19" d="M16.577,126.444a.348.348,0,0,0-.373.051c-2.554,2.165-5.813,4.94-6.839,5.864a1.416,1.416,0,0,1-1.951,0c-1.093-.985-4.753-4.1-6.838-5.863a.35.35,0,0,0-.576.267v8.791a1.4,1.4,0,0,0,1.4,1.4H15.381a1.4,1.4,0,0,0,1.4-1.4v-8.791A.349.349,0,0,0,16.577,126.444Z" transform="translate(0 -124.366)" fill="#ac2837"></path> 5074 </g> 5075<title>cms/footer-email</title></svg> 5076<a href="/cdn-cgi/l/email-protection#9ffceaecebf0f2faedfcfeedfadffef2faedf6fcfef1f9f3fef8ecb1fcf0f2" class="cmsb49-text-red-900 cmsb49-break-all cmsb49-block"><span class="__cf_email__" data-cfemail="9af9efe9eef5f7ffe8f9fbe8ffdafbf7ffe8f3f9fbf4fcf6fbfde9b4f9f5f7">[email protected]</span></a></div> 5077 </div> 5078 5079<!-- Chat Button - Visibility controlled by JavaScript --> 5080<button id="chat-with-us" class="text-white bg-[#29527E] rounded-full px-6 py-2 hover:bg-[#1c825b] mt-2.5" type="button" onclick="InitContivioChat()" aria-label="Chat with us" data-timezone="America/Ne
5080w_York" style="display:none;"> 5081 Chat with us</button> 5082<button id="chat-with-us-track-order" class="text-white bg-[#29527E] rounded-full px-6 py-2 hover:bg-[#1c825b] mt-2.5" type="button" onclick="InitContivioChat()" aria-label="Chat with us" data-timezone="America/New_York" style="display:none;"> 5083 Track my order</button> 5084 5085<!--
5085<script src="https://uschat4.contivio.com/Chat2/ContivioChatPlugin.js"></script>
vendor: 1 bytes, line 5085
5085
5086<script src="https://uschat4.contivio.com/Chat2/contivio-configuration-plugin.js"></script>
5086 -->
vendor: 109 bytes, lines 5086-5087
5086 5087<script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script>
5087<script> 5088(function () { 5089 const scripts = [ 5090 'https://uschat4.contivio.com/Chat2/ContivioChatPlugin.js', 5091 'https://uschat4.contivio.com/Chat2/contivio-configuration-plugin.js' 5092 ]; 5093 5094 let loaded = false; 5095 function loadChat() { 5096 if (loaded) return; 5097 loaded = true; 5098 // Load sequentially: configuration-plugin depends on ContivioChatPlugin being defined first 5099 function loadNext(index) { 5100 if (index >= scripts.length) return; 5101 const src = scripts[index]; 5102 if (document.querySelector(`script[src="${src}"]`)) { 5103 loadNext(index + 1); 5104 return; 5105 } 5106 const script = document.createElement('script'); 5107 script.src = src; 5108 script.async = true; 5109 script.onload = () => loadNext(index + 1); 5110 document.body.appendChild(script); 5111 } 5112 loadNext(0); 5113 } 5114 function loadWhenIdle() { 5115 if ('requestIdleCallback' in window) { 5116 requestIdleCallback(loadChat); 5117 } else { 5118 setTimeout(loadChat, 0); 5119 } 5120 } 5121 if (window.innerWidth >= 768) { 5122 window.addEventListener('load', function () { 5123 setTimeout(loadWhenIdle, 4000); // Delay after LCP 5124 }); 5125 } 5126 else { 5127 const events = ['scroll', 'touchstart', 'click']; 5128 const triggerLoad = () => { 5129 loadWhenIdle(); 5130 events.forEach(e => 5131 window.removeEventListener(e, triggerLoad) 5132 ); 5133 }; 5134 events.forEach(e => 5135 window.addEventListener(e, triggerLoad, { passive: true }) 5136 ); 5137 window.addEventListener('load', function () { 5138 setTimeout(loadWhenIdle, 8000); 5139 }); 5140 } 5141})(); 5142</script>
5142 5143 5144<link rel="stylesheet" href="https://uschat4.contivio.com/Chat2/CustomStyles/CD6315937ACE8AB4C261FB8FAE6A63163.css?1"> 5145
5146<script> 5147 function hideContivioButton() { 5148 let btn = document.querySelector('#chat-button, .bubble, .contivio-chat-button'); 5149 5150 if (btn) { 5151 btn.style.display = "none"; 5152 } else { 5153 setTimeout(hideContivioButton, 300); 5154 } 5155 } 5156 5157 function InitContivioChat() { 5158 document.getElementById('chat-button')?.click(); 5159 } 5160 5161 // Check if chat is available based on business hours 5162 function checkChatAvailability() { 5163 const chatButton = document.getElementById('chat-with-us'); 5164 const trackOrderButton = document.getElementById('chat-with-us-track-order'); 5165 5166 if (!chatButton) return; 5167 5168 const timezone = chatButton.dataset.timezone; 5169 const now = new Date(); 5170 5171 // Get current hour, minute, and day in store timezone 5172 const hour = parseInt(new Intl.DateTimeFormat('en-US', { 5173 timeZone: timezone, 5174 hour: 'numeric', 5175 hour12: false 5176 }).format(now)); 5177 5178 const minute = parseInt(new Intl.DateTimeFormat('en-US', { 5179 timeZone: timezone, 5180 minute: 'numeric' 5181 }).format(now)); 5182 5183 const dayName = new Intl.DateTimeFormat('en-US', { 5184 timeZone: timezone, 5185 weekday: 'long' 5186 }).format(now); 5187 5188 const dayNum = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'].indexOf(dayName); 5189 5190 // Business hours: Monday-Friday (1-5), 8:15 AM - 6:00 PM 5191 // For testing: Change 8:15 to any time you want to test (e.g., 8:30, 9:00, etc.) 5192 const isWeekday = dayNum >= 1 && dayNum <= 5; 5193 //const isBusinessHours = (hour > 10 || (hour === 10 && minute >= 08)) && hour < 18; 5194 const isBusinessHours = hour >= 8 && hour < 18; 5195 const showButton = isWeekday && isBusinessHours; 5196 5197 // Show or hide both buttons 5198 const displayStyle = showButton ? 'inline-block' : 'none'; 5199 chatButton.style.display = displayStyle; 5200 if (trackOrderButton) { 5201 trackOrderButton.style.display = displayStyle; 5202 } 5203 5204 // Simple debug log with minutes 5205 const timeStr = hour + ':' + (minute < 10 ? '0' + minute : minute); 5206 console.log('[Chat]', dayName, timeStr, '-', showButton ? 'VISIBLE' : 'HIDDEN'); 5207 } 5208 5209 document.addEventListener('DOMContentLoaded', function() { 5210 checkChatAvailability(); 5211 hideContivioButton(); 5212 }); 5213</script>
5213 5214<div class="mt-2"> 5215<!-- <a href="https://www.shopperapproved.com/reviews/americanflags.com" class="shopperlink new-sa-seals placement-202"> <img src="//www.shopperapproved.com/svg-seal/41677/202-sa-seal.svg" style="border-radius: 4px;" alt="Customer Reviews" oncontextmenu="alert('Copying Prohibited by Law - This image and all included logos are copyrighted by Shopper Approved.'); return false;" /> </a>
5215<script type="text/javascript"> (function() { var js = document.createElement("script"); js.innerHTML = `function openshopperapproved(e) { var isIE = navigator.appName === "Microsoft Internet Explorer"; var windowHeight = screen.availHeight - 90; var windowWidth = window.innerWidth < 1400 ? 620 : 940; window.open(this.href, "shopperapproved", "location=" + (isIE ? "yes" : "no") + ",scrollbars=yes,width=" + windowWidth + ",height=" + windowHeight + ",menubar=no,toolbar=no"); e.stopPropagation?.(); return false; } document.querySelectorAll(".shopperlink").forEach(link => link.onclick = openshopperapproved);`; js.type = "text/javascript"; document.head.appendChild(js); var link = document.createElement('link'); link.rel = 'stylesheet'; link.type = 'text/css'; link.href = "//www.shopperapproved.com/svg-seal/202.css"; document.head.appendChild(link); })(); </script>
5215 --> 5216<a href="https://www.shopperapproved.com/reviews/americanflags.com" class="shopperlink new-sa-seals placement-202"> 5217 <img src="//www.shopperapproved.com/svg-seal/41677/202-sa-seal.svg" style="border-radius: 4px;" alt="Customer Reviews" oncontextmenu="alert('Copying Prohibited by Law - This image and all included logos are copyrighted by Shopper Approved.'); return false;"> 5218</a> 5219
5220<script> 5221window.addEventListener( 5222 'init-external-scripts', 5223 () => { 5224 5225 /* Load external stylesheet */ 5226 if (!document.querySelector('link[href*="202.css"]')) { 5227 const link = document.createElement('link'); 5228 link.rel = 'stylesheet'; 5229 link.type = 'text/css'; 5230 link.href = '//www.shopperapproved.com/svg-seal/202.css'; 5231 document.head.appendChild(link); 5232 } 5233 5234 /* Attach popup behavior */ 5235 function openShopperApproved(e) { 5236 const isIE = navigator.appName === "Microsoft Internet Explorer"; 5237 const windowHeight = screen.availHeight - 90; 5238 const windowWidth = window.innerWidth < 1400 ? 620 : 940; 5239 5240 window.open( 5241 this.href, 5242 "shopperapproved", 5243 "location=" + (isIE ? "yes" : "no") + 5244 ",scrollbars=yes,width=" + windowWidth + 5245 ",height=" + windowHeight + 5246 ",menubar=no,toolbar=no" 5247 ); 5248 5249 e.stopPropagation?.(); 5250 e.preventDefault(); 5251 return false; 5252 } 5253 5254 document.querySelectorAll('.shopperlink').forEach(link => { 5255 link.addEventListener('click', openShopperApproved); 5256 }); 5257 5258 }, 5259 { once: true, passive: true } 5260); 5261</script>
5261 5262</div> 5263</div></div></div><div class="pagebuilder-column footer-column-2" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="M5C2TE6"><div data-content-type="html" data-appearance="default" data-element="main" data-decoded="true"><div class="cmsb49-px-[15px] cmsb49-xl:px-[30px] cmsb49-py-[30px]"> 5264 <h4>Get Exclusive Promos And Products Updates!</h4> 5265 <p>Special discounts, news, and half-staff notifications.</p> 5266<div class="w-full"> 5267 <form class="form subscribe" action="https://www.americanflags.com/newsletter/subscriber/new/" method="post" x-data="initNewsletterForm()" @submit.prevent="submitForm()" id="newsletter-validate-detail"> 5268 <div class="mb-3 text-sm font-medium tracking-widest text-gray-900 uppercase title-font hidden"> 5269 Newsletter </div> 5270 <div class="flex flex-wrap justify-center gap-2 md:justify-start relative mb-[27px]"> 5271 <label for="newsletter-subscribe" class="hidden"> 5272 Email Address </label> 5273 <input name="email" type="email" required id="newsletter-subscribe" class="form-input inline-flex w-full text-[12px] text-gray-50 border border-gray-50 rounded-[30px] shadow-none pr-[134px]" placeholder="Enter your email address"> 5274 <input name="form_key" type="hidden" value="gibCFwcOTbG2obyl"> <button class="inline-flex shrink-0 ml-auto xl:mt-0 text-black text-[14px] btn bg-transparent hover:bg-transparent absolute top-0 right-0 py-[8px] px-0 hover:underline hover:text-[#006bb4]"> 5275 Subscribe </button> 5276 </div> 5277 <div> 5278 <template x-if="displayErrorMessage"> 5279 <p class="flex items-center text-red"> 5280 <span class="inline-block w-8 h-8 mr-3"> 5281 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke-width="2" stroke="currentColor" width="24" height="24" role="img"> 5282 <path stroke-linecap="round" stroke-linejoin="round" d="M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path> 5283<title>exclamation-circle</title></svg> 5284 </span> 5285 <template x-for="errorMessage in errorMessages"> 5286 <span x-html="errorMessage"></span> 5287 </template> 5288 </p> 5289 </template> 5290 </div> 5291 </form> 5292 <div class="w-full"> 5293 </div> 5294
5294<script> 5295 function initNewsletterForm() { 5296 return { 5297 errors: 0, 5298 hasCaptchaToken: 0, 5299 displayErrorMessage: false, 5300 errorMessages: [], 5301 setErrorMessages(messages) { 5302 this.errorMessages = [messages] 5303 this.displayErrorMessage = this.errorMessages.length 5304 }, 5305 submitForm() { 5306 // Do not rename $form, the variable is expected to be declared in the recaptcha output 5307 const $form = document.querySelector('#newsletter-validate-detail'); 5308 5309 if (this.errors === 0) { 5310 $form.submit(); 5311 } 5312 } 5313 } 5314 } 5315 </script>
5315 5316</div> 5317 5318 <div class="cmsb49-flex cmsb49-flex-wrap cmsb49-md:flex-nowrap cmsb49-items-start cmsb49-gap-[20px] cmsb49-lg:gap-[60px] cmsb49-xl:gap-[60px]"> 5319 <div x-data="{ open: false }" class="cmsb49-w-full"> 5320 <div @click="open = ! open" class="cmsb49-flex cmsb49-justify-between cmsb49-items-center cmsb49-align-middle cmsb49-cursor-pointer group cmsb49-lg:cursor-default" > 5321 <h5 class="cmsb49-mb-0 cmsb49-md:mb-[10px]">CUSTOMER CARE</h5> 5322 <span class="cmsb49-transition-transform" :class="{ 'cmsb49-rotate-180': open }"> 5323 <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewbox="0 0 40 25" class="cmsb49-w-[12px] cmsb49-h-[12px] cmsb49-md:hidden" role="img"> 5324 <path id="arrow-left_2" d="M20.24,0,0,20,20.285,40,25,35.3,9.52,20,25,4.7Z" transform="translate(0 25) rotate(-90)" fill-rule="evenodd"></path> 5325<title>cms/af-arrow</title></svg> 5326 5327 </span> 5328 </div> 5329 <ul class="cmsb49-flex-col cmsb49-gap-1 cmsb49-md:flex cmsb49-mt-2.5 cmsb49-md:mt-0" :class="{ 'cmsb49-flex': open, 'cmsb49-hidden': ! open }"> 5330 <li class="cmsb49-leading-7"><a href="https://www.americanflags.com/contact/">Customer Service</a></li> 5331 <li class="cmsb49-leading-7"><a href="https://www.americanflags.com/shipping-deliveries">Shipping/Deliveries</a></li> 5332 <li class="cmsb49-leading-7"><a href="https://www.americanflags.com/return-policy">Returns</a></li> 5333 <li class="cmsb49-leading-7"><a href="https://www.americanflags.com/coupons">Coupons</a></li> 5334 <li class="cmsb49-leading-7"><a href="https://www.americanflags.com/faq">FAQs</a></li> 5335 <li class="cmsb49-leading-7"><a href="https://www.americanflags.com/american-flag-info">American Flag Info</a></li> 5336 </ul> 5337 </div> 5338 <div x-data="{ open: false }" class="cmsb49-w-full"> 5339 <div @click="open = ! open" class="cmsb49-flex cmsb49-justify-between cmsb49-items-center cmsb49-align-middle cmsb49-cursor-pointer group cmsb49-lg:cursor-default" > 5340 <h5 class="cmsb49-mb-0 cmsb49-md:mb-[10px]">COMPANY INFO</h5> 5341 <span class="cmsb49-transition-transform" :class="{ 'cmsb49-rotate-180': open }"> 5342 <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewbox="0 0 40 25" class="cmsb49-w-[12px] cmsb49-h-[12px] cmsb49-md:hidden" role="img"> 5343 <path id="arrow-left_2" d="M20.24,0,0,20,20.285,40,25,35.3,9.52,20,25,4.7Z" transform="translate(0 25) rotate(-90)" fill-rule="evenodd"></path> 5344<title>cms/af-arrow</title></svg> 5345 5346 </span> 5347 </div> 5348 <ul class="cmsb49-flex-col cmsb49-gap-1 cmsb49-md:flex cmsb49-mt-2.5 cmsb49-md:mt-0" :class="{ 'cmsb49-flex': open, 'cmsb49-hidden': ! open }"> 5349 <li class="cmsb49-leading-7"><a href="https://www.americanflags.com/about">About Us</a></li> 5350 <li class="cmsb49-leading-7"><a href="https://www.americanflags.com/contact">Contact Us</a></li> 5351 <li class="cmsb49-leading-7"><a href="https://www.americanflags.com/customer-testimonials">Customer Testimonials</a></li> 5352 <li class="cmsb49-leading-7"><a href="https://www.americanflags.com/press-media">Press/Media</a></li> 5353 <li class="cmsb49-leading-7"><a href="https://www.americanflags.com/privacy-policy">Privacy Policy</a></li> 5354 <li class="cmsb49-leading-7"><a href="https://www.americanflags.com/terms-conditions">Terms/Conditions</a></li> 5355 <li class="cmsb49-leading-7"><a href="https://www.americanflags.com/sitemap.html">Site Map</a></li> 5356 <li class="cmsb49-leading-7"><a href="https://www.americanflags.com/buy.html">Buy Flags</a></li> 5357 </ul> 5358 </div> 5359 <div class="cmsb49-w-full cmsb49-flex cmsb49-flex-col"> 5360 <div x-data="{ open: false }" class="cmsb49-w-full cmsb49-mb-5"> 5361 <div @click="open = ! open" class="cmsb49-flex cmsb49-justify-between cmsb49-items-center cmsb49-align-middle cmsb49-cursor-pointer group cmsb49-lg:cursor-default"> 5362 <h5 class="cmsb49-mb-0 cmsb49-md:mb-[10px]">B2B</h5>
5363 <span class="cmsb49-transition-transform" :class="{ 'cmsb49-rotate-180': open }"> 5364 <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewbox="0 0 40 25" class="cmsb49-w-[12px] cmsb49-h-[12px] cmsb49-md:hidden" role="img"> 5365 <path id="arrow-left_2" d="M20.24,0,0,20,20.285,40,25,35.3,9.52,20,25,4.7Z" transform="translate(0 25) rotate(-90)" fill-rule="evenodd"></path> 5366<title>cms/af-arrow</title></svg> 5367 5368 </span> 5369 </div> 5370 <ul class="cmsb49-flex-col cmsb49-gap-1 cmsb49-md:flex cmsb49-mt-2.5 cmsb49-md:mt-0" :class="{ 'cmsb49-flex': open, 'cmsb49-hidden': ! open }"> 5371 <li class="cmsb49-leading-7"><a href="https://www.americanflags.com/government-buyers">Government Buyers</a></li> 5372 <li class="cmsb49-leading-7"><a href="https://www.americanflags.com/tax-exempt">Tax Exempt</a></li> 5373 </ul> 5374 </div> 5375 <div x-data="{ open: false }" class="cmsb49-w-full"> 5376 <div @click="open = ! open" class="cmsb49-flex cmsb49-justify-between cmsb49-items-center cmsb49-align-middle cmsb49-cursor-pointer group cmsb49-lg:cursor-default"> 5377 <h5 class="cmsb49-mb-0 cmsb49-md:mb-[10px]">CALENDARS</h5> 5378 <span class="cmsb49-transition-transform" :class="{ 'cmsb49-rotate-180': open }"> 5379 <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewbox="0 0 40 25" class="cmsb49-w-[12px] cmsb49-h-[12px] cmsb49-md:hidden" role="img"> 5380 <path id="arrow-left_2" d="M20.24,0,0,20,20.285,40,25,35.3,9.52,20,25,4.7Z" transform="translate(0 25) rotate(-90)" fill-rule="evenodd"></path> 5381<title>cms/af-arrow</title></svg> 5382 5383 </span> 5384 </div> 5385 <ul class="cmsb49-flex-col cmsb49-gap-1 cmsb49-md:flex cmsb49-mt-2.5 cmsb49-md:mt-0" :class="{ 'cmsb49-flex': open, 'cmsb49-hidden': ! open }"> 5386 <li class="cmsb49-leading-7"><a href="https://ctdownloads.s3.us-east-1.amazonaws.com/American+Flags+Half-Staff+Calendar+2026.pdf">Half-Staff Calendar</a></li> 5387 </ul> 5388 </div> 5389 </div> 5390 </div> 5391</div></div></div><div class="pagebuilder-column cmsb49-bg-gray-100 footer-column-3" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="QQJ4N89"><div data-content-type="html" data-appearance="default" data-element="main" data-decoded="true"><div class="footer-payment"> 5392 <div> 5393 <h4 class="cmsb49-mb-[20px]">Connect With US</h4> 5394 <ul class="cmsb49-flex cmsb49-items-center cmsb49-gap-[10px] cmsb49-mb-[20px]"> 5395 <li><a href="https://www.facebook.com/AmericanFlagsCom?ref=ts" class="cmsb49-w-[33px] cmsb49-h-[33px] cmsb49-flex cmsb49-justify-center cmsb49-items-center cmsb49-border-2 cmsb49-rounded-full cmsb49-border-black"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewbox="0 0 18.947 40" class="cmsb49-w-[12px] cmsb49-h-[12px]" role="img"> 5396 <path id="Path_51414" data-name="Path 51414" d="M477.858,397.083v-3.448a7.4,7.4,0,0,1,.075-1.2,2.333,2.333,0,0,1,.333-.837,1.353,1.353,0,0,1,.839-.571,6,6,0,0,1,1.542-.158h3.5v-6.892h-5.6q-4.861,0-6.98,2.269t-2.123,6.686v4.153h-4.2v6.892h4.2v20h8.412v-20h5.6l.738-6.892Z" transform="translate(-465.25 -383.975)" fill-rule="evenodd"></path> 5397<title>cms/facebook-icon</title></svg> 5398</a></li> 5399 <li><a href="https://twitter.com/AmericanFlags" class="cmsb49-w-[33px] cmsb49-h-[33px] cmsb49-flex cmsb49-justify-center cmsb49-items-center cmsb49-border-2 cmsb49-rounded-full cmsb49-border-black"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewbox="0 0 40 32.942" class="cmsb49-w-[12px] cmsb49-h-[12px]" role="img"> 5400 <path id="_x30_4.Twitter" d="M49.9,21.4a16.667,16.667,0,0,1-4.7,1.316,8.079,8.079,0,0,0,3.6-4.6,17.146,17.146,0,0,1-5.2,2.024A8.187,8.187,0,0,0,29.4,25.8a7.675,7.675,0,0,0,.2,1.872,22.993,22.993,0,0,1-16.85-8.653A8.385,8.385,0,0,0,15.25,30.1a7.8,7.8,0,0,1-3.7-1.012,8.363,8.363,0,0,0,6.55,8.248,8.9,8.9,0,0,1-3.7.152,8.247,8.247,0,0,0,7.65,5.769A16.384,16.384,0,0,1,9.9,46.7a22.933,22.933,0,0,0,12.6,3.744c15.1,0,23.3-12.65,23.3-23.58a7.562,7.562,0,0,0-.05-1.063,16.389,16.389,0,0,0,4.15-4.4Z" transform="translate(-9.9 -17.5)"></path> 5401<title>cms/twitter-icon</title></svg> 5402</a></li> 5403 <li><a href="https://www.americanflags.com/blog" class="cmsb49-w-[33px] cmsb49-h-[33px] cmsb49-flex cmsb49-justify-center cmsb49-items-center cmsb49-border-2 cmsb49-rounded-full cmsb49-border-black"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="18" height="18" viewbox="0 0 40 40" class="cmsb49-w-[12px] cmsb49-h-[12px]" role="img"> 5404 <defs> 5405 <clippath id="clip-path"> 5406 <rect id="Rectangle_2684" data-name="Rectangle 2684" width="40" height="40" fill="none"></rect> 5407 </clippath> 5408 </defs> 5409 <g id="Group_58820" data-name="Group 58820" transform="translate(0.182 0.182)"> 5410 <g id="Group_327" data-name="Group 327" transform="translate(-0.182 -0.182)" clip-path="url(#clip-path)"> 5411 <path id="Path_5510" data-name="Path 5510" d="M34.5,9.615,29.62,4.737l-9.082,9.157,4.878,4.876ZM16.17,21.634a1.15,1.15,0,0,0,1.5,1.5l5.838-3.021-4.324-4.324ZM38.9,5.213a1.149,1.149,0,0,0,0-1.627L35.646.337a1.146,1.146,0,0,0-1.624,0L31.247,3.113l4.876,4.876ZM3.447,32.262H4.6v5.825A1.152,1.152,0,0,0,6.56,38.9L13.2,32.262H26.591a3.451,3.451,0,0,0,3.447-3.447V17.4l-3.625,3.628a3.382,3.382,0,0,1-1.1.738l-6.581,3.413a3.62,3.62,0,0,1-1.5.351,3.408,3.408,0,0,1-.991-.165H8.046a1.15,1.15,0,1,1,0-2.3h5.82a3.445,3.445,0,0,1,.183-2.315L17.6,13.86a3.145,3.145,0,0,1,.667-.939l3.649-3.649H3.447A3.451,3.451,0,0,0,0,12.72V28.814a3.451,3.451,0,0,0,3.447,3.447" transform="translate(0.382 0.382)"></path> 5412 </g> 5413 </g> 5414<title>cms/blogx-icon</title></svg> 5415</a></li> 5416<li><a href="https://www.instagram.com/americanflagsonline/" class="cmsb49-w-[33px] cmsb49-h-[33px] cmsb49-flex cmsb49-justify-center cmsb49-items-center cmsb49-border-2 cmsb49-rounded-full cmsb49-border-black"> <picture> 5417 5418 <source type="image/webp" 5419 5420 srcset="https://www.americanflags.com/media/opti_image/webp/wysiwyg/instagram-transparent.webp"> 5421 5422 <source type="image/png" 5423 5424 srcset="https://www.americanflags.com/media/wysiwyg/instagram-transparent.png"> 5425 5426 <img src="https://www.americanflags.com/media/wysiwyg/instagram-transparent.png" alt="" width="15" height="15" loading="lazy" decoding="async" /> </picture> 5427 5428</a></li> 5429 </ul> 5430 </div> 5431 <div> 5432 <h4 class="cmsb49-mb-[20px]">Payment Options</h4> 5433 <ul class="cmsb49-flex cmsb49-items-center cmsb49-gap-[10px] cmsb49-mb-[20px]"> 5434 <li class="cmsb49-w-[60px] cmsb49-h-[40px] cmsb49-bg-white cmsb49-flex cmsb49-justify-center cmsb49-items-center"> <picture> 5435 5436 <source type="image/webp" 5437 5438 srcset="https://www.americanflags.com/media/opti_image/webp/wysiwyg/Hyva/logo_mastercard.webp"> 5439 5440 <source type="image/jpg"
5441 5442 srcset="https://www.americanflags.com/media/wysiwyg/Hyva/logo_mastercard.jpg"> 5443 5444 <img class="cmsb49-rounded-[4px]" src="https://www.americanflags.com/media/wysiwyg/Hyva/logo_mastercard.jpg" alt="Master Card" width="120" height="80" /> </picture> 5445 5446</li> 5447 <li class="cmsb49-w-[60px] cmsb49-h-[40px] cmsb49-bg-white cmsb49-flex cmsb49-justify-center cmsb49-items-center"> <picture> 5448 5449 <source type="image/webp" 5450 5451 srcset="https://www.americanflags.com/media/opti_image/webp/wysiwyg/Hyva/logo_amex.webp"> 5452 5453 <source type="image/jpg" 5454 5455 srcset="https://www.americanflags.com/media/wysiwyg/Hyva/logo_amex.jpg"> 5456 5457 <img class="cmsb49-rounded-[4px]" src="https://www.americanflags.com/media/wysiwyg/Hyva/logo_amex.jpg" alt="Amex" width="120" height="80" /> </picture> 5458 5459</li> 5460 <li class="cmsb49-w-[60px] cmsb49-h-[40px] cmsb49-bg-white cmsb49-flex cmsb49-justify-center cmsb49-items-center"> <picture> 5461 5462 <source type="image/webp" 5463 5464 srcset="https://www.americanflags.com/media/opti_image/webp/wysiwyg/Hyva/logo_VISA.webp"> 5465 5466 <source type="image/jpg" 5467 5468 srcset="https://www.americanflags.com/media/wysiwyg/Hyva/logo_VISA.jpg"> 5469 5470 <img class="cmsb49-rounded-[4px]" src="https://www.americanflags.com/media/wysiwyg/Hyva/logo_VISA.jpg" alt="Visa" width="120" height="80" /> </picture> 5471 5472</li> 5473 <li class="cmsb49-w-[60px] cmsb49-h-[40px] cmsb49-bg-white cmsb49-flex cmsb49-justify-center cmsb49-items-center"> <picture> 5474 5475 <source type="image/webp" 5476 5477 srcset="https://www.americanflags.com/media/opti_image/webp/wysiwyg/Hyva/logo_DISCOVER.webp"> 5478 5479 <source type="image/jpg" 5480 5481 srcset="https://www.americanflags.com/media/wysiwyg/Hyva/logo_DISCOVER.jpg"> 5482 5483 <img class="cmsb49-rounded-[4px]" src="https://www.americanflags.com/media/wysiwyg/Hyva/logo_DISCOVER.jpg" alt="Discover" width="120" height="80" /> </picture> 5484 5485</li> 5486 <li class="cmsb49-w-[60px] cmsb49-h-[40px] cmsb49-bg-white cmsb49-flex cmsb49-justify-center cmsb49-items-center"> <picture> 5487 5488 <source type="image/webp" 5489 5490 srcset="https://www.americanflags.com/media/opti_image/webp/wysiwyg/Hyva/logo_PayPal.webp"> 5491 5492 <source type="image/jpg" 5493 5494 srcset="https://www.americanflags.com/media/wysiwyg/Hyva/logo_PayPal.jpg"> 5495 5496 <img class="cmsb49-rounded-[4px]" src="https://www.americanflags.com/media/wysiwyg/Hyva/logo_PayPal.jpg" alt="PayPal" width="120" height="80" /> </picture> 5497 5498</li> 5499 </ul> 5500 </div> 5501 <div> 5502 <div class="cmsb49-flex cmsb49-items-center cmsb49-gap-[8px]"> 5503 <div><svg xmlns="http://www.w3.org/2000/svg" id="cyber-security" width="20" height="30" viewbox="0 0 27.443 40" class="cmsb49-w-[20px] cmsb49-h-[30px]" role="img"> 5504 <g id="Group_5900" data-name="Group 5900" transform="translate(0 17.547)"> 5505 <g id="Group_5899" data-name="Group 5899"> 5506 <path id="Path_6282" data-name="Path 6282" d="M23.7,211H3.742A3.746,3.746,0,0,0,0,214.742v14.969a3.746,3.746,0,0,0,3.742,3.742H23.7a3.746,3.746,0,0,0,3.742-3.742V214.742A3.746,3.746,0,0,0,23.7,211Zm-8.732,12.244v3.972a1.247,1.247,0,1,1-2.495,0v-3.972a3.742,3.742,0,1,1,2.495,0Z" transform="translate(0 -211)"></path> 5507 </g> 5508 </g> 5509 <g id="Group_5908" data-name="Group 5908" transform="translate(3.742)"> 5510 <g id="Group_5907" data-name="Group 5907"> 5511 <path id="Path_6286" data-name="Path 6286" d="M54.979,0A9.991,9.991,0,0,0,45,9.979v5.073h4.99V9.979a4.99,4.99,0,1,1,9.979,0v5.073h4.99V9.979A9.991,9.991,0,0,0,54.979,0Z" transform="translate(-45)"></path> 5512 </g> 5513 </g> 5514<title>cms/security</title></svg> 5515</div> 5516 <div> 5517 <strong class="cmsb49-text-[14px] cmsb49-text-black cmsb49-font-bold cmsb49-leading-[22px]">Secure Shopping</strong> 5518 <p class="cmsb49-text-[14px] cmsb49-text-gray-900">256 Bit SSL Encryption</p> 5519 </div> 5520 </div> 5521 </div> 5522</div></div></div></div></div></div><div data-content-type="html" data-appearance="default" data-element="main" data-decoded="true"><style> 5523#payment-method-option-braintree_cc_vault,#payment-method-option-braintree_paypal_vault{ 5524display:none; 5525} 5526.item.discount .label { 5527 max-width: 60% !important; 5528} 5529 5530</style></div> </div> 5531 </div> 5532 <div class="container py-[20px] px-[15px] mx-auto flex items-center justify-center"> 5533 <p class="mb-0 text-gray-900 text-[12px] text-center"> 5534 <!-- Enable the following line to show the copyright information configured in the admin --> 5535<span class="block"><span>COPYRIGHT ©
55352001-2026 AMERICANFLAGS.COM. ALL RIGHTS RESERVED.</span></span>
5536<script> 5537 /* 5538(function() { 5539 const isMobile = /Mobi|Android/i.test(navigator.userAgent); 5540 5541 function loadMerchantWidget() { 5542 const script = document.createElement('script'); 5543 script.type = 'text/javascript'; 5544 script.id = 'merchantWidgetScript'; 5545 script.defer = true; 5546 script.src = ''; 5547 5548 script.addEventListener('load', function () { 5549 if (typeof merchantwidget !== 'undefined') { 5550 merchantwidget.start({ 5551 position: 'RIGHT_BOTTOM', 5552 sideMargin: 21, 5553 mobileSideMargin: 11, 5554 top: '50%', 5555 transform: 'translateY(-50%)' 5556 }); 5557 } 5558 }); 5559 5560 document.head.appendChild(script); 5561 } 5562 5563 if (isMobile) { 5564 // Defer until user interacts (mobile optimization) 5565 ['scroll', 'touchstart'].forEach(evt => 5566 window.addEventListener(evt, loadMerchantWidget, { once: true, passive: true }) 5567 ); 5568 } else { 5569 // Desktop: wait for Hyväâs init event 5570 window.addEventListener('init-external-scripts', loadMerchantWidget, { once: true, passive: true }); 5571 } 5572})();*/ 5573</script>
5573 5574 5575<style> 5576/*#merchantwidget-iframe-wrapper { top:50% !important; transform:translateY(-50%); bottom:inherit !important; }*/ 5577</style> 5578 </p> 5579 </div> 5580</div> 5581 5582</div></footer><span style="display:none;"> 5583 <span id="klevu_sessionId"></span> 5584 <span id="klevu_loginCustomerGroup"></span> 5585 <span id="klevu_loginCustomerEmail"></span> 5586 <span id="klevu_shopperIP"></span> 5587</span> 5588
5589<script> 5590 var updateKlevuSessionDataElementsFromLocalStorage = function() { 5591 var klevuLocalStorage = JSON.parse(window.localStorage.getItem( 5592 'klv_mage' 5593 ) || '{}'); 5594 var klevuMagentoCustomerDataKey = 'customerData'; 5595 var klevuLocalStorageCustomerData = klevuLocalStorage.hasOwnProperty(klevuMagentoCustomerDataKey) 5596 ? klevuLocalStorage[klevuMagentoCustomerDataKey] 5597 : {}; 5598 document.getElementById('klevu_sessionId').innerText = klevuLocalStorageCustomerData.hasOwnProperty('session_id') 5599 ? klevuLocalStorageCustomerData.session_id 5600 : ''; 5601 document.getElementById('klevu_loginCustomerGroup').innerText = klevuLocalStorageCustomerData.hasOwnProperty('customer_group_id') 5602 ? klevuLocalStorageCustomerData.customer_group_id 5603 : ''; 5604 document.getElementById('klevu_loginCustomerEmail').innerText = klevuLocalStorageCustomerData.hasOwnProperty('id_code') 5605 ? klevuLocalStorageCustomerData.id_code 5606 : ''; 5607 document.getElementById('klevu_shopperIP').innerText = klevuLocalStorageCustomerData.hasOwnProperty('shopper_ip') 5608 ? klevuLocalStorageCustomerData.shopper_ip 5609 : ''; 5610 } 5611 updateKlevuSessionDataElementsFromLocalStorage(); 5612 5613 document.addEventListener( 5614 'klevu.customerData.loaded', 5615 updateKlevuSessionDataElementsFromLocalStorage 5616 ); 5617</script>
vendor: 1 bytes, line 5617
5617
5618<script type="text/javascript"> 5619 var klevu_cms_module_enabled=true; 5620</script>
vendor: 1 bytes, line 5620
5620
5621<script type="text/javascript"> 5622// Enable CMS for klevu template 5623 var klevu_cmsSearchEnabled = false; 5624 5625</script>
5625 5626 5627
5627<script type="text/javascript"> 5628 function klevu_addtocart(id, url, qty) { 5629 let form = document.createElement("form"); 5630 form.setAttribute('method', "post"); 5631 form.setAttribute('action', "https://www.americanflags.com/checkout/cart/add/"); 5632 5633 let formKey = document.createElement("input"); //input element form_key, hidden 5634 formKey.setAttribute('type', "hidden"); 5635 formKey.setAttribute('name', "form_key"); 5636 formKey.setAttribute('value', hyva.getFormKey()); 5637 5638 let productId = document.createElement("input"); //input element product, hidden 5639 productId.setAttribute('type', "hidden"); 5640 productId.setAttribute('name', "product"); 5641 productId.setAttribute('value', id); 5642 5643 let quantity = document.createElement("input"); //input element qty, hidden 5644 quantity.setAttribute('type', "hidden"); 5645 quantity.setAttribute('name', "qty"); 5646 quantity.setAttribute('value', qty); 5647 5648 form.appendChild(formKey); 5649 form.appendChild(productId); 5650 form.appendChild(quantity); 5651 5652 document.body.appendChild(form); 5653 form.submit(); 5654 document.body.removeChild(form); 5655 } 5656 </script>
5656 5657
5657<script type="text/javascript"> 5658 (function() { 5659 const isMobile = /Mobi|Android/i.test(navigator.userAgent); 5660 5661 function loadClarity() { 5662 (function(c,l,a,r,i,t,y){ 5663 c[a]=c[a]||function(){(c[a].q=c[a].q||[]).push(arguments)}; 5664 t=l.createElement(r);t.async=1;t.src="https://www.clarity.ms/tag/"+i; 5665 y=l.getElementsByTagName(r)[0];y.parentNode.insertBefore(t,y); 5666 })(window, document, "clarity", "script", "f5jh95rzoc"); 5667 5668 } 5669 5670 if (isMobile) { 5671 // Defer until user interacts (mobile optimization) 5672 ['scroll', 'touchstart'].forEach(evt => 5673 window.addEventListener(evt, loadClarity, { once: true, passive: true }) 5674 ); 5675 } else { 5676 // Desktop: wait for Hyväâs init event 5677 window.addEventListener('init-external-scripts', loadClarity, { once: true, passive: true }); 5678 } 5679 })(); 5680 </script>
5680 5681
5682<script> 5683 (() => { 5684 function src_default(Alpine) { 5685 Alpine.directive("intersect", (el, { value, expression, modifiers }, { evaluateLater, cleanup }) => { 5686 let evaluate = evaluateLater(expression); 5687 let options = { 5688 rootMargin: getRootMargin(modifiers), 5689 threshold: getThreshhold(modifiers) 5690 }; 5691 let observer = new IntersectionObserver((entries) => { 5692 entries.forEach((entry) => { 5693 if (entry.isIntersecting === (value === "leave")) 5694 return; 5695 evaluate(); 5696 modifiers.includes("once") && observer.disconnect(); 5697 }); 5698 }, options); 5699 observer.observe(el); 5700 cleanup(() => { 5701 observer.disconnect(); 5702 }); 5703 }); 5704 } 5705 function getThreshhold(modifiers) { 5706 if (modifiers.includes("full")) 5707 return 0.99; 5708 if (modifiers.includes("half")) 5709 return 0.5; 5710 if (!modifiers.includes("threshold")) 5711 return 0; 5712 let threshold = modifiers[modifiers.indexOf("threshold") + 1]; 5713 if (threshold === "100") 5714 return 1; 5715 if (threshold === "0") 5716 return 0; 5717 return Number(`.${threshold}`); 5718 } 5719 function getLengthValue(rawValue) { 5720 let match = rawValue.match(/^(-?[0-9]+)(px|%)?$/); 5721 return match ? match[1] + (match[2] || "px") : void 0; 5722 } 5723 function getRootMargin(modifiers) { 5724 const key = "margin"; 5725 const fallback = "0px 0px 0px 0px"; 5726 const index = modifiers.indexOf(key); 5727 if (index === -1) 5728 return fallback; 5729 let values = []; 5730 for (let i = 1; i < 5; i++) { 5731 values.push(getLengthValue(modifiers[index + i] || "")); 5732 } 5733 values = values.filter((v) => v !== void 0); 5734 return values.length ? values.join(" ").trim() : fallback; 5735 } 5736 5737 document.addEventListener("alpine:init", () => { 5738 window.Alpine.plugin(src_default); 5739 }); 5740 })(); 5741</script>
vendor: 1 bytes, line 5741
5741
5742<script> 5743 for (const [selector, deferUntil] of Object.entries({".product-slider section[x-data]":"intersect",".product-info [x-data]":"intersect","#filters-content [x-data]":"intersect","#review_form":"intersect","section[x-data^=initRecentlyViewedProductsComponent]":"intersect","div[x-data^=initBundleOptions]":"intersect","#product_addtocart_form [x-data]":"intersect","#notice-cookie-block":"intersect"})) { 5744 document.querySelectorAll(selector).forEach(el => el.setAttribute('x-defer', `${deferUntil}`)); 5745 } 5746</script>
vendor: 1 bytes, line 5746
5746
5747<script> 5748 (function () { 5749 "use strict"; 5750 5751 const hasAlpine = new Promise(resolve => { 5752 window.addEventListener('alpine:initialized', resolve, {once: true, passive: true}); 5753 }); 5754 5755 const hasInteract = new Promise(resolve => { 5756 (events => { 5757 const onInteract = () => { 5758 resolve(); 5759 events.forEach(type => window.removeEventListener(type, onInteract)); 5760 } 5761 events.forEach(type => window.addEventListener(type, onInteract, {once: true, passive: true})) 5762 })(['touchstart', 'mouseover', 'wheel', 'scroll', 'keydown']) 5763 }); 5764 5765 const onIntersect = (el) => { 5766 return new Promise(resolve => { 5767 const observer = new IntersectionObserver(entries => { 5768 for (const entry of entries) { 5769 if (entry.isIntersecting) { 5770 observer.disconnect() 5771 resolve(); 5772 } 5773 } 5774 }, {}); 5775 observer.observe(el); 5776 }); 5777 } 5778 5779 function runComponent(el) { 5780 hasAlpine.then(() => { 5781 el.removeAttribute('x-ignore'); 5782 queueMicrotask(() => Alpine.initTree(el)); 5783 }); 5784 } 5785 5786 function initDeferredComponents() { 5787 document.querySelectorAll('[x-data][x-defer]').forEach(el => { 5788 el.setAttribute('x-ignore', ''); 5789 const deferUntil = (el.getAttribute('x-defer') || '').trim(); 5790 switch (deferUntil) { 5791 case 'interact': 5792 hasInteract.then(() => runComponent(el)); 5793 break; 5794 case 'intersect': 5795 onIntersect(el).then(() => runComponent(el)) 5796 break; 5797 case 'idle': 5798 window.requestIdleCallback 5799 ? window.requestIdleCallback(() => runComponent(el), {timeout: 4000}) 5800 : setTimeout(() => runComponent(el), 4000); 5801 break; 5802 case 'eager': 5803 runComponent(el); 5804 break; 5805 default: 5806 if (deferUntil.startsWith('event:') && deferUntil.length > 6) { 5807 window.addEventListener(deferUntil.substring(6), () => runComponent(el), {once: true, passive: true}); 5808 } 5809 } 5810 }); 5811 } 5812 5813 window.addEventListener('alpine:init', initDeferredComponents, {once: true, passive: true}); 5814 })() 5815</script>
5815 5816
5817<script type="module" 5818 src="https://www.americanflags.com/static/frontend/Krish/AmericanFlags/en_US/Hyva_Theme/js/alpine3.min.js" 5819 defer 5820 crossorigin 5821></script>
vendor: 1 bytes, line 5821
5821
5822<script> 5823 'use strict'; 5824 function dispatchMessages(messages, hideAfter) { 5825 const messagesEvent = new CustomEvent("messages-loaded", { 5826 detail: { 5827 messages: messages, 5828 hideAfter: hideAfter 5829 } 5830 }); 5831 window.dispatchEvent(messagesEvent); 5832 } 5833 5834 if (typeof hyva === 'undefined' || (!hyva.getBrowserStorage || !hyva.getCookie || !hyva.setCookie)) { 5835 console.warn("Hyvä helpers are not loaded yet. Make sure they are included before this script"); 5836 } 5837 5838 (function( hyva, undefined ) { 5839 5840 hyva.initFormKey = () => { 5841 const inputSelector = 'input[name="form_key"]', 5842 formKey = hyva.getFormKey(); 5843 5844 Array.from(document.querySelectorAll(inputSelector)).map(function (input) { 5845 input.value = formKey 5846 }); 5847 } 5848 5849 hyva.initMessages = () => { 5850 try { 5851 const messages = hyva.getCookie('mage-messages'); 5852 window.mageMessages = messages ? JSON.parse(decodeURIComponent(messages).replace(/\+/g, ' ')) : []; 5853 5854 dispatchMessages(window.mageMessages); 5855 5856 // empty `mage-messages` cookie 5857 const skipSetDomain = true; 5858 hyva.setCookie('mage-messages','', -1, skipSetDomain); 5859 5860 } catch (error) { 5861 console.warn('Error parsing Cookie Messages:', error); 5862 } 5863 } 5864 5865 window.addEventListener('DOMContentLoaded', hyva.initFormKey); 5866 hyva.alpineInitialized(hyva.initMessages) 5867 5868 }( window.hyva = window.hyva || {} )); 5869</script>
vendor: 1 bytes, line 5869
5869
5870<script> 5871 'use strict'; 5872 { 5873 const private_content_key = 'mage-cache-storage'; 5874 const private_content_expire_key = 'mage-cache-timeout'; 5875 const private_content_version_key = 'private_content_version'; 5876 const section_data_ids_key = 'section_data_ids'; 5877 const mage_cache_session_id_key = 'mage-cache-sessid'; 5878 const last_visited_store_key = 'last_visited_store'; 5879 5880 const ttl = 3600; 5881 5882 if (typeof hyva === 'undefined' || (!hyva.getBrowserStorage || !hyva.getCookie || !hyva.setCookie)) { 5883 console.warn("Hyvä helpers are not loaded yet. Make sure they are included before this script"); 5884 } 5885 5886 function loadSectionData () { 5887 const browserStorage = hyva.getBrowserStorage(); 5888 if (!browserStorage) { 5889 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 5890 [{ 5891 type: "warning", 5892 text: "Please enable LocalStorage in your browser." 5893 }] 5894 ); 5895 return; 5896 } 5897 try { 5898 let isInvalid = false; 5899 5900 if (hyva.getCookie(last_visited_store_key) !== CURRENT_STORE_CODE) { 5901 isInvalid = true; 5902 } 5903 hyva.setCookie(last_visited_store_key, CURRENT_STORE_CODE, false, false); 5904 5905 if (!hyva.getCookie(mage_cache_session_id_key)) { 5906 isInvalid = true; 5907 browserStorage.removeItem(private_content_key); 5908 const skipSetDomain = true; 5909 const days = false; 5910 hyva.setCookie(mage_cache_session_id_key, true, days, skipSetDomain) 5911 } 5912 5913 const cookieVersion = hyva.getCookie(private_content_version_key); 5914 const storageVersion = browserStorage.getItem(private_content_version_key); 5915 5916 if (cookieVersion && !storageVersion || cookieVersion !== storageVersion) { 5917 isInvalid = true; 5918 } 5919 5920 const privateContentExpires = browserStorage.getItem(private_content_expire_key); 5921 if (privateContentExpires && new Date(privateContentExpires) < new Date()) { 5922 browserStorage.removeItem(private_content_key); 5923 } 5924 5925 if (isInvalid && cookieVersion) { 5926 fetchPrivateContent([]); 5927 } else if (cookieVersion && storageVersion && cookieVersion === storageVersion) { 5928 const privateContent = JSON.parse(browserStorage.getItem(private_content_key)); 5929 if ( 5930 privateContent && 5931 privateContentExpires && 5932 privateContent.cart && 5933 privateContent.customer 5934 ) { 5935 dispatchPrivateContent(privateContent); 5936 } else { 5937 fetchPrivateContent([]); 5938 } 5939 } else { 5940 if (document.getElementById('default-section-data')) { 5941 const privateContent = JSON.parse(document.getElementById('default-section-data').innerText.trim()); 5942 dispatchPrivateContent(privateContent); 5943 } else { 5944 dispatchPrivateContent({}); 5945 } 5946 } 5947 5948 } catch (error) { 5949 console.warn('Error retrieving Private Content:', error); 5950 } 5951 } 5952 5953 hyva.alpineInitialized(loadSectionData) 5954 window.addEventListener('reload-customer-section-data', loadSectionData); 5955 5956 function dispatchPrivateContent(data) { 5957 const privateContentEvent = new CustomEvent("private-content-loaded", { 5958 detail: { 5959 data: data 5960 } 5961 }); 5962 window.dispatchEvent(privateContentEvent); 5963 } 5964 5965 function fetchPrivateContent(sections) { 5966 fetch(`${BASE_URL}customer/section/load/?sections=${encodeURIComponent(sections.join(','))}`, { 5967 method: 'GET', 5968 headers: { 5969 'Content-Type': 'application/json', 5970 'X-Requested-With': 'XMLHttpRequest' 5971 } 5972 }) 5973 .then(response => response.json()) 5974 .then( 5975 data => { 5976 if (data) { 5977 try { 5978 const browserStorage = hyva.getBrowserStorage(); 5979 5980 // merge new data preserving non-invalidated sections 5981 const oldSectionData = JSON.parse(browserStorage.getItem(private_content_key) || '{}') || {}; 5982 5983 if ((! data.cart || ! data.cart.cartId) && oldSectionData['checkout-data']) { 5984 delete oldSectionData['checkout-data']; 5985 } 5986 const newSectionData = Object.assign(oldSectionData, data); 5987 5988 dispatchPrivateContent(newSectionData); 5989 5990 // don't persist messages, they've been dispatched already 5991 if (newSectionData.messages && newSectionData.messages.messages ) { 5992 newSectionData.messages.messages = []; 5993 } 5994 5995 browserStorage.setItem(private_content_key, JSON.stringify(newSectionData)); 5996 5997 const expiresAt = new Date(Date.now() + (ttl * 1000)).toISOString(); 5998 browserStorage.setItem(private_content_expire_key, expiresAt); 5999 6000 const newCookieVersion = hyva.getCookie(private_content_version_key); 6001 browserStorage.setItem(private_content_version_key, newCookieVersion); 6002 6003 // We don't need the section_data_ids in Hyvä, but we store them for compatibility 6004 // with Luma Fallback. Otherwise, not all sections are loaded in Luma Checkout 6005 hyva.setCookie( 6006 section_data_ids_key, 6007 JSON.stringify( 6008 Object.keys(data).reduce((sectionDataIds, sectionKey) => { 6009 sectionDataIds[sectionKey] = data[sectionKey]['data_id']; 6010 return sectionDataIds; 6011 }, {}) 6012 ), 6013 false, 6014 true 6015 ); 6016 } catch (error) { 6017 console.warn("Couldn't store privateContent", error); 6018 } 6019 } 6020 } 6021 ); 6022 } 6023 } 6024</script>
vendor: 1 bytes, line 6024
6024
6025<script> 6026 (() => { 6027 document.addEventListener('submit', event => event.target.action = event.target.action.replace('%25uenc%25', hyva.getUenc())); 6028 })() 6029</script>
vendor: 1 bytes, line 6029
6029
6030<script> 6031 (events => { 6032 const dispatchUserInteractionEvent = () => { 6033 events.forEach(type => window.removeEventListener(type, dispatchUserInteractionEvent)) 6034 window.dispatchEvent(new Event('init-external-scripts')) 6035 }; 6036 events.forEach(type => window.addEventListener(type, dispatchUserInteractionEvent, {once: true, passive: true})) 6037 })(['touchstart', 'mouseover', 'wheel', 'keydown']) 6038</script>
vendor: 1 bytes, line 6038
6038
6039<script> 6040 if (HTMLScriptElement.supports && HTMLScriptElement.supports('speculationrules')) { 6041 const specScript = document.createElement('script'); 6042 specScript.type = 'speculationrules'; 6043 specRules = { 6044 'prerender': [{ 6045 'where': { 6046 'and': [ 6047 { 'href_matches': '/*.html' }, 6048 { 'not': {'selector_matches': '.do-not-prerender'}} 6049 ] 6050 }, 6051 'eagerness': 'moderate' 6052 }] 6053 }; 6054 specScript.textContent = JSON.stringify(specRules); 6055 document.body.append(specScript); 6056 } 6057</script>
6057 6058
6059<script> 6060 function initConfigurableOptions(productId, optionConfig) { 6061 6062 function findPathParam(key) { 6063 const baseUrl = (BASE_URL.substring(0, 2) === '//' ? 'http:' : '') + BASE_URL; 6064 const baseUrlParts = (new URL(baseUrl)).pathname.replace(/\/$/, '').split('/'); 6065 const pathParts = window.location.pathname.split('/').slice(baseUrlParts.length + 3); 6066 for (let i = 0; i < pathParts.length; i += 2) { 6067 if (pathParts[i] === key && pathParts.length > i) { 6068 return pathParts[i + 1]; 6069 } 6070 } 6071 } 6072 6073 return { 6074 optionConfig, 6075 productId, 6076 itemId: (new URLSearchParams(window.location.search)).get('id') || findPathParam('id'), 6077 allowedAttributeOptions: [], 6078 selectedValues: [], 6079 init() { 6080 this.findAllowedAttributeOptions(); 6081 this.loadPreSelectedOptions(); 6082 this.$nextTick(() => { 6083 if (typeof this.optionConfig.defaultValues === 'object') { 6084 for (const [attributeId, value] of Object.entries(this.optionConfig.defaultValues)) { 6085 this.changeOption(attributeId, value + ''); 6086 } 6087 } 6088 }); 6089 }, 6090 loadPreSelectedOptions(){ 6091 const url = window.location.href; 6092 const hashIndex = url.indexOf('#'); 6093 if (hashIndex > -1) { 6094 const queryString = url.substring(hashIndex + 1); 6095 const urlParams = new URLSearchParams(queryString); 6096 this.params = Object.fromEntries(urlParams.entries()); 6097 for (var key in this.params) { 6098 if (this.params.hasOwnProperty(key)) { 6099 this.changeOption(key, this.params[key] + ''); 6100 this.selectedValues[key] = this.params[key]; 6101 } 6102 } 6103 } 6104 }, 6105 findSimpleIndex() { 6106 this.productIndex = this.calculateSimpleIndexForPartialSelection(this.selectedValues); 6107 }, 6108 calculateSimpleIndexForPartialSelection(selectedValues) { 6109 if (selectedValues.length === 0) return 0; 6110 let productIndexIds = Object.keys(this.optionConfig.index); 6111 Object.keys(this.optionConfig.attributes).forEach((attribute) => { 6112 const productsWithAttributeMatch = selectedValues[attribute] 6113 ? productIndexIds.filter((productIndex) => { 6114 return this.optionConfig.index[productIndex][attribute] === this.selectedValues[attribute] 6115 }) 6116 : []; 6117 6118 productIndexIds = productsWithAttributeMatch.length ? productsWithAttributeMatch : productIndexIds 6119 }) 6120 return productIndexIds[0]; 6121 }, 6122 calculateSimpleIndexForFullSelection(selectedValues) { 6123 const productIndexes = this.optionConfig.index; 6124 return Object.keys(productIndexes).find(productIndex => { 6125 const productCandidateOptions = productIndexes[productIndex]; 6126 6127 for (const productOption in productCandidateOptions) { 6128 if ( 6129 ! selectedValues[productOption] || 6130 selectedValues[productOption] !== productCandidateOptions[productOption] 6131 ) { 6132 return false; 6133 } 6134 } 6135 return productIndex; 6136 }); 6137 }, 6138 productIndex: 0, 6139 findAllowedAttributeOptions() { 6140 this.allowedAttributeOptions = this.calculateAllowedAttributeOptions(this.selectedValues); 6141 }, 6142 calculateAllowedAttributeOptions(selectedValues) { 6143 const allAttributes = this.optionConfig.attributes; 6144 const allAttributesSorted = Object.values(allAttributes).sort((a,b) => { 6145 return a.position - b.position 6146 }); 6147 6148 const newAllowedAttributeOptions = []; 6149 6150 allAttributesSorted.forEach(attribute => { 6151 const selectionWithoutAttr = Object.assign({}, this.removeAttrFromSelection(selectedValues, attribute.id)); 6152 const availableIndexes = this.calculateAvailableProductIndexes(selectionWithoutAttr); 6153 newAllowedAttributeOptions[attribute.id] = allAttributes[attribute.id].options.filter(option => { 6154 return !!option.products.find(product => { 6155 return availableIndexes.includes(product); 6156 }) 6157 }); 6158 }); 6159 return newAllowedAttributeOptions; 6160 }, 6161 calculateAvailableProductIndexes(selectedOptions) { 6162 if (Object.keys(selectedOptions).length === 0) { 6163 if (Object.values(this.optionConfig.salable || {}).length) { 6164 return [].concat.apply([], [].concat.apply([], Object.values(this.optionConfig.salable).map(Object.values))).filter((x, i, a) => a.indexOf(x) === i) 6165 } 6166 return Object.keys(this.optionConfig.index); 6167 } 6168 6169 const selectedIds = Object.keys(selectedOptions); 6170 if (Object.values(this.optionConfig.salable || {}).length) { 6171 const selectedOptionIndexes = selectedIds.map(attrId => { 6172 const optionValue = selectedOptions[attrId]; 6173 return this.optionConfig.salable[attrId] && this.optionConfig.salable[attrId][optionValue] || [] 6174 }) 6175 return selectedOptionIndexes.reduce((acc, optionIndexes) => { 6176 return acc.filter(index => optionIndexes.includes(index)); 6177 }); 6178 } else { 6179 const productIndexes = this.optionConfig.index; 6180 return Object.keys(productIndexes).filter(index => { 6181 for (const attrId of selectedIds) { 6182 if (productIndexes[index][attrId] !== `${selectedOptions[attrId]}`) return false 6183 } 6184 return true 6185 }); 6186 } 6187 }, 6188 findAttributeByOptionId(optionId) { 6189 for (const attributeId in this.optionConfig.attributes) { 6190 const attributeOptions = this.optionConfig.attributes[attributeId].options || []; 6191 if (attributeOptions.find(option => option.id === optionId)) { 6192 return attributeId; 6193 } 6194 } 6195 }, 6196 getAllowedAttributeOptions(attributeId) { 6197 return this.allowedAttributeOptions[attributeId] || [] 6198 }, 6199 getProductIdsForOption(option) { 6200 const attributeId = this.findAttributeByOptionId(option.id); 6201 const allOptions = this.optionConfig.attributes[attributeId]; 6202 const opt = (allOptions && allOptions.options || []).find(o => o.id === option.id); 6203 return opt && opt.products 6204 ? opt.products 6205 : []; 6206 }, 6207 findProductIdsForPartialSelection(optionSelection) { 6208 const candidateProducts = Object.values(optionSelection).reduce((candidates, optionId) => { 6209 const newCandidates = this.getProductIdsForOption({id: optionId}); 6210 return candidates === null 6211 ? newCandidates 6212 : candidates.filter(productId => newCandidates.includes(productId)); 6213 }, null); 6214 return candidateProducts || []; 6215 },
6216 findCheapestProductForPartialSelection(optionSelection) { 6217 const candidateProducts = this.findProductIdsForPartialSelection(optionSelection); 6218 return candidateProducts.reduce((cheapest, simpleIdx) => { 6219 // in the first iteration we start with simpleIdx as the currently cheapest product 6220 if (! this.optionConfig.optionPrices[cheapest]) return simpleIdx; 6221 const knownCheapestPrice = this.optionConfig.optionPrices[cheapest].finalPrice.amount; 6222 return knownCheapestPrice > this.optionConfig.optionPrices[simpleIdx].finalPrice.amount 6223 ? simpleIdx 6224 : cheapest; 6225 }, 0) 6226 }, 6227 findProductIdToUseForOptionPrice(option) { 6228 // try to find a product for a complete selection 6229 const attributeId = this.findAttributeByOptionId(option.id); 6230 const optionSelection = Object.assign({}, this.selectedValues, {[attributeId]: option.id}); 6231 const matchingSimpleIndex = this.calculateSimpleIndexForFullSelection(optionSelection); 6232 // if there is no complete selection, use the cheapest product for the option 6233 return matchingSimpleIndex || this.findCheapestProductForPartialSelection(optionSelection); 6234 }, 6235 getAttributeOptionLabel(option) { 6236 const optionProduct = this.findProductIdToUseForOptionPrice(option); 6237 if ((! optionProduct) || (optionProduct === this.productIndex)) { 6238 return option.label; 6239 } 6240 6241 const currentPrice = this.getOptionPriceAdjustmentBasePrice(); 6242 6243 if (this.optionConfig.optionPrices[optionProduct]) { 6244 const optionPrice = this.optionConfig.optionPrices[optionProduct].finalPrice.amount; 6245 if (optionPrice !== currentPrice){ 6246 return option.label + ' ' + hyva.formatPrice(optionPrice - currentPrice, true); 6247 } 6248 } 6249 return option.label; 6250 }, 6251 getOptionPriceAdjustmentBasePrice() { 6252 if (this.optionConfig.optionPrices[this.productIndex]) { 6253 return this.optionConfig.optionPrices[this.productIndex].finalPrice.amount 6254 } 6255 const cheapestForSelection = this.findCheapestProductForPartialSelection(this.selectedValues); 6256 return this.optionConfig.optionPrices[cheapestForSelection] 6257 ? this.optionConfig.optionPrices[cheapestForSelection].finalPrice.amount 6258 : this.optionConfig.prices.finalPrice.amount; // default price if no option selection 6259 }, 6260 clearOptionIfActive(optionId, value) { 6261 if (this.selectedValues[optionId] === value) { 6262 this.blurLabel() 6263 this.changeOption(optionId, '') 6264 } 6265 }, 6266 removeAttrFromSelection(selectedValues, attributeId) { 6267 attributeId = parseInt(attributeId); 6268 return selectedValues.reduce((newSelection, val, attr) => { 6269 if (attr !== attributeId) { 6270 newSelection[attr] = val; 6271 } 6272 return newSelection; 6273 }, []); 6274 }, 6275 changeOption(attributeId, value) { 6276 if (value === '') { 6277 this.selectedValues = this.removeAttrFromSelection(this.selectedValues, attributeId) 6278 } else if (value && this.getAllowedAttributeOptions(attributeId).find(option => option.id === value)) { 6279 this.selectedValues[attributeId] = value; 6280 } 6281 this.findSimpleIndex(); 6282 this.findAllowedAttributeOptions(); 6283 this.updatePrices(); 6284 this.updateGallery(); 6285 6286 setTimeout(() => { 6287 var selectedValues = {}; 6288 var redioButtons = document.querySelectorAll('input[type=radio]:checked'); 6289 for (let i = 0; i < redioButtons.length; i++) { 6290 selectedValues[redioButtons[i].getAttribute('aria-data')] = redioButtons[i].value; 6291 } 6292 6293 var newUrl = window.location.href.split('#')[0] + '#'; 6294 for (var groupName in selectedValues) { 6295 newUrl += groupName + '=' + selectedValues[groupName] + '&'; 6296 } 6297 newUrl = newUrl.slice(0, -1); // Remove the trailing '&' 6298 window.history.pushState({path: newUrl}, '', newUrl); 6299 6300 if (this.productIndex == 0) { 6301 this.updateRelatedProducts(this.productId,0); 6302 } else { 6303 this.updateRelatedProducts(this.productIndex,this.productId); 6304 } 6305 }, 50); 6306 window.dispatchEvent( 6307 new CustomEvent( 6308 'configurable-selection-changed', 6309 { 6310 detail: { 6311 productId: this.productId, 6312 optionId: attributeId, 6313 value: value, 6314 productIndex: this.productIndex, 6315 selectedValues: this.selectedValues, 6316 candidates: this.findProductIdsForPartialSelection(this.selectedValues), 6317 } 6318 } 6319 ) 6320 ); 6321 }, 6322 updateRelatedProducts(itemId,mainProductId) { 6323 const postUrl = BASE_URL + 'colorswatchpro/index/updateRelatedProducts/id/' + itemId + '/mainProductId/' + mainProductId; 6324 fetch(postUrl, { 6325 method: "GET", 6326 headers: { 6327 "X-Requested-With": "XMLHttpRequest", 6328 }, 6329 }).then(response => { 6330 if (response.ok) { 6331 return response.json(); 6332 } else { 6333 console.warn("GET request failed", response); 6334 } 6335 }).then(itemId => { 6336 var additionaAttributes = itemId.prod_data.additionaAttributes; 6337 var pro_sku = itemId.prod_data.p_sku; 6338 var pro_sku_selector = document.querySelector(".product-detail-value"); 6339 pro_sku_selector.innerHTML = pro_sku; 6340 6341 var pro_short_desc = itemId.prod_data.p_shortDe
6341scription; 6342 var pro_short_desc_selector = document.querySelector(".product-description"); 6343 if (pro_short_desc_selector != null) { 6344 pro_short_desc_selector.innerHTML = pro_short_desc; 6345 } 6346 6347 var pro_usually_ship = itemId.prod_data.usually_ship; 6348 var pro_usually_ship_selector = document.querySelector(".usually_ship"); 6349 pro_usually_ship_selector.innerHTML = pro_usually_ship; 6350 6351 var expected_date_class = itemId.prod_data.expected_date_class; 6352 if (expected_date_class.length > 0) { 6353 document.querySelector(".usuallyShipping").classList.add(expected_date_class); 6354 } else { 6355 document.querySelector(".usuallyShipping").classList.remove("expected_date_text"); 6356 } 6357 6358 var pro_MadeToOrder = itemId.prod_data.MadeToOrder; 6359 var pro_MadeToOrder_selector = document.querySelector(".stock_status"); 6360 pro_MadeToOrder_selector.innerHTML = pro_MadeToOrder; 6361 6362 // var p_des = itemId.prod_data.p_description; 6363 // if (p_des.length < 2) { 6364 // var p_des = itemId.prod_data.parent_description; 6365 // } 6366 // var p_des_selector =document.querySelector('.tab-description'); 6367 // if (p_des_selector != null) { 6368 // p_des_selector.innerHTML = p_des; 6369 // } 6370 6371 // var pro_name = itemId.prod_data.p_name; 6372 // var pro_name_selector = document.querySelector(".base"); 6373 // pro_name_selector.innerHTML = pro_name; 6374 6375 // if (itemId.prod_data.af_flag_size != null) { 6376 // var newurl = window.location.protocol + "//" + window.location.host + window.location.pathname + '#af_flag_size='+itemId.prod_data.af_flag_size; 6377 // window.history.pushState({path:newurl},'',newurl); 6378 // } 6379 6380 var additional_attribut = document.querySelector(".additional-attributes tbody"); 6381 if(document.querySelector(".additional-attributes tbody") != null){ 6382 additional_attribut.innerHTML = additionaAttributes; 6383 } 6384 6385 var checkUL = document.getElementsByClassName('tierPrice'); 6386 var buyAndSave = document.getElementsByClassName('buy-more-save'); 6387 var tierPriceContainer = document.getElementsByClassName('tier-price-container'); 6388 if (checkUL.length > 0) { 6389 buyAndSave[0].style.display = 'block'; 6390 tierPriceContainer[0].style.display = '-webkit-box'; 6391 } 6392 6393 if (checkUL.length == 0) { 6394 buyAndSave[0].style.display = 'none'; 6395 tierPriceContainer[0].style.display = 'none'; 6396 } 6397 6398 objLength = itemId.output.length; 6399 6400 if (objLength > 0) { 6401 document.querySelector("#additional-acc").style.display = 'block'; 6402 6403 html = "<ol class='flex flex-wrap' id='product-items-custom'>"; 6404 for (let i = 0; i < objLength; i++) { 6405 html += '<li class="basis-[48%] mb-[15px]">'; 6406 html += '<div class="flex items-start">'; 6407 html += '<div class="field choice">'; 6408 html += '<span class="hidden">ADD?</span>'; 6409 html += '<input type="checkbox" class="checkbox related focused" id="related-checkbox'+itemId.output[i].id+'" name="related_products[]" value="'+itemId.output[i].id+'" data-id="'+itemId.output[i].id+'"></div>'; 6410 html += '<a aria-label="'+itemId.output[i].name+'" href="'+itemId.output[i].url+'" class="mr-[20px]" style="width: 80px;">'; 6411 html += '<span><span class="product-image-wrapper" style="padding-bottom: 100%;">'; 6412 html += '<img class="product-image-photo rounded-[5px]" alt="'+itemId.output[i].name+'" src="'+BASE_URL + "pub/media/catalog/product" + itemId.output[i].img+'" loading="lazy" width="80px" height="80px" decoding="async">'; 6413 html += '</a><div class="product details product-item-details">'; 6414 html += '<a aria-label="'+itemId.output[i].name+'" class="product-item-link mb-[6px] block" title="U.S. Flag Lapel Pin" href="'+itemId.output[i].url+'">'+itemId.output[i].name+'</a>'; 6415 html += '<span class="text-[14px] font-bold text-green-800 mr-[5px]">$'+itemId.output[i].special_price+'</span>'; 6416 html += '<span class="text-[12px] text-gray-900 line-through">Reg. Price:$'+itemId.output[i].price+'</span>'; 6417 html += itemId.output[i].option; 6418 html += '<div class="flex items-center gap-[10px]"><span class="text-primary">Qty.</span>'; 6419 html += '<input value='+itemId.output[i].min_qty+' type="number" min="1" class="input-text qty w-[55px] h-[26px] border border-[#CCCCCC] rounded-[3px] px-[8px] py-0 mt-2" name="qty_new['+itemId.output[i].id+']" id="qty_new" title="Qty" data-validate="null">'; 6420 html += '<button x-data="initWishlist_6ab581bce6793
6420()" @click.prevent="addToWishlist('+itemId.output[i].id+')" aria-label="Add to Wish List" type="button" class="whishlist-icon" title="Add to Wish List"><span class="sr-only">Add to Wish List</span></button></div>'; 6421 html += '</div></div></li>'; 6422 } 6423 html += '</ol>'; 6424 if(document.getElementById('additional-acc').getElementsByTagName('ol').length >= 1) { 6425 document.getElementById('product-items-custom').remove(); 6426 } 6427 6428 var additional_acc_selector = document.querySelector("#additional-acc"); 6429 additional_acc_selector.innerHTML += html; 6430 6431 return itemId.output; 6432 } 6433 6434 if (objLength == 0) { 6435 document.querySelector("#additional-acc").style.display = 'none'; 6436 } 6437 6438 }); 6439 }, 6440 6441 calculateIsMinimalPrice() { 6442 return ( 6443 this.selectedValues.filter(value => !!value).length < 6444 Object.keys(this.optionConfig.attributes).length 6445 ); 6446 }, 6447 updatePrices() { 6448 const value = this.productIndex ? 6449 this.optionConfig.optionPrices[this.productIndex] : 6450 this.optionConfig.prices; 6451 window.dispatchEvent( 6452 new CustomEvent( 6453 "update-prices-" + this.productId, 6454 { 6455 detail: Object.assign( 6456 value, 6457 { isMinimalPrice: this.calculateIsMinimalPrice() } 6458 ) 6459 } 6460 ) 6461 ); 6462 }, 6463 updateGallery () { 6464 if (this.productIndex) { 6465 const images = this.optionConfig.images[this.productIndex]; 6466 images && window.dispatchEvent(new CustomEvent( 6467 "update-gallery", 6468 { detail: this.sortImagesByPosition(images) } 6469 )); 6470 } else { 6471 window.dispatchEvent(new Event("reset-gallery")); 6472 } 6473 }, 6474 sortImagesByPosition(images) { 6475 return images.sort((x, y) => { 6476 return x.position === y.position ? 0 : (parseInt(x.position) > parseInt(y.position) ? 1 : -1) 6477 }); 6478 }, 6479 onGetCartData(data) { 6480 }, 6481 preselectCartItems(data) { 6482 // pre-select options based on cart data for current (quote) itemId 6483 const cart = data && data.cart; 6484 if (cart && cart.items) { 6485 const cartItem = cart.items.find((item) => { 6486 return ( 6487 item.item_id === this.itemId 6488 && item.product_id === this.productId 6489 ) 6490 }); 6491 if (cartItem && cartItem.options && cartItem.options.length) { 6492 cartItem.options.map(option => { 6493 this.changeOption(option.option_id, option.option_value); 6494 }) 6495 } 6496 } 6497 }, 6498 preselectQuerystringItems() { 6499 // pre-select option like ?size=167 6500 const urlQueryParams = new URLSearchParams(window.location.search.replace('?','')); 6501 this.preselectItemsBasedOnLocation(attribute => urlQueryParams.get(attribute.code)); 6502 }, 6503 preselectLocationHashItems() { 6504 // pre-select option like #144=167 6505 const urlHashParams = new URLSearchParams(window.location.hash.replace('#','')); 6506 this.preselectItemsBasedOnLocation(attribute => urlHashParams.get(attribute.id)); 6507 }, 6508 preselectItemsBasedOnLocation(getLocationValue) { 6509 Object.values(this.optionConfig.attributes).map(attribute => { 6510 this.changeOption(attribute.id, getLocationValue(attribute)) 6511 }); 6512 } 6513 } 6514 } 6515
6516 function initWishlist_6ab581bce6793() { 6517 return { 6518 addToWishlist(productId) { 6519 6520 const postParams = { 6521 action: BASE_URL + "wishlist/index/add/", 6522 data: { 6523 product: productId, 6524 uenc: hyva.getUenc() 6525 } 6526 } 6527 6528 postParams.data['form_key'] = hyva.getFormKey(); 6529 postParams.data['qty'] = document.getElementById(`qty[${productId}]`) 6530 ? document.getElementById(`qty[${productId}]`).value || 1 6531 : 1; 6532 6533 let postData = Object.keys(postParams.data).map(key => { 6534 return `${key}=${postParams.data[key]}`; 6535 }).join('&'); 6536 6537 // take the all the input fields that configure this product 6538 // includes custom, configurable, grouped and bundled options 6539 Array.from(document.querySelectorAll( 6540 '[name^=options], [name^=super_attribute], [name^=bundle_option], [name^=super_group], [name^=links]') 6541 ).map(input => { 6542 if (input.type === "select-multiple") { 6543 Array.from(input.selectedOptions).forEach(option => { 6544 postData += `&${input.name}=${option.value}` 6545 }) 6546 } else { 6547 // skip "checkable inputs" that are not checked 6548 if(!(['radio', 'checkbox', 'select'].includes(input.type) && !input.checked)) { 6549 postData += `&${input.name}=${input.value}` 6550 } 6551 } 6552 }); 6553 fetch(postParams.action, { 6554 "headers": { 6555 "content-type": "application/x-www-form-urlencoded; charset=UTF-8", 6556 }, 6557 "body": postData, 6558 "method": "POST", 6559 "mode": "cors", 6560 "credentials": "include" 6561 }).then((response) => { 6562 if (response.redirected) { 6563 window.location.href = response.url; 6564 } else if (response.ok) { 6565 return response.json(); 6566 } else { 6567 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 6568 [{ 6569 type: "warning", 6570 text: "Could not add item to wishlist." 6571 }], 5000 6572 ); 6573 } 6574 }).then((response) => { 6575 if (!response) { 6576 return; 6577 } 6578 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 6579 [{ 6580 type: (response.success) ? "success" : "error", 6581 text: (response.success) 6582 ? "Product has been added to your Wish List." 6583 : response.error_message 6584 }], 5000 6585 ); 6586 const reloadCustomerDataEvent = new CustomEvent("reload-customer-section-data"); 6587 window.dispatchEvent(reloadCustomerDataEvent); 6588 }).catch((error) => { 6589 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 6590 [{ 6591 type: "error", 6592 text: error 6593 }], 5000 6594 ); 6595 }); 6596 } 6597 } 6598 } 6599 6600 // Function to handle changes in configurable attributes 6601 function handleAttributeChange(selectElement) { 6602 const selectedValue = selectElement.value; 6603 const selectedOption = selectElement.options[selectElement.selectedIndex]; 6604 const childProductId = selectedOption.getAttribute('data-product-id'); 6605 const attributeId = selectElement.dataset.attributeId; 6606 const configProductId = selectElement.dataset.productId; 6607 6608 const jsonData = { 6609 [configProductId]: { 6610 selectedValue: selectedValue, 6611 childProductId: childProductId, 6612 attributeId: attributeId 6613 } 6614 }; 6615 6616 const jsonString = JSON.stringify(jsonData); 6617 6618 const hiddenField = document.getElementById('related-products-field-jason'); 6619 if (hiddenField) { 6620 hiddenField.value = jsonString; 6621 console.log('Hidden field updated with JSON:', jsonString); 6622 } else { 6623 console.error('Hidden field not found.'); 6624 } 6625 } 6626</script>
vendor: 1 bytes, line 6626
6626
6627<script> 6628 function initSwatchOptions(swatchConfig) { 6629 return { 6630 swatchConfig, 6631 getAttributeSwatchData(attributeId) { 6632 const swatchConfig = Object.assign({}, this.swatchConfig[attributeId]); 6633 swatchConfig['details'] = JSON.parse(swatchConfig['additional_data']); 6634 6635 return swatchConfig; 6636 }, 6637 getAllAttributeOptions(attributeId) { 6638 return ( 6639 this.optionConfig.attributes[attributeId] && 6640 this.optionConfig.attributes[attributeId].options 6641 ) || [] 6642 }, 6643 optionIsActive(attributeId, optionId) { 6644 // return true if a product with this option is in stock 6645 return !!this.getAllowedAttributeOptions(attributeId).find( 6646 option => option.id === optionId 6647 ) 6648 }, 6649 optionIsEnabled(attributeId, optionId) { 6650 // return true if a product with this option is enabled 6651 for (const productId in this.optionConfig.index) { 6652 if (this.optionConfig.index[productId][attributeId] === optionId) { 6653 return true; 6654 } 6655 } 6656 return false; 6657 }, 6658 mapSwatchTypeNumberToTypeCode(typeNumber) { 6659 switch ("" + typeNumber) { 6660 case "1": 6661 return "color" 6662 case "2": 6663 return "image" 6664 case "3": 6665 return "empty" 6666 case "0": 6667 default: 6668 return "text" 6669 } 6670 }, 6671 getTypeOfFirstOption(attributeId) { 6672 for (const optionId in this.swatchConfig[attributeId]) { 6673 const option = this.swatchConfig[attributeId][optionId]; 6674 if (typeof option.type !== 'undefined') { 6675 return this.mapSwatchTypeNumberToTypeCode(option.type); 6676 } 6677 } 6678 }, 6679 getVisualSwatchType(attributeId, targetOptionId) { 6680 // If a type configuration is present for the given option id, use it 6681 const config = this.swatchConfig[attributeId]; 6682 if (config[targetOptionId] && typeof config[targetOptionId].type !== 'undefined') { 6683 return this.mapSwatchTypeNumberToTypeCode(config[targetOptionId].type); 6684 } 6685 6686 // Otherwise - if no config is present for the target option - use the type of the first option 6687 // with a type property from the attribute, thus assuming its the same type as the target option. 6688 // (This edge case condition can occur on single swatch products if some options are not salable) 6689 return this.getTypeOfFirstOption(attributeId); 6690 }, 6691 getSwatchType(attributeId, optionId) { 6692 // Deserialize the attribute details the first time they are used 6693 if (this.swatchConfig[attributeId] && ! this.swatchConfig[attributeId].details) { 6694 this.swatchConfig[attributeId] = this.getAttributeSwatchData(attributeId); 6695 } 6696 const type = this.swatchConfig[attributeId] && 6697 this.swatchConfig[attributeId].details && 6698 this.swatchConfig[attributeId].details.swatch_input_type || 6699 "empty"; 6700 return type === 'visual' ? this.getVisualSwatchType(attributeId, optionId) : type; 6701 }, 6702 isTextSwatch(attributeId, optionId) { 6703 return this.getSwatchType(attributeId, optionId) === 'text'; 6704 }, 6705 isVisualSwatch(attributeId, optionId) { 6706 const type = this.getSwatchType(attributeId, optionId); 6707 6708 return ['image', 'color'].includes(type); 6709 }, 6710 getSwatchBackgroundStyle(attributeId, optionId) {
6711 const config = this.getSwatchConfig(attributeId, optionId); 6712 const type = this.getSwatchType(attributeId, optionId); 6713 6714 if (type === "color") { 6715 return 'background-color:' + config.value; 6716 } else if (type === "image") { 6717 return "background: #ffffff url('" + config.value + "') no-repeat center"; 6718 } else { 6719 return ''; 6720 } 6721 }, 6722 getSwatchText(attributeId, optionId) { 6723 const config = this.getSwatchConfig(attributeId, optionId); 6724 return config.label || config.value || this.getOptionLabelFromOptionConfig(attributeId, optionId); 6725 }, 6726 getOptionLabelFromOptionConfig(attributeId, optionId) { 6727 // Fallback if no value is present in swatchConfig data 6728 // Reference issue https://gitlab.hyva.io/hyva-themes/magento2-default-theme/-/issues/190 6729 const option = this.getAllAttributeOptions(attributeId).filter(option => option.id === optionId); 6730 return option && option[0] && option[0].label ||''; 6731 }, 6732 getSwatchConfig(attributeId, optionId) { 6733 return this.swatchConfig[attributeId] && this.swatchConfig[attributeId][optionId] 6734 ? this.swatchConfig[attributeId][optionId] 6735 : false; 6736 }, 6737 activeTooltipItem: false, 6738 tooltipPositionElement: false, 6739 isTooltipVisible() { 6740 return this.activeTooltipItem &&
6741 this.getSwatchConfig( 6742 this.activeTooltipItem.attribute, 6743 this.activeTooltipItem.item 6744 ); 6745 }, 6746 isFirstItemCol() { 6747 return this.activeTooltipItem.index === 0; 6748 }, 6749 getTooltipImageStyle(attributeId, optionId) { 6750 const config = this.getSwatchConfig(attributeId, optionId); 6751 const type = this.getSwatchType(attributeId, optionId); 6752 6753 if (type === "color") { 6754 return 'background-color:' + config.value + '; width: 110px; height: 90px;'; 6755 } else if (type === "image") { 6756 return "background: #ffffff url('" + config.thumb + 6757 "') center center no-repeat; width: 110px; height: 90px;"; 6758 } else { 6759 return 'display:none'; 6760 } 6761 }, 6762 getTooltipPosition() { 6763 return this.tooltipPositionElement ? 6764 `top: ${this.tooltipPositionElement.offsetTop}px;` + 6765 `left: ${ 6766 this.tooltipPositionElement.offsetLeft - ( 6767 this.tooltipPositionElement.closest('.snap') && 6768 this.tooltipPositionElement.closest('.snap').scrollLeft || 6769 0 6770 ) 6771 }px;` : '' 6772 }, 6773 getTooltipLabel() { 6774 return this.getSwatchConfig(this.activeTooltipItem.attribute, this.activeTooltipItem.item).label 6775 }, 6776 focusedLabel: false, 6777 focusLabel(optionId) { 6778 this.focusedLabel = optionId; 6779 }, 6780 blurLabel() { 6781 this.focusedLabel = false; 6782 }, 6783 showSwatches: false, 6784 initShowSwatchesIntersect() { 6785 if ('IntersectionObserver' in window && !window.scrollY) { 6786 let io = new IntersectionObserver( 6787 entries => { 6788 entries.map(entry => { 6789 if (entry.isIntersecting) { 6790 this.showSwatches = true; 6791 io.unobserve(this.$root); 6792 } 6793 }) 6794 } 6795 ); 6796 io.observe(this.$root); 6797 } else { 6798 this.showSwatches = true 6799 } 6800 } 6801 } 6802 } 6803</script>
vendor: 1 bytes, line 6803
6803
6804<script> 6805 'use strict'; 6806 6807 const grecaptchaV2LoadCallbacks = []; 6808 6809 function executeRecaptchaLoadCallbacks () { 6810 while (window.grecaptcha && grecaptchaV2LoadCallbacks.length > 0) { 6811 const callback = grecaptchaV2LoadCallbacks.pop(); 6812 typeof callback === 'string' ? window[callback]() : callback(); 6813 } 6814 } 6815 6816 (function() { 6817 const loadRecaptchaScript = (event) => { 6818 6819 if (window.grecaptcha || !event.target.form) { 6820 return; 6821 } 6822 6823 const url = 'https://www.google.com/recaptcha/api.js?onload=executeRecaptchaLoadCallbacks'; 6824 const siteKey = '6LfTOssUAAAAAAn03TpfkeZmqKNCU0m5L\u002DnfWXgA'; 6825 const script = document.createElement('script'); 6826 script.type = 'text/javascript'; 6827 script.src = siteKey ? `${url}&render=${siteKey}` : `${url}&render=explicit`; 6828 script.async = true; 6829 document.head.appendChild(script); 6830 6831 script.addEventListener('load', () => { 6832 Array.from(document.querySelectorAll('button[data-recaptcha-btn]:disabled')).forEach(btn => btn.removeAttribute('disabled')); 6833 }); 6834 } 6835 6836 window.forceLoadRecaptchaScript = (form) => { 6837 loadRecaptchaScript({target: {form: form || 'dummy'}}); 6838 executeRecaptchaLoadCallbacks(); 6839 }; 6840 6841 document.body.addEventListener('input', loadRecaptchaScript, { once: true }); 6842 document.body.addEventListener('focus', loadRecaptchaScript, { once: true }); 6843 6844 }()); 6845 6846</script>
vendor: 1 bytes, line 6846
6846
6847<script> 6848 'use strict'; 6849 6850 (function () { 6851 const modals = []; 6852 const excludedFromFocusTrapping = new Set(); 6853 6854 function trapFocusInNextModalWithOverlay() { 6855 for (let idx = modals.length -1; idx >= 0; idx--) { 6856 const nextOnStack = modals[idx]; 6857 const nextDialogElement = nextOnStack.instance.$refs[nextOnStack.name]; 6858 if (! isOverlayDisabled(nextDialogElement)) { 6859 hyva.trapFocus(nextDialogElement); 6860 break; 6861 } 6862 } 6863 } 6864 6865 function focusables(dialogElement) { 6866 const selector = 'button, [href], input, textarea, select, details, [tabindex]:not([tabindex="-1"])'; 6867 return Array.from(dialogElement.querySelectorAll(selector)) 6868 .filter(el => !el.hasAttribute('disabled')); 6869 } 6870 6871 function firstVisible(elements) { 6872 const a = Array.from(elements); 6873 for (let i = 0; i < a.length; i++) { 6874 if (a[i].offsetWidth || a[i].offsetHeight || a[i].getClientRects().length) return a[i]; 6875 } 6876 return null; 6877 } 6878 6879 function isInViewport(element) { 6880 const rect = element && element.getBoundingClientRect(); 6881 return rect && 6882 rect.top >= 0 && 6883 rect.left >= 0 && 6884 rect.right <= window.innerWidth && 6885 rect.bottom <= window.innerHeight; 6886 } 6887 6888 function setFocusAfterTransition(dialogElement, duration) { 6889 const nested = Array.from(dialogElement.querySelectorAll('[role="dialog"]')); 6890 const candidates = Array.from(dialogElement.querySelectorAll('[x-focus-first]')); 6891 next: for (let candidate of candidates) { 6892 for (let child of nested) { 6893 if (child.contains(candidate)) continue next; 6894 } 6895 setTimeout(() => candidate.focus(), 50); 6896 break; 6897 } 6898 window.setTimeout(() => { 6899 const focusElement = firstVisible(dialogElement.querySelectorAll('[x-focus-first]')) || 6900 focusables(dialogElement)[0] || 6901 null; 6902 focusElement && isInViewport(focusElement) && focusElement.focus(); 6903 }, Math.max(1, duration)); 6904 } 6905 6906 function determineTrigger($refs, dialog, trigger) { 6907 if (typeof trigger === 'undefined' && typeof dialog === 'object' && dialog.target instanceof HTMLElement) { 6908 return dialog.target; 6909 } 6910 if (typeof dialog === 'string' && typeof trigger === 'object' && trigger.target instanceof HTMLElement) { 6911 return trigger.target; 6912 } 6913 if (typeof trigger === 'string') { 6914 try { 6915 return $refs[trigger] || document.querySelector(trigger) 6916 } catch (e) {} 6917 } 6918 if (trigger instanceof Element) { 6919 return trigger; 6920 } 6921 6922 return null; 6923 } 6924 6925 function isOverlayDisabled(dialog) { 6926 return dialog && dialog.hasAttribute('x-no-overlay') 6927 } 6928 6929 function areRemainingModalsWithoutOverlay(modals) 6930 { 6931 const overflowDisabled = modals.map(modal => modal.instance.$refs[modal.name]).filter(isOverlayDisabled); 6932 6933 return overflowDisabled.length === modals.length; 6934 } 6935 6936 window.hyva.modal = function(options) { 6937 6938 const config = Object.assign({ 6939 dialog: 'dialog', duration: 300, transitionEnter: 'transition ease-out duration-300', 6940 transitionEnterStart: 'opacity-0', 6941 transitionEnterEnd: 'opacity-100', 6942 transitionLeave: 'transition ease-in duration-300', 6943 transitionLeaveStart: 'opacity-100', 6944 transitionLeaveEnd: 'opacity-0', 6945 }, options); 6946 let lastHide = 0; 6947 6948 return { 6949 opened: {}, 6950 show(dialog, trigger) { 6951 const focusTargetAfterHide = determineTrigger(this.$refs, dialog, trigger); 6952 const name = typeof dialog === 'string' ? dialog : config.dialog; 6953 const dialogElement = this.$refs[name]; 6954 if (! dialogElement) { 6955 return; 6956 } 6957 const useOverlay = ! dialogElement.hasAttribute('x-no-overlay'); 6958 6959 dialogElement.scrollTop = 0; 6960 6961 if (this.opened[name]) { 6962 return; 6963 } 6964 6965 if (focusTargetAfterHide) { 6966 focusTargetAfterHide.setAttribute('aria-expanded', 'true'); 6967 } 6968 6969 this.opened[name] = true; 6970 useOverlay && this.$nextTick(() => hyva.trapFocus(dialogElement)); 6971 setFocusAfterTransition(dialogElement, config.duration); 6972 6973 const frame = {name, instance: this, focusTarget: focu
6973sTargetAfterHide, time: Date.now()}; 6974 6975 modals.push(frame); 6976 if (useOverlay) { 6977 document.body.classList.add('overflow-hidden'); 6978 } 6979 return new Promise(resolve => frame.resolve = resolve); 6980 }, 6981 cancel() { 6982 this.hide(false); 6983 }, 6984 ok() { 6985 this.hide(true); 6986 }, 6987 hide(value) { 6988 if (Date.now() - lastHide < config.duration) { 6989 return; 6990 } 6991 lastHide = Date.now(); 6992 6993 const modal = modals.pop() || {}; 6994 const name = modal.name; 6995 this.opened[name] = false; 6996 hyva.releaseFocus(modal.instance.$refs[modal.name]) 6997 trapFocusInNextModalWithOverlay(); 6998 6999 const nextFocusAfterHide = modal.focusTarget; 7000 nextFocusAfterHide && setTimeout(() => { 7001 nextFocusAfterHide.setAttribute('aria-expanded', 'false'); 7002 nextFocusAfterHide.focus() 7003 }, config.duration); 7004 7005 if (modals.length === 0 || areRemainingModalsWithoutOverlay(modals)) { 7006 document.body.classList.remove('overflow-hidden'); 7007 } 7008 7009 modal.resolve(value); 7010 }, 7011 overlay(dialog) { 7012 const name = typeof dialog === 'string' ? dialog : config.dialog; 7013 return { 7014 ['x-show']() { 7015 return this.opened[name] 7016 }, 7017 ['x-transition:enter']: config.transitionEnter, 7018 ['x-transition:enter-start']: config.transitionEnterStart, 7019 ['x-transition:enter-end']: config.transitionEnterEnd, 7020 ['x-transition:leave']: config.transitionLeave, 7021 ['x-transition:leave-start']: config.transitionLeaveStart, 7022 ['x-transition:leave-end']: config.transitionLeaveEnd, 7023 ['@hyva-modal-show.window'](event) { 7024 event.detail && event.detail.dialog === name && this.show(name, event.detail.focusAfterHide) 7025 } 7026 }; 7027 } 7028 }; 7029 } 7030 7031 window.hyva.modal.peek = () => modals.length > 0 && modals[modals.length -1] 7032 7033 window.hyva.modal.pop = function () { 7034 if (modals.length > 0) { 7035 const modal = modals[modals.length -1]; 7036 modal.instance.hide(); 7037 } 7038 } 7039 7040 window.hyva.modal.excludeSelectorsFromFocusTrap = function (selectors) { 7041 typeof selectors === 'string' || selectors instanceof String 7042 ? excludedFromFocusTrapping.add(selectors) 7043 : selectors.map(selector => excludedFromFocusTrapping.add(selector)); 7044 } 7045 7046 window.hyva.modal.eventListeners = { 7047 keydown: event => { 7048 if (event.key === 'Escape') { 7049 window.hyva.modal.pop(); 7050 } 7051 }, 7052 click: event => { 7053 if (modals.length > 0) { 7054 const modal = modals[modals.length -1]; 7055 const dialog = modal.instance.$refs[modal.name]; 7056 if (modal.time + 50 < Date.now() && // if last click processing is more than 50ms ago 7057 ! isOverlayDisabled(dialog) && // if dialog has overlay 7058 ! dialog.contains(event.target)) { // if click is outside of dialog 7059 modal.instance.hide(); 7060 } 7061 } 7062 } 7063 }; 7064 7065 document.addEventListener('keydown', window.hyva.modal.eventListeners.keydown); 7066 7067 document.addEventListener('click', window.hyva.modal.eventListeners.click); 7068 })(); 7069</script>
7069 7070<link rel="stylesheet" type="text/css" href="https://www.americanflags.com/static/frontend/Krish/AmericanFlags/en_US/Magento_Theme/css/swiper.min.css">
7070<script> 7071 'use strict'; 7072 7073 const turnstileLoadCallbacks = []; 7074 7075 function executeTurnstileLoadCallbacks () { 7076 while (window.grecaptcha && turnstileLoadCallbacks.length > 0) { 7077 const callback = turnstileLoadCallbacks.pop(); 7078 typeof callback === 'string' ? window[callback]() : callback(); 7079 } 7080 } 7081 7082 (function() { 7083 const loadTurnstileScript = (event) => { 7084 if (window.grecaptcha || !event.target.form) { 7085 return; 7086 } 7087 7088 const url = 'https://challenges.cloudflare.com/turnstile/v0/api.js?compat=recaptcha&render=explicit&onload=executeTurnstileLoadCallbacks'; 7089 const script = document.createElement('script'); 7090 script.type = 'text/javascript'; 7091 script.src = url; 7092 script.async = true; 7093 document.head.appendChild(script); 7094 7095 script.addEventListener('load', () => { 7096 Array.from(document.querySelectorAll('button[data-recaptcha-btn]:disabled')).forEach(btn => btn.removeAttribute('disabled')); 7097 }); 7098 } 7099 7100 window.forceLoadTurnstileScript = (form) => { 7101 loadTurnstileScript({target: {form: form || 'dummy'}}); 7102 executeTurnstileLoadCallbacks(); 7103 }; 7104 7105 document.body.addEventListener('input', loadTurnstileScript, { once: true }); 7106 document.body.addEventListener('focus', loadTurnstileScript, { once: true }); 7107 7108 }()); 7109 7110</script>
7110<script type="application/ld+json">{"@context":"https:\/\/schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"item":{"@id":"https:\/\/www.americanflags.com\/","name":"Home"}}]}</script>
7110<script type="application/ld+json">{"@context":"https:\/\/schema.org","@type":"WebSite","url":"https:\/\/www.americanflags.com\/","name":"americanflags.com","potentialAction":{"@type":"SearchAction","target":"https:\/\/www.americanflags.com\/catalogsearch\/result\/?q={search_term_string}","query-input":"required name=search_term_string"}}</script>
7110<script type="application/ld+json">{"@context":"https:\/\/schema.org","@type":"Organization","url":"https:\/\/www.americanflags.com\/","name":"AmericanFlags.com","logo":"https:\/\/www.americanflags.com\/media\/opti_image\/webp\/logo\/stores\/1\/header-logo.webp","description":"At AmericanFlags.com, we\u2019ve proudly provided top-quality American-made U.S. flags for over 20 years, backed by great prices, expert craftsmanship, and friendly service. We also offer a wide range of State, Military, Political, and Patriotic flags to meet all your needs, making us your trusted source for flags that reflect your pride and value...","contactPoint":[{"@type":"ContactPoint","telephone":"1-877-873-5247","contactType":"sales"},{"@type":"ContactPoint","telephone":"1-877-873-5247","contactType":"technical support"},{"@type":"ContactPoint","telephone":"1-877-873-5247","contactType":"customer service"}],"address":{"addressCountry":"United States"},"sameAs":["https:\/\/www.facebook.com\/AmericanFlagsCom","https:\/\/x.com\/AmericanFlags","https:\/\/www.instagram.com\/americanflagsonline\/","https:\/\/www.youtube.com\/@AmericanFlagsOnline-km9bc","https:\/\/www.pinterest.com\/aflagsdotcom\/"]}</script>
7110<!-- Meta Pixel Code -->
7111<script> 7112 7113(function (window, document) { 7114 var propagationStop = 0; 7115 7116 function onDocumentReady() { 7117 (function (events) { 7118 function loadCode() { 7119 events.forEach(function (e) { 7120 window.removeEventListener(e, loadCode); 7121 }); 7122 7123 // bof code 7124 7125 // bof initialization code 7126 !function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod? 7127 n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n; 7128 n.push=n;n.loaded=!0;n.version='2.0';n.agent='dvapptrian';n.queue=[]; 7129 t=b.createElement(e);t.async=!0;t.src=v;s=b.getElementsByTagName(e)[0]; 7130 s.parentNode.insertBefore(t,s)}(window, 7131 document,'script','https://connect.facebook.net/en_US/fbevents.js'); 7132 // eof initialization code 7133 7134 function jsonToUrlEncoded(element, key, list) { 7135 var list = list || []; 7136 7137 if (typeof(element) === 'object' && !Array.isArray(element)) { 7138 for (var idx in element) { 7139 if (element.hasOwnProperty(idx)) { 7140 jsonToUrlEncoded(element[idx], key?key+'['+idx+']':idx, list); 7141 } 7142 } 7143 } else if (typeof(element) === 'object' && Array.isArray(element)) { 7144 for (var i = 0; i < element.length; i += 1) { 7145 jsonToUrlEncoded(element[i], key?key+'['+i+']':i, list); 7146 } 7147 } else { 7148 list.push(key + '=' + encodeURIComponent(element)); 7149 } 7150 7151 return list.join('&'); 7152 } 7153 7154 function getTimestamp() { 7155 var timestamp = 0; 7156 7157 if (!Date.now) { 7158 timestamp = new Date().getTime(); 7159 } else { 7160 timestamp = Date.now(); 7161 } 7162 7163 return timestamp; 7164 } 7165 7166 function getUserData() { 7167 var query = 'sections=apptrian_metapixelapi_matching_section'; 7168 var sectionUrl = 'https://www.americanflags.com/customer/section/load?' + query + '&_=' + getTimestamp(); 7169 7170 var request = new XMLHttpRequest(); 7171 request.open('GET', sectionUrl, true); 7172 request.setRequestHeader('Accept', 'application/json'); 7173 request.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); 7174 7175 request.onreadystatechange = function () { 7176 if (this.readyState === 4) { 7177 if (this.status >= 200 && this.status < 400) { 7178 // Success 7179 var data = JSON.parse(this.responseText); 7180 run(data); 7181 } else { 7182 // Error 7183 } 7184 } 7185 }; 7186 7187 request.send(); 7188 request = null; 7189 } 7190 7191 getUserData(); 7192 7193 function run(response) { 7194 var userData = {}; 7195 var apptrianMetaPixelApiUrl="https://www.americanflags.com/about"; 7196 function isEmpty(obj) { 7197 for(var prop in obj) { 7198 if(obj.hasOwnProperty(prop)) { 7199 return false; 7200 } 7201 } 7202 7203 return true; 7204 } 7205 7206 if (propagationStop === 0) { 7207 propagationStop = 1; 7208 7209 var section; 7210 var sectionData; 7211 7212 if (response !== 'undefined' && response.hasOwnProperty('apptrian_metapixelapi_matching_section')) { 7213 section = response.apptrian_metapixelapi_matching_section; 7214 7215 if (section !== 'undefined' && section.hasOwnProperty('matching_data')) { 7216 sectionData = section.matching_data; 7217 7218 if (!isEmpty(sectionData)) { 7219 userData = sectionData; 7220 } 7221 } 7222 } 7223 7224 7225 fbq('init', '1751924718361449', userData); 7226 7227 function stringToHash(string) { 7228 var hash = 0; 7229 var stringLength = string.length; 7230 var i; 7231 var char; 7232 7233 if (stringLength === 0) { 7234 return hash; 7235 } 7236 7237 for (i = 0; i < stringLength; i += 1) { 7238 char = string.charCodeAt(i); 7239 hash = ((hash << 5) - hash) + char; 7240 hash = hash & hash; 7241 } 7242 7243 return String(hash); 7244 } 7245 7246 function generateEventId(eName) {
7247 var uCookie = document.cookie; 7248 var uHash = stringToHash(uCookie); 7249 var url = window.location.href; 7250 var urlHash = stringToHash(url); 7251 var timestamp = String(getTimestamp()); 7252 7253 return eName + uHash + urlHash + timestamp; 7254 } 7255 7256 function fireConversionsApiEvent(eName, eData, eId) { 7257 var data = {}; 7258 data.eventName = eName; 7259 data.eventData = eData; 7260 data.eventId = eId; 7261 data.url = window.location.href; 7262 data.userData = userData; 7263 7264 var query = jsonToUrlEncoded(data); 7265 var apiUrl = 'https://www.americanflags.com/apptrian_metapixelapi/index/index?' + query + '&_=' + getTimestamp(); 7266 7267 var request = new XMLHttpRequest(); 7268 request.open('GET', apiUrl, true); 7269 request.setRequestHeader('Accept', 'application/json'); 7270 request.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); 7271 7272 request.onreadystatechange = function () { 7273 if (this.readyState === 4) { 7274 if (this.status >= 200 && this.status < 400) { 7275 // Success 7276 var result = this.responseText; 7277 } else { 7278 // Error 7279 } 7280 } 7281 }; 7282 7283 request.send(); 7284 request = null; 7285 } 7286 7287 function moveParamsOutsideContents(data) { 7288 var isMoveParamsOutsideContentsEnabled = 1; 7289 7290 if (isMoveParamsOutsideContentsEnabled) { 7291 if (!('contents' in data)) { 7292 return data; 7293 } 7294 7295 var contents = data['contents']; 7296 var contentsLength = contents.length; 7297 7298 if (contentsLength > 1) { 7299 var c = 0; 7300 for (var i = 0; i < contentsLength; i++) { 7301 var item = contents[i]; 7302 7303 for (var index in item) { 7304 if (index == 'id' || index == 'item_price' || index == 'quantity') { 7305 continue; 7306 } 7307 7308 // You cannot do anything with param just 7309 // Remove the param from contents 7310 delete data['contents'][c][index]; 7311 } 7312 7313 c++; 7314 } 7315 } else { 7316 var item = contents[0]; 7317 for (var index in item) { 7318 var value = item[index]; 7319 if (index == 'id' || index == 'item_price' || index == 'quantity') { 7320 continue; 7321 } 7322 7323 // Set the param 7324 data[index] = value; 7325 // Remove the param from contents 7326 delete data['contents'][0][index]; 7327 } 7328 } 7329 7330 return data; 7331 } else { 7332 return data; 7333 } 7334 } 7335 7336 // Ready PageView data. (It is fired below for each event conditionally.) 7337 var pageViewEventId = generateEventId("PageView"); 7338 var pageViewEventIdObj = {}; 7339 pageViewEventIdObj.eventID = pageViewEventId; 7340 7341 var pageViewData = {}; 7342 7343 fbq("track", "PageView", pageViewData, pageViewEventIdObj); 7344 7345 7346 7347 7348 } // end of propagationStop 7349 } // end of run 7350 7351 function getCookieDataFromString(str) { 7352 var data = {}; 7353 7354 try { 7355 data = JSON.parse(str); 7356 } catch (e) { 7357 if (str.indexOf('=') > -1) { 7358 var arr = str.split('='); 7359 var key = ''; 7360 var value = ''; 7361 var k = 1; 7362 7363 for (let i = 0; i < arr.length; i+=2) { 7364 key = ''; 7365 value = ''; 7366 7367 if (arr[i] !== undefined) { 7368 key = arr[i].trim(); 7369 } 7370 7371 if (arr[k] !== undefined) { 7372 value = arr[k].trim(); 7373 } 7374 7375 if (key) { 7376 data[key] = value; 7377 } 7378 7379 k+=2; 7380 } 7381 } else { 7382 data = str; 7383 } 7384 } 7385 7386 return data; 7387 } 7388 7389 function getCookie(name) { 7390 // Split cookie string and get all individual name=value pairs in an array 7391 var cookieArr = document.cookie.split(";"); 7392 7393 // Loop through the array elements 7394 for(var i = 0; i < cookieArr.length; i++) { 7395 var cookiePair = cookieArr[i].split("="); 7396 7397 // Removing whitespace at the beginning of the cookie name 7398 // and compare it with the given string 7399 if(name == cookiePair[0].trim()) { 7400 // Decode the cookie value and return 7401 return decodeURIComponent(cookiePair[1]); 7402 } 7403 } 7404 7405 // Return null if not found 7406 return null; 7407 } 7408 7409 function isConsentGranted() { 7410 var isCookieConsentEnabled = 0; 7411 7412 // If cookie consent feature is disabled just allow everything. 7413 if (!isCookieConsentEnabled) { 7414 return 1; 7415 } 7416 7417 var cookieName = 'user_allowed_save_cookie'; 7418 var cookie = getCookie(cookieName); 7419 var result = 0; 7420 7421 if (!cookie) { 7422 return result; 7423 } 7424 7425 var cookieData = getCookieDataFromString(cookie); 7426 var cookieKey = ''; 7427 var cookieValue = ''; 7428 7429 if (cookieKey && cookieValue) { 7430 if (typeof cookieData === 'object' && cookieData[cookieKey] !== undefined) { 7431 var value = cookieData[cookieKey]; 7432 7433 if (value == cookieValue) { 7434 result = 1; 7435 } 7436 } 7437 } else if (!cookieKey && cookieValue) { 7438 if (cookie == cookieValue) { 7439 result = 1; 7440 } 7441 } else if (cookieKey && !cookieValue) { 7442 if (typeof cookieData === 'object' && cookieKey in cookieData) { 7443 result = 1; 7444 } 7445 } else { 7446 if (cookie) { 7447 result = 1; 7448 } 7449 } 7450 7451 return result; 7452 } 7453 7454 function checkConsent() { 7455 if (isConsentGranted()) { 7456 } 7457 } 7458 7459 // Check consent on document ready 7460 checkConsent(); 7461 7462 var elConsentButton = document.querySelector('#btn-cookie-allow'); 7463 7464 if (elConsentButton !== null) { 7465 // Add consent grant call to the consent button's click handler 7466 elConsentButton.addEventListener('click', function() { 7467 setTimeout(function() { 7468 checkConsent(); 7469 }, 1000); 7470 }); 7471 } 7472 7473 // eof code 7474 7475 } // eof loadCode 7476
7477 events.forEach(function (e) { 7478 window.addEventListener(e, loadCode, {once: true, passive: true}); 7479 }); 7480 }(['touchstart', 'mouseover', 'wheel', 'scroll', 'keydown', 'apptrianmetastart'])); // eof loadCode IIFE 7481 7482 7483 } // end of onDocumentReady 7484 7485 // In case the document is already rendered 7486 if (document.readyState!='loading') { 7487 onDocumentReady(); 7488 // Modern browsers 7489 } else if (document.addEventListener) { 7490 document.addEventListener('DOMContentLoaded', onDocumentReady); 7491 // Old browsers 7492 } else { 7493 document.attachEvent('onreadystatechange', function() { 7494 if (document.readyState=='complete') { 7495 onDocumentReady(); 7496 } 7497 }); 7498 } 7499 7500}(window, document)); // eof IIFE 7501</script>
7501 7502 7503 <!-- End Meta Pixel Code --> 7504 7505
7505<script type="application/json" id="default-section-data"> 7506 {"messages":[],"customer":[],"compare-products":[],"last-ordered-items":[],"cart":[],"directory-data":{"AD":{"name":"Andorra"},"AE":{"name":"United Arab Emirates"},"AF":{"name":"Afghanistan"},"AG":{"name":"Antigua & Barbuda"},"AI":{"name":"Anguilla"},"AL":{"name":"Albania","regions":{"702":{"code":"AL-01","name":"Berat"},"703":{"code":"AL-09","name":"Dib\u00ebr"},"704":{"code":"AL-02","name":"Durr\u00ebs"},"705":{"code":"AL-03","name":"Elbasan"},"706":{"code":"AL-04","name":"Fier"},"707":{"code":"AL-05","name":"Gjirokast\u00ebr"},"708":{"code":"AL-06","name":"Kor\u00e7\u00eb"},"709":{"code":"AL-07","name":"Kuk\u00ebs"},"710":{"code":"AL-08","name":"Lezh\u00eb"},"711":{"code":"AL-10","name":"Shkod\u00ebr"},"712":{"code":"AL-11","name":"Tiran\u00eb"},"713":{"code":"AL-12","name":"Vlor\u00eb"}}},"AM":{"name":"Armenia"},"AO":{"name":"Angola"},"AQ":{"name":"Antarctica"},"AR":{"name":"Argentina","regions":{"715":{"code":"AR-B","name":"Buenos Aires"},"716":{"code":"AR-K","name":"Catamarca"},"717":{"code":"AR-H","name":"Chaco"},"718":{"code":"AR-U","name":"Chubut"},"714":{"code":"AR-C","name":"Ciudad Aut\u00f3noma de Buenos Aires"},"719":{"code":"AR-X","name":"C\u00f3rdoba"},"720":{"code":"AR-W","name":"Corrientes"},"721":{"code":"AR-E","name":"Entre R\u00edos"},"722":{"code":"AR-P","name":"Formosa"},"723":{"code":"AR-Y","name":"Jujuy"},"724":{"code":"AR-L","name":"La Pampa"},"725":{"code":"AR-F","name":"La Rioja"},"726":{"code":"AR-M","name":"Mendoza"},"727":{"code":"AR-N","name":"Misiones"},"728":{"code":"AR-Q","name":"Neuqu\u00e9n"},"729":{"code":"AR-R","name":"R\u00edo Negro"},"730":{"code":"AR-A","name":"Salta"},"731":{"code":"AR-J","name":"San Juan"},"732":{"code":"AR-D","name":"San Luis"},"733":{"code":"AR-Z","name":"Santa Cruz"},"734":{"code":"AR-S","name":"Santa Fe"},"735":{"code":"AR-G","name":"Santiago del Estero"},"736":{"code":"AR-V","name":"Tierra del Fuego"},"737":{"code":"AR-T","name":"Tucum\u00e1n"}}},"AS":{"name":"American Samoa"},"AT":{"name":"Austria","regions":{"102":{"code":"BL","name":"Burgenland"},"99":{"code":"KN","name":"K\u00e4rnten"},"96":{"code":"NO","name":"Nieder\u00f6sterreich"},"97":{"code":"OO","name":"Ober\u00f6sterreich"},"98":{"code":"SB","name":"Salzburg"},"100":{"code":"ST","name":"Steiermark"},"101":{"code":"TI","name":"Tirol"},"103":{"code":"VB","name":"Vorarlberg"},"95":{"code":"WI","name":"Wien"}}},"AU":{"name":"Australia","regions":{"569":{"code":"ACT","name":"Australian Capital Territory"},"570":{"code":"NSW","name":"New South Wales"},"576":{"code":"NT","name":"Northern Territory"},"572":{"code":"QLD","name":"Queensland"},"573":{"code":"SA","name":"South Australia"},"574":{"code":"TAS","name":"Tasmania"},"571":{"code":"VIC","name":"Victoria"},"575":{"code":"WA","name":"Western Australia"}}},"AW":{"name":"Aruba"},"AX":{"name":"\u00c5land Islands"},"AZ":{"name":"Azerbaijan"},"BA":{"name":"Bosnia & Herzegovina"},"BB":{"name":"Barbados"},"BD":{"name":"Bangladesh"},"BE":{"name":"Belgium","regions":{"609":{"code":"VAN","name":"Antwerpen"},"610":{"code":"WBR","name":"Brabant wallon"},"611":{"code":"BRU","name":"Brussels-Capital Region"},"612":{"code":"WHT","name":"Hainaut"},"614":{"code":"WLG","name":"Li\u00e8ge"},"613":{"code":"VLI","name":"Limburg"},"615":{"code":"WLX","name":"Luxembourg"},"616":{"code":"WNA","name":"Namur"},"617":{"code":"VOV","name":"Oost-Vlaanderen"},"618":{"code":"VBR","name":"Vlaams-Brabant"},"619":{"code":"VWV","name":"West-Vlaanderen"}}},"BF":{"name":"Burkina Faso"},"BG":{"name":"Bulgaria","regions":{"747":{"code":"BG-01","name":"Blagoevgrad"},"748":{"code":"BG-02","name":"Burgas"},"754":{"code":"BG-08","name":"Dobrich"},"753":{"code":"BG-07","name":"Gabrovo"},"772":{"code":"BG-26","name":"Haskovo"},"755":{"code":"BG-09","name":"Kardzhali"},"756":{"code":"BG-10","name":"Kyustendil"},"757":{"code":"BG-11","name":"Lovech"},"758":{"code":"BG-12","name":"Montana"},"759":{"code":"BG-13","name":"Pazardzhik"},"760":{"code":"BG-14","name":"Pernik"},"761":{"code":"BG-15","name":"Pleven"},"762":{"code":"BG-16","name":"Plovdiv"},"763":{"code":"BG-17","name":"Razgrad"},"764":{"code":"BG-18","name":"Ruse"},"773":{"code":"BG-27","name":"Shumen"},"765":{"code":"BG-19","name":"Silistra"},"766":{"code":"BG-20","name":"Sliven"},"767":{"code":"BG-21","name":"Smolyan"},"768":{"code":"BG-22","name":"Sofia City"},"769":{"code":"BG-23","name":"Sofia Province"},"770":{"code":"BG-24","name":"Stara Zagora"},"771":{"code":"BG-25","name":"Targovishte"},"749":{"code":"BG-03","name":"Varna"},"750":{"code":"BG-04","name":"Veliko Tarnovo"},"751":{"code":"BG-05","name":"Vidin"},"752":{"code":"BG-06","name":"Vratsa"},"774":{"code":"BG-28","name":"Yambol"}}},"BH":{"name":"Bahrain"},"BI":{"name":"Burundi"},"BJ":{"name":"Benin"},"BL":{"name":"St. Barth\u00e9lemy"},"BM":{"name":"Bermuda"},"BN":{"name":"Brunei"}
7506,"BO":{"name":"Bolivia","regions":{"739":{"code":"BO-H","name":"Chuquisaca"},"738":{"code":"BO-C","name":"Cochabamba"},"740":{"code":"BO-B","name":"El Beni"},"741":{"code":"BO-L","name":"La Paz"},"742":{"code":"BO-O","name":"Oruro"},"743":{"code":"BO-N","name":"Pando"},"744":{"code":"BO-P","name":"Potos\u00ed"},"745":{"code":"BO-S","name":"Santa Cruz"},"746":{"code":"BO-T","name":"Tarija"}}},"BQ":{"name":"Caribbean Netherlands"},"BR":{"name":"Brazil","regions":{"485":{"code":"AC","name":"Acre"},"486":{"code":"AL","name":"Alagoas"},"487":{"code":"AP","name":"Amap\u00e1"},"488":{"code":"AM","name":"Amazonas"},"489":{"code":"BA","name":"Bahia"},"490":{"code":"CE","name":"Cear\u00e1"},"511":{"code":"DF","name":"Distrito Federal"},"491":{"code":"ES","name":"Esp\u00edrito Santo"},"492":{"code":"GO","name":"Goi\u00e1s"},"493":{"code":"MA","name":"Maranh\u00e3o"},"494":{"code":"MT","name":"Mato Grosso"},"495":{"code":"MS","name":"Mato Grosso do Sul"},"496":{"code":"MG","name":"Minas Gerais"},"497":{"code":"PA","name":"Par\u00e1"},"498":{"code":"PB","name":"Para\u00edba"},"499":{"code":"PR","name":"Paran\u00e1"},"500":{"code":"PE","name":"Pernambuco"},"501":{"code":"PI","name":"Piau\u00ed"},"502":{"code":"RJ","name":"Rio de Janeiro"},"503":{"code":"RN","name":"Rio Grande do Norte"},"504":{"code":"RS","name":"Rio Grande do Sul"},"505":{"code":"RO","name":"Rond\u00f4nia"},"506":{"code":"RR","name":"Roraima"},"507":{"code":"SC","name":"Santa Catarina"},"508":{"code":"SP","name":"S\u00e3o Paulo"},"509":{"code":"SE","name":"Sergipe"},"510":{"code":"TO","name":"Tocantins"}}},"BS":{"name":"Bahamas"},"BT":{"name":"Bhutan"},"BV":{"name":"Bouvet Island"},"BW":{"name":"Botswana"},"BY":{"name":"Belarus","regions":{"1101":{"code":"BY-BR","name":"Bresckaja voblas\u0107"},"1102":{"code":"BY-HO","name":"Homie\u013askaja voblas\u0107"},"1103":{"code":"BY-HM","name":"Horad Minsk"},"1104":{"code":"BY-HR","name":"Hrodzienskaja voblas\u0107"},"1105":{"code":"BY-MA","name":"Mahilio\u016dskaja voblas\u0107"},"1106":{"code":"BY-MI","name":"Minskaja voblas\u0107"},"1107":{"code":"BY-VI","name":"Viciebskaja voblas\u0107"}}},"BZ":{"name":"Belize"},"CA":{"name":"Canada","regions":{"66":{"code":"AB","name":"Alberta"},"67":{"code":"BC","name":"British Columbia"},"68":{"code":"MB","name":"Manitoba"},"70":{"code":"NB","name":"New Brunswick"},"69":{"code":"NL","name":"Newfoundland and Labrador"},"72":{"code":"NT","name":"Northwest Territories"},"71":{"code":"NS","name":"Nova Scotia"},"73":{"code":"NU","name":"Nunavut"},"74":{"code":"ON","name":"Ontario"},"75":{"code":"PE","name":"Prince Edward Island"},"76":{"code":"QC","name":"Quebec"},"77":{"code":"SK","name":"Saskatchewan"},"78":{"code":"YT","name":"Yukon Territory"}}},"CC":{"name":"Cocos (Keeling) Islands"},"CD":{"name":"Congo - Kinshasa"},"CF":{"name":"Central African Republic"},"CG":{"name":"Congo - Brazzaville"},"CH":{"name":"Switzerland","regions":{"104":{"code":"AG","name":"Aargau"},"106":{"code":"AR","name":"Appenzell Ausserrhoden"},"105":{"code":"AI","name":"Appenzell Innerrhoden"},"108":{"code":"BL","name":"Basel-Landschaft"},"109":{"code":"BS","name":"Basel-Stadt"},"107":{"code":"BE","name":"Bern"},"110":{"code":"FR","name":"Friburg"},"111":{"code":"GE","name":"Geneva"},"112":{"code":"GL","name":"Glarus"},"113":{"code":"GR","name":"Graub\u00fcnden"},"114":{"code":"JU","name":"Jura"},"115":{"code":"LU","name":"Lucerne"},"116":{"code":"NE","name":"Neuch\u00e2tel"},"117":{"code":"NW","name":"Nidwalden"},"118":{"code":"OW","name":"Obwalden"},"120":{"code":"SH","name":"Schaffhausen"},"122":{"code":"SZ","name":"Schwyz"},"121":{"code":"SO","name":"Solothurn"},"119":{"code":"SG","name":"St. Gallen"},"123":{"code":"TG","name":"Thurgau"},"124":{"code":"TI","name":"Ticino"},"125":{"code":"UR","name":"Uri"},"126":{"code":"VD","name":"Vaud"},"127":{"code":"VS","name":"Wallis"},"128":{"code":"ZG","name":"Zug"},"129":{"code":"ZH","name":"Z\u00fcrich"}}},"CI":{"name":"C\u00f4te d\u2019Ivoire"},"CK":{"name":"Cook Islands"},"CL":{"name":"Chile","regions":{"775":{"code":"CL-AI","name":"Ais\u00e9n del General Carlos Iba\u00f1ez del Campo"},"776":{"code":"CL-AN","name":"Antofagasta"},"777":{"code":"CL-AP","name":"Arica y Parinacota"},"779":{"code":"CL-AT","name":"Atacama"},"780":{"code":"CL-BI","name":"Biob\u00edo"},"781":{"code":"CL-CO","name":"Coquimbo"},"778":{"code":"CL-AR","name":"La Araucan\u00eda"},"782":{"code":"CL-LI","name":"Libertador General Bernardo O'Higgins"}
7506,"783":{"code":"CL-LL","name":"Los Lagos"},"784":{"code":"CL-LR","name":"Los R\u00edos"},"785":{"code":"CL-MA","name":"Magallanes"},"786":{"code":"CL-ML","name":"Maule"},"787":{"code":"CL-NB","name":"\u00d1uble"},"788":{"code":"CL-RM","name":"Regi\u00f3n Metropolitana de Santiago"},"789":{"code":"CL-TA","name":"Tarapac\u00e1"},"790":{"code":"CL-VS","name":"Valpara\u00edso"}}},"CM":{"name":"Cameroon"},"CO":{"name":"Colombia","regions":{"654":{"code":"CO-AMA","name":"Amazonas"},"655":{"code":"CO-ANT","name":"Antioquia"},"656":{"code":"CO-ARA","name":"Arauca"},"657":{"code":"CO-ATL","name":"Atl\u00e1ntico"},"658":{"code":"CO-BOL","name":"Bol\u00edvar"},"659":{"code":"CO-BOY","name":"Boyac\u00e1"},"660":{"code":"CO-CAL","name":"Caldas"},"661":{"code":"CO-CAQ","name":"Caquet\u00e1"},"662":{"code":"CO-CAS","name":"Casanare"},"663":{"code":"CO-CAU","name":"Cauca"},"664":{"code":"CO-CES","name":"Cesar"},"665":{"code":"CO-CHO","name":"Choc\u00f3"},"666":{"code":"CO-COR","name":"C\u00f3rdoba"},"667":{"code":"CO-CUN","name":"Cundinamarca"},"668":{"code":"CO-GUA","name":"Guain\u00eda"},"669":{"code":"CO-GUV","name":"Guaviare"},"670":{"code":"CO-HUL","name":"Huila"},"671":{"code":"CO-LAG","name":"La Guajira"},"672":{"code":"CO-MAG","name":"Magdalena"},"673":{"code":"CO-MET","name":"Meta"},"674":{"code":"CO-NAR","name":"Nari\u00f1o"},"675":{"code":"CO-NSA","name":"Norte de Santander"},"676":{"code":"CO-PUT","name":"Putumayo"},"677":{"code":"CO-QUI","name":"Quind\u00edo"},"678":{"code":"CO-RIS","name":"Risaralda"},"679":{"code":"CO-SAP","name":"San Andr\u00e9s y Providencia"},"680":{"code":"CO-SAN","name":"Santander"},"681":{"code":"CO-SUC","name":"Sucre"},"682":{"code":"CO-TOL","name":"Tolima"},"683":{"code":"CO-VAC","name":"Valle del Cauca"},"684":{"code":"CO-VAU","name":"Vaup\u00e9s"},"685":{"code":"CO-VID","name":"Vichada"}}},"CR":{"name":"Costa Rica"},"CU":{"name":"Cuba"},"CV":{"name":"Cape Verde"},"CW":{"name":"Cura\u00e7ao"},"CX":{"name":"Christmas Island"},"CY":{"name":"Cyprus"},"CZ":{"name":"Czechia"},"DE":{"name":"Germany","regions":{"80":{"code":"BAW","name":"Baden-W\u00fcrttemberg"},"81":{"code":"BAY","name":"Bayern"},"82":{"code":"BER","name":"Berlin"},"83":{"code":"BRG","name":"Brandenburg"},"84":{"code":"BRE","name":"Bremen"},"85":{"code":"HAM","name":"Hamburg"},"86":{"code":"HES","name":"Hessen"},"87":{"code":"MEC","name":"Mecklenburg-Vorpommern"},"79":{"code":"NDS","name":"Niedersachsen"},"88":{"code":"NRW","name":"Nordrhein-Westfalen"},"89":{"code":"RHE","name":"Rheinland-Pfalz"},"90":{"code":"SAR","name":"Saarland"},"91":{"code":"SAS","name":"Sachsen"},"92":{"code":"SAC","name":"Sachsen-Anhalt"},"93":{"code":"SCN","name":"Schleswig-Holstein"},"94":{"code":"THE","name":"Th\u00fcringen"}}},"DJ":{"name":"Djibouti"},"DK":{"name":"Denmark","regions":{"791":{"code":"DK-84","name":"Hovedstaden"},"792":{"code":"DK-82","name":"Midtjylland"},"793":{"code":"DK-81","name":"Nordjylland"},"794":{"code":"DK-85","name":"Sj\u00e6lland"},"795":{"code":"DK-83","name":"Syddanmark"}}},"DM":{"name":"Dominica"},"DO":{"name":"Dominican Republic"},"DZ":{"name":"Algeria"},"EC":{"name":"Ecuador","regions":{"796":{"code":"EC-A","name":"Azuay"},"797":{"code":"EC-B","name":"Bol\u00edvar"},"798":{"code":"EC-F","name":"Ca\u00f1ar"},"799":{"code":"EC-C","name":"Carchi"},"800":{"code":"EC-H","name":"Chimborazo"},"801":{"code":"EC-X","name":"Cotopaxi"},"802":{"code":"EC-O","name":"El Oro"},"803":{"code":"EC-E","name":"Esmeraldas"},"804":{"code":"EC-W","name":"Gal\u00e1pagos"},"805":{"code":"EC-G","name":"Guayas"},"806":{"code":"EC-I","name":"Imbabura"},"807":{"code":"EC-L","name":"Loja"},"808":{"code":"EC-R","name":"Los R\u00edos"},"809":{"code":"EC-M","name":"Manab\u00ed"},"810":{"code":"EC-S","name":"Morona Santiago"},"811":{"code":"EC-N","name":"Napo"},"812":{"code":"EC-D","name":"Orellana"},"813":{"code":"EC-Y","name":"Pastaza"},"814":{"code":"EC-P","name":"Pichincha"},"815":{"code":"EC-SE","name":"Santa Elena"},"816":{"code":"EC-SD","name":"Santo Domingo de los Ts\u00e1chilas"},"817":{"code":"EC-U","name":"Sucumb\u00edos"},"818":{"code":"EC-T","name":"Tungurahua"},"819":{"code":"EC-Z","name":"Zamora Chinchipe"}}},"EE":{"name":"Estonia","regions":{"340":{"code":"EE-37","name":"Harjumaa"},"341":{"code":"EE-39","name":"Hiiumaa"},"342":{"code":"EE-44","name":"Ida-Virumaa"}
7506,"344":{"code":"EE-51","name":"J\u00e4rvamaa"},"343":{"code":"EE-49","name":"J\u00f5gevamaa"},"346":{"code":"EE-59","name":"L\u00e4\u00e4ne-Virumaa"},"345":{"code":"EE-57","name":"L\u00e4\u00e4nemaa"},"348":{"code":"EE-67","name":"P\u00e4rnumaa"},"347":{"code":"EE-65","name":"P\u00f5lvamaa"},"349":{"code":"EE-70","name":"Raplamaa"},"350":{"code":"EE-74","name":"Saaremaa"},"351":{"code":"EE-78","name":"Tartumaa"},"352":{"code":"EE-82","name":"Valgamaa"},"353":{"code":"EE-84","name":"Viljandimaa"},"354":{"code":"EE-86","name":"V\u00f5rumaa"}}},"EG":{"name":"Egypt"},"EH":{"name":"Western Sahara"},"ER":{"name":"Eritrea"},"ES":{"name":"Spain","regions":{"130":{"code":"A Coru\u0441a","name":"A Coru\u00f1a"},"131":{"code":"Alava","name":"Alava"},"132":{"code":"Albacete","name":"Albacete"},"133":{"code":"Alicante","name":"Alicante"},"134":{"code":"Almeria","name":"Almeria"},"135":{"code":"Asturias","name":"Asturias"},"136":{"code":"Avila","name":"Avila"},"137":{"code":"Badajoz","name":"Badajoz"},"138":{"code":"Baleares","name":"Baleares"},"139":{"code":"Barcelona","name":"Barcelona"},"140":{"code":"Burgos","name":"Burgos"},"141":{"code":"Caceres","name":"Caceres"},"142":{"code":"Cadiz","name":"Cadiz"},"143":{"code":"Cantabria","name":"Cantabria"},"144":{"code":"Castellon","name":"Castellon"},"145":{"code":"Ceuta","name":"Ceuta"},"146":{"code":"Ciudad Real","name":"Ciudad Real"},"147":{"code":"Cordoba","name":"Cordoba"},"148":{"code":"Cuenca","name":"Cuenca"},"149":{"code":"Girona","name":"Girona"},"150":{"code":"Granada","name":"Granada"},"151":{"code":"Guadalajara","name":"Guadalajara"},"152":{"code":"Guipuzcoa","name":"Guipuzcoa"},"153":{"code":"Huelva","name":"Huelva"},"154":{"code":"Huesca","name":"Huesca"},"155":{"code":"Jaen","name":"Jaen"},"156":{"code":"La Rioja","name":"La Rioja"},"157":{"code":"Las Palmas","name":"Las Palmas"},"158":{"code":"Leon","name":"Leon"},"159":{"code":"Lleida","name":"Lleida"},"160":{"code":"Lugo","name":"Lugo"},"161":{"code":"Madrid","name":"Madrid"},"162":{"code":"Malaga","name":"Malaga"},"163":{"code":"Melilla","name":"Melilla"},"164":{"code":"Murcia","name":"Murcia"},"165":{"code":"Navarra","name":"Navarra"},"166":{"code":"Ourense","name":"Ourense"},"167":{"code":"Palencia","name":"Palencia"},"168":{"code":"Pontevedra","name":"Pontevedra"},"169":{"code":"Salamanca","name":"Salamanca"},"170":{"code":"Santa Cruz de Tenerife","name":"Santa Cruz de Tenerife"},"171":{"code":"Segovia","name":"Segovia"},"172":{"code":"Sevilla","name":"Sevilla"},"173":{"code":"Soria","name":"Soria"},"174":{"code":"Tarragona","name":"Tarragona"},"175":{"code":"Teruel","name":"Teruel"},"176":{"code":"Toledo","name":"Toledo"},"177":{"code":"Valencia","name":"Valencia"},"178":{"code":"Valladolid","name":"Valladolid"},"179":{"code":"Vizcaya","name":"Vizcaya"},"180":{"code":"Zamora","name":"Zamora"},"181":{"code":"Zaragoza","name":"Zaragoza"}}},"ET":{"name":"Ethiopia"},"FI":{"name":"Finland","regions":{"339":{"code":"Ahvenanmaa","name":"Ahvenanmaa"},"333":{"code":"Etel\u00e4-Karjala","name":"Etel\u00e4-Karjala"},"326":{"code":"Etel\u00e4-Pohjanmaa","name":"Etel\u00e4-Pohjanmaa"},"325":{"code":"Etel\u00e4-Savo","name":"Etel\u00e4-Savo"},"337":{"code":"It\u00e4-Uusimaa","name":"It\u00e4-Uusimaa"},"322":{"code":"Kainuu","name":"Kainuu"},"335":{"code":"Kanta-H\u00e4me","name":"Kanta-H\u00e4me"},"330":{"code":"Keski-Pohjanmaa","name":"Keski-Pohjanmaa"},"331":{"code":"Keski-Suomi","name":"Keski-Suomi"},"338":{"code":"Kymenlaakso","name":"Kymenlaakso"},"320":{"code":"Lappi","name":"Lappi"},"334":{"code":"P\u00e4ij\u00e4t-H\u00e4me","name":"P\u00e4ij\u00e4t-H\u00e4me"},"328":{"code":"Pirkanmaa","name":"Pirkanmaa"},"327":{"code":"Pohjanmaa","name":"Pohjanmaa"},"323":{"code":"Pohjois-Karjala","name":"Pohjois-Karjala"},"321":{"code":"Pohjois-Pohjanmaa","name":"Pohjois-Pohjanmaa"},"324":{"code":"Pohjois-Savo","name":"Pohjois-Savo"},"329":{"code":"Satakunta","name":"Satakunta"},"336":{"code":"Uusimaa","name":"Uusimaa"},"332":{"code":"Varsinais-Suomi","name":"Varsinais-Suomi"}}},"FJ":{"name":"Fiji"},"FK":{"name":"Falkland Islands"},"FM":{"name":"Micronesia"},"FO":{"name":"Faroe Islands"},"FR":{"name":"France","regions":{"182":{"code":"1","name":"Ain"},"183":{"code":"2","name":"Aisne"},"184":{"code":"3","name":"Allier"}
7506,"185":{"code":"4","name":"Alpes-de-Haute-Provence"},"187":{"code":"6","name":"Alpes-Maritimes"},"188":{"code":"7","name":"Ard\u00e8che"},"189":{"code":"8","name":"Ardennes"},"190":{"code":"9","name":"Ari\u00e8ge"},"191":{"code":"10","name":"Aube"},"192":{"code":"11","name":"Aude"},"193":{"code":"12","name":"Aveyron"},"249":{"code":"67","name":"Bas-Rhin"},"194":{"code":"13","name":"Bouches-du-Rh\u00f4ne"},"195":{"code":"14","name":"Calvados"},"196":{"code":"15","name":"Cantal"},"197":{"code":"16","name":"Charente"},"198":{"code":"17","name":"Charente-Maritime"},"199":{"code":"18","name":"Cher"},"200":{"code":"19","name":"Corr\u00e8ze"},"201":{"code":"2A","name":"Corse-du-Sud"},"203":{"code":"21","name":"C\u00f4te-d'Or"},"204":{"code":"22","name":"C\u00f4tes-d'Armor"},"205":{"code":"23","name":"Creuse"},"261":{"code":"79","name":"Deux-S\u00e8vres"},"206":{"code":"24","name":"Dordogne"},"207":{"code":"25","name":"Doubs"},"208":{"code":"26","name":"Dr\u00f4me"},"273":{"code":"91","name":"Essonne"},"209":{"code":"27","name":"Eure"},"210":{"code":"28","name":"Eure-et-Loir"},"211":{"code":"29","name":"Finist\u00e8re"},"212":{"code":"30","name":"Gard"},"214":{"code":"32","name":"Gers"},"215":{"code":"33","name":"Gironde"},"250":{"code":"68","name":"Haut-Rhin"},"202":{"code":"2B","name":"Haute-Corse"},"213":{"code":"31","name":"Haute-Garonne"},"225":{"code":"43","name":"Haute-Loire"},"234":{"code":"52","name":"Haute-Marne"},"252":{"code":"70","name":"Haute-Sa\u00f4ne"},"256":{"code":"74","name":"Haute-Savoie"},"269":{"code":"87","name":"Haute-Vienne"},"186":{"code":"5","name":"Hautes-Alpes"},"247":{"code":"65","name":"Hautes-Pyr\u00e9n\u00e9es"},"274":{"code":"92","name":"Hauts-de-Seine"},"216":{"code":"34","name":"H\u00e9rault"},"217":{"code":"35","name":"Ille-et-Vilaine"},"218":{"code":"36","name":"Indre"},"219":{"code":"37","name":"Indre-et-Loire"},"220":{"code":"38","name":"Is\u00e8re"},"221":{"code":"39","name":"Jura"},"222":{"code":"40","name":"Landes"},"223":{"code":"41","name":"Loir-et-Cher"},"224":{"code":"42","name":"Loire"},"226":{"code":"44","name":"Loire-Atlantique"},"227":{"code":"45","name":"Loiret"},"228":{"code":"46","name":"Lot"},"229":{"code":"47","name":"Lot-et-Garonne"},"230":{"code":"48","name":"Loz\u00e8re"},"231":{"code":"49","name":"Maine-et-Loire"},"232":{"code":"50","name":"Manche"},"233":{"code":"51","name":"Marne"},"235":{"code":"53","name":"Mayenne"},"236":{"code":"54","name":"Meurthe-et-Moselle"},"237":{"code":"55","name":"Meuse"},"238":{"code":"56","name":"Morbihan"},"239":{"code":"57","name":"Moselle"},"240":{"code":"58","name":"Ni\u00e8vre"},"241":{"code":"59","name":"Nord"},"242":{"code":"60","name":"Oise"},"243":{"code":"61","name":"Orne"},"257":{"code":"75","name":"Paris"},"244":{"code":"62","name":"Pas-de-Calais"},"245":{"code":"63","name":"Puy-de-D\u00f4me"},"246":{"code":"64","name":"Pyr\u00e9n\u00e9es-Atlantiques"},"248":{"code":"66","name":"Pyr\u00e9n\u00e9es-Orientales"},"251":{"code":"69","name":"Rh\u00f4ne"},"253":{"code":"71","name":"Sa\u00f4ne-et-Loire"},"254":{"code":"72","name":"Sarthe"},"255":{"code":"73","name":"Savoie"},"259":{"code":"77","name":"Seine-et-Marne"},"258":{"code":"76","name":"Seine-Maritime"},"275":{"code":"93","name":"Seine-Saint-Denis"},"262":{"code":"80","name":"Somme"},"263":{"code":"81","name":"Tarn"},"264":{"code":"82","name":"Tarn-et-Garonne"},"272":{"code":"90","name":"Territoire-de-Belfort"},"277":{"code":"95","name":"Val-d'Oise"},"276":{"code":"94","name":"Val-de-Marne"},"265":{"code":"83","name":"Var"},"266":{"code":"84","name":"Vaucluse"},"267":{"code":"85","name":"Vend\u00e9e"},"268":{"code":"86","name":"Vienne"},"270":{"code":"88","name":"Vosges"},"271":{"code":"89","name":"Yonne"},"260":{"code":"78","name":"Yvelines"}}},"GA":{"name":"Gabon"},"GB":{"name":"United Kingdom"},"GD":{"name":"Grenada"},"GE":{"name":"Georgia"},"GF":{"name":"French Guiana"},"GG":{"name":"Guernsey"},"GH":{"name":"Ghana"},"GI":{"name":"Gibraltar"},"GL":{"name":"Greenland"},"GM":{"name":"Gambia"},"GN":{"name":"Guinea"},"GP":{"name":"Guadeloupe"},"GQ":{"name":"Equatorial Guinea"},"GR":{"name":"Greece","regions":{"833":{"code":"GR-69","name":"\u00c1gion \u00d3ros"},"820":{"code":"GR-A","name":"Anatolik\u00ed Makedon\u00eda kai Thr\u00e1ki"},"821":{"code":"GR-I","name":"Attik\u00ed"},"822":{"code":"GR-G","name":"Dytik\u00ed Ell\u00e1da"},"823":{"code":"GR-C","name":"Dytik\u00ed Makedon\u00eda"},"824":{"code":"GR-F","name":"Ion\u00eda N\u00edsia"},"825":{"code":"GR-D","name":"\u00cdpeiros"},"826":{"code":"GR-B","name":"Kentrik\u00ed Makedon\u00eda"},"827":{"code":"GR-M","name":"Kr\u00edti"},"828":{"code":"GR-L","name":"N\u00f3tio Aiga\u00edo"},"829":{"code":"GR-J","name":"Pelop\u00f3nnisos"},"830":{"code":"GR-H","name":"Stere\u00e1 Ell\u00e1da"}
7506,"831":{"code":"GR-E","name":"Thessal\u00eda"},"832":{"code":"GR-K","name":"V\u00f3reio Aiga\u00edo"}}},"GS":{"name":"South Georgia & South Sandwich Islands"},"GT":{"name":"Guatemala"},"GU":{"name":"Guam"},"GW":{"name":"Guinea-Bissau"},"GY":{"name":"Guyana","regions":{"834":{"code":"GY-BA","name":"Barima-Waini"},"835":{"code":"GY-CU","name":"Cuyuni-Mazaruni"},"836":{"code":"GY-DE","name":"Demerara-Mahaica"},"837":{"code":"GY-EB","name":"East Berbice-Corentyne"},"838":{"code":"GY-ES","name":"Essequibo Islands-West Demerara"},"839":{"code":"GY-MA","name":"Mahaica-Berbice"},"840":{"code":"GY-PM","name":"Pomeroon-Supenaam"},"841":{"code":"GY-PT","name":"Potaro-Siparuni"},"842":{"code":"GY-UD","name":"Upper Demerara-Berbice"},"843":{"code":"GY-UT","name":"Upper Takutu-Upper Essequibo"}}},"HK":{"name":"Hong Kong SAR China"},"HM":{"name":"Heard & McDonald Islands"},"HN":{"name":"Honduras"},"HR":{"name":"Croatia","regions":{"518":{"code":"HR-07","name":"Bjelovarsko-bilogorska \u017eupanija"},"523":{"code":"HR-12","name":"Brodsko-posavska \u017eupanija"},"530":{"code":"HR-19","name":"Dubrova\u010dko-neretvanska \u017eupanija"},"532":{"code":"HR-21","name":"Grad Zagreb"},"529":{"code":"HR-18","name":"Istarska \u017eupanija"},"515":{"code":"HR-04","name":"Karlova\u010dka \u017eupanija"},"517":{"code":"HR-06","name":"Koprivni\u010dko-kri\u017eeva\u010dka \u017eupanija"},"513":{"code":"HR-02","name":"Krapinsko-zagorska \u017eupanija"},"520":{"code":"HR-09","name":"Li\u010dko-senjska \u017eupanija"},"531":{"code":"HR-20","name":"Me\u0111imurska \u017eupanija"},"525":{"code":"HR-14","name":"Osje\u010dko-baranjska \u017eupanija"},"522":{"code":"HR-11","name":"Po\u017ee\u0161ko-slavonska \u017eupanija"},"519":{"code":"HR-08","name":"Primorsko-goranska \u017eupanija"},"526":{"code":"HR-15","name":"\u0160ibensko-kninska \u017eupanija"},"514":{"code":"HR-03","name":"Sisa\u010dko-moslava\u010dka \u017eupanija"},"528":{"code":"HR-17","name":"Splitsko-dalmatinska \u017eupanija"},"516":{"code":"HR-05","name":"Vara\u017edinska \u017eupanija"},"521":{"code":"HR-10","name":"Viroviti\u010dko-podravska \u017eupanija"},"527":{"code":"HR-16","name":"Vukovarsko-srijemska \u017eupanija"},"524":{"code":"HR-13","name":"Zadarska \u017eupanija"},"512":{"code":"HR-01","name":"Zagreba\u010dka \u017eupanija"}}},"HT":{"name":"Haiti"},"HU":{"name":"Hungary"},"ID":{"name":"Indonesia"},"IE":{"name":"Ireland"},"IL":{"name":"Israel"},"IM":{"name":"Isle of Man"},"IN":{"name":"India","regions":{"533":{"code":"AN","name":"Andaman and Nicobar Islands"},"534":{"code":"AP","name":"Andhra Pradesh"},"535":{"code":"AR","name":"Arunachal Pradesh"},"536":{"code":"AS","name":"Assam"},"537":{"code":"BR","name":"Bihar"},"538":{"code":"CH","name":"Chandigarh"},"539":{"code":"CT","name":"Chhattisgarh"},"540":{"code":"DN","name":"Dadra and Nagar Haveli"},"541":{"code":"DD","name":"Daman and Diu"},"542":{"code":"DL","name":"Delhi"},"543":{"code":"GA","name":"Goa"},"544":{"code":"GJ","name":"Gujarat"},"545":{"code":"HR","name":"Haryana"},"546":{"code":"HP","name":"Himachal Pradesh"},"547":{"code":"JK","name":"Jammu and Kashmir"},"548":{"code":"JH","name":"Jharkhand"},"549":{"code":"KA","name":"Karnataka"},"550":{"code":"KL","name":"Kerala"},"551":{"code":"LD","name":"Lakshadweep"},"552":{"code":"MP","name":"Madhya Pradesh"},"553":{"code":"MH","name":"Maharashtra"},"554":{"code":"MN","name":"Manipur"},"555":{"code":"ML","name":"Meghalaya"},"556":{"code":"MZ","name":"Mizoram"},"557":{"code":"NL","name":"Nagaland"},"558":{"code":"OR","name":"Odisha"},"559":{"code":"PY","name":"Puducherry"},"560":{"code":"PB","name":"Punjab"},"561":{"code":"RJ","name":"Rajasthan"},"562":{"code":"SK","name":"Sikkim"},"563":{"code":"TN","name":"Tamil Nadu"},"564":{"code":"TG","name":"Telangana"},"565":{"code":"TR","name":"Tripura"},"566":{"code":"UP","name":"Uttar Pradesh"},"567":{"code":"UT","name":"Uttarakhand"},"568":{"code":"WB","name":"West Bengal"}}},"IO":{"name":"British Indian Ocean Territory"},"IR":{"name":"Iran"},"IS":{"name":"Iceland","regions":{"850":{"code":"IS-07","name":"Austurland"},"844":{"code":"IS-01","name":"H\u00f6fu\u00f0borgarsv\u00e6\u00f0i"},"849":{"code":"IS-06","name":"Nor\u00f0urland eystra"},"848":{"code":"IS-05","name":"Nor\u00f0urland vestra"},"851":{"code":"IS-08","name":"Su\u00f0urland"},"845":{"code":"IS-02","name":"Su\u00f0urnes"},"847":{"code":"IS-04","name":"Vestfir\u00f0ir"},"846":{"code":"IS-03","name":"Vesturland"}}},"IT":{"name":"Italy","regions":{"852":{"code":"AG","name":"Agrigento"},"853":{"code":"AL","name":"Alessandria"},"854":{"code":"AN","name":"Ancona"},"855":{"code":"AO","name":"Aosta"},"857":{"code":"AR","name":"Arezzo"},"858":{"code":"AP","name":"Ascoli-Piceno"},"859":{"code":"AT","name":"Asti"},"860":{"code":"AV","name":"Avellino"},"861":{"code":"BA","name":"Bari"},"862":{"code":"BT","name":"Barletta-Andria-Trani"},"863":{"code":"BL","name":"Belluno"},"864":{"code":"BN","name":"Benevento"},"865":{"code":"BG","name":"Bergamo"},"866":{"code":"BI","name":"Biella"},"867":{"code":"BO","name":"Bologna"},"868":{"code":"BZ","name":"Bolzano"},"869":{"code":"BS","name":"Brescia"},"870":{"code":"BR","name":"Brindisi"},"871":{"code":"CA","name":"Cagliari"},"872":{"code":"CL","name":"Caltanissetta"},"873":{"code":"CB","name":"Campobasso"},"874":{"code":"CI","name":"Carbonia Iglesias"},"875":{"code":"CE","name":"Caserta"},"876":{"code":"CT","name":"Catania"},"877":{"code":"CZ","name":"Catanzaro"},"878":{"code":"CH","name":"Chieti"},"879":{"code":"CO","name":"Como"},"880":{"code":"CS","name":"Cosenza"},"881":{"code":"CR","name":"Cremona"},"882":{"code":"KR","name":"Crotone"},"883":{"code":"CN","name":"Cuneo"},"884":{"code":"EN","name":"Enna"},"885":{"code":"FM","name":"Fermo"},"886":{"code":"FE","name":"Ferrara"},"887":{"code":"FI","name":"Firenze"},"888":{"code":"FG","name":"Foggia"},"889":{"code":"FC","name":"Forli-Cesena"},"890":{"code":"FR","name":"Frosinone"},"891":{"code":"GE","name":"Genova"},"892":{"code":"GO","name":"Gorizia"},"893":{"code":"GR","name":"Grosseto"},"894":{"code":"IM","name":"Imperia"},"895":{"code":"IS","name":"Isernia"},"856":{"code":"AQ","name":"L'Aquila"},"896":{"code":"SP","name":"La-Spezia"},"897":{"code":"LT","name":"Latina"},"898":{"code":"LE","name":"Lecce"},"899":{"code":"LC","name":"Lecco"},"900":{"code":"LI","name":"Livorno"},"901":{"code":"LO","name":"Lodi"},"902":{"code":"LU","name":"Lucca"},"903":{"code":"MC","name":"Macerata"},"904":{"code":"MN","name":"Mantova"},"905":{"code":"MS","name":"Massa-Carrara"},"906":{"code":"MT","name":"Matera"},"907":{"code":"VS","name":"Medio Campidano"},"908":{"code":"ME","name":"Messina"},"909":{"code":"MI","name":"Milano"},"910":{"code":"MO","name":"Modena"},"911":{"code":"MB","name":"Monza-Brianza"},"912":{"code":"NA","name":"Napoli"},"913":{"code":"NO","name":"Novara"},"914":{"code":"NU","name":"Nuoro"},"915":{"code":"OG","name":"Ogliastra"},"916":{"code":"OT","name":"Olbia Tempio"},"917":{"code":"OR","name":"Oristano"},"918":{"code":"PD","name":"Padova"},"919":{"code":"PA","name":"Palermo"},"920":{"code":"PR","name":"Parma"},"921":{"code":"PV","name":"Pavia"},"922":{"code":"PG","name":"Perugia"},"923":{"code":"PU","name":"Pesaro-Urbino"},"924":{"code":"PE","name":"Pescara"},"925":{"code":"PC","name":"Piacenza"},"926":{"code":"PI","name":"Pisa"},"927":{"code":"PT","name":"Pistoia"},"928":{"code":"PN","name":"Pordenone"},"929":{"code":"PZ","name":"Potenza"},"930":{"code":"PO","name":"Prato"},"931":{"code":"RG","name":"Ragusa"},"932":{"code":"RA","name":"Ravenna"},"933":{"code":"RC","name":"Reggio-Calabria"},"934":{"code":"RE","name":"Reggio-Emilia"},"935":{"code":"RI","name":"Rieti"},"936":{"code":"RN","name":"Rimini"},"937":{"code":"RM","name":"Roma"},"938":{"code":"RO","name":"Rovigo"},"939":{"code":"SA","name":"Salerno"},"940":{"code":"SS","name":"Sassari"},"941":{"code":"SV","name":"Savona"},"942":{"code":"SI","name":"Siena"},"943":{"code":"SR","name":"Siracusa"},"944":{"code":"SO","name":"Sondrio"},"945":{"code":"TA","name":"Taranto"},"946":{"code":"TE","name":"Teramo"},"947":{"code":"TR","name":"Terni"},"948":{"code":"TO","name":"Torino"},"949":{"code":"TP","name":"Trapani"},"950":{"code":"TN","name":"Trento"},"951":{"code":"TV","name":"Treviso"},"952":{"code":"TS","name":"Trieste"},"953":{"code":"UD","name":"Udine"},"954":{"code":"VA","name":"Varese"},"955":{"code":"VE","name":"Venezia"},"956":{"code":"VB","name":"Verbania"},"957":{"code":"VC","name":"Vercelli"},"958":{"code":"VR","name":"Verona"}
7506,"959":{"code":"VV","name":"Vibo-Valentia"},"960":{"code":"VI","name":"Vicenza"},"961":{"code":"VT","name":"Viterbo"}}},"JE":{"name":"Jersey"},"JM":{"name":"Jamaica"},"JO":{"name":"Jordan"},"JP":{"name":"Japan"},"KE":{"name":"Kenya"},"KG":{"name":"Kyrgyzstan"},"KH":{"name":"Cambodia"},"KI":{"name":"Kiribati"},"KM":{"name":"Comoros"},"KN":{"name":"St. Kitts & Nevis"},"KP":{"name":"North Korea"},"KR":{"name":"South Korea"},"KW":{"name":"Kuwait"},"KY":{"name":"Cayman Islands"},"KZ":{"name":"Kazakhstan"},"LA":{"name":"Laos"},"LB":{"name":"Lebanon"},"LC":{"name":"St. Lucia"},"LI":{"name":"Liechtenstein"},"LK":{"name":"Sri Lanka"},"LR":{"name":"Liberia"},"LS":{"name":"Lesotho"},"LT":{"name":"Lithuania","regions":{"475":{"code":"LT-AL","name":"Alytaus Apskritis"},"476":{"code":"LT-KU","name":"Kauno Apskritis"},"477":{"code":"LT-KL","name":"Klaip\u0117dos Apskritis"},"478":{"code":"LT-MR","name":"Marijampol\u0117s Apskritis"},"479":{"code":"LT-PN","name":"Panev\u0117\u017eio Apskritis"},"480":{"code":"LT-SA","name":"\u0160iauli\u0173 Apskritis"},"481":{"code":"LT-TA","name":"Taurag\u0117s Apskritis"},"482":{"code":"LT-TE","name":"Tel\u0161i\u0173 Apskritis"},"483":{"code":"LT-UT","name":"Utenos Apskritis"},"484":{"code":"LT-VL","name":"Vilniaus Apskritis"}}},"LU":{"name":"Luxembourg"},"LV":{"name":"Latvia","regions":{"471":{"code":"\u0100da\u017eu novads","name":"\u0100da\u017eu novads"},"366":{"code":"Aglonas novads","name":"Aglonas novads"},"367":{"code":"LV-AI","name":"Aizkraukles novads"},"368":{"code":"Aizputes novads","name":"Aizputes novads"},"369":{"code":"Akn\u012bstes novads","name":"Akn\u012bstes novads"},"370":{"code":"Alojas novads","name":"Alojas novads"},"371":{"code":"Alsungas novads","name":"Alsungas novads"},"372":{"code":"LV-AL","name":"Al\u016bksnes novads"},"373":{"code":"Amatas novads","name":"Amatas novads"},"374":{"code":"Apes novads","name":"Apes novads"},"375":{"code":"Auces novads","name":"Auces novads"},"376":{"code":"Bab\u012btes novads","name":"Bab\u012btes novads"},"377":{"code":"Baldones novads","name":"Baldones novads"},"378":{"code":"Baltinavas novads","name":"Baltinavas novads"},"379":{"code":"LV-BL","name":"Balvu novads"},"380":{"code":"LV-BU","name":"Bauskas novads"},"381":{"code":"Bever\u012bnas novads","name":"Bever\u012bnas novads"},"382":{"code":"Broc\u0113nu novads","name":"Broc\u0113nu novads"},"383":{"code":"Burtnieku novads","name":"Burtnieku novads"},"384":{"code":"Carnikavas novads","name":"Carnikavas novads"},"387":{"code":"LV-CE","name":"C\u0113su novads"},"385":{"code":"Cesvaines novads","name":"Cesvaines novads"},"386":{"code":"Ciblas novads","name":"Ciblas novads"},"388":{"code":"Dagdas novads","name":"Dagdas novads"},"355":{"code":"LV-DGV","name":"Daugavpils"},"389":{"code":"LV-DA","name":"Daugavpils novads"},"390":{"code":"LV-DO","name":"Dobeles novads"},"391":{"code":"Dundagas novads","name":"Dundagas novads"},"392":{"code":"Durbes novads","name":"Durbes novads"},"393":{"code":"Engures novads","name":"Engures novads"},"472":{"code":"\u0112rg\u013cu novads","name":"\u0112rg\u013cu novads"},"394":{"code":"Garkalnes novads","name":"Garkalnes novads"},"395":{"code":"Grobi\u0146as novads","name":"Grobi\u0146as novads"},"396":{"code":"LV-GU","name":"Gulbenes novads"},"397":{"code":"Iecavas novads","name":"Iecavas novads"},"398":{"code":"Ik\u0161\u0137iles novads","name":"Ik\u0161\u0137iles novads"},"399":{"code":"Il\u016bkstes novads","name":"Il\u016bkstes novads"},"400":{"code":"In\u010dukalna novads","name":"In\u010dukalna novads"},"401":{"code":"Jaunjelgavas novads","name":"Jaunjelgavas novads"},"402":{"code":"Jaunpiebalgas novads","name":"Jaunpiebalgas novads"},"403":{"code":"Jaunpils novads","name":"Jaunpils novads"},"357":{"code":"J\u0113kabpils","name":"J\u0113kabpils"},"405":{"code":"LV-JK","name":"J\u0113kabpils novads"},"356":{"code":"LV-JEL","name":"Jelgava"},"404":{"code":"LV-JL","name":"Jelgavas novads"},"358":{"code":"LV-JUR","name":"J\u016brmala"},"406":{"code":"Kandavas novads","name":"Kandavas novads"},"412":{"code":"K\u0101rsavas novads","name":"K\u0101rsavas novads"},"473":{"code":"\u0136eguma novads","name":"\u0136eguma novads"},"474":{"code":"\u0136ekavas novads","name":"\u0136ekavas novads"},"407":{"code":"Kokneses novads","name":"Kokneses novads"},"410":{"code":"LV-KR","name":"Kr\u0101slavas novads"},"408":{"code":"Krimuldas novads","name":"Krimuldas novads"},"409":{"code":"Krustpils novads","name":"Krustpils novads"},"411":{"code":"LV-KU","name":"Kuld\u012bgas novads"},"413":{"code":"Lielv\u0101rdes novads","name":"Lielv\u0101rdes novads"},"359":{"code":"LV-LPX","name":"Liep\u0101ja"},"360":{"code":"LV-LE","name":"Liep\u0101jas novads"},"417":{"code":"L\u012bgatnes novads","name":"L\u012bgatnes novads"},"414":{"code":"LV-LM","name":"Limba\u017eu novads"},"418":{"code":"L\u012bv\u0101nu novads","name":"L\u012bv\u0101nu novads"},"415":{"code":"Lub\u0101nas novads","name":"Lub\u0101nas novads"},"416":{"code":"LV-LU","name":"Ludzas novads"},"419":{"code":"LV-MA","name":"Madonas novads"},"421":{"code":"M\u0101lpils novads","name":"M\u0101lpils novads"},"422":{"code":"M\u0101rupes novads","name":"M\u0101rupes novads"},"420":{"code":"Mazsalacas novads","name":"Mazsalacas novads"},"423":{"code":"Nauk\u0161\u0113nu novads","name":"Nauk\u0161\u0113nu novads"},"424":{"code":"Neretas novads","name":"Neretas novads"},"425":{"code":"N\u012bcas novads","name":"N\u012bcas novads"},"426":{"code":"LV-OG","name":"Ogres novads"},"427":{"code":"Olaines novads","name":"Olaines novads"},"428":{"code":"Ozolnieku novads","name":"Ozolnieku novads"},"432":{"code":"P\u0101rgaujas novads","name":"P\u0101rgaujas novads"},"433":{"code":"P\u0101vilostas novads","name":"P\u0101vilostas novads"},"434":{"code":"P\u013cavi\u0146u novads","name":"P\u013cavi\u0146u novads"},"429":{"code":"LV-PR","name":"Prei\u013cu novads"},"430":{"code":"Priekules novads","name":"Priekules novads"},"431":{"code":"Prieku\u013cu novads","name":"Prieku\u013cu novads"},"435":{"code":"Raunas novads","name":"Raunas novads"},"361":{"code":"LV-REZ","name":"R\u0113zekne"},"442":{"code":"LV-RE","name":"R\u0113zeknes novads"},"436":{"code":"Riebi\u0146u novads","name":"Riebi\u0146u novads"},"362":{"code":"LV-RIX","name":"R\u012bga"},"363":{"code":"LV-RI","name":"R\u012bgas novads"},"437":{"code":"Rojas novads","name":"Rojas novads"},"438":{"code":"Ropa\u017eu novads","name":"Ropa\u017eu novads"},"439":{"code":"Rucavas novads","name":"Rucavas novads"},"440":{"code":"Rug\u0101ju novads","name":"Rug\u0101ju novads"},"443":{"code":"R\u016bjienas novads","name":"R\u016bjienas novads"},"441":{"code":"Rund\u0101les novads","name":"Rund\u0101les novads"},"444":{"code":"Salacgr\u012bvas novads","name":"Salacgr\u012bvas novads"},"445":{"code":"Salas novads","name":"Salas novads"},"446":{"code":"Salaspils novads","name":"Salaspils novads"},"447":{"code":"LV-SA","name":"Saldus novads"},"448":{"code":"Saulkrastu novads","name":"Saulkrastu novads"},"455":{"code":"S\u0113jas novads","name":"S\u0113jas novads"},"449":{"code":"Siguldas novads","name":"Siguldas novads"}
7506,"451":{"code":"Skr\u012bveru novads","name":"Skr\u012bveru novads"},"450":{"code":"Skrundas novads","name":"Skrundas novads"},"452":{"code":"Smiltenes novads","name":"Smiltenes novads"},"453":{"code":"Stopi\u0146u novads","name":"Stopi\u0146u novads"},"454":{"code":"Stren\u010du novads","name":"Stren\u010du novads"},"456":{"code":"LV-TA","name":"Talsu novads"},"458":{"code":"T\u0113rvetes novads","name":"T\u0113rvetes novads"},"457":{"code":"LV-TU","name":"Tukuma novads"},"459":{"code":"Vai\u0146odes novads","name":"Vai\u0146odes novads"},"460":{"code":"LV-VK","name":"Valkas novads"},"364":{"code":"Valmiera","name":"Valmiera"},"461":{"code":"LV-VM","name":"Valmieras novads"},"462":{"code":"Varak\u013c\u0101nu novads","name":"Varak\u013c\u0101nu novads"},"469":{"code":"V\u0101rkavas novads","name":"V\u0101rkavas novads"},"463":{"code":"Vecpiebalgas novads","name":"Vecpiebalgas novads"},"464":{"code":"Vecumnieku novads","name":"Vecumnieku novads"},"365":{"code":"LV-VEN","name":"Ventspils"},"465":{"code":"LV-VE","name":"Ventspils novads"},"466":{"code":"Vies\u012btes novads","name":"Vies\u012btes novads"},"467":{"code":"Vi\u013cakas novads","name":"Vi\u013cakas novads"},"468":{"code":"Vi\u013c\u0101nu novads","name":"Vi\u013c\u0101nu novads"},"470":{"code":"Zilupes novads","name":"Zilupes novads"}}},"LY":{"name":"Libya"},"MA":{"name":"Morocco"},"MC":{"name":"Monaco"},"MD":{"name":"Moldova"},"ME":{"name":"Montenegro"},"MF":{"name":"St. Martin"},"MG":{"name":"Madagascar"},"MH":{"name":"Marshall Islands"},"MK":{"name":"North Macedonia"},"ML":{"name":"Mali"},"MM":{"name":"Myanmar (Burma)"},"MN":{"name":"Mongolia"},"MO":{"name":"Macao SAR China"},"MP":{"name":"Northern Mariana Islands"},"MQ":{"name":"Martinique"},"MR":{"name":"Mauritania"},"MS":{"name":"Montserrat"},"MT":{"name":"Malta"},"MU":{"name":"Mauritius"},"MV":{"name":"Maldives"},"MW":{"name":"Malawi"},"MX":{"name":"Mexico","regions":{"577":{"code":"AGU","name":"Aguascalientes"},"578":{"code":"BCN","name":"Baja California"},"579":{"code":"BCS","name":"Baja California Sur"},"580":{"code":"CAM","name":"Campeche"},"581":{"code":"CHP","name":"Chiapas"},"582":{"code":"CHH","name":"Chihuahua"},"583":{"code":"CMX","name":"Ciudad de M\u00e9xico"},"584":{"code":"COA","name":"Coahuila"},"585":{"code":"COL","name":"Colima"},"586":{"code":"DUR","name":"Durango"},"587":{"code":"MEX","name":"Estado de M\u00e9xico"},"588":{"code":"GUA","name":"Guanajuato"},"589":{"code":"GRO","name":"Guerrero"},"590":{"code":"HID","name":"Hidalgo"},"591":{"code":"JAL","name":"Jalisco"},"592":{"code":"MIC","name":"Michoac\u00e1n"},"593":{"code":"MOR","name":"Morelos"},"594":{"code":"NAY","name":"Nayarit"},"595":{"code":"NLE","name":"Nuevo Le\u00f3n"},"596":{"code":"OAX","name":"Oaxaca"},"597":{"code":"PUE","name":"Puebla"},"598":{"code":"QUE","name":"Quer\u00e9taro"},"599":{"code":"ROO","name":"Quintana Roo"},"600":{"code":"SLP","name":"San Luis Potos\u00ed"},"601":{"code":"SIN","name":"Sinaloa"},"602":{"code":"SON","name":"Sonora"},"603":{"code":"TAB","name":"Tabasco"},"604":{"code":"TAM","name":"Tamaulipas"},"605":{"code":"TLA","name":"Tlaxcala"},"606":{"code":"VER","name":"Veracruz"},"607":{"code":"YUC","name":"Yucat\u00e1n"},"608":{"code":"ZAC","name":"Zacatecas"}}},"MY":{"name":"Malaysia"},"MZ":{"name":"Mozambique"},"NA":{"name":"Namibia"},"NC":{"name":"New Caledonia"},"NE":{"name":"Niger"},"NF":{"name":"Norfolk Island"},"NG":{"name":"Nigeria"},"NI":{"name":"Nicaragua"},"NL":{"name":"Netherlands"},"NO":{"name":"Norway"},"NP":{"name":"Nepal"},"NR":{"name":"Nauru"},"NU":{"name":"Niue"},"NZ":{"name":"New Zealand"},"OM":{"name":"Oman"},"PA":{"name":"Panama"},"PE":{"name":"Peru","regions":{"981":{"code":"PE-AMA","name":"Amazonas"},"982":{"code":"PE-ANC","name":"Ancash"},"983":{"code":"PE-APU","name":"Apur\u00edmac"},"984":{"code":"PE-ARE","name":"Arequipa"},"985":{"code":"PE-AYA","name":"Ayacucho"},"986":{"code":"PE-CAJ","name":"Cajamarca"},"987":{"code":"PE-CUS","name":"Cusco"},"988":{"code":"PE-CAL","name":"El Callao"},"989":{"code":"PE-HUV","name":"Huancavelica"},"990":{"code":"PE-HUC","name":"Hu\u00e1nuco"},"991":{"code":"PE-ICA","name":"Ica"},"992":{"code":"PE-JUN","name":"Jun\u00edn"},"993":{"code":"PE-LAL","name":"La Libertad"},"994":{"code":"PE-LAM","name":"Lambayeque"},"995":{"code":"PE-LIM","name":"Lima"},"996":{"code":"PE-LOR","name":"Loreto"},"997":{"code":"PE-MDD","name":"Madre de Dios"},"998":{"code":"PE-MOQ","name":"Moquegua"}
7506,"980":{"code":"PE-LMA","name":"Municipalidad Metropolitana de Lima"},"999":{"code":"PE-PAS","name":"Pasco"},"1000":{"code":"PE-PIU","name":"Piura"},"1001":{"code":"PE-PUN","name":"Puno"},"1002":{"code":"PE-SAM","name":"San Mart\u00edn"},"1003":{"code":"PE-TAC","name":"Tacna"},"1004":{"code":"PE-TUM","name":"Tumbes"},"1005":{"code":"PE-UCA","name":"Ucayali"}}},"PF":{"name":"French Polynesia"},"PG":{"name":"Papua New Guinea"},"PH":{"name":"Philippines"},"PK":{"name":"Pakistan"},"PL":{"name":"Poland","regions":{"686":{"code":"PL-02","name":"dolno\u015bl\u0105skie"},"687":{"code":"PL-04","name":"kujawsko-pomorskie"},"688":{"code":"PL-06","name":"lubelskie"},"689":{"code":"PL-08","name":"lubuskie"},"692":{"code":"PL-14","name":"mazowieckie"},"691":{"code":"PL-12","name":"ma\u0142opolskie"},"693":{"code":"PL-16","name":"opolskie"},"694":{"code":"PL-18","name":"podkarpackie"},"695":{"code":"PL-20","name":"podlaskie"},"696":{"code":"PL-22","name":"pomorskie"},"697":{"code":"PL-24","name":"\u015bl\u0105skie"},"698":{"code":"PL-26","name":"\u015bwi\u0119tokrzyskie"},"699":{"code":"PL-28","name":"warmi\u0144sko-mazurskie"},"700":{"code":"PL-30","name":"wielkopolskie"},"701":{"code":"PL-32","name":"zachodniopomorskie"},"690":{"code":"PL-10","name":"\u0142\u00f3dzkie"}}},"PM":{"name":"St. Pierre & Miquelon"},"PN":{"name":"Pitcairn Islands"},"PS":{"name":"Palestinian Territories"},"PT":{"name":"Portugal","regions":{"1006":{"code":"PT-01","name":"Aveiro"},"1007":{"code":"PT-02","name":"Beja"},"1008":{"code":"PT-03","name":"Braga"},"1009":{"code":"PT-04","name":"Bragan\u00e7a"},"1010":{"code":"PT-05","name":"Castelo Branco"},"1011":{"code":"PT-06","name":"Coimbra"},"1012":{"code":"PT-07","name":"\u00c9vora"},"1013":{"code":"PT-08","name":"Faro"},"1014":{"code":"PT-09","name":"Guarda"},"1015":{"code":"PT-10","name":"Leiria"},"1016":{"code":"PT-11","name":"Lisboa"},"1017":{"code":"PT-12","name":"Portalegre"},"1018":{"code":"PT-13","name":"Porto"},"1025":{"code":"PT-30","name":"Regi\u00e3o Aut\u00f3noma da Madeira"},"1024":{"code":"PT-20","name":"Regi\u00e3o Aut\u00f3noma dos A\u00e7ores"},"1019":{"code":"PT-14","name":"Santar\u00e9m"},"1020":{"code":"PT-15","name":"Set\u00fabal"},"1021":{"code":"PT-16","name":"Viana do Castelo"},"1022":{"code":"PT-17","name":"Vila Real"},"1023":{"code":"PT-18","name":"Viseu"}}},"PW":{"name":"Palau"},"PY":{"name":"Paraguay","regions":{"963":{"code":"PY-16","name":"Alto Paraguay"},"964":{"code":"PY-10","name":"Alto Paran\u00e1"},"965":{"code":"PY-13","name":"Amambay"},"962":{"code":"PY-ASU","name":"Asunci\u00f3n"},"966":{"code":"PY-19","name":"Boquer\u00f3n"},"967":{"code":"PY-5","name":"Caaguaz\u00fa"},"968":{"code":"PY-6","name":"Caazap\u00e1"},"969":{"code":"PY-14","name":"Canindey\u00fa"},"970":{"code":"PY-11","name":"Central"},"971":{"code":"PY-1","name":"Concepci\u00f3n"},"972":{"code":"PY-3","name":"Cordillera"},"973":{"code":"PY-4","name":"Guair\u00e1"},"974":{"code":"PY-7","name":"Itap\u00faa"},"975":{"code":"PY-8","name":"Misiones"},"976":{"code":"PY-12","name":"\u00d1eembuc\u00fa"},"977":{"code":"PY-9","name":"Paraguar\u00ed"},"978":{"code":"PY-15","name":"Presidente Hayes"},"979":{"code":"PY-2","name":"San Pedro"}}},"QA":{"name":"Qatar"},"RE":{"name":"R\u00e9union"},"RS":{"name":"Serbia"},"RW":{"name":"Rwanda"},"SA":{"name":"Saudi Arabia"},"SB":{"name":"Solomon Islands"},"SC":{"name":"Seychelles"},"SD":{"name":"Sudan"},"SE":{"name":"Sweden","regions":{"1036":{"code":"SE-K","name":"Blekinge l\u00e4n"},"1037":{"code":"SE-W","name":"Dalarnas l\u00e4n"},"1039":{"code":"SE-X","name":"G\u00e4vleborgs l\u00e4n"},"1038":{"code":"SE-I","name":"Gotlands l\u00e4n"},"1040":{"code":"SE-N","name":"Hallands l\u00e4n"},"1041":{"code":"SE-Z","name":"J\u00e4mtlands l\u00e4n"},"1042":{"code":"SE-F","name":"J\u00f6nk\u00f6pings l\u00e4n"},"1043":{"code":"SE-H","name":"Kalmar l\u00e4n"},"1044":{"code":"SE-G","name":"Kronobergs l\u00e4n"},"1045":{"code":"SE-BD","name":"Norrbottens l\u00e4n"},"1055":{"code":"SE-T","name":"\u00d6rebro l\u00e4n"},"1056":{"code":"SE-E","name":"\u00d6sterg\u00f6tlands l\u00e4n"},"1046":{"code":"SE-M","name":"Sk\u00e5ne l\u00e4n"},"1048":{"code":"SE-D","name":"S\u00f6dermanlands l\u00e4n"},"1047":{"code":"SE-AB","name":"Stockholms l\u00e4n"},"1049":{"code":"SE-C","name":"Uppsala l\u00e4n"},"1050":{"code":"SE-S","name":"V\u00e4rmlands l\u00e4n"},"1051":{"code":"SE-AC","name":"V\u00e4sterbottens l\u00e4n"},"1052":{"code":"SE-Y","name":"V\u00e4sternorrlands l\u00e4n"},"1053":{"code":"SE-U","name":"V\u00e4stmanlands l\u00e4n"},"1054":{"code":"SE-O","name":"V\u00e4stra G\u00f6talands l\u00e4n"}}},"SG":{"name":"Singapore"},"SH":{"name":"St. Helena"},"SI":{"name":"Slovenia"},"SJ":{"name":"Svalbard & Jan Mayen"},"SK":{"name":"Slovakia"},"SL":{"name":"Sierra Leone"},"SM":{"name":"San Marino"},"SN":{"name":"Senegal"},"SO":{"name":"Somalia"}
7506,"SR":{"name":"Suriname","regions":{"1026":{"code":"SR-BR","name":"Brokopondo"},"1027":{"code":"SR-CM","name":"Commewijne"},"1028":{"code":"SR-CR","name":"Coronie"},"1029":{"code":"SR-MA","name":"Marowijne"},"1030":{"code":"SR-NI","name":"Nickerie"},"1031":{"code":"SR-PR","name":"Para"},"1032":{"code":"SR-PM","name":"Paramaribo"},"1033":{"code":"SR-SA","name":"Saramacca"},"1034":{"code":"SR-SI","name":"Sipaliwini"},"1035":{"code":"SR-WA","name":"Wanica"}}},"ST":{"name":"S\u00e3o Tom\u00e9 & Pr\u00edncipe"},"SV":{"name":"El Salvador"},"SX":{"name":"Sint Maarten"},"SY":{"name":"Syria"},"SZ":{"name":"Eswatini"},"TC":{"name":"Turks & Caicos Islands"},"TD":{"name":"Chad"},"TF":{"name":"French Southern Territories"},"TG":{"name":"Togo"},"TH":{"name":"Thailand"},"TJ":{"name":"Tajikistan"},"TK":{"name":"Tokelau"},"TL":{"name":"Timor-Leste"},"TM":{"name":"Turkmenistan"},"TN":{"name":"Tunisia"},"TO":{"name":"Tonga"},"TR":{"name":"Turkey"},"TT":{"name":"Trinidad & Tobago"},"TV":{"name":"Tuvalu"},"TW":{"name":"Taiwan, Province of China"},"TZ":{"name":"Tanzania"},"UA":{"name":"Ukraine"},"UG":{"name":"Uganda"},"UM":{"name":"U.S. Outlying Islands"},"US":{"name":"United States","regions":{"1":{"code":"AL","name":"Alabama"},"2":{"code":"AK","name":"Alaska"},"3":{"code":"AS","name":"American Samoa"},"4":{"code":"AZ","name":"Arizona"},"5":{"code":"AR","name":"Arkansas"},"6":{"code":"AE","name":"Armed Forces Africa"},"7":{"code":"AA","name":"Armed Forces Americas"},"8":{"code":"AE","name":"Armed Forces Canada"},"9":{"code":"AE","name":"Armed Forces Europe"},"10":{"code":"AE","name":"Armed Forces Middle East"},"11":{"code":"AP","name":"Armed Forces Pacific"},"12":{"code":"CA","name":"California"},"13":{"code":"CO","name":"Colorado"},"14":{"code":"CT","name":"Connecticut"},"15":{"code":"DE","name":"Delaware"},"16":{"code":"DC","name":"District of Columbia"},"17":{"code":"FM","name":"Federated States Of Micronesia"},"18":{"code":"FL","name":"Florida"},"19":{"code":"GA","name":"Georgia"},"20":{"code":"GU","name":"Guam"},"21":{"code":"HI","name":"Hawaii"},"22":{"code":"ID","name":"Idaho"},"23":{"code":"IL","name":"Illinois"},"24":{"code":"IN","name":"Indiana"},"25":{"code":"IA","name":"Iowa"},"26":{"code":"KS","name":"Kansas"},"27":{"code":"KY","name":"Kentucky"},"28":{"code":"LA","name":"Louisiana"},"29":{"code":"ME","name":"Maine"},"30":{"code":"MH","name":"Marshall Islands"},"31":{"code":"MD","name":"Maryland"},"32":{"code":"MA","name":"Massachusetts"},"33":{"code":"MI","name":"Michigan"},"34":{"code":"MN","name":"Minnesota"},"35":{"code":"MS","name":"Mississippi"},"36":{"code":"MO","name":"Missouri"},"37":{"code":"MT","name":"Montana"},"38":{"code":"NE","name":"Nebraska"},"39":{"code":"NV","name":"Nevada"},"40":{"code":"NH","name":"New Hampshire"},"41":{"code":"NJ","name":"New Jersey"},"42":{"code":"NM","name":"New Mexico"},"43":{"code":"NY","name":"New York"},"44":{"code":"NC","name":"North Carolina"},"45":{"code":"ND","name":"North Dakota"},"46":{"code":"MP","name":"Northern Mariana Islands"},"47":{"code":"OH","name":"Ohio"},"48":{"code":"OK","name":"Oklahoma"},"49":{"code":"OR","name":"Oregon"},"50":{"code":"PW","name":"Palau"},"51":{"code":"PA","name":"Pennsylvania"},"52":{"code":"PR","name":"Puerto Rico"},"53":{"code":"RI","name":"Rhode Island"},"54":{"code":"SC","name":"South Carolina"},"55":{"code":"SD","name":"South Dakota"},"56":{"code":"TN","name":"Tennessee"},"57":{"code":"TX","name":"Texas"},"58":{"code":"UT","name":"Utah"},"59":{"code":"VT","name":"Vermont"},"60":{"code":"VI","name":"Virgin Islands"},"61":{"code":"VA","name":"Virginia"},"62":{"code":"WA","name":"Washington"},"63":{"code":"WV","name":"West Virginia"},"64":{"code":"WI","name":"Wisconsin"},"65":{"code":"WY","name":"Wyoming"}}},"UY":{"name":"Uruguay","regions":{"1057":{"code":"UY-AR","name":"Artigas"},"1058":{"code":"UY-CA","name":"Canelones"},"1059":{"code":"UY-CL","name":"Cerro Largo"},"1060":{"code":"UY-CO","name":"Colonia"},"1061":{"code":"UY-DU","name":"Durazno"},"1062":{"code":"UY-FS","name":"Flores"},"1063":{"code":"UY-FD","name":"Florida"},"1064":{"code":"UY-LA","name":"Lavalleja"},"1065":{"code":"UY-MA","name":"Maldonado"},"1066":{"code":"UY-MO","name":"Montevideo"},"1067":{"code":"UY-PA","name":"Paysandu"},"1068":{"code":"UY-RN","name":"R\u00edo Negro"},"1069":{"code":"UY-RV","name":"Rivera"},"1070":{"code":"UY-RO","name":"Rocha"},"1071":{"code":"UY-SA","name":"Salto"},"1072":{"code":"UY-SJ","name":"San Jos\u00e9"},"1073":{"code":"UY-SO","name":"Soriano"},"1074":{"code":"UY-TA","name":"Tacuaremb\u00f3"},"1075":{"code":"UY-TT","name":"Treinta y Tres"}}},"UZ":{"name":"Uzbekistan"},"VA":{"name":"Vatican City"},"VC":{"name":"St. Vincent & Grenadines"},"VE":{"name":"Venezuela","regions":{"1078":{"code":"VE-Z","name":"Amazonas"},"1079":{"code":"VE-B","name":"Anzo\u00e1tegui"},"1080":{"code":"VE-C","name":"Apure"},"1081":{"code":"VE-D","name":"Aragua"},"1082":{"code":"VE-E","name":"Barinas"},"1083":{"code":"VE-F","name":"Bol\u00edvar"},"1084":{"code":"VE-G","name":"Carabobo"},"1085":{"code":"VE-H","name":"Cojedes"},"1086":{"code":"VE-Y","name":"Delta Amacuro"},"1076":{"code":"VE-W","name":"Dependencias Federales"},"1077":{"code":"VE-A","name":"Distrito Capital"},"1087":{"code":"VE-I","name":"Falc\u00f3n"},"1088":{"code":"VE-J","name":"Gu\u00e1rico"},"1089":{"code":"VE-K","name":"Lara"}
7506,"1090":{"code":"VE-L","name":"M\u00e9rida"},"1091":{"code":"VE-M","name":"Miranda"},"1092":{"code":"VE-N","name":"Monagas"},"1093":{"code":"VE-O","name":"Nueva Esparta"},"1094":{"code":"VE-P","name":"Portuguesa"},"1095":{"code":"VE-R","name":"Sucre"},"1096":{"code":"VE-S","name":"T\u00e1chira"},"1097":{"code":"VE-T","name":"Trujillo"},"1098":{"code":"VE-X","name":"Vargas"},"1099":{"code":"VE-U","name":"Yaracuy"},"1100":{"code":"VE-V","name":"Zulia"}}},"VG":{"name":"British Virgin Islands"},"VI":{"name":"U.S. Virgin Islands"},"VN":{"name":"Vietnam"},"VU":{"name":"Vanuatu"},"WF":{"name":"Wallis & Futuna"},"WS":{"name":"Samoa"},"XK":{"name":"Kosovo"},"YE":{"name":"Yemen"},"YT":{"name":"Mayotte"},"ZA":{"name":"South Africa"},"ZM":{"name":"Zambia"},"ZW":{"name":"Zimbabwe"},"data_id":1790280124},"captcha":[],"wishlist":{"items":[]},"instant-purchase":[],"loggedAsCustomer":[],"multiplewishlist":[],"persistent":[],"review":[],"apptrian_metapixelapi_matching_section":[],"hyva_checkout":[],"location":[],"checkout-data":[],"ga4":[],"recently_viewed_product":[],"recently_compared_product":[],"product_data_storage":[],"paypal-billing-agreement":[]}</script>
7506 7507</div> <!-- Start of MageDelight GA4 Extension --> 7508 <!-- Google Tag Manager (noscript) -->
vendor: 69 bytes, lines 7508-7509
7508 7509<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
7509GTM-P36MHBN
vendor: 85 bytes, lines 7509-7510
7509" 7510height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
7511<!-- End Google Tag Manager (noscript) -->
7511<script> 7512 window.addEventListener('private-content-loaded', event => setupAjaxListener(event.detail.data)); 7513 window.addEventListener('checkout:shipping:method-activate', event => { 7514 let params = { 7515 'form_key' : hyva.getFormKey() 7516 }; 7517 const contentType = 'application/x-www-form-urlencoded; charset=UTF-8'; 7518 fetch('https://www.americanflags.com/hyvaga4/index/shippinginfo/', { 7519 method: "POST", 7520 body: new URLSearchParams(params), 7521 headers: {'Content-Type': contentType} 7522 }).then(response => response.json()) 7523 .then(data => { 7524 }).catch(error => {}); 7525 7526 window.dispatchEvent(new Event('ga4')); 7527 window.dispatchEvent(new Event('reload-customer-section-data')); 7528 7529 }); 7530 7531 window.addEventListener('checkout:payment:method-activate', event => { 7532 const method = event.detail.method; 7533 const _checkedMethod = document.querySelector('input[name="payment-method-option"]:checked'); 7534 const selected = _checkedMethod && _checkedMethod.value; 7535 if(method === selected) { 7536 let params = { 7537 'form_key': hyva.getFormKey(), 7538 'method': event.detail.method 7539 }; 7540 const contentType = 'application/x-www-form-urlencoded; charset=UTF-8'; 7541 fetch('https://www.americanflags.com/hyvaga4/index/paymentinfo/', { 7542 method: "POST", 7543 body: new URLSearchParams(params), 7544 headers: {'Content-Type': contentType} 7545 }) 7546 .then(response => response.json()) 7547 .then(data => { 7548 }).catch(error => { 7549 }); 7550 7551 window.dispatchEvent(new Event('ga4')); 7552 window.dispatchEvent(new Event('reload-customer-section-data')); 7553 } 7554 }); 7555 7556 function setupAjaxListener(data) { 7557 var dataLayerData = data && data.ga4 && data.ga4.datalayer; 7558 if (dataLayerData && dataLayerData.length > 0) { 7559 var dataLayerData = JSON.parse(dataLayerData); 7560 for (index in dataLayerData) { 7561 window.dataLayer.push({ ecommerce: null }); 7562 window.dataLayer.push(dataLayerData[index]); 7563 } 7564 data.ga4.datalayer = []; 7565 } 7566 } 7567 </script>
7567 7568 <!-- End of MageDelight GA4 Extension -->
7569<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"c7898b493ab34e9fbbf7f474f61e182d","spa":2}' crossorigin="anonymous"></script>
vendor: 1 bytes, line 7569
7569
7570<script>(function(){function c(){var b=a.contentDocument||(a.contentWindow&&a.contentWindow.document);if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'a404627b7d9350bb',t:'MTc5MDI4MDEyNA=='};var a=document.createElement('script');a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script>
7570</body> 7571</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.