1<!DOCTYPE html> 2�<html lang="en"><head><!-- 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-5NYPCNS5NT'); 8 gtag('config', 'G-VG24VK2VKT'); 9 </script>
9<!-- wcache 2026-10-07 07:57:38.371010Z --><!-- 10smart_footer: true, 11smart_footer_version: 2, 12scripting_active: false 13--><link href="https://troubadourwinebar.com/happy-hours-specials" 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="" name="description"/><meta content="" name="author"/><meta content="Troubadour Wine Bar - Specials" property="og:title"/><meta content="website" property="og:type"/><meta content="http://troubadourwinebar.com/minneapolis-troubadour-wine-bar-happy-hours-specials" property="og:url"/><meta content="Troubadour is the best place for wine in the Twin Cities. Itâs cozy, chic, welcoming, and always a good time. This little wine bar has given me some of the best memories and nights out I�..." property="og:description"/><meta content="https://static.spotapps.co/website_images/ab_websites/106490_website_v2/logo.png" property="og:image"/><meta content="Troubadour Wine Bar image" property="og:image:alt"/><meta content="image/png" property="og:image:type"/><meta content="summary_large_image" name="twitter:card"/><meta content="Troubadour Wine Bar - Specials" name="twitter:title"/><meta content="Troubadour is the best place for wine in the Twin Cities. Itâs cozy, chic, welcoming, and always a good time. This little wine bar has given me some of the best memories and nights out I�..." name="twitter:description"/><meta content="https://static.spotapps.co/website_images/ab_websites/106490_website_v2/logo.png" name="twitter:image"/><title>Troubadour Wine Bar - Specials</title><!-- wbv 1.62.0 --><meta content="1.62.0" name="wbv"/>
13<script>document.cookie='resolution='+Math.max(screen.width,screen.height)+("devicePixelRatio" in window ? ","+devicePixelRatio : ",1")+'; path=/';</script>
13<link href="https://static.spotapps.co/website_images/ab_websites/106490_website_v2/favicons/favicon-96x96.png" rel="icon" sizes="96x96" type="image/png"/><link href="https://static.spotapps.co/website_images/ab_websites/106490_website_v2/favicons/favicon.svg" rel="icon" type="image/svg+xml"/><link href="https://static.spotapps.co/website_images/ab_websites/106490_website_v2/favicons/favicon.ico" rel="shortcut icon"/><link href="https://static.spotapps.co/website_images/ab_websites/106490_website_v2/favicons/apple-touch-icon.png" rel="apple-touch-icon" sizes="180x180"/><meta content="Troubadour Wine Bar" name="apple-mobile-web-app-title"/><link href="https://static.spotapps.co/website_images/ab_websites/106490_website_v2/favicons/site.webmanifest" rel="manifest"/><link href="https://static.spotapps.co/web/troubadourwinebar--com/lib/bootstrap/css/bootstrap.min.css" rel="stylesheet"/><link href="https://static.spotapps.co/web/troubadourwinebar--com/lib/font-awesome-4.7.0/css/font-awesome.min.css" rel="stylesheet"/><link href="https://static.spotapps.co/web/troubadourwinebar--com/lib/hover_css/css/hover-min.css" rel="stylesheet"/><link href="https://static.spotapps.co/web/troubadourwinebar--com/lib/owlcarousel/owl.carousel.min.css" rel="stylesheet"/><link href="https://static.spotapps.co/web/troubadourwinebar--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/troubadourwinebar--com/css/style.css?version2" id="mainCSS" rel="stylesheet"/><link href="https://static.spotapps.co/web/troubadourwinebar--com/css/bottom_navigation_v1.css?v1786703848" rel="stylesheet"/><link href="css/custom.css?v1786703848&domain=troubadourwinebar.com" rel="stylesheet"/><link href="https://static.spotapps.co/web/troubadourwinebar--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/troubadourwinebar--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 .specials-background { 18 background: url(https://static.spotapps.co/website_images/ab_websites/106490_website_v2/specials_pg_back.jpg) no-repeat center center fixed; -webkit-background-size: cover; 19 background: linear-gradient(rgba(0, 0, 0, 0.8), rgba(0, 0, 0, 0.8)), url(https://static.spotapps.co/website_images/ab_websites/106490_website_v2/specials_pg_back.jpg) no-repeat center center fixed; 20 -webkit-background-size: cover; 21 -moz-background-size: cover; 22 -o-background-size: cover; 23 background-size: cover; 24 } 25 </style>
25<script src="https://static.spotapps.co/websites/lib/lazysizes/lazysizes.min.js" async=""></script>
25<script> 26function ga_check(){ 27 return true; 28} 29</script>
29<script> 30function universal_ga(action, type, category, ev_action, label){ 31 if(typeof ga === 'function') 32 { 33 if(!(action && label)) 34 ga(action, type, category) 35 else 36 ga(action, type, category, ev_action, label) 37 } 38 39 if(typeof gtag === 'function') 40 { 41 if(!(action && label)) 42 { 43 hash = category 44 ev_label = hash["eventLabel"] 45 var splits = ev_label.match(/.{1,100}/g) ?? []; 46 delete(hash["eventLabel"]) 47 48 if(splits.length <= 1) 49 hash["eventLabel"] = ev_label 50 else 51 { 52 for (let i = 0; i < splits.length; i++) { 53 var key = "eventLabel_"+i 54 hash[key] = splits[i] 55 } 56 } 57 console.log(hash) 58 gtag("event", hash["eventCategory"], hash); 59 } 60 else 61 { 62 var hash = { 63 eventCategory: category, 64 eventAction: ev_action 65 } 66 67 var splits = label.match(/.{1,100}/g) ?? []; 68 if(splits.length <= 1) 69 hash["eventLabel"] = label 70 else 71 { 72 for (let i = 0; i < splits.length; i++) { 73 var key = "eventLabel_"+i 74 hash[key] = splits[i] 75 } 76 } 77 gtag("event", hash["eventCategory"], hash); 78 } 79 } 80} 81</script>
81<script> function getPromotionUrlParams(){ 82 var params_str = sessionStorage.getItem('shUrlParams'); 83 if (params_str != null){ 84 return JSON.parse(params_str); 85 }else{ 86 return {}; 87 } 88 } 89 90 function getPromotionSourceDetails(){ 91 var params_str = localStorage.getItem('promotionSourceDetails'); 92 if (params_str != null){ 93 return JSON.parse(params_str); 94 }else{ 95 return {}; 96 } 97 } 98 99 function getLastEmailVisitInDays(){ 100 var promotionSourceDetails = getPromotionSourceDetails(); 101 if (!promotionSourceDetails['last_visit_email'] ){ 102 return null; 103 } 104 return Math.floor((new Date() - new Date(promotionSourceDetails['last_visit_email'])) / (1000 * 60 * 60 * 24)); 105 } 106 107 function getLastSocialVisitInDays(){ 108 var promotionSourceDetails = getPromotionSourceDetails(); 109 if (!promotionSourceDetails['last_visit_social'] ){ 110 return null; 111 } 112 return Math.floor((new Date() - new Date(promotionSourceDetails['last_visit_social'])) / (1000 * 60 * 60 * 24)); 113 } 114 115 var shUrlParams = getPromotionUrlParams(); 116 var promotionSourceDetails = getPromotionSourceDetails(); 117 118 new URL(document.location).searchParams.forEach(function(value, paramName){ 119 120 shUrlParams[paramName] = value; 121 122 if (paramName == 'source' && value =='social' ){ 123 promotionSourceDetails['last_visit_social'] = new Date(); 124 localStorage.setItem('promotionSourceDetails', JSON.stringify(promotionSourceDetails)); 125 } 126 127 if (paramName == 'source' && value =='email' ){ 128 promotionSourceDetails['last_visit_email'] = new Date(); 129 localStorage.setItem('promotionSourceDetails', JSON.stringify(promotionSourceDetails)); 130 } 131 132 }); 133 134 sessionStorage.setItem('shUrlParams', JSON.stringify(shUrlParams)) 135</script>
135<style>a:focus:not(:focus-visible){outline:none;box-shadow:none;} 136a.get-directions-footer-link{display:inline-block;transform-origin:left center;transition:transform .2s ease;} 137a.get-directions-footer-link:hover{transform:scale(1.08);} 138@media (prefers-reduced-motion:reduce){a.get-directions-footer-link{transition:none;transform:none;}} 139a.get-directions-footer-link,a.get-directions-footer-link:hover{color:inherit!important;}</style></head><body class="drink-menu specials specials-background"><div><header style="background-color:#000000;"><style> 140 141 .nav-v7 .navbar-logo .container { 142 height: 70px; 143 } 144 .nav-v7 .navbar-logo .header-logo img { 145 max-height: 70px; 146 } 147 148 149.navbar.nav-v6 .navbar-logo .container { 150 height: 90px; 151 padding-top: 10px; 152 padding-bottom: 10px; 153} 154.navbar.nav-v6.nav-scroll .navbar-logo .container { 155 height: 60px; 156 padding-top: 0px; 157 padding-bottom: 0px; 158} 159.navbar.nav-v6 .header-logo img { 160 max-width: 100%; 161} 162.navbar.nav-v6.nav-scroll .header-logo img { 163 max-width: 80%; 164} 165.nav-v7 .navbar-logo .header-logo img { 166 max-height: 90px; 167} 168.nav-v7.nav-scroll .navbar-logo .header-logo img { 169 max-height: 60px; 170} 171 172@media (max-width: 767px) { 173 /* DO NOT change mobile nav height on page scroll */ 174 .navbar.nav-v6 .navbar-header, 175 .navbar.nav-v6.nav-scroll .navbar-header { 176 padding-top: 10px; 177 padding-bottom: 10px; 178 } 179 .navbar.nav-v6 .socialnav, 180 .navbar.nav-v6.nav-scroll .socialnav { 181 margin-top: 10px; 182 } 183 .navbar.nav-v6 .container, 184 .navbar.nav-v6.nav-scroll .container { 185 padding-top: 0; 186 padding-bottom: 0; 187 } 188 .navbar.nav-v6 .header-logo, 189 .navbar.nav-v6.nav-scroll .header-logo { 190 height: 70px; 191 } 192 .navbar.nav-v6 .header-logo img { 193 max-height: 100%; 194 } 195 .navbar.nav-v6.nav-scroll .header-logo img { 196 max-width: 100%; 197 } 198 /* HOME page CHANGE mobile nav height on page scroll */ 199 /* Remove body.home-page from below code if there should be mobile nav height change on ALL pages */ 200 body.home-page .navbar.nav-v6 .navbar-header { 201 padding-top: 10px; 202 padding-bottom: 10px; 203 } 204 body.home-page .navbar.nav-v6.nav-scroll .navbar-header{ 205 padding-top: 0px; 206 padding-bottom: 0px; 207 } 208 body.home-page .navbar.nav-v6 .socialnav { 209 margin-top: 10px; 210 } 211 body.home-page .navbar.nav-v6.nav-scroll .socialnav { 212 margin-top: 0px; 213 } 214 body.home-page .navbar.nav-v6 .container{ 215 padding-top: 0; 216 padding-bottom: 0; 217 } 218 body.home-page .navbar.nav-v6.nav-scroll .container { 219 padding-top: 0; 220 padding-bottom: 0; 221 } 222 body.home-page .navbar.nav-v6 .header-logo { 223 height: 70px; 224 } 225 body.home-page .navbar.nav-v6.nav-scroll .header-logo { 226 height: 50px; 227 } 228 body.home-page .navbar.nav-v6 .header-logo img { 229 max-height: 100%; 230 max-width: 100%; 231 } 232 body.home-page .navbar.nav-v6.nav-scroll .header-logo img { 233 max-width: 80%; 234 } 235} 236 237 238.navbar-regular .navbar-collapse.collapse.in { 239 background-color: transparent; 240 width: 100%; 241} 242.navbar.nav-v6 .navbar-tabs { 243 background-color: rgba(255,255,255,0.6); 244 -webkit-box-shadow: 0px 4px 4px 0px rgba(0,0,0,0); 245 -moz-box-shadow: 0px 4px 4px 0px rgba(0,0,0,0); 246 box-shadow: 0px 4px 4px 0px rgba(0,0,0,0); 247} 248.navbar.nav-v6.nav-scroll .navbar-tabs { 249 background-color: #F1EFEF; 250 -webkit-box-shadow: 0px 4px 4px 0px rgba(0,0,0,0.4); 251 -moz-box-shadow: 0px 4px 4px 0px rgba(0,0,0,0.4); 252 box-shadow: 0px 4px 4px 0px rgba(0,0,0,0.4); 253} 254.drink-menu .navbar.nav-v6 .navbar-tabs { 255 background-color: #F1EFEF; 256 -webkit-box-shadow: 0px 4px 4px 0px rgba(0,0,0,0); 257 -moz-box-shadow: 0px 4px 4px 0px rgba(0,0,0,0); 258 box-shadow: 0px 4px 4px 0px rgba(0,0,0,0); 259} 260.drink-menu .navbar.nav-v6.nav-scroll .navbar-tabs { 261 background-color: #F1EFEF; 262 -webkit-box-shadow: 0px 4px 4px 0px rgba(0,0,0,0.4); 263 -moz-box-shadow: 0px 4px 4px 0px rgba(0,0,0,0.4); 264 box-shadow: 0px 4px 4px 0px rgba(0,0,0,0.4); 265} 266li.drop-down-link .sub-menu { 267 background-color: rgba(255,255,255,0.6); 268 color: #33201F; 269 } 270.nav-scroll li.drop-down-link .sub-menu { 271 background-color: #F1EFEF; 272 color: #33201F; 273} 274.drink-menu li.drop-down-link .sub-menu { 275 background-color: #F1EFEF; 276 color: #33201F; 277} 278.drink-menu .nav-scroll li.drop-down-link .sub-menu { 279 background-color: #F1EFEF; 280 color: #33201F; 281} 282li.drop-down-link .sub-menu a, 283li.drop-down-link div.drop-down { 284 color: #33201F; 285} 286.nav-scroll li.drop-down-link .sub-menu a, 287.nav-scroll li.drop-down-link div.drop-down { 288 color: #33201F; 289} 290.drink-menu li.drop-down-link .sub-menu a, 291.drink-menu li.drop-down-link div.drop-down { 292 color: #33201F; 293} 294.drink-menu .nav-scroll li.drop-down-link .sub-menu a, 295.drink-menu .nav-scroll li.drop-down-link div.drop-down { 296 color: #33201F; 297} 298 299.navbar.nav-v6 .navbar-logo { 300 background-color: rgba(255,255,255,0.6); 301} 302.navbar.nav-v6.nav-scroll .navbar-logo { 303 background-color: #F1EFEF; 304} 305.drink-menu .navbar.nav-v6 .navbar-logo { 306 background-color: #F1EFEF; 307} 308.drink-menu .navbar.nav-v6.nav-scroll .navbar-logo { 309 background-color: #F1EFEF; 310} 311 312.navbar-regular.nav-v6 .navbar-nav>li>a, 313.navbar-regular.nav-v6 .navbar-nav>li>a:hover, 314.navbar-regular.nav-v6 .navbar-nav>.active>a, 315.navbar-regular.nav-v6 .navbar-nav>.active>a:focus, 316.navbar-regular.nav-v6 .navbar-nav>.active>a:hover{ 317 border: none; 318 border-right: 1px solid #33201F; 319 background-color: transparent; 320 color: #B34E14; 321} 322.navbar-regular.nav-v6 .navbar-nav>li>a { 323 color: #33201F; 324} 325.drink-menu .navbar.nav-v6 .navbar-nav>li>a { 326 color: #33201F; 327 border-right: 1px solid #33201F; 328} 329.drink-menu .navbar-regular.nav-v6 .navbar-nav>li>a:hover, 330.drink-menu .navbar-regular.nav-v6 .navbar-nav>.active>a, 331.drink-menu .navbar-regular.nav-v6 .navbar-nav>.active>a:focus, 332.drink-menu .navbar-regular.nav-v6 .navbar-nav>.active>a:hover{ 333 color: #B34E14; 334} 335 336li.drop-down-link .sub-menu a:hover, 337li.drop-down-link .sub-menu a:focus{ 338 color: #B34E14; 339} 340.drink-menu li.drop-down-link .sub-menu a:hover, 341.drink-menu li.drop-down-link .sub-menu a:focus { 342 color: #B34E14; 343} 344 345.navbar-regular.nav-v7 .navbar-contact .navbar-nav>li>a, 346.navbar-regular.nav-v7 .navbar-contact .navbar-nav>li>a:hover, 347.navbar-regular.nav-v7 .navbar-contact .navbar-nav>.active>a, 348.navbar-regular.nav-v7 .navbar-contact .navbar-nav>.active>a:focus, 349.navbar-regular.nav-v7 .navbar-contact .navbar-nav>.active>a:hover{ 350 color: #B34E14; 351} 352.navbar-regular.nav-v7 .navbar-contact .navbar-nav>li>a { 353 color: #33201F; 354} 355.drink-menu .navbar.nav-v7 .navbar-nav>li>a { 356 color: #33201F; 357} 358.drink-menu .navbar-regular.nav-v7 .navbar-contact .navbar-nav>li>a { 359 color: #fff; 360} 361.drink-menu .navbar-regular.nav-v7 .navbar-contact .navbar-nav>li>a:hover, 362.drink-menu .navbar-regular.nav-v7 .navbar-contact .navbar-nav>.active>a, 363.drink-menu .navbar-regular.nav-v7 .navbar-contact .navbar-nav>.active>a:focus, 364.drink-menu .navbar-regular.nav-v7 .navbar-contact .navbar-nav>.active>a:hover {
365 color: #B34E14; 366} 367 368.navbar-regular.nav-v6 .navbar-toggle .icon-bar { 369 background-color: #33201F; 370} 371.drink-menu .navbar-regular.nav-v6 .navbar-toggle .icon-bar { 372 background-color: #33201F; 373} 374.navbar-regular.nav-v6 [aria-expanded="true"].navbar-toggle .icon-bar { 375 background-color: #B34E14; 376} 377.drink-menu .navbar-regular.nav-v6 [aria-expanded="true"].navbar-toggle .icon-bar { 378 background-color: #B34E14; 379} 380.navbar-regular.nav-v6.nav-scroll .navbar-nav>li>a, 381.navbar-regular.nav-v6.nav-scroll .navbar-nav>li>a:hover, 382.navbar-regular.nav-v6.nav-scroll .navbar-nav>.active>a, 383.navbar-regular.nav-v6.nav-scroll .navbar-nav>.active>a:focus, 384.navbar-regular.nav-v6.nav-scroll .navbar-nav>.active>a:hover{ 385 border: none; 386 border-right: 1px solid #33201F; 387 color: #B34E14; 388} 389.navbar-regular.nav-v6.nav-scroll .navbar-nav>li>a { 390 color: #33201F; 391} 392.drink-menu .navbar.nav-v6.nav-scroll .navbar-nav>li>a { 393 color: #33201F; 394 border-right: 1px solid #33201F; 395} 396.drink-menu .navbar-regular.nav-v6.nav-scroll .navbar-nav>li>a:hover, 397.drink-menu .navbar-regular.nav-v6.nav-scroll .navbar-nav>.active>a, 398.drink-menu .navbar-regular.nav-v6.nav-scroll .navbar-nav>.active>a:focus, 399.drink-menu .navbar-regular.nav-v6.nav-scroll .navbar-nav>.active>a:hover { 400 color: #B34E14; 401} 402 403.nav-scroll li.drop-down-link .sub-menu a:hover, 404.nav-scroll li.drop-down-link .sub-menu a:focus { 405 color: #B34E14; 406} 407.drink-menu .nav-scroll li.drop-down-link .sub-menu a:hover, 408.drink-menu .nav-scroll li.drop-down-link .sub-menu a:focus { 409 color: #B34E14; 410} 411 412.navbar-regular.nav-v6.nav-scroll .navbar-contact .navbar-nav>li>a, 413.navbar-regular.nav-v6.nav-scroll .navbar-contact .navbar-nav>li>a:hover, 414.navbar-regular.nav-v6.nav-scroll .navbar-contact .navbar-nav>.active>a, 415.navbar-regular.nav-v6.nav-scroll .navbar-contact .navbar-nav>.active>a:focus, 416.navbar-regular.nav-v6.nav-scroll .navbar-contact .navbar-nav>.active>a:hover { 417 color: #e26735; 418} 419.navbar-regular.nav-v6.nav-scroll .navbar-contact .navbar-nav>li>a { 420 color: #fff; 421} 422.drink-menu .navbar.nav-v6.nav-scroll .navbar-contact .navbar-nav>li>a { 423 color: #33201F; 424} 425.drink-menu .navbar-regular.nav-v6.nav-scroll .navbar-contact .navbar-nav>li>a:hover, 426.drink-menu .navbar-regular.nav-v6.nav-scroll .navbar-contact .navbar-nav>.active>a, 427.drink-menu .navbar-regular.nav-v6.nav-scroll .navbar-contact .navbar-nav>.active>a:focus, 428.drink-menu .navbar-regular.nav-v6.nav-scroll .navbar-contact .navbar-nav>.active>a:hover{ 429 color: #B34E14; 430} 431 432.navbar-regular.nav-v6.nav-scroll .navbar-toggle .icon-bar { 433 background-color: #33201F; 434} 435.drink-menu .navbar-regular.nav-v6.nav-scroll .navbar-toggle .icon-bar { 436 background-color: #33201F; 437} 438.navbar-regular.nav-v6.nav-scroll [aria-expanded="true"].navbar-toggle .icon-bar { 439 background-color: #B34E14; 440} 441.drink-menu .navbar-regular.nav-v6.nav-scroll [aria-expanded="true"].navbar-toggle .icon-bar{ 442 background-color: #B34E14; 443} 444.navbar.nav-v6 .header-logo-text{ 445 color: #33201F; 446} 447.navbar.nav-v6.nav-scroll .header-logo-text{ 448 color: #33201F; 449} 450.navbar.nav-v6 .social-icon{ 451 color: #33201F; 452} 453.navbar.nav-v6.nav-scroll .social-icon{ 454 color: #33201F; 455} 456.navbar.nav-v6 .social-square .contact-icon:hover { 457 color: #33201F; 458 background-color: #B34E14; 459} 460.navbar.nav-v6.nav-scroll .social-square .contact-icon:hover { 461 color: #33201F; 462 background-color: #B34E14; 463} 464 465.drink-menu .navbar.nav-v6 .header-logo-text{ 466 color: #33201F; 467} 468.drink-menu .navbar.nav-v6.nav-scroll .header-logo-text{ 469 color: #33201F; 470} 471.drink-menu .navbar.nav-v6 .social-icon{ 472 color: #33201F; 473} 474.drink-menu .navbar.nav-v6.nav-scroll .social-icon{ 475 color: #33201F; 476} 477.drink-menu .navbar.nav-v6 .social-square .contact-icon:hover { 478 color: #33201F; 479 background-color: #B34E14; 480} 481.drink-menu .navbar.nav-v6.nav-scroll .social-square .contact-icon:hover { 482 color: #33201F; 483 background-color: #B34E14; 484} 485.navbar.nav-v6 .navbar-logo .container { 486 border-bottom: 1px solid transparent; 487} 488.navbar.nav-v6.nav-scroll .navbar-logo .container { 489 border-bottom: 1px solid transparent; 490} 491.drink-menu .navbar.nav-v6 .navbar-logo .container { 492 border-bottom: 1px solid transparent; 493} 494.drink-menu .navbar.nav-v6.nav-scroll .navbar-logo .container { 495 border-bottom: 1px solid transparent; 496} 497@media (max-width: 767px) { 498 .navbar.nav-v6 { 499 background-color: rgba(255,255,255,0.6); 500 -webkit-box-shadow: 0px 4px 4px 0px rgba(0,0,0,0); 501 -moz-box-shadow: 0px 4px 4px 0px rgba(0,0,0,0); 502 box-shadow: 0px 4px 4px 0px rgba(0,0,0,0); 503 } 504 .navbar.nav-v6.nav-scroll { 505 background-color: #F1EFEF; 506 -webkit-box-shadow: 0px 4px 4px 0px rgba(0,0,0,0.4); 507 -moz-box-shadow: 0px 4px 4px 0px rgba(0,0,0,0.4); 508 box-shadow: 0px 4px 4px 0px rgba(0,0,0,0.4); 509 } 510 .drink-menu .navbar.nav-v6 { 511 background-color: #F1EFEF; 512 -webkit-box-shadow: 0px 4px 4px 0px rgba(0,0,0,0); 513 -moz-box-shadow: 0px 4px 4px 0px rgba(0,0,0,0); 514 box-shadow: 0px 4px 4px 0px rgba(0,0,0,0); 515 } 516 .drink-menu .navbar.nav-v6.nav-scroll { 517 background-color: #F1EFEF; 518 -webkit-box-shadow: 0px 4px 4px 0px rgba(0,0,0,0.4); 519 -moz-box-shadow: 0px 4px 4px 0px rgba(0,0,0,0.4); 520 box-shadow: 0px 4px 4px 0px rgba(0,0,0,0.4); 521 } 522 .navbar.nav-v6 .container, 523 .navbar.nav-v6.nav-scroll .container, 524 .drink-menu .navbar.nav-v6 .container, 525 .drink-menu .navbar.nav-v6.nav-scroll .container { 526 border-bottom: none; 527 } 528 .navbar.nav-v6 .navbar-header { 529 border-bottom: 2px solid transparent; 530 } 531 .navbar.nav-v6.nav-scroll .navbar-header { 532 border-bottom: 2px solid transparent; 533 } 534 .drink-menu .navbar.nav-v6 .navbar-header { 535 border-bottom: 2px solid transparent; 536 } 537 .drink-menu .navbar.nav-v6.nav-scroll .navbar-header { 538 border-bottom: 2px solid transparent; 539 } 540 li.drop-down-link .sub-menu, 541 .drink-menu li.drop-down-link .sub-menu { 542 background-color: transparent; 543 } 544 .nav-scroll li.drop-down-link .sub-menu, 545 .drink-menu .nav-scroll li.drop-down-link .sub-menu { 546 background-color: transparent; 547 } 548 /* Mobile home background */ 549 .navbar.nav-v6.navbar-regular.mobile-full-height .navbar-collapse.collapse, 550 .navbar.nav-v6.navbar-regular.mobile-full-height .navbar-collapse.collapsing, 551 .navbar.nav-v6.navbar-regular.mobile-full-height .navbar-collapse.collapse.in { 552 background-color: rgb(255, 255, 255); 553 } 554 /* Mobile home background scroll */ 555 .navbar.nav-v6.navbar-regular.nav-scroll.mobile-full-height .navbar-collapse.collapse, 556 .navbar.nav-v6.navbar-regular.nav-scroll.mobile-full-height .navbar-collapse.collapsing, 557 .navbar.nav-v6.navbar-regular.nav-scroll.mobile-full-height .navbar-collapse.collapse.in { 558 background-color: #f1efef; 559 } 560 /* Mobile pages background */ 561 .drink-menu .navbar.nav-v6.navbar-regular.mobile-full-height .navbar-collapse.collapse, 562 .drink-menu .navbar.nav-v6.navbar-regular.mobile-full-height .navbar-collapse.collapsing, 563 .drink-menu .navbar.nav-v6.navbar-regular.mobile-full-height .navbar-collapse.collapse.in { 564 background-color: #f1efef; 565 } 566 /* Mobile pages background scroll */ 567 .drink-menu .nav-v6.navbar-regular.nav-scroll.mobile-full-height .navbar-collapse.collapse, 568 .drink-menu .nav-v6.navbar-regular.nav-scroll.mobile-full-height .navbar-collapse.collapsing, 569 .drink-menu .nav-v6.navbar-regular.nav-scroll.mobile-full-height .navbar-collapse.collapse.in { 570 background-color: #f1efef; 571 } 572 .navbar-regular.nav-v6 .navbar-nav>li>a:hover, 573 .navbar-regular.nav-v6 .navbar-nav>.active>a, 574 .navbar-regular.nav-v6 .navbar-nav>.active>a:focus, 575 .navbar-regular.nav-v6 .navbar-nav>.active>a:hover{ 576 background-color: #B34E14; 577 color: #33201F; 578 } 579 .navbar-regular.nav-v6.nav-scroll .navbar-nav>li>a:hover, 580 .navbar-regular.nav-v6.nav-scroll .navbar-nav>.active>a, 581 .navbar-regular.nav-v6.nav-scroll .navbar-nav>.active>a:focus, 582 .navbar-regular.nav-v6.nav-scroll .navbar-nav>.active>a:hover{ 583 background-color: #B34E14; 584 color: #33201F; 585 } 586 .drink-menu .navbar-regular.nav-v6 .navbar-nav>li>a:hover, 587 .drink-menu .navbar-regular.nav-v6 .navbar-nav>.active>a, 588 .drink-menu .navbar-regular.nav-v6 .navbar-nav>.active>a:focus, 589 .drink-menu .navbar-regular.nav-v6 .navbar-nav>.active>a:hover{ 590 background-color: #B34E14; 591 color: #33201F; 592 } 593 .drink-menu .navbar-regular.nav-v6.nav-scroll .navbar-nav>li>a:hover, 594 .drink-menu .navbar-regular.nav-v6.nav-scroll .navbar-nav>.active>a, 595 .drink-menu .navbar-regular.nav-v6.nav-scroll .navbar-nav>.active>a:focus, 596 .drink-menu .navbar-regular.nav-v6.nav-scroll .navbar-nav>.active>a:hover{ 597 background-color: #B34E14; 598 color: #33201F; 599 } 600 601 .navbar-regular.nav-v6 li.drop-down-link.active .drop-down .fa.fa-angle-up { 602 color: #33201F; 603 } 604 .navbar-regular.nav-v6.nav-scroll li.drop-down-link.active .drop-down .fa.fa-angle-up { 605 color: #33201F; 606 } 607 .drink-menu .navbar-regular.nav-v6 li.drop-down-link.active .drop-down .fa.fa-angle-up { 608 color: #33201F; 609 } 610 .drink-menu .navbar-regular.nav-v6.nav-scroll li.drop-down-link.active .drop-down .fa.fa-angle-up { 611 color: #33201F; 612 } 613} 614</style><!-- nav --><nav class="navbar nav-v4 nav-v6 nav-v7 navbar-regular navbar-fixed-top mobile-full-height" 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-logo"><div class="container"><a class="header-logo logo-top" href="/#"><img alt="Troubadour Wine Bar logo top - Homepage" aria-label="Homepage" class="img-responsive logo-top" src="https://static.spotapps.co/website_images/ab_websites/106490_website_v2/logo.png"/></a><a class="header-logo logo-scroll" href="/"><img alt="Troubadour Wine Bar logo scroll - Homepage" aria-label="Homepage" class="img-responsive logo-scroll" src="https://static.spotapps.co/website_images/ab_websites/106490_website_v2/logo.png"/></a><div class="navbar-contact"><ul class="nav navbar-nav navbar-right"><li class="nav-phone"><a href="tel:+16128714073"><i aria-hidden="true" class="fa fa-phone"></i><span>(612)-871-4073</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"> 615 616 Menu 617 618 </a></li><li class=" "><a class="" href="/drink-menu" id="nav_tab_2_link" target="_self"> 619 620 Drinks 621 622 </a></li><li class="active "><a class="" href="/happy-hours-specials" id="nav_tab_3_link" target="_self"> 623 624 Specials 625 626 </a></li><li class=" nav-catering-link"><a class="link-catering-sh" href="https://tmt.spotapps.co/catering?spot_id=106490&callback_url=http://troubadourwinebar.com/minneapolis-troubadour-wine-bar-happy-hours-specials#" id="nav_tab_4_link" target="_self"> 627 628 Catering 629 630 </a></li><li class=" "><a class="" href="/events" id="nav_tab_5_link" target="_self"> 631 632 Events 633 634 </a></li><li class=" nav-parties-link"><a class="link-parties-sh" href="https://tmt.spotapps.co/private-parties?spot_id=106490&callback_url=http://troubadourwinebar.com/minneapolis-troubadour-wine-bar-happy-hours-specials#" id="nav_tab_6_link" target="_self"> 635 636 Parties 637 638 </a></li><li class=" nav-jobs-link"><a class="link-jobs-sh" href="https://tmt.spotapps.co/job-listings?spot_id=106490&callback_url=http://troubadourwinebar.com/minneapolis-troubadour-wine-bar-happy-hours-specials#" id="nav_tab_7_link" target="_self"> 639 640 Jobs 641 642 </a></li><li class=" nav-reservations-link"><a class="link-reservations-sh" href="https://tmt.spotapps.co/reservations?spot_id=106490&callback_url=http://troubadourwinebar.com/minneapolis-troubadour-wine-bar-happy-hours-specials#" id="nav_tab_8_link" target="_self"> 643 644 Reserve 645 646 </a></li><li class=" gift-cards-nav"><a class="gift-cards-link" href="https://app.squareup.com/gift/MLK23B0QYC426/order" id="nav_tab_10_link" target="_blank"> 647 648 Gift Cards 649 650 </a></li><li class=" "><a class="" href="/wine-tasting-booking" id="nav_tab_11_link" target="_self"> 651 652 Wine Tasting Booking 653 654 </a></li><li class=" additional-tab outside-link"><a class="additional-link" href="https://troubadour.thethirdplace.is/" id="nav_tab_12_link" target="_blank"> 655 656 WINE CLUB 657 658 </a></li></ul><ul class="socialnav"><li class="social-links social-icons-holder social-square"><a class="pull-left contact-icon" href="https://www.instagram.com/troubadourwinebar" target="_blank"><i class="social-icon fa fa-instagram"></i><span>Instagram page</span></a></li><li class="social-links social-icons-holder social-square"><a class="pull-left contact-icon" href="https://www.yelp.com/biz/troubadour-wine-bar-minneapolis?start=20" target="_blank"><i aria-hidden="true" class="social-icon fa fa-yelp"></i><span>Yelp page</span></a></li></ul></div></div></div></div><div class="mobile-navigation"><div class="container"><a class="header-logo logo-top" href="/#"><img alt="Troubadour Wine Bar logo top - Homepage" aria-label="Homepage" class="img-responsive logo-top" src="https://static.spotapps.co/website_images/ab_websites/106490_website_v2/logo.png"/></a><a class="header-logo logo-scroll" href="/"><img alt="Troubadour Wine Bar logo scroll - Homepage" aria-label="Homepage" class="img-responsive logo-scroll" src="https://static.spotapps.co/website_images/ab_websites/106490_website_v2/logo.png"/></a><ul class="socialnav"><li class="social-links social-icons-holder social-square"><a class="pull-left contact-icon" href="https://www.instagram.com/troubadourwinebar" target="_blank"><i class="social-icon fa fa-instagram"></i><span>Instagram page</span></a></li><li class="social-links social-icons-holder social-square"><a class="pull-left contact-icon" href="https://www.yelp.com/biz/troubadour-wine-bar-minneapolis?start=20" target="_blank"><i aria-hidden="true" class="social-icon fa fa-yelp"></i><span>Yelp page</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=" nav-menu-page"><a class="" href="/food-menu" id="mobile_nav_tab_1_link" target="_self"> 659 Menu 660 </a></li><li class=" "><a class="" href="/drink-menu" id="mobile_nav_tab_2_link" target="_self"> 661 Drinks 662 </a></li><li class="active "><a class="" href="/happy-hours-specials" id="mobile_nav_tab_3_link" target="_self"> 663 Specials 664 </a></li><li class=" nav-catering-link"><a class="link-catering-sh" href="https://tmt.spotapps.co/catering?spot_id=106490&callback_url=http://troubadourwinebar.com/minneapolis-troubadour-wine-bar-happy-hour
664s-specials#" id="mobile_nav_tab_4_link" target="_self"> 665 Catering 666 </a></li><li class=" "><a class="" href="/events" id="mobile_nav_tab_5_link" target="_self"> 667 Events 668 </a></li><li class=" nav-parties-link"><a class="link-parties-sh" href="https://tmt.spotapps.co/private-parties?spot_id=106490&callback_url=http://troubadourwinebar.com/minneapolis-troubadour-wine-bar-happy-hours-specials#" id="mobile_nav_tab_6_link" target="_self"> 669 Parties 670 </a></li><li class=" nav-jobs-link"><a class="link-jobs-sh" href="https://tmt.spotapps.co/job-listings?spot_id=106490&callback_url=http://troubadourwinebar.com/minneapolis-troubadour-wine-bar-happy-hours-specials#" id="mobile_nav_tab_7_link" target="_self"> 671 Jobs 672 </a></li><li class=" nav-reservations-link"><a class="link-reservations-sh" href="https://tmt.spotapps.co/reservations?spot_id=106490&callback_url=http://troubadourwinebar.com/minneapolis-troubadour-wine-bar-happy-hours-specials#" id="mobile_nav_tab_8_link" target="_self"> 673 Reserve 674 </a></li><li class=" gift-cards-nav"><a class="gift-cards-link" href="https://app.squareup.com/gift/MLK23B0QYC426/order" id="mobile_nav_tab_10_link" target="_blank"> 675 Gift Cards 676 </a></li><li class=" "><a class="" href="/wine-tasting-booking" id="mobile_nav_tab_11_link" target="_self"> 677 Wine Tasting Booking 678 </a></li><li class=" additional-tab outside-link"><a class="additional-link" href="https://troubadour.thethirdplace.is/" id="mobile_nav_tab_12_link" target="_blank"> 679 WINE CLUB 680 </a></li></ul></div></div></div></nav></header><main id="content" role="main"><article><div class="pagecontent"><div class="tabnav"></div><div class="tabs-container"><div class="scrolling"><div class="container"><h1 class="page-title">Specials</h1><section><div class="onespecial"><h2>Wednesday October 7th</h2><!-- Sunday may 8th --><div class="row"><div class="col-sm-8"> 681 Wine Flight Wednesday! Discounted build your own custom wine flights from our glass list (or have your bartender build you a flight from your own tastes). </div><div class="col-sm-4 text-right"> 682 05:00 PM - 07:00 PM </div></div></div></section><section><div class="onespecial"><h2>Thursday October 8th</h2><!-- Sunday may 8th --><div class="row"><div class="col-sm-8"> 683 Tapas & Wine Thursday 684Enjoy a complimentary tapas plate with the purchase of a bottle of wine. Perfect for date night or just treating yourself! 5:00 PM - 10:00 PM </div><div class="col-sm-4 text-right"> 685 05:00 PM - 10:00 PM </div></div></div></section><section><div class="onespecial"><h2>Monday October 12th</h2><!-- Sunday may 8th --><div class="row"><div class="col-sm-8"> 686 ð· Industry Night at Troubadour! ð·ð¶ 687 688Service industry folks, this oneâs for you! Whether you're slinging drinks, serving tables, or running the show behind the scenes, youâve earned a night to kick back and enjoy some great wine and even better vibes. 689 690⨠Industry Night Specials: 691ð· $2 off all wine pours 692ð§ 15% off charcuterie boards 693 694Plus, enjoy live music by Phil Berbig at 7 PM! ð¸ 695 696ð Troubadour Wine Bar | Monday | Doors open at 5 PM 697 698Tag your crew, grab a glass, and letâs make Monday the new Friday. See you there! ð·ð¶ </div><div class="col-sm-4 text-right"> 699 05:00 PM - 10:00 PM </div></div></div></section></div></div></div></div></article></main></div><style type="text/css"> 700 .navbar-fixed-bottom.nav-v1 { 701 bottom: -100px; 702 } 703 .navbar-fixed-bottom.nav-v1 .nav.navbar-nav.navbar-right { 704 background-color: #f1eff0; 705 } 706 .navbar-fixed-bottom.nav-v1 .bottom-svg-border path, 707 .navbar-fixed-bottom.nav-v1 .bottom-svg-border polygon { 708 fill: #000; 709 } 710 .navbar-fixed-bottom.nav-v1 .bottom-list-item a { 711 color: #33201F; 712 } 713 .navbar-fixed-bottom.nav-v1 .bottom-list-item a:hover, 714 .navbar-fixed-bottom.nav-v1 .bottom-list-item a:focus { 715 color: #B34E14; 716 text-decoration: none; 717 } 718</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="bottom-list-item "><a class="bottom-link " href="https://tmt.spotapps.co/reservations?spot_id=106490&callback_url=http://troubadourwinebar.com/minneapolis-troubadour-wine-bar-happy-hours-specials" id="bottom_link_3" target="_self"> 719 Reserve </a></li><li class="bottom-list-item "><a class="bottom-link " href="https://tmt.spotapps.co/private-parties?spot_id=106490&callback_url=http://troubadourwinebar.com/minneapolis-troubadour-wine-bar-happy-hours-specials" id="bottom_link_5" target="_self"> 720 Parties </a></li><li class="bottom-list-item "><a class="bottom-link " href="https://tmt.spotapps.co/catering?spot_id=106490&callback_url=http://troubadourwinebar.com/minneapolis-troubadour-wine-bar-happy-hours-specials" id="bottom_link_6" target="_self"> 721 Catering </a></li><li class="bottom-list-item "><a class="bottom-link " href="https://tmt.spotapps.co/job-listings?spot_id=106490&callback_url=http://troubadourwinebar.com/minneapolis-troubadour-wine-bar-happy-hours-specials" id="bottom_link_7" target="_self"> 722 Jobs </a></li></ul></div></nav>
722<script src="https://static.spotapps.co/web/troubadourwinebar--com/lib/jquery/jquery.min.js"></script>
722<script src="https://static.spotapps.co/web/troubadourwinebar--com/lib/bootstrap/js/bootstrap.min.js"></script>
722<script> 723 724 $("#bottom_link_3").on("click", function(){ 725 if (ga_check()) 726 universal_ga('send', 'event', 'Button', 'Click', 'Reserve'); 727 }); 728 $("#bottom_link_5").on("click", function(){ 729 if (ga_check()) 730 universal_ga('send', 'event', 'Button', 'Click', 'Private Party'); 731 }); 732 $("#bottom_link_6").on("click", function(){ 733 if (ga_check()) 734 universal_ga('send', 'event', 'Button', 'Click', 'Catering'); 735 }); 736 $("#bottom_link_7").on("click", function(){ 737 if (ga_check()) 738 universal_ga('send', 'event', 'Button', 'Click', 'Jobs'); 739 }); 740 $('.header-logo, .nav-v2-home-btn').click(function(event) { 741 if ( window.location.pathname == '/' || window.location.pathname == '/index.php') { 742 event.preventDefault(); 743 var windowScrollTop = $(window).scrollTop(); 744 if(windowScrollTop > 150) { 745 $('html, body').animate({scrollTop: 0}, 750); 746 } 747 } 748 }); 749 750$(".banner-section a.banner-pin").click(function(e) { 751 // target element id 752 var id = $(this).attr('href'); 753 754 // target element 755 var section = $(id); 756 if (section.length === 0) { 757 return; 758 } 759 760 // prevent standard hash navigation (avoid blinking in IE) 761 e.preventDefault(); 762 763 // top position relative to the document 764 var pos = section.offset().top - 100 + 10; 765 766 // animated top scrolling 767 $('body, html').animate({scrollTop: pos}, 750); 768}); 769 770$(document).ready(function() { 771 var navHeight = $('nav.navbar').height(); 772 $('html').css("scroll-padding-top", navHeight); 773}); 774 775$(document).on('scroll', function (e) { 776 if($(document).scrollTop() > 0) { 777 $('.navbar.nav-v7').addClass('nav-scroll'); 778 }else { 779 $('.navbar.nav-v7').removeClass('nav-scroll'); 780 } 781}); 782 783$(function() { 784 setDropDownMenuWidth(); 785 786 function setDropDownMenuWidth() { 787 var tabs_list = $('.navbar-tabs .navbar-nav'); 788 789 $(tabs_list).find('li.drop-down-link').each(function() { 790 var sub_menu_width = $(this).outerWidth(true); 791 if (sub_menu_width < 100) { 792 sub_menu_width = 100; 793 } 794 $(this).find('.sub-menu').css('width', sub_menu_width+'px'); 795 }); 796 } 797 798 $( window ).resize(function() { 799 setDropDownMenuWidth(); 800 }); 801 802 $('.nav a:not(.drop-down)').on('click', function () { 803 $('.navbar-collapse').collapse('hide'); 804 }); 805 806}); 807 808 809 810$( '.drop-down-link .drop-down' ).click(function(event) { 811 event.preventDefault(); 812 event.stopPropagation(); 813 814 var drop_down = $(this).closest('.drop-down-link'); 815 var drop_down_a = $(this); 816 817 if($(drop_down_a).attr("aria-expanded") == "true") { 818 $(drop_down_a).attr("aria-expanded",false) 819 } else { 820 $(drop_down_a).attr("aria-expanded",true) 821 } 822 823 var sub_menu = $(this).closest('.drop-down-link').find( '.sub-menu' ); 824 825 if ( $(sub_menu).is( ':hidden' ) ) { 826 $(sub_menu).slideDown(); 827 $(drop_down).addClass('active'); 828 } else { 829 $(sub_menu).slideUp(); 830 $(drop_down).removeClass('active'); 831 } 832}); 833 834$(".nav-v7 .navbar-contact .nav-address a").click(function(e) { 835 836 if ( window.location.pathname == '/' || window.location.pathname == '/index.php') { 837 // target element id 838 var id = $(this).attr('href').substr(1); 839 840 // target element 841 var section = $(id); 842 if (section.length === 0) { 843 return; 844 } 845 846 // prevent standard hash navigation (avoid blinking in IE) 847 e.preventDefault(); 848 849 // top position relative to the document 850 var pos = section.offset().top - 100 + 10; 851 852 // animated top scrolling 853 $('body, html').animate({scrollTop: pos}, 750); 854 855 } 856}); 857 858const mobileDrop = document.querySelector('.mobile-full-height #navbar-collapse-1 .navbar-nav'); 859const mobileDropButton = document.querySelector('.mobile-full-height .navbar-toggle'); 860const mobileHeader = document.querySelector('.mobile-full-height .navbar-header'); 861 862mobileDropButton?.addEventListener('click', () => { 863 mobileHeaderBottomPos = mobileHeader.getBoundingClientRect().bottom; 864 mobileDrop.style.paddingTop = mobileHeaderBottomPos + 'px'; 865}); 866 867(function () { 868 const isSafari = (() => { 869 const ua = navigator.userAgent; 870 return ua.includes('Safari') && // Safari must be present
871 !ua.includes('Chrome') && // Exclude Chrome (has 'Safari' in UA) 872 !ua.includes('Edg'); // Exclude Edge 873 })(); 874 875 if (!isSafari) return; 876 const menu = document.getElementById('navbar-collapse-1'); 877 878 // When coming back from a _blank tab or bfcache restore, force a repaint. 879 function nudgeRepaint() { 880 if (!menu || !menu.classList.contains('in')) return; 881 // toggle display to flush rendering, then poke will-change for one frame 882 const prev = menu.style.display; 883 menu.style.display = 'none'; 884 // force reflow 885 void menu.offsetHeight; 886 menu.style.display = prev || ''; 887 menu.style.willChange = 'opacity'; 888 requestAnimationFrame(() => { menu.style.willChange = 'auto'; }); 889 } 890 891 document.addEventListener('visibilitychange', () => { 892 if (document.visibilityState === 'visible') nudgeRepaint(); 893 }); 894 895 // iOS/macOS Safari often restores pages from bfcache 896 window.addEventListener('pageshow', (e) => { 897 if (e.persisted) nudgeRepaint(); 898 else nudgeRepaint(); 899 }, { passive: true }); 900 901 // Keep menu open when clicking links that open in a new tab 902 menu?.addEventListener('click', (e) => { 903 const a = e.target.closest('a'); 904 if (!a) return; 905 if (a.target === '_blank') { 906 // avoid any delegated "close on link click" handlers firing first 907 e.stopPropagation(); 908 // allow navigation; after we return, repaint nudge will run 909 } 910 }, true); 911})(); 912 913document.querySelectorAll('.navbar .navbar-nav > li.cta-nav-tab').forEach((li) => { 914 li.addEventListener('click', (e) => { 915 if (e.defaultPrevented) return; 916 917 if (e.target.closest('a')) return; 918 919 const link = li.querySelector('a[href]'); 920 if (!link) return; 921 922 if (e.metaKey || e.ctrlKey || e.shiftKey || e.button === 1 || link.target === '_blank') { 923 window.open(link.href, link.target || '_blank'); 924 return; 925 } 926 927 link.click(); 928 }); 929 930 li.addEventListener('keydown', (e) => { 931 if ((e.key === 'Enter' || e.key === ' ') && !e.target.closest('a')) { 932 const link = li.querySelector('a[href]'); 933 if (!link) return; 934 e.preventDefault(); 935 link.click(); 936 } 937 }); 938}); 939 setTimeout(function(){ 940 $('.navbar-fixed-bottom.nav-v1').addClass('show-bottom-nav'); triggerShowFooterEvents(); 941 }, 4000);</script>
941<script> 942(function() { 943 var name = "Troubadour Wine Bar"; 944 var pid = "ChIJ4cpkI4An9ocRUeKan3gteto"; 945 function build_url() { 946 var q = encodeURIComponent(name).replace(/'/g, "%27"); 947 return "https://www.google.com/maps/search/?api=1" 948 + "&query=" + q 949 + "&query_place_id=" + encodeURIComponent(pid); 950 } 951 window.google_map_url = build_url(); 952 window.open_google_map = function() { 953 window.open(build_url(), "_blank"); 954 }; 955})(); 956</script>
956<script> 957 958 var spot_id = 106490; 959 var sh_generic_form_params=JSON.parse('{"generic_contact_form_active":true,"texting_permissions_active":true,"title":"Contact us","instructions":"Please fill out the form and we will be in touch.","reasons":["To host a special event","To get a special event catered","To reserve a table","To apply for a job","Other Questions"],"custom_hours":"","hours":"","active_tmt_cta_links":{"cta_private_party":"https://tmt.spotapps.co/private-parties?spot_id=106490","cta_catering":"https://tmt.spotapps.co/catering?spot_id=106490","cta_reservations":"https://tmt.spotapps.co/reservations?spot_id=106490","cta_jobs":"https://tmt.spotapps.co/job-listings?spot_id=106490"},"spot_name":"Troubadour Wine Bar","label_for_texting_permission":"Iâd like to get texts about specials, events, and other exclusive offers and announcements not available to general public"}'); 960 961 if (false){ 962 console.log("Check SpotHopper configuration. Probably there is no 'WEBSITE::DOMAIN_NAME' key for your website"); 963 } 964 965 if (navigator.userAgent.match(/iPhone/i) 966 || navigator.userAgent.match(/iPad/i) 967 || navigator.userAgent.match(/iPod/i)){ 968 $(document).ready(function(){ 969 document.body.className += " " + "webkit-mobile-body"; 970 }); 971 } 972 973 var promotion_url_param_domain = getPromotionUrlParams()['domain']; 974 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')){ 975 $("a[href^='/']").each(function(){ 976 if (this.href.indexOf('domain=') == -1){ 977 var sh_internal_url = new URL(this.href); 978 sh_internal_url.searchParams.set("domain", promotion_url_param_domain); 979 this.href = sh_internal_url.toString(); 980 } 981 }) 982 } 983 984 985 function cta_link_matches_href(href, url){ 986 var domain = 'troubadourwinebar.com'; 987 if(typeof url === 'undefined'){ 988 return false; 989 } 990 var partsOfURL = url.split(domain); 991 if (partsOfURL.length != 2){ 992 return href == url; 993 }else{ 994 var urlPath = partsOfURL[1]; 995 if (urlPath.substring(0,1) == "/"){ 996 urlPath = urlPath.substring(1,urlPath.length); 997 } 998 return href.indexOf(urlPath, domain.length + href.indexOf(domain)-1) !== -1; 999 } 1000 } 1001 1002 var all_cta_links = [{"id":729269,"spot_id":106490,"url":"https://troubadourwinebar.com/-food-menu","cta_link_type":"food_menu","created_at":"2023-01-26T11:16:01.091+00:00","updated_at":"2026-03-30T09:31:07.011+00:00","made_of_food":false,"link_name":"","position":null},{"id":729267,"spot_id":106490,"url":"https://troubadourwinebar.com/-events","cta_link_type":"events","created_at":"2023-01-26T11:16:01.049+00:00","updated_at":"2026-03-30T09:31:06.927+00:00","made_of_food":false,"link_name":"","position":null},{"id":713518,"spot_id":106490,"url":"https://tmt.spotapps.co/private-parties?spot_id=106490","cta_link_type":"private_parties","created_at":"2022-10-05T18:44:25.738+00:00","updated_at":"2026-03-30T09:31:06.883+00:00","made_of_food":false,"link_name":"Private Parties","target":null,"website_footer_label":"Parties","position":3},{"id":713520,"spot_id":106490,"url":"https://tmt.spotapps.co/job-listings?spot_id=106490","cta_link_type":"job_listing","created_at":"2022-10-05T18:46:58.052+00:00","updated_at":"2026-03-30T09:31:07.180+00:00","made_of_food":false,"link_name":"Job Listing","target":null,"website_footer_label":"Jobs","position":2},{"id":729266,"spot_id":106490,"url":"https://troubadourwinebar.com/-specials","cta_link_type":"specials","created_at":"2023-01-26T11:16:01.007+00:00","updated_at":"2026-03-30T09:31:06.769+00:00","made_of_food":false,"link_name":"","position":null},{"id":729268,"spot_id":106490,"url":"https://troubadourwinebar.com/-drink-menu","cta_link_type":"drink_menu","created_at":"2023-01-26T11:16:01.070+00:00","updated_at":"2026-03-30T09:31:06.969+00:00","made_of_food":false,"link_name":"","position":null},{"id":713521,"spot_id":106490,"url":"https://tmt.spotapps.co/reservations?spot_id=106490","cta_link_type":"reservations","created_at":"2022-10-05T18:49:10.970+00:00","updated_at":"2026-03-30T09:31:07.053+00:00","made_of_food":false,"link_name":"Reservations","target":null,"website_footer_label":"Reserve","position":1},{"id":1020556,"spot_id":106490,"url":"https://tmt.spotapps.co/catering?spot_id=106490","cta_link_type":"catering","created_at":"2024-0
10027-30T13:53:21.439+00:00","updated_at":"2026-03-30T09:31:07.093+00:00","made_of_food":false,"link_name":"Catering","target":null,"website_footer_label":"Catering","position":4},{"id":729270,"spot_id":106490,"url":"https://app.squareup.com/gift/MLK23B0QYC426/order","cta_link_type":"gift_cards","created_at":"2023-01-26T11:16:01.134+00:00","updated_at":"2026-03-30T09:31:07.136+00:00","made_of_food":false,"link_name":"","target":null,"website_footer_label":"Gift Cards","position":5}]; 1003 1004 function find_cta_link(href) { 1005 for (var i=0; i< all_cta_links.length; i++){ 1006 var cta_link = all_cta_links[i]; 1007 if ( cta_link_matches_href(href, cta_link.url)){ 1008 return cta_link; 1009 } 1010 } 1011 } 1012 1013 function find_cta_links(href) { 1014 var cta_links = [] 1015 for (var i=0; i< all_cta_links.length; i++){ 1016 var cta_link = all_cta_links[i]; 1017 if ( cta_link_matches_href(href, cta_link.url)){ 1018 cta_links.push(cta_link); 1019 } 1020 } 1021 return cta_links; 1022 } 1023 1024 1025 function get_current_page_cta_link_types(){ 1026 var types = []; 1027 var cta_links = find_cta_links(document.location.href); 1028 for (var i=0; i<cta_links.length; i++){ 1029 types.push(cta_links[i].cta_link_type); 1030 } 1031 return types; 1032 } 1033 1034 1035 function is_food_menu_page(){ 1036 var cta_link_types = get_current_page_cta_link_types(); 1037 for (var i=0; i<cta_link_types.length; i++){ 1038 if ('food_menu' == cta_link_types[i]) 1039 return true; 1040 } 1041 return false; 1042 } 1043 1044 1045 function get_form_cat_from_cta(){ 1046 var cta_link = find_cta_link(document.location.href); 1047 if (cta_link == null) { 1048 return null; 1049 } 1050 if (cta_link.cta_link_type == 'private_parties'){ 1051 return 'private_party'; 1052 }else if (cta_link.cta_link_type == 'reservations'){ 1053 return 'reservation'; 1054 }else if (cta_link.cta_link_type == 'catering'){ 1055 return 'catering'; 1056 }else if (cta_link.cta_link_type == 'job_listing'){ 1057 return 'job_listings'; 1058 }else if (cta_link.cta_link_type == 'gift_cards'){ 1059 return 'gift_cards'; 1060 } 1061 return null; 1062 } 1063 1064 function element_has_events_defined(elem){ 1065 if ($._data(elem, "events") === undefined){ 1066 return false; 1067 } 1068 return true; 1069 } 1070 1071 function create_ga_events_for_cta_clicks(){ 1072 if (typeof $ === 'function'){ 1073 1074 var cta_link_of_the_page = find_cta_link(location.href); 1075 1076 1077 $("a").each(function(index, elem){ 1078 var href = $(elem).attr('href'); 1079 1080 if (href === undefined ){ 1081 return; 1082 } 1083 1084 if (href.substring(0,4) == 'tel:'){ 1085 if (!element_has_events_defined(elem)){ // not footer links 1086 $(elem).on("click", function(){ 1087 universal_ga('send', 'event', { 1088 eventCategory: 'Button', 1089 eventAction: 'Click', 1090 eventLabel: 'Phone', 1091 transport: 'beacon' 1092 }); 1093 }); 1094 1095 if (cta_link_of_the_page){ 1096 $(elem).on("click", function(){ 1097 universal_ga('send', 'event', { 1098 eventCategory: 'Button', 1099 eventAction: 'Click', 1100 eventLabel: cta_link_of_the_page.cta_link_type + ' page phone', 1101 transport: 'beacon' 1102 }); 1103 }); 1104 } 1105 } else { 1106 if (cta_link_of_the_page){ 1107 $(elem).on("click", function(){ 1108 universal_ga('send', 'event', { 1109 eventCategory: 'Button', 1110 eventAction: 'Click', 1111 eventLabel: cta_link_of_the_page.cta_link_type + ' page phone footer', 1112 transport: 'beacon' 1113 }); 1114 }); 1115 } 1116 } 1117 1118 1119 }else{ 1120 var cta_link = find_cta_link(href); 1121 if (elem.className != null && elem.className.indexOf("bottom-link") > -1){ 1122 // console.log("bottom link detected"); 1123 }else{ 1124 if (cta_link != null){ 1125 $(elem).on("click", function(){ 1126 universal_ga('send', 'event', { 1127 eventCategory: 'Website Link', 1128 eventAction: 'Click', 1129 eventLabel: cta_link.cta_link_type, 1130 transport: 'beacon' 1131 }); 1132 }); 1133 } 1134 } 1135 } 1136 1137 1138 }); 1139 } 1140 } 1141 1142 if (typeof angular === "undefined") { 1143 create_ga_events_for_cta_clicks(); 1144 } else { 1145 angular.element(document).ready(function () { 1146 create_ga_events_for_cta_clicks(); 1147 }); 1148 } 1149 1150 1151 function triggerShowFooterEvents(){
1152 if (window.screen.availWidth < 768){ 1153 universal_ga('send', 'event', { 1154 eventCategory: 'Mobile Footer', 1155 eventAction: 'View', 1156 eventLabel: '', 1157 transport: 'beacon' 1158 }); 1159 } 1160 } 1161 1162 1163 1164 1165 //////////// 1166 function smartFooterV2() 1167 { 1168 var list= document.getElementsByClassName("bottom-list-item"); 1169 if (!list) return; 1170 1171 if (document.getElementById("bottom-navbar") == null){ 1172 return; 1173 } 1174 1175 var bottomNav = document.querySelector('#bottom-navbar .navbar-nav'); 1176 var footerLinkPaddingLeft = $('#bottom-navbar .navbar-nav li a').css('padding-left'); 1177 var footerLinkPaddingRight = $('#bottom-navbar .navbar-nav li a').css('padding-right'); 1178 1179 bottomNav.innerHTML = ''; 1180 var linksWithPosition = all_cta_links.filter(e => e.position != null && e.position >= 0); 1181 linksWithPosition.sort(function(a,b) { 1182 return a.position - b.position; 1183 }); 1184 1185 var footerLinkStyle = (footerLinkPaddingLeft == '0px' || footerLinkPaddingRight == '0px' ? 'style="padding-left: 8px; padding-right: 8px;"' : ''); 1186 1187 linksWithPosition.forEach((e, i) => { 1188 var target = e.target || getUrlTarget(e.url); 1189 bottomNav.insertAdjacentHTML('beforeend', 1190 `<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>`); 1191 }) 1192 1193 var intervalCount = 0 1194 var interval = setInterval(() => { 1195 if(intervalCount == 50){ 1196 clearInterval(interval); 1197 } 1198 removeOverflowingFooterLinks(); 1199 intervalCount ++; 1200 }, 200); 1201 1202 $('.smart-footer-link').on("click", function(){ 1203 if (typeof shUrlParams !== "undefined" && shUrlParams['source'] === undefined){ 1204 shUrlParams['source'] = 'footer'; 1205 sessionStorage.setItem('shUrlParams', JSON.stringify(shUrlParams)); 1206 } 1207 1208 var visibleLinks = $('.smart-footer-link').map(function (e) { 1209 return $(this).data('type'); 1210 }).toArray().join(','); 1211 1212 universal_ga('send', 'event', { 1213 eventCategory: 'Button', 1214 eventAction: 'Click_footer_2', 1215 eventLabel: "type:" + $(this).data('type') + "|position:" + $(this).data('position') + "|visible:" + visibleLinks, 1216 transport: 'beacon' 1217 }); 1218 }); 1219 } 1220 1221 function removeOverflowingFooterLinks(){ 1222 var bottomNavLinks = document.querySelectorAll('#bottom-navbar .navbar-nav li'); 1223 var width_sum = 0; 1224 1225 bottomNavLinks.forEach(e => { 1226 width_sum += e.getBoundingClientRect().width; 1227 if ((width_sum) > window.innerWidth) { 1228 console.log(`%cLink %c${e.textContent} %cdeleted couldn't fit screen`,"color: #fff;background: #202124;", "background: red;color: #fff", "color: #fff;background: #202124;"); 1229 e.remove(); 1230 } 1231 }); 1232 } 1233 1234 function getUrlTarget(url){ 1235 if(url.startsWith('tel')){ 1236 return '_self'; 1237 } 1238 if(url.startsWith('/') || url.includes('tmt.spotapps.co') || url.includes(window.location.host)){ 1239 return '_self'; 1240 } 1241 return '_blank'; 1242 } 1243 1244 function npb() 1245 { 1246 var list= document.getElementsByClassName("bottom-list-item"); 1247 if (!list) return; 1248 1249 if (document.getElementById("bottom-navbar") == null){ 1250 return; 1251 } 1252 1253 var url = "" 1254 for (var i=0; i < all_cta_links.length; i++) 1255 { 1256 if (all_cta_links[i].cta_link_type == "order"){ 1257 url = all_cta_links[i].url; 1258 } 1259 } 1260 1261 if ( url == ""){ 1262 return; 1263 } 1264 1265 for (i=0; i < list.length; i++) 1266 { 1267 console.log(cta_link_matches_href(list[i].firstChild.href, url)); 1268 if (cta_link_matches_href(list[i].firstChild.href,url)) return; 1269 1270 }; 1271 1272 var item = list[list.length-1] 1273 document.getElementById("bottom-navbar").getElementsByClassName("nav navbar-nav")[0].appendChild(item.cloneNode(true)); 1274 var width_sum = 0; 1275 for (i=0; i < list.length; i++) { 1276 width_sum += list[i].getBoundingClientRect().width; 1277 } 1278 1279 var item = list[list.length-1] 1280 if ((width_sum - 10) > window.innerWidth) { item.parentNode.removeChild(item); console.log("link deleted couldn't fit screen"); return; } 1281 1282 item.firstChild.text = "Order"; 1283 item.firstChild.href = url; 1284 item.firstChild.id = "bottom_link_" + list.length; 1285 1286 $(item.firstChild).on("click", function(){ 1287 1288 if (typeof shUrlParams !== "undefined" && shUrlParams['source'] === undefined){ 1289 shUrlParams['source'] = 'footer'; 1290 sessionStorage.setItem('shUrlParams', JSON.stringify(shUrlParams)); 1291 } 1292 1293 universal_ga('send', 'event', { 1294 eventCategory: 'Button', 1295 eventAction: 'Click', 1296 eventLabel: 'Plan B-2 Order', 1297 transport: 'beacon' 1298 }); 1299 }); 1300 1301 1302 } 1303 1304function activateSmartFooter(){ 1305 var smart_footer_active = true; 1306 var smart_footer_version = 2; 1307 var man_bottom_active = false;
1308 if(window.location.hash == '#smartFooterV2=enabled'){ 1309 smartFooterV2(); 1310 return; 1311 } 1312 if (smart_footer_active && !man_bottom_active){ 1313 if(smart_footer_version == 2 ){ 1314 smartFooterV2(); 1315 }else { 1316 npb(); 1317 } 1318 } 1319 } 1320 1321 activateSmartFooter(); 1322 1323 var corona_config_str = '{"id":19499,"spot_id":106490,"promote_pick_up":true,"promote_gift_cards":true,"promote_happy_hour":true,"promote_events":true,"instructions_on_food_page":false,"food_page_instruction_text":"To place a curbside pick-up order, please call:","food_page_instruction_phone":"6128714073","created_at":"2022-09-28T14:08:47+00:00","updated_at":"2022-10-05T18:39:18+00:00","food_page_button_color":null,"food_page_button_text_color":null,"food_page_link_color":null,"food_page_text_color":null,"wine_and_beer_to_go_license":false,"all_alcoholic_to_go_lincense":false,"current_operating_status":"Offering To Go and Dine-in with Full Capacity","contact_tracing_active":false,"contact_tracing_text":"In cooperation with health guidelines for contact tracing, please fill out the form below.","contact_tracing_address_required":false,"collapse_all":false,"deliveries_priority_value":0,"pick_ups_priority_value":1,"reservations_priority_value":5,"private_parties_priority_value":5,"catering_priority_value":1,"gift_cards_priority_value":3,"jobs_priority_value":1,"food_and_drinks_priority_value":5,"specials_priority_value":3,"national_days_priority_value":3,"holidays_priority_value":3,"sports_priority_value":1,"walk_ins_priority_value":3,"collecting_emails_priority_value":3,"collecting_phone_numbers_priority_value":3,"growing_social_media_followers_priority_value":5,"increasing_revenue_vs_saving_time_priority_value":3,"events_priority_value":3,"shopping_cart_type":"TMT","shopping_cart_active":false}'; 1324 var corona_config = corona_config_str != '' ? JSON.parse('{"id":19499,"spot_id":106490,"promote_pick_up":true,"promote_gift_cards":true,"promote_happy_hour":true,"promote_events":true,"instructions_on_food_page":false,"food_page_instruction_text":"To place a curbside pick-up order, please call:","food_page_instruction_phone":"6128714073","created_at":"2022-09-28T14:08:47+00:00","updated_at":"2022-10-05T18:39:18+00:00","food_page_button_color":null,"food_page_button_text_color":null,"food_page_link_color":null,"food_page_text_color":null,"wine_and_beer_to_go_license":false,"all_alcoholic_to_go_lincense":false,"current_operating_status":"Offering To Go and Dine-in with Full Capacity","contact_tracing_active":false,"contact_tracing_text":"In cooperation with health guidelines for contact tracing, please fill out the form below.","contact_tracing_address_required":false,"collapse_all":false,"deliveries_priority_value":0,"pick_ups_priority_value":1,"reservations_priority_value":5,"private_parties_priority_value":5,"catering_priority_value":1,"gift_cards_priority_value":3,"jobs_priority_value":1,"food_and_drinks_priority_value":5,"specials_priority_value":3,"national_days_priority_value":3,"holidays_priority_value":3,"sports_priority_value":1,"walk_ins_priority_value":3,"collecting_emails_priority_value":3,"collecting_phone_numbers_priority_value":3,"growing_social_media_followers_priority_value":5,"increasing_revenue_vs_saving_time_priority_value":3,"events_priority_value":3,"shopping_cart_type":"TMT","shopping_cart_active":false}') : null; 1325 1326 1327 //corona instuctions 1328 function show_corona_instructions(text, phone, btnText){ 1329 //format to US number 1330 var match = phone.match(/^(\d{3})(\d{3})(\d{4})$/); 1331 1332 if(corona_config.shopping_cart_type == "TMT" && corona_config.shopping_cart_active == true) { 1333 var linkLocation = "https://tmt.spotapps.co/ordering-menu/?spot_id="+corona_config.spot_id+"&images=yes&accordion=true"; 1334 var btnLinkLocation = "https://tmt.spotapps.co/ordering-menu/?spot_id="+corona_config.spot_id+"&images=yes&accordion=true"; 1335 }else { 1336 var linkLocation = 'tel:+1'+phone+''; 1337 var btnLinkLocation = 'tel:+1'+ match[1] + '-' + match[2] + '-' + match[3] +'' 1338 } 1339 var appendPhone = 'tel:+1'+phone+''; 1340 //inject html content 1341 if ($('.food-menu-nav').length) { 1342 //new template 1343 var pageEl = $('.food-menu-nav').css('margin','20px auto 10px auto'); 1344 var textColor = rgb2hex($('.section-header').css('color')); 1345 var linkColor = rgb2hex($('.food-menu-nav-item.active').css('background-color')); 1346 var fontSize = parseInt($('.food-menu-nav-item').css('font-size')); 1347 fontSize = fontSize + Math.round(fontSize * 0.25); 1348
1349 // 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>'; 1350 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>'; 1351 1352 }else { 1353 //old template 1354 var pageEl = $('.tabnav'); 1355 var textColor = rgb2hex($('.menu-item-name-traditional').css('color')); 1356 var linkColor = rgb2hex($('.style-traditional .tabnav .nav>li.active>a').css('color')); 1357 1358 var linkTextColor = getContrast50(linkColor); 1359 var fontSize = parseInt($('.menu-item-name-traditional').css('font-size')); 1360 fontSize = fontSize + Math.round(fontSize * 0.25); 1361 var textTransform = $('.style-traditional .tabnav .nav>li>a').css('text-transform'); 1362 1363 // 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>'; 1364 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>'; 1365 1366 } 1367 //html content 1368 pageEl.prepend(html); 1369 } 1370 1371 function rgb2hex(rgb) { 1372 if(typeof rgb !== "undefined"){ 1373 rgbColor = rgb.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/); 1374 if (!rgbColor) { 1375 rgba = rgb.match(/^rgba?\((\d+),\s*(\d+),\s*(\d+)(,\s*\d+\.*\d+)?\)$/); 1376 return "#" + hex(rgba[1]) + hex(rgba[2]) + hex(rgba[3]); 1377 } 1378 function hex(x) { 1379 return ("0" + parseInt(x).toString(16)).slice(-2); 1380 } 1381 return "#" + hex(rgbColor[1]) + hex(rgbColor[2]) + hex(rgbColor[3]); 1382 } 1383 return rgb; 1384 } 1385 1386 function getContrast50(hexcolor){ 1387 return (parseInt(hexcolor, 16) > 0xffffff/2) ? '#000':'#fff'; 1388 } 1389 1390 function show_corona_sidebar_instructions(text, phone){ 1391 //format to US number 1392 var match = phone.match(/^(\d{3})(\d{3})(\d{4})$/); 1393 var divWidth = 230; 1394 var top = 50; 1395 var linkSize = '1.6em'; 1396 var pSize = $('p').css('font-size'); 1397 var appendPhone = 'tel:+1'+phone+''; 1398 1399 if ($(window).width() < 1600) 1400 var top = 30; 1401 if ($(window).width() < 1200){ 1402 var divWidth = 180; 1403 var linkSize = '1.4em'; 1404 var pSize ='1.1em'; 1405 } 1406 1407 if($('.food-menu-nav').length){ //new template 1408 var textColor = $('.food-menu-nav-item.active').css('color'); 1409 var linkColor = $('.food-menu-nav-item.active').css('background-color'); 1410 1411 var linkTextColor = $('.food-menu-nav-item.active').css('color'); 1412 var parent = $('.food-menu-page'); 1413 } 1414 else { //old template 1415 var textColor = $('.menu-item-name-traditional').css('color'); 1416 var linkColor = $('.style-traditional .tabnav .nav>
1416li.active>a').css('color'); 1417 var parent = $('.food-menu').length ? $('.food-menu') : $('.drink-menu'); 1418 var linkTextColor = getContrast50(linkColor); 1419 } 1420 1421 // $(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>'); 1422 $(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>'); 1423 1424 //check if resolution is bigger than tablet resolution 1425/* if ($(window).width() > 991) { 1426 //detect scroll 1427 window.onscroll = function (e) { 1428 if ($(window).scrollTop() == 0) { 1429 $('#corona-instructions-sidebar').hide(); 1430 }else { 1431 $('#corona-instructions-sidebar').show(); 1432 } 1433 } 1434 } */ 1435 } 1436 1437 function check_corona_config(config){ 1438 console.log(config) 1439 if (config) { 1440 if (config.instructions_on_food_page && config.food_page_instruction_text && config.food_page_instruction_phone) { 1441 if (!config.promote_deliveries && config.promote_pick_up) { 1442 var btnText = 'Call For Pick Up'; 1443 } 1444 if (config.promote_deliveries && !config.promote_pick_up) { 1445 var btnText = 'Call For Delivery'; 1446 } 1447 if (config.promote_deliveries && config.promote_pick_up) { 1448 var btnText = 'Call For Pick Up Or Delivery'; 1449 } 1450 1451 if(typeof btnText !== "undefined"){ // check if pick up or delivery are true 1452 if(config.shopping_cart_type == "TMT" && config.shopping_cart_active == true) { 1453 var btnText = 'ORDER NOW'; 1454 if($('.food-menu-nav').length){ //new template 1455 var textColor = rgb2hex($('.section-header').css('color')); 1456 var linkColor = rgb2hex($('.food-menu-nav-item.active').css('background-color')); 1457 var fontSize = parseInt($('.food-menu-nav-item').css('font-size')); 1458 fontSize = fontSize + Math.round(fontSize * 0.25); 1459 } 1460 else { //old template 1461 var textColor = rgb2hex($('.menu-item-name-traditional').css('color')); 1462 var linkColor = rgb2hex($('.style-traditional .tabnav .nav>li.active>a').css('color')); 1463 1464 var linkTextColor = getContrast50(linkColor); 1465 var fontSize = parseInt($('.menu-item-name-traditional').css('font-size')); 1466 fontSize = fontSize + Math.round(fontSize * 0.25); 1467 } 1468 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); 1469 show_corona_sidebar_instructions(btnText, config.food_page_instruction_phone); 1470 } else { 1471 show_corona_instructions(config.food_page_instruction_text, config.food_page_instruction_phone, btnText); 1472 show_corona_sidebar_instructions(btnText, config.food_page_instruction_phone); 1473 } 1474 1475 } 1476 } 1477 } 1478 } 1479 1480 1481 if (is_food_menu_page() && !window.location.search.includes("contactless=true")){ 1482 $( document ).ready(function() { 1483 setTimeout(function(){ 1484 check_corona_config(corona_config); 1485 }, 300); 1486 }); 1487 } 1488 1489 1490 1491 function isPhone(phone){ 1492 var regex = /^(\+\d{1,2}\s?)?\(?\d{3}\)?[\s.-]?\d{3}[\s.-]?\d{4}$/; 1493 return regex.test(phone); 1494 } 1495 1496 function sendEmail_MT (input_id) { 1497 const $loader = $("[data-id=newsletter-widget-2] .sph-loading-img"); 1498 1499 const $step = { 1500 form: $("[data-id=newsletter-widget-2] .sph-email-form"), 1501 message: $("[data-id=newsletter-widget-2] .sph-response-message"), 1502 } 1503 1504 const $field = { 1505 email: $("[data-id=newsletter-widget-2] #sph-newsletter-input-" + input_id), 1506 phone: $("[data-id=newsletter-widget-2] #sph-newsletter-phone-" + input_id), 1507 consent: $("[data-id=newsletter-widget-2] #sph-newsletter-checkbox-phone-" + input_id), 1508 }; 1509 1510 const $error = { 1511 email: $("[data-id=newsletter-widget-2] #sph-newsletter-email-error-" + input_id), 1512 phone: $("[data-id=newsletter-widget-2] #sph-newsletter-phone-error-" + input_id), 1513 }; 1514 1515 if ($field.email.val().trim() === "") { 1516 $error.email 1517 .html("This field is required") 1518 .show(); 1519 } 1520 else if (!isEmail($field.email.val().trim())) { 1521 $error.email 1522 .html("Please use the format â[email protected]â") 1523 .show(); 1524 } else { 1525 $error.email 1526 .html("") 1527 .hide(); 1528 } 1529 1530 if ($field.consent.is(':checked') && $field.phone.val().trim() === "") { 1531 $error.phone 1532 .html("This field is required") 1533 .show(); 1534 } else if ($field.phone.val().trim().length > 0 && !isPhone($field.phone.val().trim())) { 1535 $error.phone 1536 .html("The phone number must contain 10 digits") 1537 .show(); 1538 } else { 1539 $error.phone 1540 .html("") 1541 .hide(); 1542 } 1543 1544 const errorField = $step.form.find('.sh-form-error:visible'); 1545 1546 if (errorField.length > 0) { 1547 const input = errorField.first().next(); 1548 1549 document.activeElement.blur(); 1550 1551 setTimeout(() => { 1552 input.focus(); 1553 }, 160) 1554 1555 return; 1556 } 1557 1558 $loader 1559 .show() 1560 .prev() 1561 .hide(); 1562 1563 $.ajax({ 1564 method: "POST", 1565 url: "https://www.spothopperapp.com/api/spots/106490/contacts/add_with_texting_permission", 1566 crossDomain: true, 1567 dataType: 'json', 1568 data: { 1569 email: $field.email.val().trim(), 1570 phone: $field.phone.val().trim(), 1571 texting_permission: $field.consent.is(':checked'), 1572 }, 1573 success: function (data) { 1574 afterRequestSubmission(data); 1575 }, 1576 error: function () { 1577 afterRequestSubmission("Something went wrong. Please try again later."); 1578 } 1579 }); 1580 1581 function afterRequestSubmission (data) { 1582 $step.form.hide(); 1583 1584 $step.message 1585 .html(data) 1586 .show() 1587 .trigger('focus'); 1588 } 1589 } 1590</script>
1590<script>function addPromotionParamsToTMTLinks() 1591{ 1592 if (sessionStorage.getItem('shUrlParams')) { 1593 let shParams = JSON.parse(sessionStorage.getItem('shUrlParams')); 1594 if (!Object.keys(shParams).length) 1595 return; 1596 if(!shParams.source) 1597 return; 1598 $('a').each(function () { 1599 if (this.href.includes('tmt.spotapps.co')) { 1600 if(this.href.includes('&source=') || this.href.includes('&destination=') || this.href.includes('&promotion=')) 1601 return; 1602 1603 this.href = this.href + '&source=' + shParams.source; 1604 if(shParams.destination) 1605 this.href = this.href + '&destination=' + shParams.destination; 1606 if(shParams.promotion) 1607 this.href = this.href + '&promotion=' + shParams.promotion; 1608 if(shParams.fb_post_id) 1609 this.href = this.href + '&fb_post_id=' + shParams.fb_post_id; 1610 if(shParams.email_post_id) 1611 this.href = this.href + '&email_post_id=' + shParams.email_post_id; 1612 } 1613 }) 1614 } 1615} 1616setTimeout(function() { 1617 addPromotionParamsToTMTLinks(); 1618 addFooterToSourceParam(); 1619},600) 1620 1621function addFooterToSourceParam() 1622{ 1623 $('.bottom-link').each(function (){ 1624 if(shouldAddSourceParam(this.href)) 1625 this.href = this.href + '&source=footer'; 1626 }) 1627 $('#sh-multiple-links-content-holder a').each(function (){ 1628 if(shouldAddSourceParam(this.href)) 1629 this.href = this.href + '&source=footer'; 1630 }) 1631} 1632function shouldAddSourceParam(link){ 1633 if (link.includes('tmt.spotapps.co') && !link.includes('&source=')){ 1634 return true; 1635 } 1636 return false; 1637} 1638</script>
1638<script> 1639;(async () => { 1640if (typeof window.focusTrap === 'undefined') { 1641 await getScript('https://unpkg.com/tabbable/dist/index.umd.js'); 1642 await getScript('https://unpkg.com/focus-trap/dist/focus-trap.umd.js'); 1643} 1644 1645document.querySelectorAll('.modal').forEach((element) => { 1646 const trap = window.focusTrap?.createFocusTrap(element, { 1647 allowOutsideClick: true, 1648 }); 1649 1650 $(element).on('shown.bs.modal', () => { 1651 trap?.activate(); 1652 }); 1653 1654 $(element).on('hidden.bs.modal', () => { 1655 trap?.deactivate(); 1656 }); 1657}); 1658 1659async function getScript (source) { 1660 return new Promise((resolve, reject) => { 1661 const script = document.createElement('script'); 1662 script.src = source; 1663 script.async = true; 1664 1665 script.onload = resolve; 1666 script.onerror = reject; 1667 1668 document.head.appendChild(script); 1669 }); 1670} 1671})(); 1672</script>
1672<script>var bday_club_promo = {"bday_club_link":"https://tmt.spotapps.co/vouchers?spot_id=106490&source=website&voucher_offer_id=MjAyMjA5MTQxNDIxKVQG","bday_club_fab":true,"bday_offer_freebie_name":"Free Dessert","bday_offer_short_name":"Free Dessert on your birthday. ","bday_offer_description":"Free Dessert on your birthday. Valid for dine in only with minimum purchase of $20.","bday_club_custom_offer":false,"bday_club_fab_type":"type_1","bday_club_fab_def_style":"light"};</script>
1672<script src="https://wcache-plugins.spotapps.co/production/wcpl_bootstrap_ada_fix/wcpl_bootstrap_ada_fix.js"></script>
1672<link href="https://wcache-plugins.spotapps.co/production/wcpl_bday_club/wcpl_bday_club.css" rel="stylesheet" media="screen"/>
1672<script src="https://wcache-plugins.spotapps.co/production/wcpl_bday_club/wcpl_bday_club.js"></script>
1672<script src="https://wcache-plugins.spotapps.co/production/wcpl_ga_tracking/wcpl_ga_tracking.js"></script>
1672<script src="https://wcache-plugins.spotapps.co/production/wcpl_media_controls/script.js"></script>
1672<link href="https://wcache-plugins.spotapps.co/production/wcpl_website_editor_interpreter/website_interpreter_helper_style.css" rel="stylesheet" media="screen"/>
1672<script>var changes_log_array = {};</script>
1672<script src="https://wcache-plugins.spotapps.co/production/wcpl_website_editor_interpreter/website_interpreter.js"></script>
1672</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.