PageSourceSearch

https://willowsandpine-restaurant.com/-reservations?source=pop_up&…=reservations&promotion=reservations

html willowsandpine-restaurant.com collected 2026-09-30 16:43:36 UTC 71,894 bytes, 1,503 lines download raw bytes

1<!DOCTYPE html>
2�<html lang="en"><head><meta content="null" property="og:site_name"/><meta content="http://willowsandpine-restaurant.com/oakland-dimond-district-willows-and-pine-restaurant-and-catering-reservations" property="og:url"/><meta content="website" property="og:type"/><meta content="..." property="og:description"/><meta content="Willows And Pine Restaurant And Catering - Reservations" 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-9EPG6G1Q7B');
8    gtag('config', 'G-VG24VK2VKT');
9  </script>
9<!-- wcache 2026-09-30 11:46:35.491100Z --><!--
10smart_footer: true,
11smart_footer_version: 2,
12scripting_active: false
13--><link href="https://willowsandpine-restaurant.com/oakland-dimond-district-willows-and-pine-restaurant-and-catering-reservations" 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="https://static.spotapps.co/website_images/ab_websites/294822_website_v1/social_back.jpg" property="og:image"/><meta content="Willows And Pine Restaurant And Catering image" property="og:image:alt"/><meta content="image/png" property="og:image:type"/><meta content="146038661917665" property="fb:app_id"/><meta content="summary_large_image" name="twitter:card"/><meta content="Willows And Pine Restaurant And Catering - Reservations" name="twitter:title"/><meta content="..." name="twitter:description"/><meta content="https://static.spotapps.co/website_images/ab_websites/294822_website_v1/social_back.jpg" name="twitter:image"/><title>Willows And Pine Restaurant And Catering - Reservations</title>
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/294822_website_v1/favicons/apple-touch-icon.png" rel="apple-touch-icon" sizes="180x180"/><link href="https://static.spotapps.co/website_images/ab_websites/294822_website_v1/favicons/favicon-32x32.png" rel="icon" sizes="32x32" type="image/png"/><link href="https://static.spotapps.co/website_images/ab_websites/294822_website_v1/favicons/favicon-16x16.png" rel="icon" sizes="16x16" type="image/png"/><link href="https://static.spotapps.co/website_images/ab_websites/294822_website_v1/favicons/site.webmanifest" rel="manifest"/><link color="#5bbad5" href="https://static.spotapps.co/website_images/ab_websites/294822_website_v1/favicons/safari-pinned-tab.svg" rel="mask-icon"/><link href="https://static.spotapps.co/website_images/ab_websites/294822_website_v1/favicons/favicon.ico" rel="shortcut icon"/><meta content="#da532c" name="msapplication-TileColor"/><meta content="https://static.spotapps.co/website_images/ab_websites/294822_website_v1/favicons/browserconfig.xml" name="msapplication-config"/><meta content="#ffffff" name="theme-color"/><link href="https://static.spotapps.co/web/willowsandpine-restaurant--com/lib/bootstrap/css/bootstrap.min.css" rel="stylesheet"/><link href="https://static.spotapps.co/web/willowsandpine-restaurant--com/lib/custom-scrollbar/jquery.mCustomScrollbar.css" rel="stylesheet"/><link href="https://static.spotapps.co/web/willowsandpine-restaurant--com/lib/font-awesome-4.7.0/css/font-awesome.min.css" rel="stylesheet"/><link href="https://static.spotapps.co/web/willowsandpine-restaurant--com/lib/hover_css/css/hover-min.css" rel="stylesheet"/><link href="https://static.spotapps.co/web/willowsandpine-restaurant--com/lib/owlcarousel/owl.carousel.min.css" rel="stylesheet"/><link href="https://static.spotapps.co/web/willowsandpine-restaurant--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/willowsandpine-restaurant--com/css/style.css?version2" id="mainCSS" rel="stylesheet"/><link href="https://static.spotapps.co/web/willowsandpine-restaurant--com/css/bottom_navigation_v1.css?v1725607068" rel="stylesheet"/><link href="css/custom.css?v1725607068&domain=willowsandpine-restaurant.com" rel="stylesheet"/><link href="https://static.spotapps.co/web/willowsandpine-restaurant--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/willowsandpine-restaurant--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]--><style>
14
15      html {
16        height: auto;
17        min-height: 100%;
18      }
19      .tmt-page.party-background.drink-menu {
20        background-color: #ebebeb;
21                  background-color: #1a1a1a; 
22              }
23              .tmt-page.party-background.drink-menu {
24          background-image: url('//static.spotapps.co/spots/2b/fe8d8a5a114f878ff1d9f0c143faeb/wide_medium');
25        }
26        .tmt-page.party-background.drink-menu:before {
27          display: block;
28                      -webkit-backdrop-filter: blur(5px);
29            backdrop-filter: blur(5px);
30                    background-color: rgba(255,255,255,0.8);
31                      background-color: rgba(0,0,0,0.8); 
32           
33        }
34        .tmt-page.party-background.drink-menu>div:first-child:before {
35          display: none;
36        }
37      
38    </style>
38<script src="https://static.spotapps.co/websites/lib/lazysizes/lazysizes.min.js" async=""></script>
38<script>
39function ga_check(){
40  return true;
41}
42</script>
42<script>
43function universal_ga(action, type, category, ev_action, label){
44  if(typeof ga === 'function')
45  {
46    if(!(action && label))
47      ga(action, type, category)
48    else
49      ga(action, type, category, ev_action, label)
50  }
51
52  if(typeof gtag === 'function')
53  {
54    if(!(action && label))
55    {
56      hash = category
57      ev_label = hash["eventLabel"]
58      var splits = ev_label.match(/.{1,100}/g) ?? [];
59      delete(hash["eventLabel"])
60
61      if(splits.length <= 1)
62        hash["eventLabel"] = ev_label
63      else
64      {
65        for (let i = 0; i < splits.length; i++) {
66          var key = "eventLabel_"+i
67          hash[key] = splits[i]
68        }
69      }
70      console.log(hash)
71      gtag("event", hash["eventCategory"], hash);
72    }
73    else
74    {
75      var hash = {
76        eventCategory: category,
77        eventAction: ev_action
78      }
79
80      var splits = label.match(/.{1,100}/g) ?? [];
81      if(splits.length <= 1)
82        hash["eventLabel"] = label
83      else
84      {
85        for (let i = 0; i < splits.length; i++) {
86          var key = "eventLabel_"+i
87          hash[key] = splits[i]
88        }
89      }
90      gtag("event", hash["eventCategory"], hash);
91    }
92  }
93}
94</script>
94<script>    function getPromotionUrlParams(){
95      var params_str = sessionStorage.getItem('shUrlParams');
96      if (params_str != null){
97        return JSON.parse(params_str);
98      }else{
99        return {};
100      }
101    }
102
103    function getPromotionSourceDetails(){
104        var params_str = localStorage.getItem('promotionSourceDetails');
105        if (params_str != null){
106          return JSON.parse(params_str);
107        }else{
108          return {};
109        }
110    }
111
112    function getLastEmailVisitInDays(){
113      var promotionSourceDetails = getPromotionSourceDetails();
114      if (!promotionSourceDetails['last_visit_email'] ){
115        return null;
116      }
117      return Math.floor((new Date() - new Date(promotionSourceDetails['last_visit_email'])) / (1000 * 60 * 60 * 24));
118    }
119
120    function getLastSocialVisitInDays(){
121      var promotionSourceDetails = getPromotionSourceDetails();
122      if (!promotionSourceDetails['last_visit_social'] ){
123        return null;
124      }
125      return Math.floor((new Date() - new Date(promotionSourceDetails['last_visit_social'])) / (1000 * 60 * 60 * 24));
126    }
127
128    var shUrlParams = getPromotionUrlParams();
129    var promotionSourceDetails = getPromotionSourceDetails();
130
131    new URL(document.location).searchParams.forEach(function(value, paramName){
132
133     shUrlParams[paramName] = value;
134
135     if (paramName == 'source' && value =='social' ){
136       promotionSourceDetails['last_visit_social'] = new Date();
137       localStorage.setItem('promotionSourceDetails', JSON.stringify(promotionSourceDetails));
138     }
139
140     if (paramName == 'source' && value =='email' ){
141       promotionSourceDetails['last_visit_email'] = new Date();
142       localStorage.setItem('promotionSourceDetails', JSON.stringify(promotionSourceDetails));
143     }
144
145    });
146
147    sessionStorage.setItem('shUrlParams', JSON.stringify(shUrlParams))
148</script>
148<style>a:focus:not(:focus-visible){outline:none;box-shadow:none;}
149a.get-directions-footer-link{display:inline-block;transform-origin:left center;transition:transform .2s ease;}
150a.get-directions-footer-link:hover{transform:scale(1.08);}
151@media (prefers-reduced-motion:reduce){a.get-directions-footer-link{transition:none;transform:none;}}
152a.get-directions-footer-link,a.get-directions-footer-link:hover{color:inherit!important;}</style></head><body class="drink-menu party party-background reservations-tmt-page tmt-page" id="tmtPage"><div><header style="background-color:#000000;"><style>
153
154
155.navbar.nav-v6 .container {
156  padding-top: 10px;
157  padding-bottom: 10px;
158}
159.navbar.nav-v6.nav-scroll .container {
160  padding-top: 0px;
161  padding-bottom: 0px;
162}
163.navbar.nav-v6 .header-logo img {
164  max-width: 100%;
165}
166.navbar.nav-v6.nav-scroll .header-logo img {
167  max-width: 80%;
168}
169
170@media (max-width: 767px) {
171  /* DO NOT change mobile nav height on page scroll */
172  .navbar.nav-v6 .navbar-header,
173  .navbar.nav-v6.nav-scroll .navbar-header {
174    padding-top: 10px;
175    padding-bottom: 10px;
176  }
177  .navbar.nav-v6 .socialnav,
178  .navbar.nav-v6.nav-scroll .socialnav {
179    margin-top: 10px;
180  }
181  .navbar.nav-v6 .container,
182  .navbar.nav-v6.nav-scroll .container {
183    padding-top: 0;
184    padding-bottom: 0;
185  }
186  .navbar.nav-v6 .header-logo,
187  .navbar.nav-v6.nav-scroll .header-logo {
188    height: 70px;
189  }
190  .navbar.nav-v6 .header-logo img {
191    max-height: 100%;
192  }
193  .navbar.nav-v6.nav-scroll .header-logo img {
194    max-width: 100%;
195  }
196  /* HOME page CHANGE mobile nav height on page scroll */
197  /* Remove body.home-page from below code if there should be mobile nav height change on ALL pages */
198  body.home-page .navbar.nav-v6 .navbar-header {
199    padding-top: 10px;
200    padding-bottom: 10px;
201  }
202  body.home-page .navbar.nav-v6.nav-scroll .navbar-header{
203    padding-top: 0px;
204    padding-bottom: 0px;
205  }
206  body.home-page .navbar.nav-v6 .socialnav {
207    margin-top: 10px;
208  }
209  body.home-page .navbar.nav-v6.nav-scroll .socialnav {
210    margin-top: 0px;
211  }
212  body.home-page .navbar.nav-v6 .container{
213    padding-top: 0;
214    padding-bottom: 0;
215  }
216  body.home-page .navbar.nav-v6.nav-scroll .container {
217    padding-top: 0;
218    padding-bottom: 0;
219  }
220  body.home-page .navbar.nav-v6 .header-logo {
221    height: 70px;
222  }
223  body.home-page .navbar.nav-v6.nav-scroll .header-logo {
224    height: 50px;
225  }
226  body.home-page .navbar.nav-v6 .header-logo img {
227    max-height: 100%;
228    max-width: 100%;
229  }
230  body.home-page .navbar.nav-v6.nav-scroll .header-logo img {
231    max-width: 80%;
232  }
233}
234
235
236.navbar-regular .navbar-collapse.collapse.in {
237  background-color: transparent;
238  width: 100%;
239}
240.navbar.nav-v6{
241    background-color: #fff;
242    -webkit-box-shadow: 0px 2px 5px 0px rgba(0,0,0,0);
243    -moz-box-shadow: 0px 2px 5px 0px rgba(0,0,0,0);
244    box-shadow: 0px 2px 5px 0px rgba(0,0,0,0);
245    -moz-transition: all 0.3s ease-in-out;
246    -webkit-transition: all 0.3s ease-in-out;
247    -o-transition: all 0.3s ease-in-out;
248    transition: all 0.3s ease-in-out;
249}
250.navbar.nav-v6.nav-scroll{
251    background-color: #fff;
252    -webkit-box-shadow: 0px 2px 5px 0px rgba(0,0,0,0.2);
253    -moz-box-shadow: 0px 2px 5px 0px rgba(0,0,0,0.2);
254    box-shadow: 0px 2px 5px 0px rgba(0,0,0,0.2);
255}
256.drink-menu .navbar.nav-v6{
257  background-color: #fff;
258  -webkit-box-shadow: 0px 2px 5px 0px rgba(0,0,0,0);
259  -moz-box-shadow: 0px 2px 5px 0px rgba(0,0,0,0);
260  box-shadow: 0px 2px 5px 0px rgba(0,0,0,0);
261  -moz-transition: all 0.3s ease-in-out;
262  -webkit-transition: all 0.3s ease-in-out;
263  -o-transition: all 0.3s ease-in-out;
264  transition: all 0.3s ease-in-out;
265}
266.drink-menu .navbar.nav-v6.nav-scroll{
267  background-color: #fff;
268  -webkit-box-shadow: 0px 2px 5px 0px rgba(0,0,0,0.2);
269  -moz-box-shadow: 0px 2px 5px 0px rgba(0,0,0,0.2);
270  box-shadow: 0px 2px 5px 0px rgba(0,0,0,0.2);
271}
272.navbar-regular.nav-v6 .navbar-nav>li>a,
273.navbar-regular.nav-v6 .navbar-nav>li>a:hover,
274.navbar-regular.nav-v6 .navbar-nav>.active>a,
275.navbar-regular.nav-v6 .navbar-nav>.active>a:focus,
276.navbar-regular.nav-v6 .navbar-nav>.active>a:hover{
277  border: none;
278  border-right: 1px solid #272727;
279  background-color: transparent;
280  color: #272727;
281  -moz-transition: all 0.3s ease-in-out;
282  -webkit-transition: all 0.3s ease-in-out;
283  -o-transition: all 0.3s ease-in-out;
284  transition: all 0.3s ease-in-out;
285}
286.navbar-regular.nav-v6 .navbar-nav>li>a {
287  color: #272727;
288}
289.drink-menu .navbar.nav-v6 .navbar-nav>li>a {
290  color: #272727;
291  border-right: 1px solid #272727;
292}
293.drink-menu .navbar-regular.nav-v6 .navbar-nav>li>a:hover,
294.drink-menu .navbar-regular.nav-v6 .navbar-nav>.active>a,
295.drink-menu .navbar-regular.nav-v6 .navbar-nav>.active>a:focus,
296.drink-menu .navbar-regular.nav-v6 .navbar-nav>.active>a:hover{
297  color: #272727;
298}
299li.drop-down-link .sub-menu {
300  background-color: #fff;
301  color: #272727;
302  }
303.nav-scroll li.drop-down-link .sub-menu {
304  background-color: #fff;
305  color: #272727;
306}
307.drink-menu li.drop-down-link .sub-menu {
308  background-color: #fff;
309  color: #272727;
310  }
311.drink-menu .nav-scroll li.drop-down-link .sub-menu {
312  background-color: #fff;
313  color: #272727;
314}
315li.drop-down-link .sub-menu a,
316li.drop-down-link div.drop-down {
317  color: #272727;
318}
319.nav-scroll li.drop-down-link .sub-menu a,
320.nav-scroll li.drop-down-link li.drop-down-link div.drop-down {
321  color: #272727;
322}
323.drink-menu li.drop-down-link .sub-menu a,
324.drink-menu li.drop-down-link div.drop-down {
325  color: #272727;
326}
327.drink-menu .nav-scroll li.drop-down-link .sub-menu a,
328.drink-menu .nav-scroll li.drop-down-link div.drop-down {
329  color: #272727;
330}
331
332li.drop-down-link .sub-menu a:hover,
333li.drop-down-link .sub-menu a:focus {
334  color: #272727;
335}
336.drink-menu li.drop-down-link .sub-menu a:hover,
337.drink-menu li.drop-down-link .sub-menu a:focus {
338  color: #272727;
339}
340
341.navbar-regular.nav-v6 .navbar-toggle .icon-bar {
342  background-color: #272727;
343  -moz-transition: all 0.3s ease-in-out;
344  -webkit-transition: all 0.3s ease-in-out;
345  -o-transition: all 0.3s ease-in-out;
346  transition: all 0.3s ease-in-out;
347}
348.drink-menu .navbar-regular.nav-v6 .navbar-toggle .icon-bar {
349  background-color: #272727;
350}
351.navbar-regular.nav-v6 [aria-expanded="true"].navbar-toggle .icon-bar {
352  background-color: #272727;
353}
354.drink-menu .navbar-regular.nav-v6 [aria-expanded="true"].navbar-toggle .icon-bar{
355  background-color: #272727;
356}
357.navbar-regular.nav-v6.nav-scroll .navbar-nav>li>a,
358.navbar-regular.nav-v6.nav-scroll .navbar-nav>li>a:hover,
359.navbar-regular.nav-v6.nav-scroll .navbar-nav>.active>a,
360.navbar-regular.nav-v6.nav-scroll .navbar-nav>.active>a:focus,
361.navbar-regular.nav-v6.nav-scroll .navbar-nav>.active>a:hover{
362  border: none;
363  border-right: 1px solid #272727;
364  color: #272727;
365}
366.navbar-regular.nav-v6.nav-scroll .navbar-nav>li>a {
367  color: #272727;
368}
369.drink-menu .navbar.nav-v6.nav-scroll .navbar-nav>li>a {
370  color: #272727;
371  border-right: 1px solid #272727;
372}
373.drink-menu .navbar-regular.nav-v6.nav-scroll .navbar-nav>li>a:hover,
374.drink-menu .navbar-regular.nav-v6.nav-scroll .navbar-nav>.active>a,
375.drink-menu .navbar-regular.nav-v6.nav-scroll .navbar-nav>.active>a:focus,
376.drink-menu .navbar-regular.nav-v6.nav-scroll .navbar-nav>.active>a:hover{
377  color: #272727;
378}
379
380.nav-scroll li.drop-down-link .sub-menu a:hover,
381.nav-scroll li.drop-down-link .sub-menu a:focus {
382  color: #272727;
383}
384.drink-menu .nav-scroll li.drop-down-link .sub-menu a:hover,
385.drink-menu .nav-scroll li.drop-down-link .sub-menu a:focus {
386  color: #272727;
387}
388
389.navbar-regular.nav-v6.nav-scroll .navbar-toggle .icon-bar {
390  background-color: #272727;
391}
392.drink-menu .navbar-regular.nav-v6.nav-scroll .navbar-toggle .icon-bar {
393  background-color: #272727;
394}
395.navbar-regular.nav-v6.nav-scroll [aria-expanded="true"].navbar-toggle .icon-bar {
396  background-color: #272727;
397}
398.drink-menu .navbar-regular.nav-v6.nav-scroll [aria-expanded="true"].navbar-toggle .icon-bar{
399  background-color: #272727;
400}
401.navbar.nav-v6 .header-logo-text{
402  color: #272727;
403  -moz-transition: all 0.3s ease-in-out;
404  -webkit-transition: all 0.3s ease-in-out;
405  -o-transition: all 0.3s ease-in-out;
406  transition: all 0.3s ease-in-out;
407}
408.navbar.nav-v6.nav-scroll .header-logo-text{
409  color: #272727;
410}
411.navbar.nav-v6 .social-icon{
412  color: #272727;
413  -moz-transition: all 0.3s ease-in-out;
414  -webkit-transition: all 0.3s ease-in-out;
415  -o-transition: all 0.3s ease-in-out;
416  transition: all 0.3s ease-in-out;
417}
418.navbar.nav-v6.nav-scroll .social-icon{
419  color: #272727;
420}
421.navbar.nav-v6 .social-square .contact-icon:hover {
422  color: #272727;
423  background-color: #272727;
424}
425.navbar.nav-v6.nav-scroll .social-square .contact-icon:hover {
426  color: #272727;
427  background-color: #272727;
428}
429
430.drink-menu .navbar.nav-v6 .header-logo-text{
431  color: #272727;
432}
433.drink-menu .navbar.nav-v6.nav-scroll .header-logo-text{
434  color: #272727;
435}
436.drink-menu .navbar.nav-v6 .social-icon{
437  color: #272727;
438}
439.drink-menu  .navbar.nav-v6.nav-scroll .social-icon{
440  color: #272727;
441}
442.drink-menu .navbar.nav-v6 .social-square .contact-icon:hover {
443  color: #272727;
444  background-color: #272727;
445}
446.drink-menu .navbar.nav-v6.nav-scroll .social-square .contact-icon:hover {
447  color: #272727;
448  background-color: #272727;
449}
450.navbar.nav-v6 .container {
451  border-bottom: 1px solid transparent;
452  -moz-transition: all 0.3s ease-in-out;
453  -webkit-transition: all 0.3s ease-in-out;
454  -o-transition: all 0.3s ease-in-out;
455  transition: all 0.3s ease-in-out;
456}
457.navbar.nav-v6.nav-scroll .container {
458  border-bottom: 1px solid transparent;
459}
460.drink-menu .navbar.nav-v6 .container {
461  border-bottom: 1px solid transparent;
462}
463.drink-menu .navbar.nav-v6.nav-scroll .container {
464  border-bottom: 1px solid transparent;
465}
466@media(min-width: 768px) {
467  .nav-v6 .navbar-collapse {
468    display: flex !important;
469    justify-content: end;
470  }
471  .nav-v6 .navbar-nav,
472  .nav-v6 .socialnav.hidden-xs {
473    float: none !important;
474  }
475}
476@media (max-width: 767px) {
477  .navbar.nav-v6 .container,
478  .navbar.nav-v6.nav-scroll .container,
479  .drink-menu .navbar.nav-v6 .container,
480  .drink-menu .navbar.nav-v6.nav-scroll .container {
481    border-bottom: none;
482  }
483  .navbar.nav-v6 .navbar-header {
484    border-bottom: 2px solid transparent;
485  }
486  .navbar.nav-v6.nav-scroll .navbar-header {
487    border-bottom: 2px solid transparent;
488  }
489  .drink-menu .navbar.nav-v6 .navbar-header {
490    border-bottom: 2px solid transparent;
491  }
492  .drink-menu .navbar.nav-v6.nav-scroll .navbar-header {
493    border-bottom: 2px solid transparent;
494  }
495  li.drop-down-link .sub-menu,
496  .drink-menu li.drop-down-link .sub-menu {
497    width: 100% !important;
498    background-color: transparent;
499  }
500  .nav-scroll li.drop-down-link .sub-menu,
501  .drink-menu .nav-scroll li.drop-down-link .sub-menu {
502    background-color: transparent;
503  }
504    .navbar-regular.nav-v6 .navbar-nav>li>a:hover,
505  .navbar-regular.nav-v6 .navbar-nav>.active>a,
506  .navbar-regular.nav-v6 .navbar-nav>.active>a:focus,
507  .navbar-regular.nav-v6 .navbar-nav>.active>a:hover{
508    background-color: #272727;
509    color: #272727;
510  }
511  .navbar-regular.nav-v6.nav-scroll .navbar-nav>li>a:hover,
512  .navbar-regular.nav-v6.nav-scroll .navbar-nav>.active>a,
513  .navbar-regular.nav-v6.nav-scroll .navbar-nav>.active>a:focus,
514  .navbar-regular.nav-v6.nav-scroll .navbar-nav>.active>a:hover{
515    background-color: #272727;
516    color: #272727;
517  }
518  .drink-menu .navbar-regular.nav-v6 .navbar-nav>li>a:hover,
519  .drink-menu .navbar-regular.nav-v6 .navbar-nav>.active>a,
520  .drink-menu .navbar-regular.nav-v6 .navbar-nav>.active>a:focus,
521  .drink-menu .navbar-regular.nav-v6 .navbar-nav>.active>a:hover{
522    background-color: #272727;
523    color: #272727;
524  }
525  .drink-menu .navbar-regular.nav-v6.nav-scroll .navbar-nav>li>a:hover,
526  .drink-menu .navbar-regular.nav-v6.nav-scroll .navbar-nav>.active>a,
527  .drink-menu .navbar-regular.nav-v6.nav-scroll .navbar-nav>.active>a:focus,
528  .drink-menu .navbar-regular.nav-v6.nav-scroll .navbar-nav>.active>a:hover{
529    background-color: #272727;
530    color: #272727;
531  }
532
533  .navbar-regular.nav-v6 li.drop-down-link.active .drop-down .fa.fa-angle-up {
534    color: #272727;
535  }
536  .navbar-regular.nav-v6.nav-scroll li.drop-down-link.active .drop-down .fa.fa-angle-up {
537    color: #272727;
538  }
539
540  .drink-menu .navbar-regular.nav-v6 li.drop-down-link.active .drop-down .fa.fa-angle-up {
541    color: #272727;
542  }
543  .drink-menu .navbar-regular.nav-v6.nav-scroll li.drop-down-link.active .drop-down .fa.fa-angle-up {
544    color: #272727;
545  }
546
547}
548</style><!-- nav --><nav class="navbar nav-v4 nav-v6 nav-v6-drop 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="container"><a class="header-logo logo-top" href="/#"><img alt="Willows And Pine Restaurant And Catering logo top - Homepage" aria-label="Homepage" class="img-responsive logo-top" src="https://static.spotapps.co/website_images/ab_websites/294822_website_v1/logo.png"/></a><a class="header-logo logo-scroll" href="/"><img alt="Willows And Pine Restaurant And Catering logo scroll - Homepage" aria-label="Homepage" class="img-responsive logo-scroll" src="https://static.spotapps.co/website_images/ab_websites/294822_website_v1/logo.png"/></a><ul class="socialnav visible-xs">
548<li class="social-links social-icons-holder social-square"><a class="pull-left contact-icon" href="https://www.facebook.com/146038661917665" target="_blank"><i class="social-icon fa fa-facebook"></i><span>Facebook page</span></a></li><li class="social-links social-icons-holder social-square"><a class="pull-left contact-icon" href="https://www.instagram.com/willowsandpine.restaurant" 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.google.com/search?client=opera&q=Willow+%26+Pine+3525+Fruitvale+Avenue&sourceid=opera&ie=UTF-8&oe=UTF-8#lrd=0x808f8719a1d52003:0xfdee9d74c11af989,1,,,," target="_blank"><i aria-hidden="true" class="social-icon fa fa-google"></i><span>Google page</span></a></li></ul><div class="navbar-header"><button 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="/oakland-dimond-district-willows-and-pine-restaurant-and-catering-food-menu" id="/Oakland-Dimond-District-Willows-And-Pine-Restaurant-And-Catering-food-menu_link" target="_self">
549
550                    Menu
551                    
552                </a></li><li class=" "><a class="" href="/oakland-dimond-district-willows-and-pine-restaurant-and-catering-drink-menu" id="/Oakland-Dimond-District-Willows-And-Pine-Restaurant-And-Catering-drink-menu_link" target="_self">
553
554                    Drinks
555                    
556                </a></li><li class=" "><a class="" href="/oakland-dimond-district-willows-and-pine-restaurant-and-catering-happy-hours-specials" id="/Oakland-Dimond-District-Willows-And-Pine-Restaurant-And-Catering-happy-hours-specials_link" target="_self">
557
558                    Specials
559                    
560                </a></li><li class=" "><a class="" href="/oakland-dimond-district-willows-and-pine-restaurant-and-catering-events" id="/Oakland-Dimond-District-Willows-And-Pine-Restaurant-And-Catering-events_link" target="_self">
561
562                    Events
563                    
564                </a></li><li class=" drop-down-link"><a aria-expanded="false" class="drop-down" href="#" id="#_link1" role="button" target="">
565
566                    Order
567                                            <i aria-hidden="true" class="fa fa-angle-down"></i><i aria-hidden="true" class="fa fa-angle-up"></i></a><ul class="sub-menu"><li><a class="sub-menu-link" href="https://order.online/store/26140395?slug=willows-and-pine-restaurant--catering-11838364&pickup=true&hideModal=true&redirected=true" target="_self">
568                            Doordash<span class="visuallyhidden">order online</span></a></li><li><a class="sub-menu-link" href="https://www.ubereats.com/store/willows-%26-pine/jltJVqKvS4KJqDbzUF2Mwg?diningMode=PICKUP&mod=storeDeliveryTime&modctx=%257B%2522entryPoint%2522%253A%2522store-auto-surface%2522%252C%2522encodedStoreUuid%2522%253A%2522jltJVqKvS4KJqDbzUF2Mwg%2522%257D&pl=JTdCJTIyYWRkcmVzcyUyMiUzQSUyMlZhY2F2aWxsZSUyMFByZW1pdW0lMjBPdXRsZXRzJTIyJTJDJTIycmVmZXJlbmNlJTIyJTNBJTIyZGY3ZTM0NzgtZGFkYy05YWI3LWMyNjctZTdlNGM1YWQ5NjAyJTIyJTJDJTIycmVmZXJlbmNlVHlwZSUyMiUzQSUyMnViZXJfcGxhY2VzJTIyJTJDJTIybGF0aXR1ZGUlMjIlM0EzOC4zNjU0NzIyJTJDJTIybG9uZ2l0dWRlJTIyJTNBLTEyMS45NTY4ODAzJTdE&ps=1&utm_campaign=place-action-link&utm_medium=organic&utm_source=google" target="_blank">
569                            ubereats<span class="visuallyhidden">order online</span></a></li><li><a class="sub-menu-link" href="https://www.toasttab.com/local/order/willows-pine-3525-fruitvale-avenue/r-4e1059a1-e39a-4625-b8d3-5c97c2d806a4?diningOption=takeout&rwg_token=AOZt1jVNC2fDHmAiVlkuTEc7eiA7GGkNsR0Dr9hqaZX6QsuN1SgtkDULZU4iPuvbZm-qG_tk4FCqVqks0kgf-BcyXCJDlLVNqg%3D%3D" target="_blank">
570                            toast<span class="visuallyhidden">order online</span></a></li></ul></li><li class="active nav-reservations-link"><a class="link-reservations-sh" href="/oakland-dimond-district-willows-and-pine-restaurant-and-catering-reservations#" id="/Oakland-Dimond-District-Willows-And-Pine-Restaurant-And-Catering-reservations#_link" target="_self">
571
572                    Reserve
573                    
574                </a></li><li class=" nav-parties-link"><a class="link-parties-sh" href="/oakland-dimond-district-willows-and-pine-restaurant-and-catering-party#" id="/Oakland-Dimond-District-Willows-And-Pine-Restaurant-And-Catering-party#_link" target="_self">
575
576                    Parties
577                    
578                </a></li><li class=" nav-catering-link"><a class="link-catering-sh" href="/oakland-dimond-district-willows-and-pine-restaurant-and-catering-catering#" id="/Oakland-Dimond-District-Willows-And-Pine-Restaurant-And-Catering-catering#_link" target="_self">
579
580                    Catering
581                    
582                </a></li></ul><ul class="socialnav hidden-xs"><li class="social-links social-icons-holder social-square"><a class="pull-left contact-icon" href="https://www.facebook.com/146038661917665" target="_blank"><i class="social-icon fa fa-facebook"></i><span>Facebook page</span></a></li><li class="social-links social-icons-holder social-square"><a class="pull-left contact-icon" href="https://www.instagram.com/willowsandpine.restaurant" 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.google.com/search?client=opera&q=Willow+%26+Pine+3525+Fruitvale+Avenue&sourceid=opera&ie=UTF-8&oe=UTF-8#lrd=0x808f8719a1d52003:0xfdee9d74c11af989,1,,,," target="_blank"><i aria-hidden="true" class="social-icon fa fa-google"></i><span>Google page</span></a></li></ul></div></div></nav></header><main id="content" role="main"><article><div class="pagecontent"><div class="tabs-container"><div class="scrolling"><h1 style="display: none;">Reservations</h1><div class="tmt-iframe-holder"><div class="custom-loader loader-1" id="loader"></div><iframe allowfullscreen="allowfullscreen" class="tmt-iframe hide-iframe" frameborder="0" height="100%" id="pageIframe" onload="iframeTMTpageInit()" scrolling="no" src="//tmt.spotapps.co/reservations?spot_id=294822&source=pop_up&destination=reservations&promotion=reservations" title="Reservations" width="100%"></iframe></div></div></div></div></article></main></div><style type="text/css">
583    .navbar-fixed-bottom.nav-v1 {
584        bottom: -100px;
585    }
586    .navbar-fixed-bottom.nav-v1 .nav.navbar-nav.navbar-right {
587        background-color: #fff;
588    }
589    .navbar-fixed-bottom.nav-v1 .bottom-svg-border path,
590    .navbar-fixed-bottom.nav-v1 .bottom-svg-border polygon {
591      fill: #000;
592    }
593    .navbar-fixed-bottom.nav-v1 .bottom-list-item a {
594        color: #000;
595    }
596    .navbar-fixed-bottom.nav-v1 .bottom-list-item a:hover,
597    .navbar-fixed-bottom.nav-v1 .bottom-list-item a:focus {
598        color: #008752;
599    }
600</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://order.online/store/26140395?slug=willows-and-pine-restaurant--catering-11838364&pickup=true&hideModal=true&redirected=true" id="bottom_link_4" target="_self">
601                        Order                    </a></li><li class="bottom-list-item "><a class="bottom-link " href="/oakland-dimond-district-willows-and-pine-restaurant-and-catering-reservations" id="bottom_link_3" target="_self">
602                        Reserve                    </a></li><li class="bottom-list-item "><a class="bottom-link " href="/oakland-dimond-district-willows-and-pine-restaurant-and-catering-party" id="bottom_link_5" target="_self">
603                        Parties                    </a></li><li class="bottom-list-item "><a class="bottom-link " href="/oakland-dimond-district-willows-and-pine-restaurant-and-catering-catering" id="bottom_link_6" target="_self">
604                        Catering                    </a></li></ul></div></nav>
604<script src="https://static.spotapps.co/web/willowsandpine-restaurant--com/lib/jquery/jquery.min.js"></script>
604<script src="https://static.spotapps.co/web/willowsandpine-restaurant--com/lib/bootstrap/js/bootstrap.min.js"></script>
604<script src="https://static.spotapps.co/web/willowsandpine-restaurant--com/js/tmt_script.js"></script>
604<script>
605
606	$("#bottom_link_4").on("click", function(){
607		if (ga_check())
608			universal_ga('send', 'event', 'Button', 'Click', 'Order Online');
609	});
610	$("#bottom_link_3").on("click", function(){
611		if (ga_check())
612			universal_ga('send', 'event', 'Button', 'Click', 'Reserve');
613	});
614	$("#bottom_link_5").on("click", function(){
615		if (ga_check())
616			universal_ga('send', 'event', 'Button', 'Click', 'Private Party');
617	});
618	$("#bottom_link_6").on("click", function(){
619		if (ga_check())
620			universal_ga('send', 'event', 'Button', 'Click', 'Catering');
621	});
622  $('.header-logo, .nav-v2-home-btn').click(function(event) {
623    if ( window.location.pathname == '/' || window.location.pathname == '/index.php') {
624      event.preventDefault();
625      var windowScrollTop = $(window).scrollTop();
626      if(windowScrollTop > 150) {
627        $('html, body').animate({scrollTop: 0}, 750);
628      }
629    }
630  });
631
632$(".banner-section a.banner-pin").click(function(e) {
633    // target element id
634    var id = $(this).attr('href');
635
636    // target element
637    var section = $(id);
638    if (section.length === 0) {
639        return;
640    }
641
642    // prevent standard hash navigation (avoid blinking in IE)
643    e.preventDefault();
644
645    // top position relative to the document
646    var pos = section.offset().top - 100 + 10;
647
648    // animated top scrolling
649    $('body, html').animate({scrollTop: pos}, 750);
650});
651
652$(document).ready(function() {
653  var navHeight = $('nav.navbar').height();
654  $('html').css("scroll-padding-top", navHeight);
655});
656$(document).on('scroll', function (e) {
657    if($(document).scrollTop() > 0) {
658      $('.navbar.nav-v6').addClass('nav-scroll');
659    }else {
660      $('.navbar.nav-v6').removeClass('nav-scroll');
661    }
662});
663
664function scrollStop (callback, refresh = 66) {
665
666	// Make sure a valid callback was provided
667	if (!callback || typeof callback !== 'function') return;
668
669	// Setup scrolling variable
670	let isScrolling;
671
672	// Listen for scroll events
673	window.addEventListener('scroll', function (event) {
674
675		// Clear our timeout throughout the scroll
676		window.clearTimeout(isScrolling);
677
678		// Set a timeout to run after scrolling ends
679		isScrolling = setTimeout(callback, refresh);
680
681	}, false);
682
683}
684
685$(function() {
686  setDropDownMenuWidth();
687
688  // Function to set drop-down menu position (css top property)
689  setDropDownMenuTop();
690
691  function setDropDownMenuWidth() {
692    var tabs_list = $('.navbar-collapse .navbar-nav');
693    $(tabs_list).find('li.drop-down-link').each(function() {
694      var sub_menu_width = $(this).outerWidth(true);
695      if (sub_menu_width < 100) {
696        sub_menu_width = 100;
697      }
698      $(this).find('.sub-menu').css('width', sub_menu_width+'px');
699
700    });
701  };
702
703  function setDropDownMenuTop() {
704    var sub_menu_top = ($('.navbar.nav-v6 .container').outerHeight() + $('.drop-down-link').outerHeight())/2;
705    $('li.drop-down-link .sub-menu').css('top', sub_menu_top-2 +'px');
706  };
707
708  $( window ).resize(function() {
709    setDropDownMenuWidth();
710    setDropDownMenuTop();
711  });
712
713  $(window).on('scroll', function (e) {
714    setDropDownMenuTop();
715  });
716
717  scrollStop(function () {
718    setDropDownMenuTop();
719    if($(document).scrollTop() == 0) {
720      setTimeout(setDropDownMenuTop, 200);
721    }
722  });
723
724  $('.nav a:not(.drop-down)').on('click', function () {
725    $('.navbar-collapse').collapse('hide');
726  });
727
728});
729
730$( '.drop-down-link .drop-down' ).click(function(event) {
731  event.preventDefault();
732  event.stopPropagation();
733  var drop_down = $(this).closest('.drop-down-link');
734  var drop_down_a = $(this);
735
736  if($(drop_down_a).attr("aria-expanded") == "true") { 
737    $(drop_down_a).attr("aria-expanded",false)
738  } else { 
739    $(drop_down_a).attr("aria-expanded",true)
740  }
741
742  var sub_menu = $(this).closest('.drop-down-link').find( '.sub-menu' );
743  if ( $(sub_menu).is( ':hidden' ) ) {
744    $(sub_menu).slideDown();
745    $(drop_down).addClass('active');
746  } else {
747    $(sub_menu).slideUp();
748    $(drop_down).removeClass('active');
749  }
750});
751$('#navbar-collapse-1').on('hide.bs.collapse', function (e) {
752  var clickedElement = $(event.target);
753  if (clickedElement.hasClass('drop-down')) {
754    return false;
755  }
756});
757$('#navbar-collapse-1').on('hidden.bs.collapse', function () {
758  closeOpenedDropDownMenus();
759  function closeOpenedDropDownMenus() {
760    var tabs_list = $('.navbar-collapse .navbar-nav');
761    $(tabs_list).find('li.drop-down-link').each(function() {
762      if( $(this).hasClass('active') ) {
763        var sub_menu = $(this).find('.sub-menu');
764        $(sub_menu).slideUp();
765        $(this).removeClass('active');
766      }
767    });
768  };
769});    setTimeout(function(){
770        $('.navbar-fixed-bottom.nav-v1').addClass('show-bottom-nav'); triggerShowFooterEvents();
771    }, 4000);
772</script>
772<script>
773(function() {
774  var name = "Willows And Pine Restaurant And Catering";
775  var pid = "ChIJAyDVoRmHj4ARifkawXSd7v0";
776  function build_url() {
777    var q = encodeURIComponent(name).replace(/'/g, "%27");
778    return "https://www.google.com/maps/search/?api=1"
779         + "&query=" + q
780         + "&query_place_id=" + encodeURIComponent(pid);
781  }
782  window.google_map_url = build_url();
783  window.open_google_map = function() {
784    window.open(build_url(), "_blank");
785  };
786})();
787</script>
787<script>
788
789  var spot_id = 294822;
790  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 apply for a job"],"custom_hours":"","hours":"","active_tmt_cta_links":{"cta_private_party":"https://willowsandpine-restaurant.com/-party","cta_catering":"https://willowsandpine-restaurant.com/-catering","cta_reservations":"https://willowsandpine-restaurant.com/-reservations","cta_jobs":null},"spot_name":"Willows And Pine Restaurant And Catering","label_for_texting_permission":"I’d like to get texts about specials, events, and other exclusive offers and announcements not available to general public"}');
791
792  if (false){
793    console.log("Check SpotHopper configuration. Probably there is no 'WEBSITE::DOMAIN_NAME' key for your website");
794  }
795
796  if (navigator.userAgent.match(/iPhone/i)
797       || navigator.userAgent.match(/iPad/i)
798       || navigator.userAgent.match(/iPod/i)){
799      $(document).ready(function(){
800            document.body.className += " " + "webkit-mobile-body";
801      });
802    }
803
804  var promotion_url_param_domain = getPromotionUrlParams()['domain'];
805  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')){
806    $("a[href^='/']").each(function(){
807      if (this.href.indexOf('domain=') == -1){
808        var sh_internal_url = new URL(this.href);
809        sh_internal_url.searchParams.set("domain", promotion_url_param_domain);
810        this.href = sh_internal_url.toString();
811      }
812    })
813  }
814
815
816  function cta_link_matches_href(href, url){
817    var domain = 'willowsandpine-restaurant.com';
818    if(typeof url === 'undefined'){
819      return false;
820    }
821    var partsOfURL = url.split(domain);
822    if (partsOfURL.length != 2){
823      return href == url;
824    }else{
825      var urlPath = partsOfURL[1];
826      if (urlPath.substring(0,1) == "/"){
827        urlPath = urlPath.substring(1,urlPath.length);
828      }
829      return href.indexOf(urlPath, domain.length + href.indexOf(domain)-1) !== -1;
830    }
831  }
832
833  var all_cta_links = [{"id":1053069,"spot_id":294822,"url":"https://willowsandpine-restaurant.com/-drink-menu","cta_link_type":"drink_menu","created_at":"2024-08-29T13:43:01+00:00","updated_at":"2024-09-02T07:38:40+00:00","made_of_food":false,"link_name":"","position":null},{"id":1053067,"spot_id":294822,"url":"https://willowsandpine-restaurant.com/-specials","cta_link_type":"specials","created_at":"2024-08-29T13:43:00+00:00","updated_at":"2024-09-02T07:38:39+00:00","made_of_food":false,"link_name":"","position":null},{"id":987575,"spot_id":294822,"url":"https://willowsandpine-restaurant.com/-party","cta_link_type":"private_parties","created_at":"2024-06-27T23:31:55+00:00","updated_at":"2024-09-02T07:38:40+00:00","made_of_food":false,"link_name":"Private Parties","target":null,"website_footer_label":"Parties","position":3},{"id":1053068,"spot_id":294822,"url":"https://willowsandpine-restaurant.com/-events","cta_link_type":"events","created_at":"2024-08-29T13:43:01+00:00","updated_at":"2024-09-02T07:38:40+00:00","made_of_food":false,"link_name":"","position":null},{"id":1053070,"spot_id":294822,"url":"https://willowsandpine-restaurant.com/-food-menu","cta_link_type":"food_menu","created_at":"2024-08-29T13:43:01+00:00","updated_at":"2024-09-02T07:38:40+00:00","made_of_food":false,"link_name":"","position":null},{"id":987577,"spot_id":294822,"url":"https://willowsandpine-restaurant.com/-reservations","cta_link_type":"reservations","created_at":"2024-06-27T23:31:55+00:00","updated_at":"2024-09-02T07:38:40+00:00","made_of_food":false,"link_name":"Reservations","target":null,"website_footer_label":"Reserve","position":1},{"id":987574,"spot_id":294822,"url":"https://willowsandpine-restaurant.com/-catering","cta_link_type":"catering","created_at":"2024-06-27T23:31:54+00:00","updated_at":"2024-09-02T07:38:40+00:00","made_of_food":false,"link_name":"Catering","target":null,"website_footer_label":"Catering","position":4},{"id":1020960,"spot_id":294822,"url":"https://order.online/store/26140395?slug=willows-and-pine-restaurant--catering-11838364&pickup=true&hideModal=true&redirected=true","cta_link_type":"order","created_at":"2024-0
8337-30T19:00:54+00:00","updated_at":"2024-09-02T07:38:40+00:00","made_of_food":false,"link_name":"Doordash","target":null,"website_footer_label":"DoorDash","position":0},{"id":1020961,"spot_id":294822,"url":"https://www.ubereats.com/store/willows-%26-pine/jltJVqKvS4KJqDbzUF2Mwg?diningMode=PICKUP&mod=storeDeliveryTime&modctx=%257B%2522entryPoint%2522%253A%2522store-auto-surface%2522%252C%2522encodedStoreUuid%2522%253A%2522jltJVqKvS4KJqDbzUF2Mwg%2522%257D&pl=JTdCJTIyYWRkcmVzcyUyMiUzQSUyMlZhY2F2aWxsZSUyMFByZW1pdW0lMjBPdXRsZXRzJTIyJTJDJTIycmVmZXJlbmNlJTIyJTNBJTIyZGY3ZTM0NzgtZGFkYy05YWI3LWMyNjctZTdlNGM1YWQ5NjAyJTIyJTJDJTIycmVmZXJlbmNlVHlwZSUyMiUzQSUyMnViZXJfcGxhY2VzJTIyJTJDJTIybGF0aXR1ZGUlMjIlM0EzOC4zNjU0NzIyJTJDJTIybG9uZ2l0dWRlJTIyJTNBLTEyMS45NTY4ODAzJTdE&ps=1&utm_campaign=place-action-link&utm_medium=organic&utm_source=google","cta_link_type":"order2","created_at":"2024-07-30T19:00:54+00:00","updated_at":"2024-09-02T07:38:40+00:00","made_of_food":false,"link_name":"Ubereats","target":null,"website_footer_label":"UberEats","position":11},{"id":1020962,"spot_id":294822,"url":"https://www.toasttab.com/local/order/willows-pine-3525-fruitvale-avenue/r-4e1059a1-e39a-4625-b8d3-5c97c2d806a4?diningOption=takeout&rwg_token=AOZt1jVNC2fDHmAiVlkuTEc7eiA7GGkNsR0Dr9hqaZX6QsuN1SgtkDULZU4iPuvbZm-qG_tk4FCqVqks0kgf-BcyXCJDlLVNqg%3D%3D","cta_link_type":"order3","created_at":"2024-07-30T19:00:54+00:00","updated_at":"2024-09-02T07:38:40+00:00","made_of_food":false,"link_name":"Toasttab","target":null,"website_footer_label":"Toast","position":null}];
834
835  function find_cta_link(href) {
836    for (var i=0; i< all_cta_links.length; i++){
837      var cta_link = all_cta_links[i];
838      if ( cta_link_matches_href(href, cta_link.url)){
839        return cta_link;
840      }
841    }
842  }
843
844  function find_cta_links(href) {
845    var cta_links = []
846    for (var i=0; i< all_cta_links.length; i++){
847      var cta_link = all_cta_links[i];
848      if ( cta_link_matches_href(href, cta_link.url)){
849        cta_links.push(cta_link);
850      }
851    }
852    return cta_links;
853  }
854
855
856  function get_current_page_cta_link_types(){
857    var types = [];
858    var cta_links = find_cta_links(document.location.href);
859    for (var i=0; i<cta_links.length; i++){
860      types.push(cta_links[i].cta_link_type);
861    }
862    return types;
863  }
864
865
866  function is_food_menu_page(){
867    var cta_link_types = get_current_page_cta_link_types();
868    for (var i=0; i<cta_link_types.length; i++){
869      if ('food_menu' == cta_link_types[i])
870        return true;
871    }
872    return false;
873  }
874
875
876  function get_form_cat_from_cta(){
877    var cta_link = find_cta_link(document.location.href);
878    if (cta_link == null) {
879        return null;
880    }
881    if (cta_link.cta_link_type == 'private_parties'){
882        return 'private_party';
883    }else if (cta_link.cta_link_type == 'reservations'){
884        return 'reservation';
885    }else if (cta_link.cta_link_type == 'catering'){
886        return 'catering';
887    }else if (cta_link.cta_link_type == 'job_listing'){
888        return 'job_listings';
889    }else if (cta_link.cta_link_type == 'gift_cards'){
890          return 'gift_cards';
891    }
892    return null;
893  }
894
895  function element_has_events_defined(elem){
896    if ($._data(elem, "events") === undefined){
897      return false;
898    }
899    return true;
900  }
901
902  function create_ga_events_for_cta_clicks(){
903    if (typeof $ === 'function'){
904
905      var cta_link_of_the_page = find_cta_link(location.href);
906
907
908      $("a").each(function(index, elem){
909        var href = $(elem).attr('href');
910
911        if (href  === undefined ){
912           return;
913        }
914
915        if (href.substring(0,4) == 'tel:'){
916          if (!element_has_events_defined(elem)){  // not footer links
917            $(elem).on("click", function(){
918                universal_ga('send', 'event', {
919                  eventCategory: 'Button',
920                  eventAction: 'Click',
921                  eventLabel: 'Phone',
922                  transport: 'beacon'
923                });
924             });
925
926             if (cta_link_of_the_page){
927                $(elem).on("click", function(){
928                    universal_ga('send', 'event', {
929                      eventCategory: 'Button',
930                      eventAction: 'Click',
931                      eventLabel: cta_link_of_the_page.cta_link_type +  ' page phone',
932                      transport: 'beacon'
933                    });
934                 });
935             }
936          } else {
937             if (cta_link_of_the_page){
938               $(elem).on("click", function(){
939                   universal_ga('send', 'event', {
940                        eventCategory: 'Button',
941                        eventAction: 'Click',
942                        eventLabel: cta_link_of_the_page.cta_link_type +  ' page phone footer',
943                        transport: 'beacon'
944                   });
945               });
946             }
947          }
948
949
950        }else{
951          var cta_link = find_cta_link(href);
952          if (elem.className != null && elem.className.indexOf("bottom-link") > -1){
953            // console.log("bottom link detected");
954          }else{
955            if (cta_link != null){
956              $(elem).on("click", function(){
957                universal_ga('send', 'event', {
958                        eventCategory: 'Website Link',
959                        eventAction: 'Click',
960                        eventLabel: cta_link.cta_link_type,
961                        transport: 'beacon'
962                  });
963              });
964            }
965          }
966        }
967
968
969      });
970    }
971  }
972
973  if (typeof angular === "undefined") {
974    create_ga_events_for_cta_clicks();
975  } else {
976    angular.element(document).ready(function () {
977      create_ga_events_for_cta_clicks();
978    });
979  }
980
981
982  function triggerShowFooterEvents(){
983    if (window.screen.availWidth < 768){
984        universal_ga('send', 'event', {
985                eventCategory: 'Mobile Footer',
986                eventAction: 'View',
987                eventLabel: '',
988                transport: 'beacon'
989          });
990    }
991  }
992
993
994
995
996  ////////////
997  function smartFooterV2()
998  {
999    var list= document.getElementsByClassName("bottom-list-item");
1000    if (!list) return;
1001
1002    if (document.getElementById("bottom-navbar") == null){
1003      return;
1004    }
1005
1006    var bottomNav = document.querySelector('#bottom-navbar .navbar-nav');
1007    var footerLinkPaddingLeft = $('#bottom-navbar .navbar-nav li a').css('padding-left');
1008    var footerLinkPaddingRight = $('#bottom-navbar .navbar-nav li a').css('padding-right');
1009
1010    bottomNav.innerHTML = '';
1011    var linksWithPosition = all_cta_links.filter(e => e.position != null && e.position >= 0);
1012    linksWithPosition.sort(function(a,b) {
1013      return a.position - b.position;
1014    });
1015
1016    var footerLinkStyle = (footerLinkPaddingLeft == '0px' || footerLinkPaddingRight == '0px' ? 'style="padding-left: 8px; padding-right: 8px;"' : '');
1017
1018    linksWithPosition.forEach((e, i) => {
1019        var target = e.target || getUrlTarget(e.url);
1020        bottomNav.insertAdjacentHTML('beforeend',
1021        `<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>`);
1022    })
1023
1024    var intervalCount = 0
1025    var interval = setInterval(() => {
1026      if(intervalCount == 50){
1027        clearInterval(interval);
1028      }
1029      removeOverflowingFooterLinks();
1030      intervalCount ++;
1031    }, 200);
1032
1033    $('.smart-footer-link').on("click", function(){
1034          if (typeof shUrlParams !== "undefined" && shUrlParams['source'] === undefined){
1035                    shUrlParams['source'] = 'footer';
1036                    sessionStorage.setItem('shUrlParams', JSON.stringify(shUrlParams));
1037          }
1038
1039          var visibleLinks = $('.smart-footer-link').map(function (e) {
1040              return $(this).data('type');
1041          }).toArray().join(',');
1042
1043          universal_ga('send', 'event', {
1044                  eventCategory: 'Button',
1045                  eventAction: 'Click_footer_2',
1046                  eventLabel: "type:" + $(this).data('type') + "|position:" + $(this).data('position') + "|visible:" + visibleLinks,
1047                  transport: 'beacon'
1048            });
1049    });
1050  }
1051
1052  function removeOverflowingFooterLinks(){
1053    var bottomNavLinks = document.querySelectorAll('#bottom-navbar .navbar-nav li');
1054    var width_sum = 0;
1055
1056    bottomNavLinks.forEach(e => {
1057      width_sum += e.getBoundingClientRect().width;
1058      if ((width_sum) > window.innerWidth) {
1059        console.log(`%cLink %c${e.textContent} %cdeleted couldn't fit screen`,"color: #fff;background: #202124;", "background: red;color: #fff", "color: #fff;background: #202124;");
1060        e.remove();
1061      }
1062    });
1063  }
1064
1065  function getUrlTarget(url){
1066    if(url.startsWith('tel')){
1067      return '_self';
1068    }
1069    if(url.startsWith('/') || url.includes('tmt.spotapps.co') || url.includes(window.location.host)){
1070      return '_self';
1071    }
1072    return '_blank';
1073  }
1074
1075  function npb()
1076    {
1077    	var list= document.getElementsByClassName("bottom-list-item");
1078    	if (!list) return;
1079
1080      if (document.getElementById("bottom-navbar") == null){
1081        return;
1082      }
1083
1084      var url = ""
1085    	for (var i=0; i < all_cta_links.length; i++)
1086    	{
1087    		if (all_cta_links[i].cta_link_type == "order"){
1088          url = all_cta_links[i].url;
1089        }
1090    	}
1091
1092    	if ( url == ""){
1093        return;
1094      }
1095
1096    	for (i=0; i < list.length; i++)
1097    	{
1098    		console.log(cta_link_matches_href(list[i].firstChild.href, url));
1099    		if (cta_link_matches_href(list[i].firstChild.href,url))  return;
1100
1101    	};
1102
1103    	var item = list[list.length-1]
1104    	document.getElementById("bottom-navbar").getElementsByClassName("nav navbar-nav")[0].appendChild(item.cloneNode(true));
1105    	var width_sum = 0;
1106    	for (i=0; i < list.length; i++) {
1107    		width_sum += list[i].getBoundingClientRect().width;
1108    	}
1109
1110    	var item = list[list.length-1]
1111    	if ((width_sum - 10) > window.innerWidth) { item.parentNode.removeChild(item); console.log("link deleted couldn't fit screen"); return; }
1112
1113    	item.firstChild.text = "Order";
1114    	item.firstChild.href = url;
1115    	item.firstChild.id = "bottom_link_" + list.length;
1116
1117      $(item.firstChild).on("click", function(){
1118
1119          if (typeof shUrlParams !== "undefined" && shUrlParams['source'] === undefined){
1120                    shUrlParams['source'] = 'footer';
1121                    sessionStorage.setItem('shUrlParams', JSON.stringify(shUrlParams));
1122                  }
1123
1124          universal_ga('send', 'event', {
1125                  eventCategory: 'Button',
1126                  eventAction: 'Click',
1127                  eventLabel: 'Plan B-2 Order',
1128                  transport: 'beacon'
1129            });
1130      });
1131
1132
1133    }
1134
1135function activateSmartFooter(){
1136    var smart_footer_active = true;
1137    var smart_footer_version = 2;
1138    var man_bottom_active = false;
1139    if(window.location.hash == '#smartFooterV2=enabled'){
1140      smartFooterV2();
1141      return;
1142    }
1143    if (smart_footer_active && !man_bottom_active){
1144      if(smart_footer_version == 2 ){
1145          smartFooterV2();
1146       }else {
1147          npb();
1148       }
1149    }
1150  }
1151
1152  activateSmartFooter();
1153
1154  var corona_config_str = '{"id":224796,"spot_id":294822,"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 delivery or curbside pick-up order, please call:","food_page_instruction_phone":null,"created_at":"2024-06-27T23:12:06+00:00","updated_at":"2025-07-14T21:12:54+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":true,"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":5,"pick_ups_priority_value":5,"reservations_priority_value":3,"private_parties_priority_value":4,"catering_priority_value":5,"gift_cards_priority_value":1,"jobs_priority_value":0,"food_and_drinks_priority_value":4,"specials_priority_value":3,"national_days_priority_value":3,"holidays_priority_value":3,"sports_priority_value":3,"walk_ins_priority_value":5,"collecting_emails_priority_value":3,"collecting_phone_numbers_priority_value":3,"growing_social_media_followers_priority_value":3,"increasing_revenue_vs_saving_time_priority_value":3,"events_priority_value":3,"shopping_cart_type":"TMT","shopping_cart_active":false}';
1155  var corona_config =  corona_config_str != '' ?  JSON.parse('{"id":224796,"spot_id":294822,"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 delivery or curbside pick-up order, please call:","food_page_instruction_phone":null,"created_at":"2024-06-27T23:12:06+00:00","updated_at":"2025-07-14T21:12:54+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":true,"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":5,"pick_ups_priority_value":5,"reservations_priority_value":3,"private_parties_priority_value":4,"catering_priority_value":5,"gift_cards_priority_value":1,"jobs_priority_value":0,"food_and_drinks_priority_value":4,"specials_priority_value":3,"national_days_priority_value":3,"holidays_priority_value":3,"sports_priority_value":3,"walk_ins_priority_value":5,"collecting_emails_priority_value":3,"collecting_phone_numbers_priority_value":3,"growing_social_media_followers_priority_value":3,"increasing_revenue_vs_saving_time_priority_value":3,"events_priority_value":3,"shopping_cart_type":"TMT","shopping_cart_active":false}') : null;
1156
1157
1158  //corona instuctions
1159  function show_corona_instructions(text, phone, btnText){
1160    //format to US number
1161    var match = phone.match(/^(\d{3})(\d{3})(\d{4})$/);
1162
1163    if(corona_config.shopping_cart_type == "TMT" && corona_config.shopping_cart_active == true) {
1164        var linkLocation = "https://tmt.spotapps.co/ordering-menu/?spot_id="+corona_config.spot_id+"&images=yes&accordion=true";
1165        var btnLinkLocation = "https://tmt.spotapps.co/ordering-menu/?spot_id="+corona_config.spot_id+"&images=yes&accordion=true";
1166    }else {
1167        var linkLocation = 'tel:+1'+phone+'';
1168        var btnLinkLocation = 'tel:+1'+ match[1] + '-' + match[2] + '-' + match[3] +''
1169    }
1170    var appendPhone = 'tel:+1'+phone+'';
1171    //inject html content
1172    if ($('.food-menu-nav').length) {
1173      //new template
1174      var pageEl =  $('.food-menu-nav').css('margin','20px auto 10px auto');
1175      var textColor = rgb2hex($('.section-header').css('color'));
1176      var linkColor = rgb2hex($('.food-menu-nav-item.active').css('background-color'));
1177      var fontSize = parseInt($('.food-menu-nav-item').css('font-size'));
1178      fontSize = fontSize + Math.round(fontSize  * 0.25);
1179
1180      // 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>';
1181      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>';
1182
1183    }else {
1184      //old template
1185      var pageEl = $('.tabnav');
1186      var textColor = rgb2hex($('.menu-item-name-traditional').css('color'));
1187      var linkColor = rgb2hex($('.style-traditional .tabnav .nav>li.active>a').css('color'));
1188
1189      var linkTextColor = getContrast50(linkColor);
1190      var fontSize = parseInt($('.menu-item-name-traditional').css('font-size'));
1191      fontSize = fontSize + Math.round(fontSize  * 0.25);
1192      var textTransform = $('.style-traditional .tabnav .nav>li>a').css('text-transform');
1193
1194      // 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>';
1195      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>';
1196
1197    }
1198     //html content
1199    pageEl.prepend(html);
1200  }
1201
1202  function rgb2hex(rgb) {
1203    if(typeof rgb !== "undefined"){
1204      rgbColor = rgb.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);
1205      if (!rgbColor) {
1206        rgba = rgb.match(/^rgba?\((\d+),\s*(\d+),\s*(\d+)(,\s*\d+\.*\d+)?\)$/);
1207        return "#" + hex(rgba[1]) + hex(rgba[2]) + hex(rgba[3]);
1208      }
1209      function hex(x) {
1210          return ("0" + parseInt(x).toString(16)).slice(-2);
1211      }
1212      return "#" + hex(rgbColor[1]) + hex(rgbColor[2]) + hex(rgbColor[3]);
1213    }
1214    return rgb;
1215  }
1216
1217  function getContrast50(hexcolor){
1218    return (parseInt(hexcolor, 16) > 0xffffff/2) ? '#000':'#fff';
1219  }
1220
1221  function show_corona_sidebar_instructions(text, phone){
1222    //format to US number
1223    var match = phone.match(/^(\d{3})(\d{3})(\d{4})$/);
1224    var divWidth = 230;
1225    var top = 50;
1226    var linkSize = '1.6em';
1227    var pSize = $('p').css('font-size');
1228    var appendPhone = 'tel:+1'+phone+'';
1229
1230    if ($(window).width() < 1600)
1231      var top = 30;
1232    if ($(window).width() < 1200){
1233      var divWidth = 180;
1234      var linkSize = '1.4em';
1235      var pSize ='1.1em';
1236    }
1237
1238    if($('.food-menu-nav').length){ //new template
1239      var textColor = $('.food-menu-nav-item.active').css('color');
1240      var linkColor = $('.food-menu-nav-item.active').css('background-color');
1241
1242      var linkTextColor = $('.food-menu-nav-item.active').css('color');
1243      var parent = $('.food-menu-page');
1244    }
1245    else { //old template
1246      var textColor = $('.menu-item-name-traditional').css('color');
1247      var linkColor = $('.style-traditional .tabnav .nav>
1247li.active>a').css('color');
1248      var parent = $('.food-menu').length ? $('.food-menu') : $('.drink-menu');
1249      var linkTextColor = getContrast50(linkColor);
1250    }
1251
1252    // $(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>');
1253    $(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>');
1254
1255    //check if resolution is bigger than tablet resolution
1256/*  if ($(window).width() > 991) {
1257      //detect scroll
1258      window.onscroll = function (e) {
1259      if ($(window).scrollTop() == 0) {
1260          $('#corona-instructions-sidebar').hide();
1261        }else {
1262          $('#corona-instructions-sidebar').show();
1263        }
1264      }
1265    } */
1266  }
1267
1268  function check_corona_config(config){
1269    console.log(config)
1270    if (config) {
1271      if (config.instructions_on_food_page && config.food_page_instruction_text && config.food_page_instruction_phone) {
1272        if (!config.promote_deliveries && config.promote_pick_up) {
1273          var btnText = 'Call For Pick Up';
1274        }
1275        if (config.promote_deliveries && !config.promote_pick_up) {
1276          var btnText = 'Call For Delivery';
1277        }
1278        if (config.promote_deliveries && config.promote_pick_up) {
1279          var btnText = 'Call For Pick Up Or Delivery';
1280        }
1281
1282        if(typeof btnText !== "undefined"){ // check if pick up or delivery are true
1283          if(config.shopping_cart_type == "TMT" && config.shopping_cart_active == true) {
1284                var btnText = 'ORDER NOW';
1285                    if($('.food-menu-nav').length){ //new template
1286                      var textColor = rgb2hex($('.section-header').css('color'));
1287                      var linkColor = rgb2hex($('.food-menu-nav-item.active').css('background-color'));
1288                      var fontSize = parseInt($('.food-menu-nav-item').css('font-size'));
1289                      fontSize = fontSize + Math.round(fontSize  * 0.25);
1290                    }
1291                    else { //old template
1292                        var textColor = rgb2hex($('.menu-item-name-traditional').css('color'));
1293                        var linkColor = rgb2hex($('.style-traditional .tabnav .nav>li.active>a').css('color'));
1294
1295                        var linkTextColor = getContrast50(linkColor);
1296                        var fontSize = parseInt($('.menu-item-name-traditional').css('font-size'));
1297                        fontSize = fontSize + Math.round(fontSize  * 0.25);
1298                    }
1299                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);
1300                show_corona_sidebar_instructions(btnText, config.food_page_instruction_phone);
1301            } else {
1302                show_corona_instructions(config.food_page_instruction_text, config.food_page_instruction_phone, btnText);
1303                show_corona_sidebar_instructions(btnText, config.food_page_instruction_phone);
1304            }
1305
1306        }
1307      }
1308    }
1309  }
1310
1311
1312  if (is_food_menu_page() && !window.location.search.includes("contactless=true")){
1313    $( document ).ready(function() {
1314       setTimeout(function(){
1315        check_corona_config(corona_config);
1316       }, 300);
1317    });
1318  }
1319
1320
1321
1322  function isPhone(phone){
1323      var regex = /^(\+\d{1,2}\s?)?\(?\d{3}\)?[\s.-]?\d{3}[\s.-]?\d{4}$/;
1324      return regex.test(phone);
1325  }
1326
1327  function sendEmail_MT (input_id) {
1328    const $loader = $("[data-id=newsletter-widget-2] .sph-loading-img");
1329
1330    const $step = {
1331      form: $("[data-id=newsletter-widget-2] .sph-email-form"),
1332      message: $("[data-id=newsletter-widget-2] .sph-response-message"),
1333    }
1334
1335    const $field = {
1336      email: $("[data-id=newsletter-widget-2] #sph-newsletter-input-" + input_id),
1337      phone: $("[data-id=newsletter-widget-2] #sph-newsletter-phone-" + input_id),
1338      consent: $("[data-id=newsletter-widget-2] #sph-newsletter-checkbox-phone-" + input_id),
1339    };
1340
1341    const $error = {
1342      email: $("[data-id=newsletter-widget-2] #sph-newsletter-email-error-" + input_id),
1343      phone: $("[data-id=newsletter-widget-2] #sph-newsletter-phone-error-" + input_id),
1344    };
1345
1346    if ($field.email.val().trim() === "") {
1347        $error.email
1348          .html("This field is required")
1349          .show();
1350    }
1351    else if (!isEmail($field.email.val().trim())) {
1352      $error.email
1353        .html("Please use the format “[email protected]”")
1354        .show();
1355    } else {
1356      $error.email
1357        .html("")
1358        .hide();
1359    }
1360
1361    if ($field.consent.is(':checked') && $field.phone.val().trim() === "") {
1362      $error.phone
1363        .html("This field is required")
1364        .show();
1365    } else if ($field.phone.val().trim().length > 0 && !isPhone($field.phone.val().trim())) {
1366      $error.phone
1367        .html("The phone number must contain 10 digits")
1368        .show();
1369    } else {
1370      $error.phone
1371        .html("")
1372        .hide();
1373    }
1374
1375    const errorField = $step.form.find('.sh-form-error:visible');
1376
1377    if (errorField.length > 0) {
1378      const input = errorField.first().next();
1379
1380      document.activeElement.blur();
1381
1382      setTimeout(() => {
1383        input.focus();
1384      }, 160)
1385
1386      return;
1387    }
1388
1389    $loader
1390      .show()
1391      .prev()
1392      .hide();
1393
1394    $.ajax({
1395      method: "POST",
1396      url: "https://www.spothopperapp.com/api/spots/294822/contacts/add_with_texting_permission",
1397      crossDomain: true,
1398      dataType: 'json',
1399      data: {
1400        email: $field.email.val().trim(),
1401        phone: $field.phone.val().trim(),
1402        texting_permission: $field.consent.is(':checked'),
1403      },
1404      success: function (data) {
1405        afterRequestSubmission(data);
1406      },
1407      error: function () {
1408        afterRequestSubmission("Something went wrong. Please try again later.");
1409      }
1410    });
1411
1412    function afterRequestSubmission (data) {
1413      $step.form.hide();
1414
1415      $step.message
1416        .html(data)
1417        .show()
1418        .trigger('focus');
1419    }
1420  }
1421</script>
1421<script>function addPromotionParamsToTMTLinks()
1422{
1423    if (sessionStorage.getItem('shUrlParams')) {
1424        let shParams = JSON.parse(sessionStorage.getItem('shUrlParams'));
1425        if (!Object.keys(shParams).length)
1426            return;
1427        if(!shParams.source)
1428            return;
1429        $('a').each(function () {
1430            if (this.href.includes('tmt.spotapps.co')) {
1431                if(this.href.includes('&source=') || this.href.includes('&destination=') || this.href.includes('&promotion='))
1432                    return;
1433
1434                this.href = this.href + '&source=' + shParams.source;
1435                if(shParams.destination)
1436                    this.href = this.href + '&destination=' + shParams.destination;
1437                if(shParams.promotion)
1438                    this.href = this.href + '&promotion=' + shParams.promotion;
1439                if(shParams.fb_post_id)
1440                    this.href = this.href + '&fb_post_id=' + shParams.fb_post_id;
1441                if(shParams.email_post_id)
1442                    this.href = this.href + '&email_post_id=' + shParams.email_post_id;
1443            }
1444        })
1445    }
1446}
1447setTimeout(function() {
1448  addPromotionParamsToTMTLinks();
1449  addFooterToSourceParam();
1450},600)
1451
1452function addFooterToSourceParam()
1453{
1454    $('.bottom-link').each(function (){
1455        if(shouldAddSourceParam(this.href))
1456          this.href = this.href + '&source=footer';
1457    })
1458    $('#sh-multiple-links-content-holder a').each(function (){
1459       if(shouldAddSourceParam(this.href))
1460          this.href = this.href + '&source=footer';
1461    })
1462}
1463function shouldAddSourceParam(link){
1464  if (link.includes('tmt.spotapps.co') && !link.includes('&source=')){
1465    return true;
1466  }
1467  return false;
1468}
1469</script>
1469<script>
1470;(async () => {
1471if (typeof window.focusTrap === 'undefined') {
1472    await getScript('https://unpkg.com/tabbable/dist/index.umd.js');
1473    await getScript('https://unpkg.com/focus-trap/dist/focus-trap.umd.js');
1474}
1475
1476document.querySelectorAll('.modal').forEach((element) => {
1477    const trap = window.focusTrap?.createFocusTrap(element, {
1478        allowOutsideClick: true,
1479    });
1480
1481    $(element).on('shown.bs.modal', () => {
1482	    trap?.activate();
1483	});
1484
1485	$(element).on('hidden.bs.modal', () => {
1486        trap?.deactivate();
1487    });
1488});
1489
1490async function getScript (source) {
1491    return new Promise((resolve, reject) => {
1492        const script = document.createElement('script');
1493        script.src = source;
1494        script.async = true;
1495
1496        script.onload = resolve;
1497        script.onerror = reject;
1498
1499        document.head.appendChild(script);
1500    });
1501}
1502})();
1503</script>
1503<script src="https://wcache-plugins.spotapps.co/production/wcpl_bootstrap_ada_fix/wcpl_bootstrap_ada_fix.js"></script>
1503<link href="https://wcache-plugins.spotapps.co/production/wcpl_bday_club/wcpl_bday_club.css" rel="stylesheet" media="screen"/>
1503<script src="https://wcache-plugins.spotapps.co/production/wcpl_bday_club/wcpl_bday_club.js"></script>
1503<script src="https://wcache-plugins.spotapps.co/production/wcpl_ga_tracking/wcpl_ga_tracking.js"></script>
1503<script src="https://wcache-plugins.spotapps.co/production/wcpl_media_controls/script.js"></script>
1503<link href="https://wcache-plugins.spotapps.co/production/wcpl_website_editor_interpreter/website_interpreter_helper_style.css" rel="stylesheet" media="screen"/>
1503<script>var changes_log_array = {};</script>
1503<script src="https://wcache-plugins.spotapps.co/production/wcpl_website_editor_interpreter/website_interpreter.js"></script>
1503</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.