PageSourceSearch

https://theloopwestend.com/

html theloopwestend.com collected 2026-10-06 18:37:11 UTC 167,444 bytes, 3,539 lines download raw bytes

1<!DOCTYPE html>
2�<html lang="en"><head><meta content="The Loop West End" property="og:site_name"/><meta content="http://theloopwestend.com/" property="og:url"/><meta content="website" property="og:type"/><meta content="Visit The Loop West End, a St Louis Park restaurant and bar serving American favorites, pizza, drinks, and more in the West End." property="og:description"/><meta content="The Loop West End - West End, St Louis Park, MN" property="og:title"/><!-- Google tag (gtag.js) -->
vendor: 71 bytes, line 2
2<script async="async" src="https://www.googletagmanager.com/gtag/js?id=
2G-VG24VK2VKT
vendor: 11 bytes, line 2
2"></script>
2<script>
3    window.dataLayer = window.dataLayer || [];
4    function gtag(){dataLayer.push(arguments);}
5    gtag('set', 'linker', {'domains': ['tmt.spotapps.co','spothopperapp.com']});
6    gtag('js', new Date());
7    gtag('config', 'G-GRDYRYTEWW');
8    gtag('config', 'G-VG24VK2VKT');
9  </script>
9<!-- wcache 2026-10-06 12:14:27.842011Z --><!--
10smart_footer: true,
11smart_footer_version: 2,
12scripting_active: false
13--><link href="https://theloopwestend.com/" rel="canonical"/><meta charset="utf-8"/><meta content="IE=edge" http-equiv="X-UA-Compatible"/><meta content="width=device-width, initial-scale=1" name="viewport"/><meta content="Visit The Loop West End, a St Louis Park restaurant and bar serving American favorites, pizza, drinks, and more in the West End." name="description"/><meta content="" name="author"/><meta content="https://static.spotapps.co/website_images/ab_websites/112064_website_v3/social_share.jpg" property="og:image"/><meta content="The Loop West End image" property="og:image:alt"/><meta content="image/png" property="og:image:type"/><meta content="734246769988821" property="fb:app_id"/><meta content="summary_large_image" name="twitter:card"/><meta content="The Loop West End - West End, St Louis Park, MN" name="twitter:title"/><meta content="The Loop West End offers a large variety of menu options, from salads and sandwiches to pizza and entrees such as the Salmon Rice Bowl, the Flank Steak Salad and the Mac-n-Cheese Pizza. We ..." name="twitter:description"/><meta content="https://static.spotapps.co/website_images/ab_websites/112064_website_v3/social_share.jpg" name="twitter:image"/><title>St Louis Park Restaurant, Bar &amp; Grill | The Loop West End</title><!-- wbv 1.60.0 --><meta content="1.60.0" name="wbv"/>
13<script>document.cookie='resolution='+Math.max(screen.width,screen.height)+("devicePixelRatio" in window ? ","+devicePixelRatio : ",1")+'; path=/';</script>
13<script type="application/ld+json">{"@context":"https:\/\/schema.org","@id":"https:\/\/theloopwestend.com\/","@type":"Restaurant","address":{"@type":"PostalAddress","addressCountry":"US","addressLocality":"St Louis Park","addressRegion":"MN","postalCode":"55416","streetAddress":"5331 West 16th Street"},"email":"[email protected]","geo":{"@type":"GeoCoordinates","latitude":44.9677932,"longitude":-93.3472604},"hasMenu":"https:\/\/theloopwestend.com\/food-menu","logo":"https:\/\/cdn.spotapps.co\/spothopper\/112064_logo_qruhuo","name":"The Loop West End","sameAs":["https:\/\/www.facebook.com\/734246769988821","https:\/\/www.instagram.com\/theloopwestend"],"telephone":"9526812684"}</script>
13<link href="https://static.spotapps.co/website_images/ab_websites/112064_website_v3/favicons/favicon-96x96.png" rel="icon" sizes="96x96" type="image/png"/><link href="https://static.spotapps.co/website_images/ab_websites/112064_website_v3/favicons/favicon.svg" rel="icon" type="image/svg+xml"/><link href="https://static.spotapps.co/website_images/ab_websites/112064_website_v3/favicons/favicon.ico" rel="shortcut icon"/><link href="https://static.spotapps.co/website_images/ab_websites/112064_website_v3/favicons/apple-touch-icon.png" rel="apple-touch-icon" sizes="180x180"/><meta content="The Loop West End" name="apple-mobile-web-app-title"/><link href="https://static.spotapps.co/website_images/ab_websites/112064_website_v3/favicons/site.webmanifest" rel="manifest"/><link href="https://static.spotapps.co/web/theloopwestend--com/lib/bootstrap/css/bootstrap.min.css" rel="stylesheet"/><link href="https://static.spotapps.co/web/theloopwestend--com/lib/gallery/gallery.css" rel="stylesheet"/><link href="https://static.spotapps.co/web/theloopwestend--com/lib/fancybox/source/jquery.fancybox.css" media="screen" rel="stylesheet" type="text/css"/><link href="https://static.spotapps.co/web/theloopwestend--com/lib/fancybox/source/helpers/jquery.fancybox-thumbs.css" rel="stylesheet" type="text/css"/><link href="//static.spotapps.co/web-lib/leaflet/[email protected]/dist/leaflet-gesture-handling.min.css" rel="stylesheet" type="text/css"/><link href="https://static.spotapps.co/web/theloopwestend--com/lib/uikit/css/uikit.docs.min.css" rel="stylesheet"/><link href="https://static.spotapps.co/web/theloopwestend--com/lib/uikit/css/slidenav.css" rel="stylesheet"/><link href="https://static.spotapps.co/web/theloopwestend--com/lib/font-awesome-4.7.0/css/font-awesome.min.css" rel="stylesheet"/><link href="https://static.spotapps.co/web/theloopwestend--com/lib/hover_css/css/hover-min.css" rel="stylesheet"/><link href="https://static.spotapps.co/web/theloopwestend--com/lib/owlcarousel/owl.carousel.min.css" rel="stylesheet"/><link href="https://static.spotapps.co/web/theloopwestend--com/lib/owlcarousel/owl.theme.default.min.css" rel="stylesheet"/><link href="https://static.spotapps.co/web-lib/leaflet/[email protected]/dist/leaflet.css" rel="stylesheet"/><link href="https://static.spotapps.co/web/theloopwestend--com/css/style.css?version2" id="mainCSS" rel="stylesheet"/><link href="https://static.spotapps.co/web/theloopwestend--com/css/bottom_navigation_v1.css?v1785489074" rel="stylesheet"/><link href="css/custom.css?v1785489074&domain=theloopwestend.com" rel="stylesheet"/><link href="https://static.spotapps.co/web/theloopwestend--com/lib/icons_font/css/social_icons.css" rel="stylesheet"/><!--[if IE 7]><link rel="stylesheet" href="lib/icons_font/css/social_icons-ie7.css"><![endif]--><link href="https://static.spotapps.co/web/theloopwestend--com/lib/twitter_x_font_icon/css/twitter_x.css" rel="stylesheet"/><!--[if IE 7]><link rel="stylesheet" href="lib/twitter_x_font_icon/css/twitter_x-ie7.css"><![endif]--><!--[if lt IE 9]>
14    
14<script src="//oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
14
15    
15<script src="//oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
15
16    <![endif]--><style>
17
18#accessibility-footer {
19  padding: 20px 5px;
20  background-color: #353638;
21  color: #fff;
22  text-align: center;
23}
24#accessibility-footer p {
25  margin: 0;
26  padding: 0;
27  font-family: inherit;
28  font-size: initial;
29  color: #fff;
30}
31#accessibility-footer .accessibility-link {
32  display: inline-block;
33  color: inherit;
34  text-decoration: underline;
35  font-weight: 600;
36}
37
38@media (max-width: 767px) {
39  #accessibility-footer .accessibility-link {
40    display: block;
41  }
42
43  /* additionl css in case that there is a CTA mobile bar (id="bottom-navbar") on the website */
44  #accessibility-footer {
45    position: relative;
46    top: -60px;
47    padding-bottom: 70px;
48  }
49}
50
51</style>
51<script src="https://static.spotapps.co/websites/lib/lazysizes/lazysizes.min.js" async=""></script>
51<script>
52function ga_check(){
53  return true;
54}
55</script>
55<script>
56function universal_ga(action, type, category, ev_action, label){
57  if(typeof ga === 'function')
58  {
59    if(!(action && label))
60      ga(action, type, category)
61    else
62      ga(action, type, category, ev_action, label)
63  }
64
65  if(typeof gtag === 'function')
66  {
67    if(!(action && label))
68    {
69      hash = category
70      ev_label = hash["eventLabel"]
71      var splits = ev_label.match(/.{1,100}/g) ?? [];
72      delete(hash["eventLabel"])
73
74      if(splits.length <= 1)
75        hash["eventLabel"] = ev_label
76      else
77      {
78        for (let i = 0; i < splits.length; i++) {
79          var key = "eventLabel_"+i
80          hash[key] = splits[i]
81        }
82      }
83      console.log(hash)
84      gtag("event", hash["eventCategory"], hash);
85    }
86    else
87    {
88      var hash = {
89        eventCategory: category,
90        eventAction: ev_action
91      }
92
93      var splits = label.match(/.{1,100}/g) ?? [];
94      if(splits.length <= 1)
95        hash["eventLabel"] = label
96      else
97      {
98        for (let i = 0; i < splits.length; i++) {
99          var key = "eventLabel_"+i
100          hash[key] = splits[i]
101        }
102      }
103      gtag("event", hash["eventCategory"], hash);
104    }
105  }
106}
107</script>
107<script>    function getPromotionUrlParams(){
108      var params_str = sessionStorage.getItem('shUrlParams');
109      if (params_str != null){
110        return JSON.parse(params_str);
111      }else{
112        return {};
113      }
114    }
115
116    function getPromotionSourceDetails(){
117        var params_str = localStorage.getItem('promotionSourceDetails');
118        if (params_str != null){
119          return JSON.parse(params_str);
120        }else{
121          return {};
122        }
123    }
124
125    function getLastEmailVisitInDays(){
126      var promotionSourceDetails = getPromotionSourceDetails();
127      if (!promotionSourceDetails['last_visit_email'] ){
128        return null;
129      }
130      return Math.floor((new Date() - new Date(promotionSourceDetails['last_visit_email'])) / (1000 * 60 * 60 * 24));
131    }
132
133    function getLastSocialVisitInDays(){
134      var promotionSourceDetails = getPromotionSourceDetails();
135      if (!promotionSourceDetails['last_visit_social'] ){
136        return null;
137      }
138      return Math.floor((new Date() - new Date(promotionSourceDetails['last_visit_social'])) / (1000 * 60 * 60 * 24));
139    }
140
141    var shUrlParams = getPromotionUrlParams();
142    var promotionSourceDetails = getPromotionSourceDetails();
143
144    new URL(document.location).searchParams.forEach(function(value, paramName){
145
146     shUrlParams[paramName] = value;
147
148     if (paramName == 'source' && value =='social' ){
149       promotionSourceDetails['last_visit_social'] = new Date();
150       localStorage.setItem('promotionSourceDetails', JSON.stringify(promotionSourceDetails));
151     }
152
153     if (paramName == 'source' && value =='email' ){
154       promotionSourceDetails['last_visit_email'] = new Date();
155       localStorage.setItem('promotionSourceDetails', JSON.stringify(promotionSourceDetails));
156     }
157
158    });
159
160    sessionStorage.setItem('shUrlParams', JSON.stringify(shUrlParams))
161</script>
161<style>.cta-nudge-btn[data-nudge-position="mobile-header"],
162.cta-nudge-btn[data-nudge-position="mobile-footer"] {
163  display: inline-block;
164  font-family: inherit;
165  font-weight: inherit;
166  text-transform: uppercase;
167  text-decoration: none;
168  text-align: center;
169  border-width: 2px;
170  border-style: solid;
171  border-radius: 0;
172}
173
174nav.navbar .socialnav .mobile-header-nudge-item .cta-nudge-btn[data-nudge-position="mobile-header"],
175.navbar-fixed-bottom .mobile-footer-nudge-item .cta-nudge-btn[data-nudge-position="mobile-footer"],
176nav.navbar .socialnav .mobile-header-nudge-item .cta-nudge-btn[data-nudge-position="mobile-header"]:hover,
177nav.navbar .socialnav .mobile-header-nudge-item .cta-nudge-btn[data-nudge-position="mobile-header"]:focus,
178.navbar-fixed-bottom .mobile-footer-nudge-item .cta-nudge-btn[data-nudge-position="mobile-footer"]:hover,
179.navbar-fixed-bottom .mobile-footer-nudge-item .cta-nudge-btn[data-nudge-position="mobile-footer"]:focus {
180  background-color: #000000;
181  color: #FFFFFF;
182  border-color: #FFFFFF;
183}
184
185nav.navbar .socialnav .mobile-header-nudge-item .cta-nudge-btn[data-nudge-position="mobile-header"] span,
186.navbar-fixed-bottom .mobile-footer-nudge-item .cta-nudge-btn[data-nudge-position="mobile-footer"] span,
187nav.navbar .socialnav .mobile-header-nudge-item .cta-nudge-btn[data-nudge-position="mobile-header"]:hover span,
188nav.navbar .socialnav .mobile-header-nudge-item .cta-nudge-btn[data-nudge-position="mobile-header"]:focus span,
189.navbar-fixed-bottom .mobile-footer-nudge-item .cta-nudge-btn[data-nudge-position="mobile-footer"]:hover span,
190.navbar-fixed-bottom .mobile-footer-nudge-item .cta-nudge-btn[data-nudge-position="mobile-footer"]:focus span {
191  color: #FFFFFF;
192}
193
194nav.navbar .socialnav .cta-nudge-btn[data-nudge-position="mobile-header"] {
195  width: auto;
196  padding: 6px 15px;
197  margin: -2px 5px 0 0;
198  font-size: 1.1em;
199}
200
201.navbar-fixed-bottom .mobile-footer-nudge-item {
202  width: 100%;
203  margin: 6px 15px;
204  padding: 0;
205}
206
207.navbar-fixed-bottom .cta-nudge-btn[data-nudge-position="mobile-footer"] {
208  width: 100%;
209  padding: 8px 15px;
210  margin: 0 auto;
211  font-size: 1.3em;
212}</style><style>a:focus:not(:focus-visible){outline:none;box-shadow:none;}
213a.get-directions-footer-link{display:inline-block;transform-origin:left center;transition:transform .2s ease;}
214a.get-directions-footer-link:hover{transform:scale(1.08);}
215@media (prefers-reduced-motion:reduce){a.get-directions-footer-link{transition:none;transform:none;}}
216a.get-directions-footer-link,a.get-directions-footer-link:hover{color:inherit!important;}</style></head><body class="home-page" data-spot-id="112064"><style>.promotion-pop-up .modal-dialog {
217  margin: 0 auto;
218  top: 0;
219  transition: none;
220}
221.promotion-pop-up.fade .modal-dialog {
222  transform: none !important;
223}
224
225.promotion-pop-up .modal-content {
226  display: none;
227  border-radius: 6px;
228  background-color: #fff;
229  background-image: none;
230}
231.promotion-pop-up .modal-header {
232  border: none;
233  margin-bottom: 8px;
234}
235.promotion-pop-up .close {
236  position: absolute;
237  top: 15px;
238  right: 15px;
239  font-size: 3em;
240  font-weight: normal;
241  line-height: 0.8em;
242  color: #000;
243  opacity: 0.8;
244}
245.promotion-pop-up .modal-body {
246  margin: 20px 20px 10px 20px;
247  padding-top: 5px;
248  text-align: center;
249  color: initial;
250}
251.promotion-pop-up .modal-footer {
252  padding-bottom: 40px;
253  border-top: none;
254  text-align: center;
255}
256
257.promotion-pop-up .btn {
258  display: inline-block;
259  max-width: 90%;
260  padding: 10px 50px;
261  font-size: 1.2em;
262  background-color: #000000;
263  color: #fff;
264  transform: scale(1);
265  -webkit-transition: all 0.3s ease;
266  -moz-transition: all 0.3s ease;
267  -o-transition: all 0.3s ease;
268  transition: all 0.3s ease;
269}
270.promotion-pop-up .btn:hover {
271  background-color: #1a1a1a;
272  color: #e0e0e0;
273  box-shadow: 1px 3px 6px rgba(0, 0, 0, 0.3);
274  transform: scale(0.98);
275}
276
277.promotion-pop-up .btn:active {
278  background-color: #0f0f0f;
279  color: #cccccc;
280  box-shadow:
281    inset 0 2px 4px rgba(255, 255, 255, 0.08),
282    inset 0 -2px 2px rgba(0, 0, 0, 0.4);
283  transform: scale(0.94);
284}
285
286.promotion-pop-up h2 {
287  margin: 5px 5px 10px 5px;
288  font-size: 2.1em;
289  line-height: 1.3;
290  color: inherit;
291  /*font-family: unset;*/
292}
293.promotion-pop-up h3 {
294  font-size: 1.5em;
295  margin: 5px 5px 15px 5px;
296  font-family: unset;
297  text-transform: inherit;
298}
299.promotion-pop-up p {
300  margin-top: 30px;
301}
302.promotion-pop-up .modal-body a {
303  color: initial;
304}
305
306.promotion-pop-up .modal-plain-text h3 {
307  padding-top: 10px;
308}
309
310.promotion-pop-up .modal-body.modal-image-and-button {
311  overflow: auto;
312  margin: 20px;
313  padding-top: 0;
314  padding-bottom: 0;
315}
316.promotion-pop-up .modal-body.modal-image-and-button img {
317  max-height: 60vh;
318  max-width: 100%;
319}
320.promotion-pop-up .modal-body.modal-image-and-button p {
321  margin-top: 15px;
322  margin-bottom: 10px;
323}
324
325@media only screen and (max-width: 1024px) {
326  .promotion-pop-up .modal-body.modal-image-and-button {
327    margin-bottom: 10px;
328  }
329  .promotion-pop-up h2 {
330    font-size: 1.9em;
331  }
332  .promotion-pop-up h3 {
333    font-size: 1.4em;
334  }
335  .promotion-pop-up .modal-body.modal-image-and-button img {
336    max-height: 65vh;
337  }
338}
339
340@media only screen and (max-width: 767px) {
341  .promotion-pop-up .modal-dialog {
342    margin: 0 10px;
343  }
344  .promotion-pop-up .modal-body {
345    margin-top: 18px;
346  }
347  .promotion-pop-up .modal-body.modal-image-and-button img {
348    max-height: 55vh;
349  }
350  .promotion-pop-up h2 {
351    font-size: 1.8em;
352  }
353  .promotion-pop-up h3 {
354    font-size: 1.3em;
355  }
356  .promotion-pop-up .modal-body.modal-image-and-button p {
357    font-size: 1.1em;
358  }
359}
360@media only screen and (max-width: 500px) {
361  .promotion-pop-up .modal-footer {
362    padding-top: 10px;
363    padding-bottom: 35px;
364  }
365  .promotion-pop-up .modal-body {
366    margin: 17px 15px 5px 15px;
367  }
368  .promotion-pop-up .btn {
369    padding: 9px 40px;
370    font-size: 1.1em;
371  }
372  .promotion-pop-up .modal-body.modal-image-and-button img {
373    max-height: 50vh;
374  }
375}
376@media only screen and (max-width: 400px) {
377  .promotion-pop-up h2 {
378    font-size: 1.7em;
379  }
380  .promotion-pop-up h3 {
381    font-size: 1.2em;
382  }
383  .promotion-pop-up .btn {
384    padding: 8px 35px;
385    font-size: 1.1em;
386  }
387}</style><div aria-label="Promotion" class="modal fade promotion-pop-up" id="promotion-pop-up" role="dialog" tabindex="-1"><div class="modal-dialog" role="document"><div class="modal-content promotion_pop_up_content" data-has-image="//static.spotapps.co/spots/ca/efc7b22e1f4c8e8749f7e3a8153885/:original" data-internalname="custom_promotion" data-is-custom-link="false" data-is-template-image-and-button="true" data-link-url="https://www.theloopwestend.com/events?source=pop_up&spot_id=112064&destination=events&promotion=custom_promotion" id="8240746"><!-- Modal Header --><div class="modal-header"><button aria-label="Close" class="close" data-dismiss="modal" type="button"><span aria-hidden="true">×</span></button></div><!-- Modal body --><div class="modal-body modal-image-and-button"><h2 class="section-header">Enjoy our GAME DAY SPECIALS during ALL LIVE NFL GAMES this season! Only at The Loop West End</h2><img alt="" src="//static.spotapps.co/spots/ca/efc7b22e1f4c8e8749f7e3a8153885/:original"/><p></p></div><div class="modal-footer"><a class="btn btn-modal" data-href="https://www.theloopwestend.com/events?source=pop_up&spot_id=112064&destination=events&promotion=custom_promotion" href="https://www.theloopwestend.com/events?source=pop_up&spot_id=112064&destination=events&promotion=custom_promotion">Learn more here!</a></div></div></div></div><style>
388
389  .nav-v7 .navbar-logo .container {
390    height: 80px;
391  }
392  .nav-v7 .navbar-logo .header-logo img {
393    max-height: 80px;
394  }
395
396
397.navbar.nav-v6 .navbar-logo .container {
398  height: 100px;
399  padding-top: 10px;
400  padding-bottom: 10px;
401}
402.navbar.nav-v6.nav-scroll .navbar-logo .container {
403  height: 70px;
404  padding-top: 0px;
405  padding-bottom: 0px;
406}
407.navbar.nav-v6 .header-logo img {
408  max-width: 100%;
409}
410.navbar.nav-v6.nav-scroll .header-logo img {
411  max-width: 80%;
412}
413.nav-v7 .navbar-logo .header-logo img {
414  max-height: 100px;
415}
416.nav-v7.nav-scroll .navbar-logo .header-logo img {
417  max-height: 70px;
418}
419
420@media (max-width: 767px) {
421  /* DO NOT change mobile nav height on page scroll */
422  .navbar.nav-v6 .navbar-header,
423  .navbar.nav-v6.nav-scroll .navbar-header {
424    padding-top: 10px;
425    padding-bottom: 10px;
426  }
427  .navbar.nav-v6 .socialnav,
428  .navbar.nav-v6.nav-scroll .socialnav {
429    margin-top: 10px;
430  }
431  .navbar.nav-v6 .container,
432  .navbar.nav-v6.nav-scroll .container {
433    padding-top: 0;
434    padding-bottom: 0;
435  }
436  .navbar.nav-v6 .header-logo,
437  .navbar.nav-v6.nav-scroll .header-logo {
438    height: 70px;
439  }
440  .navbar.nav-v6 .header-logo img {
441    max-height: 100%;
442  }
443  .navbar.nav-v6.nav-scroll .header-logo img {
444    max-width: 100%;
445  }
446  /* HOME page CHANGE mobile nav height on page scroll */
447  /* Remove body.home-page from below code if there should be mobile nav height change on ALL pages */
448  body.home-page .navbar.nav-v6 .navbar-header {
449    padding-top: 10px;
450    padding-bottom: 10px;
451  }
452  body.home-page .navbar.nav-v6.nav-scroll .navbar-header{
453    padding-top: 0px;
454    padding-bottom: 0px;
455  }
456  body.home-page .navbar.nav-v6 .socialnav {
457    margin-top: 10px;
458  }
459  body.home-page .navbar.nav-v6.nav-scroll .socialnav {
460    margin-top: 0px;
461  }
462  body.home-page .navbar.nav-v6 .container{
463    padding-top: 0;
464    padding-bottom: 0;
465  }
466  body.home-page .navbar.nav-v6.nav-scroll .container {
467    padding-top: 0;
468    padding-bottom: 0;
469  }
470  body.home-page .navbar.nav-v6 .header-logo {
471    height: 70px;
472  }
473  body.home-page .navbar.nav-v6.nav-scroll .header-logo {
474    height: 50px;
475  }
476  body.home-page .navbar.nav-v6 .header-logo img {
477    max-height: 100%;
478    max-width: 100%;
479  }
480  body.home-page .navbar.nav-v6.nav-scroll .header-logo img {
481    max-width: 80%;
482  }
483}
484
485
486.navbar-regular .navbar-collapse.collapse.in {
487  background-color: transparent;
488  width: 100%;
489}
490.navbar.nav-v6 .navbar-tabs {
491    background-color: #fff;
492    -webkit-box-shadow: 0px 4px 4px 0px rgba(0,0,0,0);
493    -moz-box-shadow: 0px 4px 4px 0px rgba(0,0,0,0);
494    box-shadow: 0px 4px 4px 0px rgba(0,0,0,0);
495}
496.navbar.nav-v6.nav-scroll .navbar-tabs {
497    background-color: #fff;
498    -webkit-box-shadow: 0px 4px 4px 0px rgba(0,0,0,0.2);
499    -moz-box-shadow: 0px 4px 4px 0px rgba(0,0,0,0.2);
500    box-shadow: 0px 4px 4px 0px rgba(0,0,0,0.2);
501}
502.drink-menu .navbar.nav-v6 .navbar-tabs {
503  background-color: #fff;
504  -webkit-box-shadow: 0px 4px 4px 0px rgba(0,0,0,0);
505  -moz-box-shadow: 0px 4px 4px 0px rgba(0,0,0,0);
506  box-shadow: 0px 4px 4px 0px rgba(0,0,0,0);
507}
508.drink-menu .navbar.nav-v6.nav-scroll .navbar-tabs {
509  background-color: #fff;
510  -webkit-box-shadow: 0px 4px 4px 0px rgba(0,0,0,0.2);
511  -moz-box-shadow: 0px 4px 4px 0px rgba(0,0,0,0.2);
512  box-shadow: 0px 4px 4px 0px rgba(0,0,0,0.2);
513}
514li.drop-down-link .sub-menu {
515  background-color: #fff;
516  color: #000;
517  }
518.nav-scroll li.drop-down-link .sub-menu {
519  background-color: #fff;
520  color: #000;
521}
522.drink-menu li.drop-down-link .sub-menu {
523  background-color: #fff;
524  color: #000;
525}
526.drink-menu .nav-scroll li.drop-down-link .sub-menu {
527  background-color: #fff;
528  color: #000;
529}
530li.drop-down-link .sub-menu a,
531li.drop-down-link div.drop-down {
532  color: #000;
533}
534.nav-scroll li.drop-down-link .sub-menu a,
535.nav-scroll li.drop-down-link div.drop-down {
536  color: #000;
537}
538.drink-menu li.drop-down-link .sub-menu a,
539.drink-menu li.drop-down-link div.drop-down {
540  color: #000;
541}
542.drink-menu .nav-scroll li.drop-down-link .sub-menu a,
543.drink-menu .nav-scroll li.drop-down-link div.drop-down {
544  color: #000;
545}
546
547.navbar.nav-v6 .navbar-logo {
548  background-color: #fff;
549}
550.navbar.nav-v6.nav-scroll .navbar-logo {
551  background-color: #fff;
552}
553.drink-menu .navbar.nav-v6 .navbar-logo {
554  background-color: #fff;
555}
556.drink-menu .navbar.nav-v6.nav-scroll .navbar-logo {
557  background-color: #fff;
558}
559
560.navbar-regular.nav-v6 .navbar-nav>li>a,
561.navbar-regular.nav-v6 .navbar-nav>li>a:hover,
562.navbar-regular.nav-v6 .navbar-nav>.active>a,
563.navbar-regular.nav-v6 .navbar-nav>.active>a:focus,
564.navbar-regular.nav-v6 .navbar-nav>.active>a:hover{
565  border: none;
566  border-right: 1px solid #000;
567  background-color: transparent;
568  color: #4C2432;
569}
570.navbar-regular.nav-v6 .navbar-nav>li>a {
571  color: #000;
572}
573.drink-menu .navbar.nav-v6 .navbar-nav>li>a {
574  color: #000;
575  border-right: 1px solid #000;
576}
577.drink-menu .navbar-regular.nav-v6 .navbar-nav>li>a:hover,
578.drink-menu .navbar-regular.nav-v6 .navbar-nav>.active>a,
579.drink-menu .navbar-regular.nav-v6 .navbar-nav>.active>a:focus,
580.drink-menu .navbar-regular.nav-v6 .navbar-nav>.active>a:hover{
581  color: #4C2432;
582}
583
584li.drop-down-link .sub-menu a:hover,
585li.drop-down-link .sub-menu a:focus,
586li.drop-down-link .sub-menu li.active a {
587  color: #4C2432;
588}
589.drink-menu li.drop-down-link .sub-menu a:hover,
590.drink-menu li.drop-down-link .sub-menu a:focus,
591.drink-menu li.drop-down-link .sub-menu li.active a {
592  color: #4C2432;
593}
594
595.navbar-regular.nav-v7 .navbar-contact .navbar-nav>li>a,
596.navbar-regular.nav-v7 .navbar-contact .navbar-nav>li>a:hover,
597.navbar-regular.nav-v7 .navbar-contact .navbar-nav>.active>a,
598.navbar-regular.nav-v7 .navbar-contact .navbar-nav>.active>a:focus,
599.navbar-regular.nav-v7 .navbar-contact .navbar-nav>.active>a:hover{
600  color: #4C2432;
601}
602.navbar-regular.nav-v7 .navbar-contact .navbar-nav>li>a {
603  color: #000;
604}
605.drink-menu .navbar.nav-v7 .navbar-nav>li>a {
606  color: #000;
607}
608.drink-menu .navbar-regular.nav-v7 .navbar-contact .navbar-nav>li>a {
609  color: #000;
610}
611.drink-menu .navbar-regular.nav-v7 .navbar-contact .navbar-nav>li>a:hover,
612.drink-menu .navbar-regular.nav-v7 .navbar-contact .navbar-nav>.active>a,
613.drink-menu .navbar-regular.nav-v7 .navbar-contact .navbar-nav>.active>a:focus,
614.drink-menu .navbar-regular.nav-v7 .navbar-contact .navbar-nav>.active>a:hover {
615  color: #4C2432;
616}
617
618.navbar-regular.nav-v6 .navbar-toggle .icon-bar {
619  background-color: #000;
620}
621.drink-menu .navbar-regular.nav-v6 .navbar-toggle .icon-bar {
622  background-color: #000;
623}
624.navbar-regular.nav-v6 [aria-expanded="true"].navbar-toggle .icon-bar {
625  background-color: #4C2432;
626}
627.drink-menu .navbar-regular.nav-v6 [aria-expanded="true"].navbar-toggle .icon-bar {
628  background-color: #4C2432;
629}
630.navbar-regular.nav-v6.nav-scroll .navbar-nav>li>a,
631.navbar-regular.nav-v6.nav-scroll .navbar-nav>li>a:hover,
632.navbar-regular.nav-v6.nav-scroll .navbar-nav>.active>a,
633.navbar-regular.nav-v6.nav-scroll .navbar-nav>.active>a:focus,
634.navbar-regular.nav-v6.nav-scroll .navbar-nav>.active>a:hover{
635  border: none;
636  border-right: 1px solid #000;
637  color: #4C2432;
638}
639.navbar-regular.nav-v6.nav-scroll .navbar-nav>li>a {
640  color: #000;
641}
642.drink-menu .navbar.nav-v6.nav-scroll .navbar-nav>li>a {
643  color: #000;
644  border-right: 1px solid #000;
645}
646.drink-menu .navbar-regular.nav-v6.nav-scroll .navbar-nav>li>a:hover,
647.drink-menu .navbar-regular.nav-v6.nav-scroll .navbar-nav>.active>a,
648.drink-menu .navbar-regular.nav-v6.nav-scroll .navbar-nav>.active>a:focus,
649.drink-menu .navbar-regular.nav-v6.nav-scroll .navbar-nav>.active>a:hover {
650  color: #4C2432;
651}
652
653.nav-scroll li.drop-down-link .sub-menu a:hover,
654.nav-scroll li.drop-down-link .sub-menu a:focus,
655.nav-scroll li.drop-down-link .sub-menu li.active a {
656  color: #4C2432;
657}
658.drink-menu .nav-scroll li.drop-down-link .sub-menu a:hover,
659.drink-menu .nav-scroll li.drop-down-link .sub-menu a:focus,
660.drink-menu .nav-scroll li.drop-down-link .sub-menu li.active a {
661  color: #4C2432;
662}
663
664.navbar-regular.nav-v6.nav-scroll .navbar-contact .navbar-nav>li>a,
665.navbar-regular.nav-v6.nav-scroll .navbar-contact .navbar-nav>li>a:hover,
666.navbar-regular.nav-v6.nav-scroll .navbar-contact .navbar-nav>.active>a,
667.navbar-regular.nav-v6.nav-scroll .navbar-contact .navbar-nav>.active>a:focus,
668.navbar-regular.nav-v6.nav-scroll .navbar-contact .navbar-nav>.active>a:hover {
669  color: #4C2432;
670}
671.navbar-regular.nav-v6.nav-scroll .navbar-contact .navbar-nav>li>a {
672  color: #000;
673}
674.drink-menu .navbar.nav-v6.nav-scroll .navbar-contact .navbar-nav>li>a {
675  color: #000;
676}
677.drink-menu .navbar-regular.nav-v6.nav-scroll .navbar-contact .navbar-nav>li>a:hover,
678.drink-menu .navbar-regular.nav-v6.nav-scroll .navbar-contact .navbar-nav>.active>a,
679.drink-menu .navbar-regular.nav-v6.nav-scroll .navbar-contact .navbar-nav>.active>a:focus,
680.drink-menu .navbar-regular.nav-v6.nav-scroll .navbar-contact .navbar-nav>.active>a:hover{
681  color: #4C2432;
682}
683
684.navbar-regular.nav-v6.nav-scroll .navbar-toggle .icon-bar {
685  background-color: #000;
686}
687.drink-menu .navbar-regular.nav-v6.nav-scroll .navbar-toggle .icon-bar {
688  background-color: #000;
689}
690.navbar-regular.nav-v6.nav-scroll [aria-expanded="true"].navbar-toggle .icon-bar {
691  background-color: #4C2432;
692}
693.drink-menu .navbar-regular.nav-v6.nav-scroll [aria-expanded="true"].navbar-toggle .icon-bar{
694  background-color: #4C2432;
695}
696.navbar.nav-v6 .header-logo-text{
697  color: #000;
698}
699.navbar.nav-v6.nav-scroll .header-logo-text{
700  color: #000;
701}
702.navbar.nav-v6 .social-icon{
703  color: #000;
704}
705.navbar.nav-v6.nav-scroll .social-icon{
706  color: #000;
707}
708.navbar.nav-v6 .social-square .contact-icon:hover {
709  color: #000;
710  background-color: #4C2432;
711}
712.navbar.nav-v6.nav-scroll .social-square .contact-icon:hover {
713  color: #000;
714  background-color: #4C2432;
715}
716
717.drink-menu .navbar.nav-v6 .header-logo-text{
718  color: #000;
719}
720.drink-menu .navbar.nav-v6.nav-scroll .header-logo-text{
721  color: #000;
722}
723.drink-menu .navbar.nav-v6 .social-icon{
724  color: #000;
725}
726.drink-menu  .navbar.nav-v6.nav-scroll .social-icon{
727  color: #000;
728}
729.drink-menu .navbar.nav-v6 .social-square .contact-icon:hover {
730  color: #000;
731  background-color: #4C2432;
732}
733.drink-menu .navbar.nav-v6.nav-scroll .social-square .contact-icon:hover {
734  color: #000;
735  background-color: #4C2432;
736}
737.navbar.nav-v6 .navbar-logo .container {
738  border-bottom: 1px solid #000;
739}
740.navbar.nav-v6.nav-scroll .navbar-logo .container {
741  border-bottom: 1px solid #000;
742}
743.drink-menu .navbar.nav-v6 .navbar-logo .container {
744  border-bottom: 1px solid #000;
745}
746.drink-menu .navbar.nav-v6.nav-scroll .navbar-logo .container {
747  border-bottom: 1px solid #000;
748}
749@media (max-width: 767px) {
750  .navbar.nav-v6 {
751      background-color: #fff;
752      -webkit-box-shadow: 0px 4px 4px 0px rgba(0,0,0,0);
753      -moz-box-shadow: 0px 4px 4px 0px rgba(0,0,0,0);
754      box-shadow: 0px 4px 4px 0px rgba(0,0,0,0);
755  }
756  .navbar.nav-v6.nav-scroll {
757      background-color: #fff;
758      -webkit-box-shadow: 0px 4px 4px 0px rgba(0,0,0,0.2);
759      -moz-box-shadow: 0px 4px 4px 0px rgba(0,0,0,0.2);
760      box-shadow: 0px 4px 4px 0px rgba(0,0,0,0.2);
761  }
762  .drink-menu .navbar.nav-v6 {
763    background-color: #fff;
764    -webkit-box-shadow: 0px 4px 4px 0px rgba(0,0,0,0);
765    -moz-box-shadow: 0px 4px 4px 0px rgba(0,0,0,0);
766    box-shadow: 0px 4px 4px 0px rgba(0,0,0,0);
767  }
768  .drink-menu .navbar.nav-v6.nav-scroll {
769    background-color: #fff;
770    -webkit-box-shadow: 0px 4px 4px 0px rgba(0,0,0,0.2);
771    -moz-box-shadow: 0px 4px 4px 0px rgba(0,0,0,0.2);
772    box-shadow: 0px 4px 4px 0px rgba(0,0,0,0.2);
773  }
774  .navbar.nav-v6 .container,
775  .navbar.nav-v6.nav-scroll .container,
776  .drink-menu .navbar.nav-v6 .container,
777  .drink-menu .navbar.nav-v6.nav-scroll .container {
778    border-bottom: none;
779  }
780  .navbar.nav-v6 .navbar-header {
781    border-bottom: 2px solid #000;
782  }
783  .navbar.nav-v6.nav-scroll .navbar-header {
784    border-bottom: 2px solid #000;
785  }
786  .drink-menu .navbar.nav-v6 .navbar-header {
787    border-bottom: 2px solid #000;
788  }
789  .drink-menu .navbar.nav-v6.nav-scroll .navbar-header {
790    border-bottom: 2px solid #000;
791  }
792  li.drop-down-link .sub-menu,
793  .drink-menu li.drop-down-link .sub-menu {
794    background-color: transparent;
795  }
796  .nav-scroll li.drop-down-link .sub-menu,
797  .drink-menu .nav-scroll li.drop-down-link .sub-menu {
798    background-color: transparent;
799  }
800      /* Mobile home background */
801  .navbar.nav-v6.navbar-regular.mobile-full-height .navbar-collapse.collapse,
802  .navbar.nav-v6.navbar-regular.mobile-full-height .navbar-collapse.collapsing,
803  .navbar.nav-v6.navbar-regular.mobile-full-height .navbar-collapse.collapse.in {
804          background-color: #ffffff;
805      }
806  /* Mobile home background scroll */
807  .navbar.nav-v6.navbar-regular.nav-scroll.mobile-full-height .navbar-collapse.collapse,
808  .navbar.nav-v6.navbar-regular.nav-scroll.mobile-full-height .navbar-collapse.collapsing,
809  .navbar.nav-v6.navbar-regular.nav-scroll.mobile-full-height .navbar-collapse.collapse.in {
810          background-color: #ffffff;
811      }
812  /* Mobile pages background */
813  .drink-menu .navbar.nav-v6.navbar-regular.mobile-full-height .navbar-collapse.collapse,
814  .drink-menu .navbar.nav-v6.navbar-regular.mobile-full-height .navbar-collapse.collapsing,
815  .drink-menu .navbar.nav-v6.navbar-regular.mobile-full-height .navbar-collapse.collapse.in {
816          background-color: #ffffff;
817      }
818  /* Mobile pages background scroll */
819  .drink-menu .nav-v6.navbar-regular.nav-scroll.mobile-full-height .navbar-collapse.collapse,
820  .drink-menu .nav-v6.navbar-regular.nav-scroll.mobile-full-height .navbar-collapse.collapsing,
821  .drink-menu .nav-v6.navbar-regular.nav-scroll.mobile-full-height .navbar-collapse.collapse.in {
822          background-color: #ffffff;
823      }
824  .navbar-regular.nav-v6 .navbar-nav>li>a:hover,
825  .navbar-regular.nav-v6 .navbar-nav>.active>a,
826  .navbar-regular.nav-v6 .navbar-nav>.active>a:focus,
827  .navbar-regular.nav-v6 .navbar-nav>.active>a:hover{
828    background-color: #4C2432;
829    color: #000;
830  }
831  .navbar-regular.nav-v6.nav-scroll .navbar-nav>li>a:hover,
832  .navbar-regular.nav-v6.nav-scroll .navbar-nav>.active>a,
833  .navbar-regular.nav-v6.nav-scroll .navbar-nav>.active>a:focus,
834  .navbar-regular.nav-v6.nav-scroll .navbar-nav>.active>a:hover{
835    background-color: #4C2432;
836    color: #000;
837  }
838  .drink-menu .navbar-regular.nav-v6 .navbar-nav>li>a:hover,
839  .drink-menu .navbar-regular.nav-v6 .navbar-nav>.active>a,
840  .drink-menu .navbar-regular.nav-v6 .navbar-nav>.active>a:focus,
841  .drink-menu .navbar-regular.nav-v6 .navbar-nav>.active>a:hover{
842    background-color: #4C2432;
843    color: #000;
844  }
845  .drink-menu .navbar-regular.nav-v6.nav-scroll .navbar-nav>li>a:hover,
846  .drink-menu .navbar-regular.nav-v6.nav-scroll .navbar-nav>.active>a,
847  .drink-menu .navbar-regular.nav-v6.nav-scroll .navbar-nav>.active>a:focus,
848  .drink-menu .navbar-regular.nav-v6.nav-scroll .navbar-nav>.active>a:hover{
849    background-color: #4C2432;
850    color: #000;
851  }
852
853  .navbar-regular.nav-v6 li.drop-down-link.active .drop-down .fa.fa-angle-up {
854    color: #000;
855  }
856  .navbar-regular.nav-v6.nav-scroll li.drop-down-link.active .drop-down .fa.fa-angle-up {
857    color: #000;
858  }
859  .drink-menu .navbar-regular.nav-v6 li.drop-down-link.active .drop-down .fa.fa-angle-up {
860    color: #000;
861  }
862  .drink-menu .navbar-regular.nav-v6.nav-scroll li.drop-down-link.active .drop-down .fa.fa-angle-up {
863    color: #000;
864  }
865}
866</style><!-- nav --><nav class="navbar nav-v4 nav-v6 nav-v7 navbar-regular navbar-fixed-top " id="navbar" role="navigation"><div id="skip"><a class="visuallyhidden skip-content" href="#content">Skip to main content</a></div><div class="desktop-navigation logo-center"><div class="navbar-top-tabs clearfix"><ul class="custom-btn-list"><li><a class="custom-temp-btn hvr-fade" href="https://order.toasttab.com/online/the-loop-west-end" target="_blank">Order Online<span class="visuallyhidden">, you are leaving the website, opens in a new tab</span></a></li><li><a class="custom-temp-btn hvr-fade" href="https://www.toasttab.com/the-loop-west-end/giftcards" target="_blank">Gift Cards<span class="visuallyhidden">, you are leaving the website, opens in a new tab</span></a></li><li><a class="custom-temp-btn hvr-fade" href="https://www.toasttab.com/the-loop-west-end/rewardsSignup" target="_blank">Join Our Loyalty Program<span class="visuallyhidden">, you are leaving the website, opens in a new tab</span></a></li><li><a class="custom-temp-btn hvr-fade" href="/reservations" target="_self">Reserve</a></li><li><a class="custom-temp-btn hvr-fade" href="https://go.momos.com/cwgiMl" target="_blank">Parties &amp; Catering<span class="visuallyhidden">, you are leaving the website, opens in a new tab</span></a></li></ul></div><div class="navbar-logo"><div class="container"><a aria-current="page" class="header-logo logo-top" href="/#"><img alt="The Loop West End logo top - Homepage" aria-label="Homepage" class="img-responsive logo-top" src="https://static.spotapps.co/website_images/ab_websites/112064_website_v3/logo.jpg"/></a><a aria-current="page" class="header-logo header-logo-a logo-scroll" href="/"><img alt="The Loop West End logo scroll - Homepage" aria-label="Homepage" class="img-responsive logo-scroll" src="https://static.spotapps.co/website_images/ab_websites/112064_website_v3/logo.jpg"/></a><div class="navbar-contact"><ul class="nav navbar-nav navbar-right"><li class="nav-phone"><a href="tel:+19526812684"><i aria-hidden="true" class="fa fa-phone"></i><span>
866(952)-681-2684</span></a></li><li class="nav-email"><a href="mailto:[email protected]"><i aria-hidden="true" class="fa fa-envelope-o"></i><span>[email protected]</span></a></li></ul></div></div></div><div class="navbar-tabs"><div class="container"><div class="navbar-content"><ul class="nav navbar-nav"><li class=" nav-menu-page"><a class="" href="/food-menu" id="nav_tab_1_link" target="_self">
867                              
868                              Menu
869                              
870                        </a></li><li class=" "><a class="" href="/drink-menu" id="nav_tab_2_link" target="_self">
871                              
872                              Drinks
873                              
874                        </a></li><li class=" "><a class="" href="/specials" id="nav_tab_3_link" target="_self">
875                              
876                              Specials
877                              
878                        </a></li><li class=" "><a class="" href="/events" id="nav_tab_4_link" target="_self">
879                              
880                              Events
881                              
882                        </a></li><li class=" nav-parties-link"><a aria-label="Parties, you are leaving the website, opens in a new tab" class="link-parties-sh" href="https://us-restaurant.momos.io/forms/52924e62-11fd-46e7-ba80-6c982b4be377?id=417c27de-1884-4917-abdf-eb69278834de#" id="nav_tab_5_link" target="_blank">
883                              
884                              Parties
885                              
886                        </a></li></ul><ul class="socialnav"><li class="social-links social-icons-holder social-square"><a class="pull-left contact-icon" href="https://www.facebook.com/734246769988821" target="_blank"><i class="social-icon fa fa-facebook"></i><span>Facebook page, you are leaving the website, opens in a new tab</span></a></li><li class="social-links social-icons-holder social-square"><a class="pull-left contact-icon" href="https://www.instagram.com/theloopwestend" target="_blank"><i class="social-icon fa fa-instagram"></i><span>Instagram page, you are leaving the website, opens in a new tab</span></a></li><li class="social-links social-icons-holder social-square"><a class="pull-left contact-icon" href="https://www.tiktok.com/@theloopwestend" target="_blank"><svg aria-hidden="true" height="32" viewbox="-4 1 42 32" width="22" xmlns="http://www.w3.org/2000/svg"><path d="M16.708 0.027c1.745-0.027 3.48-0.011 5.213-0.027 0.105 2.041 0.839 4.12 2.333 5.563 1.491 1.479 3.6 2.156 5.652 2.385v5.369c-1.923-0.063-3.855-0.463-5.6-1.291-0.76-0.344-1.468-0.787-2.161-1.24-0.009 3.896 0.016 7.787-0.025 11.667-0.104 1.864-0.719 3.719-1.803 5.255-1.744 2.557-4.771 4.224-7.88 4.276-1.907 0.109-3.812-0.411-5.437-1.369-2.693-1.588-4.588-4.495-4.864-7.615-0.032-0.667-0.043-1.333-0.016-1.984 0.24-2.537 1.495-4.964 3.443-6.615 2.208-1.923 5.301-2.839 8.197-2.297 0.027 1.975-0.052 3.948-0.052 5.923-1.323-0.428-2.869-0.308-4.025 0.495-0.844 0.547-1.485 1.385-1.819 2.333-0.276 0.676-0.197 1.427-0.181 2.145 0.317 2.188 2.421 4.027 4.667 3.828 1.489-0.016 2.916-0.88 3.692-2.145 0.251-0.443 0.532-0.896 0.547-1.417 0.131-2.385 0.079-4.76 0.095-7.145 0.011-5.375-0.016-10.735 0.025-16.093z"></path></svg><span>TikTok page, you are leaving the website, opens in a new tab</span></a></li></ul></div></div></div></div><div class="mobile-navigation"><div class="container"><a aria-current="page" class="header-logo logo-top" href="/#"><img alt="The Loop West End logo top - Homepage" aria-label="Homepage" class="img-responsive logo-top" src="https://static.spotapps.co/website_images/ab_websites/112064_website_v3/logo.jpg"/></a><a aria-current="page" class="header-logo header-logo-a logo-scroll" href="/"><img alt="The Loop West End logo scroll - Homepage" aria-label="Homepage" class="img-responsive logo-scroll" src="https://static.spotapps.co/website_images/ab_websites/112064_website_v3/logo.jpg"/></a><ul class="socialnav"><li class="mobile-header-nudge-item"><a href="https://order.toasttab.com/online/the-loop-west-end" target="_blank" class="cta-nudge-btn" data-nudge-type="order" data-nudge-position="mobile-header"><span>Order</span><span class="visuallyhidden">, opens in a new tab</span></a></li></ul><div class="navbar-header"><button aria-expanded="false" class="navbar-toggle" data-target="#navbar-collapse-1" data-toggle="collapse" type="button"><span class="sr-only">Toggle navigation</span><span class="icon-bar"></span><span class="icon-bar"></span><span class="icon-bar"></span></button></div><div class="collapse navbar-collapse" id="navbar-collapse-1"><ul class="nav navbar-nav navbar-right"><li class="navbar-top-tab"><a href="https://order.toasttab.com/online/the-loop-west-end" target="_blank">Order Online<span class="visuallyhidden">, you are leaving the website, opens in a new tab</span></a></li><li class="navbar-top-tab"><a href="https://www.toasttab.com/the-loop-west-end/giftcards" target="_blank">Gift Cards<span class="visuallyhidden">, you are leaving the website, opens in a new tab</span></a></li><li class="navbar-top-tab"><a href="https://www.toasttab.com/the-loop-west-end/rewardsSignup" target="_blank">Join Our Loyalty Program<span class="visuallyhidden">, you are leaving the website, opens in a new tab</span></a></li><li class="navbar-top-tab"><a href="/reservations" target="_self">Reserve</a></li><li class="navbar-top-tab"><a href="https://go.momos.com/cwgiMl" target="_blank">Parties &amp; Catering<span class="visuallyhidden">, you are leaving the website, opens in a new tab</span></a></li><li class=" nav-menu-page"><a class="" href="/food-menu" id="mobile_nav_tab_1_link" target="_self">
887                    Menu
888                                      </a></li><li class=" "><a class="" href="/drink-menu" id="mobile_nav_tab_2_link" target="_self">
889                    Drinks
890                                      </a></li><li class=" "><a class="" href="/specials" id="mobile_nav_tab_3_link" target="_self">
891                    Specials
892                                      </a></li><li class=" "><a class="" href="/events" id="mobile_nav_tab_4_link" target="_self">
893                    Events
894                                      </a></li><li class=" nav-parties-link"><a aria-label="Parties, you are leaving the website, opens in a new tab" class="link-parties-sh" href="https://us-restaurant.momos.io/forms/52924e62-11fd-46e7-ba80-6c982b4be377?id=417c27de-1884-4917-abdf-eb69278834de#" id="mobile_nav_tab_5_link" target="_blank">
895                    Parties
896                                      </a></li></ul></div></div></div></nav><header class="header cover-type-video" style="
897    background-image: url(https://static.spotapps.co/new_website_videos/112064_videos/112064_video_desktop_v1.jpg);
898        background-repeat: no-repeat;
899    background-position: center center fixed;
900    -webkit-background-size: cover;
901    -moz-background-size: cover;
902    -o-background-size: cover;
903    background-size: cover;
904        z-index: 98; position: relative; overflow: hidden;
905        "><div id="home_page_cover" style="height:100%;"><style>
906
907video#coverVideo {
908  z-index: 99;
909  background: url(https://static.spotapps.co/new_website_videos/112064_videos/112064_video_desktop_v1.jpg) no-repeat;
910  background-size: cover;
911}
912
913@media (min-width: 768px) {
914
915  
916    @media (min-width: 1025px) {
917
918      video#coverVideo {
919  position: absolute;
920  top: 50%;
921  left: 50%;
922  min-width: 100%;
923  min-height: 100%;
924  width: auto;
925  height: auto;
926  -ms-transform: translateX(-50%) translateY(-50%);
927  -moz-transform: translateX(-50%) translateY(-50%);
928  -webkit-transform: translateX(-50%) translateY(-50%);
929  transform: translateX(-50%) translateY(-50%);
930  max-width: none;
931  vertical-align: baseline;
932}
933    }
934
935    @media (max-width: 1024px) {
936
937      video#coverVideo {
938  width: 100%;
939}
940.header {
941  max-height: 100vh;
942  background-image: none !important;
943  width: initial;
944  height: initial;
945}
946body.home-page {
947  background-color: transparent;
948}
949    }
950
951  
952}
953
954@media (max-width: 767px) {
955  video#coverVideo {
956  width: 100%;
957}
958.header {
959  max-height: 100vh;
960  background-image: none !important;
961  width: initial;
962  height: initial;
963}
964body.home-page {
965  background-color: transparent;
966}  }
967
968  .video-volume-btn, .video-controls-btn {
969    color: rgba(255, 255, 255, 0.9);
970  }
971
972</style><p class="sr-only">Video montage featuring the interior of the restaurant and food being prepared</p>
972<video autoplay="autoplay" data-video="dual" id="coverVideo" loop="loop" muted="muted" playsinline="playsinline"><source src="https://static.spotapps.co/web/theloopwestend--com/" type="video/mp4"/></video><button aria-label="The decorative video is currently playing, pause the video" class="video-controls-btn " id="cover_video_controls_btn" type="button"><span class="off-screen">The decorative video is currently playing</span><i aria-hidden="true" class="fa fa-play"></i><i aria-hidden="true" class="fa fa-pause"></i></button>
972<script>
973(function () {
974  const video = document.getElementById("coverVideo");
975  if (!video) return;
976
977  const variants = {
978    desktop: {
979      src:    "https:\/\/static.spotapps.co\/new_website_videos\/112064_videos\/112064_video_desktop_v1.mp4",
980      poster: "https:\/\/static.spotapps.co\/new_website_videos\/112064_videos\/112064_video_desktop_v1.jpg",
981      vtt:    ""    },
982    mobile: {
983      src:    "",
984      poster: "",
985      vtt:    ""    }
986  };
987  const isMobile = window.matchMedia("(max-width: 767px)").matches;
988  const preferred = isMobile ? variants.mobile : variants.desktop;
989  const srcVariant = (preferred.src && preferred.src.trim()) ? preferred : variants.desktop;
990  const chosen = {
991    src:    srcVariant.src,
992    poster: srcVariant.poster,
993    vtt:    preferred.vtt
994  };
995
996  if (!chosen.src || !chosen.src.trim()) return;
997  if (chosen.poster && chosen.poster.trim()) {
998    video.poster = chosen.poster;
999  }
1000
1001  video.querySelectorAll("track").forEach(t => t.remove());
1002
1003  const hasCaptions = !!(chosen.vtt && chosen.vtt.trim());
1004  if (hasCaptions) {
1005    video.setAttribute("controls", "");
1006    video.setAttribute("crossorigin", "anonymous");
1007    const track = document.createElement("track");
1008    track.label = "English";
1009    track.kind = "subtitles";
1010    track.srclang = "en";
1011    track.src = chosen.vtt;
1012    video.appendChild(track);
1013    document.querySelector(".video-controls-btn")?.remove();
1014    document.querySelector(".video-volume-btn")?.remove();
1015  } else {
1016    video.removeAttribute("controls");
1017    video.removeAttribute("crossorigin");
1018  }
1019  
1020  video.src = chosen.src;
1021  video.addEventListener("canplay", function handler() {
1022    video.removeEventListener("canplay", handler);
1023    video.play().catch(() => {});
1024  });
1025  video.load();
1026})();
1027</script>
1027</div></header><main id="content" role="main"><h1 class="visuallyhidden">The Loop West End - West End, St Louis Park, MN</h1><article class="hide-show-section" data-hidden="no"><div class="banner-section section-wrapper" id="banner"><div class="container"><p><a class="banner-pin hvr-pop" href="#map-v3-container"><i class="fa fa-map-marker"></i><span class="off-screen">Check our  location on map section at the bottom of the page</span></a>5331 West 16th Street, St Louis Park, MN 55416</p></div></div></article><article class="hide-show-section" data-hidden="no"><style></style><div class="custom_html_2-section section-wrapper" id="custom_html_2"><div class="container"><iframe allowfullscreen="allowfullscreen" frameborder="1" height="100%" marginheight="0px" marginwidth="0px" scrolling="yes" src="https://us-restaurant.momos.io/forms/52924e62-11fd-46e7-ba80-6c982b4be377?id=417c27de-1884-4917-abdf-eb69278834de" style="border:0px #ffffff none;" width="90%"></iframe></div></div></article><article class="hide-show-section" data-hidden="no"><div class="order-tmt-section tmt-section section-wrapper" id="order_tmt"><div class="container"><h2 class="section-header">Order online</h2><h3>Fun - Fresh - Local</h3><p>Your favorite food is just a click away. Order online from the comfort of your home.</p><a class="custom-temp-btn hvr-fade" href="https://order.toasttab.com/online/the-loop-west-end" target="_blank">Order<span class="visuallyhidden">, you are leaving the website, opens in a new tab</span></a></div></div></article><article class="hide-show-section" data-hidden="no"><style>
1028.slideshow-v2-wrapper .slideshow-controls-btn {
1029  color: rgba(255, 255, 255, 0.8);
1030}
1031
1032</style><div class="slideshow-v2-wrapper" id="slideshow_v2"><div aria-label="slideshow carousel" class="uk-slidenav-position" data-uk-slideshow="{animation: 'swipe', autoplay: true, duration: 500, autoplayInterval: 4000, pauseOnHover: false, height: '100%'}" role="region" style="height:650px"><button aria-label="The slideshow is currently playing, pause the slideshow" class="slideshow-controls-btn playing" type="button"><span class="off-screen">slideshow start stop playing</span><i aria-hidden="true" class="fa fa-play"></i><i aria-hidden="true" class="fa fa-pause"></i></button><ul class="uk-dotnav uk-dotnav-contrast uk-position-bottom uk-flex-center"><li data-uk-slideshow-item="0"><a href="" role="button"><span class="off-screen">Slide 1 content</span></a></li><li data-uk-slideshow-item="1"><a href="" role="button"><span class="off-screen">Slide 2 content</span></a></li><li data-uk-slideshow-item="2"><a href="" role="button"><span class="off-screen">Slide 3 content</span></a></li></ul><a class="uk-slidenav uk-slidenav-contrast uk-slidenav-previous" data-uk-slideshow-item="previous" href=""><span class="off-screen">previous slide</span></a><a class="uk-slidenav uk-slidenav-contrast uk-slidenav-next" data-uk-slideshow-item="next" href=""><span class="off-screen">next slide</span></a><ul class="uk-slideshow "><li><img alt="" src="//cdn.spotapps.co/spothopper/image/fetch/f_auto,q_auto:best,c_fit,h_1200/http://static.spotapps.co/spots/e7/6e3f3811f045f19f8a49290b2acc77/:original"/><div class="uk-overlay-panel uk-overlay-background uk-overlay-fade uk-flex uk-flex-center uk-flex-middle uk-text-center"><div class="container"><div class="slide-text">Order Online</div><h2>Something for Everyone</h2><div class="buttons-group-holder"><a class="custom-temp-btn hvr-fade" href="https://order.toasttab.com/online/the-loop-west-end" target="_blank">Order Now<span class="visuallyhidden">, you are leaving the website, opens in a new tab</span></a></div></div></div></li><li><img alt="" src="//cdn.spotapps.co/spothopper/image/fetch/f_auto,q_auto:best,c_fit,h_1200/http://static.spotapps.co/spots/c9/c03aac374f419593fd252c50a7ffa1/:original"/><div class="uk-overlay-panel uk-overlay-background uk-overlay-fade uk-flex uk-flex-center uk-flex-middle uk-text-center"><div class="container"></div></div></li><li><img alt="" src="//cdn.spotapps.co/spothopper/image/fetch/f_auto,q_auto:best,c_fit,h_1200/http://static.spotapps.co/spots/98/d047ff7dc348518eeab5ec0acced0f/:original"/><div class="uk-overlay-panel uk-overlay-background uk-overlay-fade uk-flex uk-flex-center uk-flex-middle uk-text-center"><div class="container"><div class="slide-text">Book a Party</div><h2>we can take great</h2><div class="buttons-group-holder"><a class="custom-temp-btn hvr-fade" href="https://us-restaurant.momos.io/forms/52924e62-11fd-46e7-ba80-6c982b4be377?id=417c27de-1884-4917-abdf-eb69278834de#" target="_blank">Private Parties<span class="visuallyhidden">, you are leaving the website, opens in a new tab</span></a></div></div></div></li></ul></div></div></article><article class="hide-show-section" data-hidden="no"><style>
1033.about-us-v8-wrapper {
1034  padding: 0;
1035}
1036.about-us-v8-wrapper:before {
1037  background-color: #fff;
1038      background-image: url('https://static.spotapps.co/website_images/ab_websites/112064_website_v3/about_bg.jpg');
1039    }
1040
1041
1042.about-us-v8-wrapper .container {
1043  padding: 0;
1044  width: 100%;
1045}
1046
1047
1048      #aboutus_v8 .about-us-v8-item-0 {
1049      background-color: #fff;
1050    }
1051  
1052  
1053  
1054  #aboutus_v8 .about-us-v8-item-0 .text-wrapper {
1055    padding: 80px 8%;
1056  }
1057
1058  
1059  
1060      #aboutus_v8 .about-us-v8-item-0 .about-us-v8-content .text-content h3,
1061    #aboutus_v8 .about-us-v8-item-0 .about-us-v8-content .text-content h2:not(.about-title) {
1062      color: #990000;
1063    }
1064  
1065  
1066  @media (max-width: 1024px) {
1067    #aboutus_v8 .about-us-v8-item-0 .text-wrapper {
1068      padding: 80px 8%;
1069    } 
1070  }
1071
1072  @media (max-width: 767px) {
1073      #aboutus_v8 .about-us-v8-item-0 .about-us-v8-image {
1074        margin: 0;
1075                  height: 300px;
1076              } 
1077  }
1078
1079  
1080  
1081  
1082  #aboutus_v8 .about-us-v8-item-1 .text-wrapper {
1083    padding: 80px 8%;
1084  }
1085
1086  
1087  
1088      #aboutus_v8 .about-us-v8-item-1 .about-us-v8-content .text-content h3,
1089    #aboutus_v8 .about-us-v8-item-1 .about-us-v8-content .text-content h2:not(.about-title) {
1090      color: #990000;
1091    }
1092  
1093  
1094  @media (max-width: 1024px) {
1095    #aboutus_v8 .about-us-v8-item-1 .text-wrapper {
1096      padding: 80px 8%;
1097    } 
1098  }
1099
1100  @media (max-width: 767px) {
1101      #aboutus_v8 .about-us-v8-item-1 .about-us-v8-image {
1102        margin: 0;
1103                  height: 300px;
1104              } 
1105  }
1106
1107@-webkit-keyframes grow {
1108  from {
1109    opacity: 0;
1110    width: 0px;
1111  }
1112  to {
1113    opacity: 1;
1114    width: 80%;
1115  }
1116}
1117@-moz-keyframes grow {
1118  from {
1119    opacity: 0;
1120    width: 0px;
1121  }
1122  to {
1123    opacity: 1;
1124    width: 80%;
1125  }
1126}
1127@keyframes grow {
1128  from {
1129    opacity: 0;
1130    width: 0px;
1131  }
1132  to {
1133    opacity: 1;
1134    width: 80%;
1135  }
1136}
1137
1138.safari-mac .about-us-v8-item .about-us-v8-image-bar {
1139  width: 80%;
1140}
1141
1142
1143@media (max-width: 767px) {
1144  .about-us-v8-wrapper {
1145    padding: 0;
1146  }
1147  .about-us-v8-wrapper .container {
1148    padding: 0;
1149    width: 100%;
1150  }
1151  .about-us-v8-item {
1152    padding: 0 !important;
1153  }
1154}
1155
1156</style><div class="about-us-v8-wrapper section-wrapper" id="aboutus_v8"><div class="container about-us-v8"><section><div class="about-us-v8-item about-us-v8-item-0 about-us-v8-item-spec-color about-us-v8-item-left" style="padding: 50px 3%; "><!-- start About us item --><div class="about-us-v8-image image-size-cover image-size-mobile-cover" style="background-image: url('https://static.spotapps.co/website_images/ab_websites/112064_website_v3/parties.jpg'); width: 50%;
1157                              "><!-- start Left About us image --></div><!-- end Left About us image --><div class="about-us-v8-content  content-left" style="width: 50%; 
1158            color: #232323;
1159            background: rgba(250, 250, 250, 0);                        text-align: left;"><div class="text-wrapper"><div class="text-content "><h2 class="about-title bar-left" style="color: #232323;"><span>Private Parties</span></h2><div class="text-holder"><h3>Want to book a large group, party, or event?</h3><p>The Loop specializes in hosting large groups and events. We offer food/drink packages, which are customized to your needs. You&apos;re the boss... Let us know what you&apos;d like, and we&apos;ll deliver! Whether your group is 10 people or 100 people, we can take great care of you!</p></div><div class="buttons-holder buttons-row-parent buttons-left"><div class="buttons-row"><a class="custom-temp-btn hvr-fade" href="https://us-restaurant.momos.io/forms/52924e62-11fd-46e7-ba80-6c982b4be377?id=417c27de-1884-4917-abdf-eb69278834de" target="_blank">
1160                          Book a party                                                      <span class="visuallyhidden"> , you are leaving the website, opens in a new tab</span></a></div></div></div></div></div><!-- end Right About us image --></div><!-- end About us item --></section><section><div class="about-us-v8-item about-us-v8-item-1 about-us-v8-item-right" style="padding: 50px 3%; "><!-- start About us item --><div class="about-us-v8-image visible-xs image-size-cover image-size-mobile-cover" style="background-image: url('https://static.spotapps.co/website_images/ab_websites/112064_website_v3/menu.jpg'); width: 50%;
1161                              "><!-- start Left About us image --></div><!-- end Left About us image --><div class="about-us-v8-content  " style="width: 50%; 
1162            color: #232323;
1163            background: rgba(250, 250, 250, 0);                        text-align: center;"><div class="text-wrapper"><div class="text-content "><h2 class="about-title" style="color: #232323;"><span>Our Menu</span></h2><div class="text-holder"><h3>Discover our menu to find what appeals to you</h3><p style="text-align: center;">  The Loop West End offers a large variety of menu options, from salads and sandwiches to pizza and entrees such as the Salmon Rice Bowl, the Flank Steak Salad and the Mac-n-Cheese Pizza. We have something for everyone whether you’re a Minnesota native or just visiting the area!  </p><p style="text-align: center;"></p><p style="text-align: center;"><i>The Loop Bar + Restaurant charges a surcharge on all Credit Card transactions. This amount is not more than the restaurant pays in processing fees. There is no surcharge for Debit Card or Cash transactions.</i></p></div><div class="buttons-holder buttons-row-parent "><div class="buttons-row"><a class="custom-temp-btn hvr-fade" href="/food-menu" target="_self">
1164                          View Menu                                                  </a></div></div></div></div></div><!-- start Right About us image --><div class="about-us-v8-image hidden-xs image-size-cover image-size-mobile-cover" style="background-image: url('https://static.spotapps.co/website_images/ab_websites/112064_website_v3/menu.jpg'); width: 50%;
1165                                  "></div><!-- end Right About us image --></div><!-- end About us item --></section></div></div><!-- For mobile devices animate the about_v8 section on page load if the video is on the cover and this section is 1st or 2nd below the cover. --></article><article class="hide-show-section" data-hidden="no"><style></style><div class="reservations-wrapper ot-reservations-wrapper section-wrapper" id="reservations_open_table_v2"><div class="container text-center reservations"><div class="row"><div class="col-md-12 col-xs-12 col-sm-12"><h2 class="section-header">Reservations</h2><p>Call us at <a href="tel:+19526812684">(952)-681-2684</a> or book a table through Open Table:</p></div></div><div class="open-table-holder open-table-desktop open-table-wide">
1165<script src="//www.opentable.com/widget/reservation/loader?rid=213007&domain=com&type=standard&theme=wide&lang=en&overlay=false&iframe=true&color=1&dark=false&ot_source=Restaurant%20website" type="text/javascript">
1166        </script>
1166</div><div class="open-table-holder open-table-mobile open-table-standard">
1166<script src="//www.opentable.com/widget/reservation/loader?rid=213007&domain=com&type=standard&theme=standard&lang=en&overlay=false&iframe=true&color=1&dark=false&ot_source=Restaurant%20website" type="text/javascript"></script>
1166</div></div></div></article><article class="hide-show-section" data-hidden="no"><style></style><div class="gallery-v4-wrapper section-wrapper" id="gallery_v4"><button class="visuallyhidden skip-content gallery-toggle gt-off">Skip Photo Gallery</button><div class="container"><div class="gallery-v4-grid"><div class="gallery-v4-grid-sizer"></div><div class="gallery-v4-grid-item gallery-v4-grid-item--width2 gallery-hover animation_0"><a class="fancybox fancybox.image" href="//static.spotapps.co/spots/50/46939b0c304275a5f2d0354e2e9c23/full"><div class="img"><img alt="Exterior, entrance area, neon lights." class="img-responsive lazyload" data-sizes="auto" data-src="//static.spotapps.co/spots/50/46939b0c304275a5f2d0354e2e9c23/full" data-srcset="//static.spotapps.co/spots/50/46939b0c304275a5f2d0354e2e9c23/small 200w, //static.spotapps.co/spots/50/46939b0c304275a5f2d0354e2e9c23/medium 400w, //static.spotapps.co/spots/50/46939b0c304275a5f2d0354e2e9c23/full 800w" src="https://static.spotapps.co/web/placeholder.png"/></div></a></div><div class="gallery-v4-grid-item gallery-hover animation_0"><a class="fancybox fancybox.image" href="//static.spotapps.co/spots/77/8338472a5f48b4a533682c591c0703/full"><div class="img"><img alt="Two sandwiches and a drink, served." class="img-responsive lazyload" data-sizes="auto" data-src="//static.spotapps.co/spots/77/8338472a5f48b4a533682c591c0703/full" data-srcset="//static.spotapps.co/spots/77/8338472a5f48b4a533682c591c0703/small 200w, //static.spotapps.co/spots/77/8338472a5f48b4a533682c591c0703/medium 400w, //static.spotapps.co/spots/77/8338472a5f48b4a533682c591c0703/full 800w" src="https://static.spotapps.co/web/placeholder.png"/></div></a></div><div class="gallery-v4-grid-item gallery-hover animation_0"><a class="fancybox fancybox.image" href="//static.spotapps.co/spots/42/87d6024b1a4ba4bec38e03520139dd/full"><div class="img"><img alt="Various dishes served." class="img-responsive lazyload" data-sizes="auto" data-src="//static.spotapps.co/spots/42/87d6024b1a4ba4bec38e03520139dd/full" data-srcset="//static.spotapps.co/spots/42/87d6024b1a4ba4bec38e03520139dd/small 200w, //static.spotapps.co/spots/42/87d6024b1a4ba4bec38e03520139dd/medium 400w, //static.spotapps.co/spots/42/87d6024b1a4ba4bec38e03520139dd/full 800w" src="https://static.spotapps.co/web/placeholder.png"/></div></a></div><div class="gallery-v4-grid-item gallery-hover animation_0"><a class="fancybox fancybox.image" href="//static.spotapps.co/spots/ff/ded9cfdeef48b0a5b40d958b053473/full"><div class="img"><img alt="Mini Loopy Brownie Sundae dessert, served." class="img-responsive lazyload" data-sizes="auto" data-src="//static.spotapps.co/spots/ff/ded9cfdeef48b0a5b40d958b053473/full" data-srcset="//static.spotapps.co/spots/ff/ded9cfdeef48b0a5b40d958b053473/small 200w, //static.spotapps.co/spots/ff/ded9cfdeef48b0a5b40d958b053473/medium 400w, //static.spotapps.co/spots/ff/ded9cfdeef48b0a5b40d958b053473/full 800w" src="https://static.spotapps.co/web/placeholder.png"/></div></a></div><div class="gallery-v4-grid-item gallery-hover animation_0"><a class="fancybox fancybox.image" href="//static.spotapps.co/spots/21/1d0fb4c6c8452a816a9ffc2b78d2d9/full"><div class="img"><img alt="Interior, bar area with customers." class="img-responsive lazyload" data-sizes="auto" data-src="//static.spotapps.co/spots/21/1d0fb4c6c8452a816a9ffc2b78d2d9/full" data-srcset="//static.spotapps.co/spots/21/1d0fb4c6c8452a816a9ffc2b78d2d9/small 200w, //static.spotapps.co/spots/21/1d0fb4c6c8452a816a9ffc2b78d2d9/medium 400w, //static.spotapps.co/spots/21/1d0fb4c6c8452a816a9ffc2b78d2d9/full 800w" src="https://static.spotapps.co/web/placeholder.png"/></div></a></div><div class="gallery-v4-grid-item gallery-hover animation_0"><a class="fancybox fancybox.image" href="//static.spotapps.co/spots/1b/27d0e69d564f8e83b56f4683f2c689/full"><div class="img"><img alt="Pizza with arugula on top, closeup." class="img-responsive lazyload" data-sizes="auto" data-src="//static.spotapps.co/spots/1b/27d0e69d564f8e83b56f4683f2c689/full" data-srcset="//static.spotapps.co/spots/1b/27d0e69d564f8e83b56f4683f2c689/small 200w, //static.spotapps.co/spots/1b/27d0e69d564f8e83b56f4683f2c689/medium 400w, //static.spotapps.co/spots/1b/27d0e69d564f8e83b56f4683f2c689/full 800w" src="https://static.spotapps.co/web/placeholder.png"/></div></a></div><div class="gallery-v4-grid-item gallery-hover animation_0"><a class="fancybox fancybox.image" href="//static.spotapps.co/spots/08/50edcc565c410eb1fb950fb6018ac3/full"><div class="img"><img alt="Rice with salmon on top." class="img-responsive lazyload" data-sizes="auto" data-src="//static.spotapps.co/spots/08/50edcc565c410eb1fb950fb6018ac3/full" data-srcset="//static.spotapps.co/spots/08/50edcc565c410eb1fb950fb6018ac3/small 200w, //static.spotapps.co/spots/08/50edcc565c410eb1fb950fb6018ac3/medium 400w, //static.spotapps.co/spots/08/50edcc565c410eb1fb950fb6018ac3/full 800w" src="https://static.spotapps.co/web/placeholder.png"/></div></a></div><div class="gallery-v4-grid-item gallery-v4-grid-item--width2 gallery-hover animation_0"><a class="fancybox fancybox.image" href="//static.spotapps.co/spots/a1/18daa954e04795a7358b37a76276a4/full"><div class="img"><img alt="Salmon rice bowl." class="img-responsive lazyload" data-sizes="auto" data-src="//static.spotapps.co/spots/a1/18daa954e04795a7358b37a76276a4/full" data-srcset="//static.spotapps.co/spots/a1/18daa954e04795a7358b37a76276a4/small 200w, //static.spotapps.co/spots/a1/18daa954e04795a7358b37a76276a4/medium 400w, //static.spotapps.co/spots/a1/18daa954e04795a7358b37a76276a4/full 800w" src="https://static.spotapps.co/web/placeholder.png"/></div></a></div><div class="gallery-v4-grid-item gallery-hover animation_0"><a class="fancybox fancybox.image" href="//static.spotapps.co/spots/2b/55885dbbcf455f8224ffa591060f3d/full"><div class="img"><img alt="Mini donuts." class="img-responsive lazyload" data-sizes="auto" data-src="//static.spotapps.co/spots/2b/55885dbbcf455f8224ffa591060f3d/full" data-srcset="//static.spotapps.co/spots/2b/55885dbbcf455f8224ffa591060f3d/small 200w, //static.spotapps.co/spots/2b/55885dbbcf455f8224ffa591060f3d/medium 400w, //static.spotapps.co/spots/2b/55885dbbcf455f8224ffa591060f3d/full 800w" src="https://static.spotapps.co/web/placeholder.png"/></div></a></div><div class="gallery-v4-grid-item gallery-hover animation_0"><a class="fancybox fancybox.image" href="//static.spotapps.co/spots/31/fe418a046c46e7a02dc75f4f3c1cee/full"><div class="img"><img alt="Fried chicken sandwich." class="img-responsive lazyload" data-sizes="auto" data-src="//static.spotapps.co/spots/31/fe418a046c46e7a02dc75f4f3c1cee/full" data-srcset="//static.spotapps.co/spots/31/fe418a046c46e7a02dc75f4f3c1cee/small 200w, //static.spotapps.co/spots/31/fe418a046c46e7a02dc75f4f3c1cee/medium 400w, //static.spotapps.co/spots/31/fe418a046c46e7a02dc75f4f3c1cee/full 800w" src="https://static.spotapps.co/web/placeholder.png"/></div></a></div><div class="gallery-v4-grid-item gallery-hover animation_0"><a class="fancybox fancybox.image" href="//static.spotapps.co/spots/46/520c6d39cb4c77be9fcbe4fbd06b9a/full"><div class="img"><img alt="Flatbread." class="img-responsive lazyload" data-sizes="auto" data-src="//static.spotapps.co/spots/46/520c6d39cb4c77be9fcbe4fbd06b9a/full" data-srcset="//static.spotapps.co/spots/46/520c6d39cb4c77be9fcbe4fbd06b9a/small 200w, //static.spotapps.co/spots/46/520c6d39cb4c77be9fcbe4fbd06b9a/medium 400w, //static.spotapps.co/spots/46/520c6d39cb4c77be9fcbe4fbd06b9a/full 800w" src="https://static.spotapps.co/web/placeholder.png"/></div></a></div><div class="gallery-v4-grid-item gallery-hover animation_0"><a class="fancybox fancybox.image" href="//static.spotapps.co/spots/e1/a32b7ef89148ab96900c3a91038b37/full"><div class="img"><img alt="Tuna Poke Bowl." class="img-responsive lazyload" data-sizes="auto" data-src="//static.spotapps.co/spots/e1/a32b7ef89148ab96900c3a91038b37/full" data-srcset="//static.spotapps.co/spots/e1/a32b7ef89148ab96900c3a91038b37/small 200w, //static.spotapps.co/spots/e1/a32b7ef89148ab96900c3a91038b37/medium 400w, //static.spotapps.co/spots/e1/a32b7ef89148ab96900c3a91038b37/full 800w" src="https://static.spotapps.co/web/placeholder.png"/></div></a></div><div class="gallery-v4-grid-item gallery-hover animation_0"><a class="fancybox fancybox.image" href="//static.spotapps.co/spots/a1/b994f8c939407a9de51e4e11348759/full"><div class="img"><img alt="Buttermilk Fried Chicken Sandwich." class="img-responsive lazyload" data-sizes="auto" data-src="//static.spotapps.co/spots/a1/b994f8c939407a9de51e4e11348759/full" data-srcset="//static.spotapps.co/spots/a1/b994f8c939407a9de51e4e11348759/small 200w, //static.spotapps.co/spots/a1/b994f8c939407a9de51e4e11348759/medium 400w, //static.spotapps.co/spots/a1/b994f8c939407a9de51e4e11348759/full 800w" src="https://static.spotapps.co/web/placeholder.png"/></div></a></div><div class="gallery-v4-grid-item gallery-hover animation_0"><a class="fancybox fancybox.image" href="//static.spotapps.co/spots/73/1f394218ea4af6ab73d3a9b9834c5c/full"><div class="img"><img alt="Seasame Crusted Tuna." class="img-responsive lazyload" data-sizes="auto" data-src="//static.spotapps.co/spots/73/1f394218ea4af6ab73d3a9b9834c5c/full" data-srcset="//static.spotapps.co/spots/73/1f394218ea4af6ab73d3a9b9834c5c/small 200w, //static.spotapps.co/spots/73/1f394218ea4af6ab73d3a9b9834c5c/medium 400w, //static.spotapps.co/spots/73/1f394218ea4af6ab73d3a9b9834c5c/full 800w" src="https://static.spotapps.co/web/placeholder.png"/></div></a></div></div></div></div></article><article class="hide-show-section" data-hidden="no"><style>
1167
1168
1169.reviews-v2-wrapper .carousel-controls .carousel-control-btn {
1170  color: #232323;
1171}
1172</style><div class="carousel-wrapper reviews-v2-wrapper section-wrapper" id="reviews_v2"><h2 class="section-header">Reviews</h2><h3 class="review-by">reviews by - Yelp</h3><div class="container"><div aria-label="reviews carousel" class="row" role="region"><div class="carousel-controls" id="ReviewesCarouselControls"><button aria-label="The Reviews carousel is currently playing, pause the Reviews carousel" class="carousel-control-btn stop-carousel" type="button"><i aria-hidden="true" class="fa fa-pause"></i><i aria-hidden="true" class="fa fa-play"></i><span class="visuallyhidden"> Start stop reviews carousel</span></button></div><ul class="owl-dots"><li class="owl-dot"></li><li class="owl-dot"></li><li class="owl-dot"></li></ul><div class="col-md-12 col-xs-12"><div class="owl-carousel owl-theme"><section><div class="item"><h4 class="reviewer"><span class="visuallyhidden">five star review by</span>
1173                  Yvonne G:
1174                  <i aria-hidden="true" class="fa fa-star"></i><i aria-hidden="true" class="fa fa-star"></i><i aria-hidden="true" class="fa fa-star"></i><i aria-hidden="true" class="fa fa-star"></i><i aria-hidden="true" class="fa fa-star"></i></h4><div class="review-text"><div aria-hidden="true" class="review-quote quote-left"><i class="fa fa-quote-left"></i></div><div aria-hidden="true" class="review-quote quote-right"><i class="fa fa-quote-right"></i></div><blockquote><p>This place was the bomb, the food had great taste with layers and layers of flavor. The bartender even made me a strawberry and pomegranate mules, both not on the menu. We had the Salmon Rice Bowl and a Beef Noodle Stir Fry, both were delicious!!</p></blockquote></div></div></section><section><div class="item"><h4 class="reviewer"><span class="visuallyhidden">five star review by</span>
1175                  Stella T:
1176                  <i aria-hidden="true" class="fa fa-star"></i><i aria-hidden="true" class="fa fa-star"></i><i aria-hidden="true" class="fa fa-star"></i><i aria-hidden="true" class="fa fa-star"></i><i aria-hidden="true" class="fa fa-star"></i></h4><div class="review-text"><div aria-hidden="true" class="review-quote quote-left"><i class="fa fa-quote-left"></i></div><div aria-hidden="true" class="review-quote quote-right"><i class="fa fa-quote-right"></i></div><blockquote><p>Visited at lunchtime a few days ago. I&apos;ve been here a number of times and always enjoy my experience. I brought a friend with me who had never been before. From Pizza to Jambalaya it&apos;s always good food. The staff is great and love the atmosphere. The music can get a bit loud when it&apos;s busy but overall, I&apos;ll always go again and will recommend to others.</p></blockquote></div></div></section><section><div class="item"><h4 class="reviewer"><span class="visuallyhidden">five star review by</span>
1177                  Rick L:
1178                  <i aria-hidden="true" class="fa fa-star"></i><i aria-hidden="true" class="fa fa-star"></i><i aria-hidden="true" class="fa fa-star"></i><i aria-hidden="true" class="fa fa-star"></i><i aria-hidden="true" class="fa fa-star"></i></h4><div class="review-text"><div aria-hidden="true" class="review-quote quote-left"><i class="fa fa-quote-left"></i></div><div aria-hidden="true" class="review-quote quote-right"><i class="fa fa-quote-right"></i></div><blockquote><p>I&apos;m from out of town, ordered on a whim and I was not disappointed! I had the jambalaya, it was excellent. Loaded with chicken, shrimp, and sausage. If you haven&apos;t been here I would highly recommend this place!</p></blockquote></div></div></section></div></div></div></div></div></article><article class="hide-show-section" data-hidden="no"><style>
1179.map-newsletter .text-wrapper:before {
1180      background-image: url('https://static.spotapps.co/website_images/ab_websites/112064_website_v3/newsletter.jpg');
1181    }
1182
1183</style><div class="googlemap-v3-wrapper openstreetmap-v3-wrapper maps-wrapper section-wrapper" id="openstreetmap_v3"><div class="row map-holder"><section><div class="col-md-6 col-sm-12 col-xs-12 map-item map-newsletter"><div class="text-wrapper"><div class="text-content"><h2 class="section-header">Newsletter</h2>
1183<script id="sph-widget-112064" type="text/javascript">
1184                  (function() {
1185                      function async_load(){
1186                          var s = document.createElement('script');
1187                          s.type = 'text/javascript';
1188                          s.async = true;
1189                          s.src = 'https://www.spothopperapp.com/spots/112064/widgets/newsletter.js?template=newsletter_widget1';
1190                          var embedder = document.getElementById('sph-widget-112064');
1191                          embedder.parentNode.insertBefore(s, embedder);
1192
1193                          // Modify widget's html
1194                          setTimeout(function(){
1195                            $( '<span class="bar"></span>' ).insertAfter( '.sph-email-input' );
1196                            $('.sph-submit-button').addClass('custom-temp-btn hvr-fade');
1197
1198                            // Replace <h2> with <p>
1199                            document.querySelectorAll('.section-wrapper .sph-email-subscription h2').forEach(h2 => {
1200                              const p = document.createElement('p');
1201
1202                              // Copy all attributes from h2 to p
1203                              [...h2.attributes].forEach(attr => {
1204                                  p.setAttribute(attr.name, attr.value);
1205                              });
1206
1207                              // Copy inner HTML content
1208                              p.innerHTML = h2.innerHTML;
1209
1210                              // Replace h2 with p
1211                              h2.parentNode.replaceChild(p, h2);
1212                            });
1213                          }, 2000);
1214
1215                      }
1216                      if (window.attachEvent)
1217                          window.attachEvent('onload', async_load);
1218                      else
1219                          window.addEventListener('load', async_load, false);
1220                  })();
1221                  </script>
1221</div></div></div></section><section><div class="col-md-6 col-sm-12 col-xs-12 map-item"><div aria-label="OpenStreet map" id="map-v3-container" role="region"></div></div></section></div><div class="map-footer text-center"><div class="triangle"></div></div></div></article><article class="hide-show-section" data-hidden="no"><style>
1222
1223.contact-v3 .hours-title, .contact-v3 .social-title, .contact-v3 .contact-us-title {
1224  color: #fff;
1225}
1226.contact a:hover, .contact a:active, .contact-us a:hover, .contact-us a:active {
1227  color: #fff;
1228}
1229.contact-v3 .social-circle .contact-icon {
1230  color: rgba(255, 255, 255, 0.8);
1231}
1232  .contact-v3 .social-square .contact-icon {
1233    color: #fff;
1234  }
1235  .contact-v3 .social-square .contact-icon:hover {
1236    color: #4C2432;
1237    background-color: #fff;
1238  }
1239
1240</style><footer class="contact-holder"><div class="contact-v3 contact-v3-center section-wrapper" id="contact_v3"><div class="container"><div class="row"><div class="col-md-4 col-sm-4 col-xs-12"><section><div class="contact-location"><div class="hours-title"><h2>Location</h2></div><div class="address" data-gbp-injected="business-name">The Loop West End</div><div class="address">5331 West 16th Street</div><div class="city-state">St Louis Park, MN</div><div class="zip">55416</div><div class="address" data-gbp-injected="get-directions"><a aria-label="Get directions to The Loop West End, opens in a new tab" class="get-directions-footer-link" href="https://www.google.com/maps/dir/?api=1&destination=The%20Loop%20West%20End&destination_place_id=ChIJaZGkSaI0s1IR4KXuICXDEBw" rel="noopener" style="text-decoration: underline; display: inline-block; padding: 5px 0;" target="_blank"><i aria-hidden="true" class="fa fa-map-marker"></i> Get Directions</a></div></div></section></div><div class="col-md-4 col-sm-4 col-xs-12"><section><div class="hours"><div class="hours-title"><h2>Hours</h2></div><div class="days">
1241                          Monday, Tuesday, Wednesday, Thursday, Friday                      </div><div class="from-to">
1242                          11:00 AM - 2:00 AM                      </div><div class="days">
1243                          Saturday                      </div><div class="from-to">
1244                          10:00 AM - 2:00 AM                      </div><div class="days">
1245                          Sunday                      </div><div class="from-to">
1246                          10:00 AM - 12:00 AM                      </div></div></section></div><div class="col-md-4 col-sm-4 col-xs-12"><div class="find-us"><section><div class="social"><div class="social-title"><h2>Find us on...</h2></div><ul class="social-links social-icons-holder social-square"><li><a class="contact-icon" href="https://www.facebook.com/734246769988821" target="_blank"><i class="social-icon fa fa-facebook"></i><span>Facebook page, you are leaving the website, opens in a new tab</span></a></li><li><a class="contact-icon" href="https://www.instagram.com/theloopwestend" target="_blank"><i class="social-icon fa fa-instagram"></i><span>Instagram page, you are leaving the website, opens in a new tab</span></a></li><li><a class="contact-icon" href="https://www.tiktok.com/@theloopwestend" target="_blank"><svg aria-hidden="true" height="37" viewbox="-4 5 42 32" width="22" xmlns="http://www.w3.org/2000/svg"><path d="M16.708 0.027c1.745-0.027 3.48-0.011 5.213-0.027 0.105 2.041 0.839 4.12 2.333 5.563 1.491 1.479 3.6 2.156 5.652 2.385v5.369c-1.923-0.063-3.855-0.463-5.6-1.291-0.76-0.344-1.468-0.787-2.161-1.24-0.009 3.896 0.016 7.787-0.025 11.667-0.104 1.864-0.719 3.719-1.803 5.255-1.744 2.557-4.771 4.224-7.88 4.276-1.907 0.109-3.812-0.411-5.437-1.369-2.693-1.588-4.588-4.495-4.864-7.615-0.032-0.667-0.043-1.333-0.016-1.984 0.24-2.537 1.495-4.964 3.443-6.615 2.208-1.923 5.301-2.839 8.197-2.297 0.027 1.975-0.052 3.948-0.052 5.923-1.323-0.428-2.869-0.308-4.025 0.495-0.844 0.547-1.485 1.385-1.819 2.333-0.276 0.676-0.197 1.427-0.181 2.145 0.317 2.188 2.421 4.027 4.667 3.828 1.489-0.016 2.916-0.88 3.692-2.145 0.251-0.443 0.532-0.896 0.547-1.417 0.131-2.385 0.079-4.76 0.095-7.145 0.011-5.375-0.016-10.735 0.025-16.093z"></path></svg><span>TikTok page, you are leaving the website, opens in a new tab</span></a></li></ul></div></section><section><div class="contact-us"><div class="contact-us-title"><h2>Contact us</h2></div><p><a href="tel:+19526812684" id="contact_us_v3_section_phone_link"><span class="visuallyhidden">Call us at </span>(952)-681-2684</a></p><p><a href="mailto:[email protected]"><span class="visuallyhidden">Write us at </span>[email protected]</a></p></div></section></div></div></div></div></div></footer></article><article class="hide-show-section" data-hidden="no"><div class="footer-v2-wrapper" id="footer_v2"><div class="container"><div class="row"><div class="col-xs-12 col-sm-12 col-md-12 col-lg-12"><p>Powered by: <a aria-label="SpotHopper homepage, you are leaving the website, opens in a new tab" class="applicationsLink" href="https://www.spothopperapp.com/" target="_blank"><img alt="SpotHopper logo" class="logoimg" src="https://static.spotapps.co/website_images/default_template_images/spothopper_logo.png"/></a></p></div><div class="col-xs-12 col-sm-12 col-md-12 col-lg-12"><a aria-label="Website design, Social Media marketing, and Email marketing provided by SpotHopper. Contact Us, you are leaving the website, opens in a new tab" class="applicationsLink" href="https://www.spothopperapp.com/contact-us?contact_reason=demo" target="_blank">Website design, Social Media marketing and Email marketing provided by SpotHopper.</a></div></div></div></div></article></main><style type="text/css">
1247    .navbar-fixed-bottom.nav-v1 {
1248        bottom: -100px;
1249    }
1250    .navbar-fixed-bottom.nav-v1 .nav.navbar-nav.navbar-right {
1251        background-color: #4C2432;
1252    }
1253    .navbar-fixed-bottom.nav-v1 .bottom-svg-border path,
1254    .navbar-fixed-bottom.nav-v1 .bottom-svg-border polygon {
1255      fill: #000;
1256    }
1257    .navbar-fixed-bottom.nav-v1 .bottom-list-item a {
1258        color: #fff;
1259    }
1260    .navbar-fixed-bottom.nav-v1 .bottom-list-item a:hover,
1261    .navbar-fixed-bottom.nav-v1 .bottom-list-item a:focus {
1262        color: #fff;
1263        text-decoration: none;
1264    }
1265</style><nav aria-label="mobile footer" class="navbar-fixed-bottom nav-v1" id="bottom-navbar"><div><ul class="nav navbar-nav navbar-right"><li class="mobile-footer-nudge-item"><a href="https://order.toasttab.com/online/the-loop-west-end" target="_blank" class="cta-nudge-btn" data-nudge-type="order" data-nudge-position="mobile-footer"><span>Order</span><span class="visuallyhidden">, opens in a new tab</span></a></li></ul></div></nav><div aria-hidden="true" aria-label="newsletter dialog" class="modal fade custom-modal" id="CustomModal" role="dialog" tabindex="-1"><div class="modal-dialog modal-md" role="document"><div class="modal-content"><div class="custom-modal-close"><button aria-label="Close the Newsletter dialog" class="close" data-dismiss="modal" type="button"><span aria-hidden="true">×</span></button></div><div class="modal-body"><div class="row"><div class="col-md-12"><div class="newsletter-popup"><h2 class="section-header">Newsletter</h2>
1265<script id="sph-widget-2ce08bd156a46491d83342eb4a039092" type="text/javascript">
1266    (function() {
1267        function async_load(){
1268            var s = document.createElement('script');
1269            s.type = 'text/javascript';
1270            s.async = true;
1271            s.src = 'https://www.spothopperapp.com/spots/112064/widgets/newsletter.js?template=newsletter_widget2';
1272            var embedder = document.getElementById('sph-widget-2ce08bd156a46491d83342eb4a039092');
1273            embedder.parentNode.insertBefore(s, embedder);
1274
1275            // Modify widget's html
1276            setTimeout(function(){
1277                document.querySelectorAll('.custom-modal .sph-email-subscription h2').forEach(h2_p => {
1278                    const p_p = document.createElement('p');
1279
1280                    // Copy all attributes from h2 to p
1281                    [...h2_p.attributes].forEach(attr => {
1282                        p_p.setAttribute(attr.name, attr.value);
1283                    });
1284
1285                    // Copy inner HTML content
1286                    p_p.innerHTML = h2_p.innerHTML;
1287
1288                    // Replace h2 with p
1289                    h2_p.parentNode.replaceChild(p_p, h2_p);
1290                });
1291            }, 2000);
1292        }
1293        if (window.attachEvent)
1294            window.attachEvent('onload', async_load);
1295        else
1296            window.addEventListener('load', async_load, false);
1297    })();
1298    </script>
1298</div></div></div></div></div></div></div>
1298<script src="https://static.spotapps.co/web/theloopwestend--com/lib/jquery/jquery.min.js"></script>
1298<script src="https://static.spotapps.co/web/theloopwestend--com/lib/bootstrap/js/bootstrap.min.js"></script>
1298<script src="https://static.spotapps.co/web/theloopwestend--com/lib/owlcarousel/owl.carousel.min.js"></script>
1298<script src="https://static.spotapps.co/web/theloopwestend--com/lib/masonry/masonry.pkgd.min.js"></script>
1298<script src="https://static.spotapps.co/web/theloopwestend--com/lib/uikit/js/uikit.min.js" type="text/javascript"></script>
1298<script src="https://static.spotapps.co/web/theloopwestend--com/lib/uikit/js/slideshow.min.js" type="text/javascript"></script>
1298<script src="https://static.spotapps.co/web/theloopwestend--com/lib/uikit/js/slideshow-fx.min.js"></script>
1298<script src="https://static.spotapps.co/web/theloopwestend--com/lib/imagesloaded/imagesloaded.pkgd.min.js"></script>
1298<script src="https://static.spotapps.co/iframeResizer.js" type="text/javascript"></script>
1298<script src="//static.spotapps.co/web-lib/leaflet/[email protected]/dist/leaflet.js"></script>
1298<script src="//static.spotapps.co/web-lib/leaflet/leaflet-providers.js"></script>
1298<script src="//static.spotapps.co/web-lib/leaflet/[email protected]/dist/leaflet-gesture-handling.min.js"></script>
1298<script src="https://static.spotapps.co/web/theloopwestend--com/lib/fancybox/source/jquery.fancybox.js" type="text/javascript"></script>
1298<script src="https://static.spotapps.co/web/theloopwestend--com/lib/fancybox/source/jquery.fancybox.pack.js" type="text/javascript"></script>
1298<script src="https://static.spotapps.co/web/theloopwestend--com/lib/fancybox/source/helpers/jquery.fancybox-thumbs.js?v=1.0.7" type="text/javascript"></script>
1298<script src="https://static.spotapps.co/web/theloopwestend--com/lib/fancybox/source/helpers/jquery.fancybox-media.js?v=1.0.6" type="text/javascript"></script>
1298<script type="text/javascript">
1299
1300
1301
1302	$("#bottom_link_4").on("click", function(){
1303		if (ga_check())
1304			universal_ga('send', 'event', 'Button', 'Click', 'Order Online');
1305	});
1306	$("#bottom_link_3").on("click", function(){
1307		if (ga_check())
1308			universal_ga('send', 'event', 'Button', 'Click', 'Reserve');
1309	});
1310	$("#bottom_link_5").on("click", function(){
1311		if (ga_check())
1312			universal_ga('send', 'event', 'Button', 'Click', 'Private Party');
1313	});
1314  $('.header-logo-a, .header-logo.header-logo-mobile, .nav-v2-home-btn').click(function(event) {
1315    if ( window.location.pathname == '/' || window.location.pathname == '/index.php') {
1316      event.preventDefault();
1317      var windowScrollTop = $(window).scrollTop();
1318      if(windowScrollTop > 150) {
1319        $('html, body').animate({scrollTop: 0}, 750);
1320      }
1321    }
1322  });
1323
1324$(".banner-section a.banner-pin").click(function(e) {
1325    // target element id
1326    var id = $(this).attr('href');
1327
1328    // target element
1329    var section = $(id);
1330    if (section.length === 0) {
1331        return;
1332    }
1333
1334    // prevent standard hash navigation (avoid blinking in IE)
1335    e.preventDefault();
1336
1337    // top position relative to the document
1338    var pos = section.offset().top - 100 + 10;
1339
1340    // animated top scrolling
1341    $('body, html').animate({scrollTop: pos}, 750);
1342});
1343
1344$(document).ready(function() {
1345  var navHeight = $('nav.navbar').height();
1346  $('html').css("scroll-padding-top", navHeight);
1347});
1348
1349$(document).on('scroll', function (e) {
1350    if($(document).scrollTop() > 0) {
1351      $('.navbar.nav-v7').addClass('nav-scroll');
1352    }else {
1353      $('.navbar.nav-v7').removeClass('nav-scroll');
1354    }
1355});
1356
1357$(function() {
1358  setDropDownMenuWidth();
1359
1360  function setDropDownMenuWidth() {
1361    var tabs_list = $('.navbar-tabs .navbar-nav');
1362
1363    $(tabs_list).find('li.drop-down-link').each(function() {
1364      var sub_menu_width = $(this).outerWidth(true);
1365      if (sub_menu_width < 100) {
1366        sub_menu_width = 100;
1367      }
1368      $(this).find('.sub-menu').css('width', sub_menu_width+'px');
1369    });
1370  }
1371
1372  $( window ).resize(function() {
1373    setDropDownMenuWidth();
1374  });
1375
1376  $('.nav a:not(.drop-down)').on('click', function () {
1377    $('.navbar-collapse').collapse('hide');
1378  });
1379
1380});
1381
1382
1383
1384$( '.drop-down-link .drop-down' ).click(function(event) {
1385  event.preventDefault();
1386  event.stopPropagation();
1387
1388  // Close previously opened dropdown menus
1389  $('.drop-down-link.active .sub-menu').slideUp();
1390  $('.drop-down-link.active').find('.drop-down').attr('aria-expanded', false);
1391  $('.drop-down-link.active').removeClass('active');
1392
1393  var drop_down = $(this).closest('.drop-down-link');
1394  var drop_down_a = $(this);
1395
1396  if($(drop_down_a).attr("aria-expanded") == "true") { 
1397    $(drop_down_a).attr("aria-expanded",false)
1398  } else { 
1399    $(drop_down_a).attr("aria-expanded",true)
1400  }
1401  
1402  var sub_menu = $(this).closest('.drop-down-link').find( '.sub-menu' );
1403
1404  if ( $(sub_menu).is( ':hidden' ) ) {
1405    $(sub_menu).slideDown();
1406    $(drop_down).addClass('active');
1407  } else {
1408    $(sub_menu).slideUp();
1409    $(drop_down).removeClass('active');
1410  }
1411});
1412
1413$(".nav-v7 .navbar-contact .nav-address a").click(function(e) {
1414
1415  if ( window.location.pathname == '/' || window.location.pathname == '/index.php') {
1416    // target element id
1417    var id = $(this).attr('href').substr(1);
1418
1419    // target element
1420    var section = $(id);
1421    if (section.length === 0) {
1422        return;
1423    }
1424
1425    // prevent standard hash navigation (avoid blinking in IE)
1426    e.preventDefault();
1427
1428    // top position relative to the document
1429    var pos = section.offset().top - 100 + 10;
1430
1431    // animated top scrolling
1432    $('body, html').animate({scrollTop: pos}, 750);
1433
1434  }
1435});
1436
1437const mobileDrop = document.querySelector('.mobile-full-height #navbar-collapse-1 .navbar-nav');
1438const mobileDropButton = document.querySelector('.mobile-full-height .navbar-toggle');
1439const mobileHeader = document.querySelector('.mobile-full-height .navbar-header');
1440
1441mobileDropButton?.addEventListener('click', () => {
1442  mobileHeaderBottomPos = mobileHeader.getBoundingClientRect().bottom;
1443  mobileDrop.style.paddingTop = mobileHeaderBottomPos + 'px';
1444});
1445
1446(function () {
1447  const isSafari = (() => {
1448    const ua = navigator.userAgent;
1449    return ua.includes('Safari') && // Safari must be present
1450            !ua.includes('Chrome') && // Exclude Chrome (has 'Safari' in UA)
1451            !ua.includes('Edg'); // Exclude Edge
1452  })();
1453
1454  if (!isSafari) return;
1455  const menu = document.getElementById('navbar-collapse-1');
1456
1457  // When coming back from a _blank tab or bfcache restore, force a repaint.
1458  function nudgeRepaint() {
1459    if (!menu || !menu.classList.contains('in')) return;
1460    // toggle display to flush rendering, then poke will-change for one frame
1461    const prev = menu.style.display;
1462    menu.style.display = 'none';
1463    // force reflow
1464    void menu.offsetHeight;
1465    menu.style.display = prev || '';
1466    menu.style.willChange = 'opacity';
1467    requestAnimationFrame(() => { menu.style.willChange = 'auto'; });
1468  }
1469
1470  document.addEventListener('visibilitychange', () => {
1471    if (document.visibilityState === 'visible') nudgeRepaint();
1472  });
1473
1474  // iOS/macOS Safari often restores pages from bfcache
1475  window.addEventListener('pageshow', (e) => {
1476    if (e.persisted) nudgeRepaint();
1477    else nudgeRepaint();
1478  }, { passive: true });
1479
1480  // Keep menu open when clicking links that open in a new tab
1481  menu?.addEventListener('click', (e) => {
1482    const a = e.target.closest('a');
1483    if (!a) return;
1484    if (a.target === '_blank') {
1485      // avoid any delegated "close on link click" handlers firing first
1486      e.stopPropagation();
1487      // allow navigation; after we return, repaint nudge will run
1488    }
1489  }, true);
1490})();
1491
1492document.querySelectorAll('.navbar .navbar-nav > li.cta-nav-tab').forEach((li) => {
1493  li.addEventListener('click', (e) => {
1494    if (e.defaultPrevented) return;
1495    
1496    if (e.target.closest('a')) return;
1497
1498    const link = li.querySelector('a[href]');
1499    if (!link) return;
1500
1501    if (e.metaKey || e.ctrlKey || e.shiftKey || e.button === 1 || link.target === '_blank') {
1502      window.open(link.href, link.target || '_blank');
1503      return;
1504    }
1505
1506    link.click();
1507  });
1508
1509  li.addEventListener('keydown', (e) => {
1510    if ((e.key === 'Enter' || e.key === ' ') && !e.target.closest('a')) {
1511      const link = li.querySelector('a[href]');
1512      if (!link) return;
1513      e.preventDefault();
1514      link.click();
1515    }
1516  });
1517});
1518
1519  $(document).ready(function() {
1520    var video = $("#coverVideo")[0];
1521
1522    // Cover video Play/pause
1523    $(".video-controls-btn").click(function () {
1524      if (video.paused) {
1525        video.play();
1526        $(".video-controls-btn").focus();
1527        $(".video-controls-btn i.fa-play").hide();
1528        $(".video-controls-btn i.fa-pause").show();
1529        $(".video-controls-btn").attr("aria-label", "The decorative video is currently playing, pause the video");
1530        $(".video-controls-btn .off-screen").text("The decorative video is currently playing");
1531      } else {
1532        video.pause();
1533        $(".video-controls-btn").focus();
1534        $(".video-controls-btn i.fa-play").show();
1535        $(".video-controls-btn i.fa-pause").hide();
1536        $(".video-controls-btn").attr("aria-label", "The decorative video is currently paused, play the video");
1537        $(".video-controls-btn .off-screen").text("The decorative video is currently paused");
1538      }
1539    });
1540    // Cover video sound on/off
1541    if (video.muted) {
1542        $(".video-volume-btn").addClass('off');
1543    }
1544
1545    $(".video-volume-btn").click(function () {
1546      if (video.muted) {
1547        video.muted = false;
1548        $(".video-volume-btn").removeClass('off');
1549        $(".video-volume-btn").addClass('on');
1550        $(".video-volume-btn").attr("aria-label", "The decorative video sound is on, turn it off");
1551        $(".video-volume-btn .off-screen").text("The decorative video sound is on");
1552      } else {
1553        video.muted = true;
1554        $(".video-volume-btn").removeClass('on');
1555        $(".video-volume-btn").addClass('off');
1556        $(".video-volume-btn").attr("aria-label", "The decorative video sound is off, turn it on");
1557        $(".video-volume-btn .off-screen").text("The decorative video sound is off");
1558      }
1559    });
1560  });
1561  $(document).ready(function() {
1562    
1563    var slideshow = $('[data-uk-slideshow]').data('slideshow');
1564
1565    //play or pause slideshow functions
1566    $('.slideshow-v2-wrapper .slideshow-controls-btn').click(function () {
1567      if($(this).hasClass('playing')){
1568        slideshow.stop();
1569        $(this).removeClass('playing');
1570        $(this).addClass('paused');
1571        $(this).attr( "aria-label", "The slideshow is currently paused, play the slideshow");
1572      }else {
1573        slideshow.start();
1574        $(this).removeClass('paused');
1575        $(this).addClass('playing');
1576        $(this).attr( "aria-label", "The slideshow is currently playing, pause the slideshow");
1577      }
1578    });
1579
1580    $('.slideshow-v2-wrapper .uk-dotnav a, .slideshow-v2-wrapper a.uk-slidenav').click(function () {
1581      $('.slideshow-v2-wrapper .slideshow-controls-btn').removeClass('playing');
1582      $('.slideshow-v2-wrapper .slideshow-controls-btn').addClass('paused');
1583      $('.slideshow-v2-wrapper .slideshow-controls-btn').attr( "aria-label", "The slideshow is currently paused, play the slideshow");
1584    });
1585
1586    (function( func ) {
1587      $.fn.addClass = function() { // replace the existing function on $.fn
1588          func.apply( this, arguments ); // invoke the original function
1589          this.trigger('classChanged'); // trigger the custom event
1590          return this; // retain jQuery chainability
1591      }
1592    })($.fn.addClass); // pass the original function as an argument
1593    
1594    (function( func ) {
1595        $.fn.removeClass = function() {
1596            func.apply( this, arguments );
1597            this.trigger('classChanged');
1598            return this;
1599        }
1600    })($.fn.removeClass);
1601    $('.uk-slideshow li').each(function(index) {
1602      $(this).find('.custom-temp-btn').attr("tabindex", -1);
1603      $(this).on('classChanged', function(){
1604        if($(this).hasClass('uk-active')){
1605          $(this).find('.custom-temp-btn').attr("tabindex", 0);
1606          $(slideDot[index]).attr('aria-current', 'true');
1607        } else {
1608          $(this).find('.custom-temp-btn').attr("tabindex", -1);
1609          $(slideDot[index]).attr('aria-current', 'false');
1610        }
1611      });
1612    });
1613
1614    var slideDot = $('.slideshow-v2-wrapper .uk-dotnav li a');
1615
1616    slideDot.attr('aria-current', 'false');
1617    $(slideDot[0]).attr('aria-current', 'true');
1618
1619  });
1620
1621$(document).ready(function() {
1622
1623  if (navigator.userAgent.indexOf('Safari') != -1 && navigator.userAgent.indexOf('Mac') != -1 && navigator.userAgent.indexOf('Chrome') == -1 && $(window).width() > 767) {
1624
1625    // Turn Off animations on Safari browser for Mac desktop
1626    $('html').addClass('safari-mac');
1627
1628  }
1629  else {
1630
1631    var animation_item_elements = $('.about-us-v8-item');
1632    var window_var = $(window);
1633
1634    function check_if_item_in_view() {
1635    var window_var_height = window_var.height();
1636    var window_var_top_position = window_var.scrollTop();
1637    var window_var_bottom_position = (window_var_top_position + window_var_height/2 + 100);
1638
1639    $.each(animation_item_elements, function() {
1640      var element_var = $(this);
1641      var element_var_height = element_var.outerHeight();
1642      var element_var_top_position = element_var.offset().top;
1643      var element_var_bottom_position = (element_var_top_position + element_var_height/2 + 100);
1644
1645      //check to see if this current container is within viewport
1646      if ((element_var_bottom_position >= window_var_top_position) &&
1647          (element_var_top_position <= window_var_bottom_position)) {
1648        element_var.addClass('animate');
1649      } else {
1650        // element_var.removeClass('in-view');
1651      }
1652    });
1653    }
1654
1655    window_var.on('scroll resize', check_if_item_in_view);
1656    window_var.trigger('scroll');
1657
1658  }
1659
1660
1661});
1662  $(document).ready(function() {
1663
1664    if ( $(window).width() < 768 ) {
1665
1666      var home_sections = $('article');
1667      var home_section_id;
1668      var about_v8_section_position;
1669
1670      for (var i = 0; i < home_sections.length; i++) {
1671        home_section_id = $(home_sections[i]).find(".section-wrapper").attr("id");
1672        if (home_section_id == "aboutus_v8") {
1673          about_v8_section_position = i;
1674        }
1675      }
1676
1677      if ( (about_v8_section_position == 0) || (about_v8_section_position == 1) ) {
1678        // Turn Off animations
1679        $('html').addClass('safari-mac');
1680      }
1681    }
1682
1683  });
1684  // init Masonry
1685   var gridGallery = $('#gallery_v4 .gallery-v4-grid').masonry({
1686     columnWidth: '.gallery-v4-grid-sizer',
1687     // do not use .grid-sizer in layout
1688     itemSelector: '.gallery-v4-grid-item',
1689     percentPosition: true,
1690     fitWidth: true
1691   });
1692
1693    gridGallery.imagesLoaded(function() {
1694      gridGallery.masonry('layout');
1695    });
1696
1697    // layout Masonry after each image loads
1698    gridGallery.imagesLoaded().progress( function() {
1699      gridGallery.masonry('layout');
1700    });
1701
1702  // Re-set gallery layout
1703    $(window).on('load', function() {
1704      // trigger Masonry layout
1705      gridGallery.masonry('layout');
1706    });
1707    function discontinuousGG(func){
1708      var timer;
1709      return function(event){
1710        if(timer) clearTimeout(timer);
1711        timer = setTimeout(func,200,event);
1712      };
1713    }
1714    $(window).on("resize", discontinuousGG(function() {
1715      setTimeout(() => gridGallery.masonry('layout'), 300);
1716    }));
1717
1718  $(document).ready(function() {
1719
1720    var fancyboxSlider = $('#gallery_v4 .fancybox');
1721
1722    fancyboxSlider.attr('rel', 'gallery').fancybox({
1723      beforeShow : function() {
1724      var alt = this.element.find('img').attr('alt');
1725      this.inner.find('img').attr('alt', alt);
1726      },
1727      padding : 15,
1728      margin: 20,
1729      arrows    : true,
1730      closeBtn: true,
1731      autoPlay : false,
1732      playSpeed : 3000,
1733      loop : true,
1734      openEffect :  'fade',
1735      closeEffect :  'fade',
1736      nextEffect  : 'elastic',
1737      prevEffect  : 'elastic',
1738      helpers : {
1739        overlay : {
1740          css : {
1741              'background' : 'rgba(0, 0, 0, 0.5)'
1742          },
1743          locked: false
1744        }
1745      }
1746    });
1747
1748    var galleryToggleBtn = $('.gallery-v4-wrapper .gallery-toggle');
1749    var galleryImages = $('.gallery-v4-grid-item a');
1750    var galleryToggleTextOff = 'The Photo Gallery of ' + galleryImages.length + ' images can be accessed, hide the Photo Gallery from the Screen Reader';
1751    var galleryToggleTextOn = 'The Photo Gallery of ' + galleryImages.length + ' images is hidden from the Screen Reader, access the Photo Gallery';
1752    galleryToggleBtn.attr('aria-label', galleryToggleTextOff);
1753
1754    galleryToggleBtn.on('click',function(){
1755      $(this).toggleClass('gt-off');
1756
1757      const parentElement = $(this).closest('article');
1758      const nextElement = $(parentElement).next();
1759
1760      if ($(this).hasClass('gt-off')) {
1761        $(this).attr('aria-label', galleryToggleTextOff);
1762        $(this).text('Skip Photo Gallery');
1763        galleryImages.each(function() {
1764          $(this).attr('aria-hidden', 'false').attr('tabindex', '0');
1765        });
1766      } else {
1767        $(this).attr('aria-label', galleryToggleTextOn);
1768        $(this).text('Access Photo Gallery');
1769        galleryImages.each(function() {
1770          $(this).attr('aria-hidden', 'true').attr('tabindex', '-1');
1771        });
1772
1773        if (nextElement.length !== 0) {
1774          const scrollTo = $(nextElement).offset().top - 100;
1775          $('html, body').animate({ scrollTop: scrollTo }, 1000);
1776        }
1777      }
1778    });
1779
1780  });
1781    $(document).ready(function() {
1782
1783      var owlReviews = $('#reviews_v2 .owl-carousel');
1784      owlReviews.owlCarousel({
1785        onInitialized: function (property) {
1786          //check if show dots is true in config
1787          if(true){
1788            $('.reviews-v2-wrapper .owl-dot').each(function( index ) {
1789              var i = index + 1;
1790              $(this).html('<button aria-label="Review '+i+'"><span class="visuallyhidden">Review '+i+'</span></button>');
1791            });
1792          }
1793          //check if show arrows is true in config
1794          if(true && !true){
1795            reviewsHandleArrowTabbing(owlReviews);
1796          }
1797          //prevent voiceover from reading hidden content
1798          $('.reviews-v2-wrapper').find('.owl-item').attr('aria-hidden','true');
1799          $(property.target).find(".owl-item").eq(property.item.index).attr('aria-hidden','false');
1800        },
1801        margin: 0,
1802        nav: true,
1803        dots: true,
1804        dotsContainer: '#reviews_v2 .owl-dots',
1805        autoplay: true,
1806        autoplayTimeout: 6000,
1807        autoplayHoverPause: false,
1808        loop: true,
1809        navText: [ '<button aria-label="previous review">&#8249</button>', '<button aria-label="next review">&#8250</button>' ],
1810        responsive: {
1811          0: {
1812            items: 1
1813          },
1814          600: {
1815            items: 1
1816          },
1817          1000: {
1818            items: 1
1819          }
1820        }
1821      });
1822
1823      function discontinuousReviews(func){
1824        var timer;
1825        return function(event){
1826          if(timer) clearTimeout(timer);
1827          timer = setTimeout(func,200,event);
1828        };
1829      }
1830
1831      $('#reviews_v2 .owl-dot button').attr('aria-current', 'false');
1832      $('#reviews_v2 .owl-dot:first button').attr('aria-current', 'true');
1833
1834      function reviewsCarouselStop() {
1835        owlReviews.trigger('stop.owl.autoplay');
1836        owlReviews.data('owl.carousel').settings.autoplay = false;
1837        $('#reviews_v2 .carousel-control-btn').removeClass('stop-carousel');
1838        $('#reviews_v2 .carousel-control-btn').addClass('play-carousel');
1839        $('#reviews_v2 .carousel-control-btn').attr('aria-label', 'The Reviews carousel is currently paused, play the Reviews carousel');
1840      }
1841
1842      function reviewsCarouselPlay() {
1843        owlReviews.trigger('play.owl.autoplay',[1000]);
1844        owlReviews.data('owl.carousel').settings.autoplay = true;
1845        $('#reviews_v2 .carousel-control-btn').removeClass('play-carousel');
1846        $('#reviews_v2 .carousel-control-btn').addClass('stop-carousel');
1847        $('#reviews_v2 .carousel-control-btn').attr('aria-label', 'The Reviews carousel is currently playing, pause the Reviews carousel');
1848      }
1849
1850      $('#reviews_v2 .carousel-control-btn').on('click',function(){
1851        if ($(this).hasClass('stop-carousel')) {
1852          reviewsCarouselStop();
1853        } else if ($(this).hasClass('play-carousel')) {
1854          reviewsCarouselPlay();
1855        }
1856      });
1857
1858      $('#reviews_v2 .owl-dot').click(function () {
1859        owlReviews.trigger('to.owl.carousel', [$(this).index(), 300]);
1860        reviewsCarouselStop();
1861      });
1862
1863      $('#reviews_v2 .owl-nav').click(function () {
1864        reviewsCarouselStop();
1865      });
1866
1867      $(window).on("resize", discontinuousReviews(function() {
1868        if ($('#reviews_v2 .carousel-control-btn').hasClass('play-carousel')) {
1869          setTimeout(() => reviewsCarouselStop(), 500);
1870        }
1871      }));
1872
1873      $(window).on('focus', function() {
1874        if ($('#reviews_v2 .carousel-control-btn').hasClass('stop-carousel')) {
1875          owlReviews.trigger('next.owl.carousel');
1876        }
1877      });
1878
1879      //prevent voiceover from reading hidden content
1880      owlReviews.on('changed.owl.carousel',function(property){
1881        $('.reviews-v2-wrapper').find('.owl-item').attr('aria-hidden','true');
1882        $(property.target).find(".owl-item").eq(property.item.index).attr('aria-hidden','false');
1883        $(property.target).find(".owl-dot").find('button').attr('aria-current', 'false');
1884        $(property.target).find(".owl-dot").filter('.active').find('button').attr('aria-current', 'true');
1885      });
1886
1887      //check if show arrows is true in config
1888      if(true && !true){
1889        reviewsHandleArrowTabbing(owlReviews);
1890      }
1891
1892      function reviewsHandleArrowTabbing(widget){
1893        widget.on('changed.owl.carousel',function(property){
1894          //handle tabbing when previous slider button is hidden
1895          if($(property.target).find(".owl-prev").hasClass('disabled')){
1896              $(property.target).find(".owl-prev").children().attr('tabindex', -1);
1897              $(property.target).find(".owl-prev").attr('aria-hidden','true');
1898          }
1899          else {
1900              $(property.target).find(".owl-prev").children().attr('tabindex', 0);
1901              $(property.target).find(".owl-prev").attr('aria-hidden','false');
1902          }
1903          //handle tabbing when next slider button is hidden
1904          if($(property.target).find(".owl-next").hasClass('disabled')){
1905              $(property.target).find(".owl-next").children().attr('tabindex', -1);
1906              $(property.target).find(".owl-next").attr('aria-hidden','true');
1907          }
1908          else {
1909              $(property.target).find(".owl-next").children().attr('tabindex', 0);
1910              $(property.target).find(".owl-next").attr('aria-hidden','false');
1911          }
1912        });
1913      }
1914
1915      $('.reviews-v2-wrapper .owl-nav').insertBefore($('.reviews-v2-wrapper .owl-stage-outer'));
1916      $('.reviews-v2-wrapper .owl-dots').insertBefore($('.reviews-v2-wrapper .owl-nav'));
1917
1918    });iFrameResize({
1919  enablePublicMethods: true,
1920  enableInPageLinks: true
1921});
1922
1923var marker_icon = "";
1924var additionalPins = '';
1925if (additionalPins) {
1926  var locationsArray = JSON.parse('');
1927}
1928
1929var google_map_url = 'https://www.google.com/maps/place/' + ",5331 West 16th Street,St Louis Park,MN,55416".split(' ').join('+');
1930function open_google_map() {
1931  window.open(google_map_url, '_blank')
1932}
1933
1934function discontinuous(func){
1935  var timer;
1936  return function(event){
1937    if(timer) clearTimeout(timer);
1938    timer = setTimeout(func,200,event);
1939  };
1940}
1941
1942function init_open_street_map() {
1943  if (additionalPins) {
1944    var map = L.map('map-v3-container', {
1945      minZoom: 3,
1946      zoomControl: false,
1947      zoomSnap: 1,
1948      gestureHandling: true
1949    });
1950    
1951    var allMarkers = [];
1952    
1953    var marker = L.marker([44.9677932, -93.3472604], {title: '5331 West 16th Street, St Louis Park', alt: 'View 5331 West 16th Street, St Louis Park on Google maps, opens in a new tab'}).addTo(map);
1954    allMarkers.push(marker);
1955
1956    marker.on('click keypress', open_google_map);
1957
1958    locationsArray.forEach(function(element, index) {
1959      var additionalMarker = L.marker([element.lat_coords, element.lng_coords], {title: element.pin_title, alt: 'View ' + element.pin_title + ' on Google maps, opens in a new tab'}).addTo(map);
1960  
1961      additionalMarker.on('click keypress', function() {
1962        window.open(element.pin_link, '_blank');
1963      });
1964  
1965      allMarkers.push(additionalMarker);
1966  
1967    });
1968    
1969    function fitBoundsToMarkers(osmap, markers) {
1970      osmap.invalidateSize();
1971      var group = new L.featureGroup(markers);
1972      osmap.fitBounds(group.getBounds(), {padding: [50, 50]});
1973    }
1974  
1975    fitBoundsToMarkers(map, allMarkers);
1976  
1977    document.querySelector('.reset-zoom-btn').addEventListener('click', function () {
1978      fitBoundsToMarkers(map, allMarkers);
1979    });
1980
1981    window.addEventListener("resize", discontinuous(function(e) {
1982      fitBoundsToMarkers(map, allMarkers);
1983    }));
1984  } else {
1985    var map = L.map('map-v3-container', {
1986      center: [ 44.9677932, -93.3472604],
1987      zoom: 16,
1988      dragging: false,
1989      minZoom: 3,
1990      zoomControl: false,
1991    });
1992
1993    var marker = L.marker([44.9677932, -93.3472604], {title: '5331 West 16th Street, St Louis Park', alt: 'View 5331 West 16th Street, St Louis Park on Google maps, opens in a new tab'}).addTo(map);
1994
1995    marker.on('click keypress', open_google_map);
1996
1997    map.scrollWheelZoom.disable();
1998  }
1999
2000  if (marker_icon.length>0){
2001    var myIcon = L.icon({
2002      iconUrl: marker_icon,
2003      iconSize: [35,35]
2004    });
2005
2006    if(allMarkers) {
2007      allMarkers.forEach(marker => {
2008        marker.setIcon(myIcon);
2009        marker.update();
2010      });
2011    } else {
2012      marker.setIcon(myIcon);
2013      marker.update();
2014    }
2015  }
2016
2017  L.tileLayer.provider('OpenStreetMap.Mapnik').addTo(map);
2018  L.control.zoom({
2019    position:'bottomleft'
2020  }).addTo(map);
2021
2022  $('.openstreetmap-v3-wrapper #map-v3-container').removeAttr('tabindex');
2023  $('.leaflet-container .leaflet-marker-pane img').attr('role', 'link');
2024
2025  $('.leaflet-container .leaflet-marker-pane img').each(function(index) {
2026      var imageTitle = $(this).attr('title');
2027      var uniqueId = 'map_pin_' + index;
2028      $(this).attr('id', uniqueId);
2029      $('.banner-section .banner-pin').each(function() {
2030          var pin = $(this);
2031          var parentText = pin.parent().text();
2032          if (parentText.includes(imageTitle)) {
2033              pin.attr('href', '#' + uniqueId);
2034          }
2035      });
2036  });
2037  $('.banner-pin').on('click', function(e) {
2038      e.preventDefault();
2039      var href = $(this).attr('href');
2040      $(href).focus();
2041  });
2042}
2043
2044$(document).ready(function() {
2045  init_open_street_map();
2046});
2047$("#contact_us_v3_section_phone_link").on("click", function(){
2048    if (ga_check())
2049        universal_ga('send', 'event', 'Button', 'Click', 'Phone');
2050});
2051    setTimeout(function(){
2052        $('.navbar-fixed-bottom.nav-v1').addClass('show-bottom-nav'); triggerShowFooterEvents();
2053    }, 4000);
2054
2055    var navigation_alpha_starts_from = 0;
2056    var navigation_background_color = "rgba(0, 0, 0,";
2057    var navigation_darkens_on_scroll = "1";
2058    var top_nav_new_style = !navigation_darkens_on_scroll && ($(window).width() > 767);
2059    var custom_nav_style = "1";
2060    if(!custom_nav_style){
2061      $('.navbar-regular').css('background-color', 'rgba(255, 255, 255,' + navigation_alpha_starts_from + ')');
2062      $('.navbar-inverse').css('background-color', navigation_background_color + (top_nav_new_style ? 0 : navigation_alpha_starts_from) + ')');
2063    }
2064
2065    if (navigation_darkens_on_scroll && !custom_nav_style) {
2066        $(document).on('scroll', function (e) {
2067            var alpha = navigation_alpha_starts_from + $(document).scrollTop() / 1950;
2068            $('.navbar-inverse').css('background-color', navigation_background_color + alpha + ')');
2069            $('.navbar-regular').css('background-color', 'rgba(255, 255, 255,' + alpha + ')');
2070        });
2071    }
2072
2073    if (!navigation_darkens_on_scroll && !custom_nav_style) {
2074        $(window).resize(function() {
2075            if ($(window).width() > 767)
2076                $('.navbar-inverse').css('background-color', navigation_background_color + 0 + ')');
2077            else
2078                $('.navbar-inverse').css('background-color', navigation_background_color + navigation_alpha_starts_from + ')');
2079        });
2080    }
2081
2082    $(document).on('shown.bs.modal', '.modal', function () {
2083      $(this).attr('aria-hidden', 'false');
2084    });
2085    $(document).on('hidden.bs.modal', '.modal', function () {
2086      $(this).attr('aria-hidden', 'true');
2087    });
2088
2089</script>
2089<script type="text/javascript">
2090    function openPopUp() {
2091
2092      document.touchmove = function (e) {
2093        e.preventDefault();
2094      };
2095      $(function () {
2096        $('body').css('overflow', 'hidden');
2097
2098        $('#CustomModal').modal({
2099          show: true
2100        });
2101        
2102        $(document).on('shown.bs.modal', '.modal', function () {
2103          //handle reader focus
2104          focusModal();
2105        });
2106        $(document).on("hidden.bs.modal", ".modal", function (event, ui) {
2107          //handle reader focus
2108          focusNavbar();
2109          $('body').css('overflow', '');
2110          document.touchmove = function () {};
2111        });
2112      });
2113    }
2114
2115    function focusModal() {
2116      $('.modal-dialog')
2117        .css('outline', 'none')
2118        .attr('tabindex', '-1')
2119        .focus();
2120    }
2121
2122    function focusNavbar(){
2123      //handle which header exists
2124      if($(".navbar")){
2125        var element = $(".navbar");
2126      }else{
2127        var element = $(".navbar-normal");
2128      }
2129      element.css('outline', 'none')
2130              .attr('tabindex', '-1')
2131              .focus();
2132    }
2133
2134    var showPopupPerSession = false;
2135    // Check if popup is set to show once per session
2136    if (!showPopupPerSession || (showPopupPerSession && !sessionStorage.getItem("newsletter_popup_shown"))) {
2137      var t = setTimeout(openPopUp, 10000);
2138      sessionStorage.setItem("newsletter_popup_shown", "yes");
2139    }
2140
2141  </script>
2141<script>
2142    var animate_sections = ["aboutus_v2","gallery_v3","aboutus_v7"];
2143
2144    for (var i = 0; i < animate_sections.length; i++) {
2145      $('#'+animate_sections[i]).addClass('animation-element');
2146    }
2147
2148    var $animation_elements = $('.animation-element');
2149    var $window = $(window);
2150
2151    function check_if_in_view() {
2152    var window_height = $window.height();
2153    var window_top_position = $window.scrollTop();
2154    var window_bottom_position = (window_top_position + window_height/2);
2155
2156    $.each($animation_elements, function() {
2157      var $element = $(this);
2158      var element_height = $element.outerHeight();
2159      var element_top_position = $element.offset().top;
2160      var element_bottom_position = (element_top_position + element_height/2);
2161
2162      //check to see if this current container is within viewport
2163      if ((element_bottom_position >= window_top_position) &&
2164          (element_top_position <= window_bottom_position)) {
2165        $element.addClass('animate');
2166      } else {
2167        // $element.removeClass('in-view');
2168      }
2169    });
2170    }
2171
2172    $window.on('scroll resize', check_if_in_view);
2173    $window.trigger('scroll');
2174  </script>
2174<script>
2175
2176function accessibilityAriaLabel() {
2177  $('#accessibility-footer .accessibility-link').attr('aria-label', 'Learn More About our website accessibility');
2178}
2179setTimeout(accessibilityAriaLabel, 500);
2180
2181function getDirectionsAriaLabel() {
2182  $('.get-directions-footer-link').attr('aria-label', 'Get directions to The Loop West End, you are leaving the website, opens in a new tab');
2183}
2184setTimeout(getDirectionsAriaLabel, 500);
2185
2186$(function () {
2187  //If Newsletter widget (popup or section) is on
2188  if ($('.newsletter-popup').length || $('.map-newsletter').length || $('.newsletter-section').length) {
2189    //Inject html needed for ADA
2190    var waitSPHWidget = setInterval(function(){
2191      if ($('.sph-email-input').length) {
2192        //
2193        $('.sph-loading-img img').attr('alt', 'Newsletter Loader icon');
2194        clearInterval(waitSPHWidget)
2195      }
2196    }, 300);
2197  }
2198
2199  var allSvgs = $('.top-svg-border svg, .bottom-svg-border svg');
2200  allSvgs.each(function(index){
2201    $(this).attr('role', 'img');
2202    $(this).attr('aria-hidden', 'true');
2203    $(this).attr('alt', 'Border ' + (index + 1));
2204  });
2205
2206  const intervalNewsletterAutocomplete = setInterval(() => {
2207    const newsletterFormDiv = $('.sph-email-subscription');
2208    if (newsletterFormDiv.length > 0) {
2209      newsletterFormDiv.find('input.sph-email-input[type=email]').attr('autocomplete', 'email');
2210      newsletterFormDiv.find('input.sph-email-input[type=tel]').attr('autocomplete', 'tel');
2211      clearInterval(intervalNewsletterAutocomplete);
2212    }
2213  }, 200)
2214
2215  const promotionPopupEditInterval = setInterval(() => {
2216    var promotionalPopup = $('.promotion-pop-up');
2217    if (promotionalPopup.length > 0) {
2218      clearInterval(promotionPopupEditInterval);
2219      // promotionalPopup.addClass('custom-styled');
2220      promotionalPopup.attr('aria-label', 'Promotional dialog');
2221      promotionalPopup.find('.close').attr('aria-label', 'close the promotional dialog');
2222    }
2223  }, 200);
2224
2225  setTimeout(() => {
2226    clearInterval(intervalNewsletterAutocomplete);
2227    clearInterval(promotionPopupEditInterval);
2228  }, 5000);
2229});
2230</script>
2230<script>
2231// Functions needed for Newsletter (sh widget) subscription submit (case when texting is Off in SH)
2232function isEmail(email) {
2233  var regex = /^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/;
2234  return regex.test(email);
2235}
2236function submitEmail(input_id) {
2237  var shp_email_to_subscribe = $("#sph-newsletter-input-" + input_id);
2238  if (!isEmail(shp_email_to_subscribe.val())) {
2239    alert('Please enter a valid email address (e.g. [email protected]).');
2240    setTimeout(function(){
2241      shp_email_to_subscribe.focus();
2242    }, 300);
2243    return;
2244  }
2245  var sph_email_form_div = $(".sph-email-form");
2246  var sph_loading_img = $(".sph-loading-img");
2247  var sph_response_message_div = $(".sph-response-message");
2248  var sph_submit_label = $(".sph-submit-label");
2249  sph_submit_label.hide();
2250  sph_loading_img.show();
2251  var request = $.ajax({
2252    method: "POST",
2253    url: "https://www.spothopperapp.com/api/spots/112064/contacts/add",
2254    crossDomain: true,
2255    dataType: 'json',
2256    data: { email: shp_email_to_subscribe.val() },
2257    success: function (data) {
2258      sph_response_message_div.html(data);
2259      sph_email_form_div.hide();
2260      sph_response_message_div.show();
2261      sph_response_message_div.attr( "tabindex", "-1" );
2262      sph_response_message_div.focus();
2263    },
2264    error: function (data) {
2265      sph_response_message_div.html("Something went wrong. Please try again later.");
2266      sph_email_form_div.hide();
2267      sph_response_message_div.show();
2268      sph_response_message_div.attr( "tabindex", "-1" );
2269      sph_response_message_div.focus();
2270    }
2271  });
2272}
2273
2274function checkForPopup() {
2275    const popup = document.getElementById('promotion-pop-up');
2276    if (popup) {
2277        popup.setAttribute('aria-label', 'Promotional dialog');
2278        clearInterval(interval);
2279    }
2280}
2281
2282function checkForClosePopup() {
2283    const closeButtons = document.querySelectorAll('#promotion-pop-up .modal-header button.close');
2284    
2285    if (closeButtons.length > 0) {
2286        setTimeout(() => {
2287            closeButtons.forEach((button) => {
2288                button.setAttribute('aria-label', 'Close the promotional dialog');
2289            });
2290
2291            clearInterval(interval_2);
2292        }, 1000);
2293    } 
2294}
2295
2296function checkForPolicyLinks() {
2297    const groups = document.querySelectorAll('.sh-form-group.is-inline');
2298    let updated = false;
2299
2300    groups.forEach(group => {
2301        const links = group.querySelectorAll('a');
2302        links.forEach(link => {
2303            const linkText = link.textContent.trim();
2304
2305            if (linkText === 'Privacy Policy') {
2306                link.setAttribute('aria-label', 'Privacy Policy, you are leaving the website, opens in a new tab');
2307                updated = true;
2308            }
2309
2310            if (linkText === 'Terms and Conditions') {
2311                link.setAttribute('aria-label', 'Terms and Conditions, you are leaving the website, opens in a new tab');
2312                updated = true;
2313            }
2314        });
2315    });
2316
2317    if (updated) {
2318        clearInterval(interval_3);
2319    }
2320}
2321
2322let interval = setInterval(checkForPopup, 500);
2323let interval_2 = setInterval(checkForClosePopup, 500);
2324let interval_3 = setInterval(checkForPolicyLinks, 500);
2325
2326setTimeout(() => {
2327    clearInterval(interval);
2328    clearInterval(interval_2);
2329    clearInterval(interval_3);
2330}, 15000);
2331
2332var formIframe = document.querySelector(".custom_html_2-section iframe");
2333    formIframe.setAttribute("scrolling","yes");
2334
2335(function ($) {
2336  if (!$.fancybox) return;
2337
2338  var lastFocused = null;
2339  var lastControl = null;
2340
2341  $(document).on('click', 'a.fancybox, [rel="fancybox"], [data-fancybox]', function () {
2342    lastFocused = this;
2343  });
2344
2345  $.extend(true, $.fancybox.defaults, {
2346
2347    beforeShow: function () {
2348      var $wrap = this.wrap;
2349      if (!$wrap || !$wrap.length) return;
2350
2351      $wrap.attr({
2352        tabindex: '-1',
2353        role: 'dialog',
2354        'aria-modal': 'true',
2355        'aria-label': 'Image gallery dialog'
2356      });
2357
2358      $('body > *').not('.fancybox-overlay').attr('aria-hidden', 'true');
2359    },
2360
2361    afterShow: function () {
2362      var self = this;
2363      var $wrap = self.wrap;
2364      if (!$wrap || !$wrap.length) return;
2365
2366      $wrap.find('a, button, input, select, textarea, [tabindex]')
2367        .attr('tabindex', '-1');
2368
2369      var $controls = $wrap.find('.fancybox-prev, .fancybox-next, .fancybox-close');
2370
2371      $controls.attr({
2372        tabindex: '0',
2373        role: 'button'
2374      });
2375
2376      $wrap.find('.fancybox-prev')
2377        .attr('aria-label', 'View previous image');
2378
2379      $wrap.find('.fancybox-next')
2380        .attr('aria-label', 'View next image');
2381
2382      $wrap.find('.fancybox-close')
2383        .attr('aria-label', 'Close image gallery dialog');
2384
2385      setTimeout(function () {
2386
2387        $controls.removeAttr('title');
2388
2389        if (lastControl === 'prev') {
2390          $wrap.find('.fancybox-prev').focus();
2391        } else if (lastControl === 'next') {
2392          $wrap.find('.fancybox-next').focus();
2393        } else {
2394          $wrap.focus();
2395        }
2396
2397        lastControl = null;
2398
2399      }, 10);
2400    },
2401
2402    afterClose: function () {
2403      $('body > *').removeAttr('aria-hidden');
2404
2405      if (lastFocused) {
2406        $(lastFocused).focus();
2407        lastFocused = null;
2408      }
2409    }
2410  });
2411
2412  $(document).on('keydown.fancyboxAccessibility', function (e) {
2413    var $wrap = $('.fancybox-wrap:visible');
2414    if (!$wrap.length) return;
2415
2416    var key = e.keyCode;
2417    var $active = $(document.activeElement);
2418
2419    if (key === 13 || key === 32) {
2420
2421      if ($active.hasClass('fancybox-prev')) {
2422        e.preventDefault();
2423        e.stopImmediatePropagation();
2424        lastControl = 'prev';
2425        $.fancybox.prev();
2426      }
2427
2428      if ($active.hasClass('fancybox-next')) {
2429        e.preventDefault();
2430        e.stopImmediatePropagation();
2431        lastControl = 'next';
2432        $.fancybox.next();
2433      }
2434
2435      if ($active.hasClass('fancybox-close')) {
2436        e.preventDefault();
2437        e.stopImmediatePropagation();
2438        $.fancybox.close();
2439      }
2440    }
2441
2442    if (key === 9) {
2443      var $focusable = $wrap.find('[tabindex="0"]').filter(':visible');
2444      if (!$focusable.length) return;
2445
2446      var first = $focusable[0];
2447      var last = $focusable[$focusable.length - 1];
2448
2449      if (e.shiftKey && document.activeElement === first) {
2450        e.preventDefault();
2451        last.focus();
2452      } else if (!e.shiftKey && document.activeElement === last) {
2453        e.preventDefault();
2454        first.focus();
2455      }
2456    }
2457  });
2458
2459})(jQuery);
2460</script>
2460<script>(function() {
2461    const MODAL_ID = 'promotion-pop-up';
2462    const SESSION_KEY = 'promotion-pop-up-container-ids';
2463    const PADDING = 70;
2464    const RESIZE_DEBOUNCE_MS = 150;
2465    const INITIAL_DELAY = typeof promotion_pop_up_initial_delay === 'undefined' ?
2466        2000 :
2467        promotion_pop_up_initial_delay;
2468
2469    const POP_UP_PRIORITY = ["holiday_party"];
2470    const _norm = s => (s || "").toString().trim().toLowerCase();
2471    const PRIORITY_RANK = new Map(POP_UP_PRIORITY.map((n, i) => [_norm(n), i]));
2472
2473    function displayPromotionPopUp() {
2474        const items = document.getElementsByClassName('promotion_pop_up_content');
2475
2476        // Track shown IDs as a Set (no dups, fast lookups)
2477        const shownIds = new Set(
2478        (sessionStorage.getItem(SESSION_KEY) || '')
2479            .split(',')
2480            .map(s => s.trim())
2481            .filter(Boolean)
2482        );
2483
2484        // Hide all; collect items not shown this session
2485        const availableItems = [];
2486        Array.prototype.forEach.call(items, item => {
2487            item.style.display = 'none';
2488
2489            // --- Exclusion logic ---
2490            // Block popups whose non-custom CTA link is a phone number (tel:)
2491            const isCustomLink = item.getAttribute("data-is-custom-link") ?? "false";
2492            const linkUrl = item.getAttribute("data-link-url") || "";
2493
2494            const excludeItem =
2495                isCustomLink === "false" &&
2496                linkUrl.trim().toLowerCase().startsWith("tel");
2497
2498            if (excludeItem) {
2499                return; // Skip this popup entirely
2500            }
2501
2502            if (!shownIds.has(item.id)) {
2503                availableItems.push(item);
2504            }
2505        });
2506
2507        if (availableItems.length === 0) return false;
2508
2509        // --- Priority logic ---
2510        const norm = s => (s || '').toString().trim().toLowerCase();
2511        const prioritySource = Array.isArray(POP_UP_PRIORITY)
2512            ? POP_UP_PRIORITY
2513            : Array.isArray(window.pop_up_priority)
2514                ? window.pop_up_priority
2515                : [];
2516        const rank = new Map(prioritySource.map((name, i) => [norm(name), i]));
2517
2518        const records = availableItems.map(el => {
2519            const internal = norm(el.getAttribute('data-internalname'));
2520            const priority = rank.has(internal) ? rank.get(internal) : Infinity;
2521            return { el, priority };
2522        });
2523
2524        let selectedItem;
2525        const minPriority = Math.min(...records.map(r => r.priority));
2526
2527        if (isFinite(minPriority)) {
2528            // Randomize within the highest-priority bucket only
2529            const topBucket = records.filter(r => r.priority === minPriority);
2530            const pick = topBucket[Math.floor(Math.random() * topBucket.length)];
2531            selectedItem = pick.el;
2532        } else {
2533            // Pure random among all available when no priorities match
2534            selectedItem = availableItems[Math.floor(Math.random() * availableItems.length)];
2535        }
2536
2537        // Show popup
2538        selectedItem.style.display = 'block';
2539
2540        // Analytics + persist shown id (unless preview param present)
2541        if (window.location.search.indexOf('spot_promotion_channel_id=') === -1) {
2542            shownIds.add(selectedItem.id);
2543            do_promotion_analytics(
2544                selectedItem.getAttribute('data-internalname'),
2545                selectedItem.id,
2546                selectedItem.getAttribute('data-link-url'),
2547                selectedItem.getAttribute('data-has-image'),
2548                selectedItem.getAttribute('data-is-template-image-and-button')
2549            );
2550        }
2551
2552        sessionStorage.setItem(SESSION_KEY, Array.from(shownIds).join(','));
2553        return true;
2554    }
2555
2556    function preloadImages(container, callback) {
2557        const images = container.querySelectorAll('img');
2558        if (images.length === 0) return callback();
2559
2560        let loaded = 0;
2561        Array.prototype.forEach.call(images, function(img) {
2562            if (img.complete) {
2563                if (++loaded === images.length) callback();
2564            } else {
2565                img.addEventListener('load', check);
2566                img.addEventListener('error', check);
2567            }
2568
2569            function check() {
2570                if (++loaded === images.length) callback();
2571            }
2572        });
2573    }
2574
2575    function centerModal() {
2576        const modal = document.getElementById(MODAL_ID);
2577        const dialog = modal.querySelector('.promotion-pop-up .modal-dialog');
2578        if (!dialog) return;
2579
2580        modal.style.display = 'block';
2581        modal.style.visibility = 'hidden';
2582
2583        const height = dialog.offsetHeight;
2584        const winHeight = window.innerHeight;
2585        const top = Math.max(0, (winHeight - height) / 2);
2586        dialog.style.top = `${top}px`;
2587
2588        modal.style.visibility = '';
2589    }
2590
2591    function centerModalVisible() {
2592        const modal = document.getElementById(MODAL_ID);
2593        const dialog = modal.querySelector('.promotion-pop-up .modal-dialog');
2594        if (!dialog) return;
2595
2596        const height = dialog.offsetHeight;
2597        const winHeight = window.innerHeight;
2598        const top = Math.max(0, (winHeight - height) / 2);
2599        dialog.style.top = `${top}px`;
2600    }
2601
2602    function lockScroll() {
2603        document.body.style.overflow = 'hidden';
2604        document.ontouchmove = function(e) {
2605            e.preventDefault();
2606        };
2607    }
2608
2609    function unlockScroll() {
2610        document.body.style.overflow = '';
2611        document.ontouchmove = null;
2612    }
2613
2614    function setupModalLayout(modalId) {
2615        const modal = document.getElementById(modalId);
2616        const content = modal?.querySelector('.promotion_pop_up_content[style*="display: block"]');
2617        if (!content) return;
2618
2619        const header = content.querySelector('.modal-header');
2620        const footer = content.querySelector('.modal-footer');
2621        const body = content.querySelector('.modal-body');
2622        if (!body) return;
2623
2624        const windowHeight = window.innerHeight;
2625        const headerHeight = header?.offsetHeight || 0;
2626        const footerHeight = footer?.offsetHeight || 0;
2627        const maxBodyHeight = windowHeight - headerHeight - footerHeight - PADDING;
2628
2629        body.style.maxHeight = `${maxBodyHeight}px`;
2630        body.style.overflowY = 'auto';
2631
2632        centerModalVisible();
2633    }
2634
2635    function prepareModalForDisplay(modalId) {
2636        const modal = document.getElementById(modalId);
2637        const visibleContent = modal?.querySelector('.promotion_pop_up_content[style*="display: block"]');
2638        if (!visibleContent) return;
2639
2640        modal.style.display = 'block';
2641        modal.style.visibility = 'hidden';
2642
2643        preloadImages(visibleContent, function() {
2644            const header = visibleContent.querySelector('.modal-header');
2645            const footer = visibleContent.querySelector('.modal-footer');
2646            const body = visibleContent.querySelector('.modal-body');
2647
2648            if (body) {
2649                const windowHeight = window.innerHeight;
2650                const headerHeight = header?.offsetHeight || 0;
2651                const footerHeight = footer?.offsetHeight || 0;
2652                const maxBodyHeight = windowHeight - headerHeight - footerHeight - PADDING;
2653
2654                body.style.maxHeight = `${maxBodyHeight}px`;
2655                body.style.overflowY = 'auto';
2656            }
2657
2658            centerModal();
2659            modal.style.visibility = '';
2660            lockScroll();
2661
2662            $('#' + modalId).modal({
2663                show: true,
2664                focus: true,
2665                backdrop: true
2666            });
2667        });
2668    }
2669
2670    // === Main Timer Logic ===
2671    setTimeout(function() {
2672        if (displayPromotionPopUp()) {
2673            if (typeof t !== 'undefined') {
2674                clearTimeout(t);
2675            }
2676
2677            const timeoutDuration = INITIAL_DELAY > 500 ? INITIAL_DELAY - 500 : 0;
2678
2679            setTimeout(function() {
2680                prepareModalForDisplay(MODAL_ID);
2681            }, timeoutDuration);
2682        }
2683    }, 500);
2684
2685    // === Cleanup on modal close ===
2686    $(document).on('hidden.bs.modal', `#${MODAL_ID}`, function() {
2687        unlockScroll();
2688    });
2689
2690    // === Responsive layout recalculation ===
2691    let resizeTimeout;
2692    window.addEventListener('resize', function() {
2693        clearTimeout(resizeTimeout);
2694        resizeTimeout = setTimeout(function() {
2695            const modal = document.getElementById(MODAL_ID);
2696            if (modal && $(modal).hasClass('in')) {
2697                void modal.offsetHeight;
2698                setupModalLayout(MODAL_ID);
2699            }
2700        }, RESIZE_DEBOUNCE_MS);
2701    });
2702
2703    // === Embedded analytics helpers ===
2704    function obtain_analytics_function() {
2705        if (typeof sph_widgets_ga === 'function') return sph_widgets_ga;
2706        if (typeof ga === 'function') return ga;
2707        if (typeof gtag === 'function') return gtag;
2708        return null;
2709    }
2710
2711    function do_promotion_analytics(eventLabel, spot_promotion_channel_id, data_link_url, hasImage, is_template_image_and_button) {
2712        analytics = obtain_analytics_function();
2713        if (!analytics) return null;
2714
2715        var pop_up_template = (is_template_image_and_button == 'true' ? 'text,image&button' : 'text&button');
2716        var image_enabled_disabled = (hasImage ? 'image_enabled' : 'image_disabled');
2717        var additional_info = (is_template_image_and_button == 'true' ? '|' + image_enabled_disabled : '');
2718
2719        universal_ga('send', 'event', 'Pop Up Promotion', 'View', eventLabel + '|||' + data_link_url + '|' + pop_up_template + additional_info);
2720
2721        // universal_ga('send', 'event', 'Pop Up Promotion', 'View', eventLabel);
2722        if (typeof $ === 'function') {
2723            $(".promotion_pop_up_content a").on("click", function(event) {
2724                universal_ga('send', 'event', {
2725                    eventCategory: 'Pop Up Promotion Button',
2726                    eventAction: 'Click',
2727                    eventLabel: eventLabel + '|||' + event.target.href + '|' + pop_up_template + additional_info,
2728                    transport: 'beacon'
2729                });
2730                $("#promotion-pop-up").modal('hide');
2731                return true;
2732            });
2733        }
2734    }
2735
2736})();</script>
2736<script>// ALL_PAGES_COMPONENT
2737var smart_footer_active = 'true' == 'true';
2738var smart_footer_version = '2';
2739
2740</script>
2740<footer id="accessibility-footer"><p>We strive to make our website accessible to everybody. <a aria-label="Learn More About our website accessibility" class="accessibility-link" href="/accessibility-page-01" target="_self">Learn More.</a></p></footer>
2740<script>
2741(function() {
2742  var name = "The Loop West End";
2743  var pid = "ChIJaZGkSaI0s1IR4KXuICXDEBw";
2744  function build_url() {
2745    var q = encodeURIComponent(name).replace(/'/g, "%27");
2746    return "https://www.google.com/maps/search/?api=1"
2747         + "&query=" + q
2748         + "&query_place_id=" + encodeURIComponent(pid);
2749  }
2750  window.google_map_url = build_url();
2751  window.open_google_map = function() {
2752    window.open(build_url(), "_blank");
2753  };
2754})();
2755</script>
2755<script>
2756
2757  var spot_id = 112064;
2758  var sh_generic_form_params=JSON.parse('{"generic_contact_form_active":false,"texting_permissions_active":true,"title":"Contact us","instructions":"Please fill out the form and we will be in touch.","reasons":[],"custom_hours":"","hours":"","active_tmt_cta_links":{"cta_private_party":null,"cta_catering":null,"cta_reservations":null,"cta_jobs":null},"spot_name":"The Loop West End","label_for_texting_permission":"I’d like to get texts about specials, events, and other exclusive offers and announcements not available to general public"}');
2759
2760  if (false){
2761    console.log("Check SpotHopper configuration. Probably there is no 'WEBSITE::DOMAIN_NAME' key for your website");
2762  }
2763
2764  if (navigator.userAgent.match(/iPhone/i)
2765       || navigator.userAgent.match(/iPad/i)
2766       || navigator.userAgent.match(/iPod/i)){
2767      $(document).ready(function(){
2768            document.body.className += " " + "webkit-mobile-body";
2769      });
2770    }
2771
2772  var promotion_url_param_domain = getPromotionUrlParams()['domain'];
2773  if ( promotion_url_param_domain && ( new URL(document.location).host == 'localhost:4000' || new URL(document.location).host == 'wcache.spotapps.co' ||  new URL(document.location).host == 'website-editor.spotapps.co' || new URL(document.location).host == 'website-editor-staging.spotapps.co' || new URL(document.location).host == 'wcache-staging.spotapps.co')){
2774    $("a[href^='/']").each(function(){
2775      if (this.href.indexOf('domain=') == -1){
2776        var sh_internal_url = new URL(this.href);
2777        sh_internal_url.searchParams.set("domain", promotion_url_param_domain);
2778        this.href = sh_internal_url.toString();
2779      }
2780    })
2781  }
2782
2783
2784  function cta_link_matches_href(href, url){
2785    var domain = 'theloopwestend.com';
2786    if(typeof url === 'undefined'){
2787      return false;
2788    }
2789    var partsOfURL = url.split(domain);
2790    if (partsOfURL.length != 2){
2791      return href == url;
2792    }else{
2793      var urlPath = partsOfURL[1];
2794      if (urlPath.substring(0,1) == "/"){
2795        urlPath = urlPath.substring(1,urlPath.length);
2796      }
2797      return href.indexOf(urlPath, domain.length + href.indexOf(domain)-1) !== -1;
2798    }
2799  }
2800
2801  var all_cta_links = [{"id":746506,"spot_id":112064,"url":"https://www.theloopwestend.com/drink-menu","cta_link_type":"drink_menu","created_at":"2023-05-02T11:59:58.630+00:00","updated_at":"2026-07-30T10:10:09.193+00:00","made_of_food":false,"link_name":""},{"id":746505,"spot_id":112064,"url":"https://www.theloopwestend.com/events","cta_link_type":"events","created_at":"2023-05-02T11:59:58.611+00:00","updated_at":"2026-07-30T10:10:09.140+00:00","made_of_food":false,"link_name":"","position":null},{"id":746504,"spot_id":112064,"url":"https://www.theloopwestend.com/specials","cta_link_type":"specials","created_at":"2023-05-02T11:59:58.540+00:00","updated_at":"2026-07-30T10:10:08.988+00:00","made_of_food":false,"link_name":"","position":null},{"id":746507,"spot_id":112064,"url":"https://www.theloopwestend.com/food-menu","cta_link_type":"food_menu","created_at":"2023-05-02T11:59:58.649+00:00","updated_at":"2026-07-30T10:10:09.248+00:00","made_of_food":false,"link_name":"","position":null},{"id":916189,"spot_id":112064,"url":"https://www.toasttab.com/the-loop-west-end/giftcards","cta_link_type":"gift_cards","created_at":"2024-04-02T09:11:26.385+00:00","updated_at":"2026-07-30T10:10:09.385+00:00","made_of_food":false,"link_name":"","target":null,"website_footer_label":"Gift Cards","position":5},{"id":726443,"spot_id":112064,"url":"https://order.toasttab.com/online/the-loop-west-end","cta_link_type":"order","created_at":"2023-01-10T13:30:44.525+00:00","updated_at":"2026-07-30T10:10:09.439+00:00","made_of_food":false,"link_name":"toasttab","target":null,"website_footer_label":"Order","position":0},{"id":1115136,"spot_id":112064,"url":"https://us-restaurant.momos.io/forms/52924e62-11fd-46e7-ba80-6c982b4be377?id=417c27de-1884-4917-abdf-eb69278834de","cta_link_type":"private_parties","created_at":"2024-10-22T13:44:31.529+00:00","updated_at":"2026-07-30T10:10:09.085+00:00","made_of_food":false,"link_name":"","target":null,"website_footer_label":"Parties","position":3},{"id":2051416,"spot_id":112064,"url":"https://www.opentable.com/restref/client/?restref=213007\u0026lang=en-US\u0026ot_source=Restaurant%20website\u0026corrid=ddfe51ba-cadb-42e5-9528-ac6a168c07e6","cta_link_type":"reservations","created_at":"2026-07-30T10:03:59.293+00:00","updated_at":"2026-07-30T10:10:09.300+00:00","made_of_food":false,"link_name":"","target":null,"website_footer_label":"Reserve","position":1}];
2802
2803  function find_cta_link(href) {
2804    for (var i=0; i< all_cta_links.length; i++){
2805      var cta_link = all_cta_links[i];
2806      if ( cta_link_matches_href(href, cta_link.url)){
2807        return cta_link;
2808      }
2809    }
2810  }
2811
2812  function find_cta_links(href) {
2813    var cta_links = []
2814    for (var i=0; i< all_cta_links.length; i++){
2815      var cta_link = all_cta_links[i];
2816      if ( cta_link_matches_href(href, cta_link.url)){
2817        cta_links.push(cta_link);
2818      }
2819    }
2820    return cta_links;
2821  }
2822
2823
2824  function get_current_page_cta_link_types(){
2825    var types = [];
2826    var cta_links = find_cta_links(document.location.href);
2827    for (var i=0; i<cta_links.length; i++){
2828      types.push(cta_links[i].cta_link_type);
2829    }
2830    return types;
2831  }
2832
2833
2834  function is_food_menu_page(){
2835    var cta_link_types = get_current_page_cta_link_types();
2836    for (var i=0; i<cta_link_types.length; i++){
2837      if ('food_menu' == cta_link_types[i])
2838        return true;
2839    }
2840    return false;
2841  }
2842
2843
2844  function get_form_cat_from_cta(){
2845    var cta_link = find_cta_link(document.location.href);
2846    if (cta_link == null) {
2847        return null;
2848    }
2849    if (cta_link.cta_link_type == 'private_parties'){
2850        return 'private_party';
2851    }else if (cta_link.cta_link_type == 'reservations'){
2852        return 'reservation';
2853    }else if (cta_link.cta_link_type == 'catering'){
2854        return 'catering';
2855    }else if (cta_link.cta_link_type == 'job_listing'){
2856        return 'job_listings';
2857    }else if (cta_link.cta_link_type == 'gift_cards'){
2858          return 'gift_cards';
2859    }
2860    return null;
2861  }
2862
2863  function element_has_events_defined(elem){
2864    if ($._data(elem, "events") === undefined){
2865      return false;
2866    }
2867    return true;
2868  }
2869
2870  function create_ga_events_for_cta_clicks(){
2871    if (typeof $ === 'function'){
2872
2873      var cta_link_of_the_page = find_cta_link(location.href);
2874
2875
2876      $("a").each(function(index, elem){
2877        var href = $(elem).attr('href');
2878
2879        if (href  === undefined ){
2880           return;
2881        }
2882
2883        if (href.substring(0,4) == 'tel:'){
2884          if (!element_has_events_defined(elem)){  // not footer links
2885            $(elem).on("click", function(){
2886                universal_ga('send', 'event', {
2887                  eventCategory: 'Button',
2888                  eventAction: 'Click',
2889                  eventLabel: 'Phone',
2890                  transport: 'beacon'
2891                });
2892             });
2893
2894             if (cta_link_of_the_page){
2895                $(elem).on("click", function(){
2896                    universal_ga('send', 'event', {
2897                      eventCategory: 'Button',
2898                      eventAction: 'Click',
2899                      eventLabel: cta_link_of_the_page.cta_link_type +  ' page phone',
2900                      transport: 'beacon'
2901                    });
2902                 });
2903             }
2904          } else {
2905             if (cta_link_of_the_page){
2906               $(elem).on("click", function(){
2907                   universal_ga('send', 'event', {
2908                        eventCategory: 'Button',
2909                        eventAction: 'Click',
2910                        eventLabel: cta_link_of_the_page.cta_link_type +  ' page phone footer',
2911                        transport: 'beacon'
2912                   });
2913               });
2914             }
2915          }
2916
2917
2918        }else{
2919          var cta_link = find_cta_link(href);
2920          if (elem.className != null && elem.className.indexOf("bottom-link") > -1){
2921            // console.log("bottom link detected");
2922          }else{
2923            if (cta_link != null){
2924              $(elem).on("click", function(){
2925                universal_ga('send', 'event', {
2926                        eventCategory: 'Website Link',
2927                        eventAction: 'Click',
2928                        eventLabel: cta_link.cta_link_type,
2929                        transport: 'beacon'
2930                  });
2931              });
2932            }
2933          }
2934        }
2935
2936
2937      });
2938    }
2939  }
2940
2941  if (typeof angular === "undefined") {
2942    create_ga_events_for_cta_clicks();
2943  } else {
2944    angular.element(document).ready(function () {
2945      create_ga_events_for_cta_clicks();
2946    });
2947  }
2948
2949
2950  function triggerShowFooterEvents(){
2951    if (window.screen.availWidth < 768){
2952        universal_ga('send', 'event', {
2953                eventCategory: 'Mobile Footer',
2954                eventAction: 'View',
2955                eventLabel: '',
2956                transport: 'beacon'
2957          });
2958    }
2959  }
2960
2961
2962
2963
2964  ////////////
2965  function smartFooterV2()
2966  {
2967    var list= document.getElementsByClassName("bottom-list-item");
2968    if (!list) return;
2969
2970    if (document.getElementById("bottom-navbar") == null){
2971      return;
2972    }
2973
2974    var bottomNav = document.querySelector('#bottom-navbar .navbar-nav');
2975    var footerLinkPaddingLeft = $('#bottom-navbar .navbar-nav li a').css('padding-left');
2976    var footerLinkPaddingRight = $('#bottom-navbar .navbar-nav li a').css('padding-right');
2977
2978    bottomNav.innerHTML = '';
2979    var linksWithPosition = all_cta_links.filter(e => e.position != null && e.position >= 0);
2980    linksWithPosition.sort(function(a,b) {
2981      return a.position - b.position;
2982    });
2983
2984    var footerLinkStyle = (footerLinkPaddingLeft == '0px' || footerLinkPaddingRight == '0px' ? 'style="padding-left: 8px; padding-right: 8px;"' : '');
2985
2986    linksWithPosition.forEach((e, i) => {
2987        var target = e.target || getUrlTarget(e.url);
2988        bottomNav.insertAdjacentHTML('beforeend',
2989        `<li class="bottom-list-item" style="white-space: nowrap;width: auto;"><a ${footerLinkStyle} class="bottom-link smart-footer-link" data-type="${e.cta_link_type}" data-position="${i}" target="${target}" href="${e.url}">${e.website_footer_label}</a></li>`);
2990    })
2991
2992    var intervalCount = 0
2993    var interval = setInterval(() => {
2994      if(intervalCount == 50){
2995        clearInterval(interval);
2996      }
2997      removeOverflowingFooterLinks();
2998      intervalCount ++;
2999    }, 200);
3000
3001    $('.smart-footer-link').on("click", function(){
3002          if (typeof shUrlParams !== "undefined" && shUrlParams['source'] === undefined){
3003                    shUrlParams['source'] = 'footer';
3004                    sessionStorage.setItem('shUrlParams', JSON.stringify(shUrlParams));
3005          }
3006
3007          var visibleLinks = $('.smart-footer-link').map(function (e) {
3008              return $(this).data('type');
3009          }).toArray().join(',');
3010
3011          universal_ga('send', 'event', {
3012                  eventCategory: 'Button',
3013                  eventAction: 'Click_footer_2',
3014                  eventLabel: "type:" + $(this).data('type') + "|position:" + $(this).data('position') + "|visible:" + visibleLinks,
3015                  transport: 'beacon'
3016            });
3017    });
3018  }
3019
3020  function removeOverflowingFooterLinks(){
3021    var bottomNavLinks = document.querySelectorAll('#bottom-navbar .navbar-nav li');
3022    var width_sum = 0;
3023
3024    bottomNavLinks.forEach(e => {
3025      width_sum += e.getBoundingClientRect().width;
3026      if ((width_sum) > window.innerWidth) {
3027        console.log(`%cLink %c${e.textContent} %cdeleted couldn't fit screen`,"color: #fff;background: #202124;", "background: red;color: #fff", "color: #fff;background: #202124;");
3028        e.remove();
3029      }
3030    });
3031  }
3032
3033  function getUrlTarget(url){
3034    if(url.startsWith('tel')){
3035      return '_self';
3036    }
3037    if(url.startsWith('/') || url.includes('tmt.spotapps.co') || url.includes(window.location.host)){
3038      return '_self';
3039    }
3040    return '_blank';
3041  }
3042
3043  function npb()
3044    {
3045    	var list= document.getElementsByClassName("bottom-list-item");
3046    	if (!list) return;
3047
3048      if (document.getElementById("bottom-navbar") == null){
3049        return;
3050      }
3051
3052      var url = ""
3053    	for (var i=0; i < all_cta_links.length; i++)
3054    	{
3055    		if (all_cta_links[i].cta_link_type == "order"){
3056          url = all_cta_links[i].url;
3057        }
3058    	}
3059
3060    	if ( url == ""){
3061        return;
3062      }
3063
3064    	for (i=0; i < list.length; i++)
3065    	{
3066    		console.log(cta_link_matches_href(list[i].firstChild.href, url));
3067    		if (cta_link_matches_href(list[i].firstChild.href,url))  return;
3068
3069    	};
3070
3071    	var item = list[list.length-1]
3072    	document.getElementById("bottom-navbar").getElementsByClassName("nav navbar-nav")[0].appendChild(item.cloneNode(true));
3073    	var width_sum = 0;
3074    	for (i=0; i < list.length; i++) {
3075    		width_sum += list[i].getBoundingClientRect().width;
3076    	}
3077
3078    	var item = list[list.length-1]
3079    	if ((width_sum - 10) > window.innerWidth) { item.parentNode.removeChild(item); console.log("link deleted couldn't fit screen"); return; }
3080
3081    	item.firstChild.text = "Order";
3082    	item.firstChild.href = url;
3083    	item.firstChild.id = "bottom_link_" + list.length;
3084
3085      $(item.firstChild).on("click", function(){
3086
3087          if (typeof shUrlParams !== "undefined" && shUrlParams['source'] === undefined){
3088                    shUrlParams['source'] = 'footer';
3089                    sessionStorage.setItem('shUrlParams', JSON.stringify(shUrlParams));
3090                  }
3091
3092          universal_ga('send', 'event', {
3093                  eventCategory: 'Button',
3094                  eventAction: 'Click',
3095                  eventLabel: 'Plan B-2 Order',
3096                  transport: 'beacon'
3097            });
3098      });
3099
3100
3101    }
3102
3103function activateSmartFooter(){
3104    var smart_footer_active = true;
3105    var smart_footer_version = 2;
3106    var man_bottom_active = true;
3107    if(window.location.hash == '#smartFooterV2=enabled'){
3108      smartFooterV2();
3109      return;
3110    }
3111    if (smart_footer_active && !man_bottom_active){
3112      if(smart_footer_version == 2 ){
3113          smartFooterV2();
3114       }else {
3115          npb();
3116       }
3117    }
3118  }
3119
3120  activateSmartFooter();
3121
3122  var corona_config_str = '';
3123  var corona_config =  corona_config_str != '' ?  JSON.parse('') : null;
3124
3125
3126  //corona instuctions
3127  function show_corona_instructions(text, phone, btnText){
3128    //format to US number
3129    var match = phone.match(/^(\d{3})(\d{3})(\d{4})$/);
3130
3131    if(corona_config.shopping_cart_type == "TMT" && corona_config.shopping_cart_active == true) {
3132        var linkLocation = "https://tmt.spotapps.co/ordering-menu/?spot_id="+corona_config.spot_id+"&images=yes&accordion=true";
3133        var btnLinkLocation = "https://tmt.spotapps.co/ordering-menu/?spot_id="+corona_config.spot_id+"&images=yes&accordion=true";
3134    }else {
3135        var linkLocation = 'tel:+1'+phone+'';
3136        var btnLinkLocation = 'tel:+1'+ match[1] + '-' + match[2] + '-' + match[3] +''
3137    }
3138    var appendPhone = 'tel:+1'+phone+'';
3139    //inject html content
3140    if ($('.food-menu-nav').length) {
3141      //new template
3142      var pageEl =  $('.food-menu-nav').css('margin','20px auto 10px auto');
3143      var textColor = rgb2hex($('.section-header').css('color'));
3144      var linkColor = rgb2hex($('.food-menu-nav-item.active').css('background-color'));
3145      var fontSize = parseInt($('.food-menu-nav-item').css('font-size'));
3146      fontSize = fontSize + Math.round(fontSize  * 0.25);
3147
3148      // var html = '<div id="show-corona-instructions" style="padding:20px;flex: 0 1 100%;" class="text-center"><p style="color:'+textColor+';">'+text+' <a onclick="ga(\'send\', \'event\', \'Button\', \'Click\', \'Corona Instructions Phone\');" style="color:'+linkColor+';"href="tel:+1'+phone+'">'+ match[1] + '-' + match[2] + '-' + match[3] +'</a></p><a onclick="ga(\'send\', \'event\', \'Button\', \'Click\', \'Corona Instructions Phone\');" style="font-size:'+fontSize+'px" class="food-menu-nav-item custom-temp-btn hvr-fade active" href="tel:+1'+phone+'">'+btnText+'</a></div>';
3149      var html = '<div id="show-corona-instructions" style="padding:20px;flex: 0 1 100%;" class="text-center"><p style="color:'+textColor+';">'+text+' <a onclick="ga(\'send\', \'event\', \'Button\', \'Click\', \'Corona Instructions Phone\');" style="text-decoration: underline;color:'+textColor+';" href="tel:+1'+phone+'">'+ match[1] + '-' + match[2] + '-' + match[3] +'</a></p><a onclick="ga(\'send\', \'event\', \'Button\', \'Click\', \'Corona Instructions Phone\');" style="display: inline-block !important;font-size:'+fontSize+'px" class="food-menu-nav-item custom-temp-btn hvr-fade active" href="'+btnLinkLocation +'">'+btnText+'</a></div>';
3150
3151    }else {
3152      //old template
3153      var pageEl = $('.tabnav');
3154      var textColor = rgb2hex($('.menu-item-name-traditional').css('color'));
3155      var linkColor = rgb2hex($('.style-traditional .tabnav .nav>li.active>a').css('color'));
3156
3157      var linkTextColor = getContrast50(linkColor);
3158      var fontSize = parseInt($('.menu-item-name-traditional').css('font-size'));
3159      fontSize = fontSize + Math.round(fontSize  * 0.25);
3160      var textTransform = $('.style-traditional .tabnav .nav>li>a').css('text-transform');
3161
3162      // var html = '<div id="show-corona-instructions" style="padding:20px;flex: 0 1 100%;" class="text-center"><p style="color:'+textColor+';margin-bottom:20px;">'+text+' <a onclick="ga(\'send\', \'event\', \'Button\', \'Click\', \'Corona Instructions Phone\');" style="color:'+linkColor+';"href="tel:+1'+phone+'">'+ match[1] + '-' + match[2] + '-' + match[3] +'</a></p><a onclick="ga(\'send\', \'event\', \'Button\', \'Click\', \'Corona Instructions Phone\');" style="margin: 20px auto; padding: 10px 50px 10px 30px; cursor: pointer; background-color: '+linkColor+'; background: '+linkColor+'; text-decoration: none; color: '+textColor+'; border: 2px solid '+linkColor+';font-size:'+fontSize+'px;text-transform: '+textTransform+'" href="tel:+1'+phone+'">'+btnText+'</a></div>';
3163      var html = '<div id="show-corona-instructions" style="padding:20px;flex: 0 1 100%;" class="text-center"><p style="color:'+textColor+';margin-bottom:20px;">'+text+' <a onclick="ga(\'send\', \'event\', \'Button\', \'Click\', \'Corona Instructions Phone\');" style="text-decoration: underline;color:'+textColor+';"href="tel:+1'+phone+'">'+ match[1] + '-' + match[2] + '-' + match[3] +'</a></p><a onclick="ga(\'send\', \'event\', \'Button\', \'Click\', \'Corona Instructions Phone\');" style="margin: 20px auto; padding: 10px 30px 10px 30px; cursor: pointer; background-color: '+linkColor+'; background: '+linkColor+'; text-decoration: none; color: '+linkTextColor+'; border: 2px solid '+linkColor+';font-size:'+fontSize+'px;text-transform: '+textTransform+'" href="'+btnLinkLocation+'">'+btnText+'</a></div>';
3164
3165    }
3166     //html content
3167    pageEl.prepend(html);
3168  }
3169
3170  function rgb2hex(rgb) {
3171    if(typeof rgb !== "undefined"){
3172      rgbColor = rgb.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);
3173      if (!rgbColor) {
3174        rgba = rgb.match(/^rgba?\((\d+),\s*(\d+),\s*(\d+)(,\s*\d+\.*\d+)?\)$/);
3175        return "#" + hex(rgba[1]) + hex(rgba[2]) + hex(rgba[3]);
3176      }
3177      function hex(x) {
3178          return ("0" + parseInt(x).toString(16)).slice(-2);
3179      }
3180      return "#" + hex(rgbColor[1]) + hex(rgbColor[2]) + hex(rgbColor[3]);
3181    }
3182    return rgb;
3183  }
3184
3185  function getContrast50(hexcolor){
3186    return (parseInt(hexcolor, 16) > 0xffffff/2) ? '#000':'#fff';
3187  }
3188
3189  function show_corona_sidebar_instructions(text, phone){
3190    //format to US number
3191    var match = phone.match(/^(\d{3})(\d{3})(\d{4})$/);
3192    var divWidth = 230;
3193    var top = 50;
3194    var linkSize = '1.6em';
3195    var pSize = $('p').css('font-size');
3196    var appendPhone = 'tel:+1'+phone+'';
3197
3198    if ($(window).width() < 1600)
3199      var top = 30;
3200    if ($(window).width() < 1200){
3201      var divWidth = 180;
3202      var linkSize = '1.4em';
3203      var pSize ='1.1em';
3204    }
3205
3206    if($('.food-menu-nav').length){ //new template
3207      var textColor = $('.food-menu-nav-item.active').css('color');
3208      var linkColor = $('.food-menu-nav-item.active').css('background-color');
3209
3210      var linkTextColor = $('.food-menu-nav-item.active').css('color');
3211      var parent = $('.food-menu-page');
3212    }
3213    else { //old template
3214      var textColor = $('.menu-item-name-traditional').css('color');
3215      var linkColor = $('.style-traditional .tabnav .nav>
3215li.active>a').css('color');
3216      var parent = $('.food-menu').length ? $('.food-menu') : $('.drink-menu');
3217      var linkTextColor = getContrast50(linkColor);
3218    }
3219
3220    // $(parent).append('<div id="corona-instructions-sidebar" style="display:none;position:fixed;width:'+divWidth+'px;top:'+top+'vh;right:0;background-color:'+linkColor+';padding:15px;text-align:center;color:'+textColor+';text-transform:uppercase;"><p style="margin:0 0 5px;font-size:'+pSize+';">'+text+'</p><i class="fa fa-phone" aria-hidden="true"></i> <a onclick="ga(\'send\', \'event\', \'Button\', \'Click\', \'Food Page Side Element Phone\');"  style="font-size:'+linkSize+';color:'+textColor+';" href="tel:+1'+phone+'">'+ match[1] + '-' + match[2] + '-' + match[3] +'</a></div>');
3221    $(parent).append('<div id="corona-instructions-sidebar" style="display:none;position:fixed;width:'+divWidth+'px;top:'+top+'vh;right:0;background-color:'+linkColor+';padding:15px;text-align:center;color:'+linkTextColor+';text-transform:uppercase;"><p style="margin:0 0 5px;font-size:'+pSize+';">'+text+'</p><i class="fa fa-phone" aria-hidden="true"></i> <a onclick="ga(\'send\', \'event\', \'Button\', \'Click\', \'Food Page Side Element Phone\');this.href=\'' + appendPhone + '\';"  style="font-size:'+linkSize+';color:'+linkTextColor+';" href="/call-us/'+phone+'">'+ match[1] + '-' + match[2] + '-' + match[3] +'</a></div>');
3222
3223    //check if resolution is bigger than tablet resolution
3224/*  if ($(window).width() > 991) {
3225      //detect scroll
3226      window.onscroll = function (e) {
3227      if ($(window).scrollTop() == 0) {
3228          $('#corona-instructions-sidebar').hide();
3229        }else {
3230          $('#corona-instructions-sidebar').show();
3231        }
3232      }
3233    } */
3234  }
3235
3236  function check_corona_config(config){
3237    console.log(config)
3238    if (config) {
3239      if (config.instructions_on_food_page && config.food_page_instruction_text && config.food_page_instruction_phone) {
3240        if (!config.promote_deliveries && config.promote_pick_up) {
3241          var btnText = 'Call For Pick Up';
3242        }
3243        if (config.promote_deliveries && !config.promote_pick_up) {
3244          var btnText = 'Call For Delivery';
3245        }
3246        if (config.promote_deliveries && config.promote_pick_up) {
3247          var btnText = 'Call For Pick Up Or Delivery';
3248        }
3249
3250        if(typeof btnText !== "undefined"){ // check if pick up or delivery are true
3251          if(config.shopping_cart_type == "TMT" && config.shopping_cart_active == true) {
3252                var btnText = 'ORDER NOW';
3253                    if($('.food-menu-nav').length){ //new template
3254                      var textColor = rgb2hex($('.section-header').css('color'));
3255                      var linkColor = rgb2hex($('.food-menu-nav-item.active').css('background-color'));
3256                      var fontSize = parseInt($('.food-menu-nav-item').css('font-size'));
3257                      fontSize = fontSize + Math.round(fontSize  * 0.25);
3258                    }
3259                    else { //old template
3260                        var textColor = rgb2hex($('.menu-item-name-traditional').css('color'));
3261                        var linkColor = rgb2hex($('.style-traditional .tabnav .nav>li.active>a').css('color'));
3262
3263                        var linkTextColor = getContrast50(linkColor);
3264                        var fontSize = parseInt($('.menu-item-name-traditional').css('font-size'));
3265                        fontSize = fontSize + Math.round(fontSize  * 0.25);
3266                    }
3267                show_corona_instructions('For online orders, use our own <a style="text-decoration:underline;color: '+textColor+';" href="https://tmt.spotapps.co/ordering-menu/?spot_id='+config.spot_id+'&images=yes&accordion=true#"> commission free ordering platform! </a> or call:', config.food_page_instruction_phone, btnText);
3268                show_corona_sidebar_instructions(btnText, config.food_page_instruction_phone);
3269            } else {
3270                show_corona_instructions(config.food_page_instruction_text, config.food_page_instruction_phone, btnText);
3271                show_corona_sidebar_instructions(btnText, config.food_page_instruction_phone);
3272            }
3273
3274        }
3275      }
3276    }
3277  }
3278
3279
3280  if (is_food_menu_page() && !window.location.search.includes("contactless=true")){
3281    $( document ).ready(function() {
3282       setTimeout(function(){
3283        check_corona_config(corona_config);
3284       }, 300);
3285    });
3286  }
3287
3288
3289
3290  function isPhone(phone){
3291      var regex = /^(\+\d{1,2}\s?)?\(?\d{3}\)?[\s.-]?\d{3}[\s.-]?\d{4}$/;
3292      return regex.test(phone);
3293  }
3294
3295  function sendEmail_MT (input_id) {
3296    const $loader = $("[data-id=newsletter-widget-2] .sph-loading-img");
3297
3298    const $step = {
3299      form: $("[data-id=newsletter-widget-2] .sph-email-form"),
3300      message: $("[data-id=newsletter-widget-2] .sph-response-message"),
3301    }
3302
3303    const $field = {
3304      email: $("[data-id=newsletter-widget-2] #sph-newsletter-input-" + input_id),
3305      phone: $("[data-id=newsletter-widget-2] #sph-newsletter-phone-" + input_id),
3306      consent: $("[data-id=newsletter-widget-2] #sph-newsletter-checkbox-phone-" + input_id),
3307    };
3308
3309    const $error = {
3310      email: $("[data-id=newsletter-widget-2] #sph-newsletter-email-error-" + input_id),
3311      phone: $("[data-id=newsletter-widget-2] #sph-newsletter-phone-error-" + input_id),
3312    };
3313
3314    if ($field.email.val().trim() === "") {
3315        $error.email
3316          .html("This field is required")
3317          .show();
3318    }
3319    else if (!isEmail($field.email.val().trim())) {
3320      $error.email
3321        .html("Please use the format “[email protected]”")
3322        .show();
3323    } else {
3324      $error.email
3325        .html("")
3326        .hide();
3327    }
3328
3329    if ($field.consent.is(':checked') && $field.phone.val().trim() === "") {
3330      $error.phone
3331        .html("This field is required")
3332        .show();
3333    } else if ($field.phone.val().trim().length > 0 && !isPhone($field.phone.val().trim())) {
3334      $error.phone
3335        .html("The phone number must contain 10 digits")
3336        .show();
3337    } else {
3338      $error.phone
3339        .html("")
3340        .hide();
3341    }
3342
3343    const errorField = $step.form.find('.sh-form-error:visible');
3344
3345    if (errorField.length > 0) {
3346      const input = errorField.first().next();
3347
3348      document.activeElement.blur();
3349
3350      setTimeout(() => {
3351        input.focus();
3352      }, 160)
3353
3354      return;
3355    }
3356
3357    $loader
3358      .show()
3359      .prev()
3360      .hide();
3361
3362    $.ajax({
3363      method: "POST",
3364      url: "https://www.spothopperapp.com/api/spots/112064/contacts/add_with_texting_permission",
3365      crossDomain: true,
3366      dataType: 'json',
3367      data: {
3368        email: $field.email.val().trim(),
3369        phone: $field.phone.val().trim(),
3370        texting_permission: $field.consent.is(':checked'),
3371      },
3372      success: function (data) {
3373        afterRequestSubmission(data);
3374      },
3375      error: function () {
3376        afterRequestSubmission("Something went wrong. Please try again later.");
3377      }
3378    });
3379
3380    function afterRequestSubmission (data) {
3381      $step.form.hide();
3382
3383      $step.message
3384        .html(data)
3385        .show()
3386        .trigger('focus');
3387    }
3388  }
3389</script>
3389<script>function addPromotionParamsToTMTLinks()
3390{
3391    if (sessionStorage.getItem('shUrlParams')) {
3392        let shParams = JSON.parse(sessionStorage.getItem('shUrlParams'));
3393        if (!Object.keys(shParams).length)
3394            return;
3395        if(!shParams.source)
3396            return;
3397        $('a').each(function () {
3398            if (this.href.includes('tmt.spotapps.co')) {
3399                if(this.href.includes('&source=') || this.href.includes('&destination=') || this.href.includes('&promotion='))
3400                    return;
3401
3402                this.href = this.href + '&source=' + shParams.source;
3403                if(shParams.destination)
3404                    this.href = this.href + '&destination=' + shParams.destination;
3405                if(shParams.promotion)
3406                    this.href = this.href + '&promotion=' + shParams.promotion;
3407                if(shParams.fb_post_id)
3408                    this.href = this.href + '&fb_post_id=' + shParams.fb_post_id;
3409                if(shParams.email_post_id)
3410                    this.href = this.href + '&email_post_id=' + shParams.email_post_id;
3411            }
3412        })
3413    }
3414}
3415setTimeout(function() {
3416  addPromotionParamsToTMTLinks();
3417  addFooterToSourceParam();
3418},600)
3419
3420function addFooterToSourceParam()
3421{
3422    $('.bottom-link').each(function (){
3423        if(shouldAddSourceParam(this.href))
3424          this.href = this.href + '&source=footer';
3425    })
3426    $('#sh-multiple-links-content-holder a').each(function (){
3427       if(shouldAddSourceParam(this.href))
3428          this.href = this.href + '&source=footer';
3429    })
3430}
3431function shouldAddSourceParam(link){
3432  if (link.includes('tmt.spotapps.co') && !link.includes('&source=')){
3433    return true;
3434  }
3435  return false;
3436}
3437</script>
3437<script>
3438;(async () => {
3439if (typeof window.focusTrap === 'undefined') {
3440    await getScript('https://unpkg.com/tabbable/dist/index.umd.js');
3441    await getScript('https://unpkg.com/focus-trap/dist/focus-trap.umd.js');
3442}
3443
3444document.querySelectorAll('.modal').forEach((element) => {
3445    const trap = window.focusTrap?.createFocusTrap(element, {
3446        allowOutsideClick: true,
3447    });
3448
3449    $(element).on('shown.bs.modal', () => {
3450	    trap?.activate();
3451	});
3452
3453	$(element).on('hidden.bs.modal', () => {
3454        trap?.deactivate();
3455    });
3456});
3457
3458async function getScript (source) {
3459    return new Promise((resolve, reject) => {
3460        const script = document.createElement('script');
3461        script.src = source;
3462        script.async = true;
3463
3464        script.onload = resolve;
3465        script.onerror = reject;
3466
3467        document.head.appendChild(script);
3468    });
3469}
3470})();
3471</script>
3471<script src="https://wcache-plugins.spotapps.co/production/wcpl_bootstrap_ada_fix/wcpl_bootstrap_ada_fix.js"></script>
3471<link href="https://wcache-plugins.spotapps.co/production/wcpl_bday_club/wcpl_bday_club.css" rel="stylesheet" media="screen"/>
3471<script src="https://wcache-plugins.spotapps.co/production/wcpl_bday_club/wcpl_bday_club.js"></script>
3471<script src="https://wcache-plugins.spotapps.co/production/wcpl_ga_tracking/wcpl_ga_tracking.js"></script>
3471<script src="https://wcache-plugins.spotapps.co/production/wcpl_media_controls/script.js"></script>
3471<link href="https://wcache-plugins.spotapps.co/production/wcpl_website_editor_interpreter/website_interpreter_helper_style.css" rel="stylesheet" media="screen"/>
3471<script>var changes_log_array = {};</script>
3471<script src="https://wcache-plugins.spotapps.co/production/wcpl_website_editor_interpreter/website_interpreter.js"></script>
3471<script>document.addEventListener("DOMContentLoaded", () => {
3472    setNudgeBtnStyling();
3473 })
3474
3475function setNudgeBtnStyling(){
3476    const headerNudgeBtn = document.querySelector(".cta-nudge-btn[data-nudge-position=mobile-header]");
3477    const footerNudgeBtn = document.querySelector(".cta-nudge-btn[data-nudge-position=mobile-footer]");
3478    
3479    const useWebsiteButtonStyle = true;
3480    
3481    if (!headerNudgeBtn && !footerNudgeBtn) return;
3482    
3483    if(useWebsiteButtonStyle) applyCustomTempBtnStyles(headerNudgeBtn, footerNudgeBtn);
3484}
3485
3486function getCustomTempBtnStyles() {
3487    let tempBtn = document.querySelector("a.custom-temp-btn");
3488    
3489    // If not present, create a temporary one
3490    let created = false;
3491    if (!tempBtn) {
3492      tempBtn = document.createElement("a");
3493      tempBtn.className = "custom-temp-btn";
3494      tempBtn.style.visibility = "hidden";
3495      tempBtn.style.position = "absolute";
3496      tempBtn.style.pointerEvents = "none";
3497      document.body.appendChild(tempBtn);
3498      created = true;
3499    }
3500
3501    const styles = window.getComputedStyle(tempBtn);
3502    
3503    // Border radius logic - only determine it once on first visit
3504    let borderRadius;
3505    const storedBorderRadius = sessionStorage.getItem("nudgeBtnBorderRadius");
3506
3507    if (storedBorderRadius !== null) {
3508      borderRadius = storedBorderRadius; // already determined, use it
3509    } else if (document.body.classList.contains("home-page") && !created) {
3510      borderRadius = styles.borderRadius; // homepage with real button, store it
3511      sessionStorage.setItem("nudgeBtnBorderRadius", borderRadius);
3512    } else {
3513      borderRadius = "0px"; // first visit is not homepage, lock to 0 forever
3514      sessionStorage.setItem("nudgeBtnBorderRadius", borderRadius);
3515    }
3516    
3517    const stylePatch = {
3518      fontFamily: styles.fontFamily,
3519      fontWeight: styles.fontWeight,
3520      borderRadius: borderRadius,
3521      textTransform: styles.textTransform
3522    };
3523    
3524    // Cleanup if we created it
3525    if (created) {
3526      document.body.removeChild(tempBtn);
3527    }
3528    
3529    return stylePatch;
3530}
3531
3532function applyCustomTempBtnStyles(headerNudgeBtn, footerNudgeBtn) {
3533    const stylePatch = getCustomTempBtnStyles();
3534    if (!stylePatch) return;
3535    
3536    [headerNudgeBtn, footerNudgeBtn].filter(Boolean).forEach((btn) => {
3537      Object.assign(btn.style, stylePatch);
3538    });
3539}</script>
3539</body></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.