PageSourceSearch

https://shop.localfoodsplymouth.org/Index

html localfoodsplymouth.org collected 2026-09-26 02:00:44 UTC 65,402 bytes, 846 lines download raw bytes

1<!DOCTYPE html>
2<html lang="en">
3<head>
4    <meta charset="utf-8" />
5    <meta http-equiv="Content-Security-Policy" content="img-src * data:; connect-src 'self' https://www.google-analytics.com https://analytics.google.com https://www.google.com https://cdn.weglot.com https://cdn-api-weglot.com https://connect.facebook.net https://www.facebook.com https://vice-prod.sdiapi.com https://reports.sdiapi.com ; default-src 'self' 'unsafe-inline' 'unsafe-eval' *.google.com *.gstatic.com *.googletagmanager.com *.googleadservices.com *.windows.net *.google-analytics.com *.doubleclick.net *.weglot.com *.cdn-api.weglot.com *.facebook.com *.facebook.net *.sdiapi.com ;" />
6    <meta name="viewport" content="width=device-width, minimum-scale=1.0, user-scalable=yes">
7    <title>Home — Local Foods Plymouth</title>
8    <meta name="description" content="" />
9    <meta name="keywords" content="" />
10
11    
11<script> 
12        vice={config: { 
13                 viceAccountId: 'c27bb423-83d9-4612-ad7e-3e95d5a9822c', 
14                 viceSiteId: '6f5d3c6e-95f0-41ab-8eb9-d7cd845f05ef',
15             }
16         } 
17     </script>
17 
18     
18<script src='//vice-prod.sdiapi.com/vice_loader/c27bb423-83d9-4612-ad7e-3e95d5a9822c/6f5d3c6e-95f0-41ab-8eb9-d7cd845f05ef'>
19     </script>
19
20
21    
21<script src="/Scripts/jquery-3.5.1.js"></script>
21
22
23    
23<script src="/Scripts/jquery.validate.js"></script>
vendor: 2 bytes, line 23
23
24<script src="/Scripts/jquery.validate.unobtrusive.js"></script>
vendor: 2 bytes, line 24
24
25<script src="/Scripts/jquery.tmpl.min.js"></script>
25
26
27
28    
28<script src="/js/uikit.min.js?v5.06"></script>
28
29    
29<script src="/js/uikit-icons.min.js?v5.06"></script>
29
30    
30<script src="/top/back-to-top.js"></script>
30
31
32    <link href="/css/uikit.min.css?v5.06" rel="stylesheet" />
33    <link href="/css/font-awesome.min.css" rel="stylesheet" />
34    <link href="/top/back-to-top.css" rel="stylesheet" />
35
36    
36<script src="/Scripts/modernizr-2.6.2.js"></script>
vendor: 2 bytes, line 36
36
37<script src="/Scripts/modernizr-2.8.3.js"></script>
vendor: 85 bytes, lines 37-43
37
38
39
40    
41    <script src="//www.google.com/recaptcha/api.js"></script>
42    
43    
43<script src="/Scripts/checkout.js?v5.06"></script>
43
44    
45
46    
47
48    <link rel="stylesheet" href="/Content/Site.css?v5.06" />
49    <link rel="stylesheet" href="https://lfmimages.blob.core.windows.net/400952-lfp/assets/css/Theme.css?v5.06" />
50    <link rel="stylesheet" href="https://lfmimages.blob.core.windows.net/400952-lfp/assets/css/Site-Specific.css?v5.06" />
51
52    <!-- Anything site specific that needs to be included in the head should be placed here. -->  <link rel="icon" href="https://lfmimages.blob.core.windows.net/400952-lfp/favicon.ico">  <meta property="og:title" content="Online Farmers Market in Plymouth, NH | Local Foods Plymouth" />  <meta property="og:description" content="Shop fresh, local food from small farms and makers across the region. Weekly online ordering with Thursday pickup in Plymouth, NH and delivery available." />  <meta property="og:image" content="https://lfmimages.blob.core.windows.net/400952-lfp/Logo.jpg" />  <meta property="og:url" content="https://shop.localfoodsplymouth.org/" />  <title>Online Farmers Market in Plymouth, NH | Local Foods Plymouth</title>  <meta name="description" content="Shop fresh, local food from small farms and makers across the region. Weekly online ordering with Thursday pickup in Plymouth, NH and delivery available." />
53</head>
54<body class="uk-height-1-1">
55    <a href="#main-content" class="lfm-skip-link">Skip to main content</a>
56    
57    <div id="global-overlay">
58        <span id="global-spinner" uk-spinner="ratio: 3.0"></span>
59    </div>
60
61    <header id="header">
62        <!-- Any site specific scripts that need to be included in the header should be placed here. -->�
63        <div id="main-nav"><div id="weglot"></div><div class="uk-container nav-center"><div id="logo"><img src="https://lfmimages.blob.core.windows.net/400952-lfp/Logo.jpg" id="logo-img" alt="Site Logo" /></div><div id="menu-box" class="uk-visible@s">
64<nav class="uk-navbar-container" uk-navbar>
65<div class="uk-navbar-left">
66<ul class="uk-navbar-nav uk-flex-between">
67<li class="menu-item"><a  href="//shop.localfoodsplymouth.org/Index">HOME</a></li>
68<li class="menu-item"><a  href="//shop.localfoodsplymouth.org/Products">SHOP NOW</a></li>
69<li class="menu-item"><a  href="//shop.localfoodsplymouth.org/Account/Register">SIGN UP!</a></li>
70<li class="menu-item"><a  href="//shop.localfoodsplymouth.org/Contact">CONTACT US</a></li>
71<li class="menu-item"><a  target="_blank" href="https://plymouthenergy.org/">PAREI</a></li>
72<li class="menu-item"><a  target="_blank" href="https://secure.lglforms.com/form_engine/s/wNHi1pQIn44PLdSe57N0bQ">DONATE $20 TO CELEBRATE 20 YEARS</a></li>
73 </ul>
74</div>
75</nav>
76</div>
77<a id="toggle-menu" href="#offcanvas" class="uk-navbar-toggle uk-hidden@s" title="Mobile Main Menu" u
77k-toggle uk-navbar-toggle-icon></a><div id="offcanvas" uk-offcanvas><div id="offcanvas-menu" class="uk-offcanvas-bar uk-offcanvas-bar-light"><ul class="uk-nav-default" uk-nav><li class="mobile-menu-item"><a  href="//shop.localfoodsplymouth.org/Index">HOME</a></li>
78<li class="mobile-menu-item"><a  href="//shop.localfoodsplymouth.org/Products">SHOP NOW</a></li>
79<li class="mobile-menu-item"><a  href="//shop.localfoodsplymouth.org/Account/Register">SIGN UP!</a></li>
80<li class="mobile-menu-item"><a  href="//shop.localfoodsplymouth.org/Contact">CONTACT US</a></li>
81<li class="mobile-menu-item"><a  target="_blank" href="https://plymouthenergy.org/">PAREI</a></li>
82<li class="mobile-menu-item"><a  target="_blank" href="https://secure.lglforms.com/form_engine/s/wNHi1pQIn44PLdSe57N0bQ">DONATE $20 TO CELEBRATE 20 YEARS</a></li>
83</ul>
84</div>
85</div>
86</div></div>
87        
88
89<div class="sticky-bar" uk-sticky>
90    <div class="lfm-nav-container">
91        <div class="uk-flex uk-flex-between">
92                    <div id="period-message">
93                        <!--period message used to be here-->
94                    </div>
95
96            <nav class="uk-navbar-container uk-navbar-transparent" uk-navbar="mode: click">
97                <div class="uk-navbar-right">
98                    <ul class="uk-navbar-nav top-bar-navbar">
99                        <li>
100                            <div class="uk-button-group">
101                                <div class="uk-inline">
102                                    <button class="uk-button top-bar-button" type="button"> <span uk-icon="user" aria-hidden="true"></span></button>
103                                    <div uk-dropdown="mode: click; target: !.uk-button-group; pos:bottom-right;" class="top-bar-dropdown">
104                                        <ul class="uk-nav uk-dropdown-nav">
105<li id="logged-out-products-link"><a href="//shop.localfoodsplymouth.org/Products">Shop</a></li><li id="logged-out-login-link"><a href="//shop.localfoodsplymouth.org/Account/Login">Login</a></li>                                        </ul>
106                                    </div>
107                                </div>
108                            </div>
109                        </li>
110                        <li>
111                            <div class="uk-button-group">
112                                <div class="uk-inline">
113                                    <button id="cart-trigger-btn" class="uk-button top-bar-button" onclick="openCart();" type="button" aria-label="View Shopping Cart" aria-expanded="false" aria-controls="shopping-cart">
114                                        <span uk-icon="cart" aria-label="shopping cart"></span>
115                                        <span class="uk-badge" id="item-count" style=display:none;>0</span>
116                                    </button>
117
118                                    <!-- off-canvas shopping cart-->
119                                    <dialog id="shopping-cart" aria-labelledby="cart-panel-heading">
120                                        <div class="uk-offcanvas-bar uk-offcanvas-bar-light">
121                                            <h2 id="cart-panel-heading" class="visually-hidden">Shopping Cart</h2>
122                                            <button id="cart-continue-shopping" class="uk-button uk-button-small uk-button-primary uk-margin-small-bottom" style="width:100%;" type="button" onclick="closeCart();">Continue Shopping</button>
123                                            <div>
124                                                <div id="cart-alert-area-success" class="uk-alert-success uk-margin-small-bottom" uk-alert role="status" aria-live="polite" aria-atomic="true" style="display:none;">
125                                                    <a href="#" class="uk-alert-close" uk-close></a>
126                                                    <p id="cart-alert-success-text"></p>
127                                                </div>
128
129                                                <div class="" >
130                                                    <div class="uk-text-bold" id="cart-selected-sub-text">For Distribution on: Thu Oct, 1</div>
131                                                </div>
132                                                <div id="order-list-body" class="uk-margin-small-top" >
133                                                    <div id="order-icon-table" class="uk-overflow-auto" style=display:none;>
134
135                                                        <div id="cart-message" class="uk-margin-bottom uk-text-danger" style="display:none;"></div>
136
137                                                        <div class="shopping-cart-text" id="cart-selected-sub-nameloc">
138                                                            
139                                                        </div>
140                                                        <div class="uk-margin-small-top shopping-cart-text" id="cart-ordernum-text" style="border-bottom: thin solid #333; padding-bottom: 2px;">
141                                                            
142                                                        </div>
143                                                        <table class="uk-table uk-table-small">
144                                                            <tbody id="order-items">
145                                                            </tbody>
146                                                        </table>
147                                                    </div>
148                                                </div>
149
150                                                <div id="cart-items-empty" class="uk-margin-small-top" >
151                                                    <div class="">
152                                                        There are no items in your cart for this distribution day.
153                                                    </div>
154                                                    <div>
155                                                        <a class="uk-button uk-button-small uk-button-secondary" href="/Products">Shop</a>
156                                                    </div>
157                                                </div>
158
159                                                <div id="edit-order-row" class="edit-order-button uk-margin-small-top" style=display:none;>
160                                                    <div class="order-total" id="order-total" aria-live="polite" aria-atomic="true">Total: $0.00</div>
161
162                                                    <div class="uk-margin-small-top">
163                                                        <a id="edit-order-button" class="uk-button uk-button-small uk-button-secondary" href="/Order/Edit/0"></a>
164                                                    </div>
165                                                </div>
166
167                                                <!-- subscriptions -->
168                                                <div id="subscription-list-body" class="uk-margin-medium-top">
169                                                    <div id="order-icon-subs" class="uk-overflow-auto" style=display:none;>
170                                                        <hr />
171                                                        <div class="uk-gri
171d uk-grid-small">
172                                                            <div class="uk-width-1-1">Subscription Orders</div>
173
174                                                            <div class="uk-width-1-1" id="cart-subs-items">
175
176                                                            </div>
177                                                        </div>
178                                                    </div>
179                                                </div>
180
181                                                <!-- pre-orders-->
182                                                <div id="pre-order-list-body" class="uk-margin-medium-top">
183                                                    <div id="order-icon-pre-orders" class="uk-overflow-auto" style=display:none;>
184                                                        <hr />
185                                                        <div class="uk-grid uk-grid-small">
186                                                            <div class="uk-width-1-1">Pre-Orders</div>
187
188                                                            <div class="uk-width-1-1" id="cart-pre-orders">
189
190                                                            </div>
191                                                        </div>
192                                                    </div>
193                                                </div>
194
195                                            </div>
196                                        </div>
197                                    </dialog>
198                                </div>
199                            </div>
200                        </li>
201                    </ul>
202                </div>
203            </nav>
204        </div>
205    </div>
206</div>
207
208    </header>
209    <a href="#0" class="cd-top" aria-label="Back to top" role="button">Top</a>
210    <div id="content" class="content-area">
211        <span id="main-content" tabindex="-1"></span>
212        <div id="aria-status" role="status" aria-live="polite" aria-atomic="true" class="visually-hidden"></div>
213        
214
215
216<section style='margin: 0px; display: block; font-family: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial; color: var(--text); background: var(--bg);'><style style="margin: 0px; box-sizing: border-box;">
217		.lfp-home {
218			--bg: #ffffff; --text: #0f172a; --muted: #475569; --border: #e2e8f0; --soft: #f8fafc; --card: #ffffff; --shadow: 0 4px 12px rgba(0, 0, 0, .08), 0 1px 3px rgba(0, 0, 0, .05); --primary: #166534; --primaryHover: #14532d; --max: 1100px; --r: 16px; font-family: ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial; color: var(--text); background: var(--bg);
219		}
220		
221		.lfp-home * {
222			box-sizing: border-box
223		}
224		
225		.lfp-wrap {
226			max-width: var(--max); margin: 0 auto; padding: 0 clamp(18px, 5vw, 24px)
227		}
228		
229		.lfp-muted {
230			color: var(--muted)
231		}
232		
233		.lfp-h1 {
234			margin: 0 0 12px; font-size: clamp(34px, 4.2vw, 58px); line-height: 1.08; letter-spacing: -.8px; font-weight: 800;
235		}
236		
237		.lfp-h2 {
238			margin: 0 0 10px; font-size: 22px; letter-spacing: -.2px; font-weight: 700;
239		}
240		
241		.lfp-h3 {
242			margin: 0 0 8px; font-size: 16px; font-weight: 600;
243		}
244		
245		.lfp-p {
246			margin: 0; font-size: 15px; line-height: 1.6
247		}
248		
249		.lfp-lede {
250			font-size: 17px; color: var(--muted); max-width: 70ch; line-height: 1.6;
251		}
252		
253		.lfp-section {
254			padding: 40px 0
255		}
256		
257		.lfp-section-soft {
258			padding: 40px 0; background: var(--soft); border-top: 1px solid var(--border); border-bottom: 1px solid var(--border)
259		}
260		
261		.lfp-card {
262			background: var(--card); border: 1px solid var(--border); border-radius: var(--r); box-shadow: var(--shadow)
263		}
264		
265		.lfp-card-pad {
266			padding: 20px
267		}
268		
269		.lfp-pill {
270			display: inline-block; font-size: 12px; font-weight: 800; color: #0f172a; background: #f1f5f9; border: 1px solid var(--border); padding: 6px 10px; border-radius: 999px; margin-bottom: 10px;
271		}
272		
273		.lfp-btnrow {
274			display: flex; gap: 10px; flex-wrap: wrap; margin-top: 16px
275		}
276		
277		.lfp-btn {
278			display: inline-flex; align-items: center; justify-content: center; padding: 11px 16px; border-radius: 12px; font-weight: 700; font-size: 14px; border: 1px solid var(--border); background: #fff; text-decoration: none; color: var(--text); transition: all 0.15s ease;
279		}
280		
281		.lfp-btn:hover {
282			background: #f1f5f9
283		}
284		
285		.lfp-btn-primary {
286			background: var(--primary); border-color: var(--primary); color: #fff; box-shadow: 0 2px 8px rgba(22, 101, 52, .12);
287		}
288		
289		.lfp-btn-primary:hover {
290			background: var(--primaryHover); border-color: var(--primaryHover); box-shadow: 0 4px 12px rgba(22, 101, 52, .16);
291		}
292		/* Banner image */
293		
294		.lfp-hero {
295			padding: 28px 0; background: var(--soft); border-bottom: 1px solid var(--border)
296		}
297		
298		.lfp-banner {
299			overflow: hidden; border-radius: var(--r); border: 1px solid var(--border); box-shadow: var(--shadow); background: #fff;
300		}
301		
302		.lfp-banner img {
303			display: block; width: 100%; height: auto
304		}
305		/* Hero card - simplified single column */
306		
307		.lfp-hero-card {
308			margin-top: 18px
309		}
310		
311		.lfp-kicker {
312			font-size: 14px; color: var(--muted); margin-bottom: 12px; font-weight: 500;
313		}
314		
315		.lfp-weekbar {
316			display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; margin-top: 18px
317		}
318		
319		.lfp-weekitem {
320			background: var(--soft); border: 1px solid var(--border); border-radius: 14px; padding: 12px
321		}
322		
323		.lfp-weeklabel {
324			font-size: 12px; color: var(--muted); margin-bottom: 4px; font-weight: 500;
325		}
326		
327		.lfp-weekvalue {
328			font-size: 14px; font-weight: 700;
329		}
330		
331		.lfp-newhere {
332			margin-top: 18px; padding: 16px; background: #f0fdf4; border: 1px solid #bbf7d0; border-radius: var(--r); display: flex; align-items: center; justify-content: space-between; gap: 16px; flex-wrap: wrap;
333		}
334		
335		.lfp-newhere-text {
336			flex: 1; min-width: 280px;
337		}
338		
339		.lfp-newhere-text strong {
340			font-weight: 700; color: var(--text);
341		}
342		
343		.lfp-newhere .lfp-btnrow {
344			margin: 0; flex-shrink: 0;
345		}
346		/* Grids */
347		
348		.lfp-grid2 {
349			display: grid; grid-template-columns: repeat(2, 1fr); gap: 14px
350		}
351		
352		.lfp-grid3 {
353			display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px
354		}
355		/* Steps */
356		
357		.lfp-step {
358			padding: 18px
359		}
360		
361		.lfp-num {
362			width: 36px; height: 36px; border-radius: 12px; background: #eef2ff; border: 1px solid #e0e7ff; display: flex; align-items: center; justify-content: center; font-weight: 800; color: #1e3a8a; margin-bottom: 10px; font-size: 16px;
363		}
364		/* Lists */
365		
366		.lfp-ul {
367			margin: 10px 0 0 20px; color: var(--muted); line-height: 1.6;
368		}
369		
370		.lfp-ul li {
371			margin: 7px 0
372		}
373		/* Food Share section styling */
374		
375		.lfp-foodshare-wrap {
376			background: linear-gradient(180deg, #f0fdf4, #ffffff); padding: 28px; border-radius: var(--r); border: 1px solid #bbf7d0;
377		}
378		/* Responsive */
379		
380		@media (max-width: 980px) {
381			.lfp-weekbar {
382				grid-template-columns: 1fr 1fr
383			}
384			.lfp-grid3 {
385				grid-template-columns: 1fr
386			}
387			.lfp-grid2 {
388				grid-template-columns: 1fr
389			}
390			.lfp-newhere {
391				flex-direction: column; align-items: flex-start;
392			}
393		}
394
395	</style> <!-- HERO --><div style="margin: 0px; box-sizing: border-box; padding: 28px 0px; background: var(--soft); border-bottom: 1px solid var(--border);"><div style="margin: 0px auto; box-sizing: border-box; max-width: var(--max); padding: 0px clamp(18px, 5vw, 24px);"><div style="margin: 0px; box-sizing: border-box; overflow: hidden; border-radius: var(--r); border: 1px solid var(--border); box-shadow: var(--shadow); background: rgb(255, 255, 255);"><img src="https://lfmimages.blob.core.windows.net/400952-lfp/content/image_6e16d64c.png" alt="Local Foods Plymouth - local farms and food makers" style="max-width: 100%; height: auto; box-sizing: border-box; border: 0px; width: 100%;" class="fr-fil fr-dib"></div><div style="margin: 18px 0px 0px; box-sizing: border-box; background: var(--card); border: 1px solid var(--border); border-radius: var(--r); box-shadow: var(--shadow); padding: 20px;"><div style="margin: 0px 0px 12px; box-sizing: border-box; font-size: 14px; color: var(--muted); font-weight: 500;">Online farmers market &bull; Weekly pickup &bull; Delivery available</div><h1 style='margin: 0px 0px 12px; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-weight: 800; color: rgb(68, 68, 68); text-transform: none; box-sizing: border-box; font-size: 36px; line-height: 42px; letter-spacing: -0.8px;'>
395Online Farmers Market in Plymouth, NH</h1><p style="margin: 15px 0px; box-sizing: border-box; font-size: 17px; color: var(--muted); max-width: 70ch; line-height: 1.6;">Your online farmers market for fresh, locally grown and produced food from across the region. Shop each week from dozens of small farms and food makers &mdash; from produce and meat to eggs, baked goods, and pantry staples.</p><div style="margin: 16px 0px 0px; box-sizing: border-box; display: flex; gap: 10px; flex-wrap: wrap;"><a href="/Products" style="margin: 0px; background: var(--primary); box-sizing: border-box; display: inline-flex; align-items: center; justify-content: center; padding: 11px 16px; border-radius: 12px; font-weight: 700; font-size: 14px; border-color: var(--primary); border-top-style: ; border-top-width: ; border-right-style: ; border-right-width: ; border-bottom-style: ; border-bottom-width: ; border-left-style: ; border-left-width: ; border-image-source: ; border-image-slice: ; border-image-width: ; border-image-outset: ; border-image-repeat: ; text-decoration: none; color: rgb(0, 119, 221); transition: 0.15s; box-shadow: rgba(22, 101, 52, 0.12) 0px 2px 8px; cursor: pointer;">Shop this week</a> <a href="#lfp-how" style="margin: 0px; background: rgb(255, 255, 255); box-sizing: border-box; display: inline-flex; align-items: center; justify-content: center; padding: 11px 16px; border-radius: 12px; font-weight: 700; font-size: 14px; border: 1px solid var(--border); text-decoration: none; color: rgb(0, 119, 221); transition: 0.15s; cursor: pointer;">How it works</a></div><div style="margin: 18px 0px 0px; box-sizing: border-box; display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px;"><div style="margin: 0px; box-sizing: border-box; background: var(--soft); border: 1px solid var(--border); border-radius: 14px; padding: 12px;"><div style="margin: 0px 0px 4px; box-sizing: border-box; font-size: 12px; color: var(--muted); font-weight: 500;">Store opens</div><div style="margin: 0px; box-sizing: border-box; font-size: 14px; font-weight: 700;">Fri 12 PM</div></div><div style="margin: 0px; box-sizing: border-box; background: var(--soft); border: 1px solid var(--border); border-radius: 14px; padding: 12px;"><div style="margin: 0px 0px 4px; box-sizing: border-box; font-size: 12px; color: var(--muted); font-weight: 500;">Pickup</div><div style="margin: 0px; box-sizing: border-box; font-size: 14px; font-weight: 700;">Thu 3:30 &ndash; 8 PM</div></div><div style="margin: 0px; box-sizing: border-box; background: var(--soft); border: 1px solid var(--border); border-radius: 14px; padding: 12px;"><div style="margin: 0px 0px 4px; box-sizing: border-box; font-size: 12px; color: var(--muted); font-weight: 500;">Location</div><div style="margin: 0px; box-sizing: border-box; font-size: 14px; font-weight: 700;"><a href="https://maps.app.goo.gl/ff56ubfrvQY4wX249" target="_blank" rel="noopener noreferrer" style="margin: 0px; background: 0px 0px; box-sizing: border-box; color: rgb(0, 119, 221); text-decoration: none; cursor: pointer;">14 Fairgrounds Rd</a></div></div><div style="margin: 0px; box-sizing: border-box; background: var(--soft); border: 1px solid var(--border); border-radius: 14px; padding: 12px;"><div style="margin: 0px 0px 4px; box-sizing: border-box; font-size: 12px; color: var(--muted); font-weight: 500;">Delivery</div><div style="margin: 0px; box-sizing: border-box; font-size: 14px; font-weight: 700;">Available</div></div></div><!-- New Here inline callout --><div style="margin: 18px 0px 0px; box-sizing: border-box; padding: 16px; background: rgb(240, 253, 244); border: 1px solid rgb(187, 247, 208); border-radius: var(--r); display: flex; align-items: center; justify-content: space-between; gap: 16px; flex-wrap: wrap;"><div style="margin: 0px; box-sizing: border-box; flex: 1 1 0%; min-width: 280px;"><strong style="margin: 0px; font-weight: 700; box-sizing: border-box; color: var(--text);">New here?</strong> Create an account &mdash; no membership required! Then shop weekly when the store opens. <a href="https://mailchi.mp/localfoodsplymouth/gtqjxrzo5s" target="_blank" rel="noopener noreferrer" style="margin: 0px; background: 0px 0px; box-sizing: border-box; color: rgb(0, 119, 221); text-decoration: none; cursor: pointer;">Join the email list</a> for updates.</div><div style="margin: 0px; box-sizing: border-box; display: flex; gap: 10px; flex-wrap: wrap; flex-shrink: 0;"><a href="https://shop.localfoodsplymouth.org/Account/Register" target="_blank" rel="noopener noreferrer" style="margin: 0px; background: var(--primary); box-sizing: border-box; display: inline-flex; align-items: center; justify-content: center; padding: 11px 16px; border-radius: 12px; font-weight: 700; font-size: 14px; border-color: var(--primary); border-top-style: ; border-top-width: ; border-right-style: ; border-right-width: ; border-bottom-style: ; border-bottom-width: ; border-left-style: ; border-left-width: ; border-image-source: ; border-image-slice: ; border-image-width: ; border-image-outset: ; border-image-repeat: ; text-decoration: none; color: rgb(0, 119, 221); transition: 0.15s; box-shadow: rgba(22, 101, 52, 0.12) 0px 2px 8px; cursor: pointer;">Create an account</a></div></div></div></div></div><!-- PICKUP OPTIONS --><div style="margin: 0px; box-sizing: border-box; padding: 40px 0px;"><div style="margin: 0px auto; box-sizing: border-box; max-width: var(--max); padding: 0px clamp(18px, 5vw, 24px);"><div style="margin: 0px; box-sizing: border-box; background: var(--card); border: 1px solid var(--border); border-radius: var(--r); box-shadow: var(--shadow); padding: 20px;"><h2 style='margin: 0px 0px 10px; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-weight: 700; color: rgb(68, 68, 68); text-transform: none; box-sizing: border-box; font-size: 24px; letter-spacing: -0.2px; line-height: 30px;'>Pickup options</h2><h3 style='margin: 16px 0px 8px; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-weight: 600; color: rgb(68, 68, 68); text-transform: none; box-sizing: border-box; font-size: 18px; line-height: 24px;'>Staffed pickup (3:30 - 5:30)</h3><p style="margin: 0px; box-sizing: border-box; color: var(--muted); font-size: 15px; line-height: 1.6;">Pull up, give us the name on your order, and our team will bring your box to your vehicle. No need to get out, but if you&#39;d like to chat, park in the lot and come say hello!</p><h3 style='margin: 20px 0px 8px; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-weight: 600; color: rgb(68, 68, 68); text-transform: none; box-sizing: border-box; font-size: 18px; line-height: 24px;'>After-hours self-service pickup (5:30 &ndash; 8:00 PM)</h3><p style="margin: 0px; box-sizing: border-box; color: var(--muted); font-size: 15px; line-height: 1.6;">Can&#39;t make the staffed pickup window? Choose after-hours pickup at checkout. Your order will be staged for self-service.</p><div style="margin: 16px 0px 0px; padding: 16px; background: rgb(248, 250, 252); border-radius: 14px; border: 1px solid rgb(226, 232, 240); box-sizing: border-box;"><p style="margin: 0px 0px 10px; box-sizing: border-box; font-size: 15px; line-height: 1.6;"><strong style="margin: 0px; font-weight: 700; box-sizing: border-box;">At checkout:</strong></p><ol style="margin: 10px 0px 0px 20px; padding-left: 30px; box-sizing: border-box; color: var(--muted); line-height: 1.6;"><li style="margin: 7px 0px; box-sizing: border-box;">Under <strong style="margin: 0px; font-weight: 700; box-sizing: border-box;">Distribution Information</strong>, click <strong style="margin: 0px; font-weight: 700; box-sizing: border-box;">Select Location</strong></li><li style="margin: 7px 0px; box-sizing: border-box;">Choose <strong style="margin: 0px; font-weight: 700; box-sizing: border-box;">After Hours Pickup</strong></li><li style="margin: 7px 0px; box-sizing: border-box;">Complete your order</li></ol><p style="margin: 12px 0px 0px; box-sizing: border-box; color: var(--muted); font-size: 15px; line-height: 1.6;">Your bags will be labeled and ready for pickup between 5:30 &ndash; 8:00 PM. Please take only the bags with your name.</p></div></div></div></div><!-- HOW IT WORKS --><div id="lfp-how" style="margin: 0px; box-sizing: border-box; padding: 40px 0px; background: var(--soft); border-top: 1px solid var(--border); border-bottom: 1px solid var(--border);"><div style="margin: 0px auto; box-sizing: border-box; max-width: var(--max); padding: 0px clamp(18px, 5vw, 24px);"><h2 style='margin: 0px 0px 10px; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-weight: 700; color: rgb(68, 68, 68); text-transform: none; box-sizing: border-box; font-size: 24px; letter-spacing: -0.2px; line-height: 30px;'>How it works</h2><p style="max-width: 80ch; margin: 0px; box-sizing: border-box; color: var(--muted); font-size: 15px; line-height: 1.6;">We bring local food together in one place so it&#39;s easier for you to eat seasonally and support your neighbors. For producers, we handle the backend &mdash; marketing, sales, and fulfillment &mdash; so they can focus on what they do best: growing and making great food.</p><p style="margin: 12px 0px 0px; max-width: 80ch; box-sizing: border-box; color: var(--muted); font-size: 15px; line-height: 1.6;">Local Foods Plymouth serves Plymouth, NH and nearby towns including Campton, Ashland, Holderness, Rumney, Thornton, and Bristol, with a single weekly pickup location in Plymouth and limited local delivery.</p><div style="margin: 20px 0px 0px; box-sizing: border-box; display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px;"><div style="margin: 0px; box-sizing: border-box; background: var(--card); border: 1px solid var(--border); border-radius: var(--r); box-shadow: var(--shadow); padding: 18px;"><div style="margin: 0px 0px 10px; box-sizing: border-box; width: 36px; height: 36px; border-radius: 12px; background: rgb(238, 242, 255); border: 1px solid rgb(224, 231, 255); display: flex; align-items: center; justify-content: center; font-weight: 800; color: rgb(30, 58, 138); font-size: 16px;">1</div><h3 style='margin: 0px 0px 8px; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-weight: 600; color: rgb(68, 68, 68); text-transform: none; box-sizing: border-box; font-size: 18px; line-height: 24px;'>Shop online each week</h3><p style="margin: 0px; box-sizing: border-box; color: var(--muted); font-size: 15px; line-height: 1.6;">New items as the seasons change. One checkout.</p></div><div style="margin: 0px; box-sizing: border-box; background: var(--card); border: 1px solid var(--border); border-radius: var(--r); box-shadow: var(--shadow); padding: 18px;"><div style="margin: 0px 0px 10px; box-sizing: border-box; width: 36px; height: 36px; border-radius: 12px; background: rgb(238, 242, 255); border: 1px solid rgb(224, 231, 255); display: flex; align-items: center; justify-content: center; font-weight: 800; color: rgb(30, 58, 138); font-size: 16px;">
3952</div><h3 style='margin: 0px 0px 8px; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-weight: 600; color: rgb(68, 68, 68); text-transform: none; box-sizing: border-box; font-size: 18px; line-height: 24px;'>We coordinate with farms &amp; makers</h3><p style="margin: 0px; box-sizing: border-box; color: var(--muted); font-size: 15px; line-height: 1.6;">Ordering, packing, and fulfillment handled behind the scenes.</p></div><div style="margin: 0px; box-sizing: border-box; background: var(--card); border: 1px solid var(--border); border-radius: var(--r); box-shadow: var(--shadow); padding: 18px;"><div style="margin: 0px 0px 10px; box-sizing: border-box; width: 36px; height: 36px; border-radius: 12px; background: rgb(238, 242, 255); border: 1px solid rgb(224, 231, 255); display: flex; align-items: center; justify-content: center; font-weight: 800; color: rgb(30, 58, 138); font-size: 16px;">3</div><h3 style='margin: 0px 0px 8px; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-weight: 600; color: rgb(68, 68, 68); text-transform: none; box-sizing: border-box; font-size: 18px; line-height: 24px;'>Pick up Thursday (or choose delivery)</h3><p style="margin: 0px; box-sizing: border-box; color: var(--muted); font-size: 15px; line-height: 1.6;">Pickup 3:30 &ndash; 8 PM at: 14 Fairgrounds Rd., Plymouth NH 03264</p><p style="margin: 6px 0px 0px; box-sizing: border-box; color: var(--muted); font-size: 15px; line-height: 1.6;">Limited delivery available.</p></div></div><p style="margin: 16px 0px 15px; font-size: 13px; box-sizing: border-box; color: var(--muted);">Local Foods Plymouth is a program of the <a href="http://plymouthenergy.org" target="_blank" rel="noopener noreferrer" style="margin: 0px; background: 0px 0px; box-sizing: border-box; color: rgb(0, 119, 221); text-decoration: none; cursor: pointer;">Plymouth Area Renewable Energy Initiative (PAREI)</a>.</p></div></div><!-- GETTING STARTED --><div style="margin: 0px; box-sizing: border-box; padding: 40px 0px;"><div style="margin: 0px auto; box-sizing: border-box; max-width: var(--max); padding: 0px clamp(18px, 5vw, 24px);"><h2 style='margin: 0px 0px 10px; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-weight: 700; color: rgb(68, 68, 68); text-transform: none; box-sizing: border-box; font-size: 24px; letter-spacing: -0.2px; line-height: 30px;'>Getting started</h2><div style="margin: 14px 0px 0px; box-sizing: border-box; display: grid; grid-template-columns: repeat(2, 1fr); gap: 14px;"><div style="margin: 0px; box-sizing: border-box; background: var(--card); border: 1px solid var(--border); border-radius: var(--r); box-shadow: var(--shadow); padding: 20px;"><div style="margin: 0px 0px 10px; box-sizing: border-box; display: inline-block; font-size: 12px; font-weight: 800; color: rgb(15, 23, 42); background: rgb(241, 245, 249); border: 1px solid var(--border); padding: 6px 10px; border-radius: 999px;">Producers</div><h3 style='margin: 0px 0px 8px; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-weight: 600; color: rgb(68, 68, 68); text-transform: none; box-sizing: border-box; font-size: 18px; line-height: 24px;'>Sell through Local Foods Plymouth</h3><p style="margin: 0px; box-sizing: border-box; color: var(--muted); font-size: 15px; line-height: 1.6;">Are you a local farmer or food producer looking to reach more customers?</p><div style="margin: 16px 0px 0px; box-sizing: border-box; display: flex; gap: 10px; flex-wrap: wrap;"><a href="mailto:[email protected]?subject=Interested%20in%20Joining%20LFP%20As%20a%20Vendor" style="margin: 0px; background: var(--primary); box-sizing: border-box; display: inline-flex; align-items: center; justify-content: center; padding: 11px 16px; border-radius: 12px; font-weight: 700; font-size: 14px; border-color: var(--primary); border-top-style: ; border-top-width: ; border-right-style: ; border-right-width: ; border-bottom-style: ; border-bottom-width: ; border-left-style: ; border-left-width: ; border-image-source: ; border-image-slice: ; border-image-width: ; border-image-outset: ; border-image-repeat: ; text-decoration: none; color: rgb(0, 119, 221); transition: 0.15s; box-shadow: rgba(22, 101, 52, 0.12) 0px 2px 8px; cursor: pointer;">Contact us</a></div></div><div style="margin: 0px; box-sizing: border-box; background: var(--card); border: 1px solid var(--border); border-radius: var(--r); box-shadow: var(--shadow); padding: 20px;"><div style="margin: 0px 0px 10px; box-sizing: border-box; display: inline-block; font-size: 12px; font-weight: 800; color: rgb(15, 23, 42); background: rgb(241, 245, 249); border: 1px solid var(--border); padding: 6px 10px; border-radius: 999px;">Customers</div><h3 style='margin: 0px 0px 8px; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-weight: 600; color: rgb(68, 68, 68); text-transform: none; box-sizing: border-box; font-size: 18px; line-height: 24px;'>Create an account and start shopping</h3><p style="margin: 0px; box-sizing: border-box; color: var(--muted); font-size: 15px; line-height: 1.6;">Want to eat fresher food and support local farms?</p><div style="margin: 16px 0px 0px; box-sizing: border-box; display: flex; gap: 10px; flex-wrap: wrap;"><a href="https://shop.localfoodsplymouth.org/Account/Register" target="_blank" rel="noopener noreferrer" style="margin: 0px; background: var(--primary); box-sizing: border-box; display: inline-flex; align-items: center; justify-content: center; padding: 11px 16px; border-radius: 12px; font-weight: 700; font-size: 14px; border-color: var(--primary); border-top-style: ; border-top-width: ; border-right-style: ; border-right-width: ; border-bottom-style: ; border-bottom-width: ; border-left-style: ; border-left-width: ; border-image-source: ; border-image-slice: ; border-image-width: ; border-image-outset: ; border-image-repeat: ; text-decoration: none; color: rgb(0, 119, 221); transition: 0.15s; box-shadow: rgba(22, 101, 52, 0.12) 0px 2px 8px; cursor: pointer;">Create an account</a> <a href="/Products" style="margin: 0px; background: rgb(255, 255, 255); box-sizing: border-box; display: inline-flex; align-items: center; justify-content: center; padding: 11px 16px; border-radius: 12px; font-weight: 700; font-size: 14px; border: 1px solid var(--border); text-decoration: none; color: rgb(0, 119, 221); transition: 0.15s; cursor: pointer;">
395Shop this week</a></div></div></div></div></div><!-- FARM TO COMMUNITY FOOD SHARE --><div id="lfp-foodshare" style="margin: 0px; box-sizing: border-box; padding: 40px 0px; background: var(--soft); border-top: 1px solid var(--border); border-bottom: 1px solid var(--border);"><div style="margin: 0px auto; box-sizing: border-box; max-width: var(--max); padding: 0px clamp(18px, 5vw, 24px);"><div style="margin: 0px; box-sizing: border-box; background: linear-gradient(rgb(240, 253, 244), rgb(255, 255, 255)); padding: 28px; border-radius: var(--r); border: 1px solid rgb(187, 247, 208);"><div style="margin: 0px 0px 10px; box-sizing: border-box; display: inline-block; font-size: 12px; font-weight: 800; color: rgb(15, 23, 42); background: rgb(241, 245, 249); border: 1px solid var(--border); padding: 6px 10px; border-radius: 999px;">Food access</div><h2 style='margin: 0px 0px 10px; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-weight: 700; color: rgb(68, 68, 68); text-transform: none; box-sizing: border-box; font-size: 24px; letter-spacing: -0.2px; line-height: 30px;'>Farm to Community Food Share</h2><p style="max-width: 85ch; margin: 0px; box-sizing: border-box; color: var(--muted); font-size: 15px; line-height: 1.6;">Local Foods Plymouth is committed to bringing farm-fresh, locally grown, nutritious food to under-served community members experiencing food insecurity. Barriers like transportation, income, and digital access can make healthy food harder to reach.</p><p style="margin: 12px 0px 0px; max-width: 85ch; box-sizing: border-box; color: var(--muted); font-size: 15px; line-height: 1.6;">As part of our neighbor helping neighbor mission, we believe it&#39;s our responsibility to be the network that shares our community&#39;s harvest. All people have the right to eat healthy &mdash; that&#39;s why we created the Farm to Community Food Share Program.</p><div style="margin: 18px 0px 0px; box-sizing: border-box; display: grid; grid-template-columns: repeat(2, 1fr); gap: 14px;"><div style="box-shadow: none; background: white; margin: 0px; box-sizing: border-box; border: 1px solid var(--border); border-radius: var(--r); padding: 20px;"><h3 style='margin: 0px 0px 8px; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-weight: 600; color: rgb(68, 68, 68); text-transform: none; box-sizing: border-box; font-size: 18px; line-height: 24px;'>How it works</h3><ul style="margin: 10px 0px 0px 20px; padding-left: 30px; box-sizing: border-box; color: var(--muted); line-height: 1.6;"><li style="margin: 7px 0px; box-sizing: border-box;">Donations are allocated on at least a monthly basis to the organizations below.</li><li style="margin: 7px 0px; box-sizing: border-box;">12% of your donation supports program operations.</li><li style="margin: 7px 0px; box-sizing: border-box;">The remainder goes directly to providing healthy food for our neighbors.</li></ul></div><div style="box-shadow: none; background: white; margin: 0px; box-sizing: border-box; border: 1px solid var(--border); border-radius: var(--r); padding: 20px;"><h3 style='margin: 0px 0px 8px; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-weight: 600; color: rgb(68, 68, 68); text-transform: none; box-sizing: border-box; font-size: 18px; line-height: 24px;'>Who we support</h3><ul style="margin: 10px 0px 0px 20px; padding-left: 30px; box-sizing: border-box; color: var(--muted); line-height: 1.6;"><li style="margin: 7px 0px; box-sizing: border-box;">The Bridge House Homeless Shelter</li><li style="margin: 7px 0px; box-sizing: border-box;">The Plymouth Area Senior Center</li><li style="margin: 7px 0px; box-sizing: border-box;">Boulder Point Veterans Housing</li><li style="margin: 7px 0px; box-sizing: border-box;">Plymouth Area Community Closet</li></ul></div></div><div style="margin: 16px 0px 0px; padding: 18px; background: white; border-radius: 14px; border: 1px solid rgb(226, 232, 240); box-sizing: border-box;"><h3 style='margin: 0px 0px 8px; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-weight: 600; color: rgb(68, 68, 68); text-transform: none; box-sizing: border-box; font-size: 18px; line-height: 24px;'>How to donate</h3><p style="margin: 0px; box-sizing: border-box; color: var(--muted); font-size: 15px; line-height: 1.6;">To make a donation at any time, choose <strong style="margin: 0px; font-weight: 700; box-sizing: border-box;">&quot;Farm to Community Food Share&quot;</strong> in the LFP store.</p><div style="margin: 16px 0px 0px; box-sizing: border-box; display: flex; gap: 10px; flex-wrap: wrap;"><a href="/Products" style="margin: 0px; background: var(--primary); box-sizing: border-box; display: inline-flex; align-items: center; justify-content: center; padding: 11px 16px; border-radius: 12px; font-weight: 700; font-size: 14px; border-color: var(--primary); border-top-style: ; border-top-width: ; border-right-style: ; border-right-width: ; border-bottom-style: ; border-bottom-width: ; border-left-style: ; border-left-width: ; border-image-source: ; border-image-slice: ; border-image-width: ; border-image-outset: ; border-image-repeat: ; text-decoration: none; color: rgb(0, 119, 221); transition: 0.15s; box-shadow: rgba(22, 101, 52, 0.12) 0px 2px 8px; cursor: pointer;">Donate in the store</a></div><p style="margin: 16px 0px 0px; box-sizing: border-box; color: var(--muted); font-size: 15px; line-height: 1.6;">You can also make a secure online donation through our partner, Little Green Light:</p><div style="margin: 16px 0px 0px; box-sizing: border-box; display: flex; gap: 10px; flex-wrap: wrap;"><a href="https://secure.lglforms.com/form_engine/s/EjFI88dMNBYF73-WGX7bjg" target="_blank" rel="noopener noreferrer" style="margin: 0px; background: var(--primary); box-sizing: border-box; display: inline-flex; align-items: center; justify-content: center; padding: 11px 16px; border-radius: 12px; font-weight: 700; font-size: 14px; border-color: var(--primary); border-top-style: ; border-top-width: ; border-right-style: ; border-right-width: ; border-bottom-style: ; border-bottom-width: ; border-left-style: ; border-left-width: ; border-image-source: ; border-image-slice: ; border-image-width: ; border-image-outset: ; border-image-repeat: ; text-decoration: none; color: rgb(0, 119, 221); transition: 0.15s; box-shadow: rgba(22, 101, 52, 0.12) 0px 2px 8px; cursor: pointer;">Donate online</a></div></div></div></div></div></section>
396
397    </div>
398
399    <div class="uk-clearfix"></div><footer id="footer">
399<div class="nav-center footer-center-color uk-grid"><div class="uk-width-1-6@l uk-width-1-1@m uk-width-1-1@s"></div><div class="uk-width-2-3@l uk-width-1-1@m uk-width-1-1@s"><ul class="footer-list"><li><a class="" href="/Home/Page/privacy">Privacy Policy</a>&nbsp;&nbsp;</li><li><a class="" href="/Home/Page/terms_of_service">Terms of Service</a>&nbsp;&nbsp;</li><li><a class="" href="/Home/Page/refunds">Refund Policy</a>&nbsp;&nbsp;</li><li><a class="" target="_blank" href="https://lfp.lfmadmin.com/grow/Home/Index">Producer Login</a>&nbsp;&nbsp;</li><li><a class="" href="/Contact">Contact Us</a></li></ul><ul class="footer-list"><li>&copy; Powered By -<a href="http://home.localfoodmarketplace.com">Local Food Marketplace Inc.</a></li></ul></div><div class="uk-width-1-6@l uk-width-1-1@m uk-width-1-1@s"></div></div></footer>
400    <!-- Any site specific scripts that need to be included in the footer should be placed here. -->
401
402    
402<script type="text/x-jquery-tmpl" id="tmplOrderItem">
403        <tr class="shopping-cart-row shopping-cart-text">
404            <td>
405                <div class="shopping-cart-product-name">${itemName}</div>
406                <div class="shopping-cart-unit-name">${itemUnit} - ${itemUnitPrice}</div>
407            </td>
408            <td class="uk-flex uk-flex-center">
409                {{if canDeleteItem}}
410                <button type="button" uk-icon="icon: minus; ratio: 1" class="uk-icon-link shopping-cart-adjustor" onclick="decreaseQty('${itemId}');" aria-label="Decrease quantity of ${itemName}"></button>
411                {{/if}}
412                <input type="text" class="uk-input uk-form-small uk-text-center" value="${itemQty}" readonly="readonly" id="cart-qty-${itemId}" style="width: 50px;" aria-label="Quantity of ${itemName}" />
413                {{if canDeleteItem}}
414                <button type="button" uk-icon="icon: plus; ratio: 1" class="uk-icon-link shopping-cart-adjustor" onclick="increaseQty('${itemId}');" aria-label="Increase quantity of ${itemName}"></button>
415                {{/if}}
416            </td>
417        </tr>
418    </script>
418
419
420    
420<script type="text/x-jquery-tmpl" id="tmplSubsItem">
421        <div class="uk-margin-top">
422            <div class="shopping-cart-text">{{html name}}</div>
423
424            {{each orders}}
425            <div class="uk-margin-small-top shopping-cart-text" style="border-bottom: thin solid #333; padding-bottom: 2px;">
426                Order# ${orderId}
427            </div>
428            {{each items}}
429            <ul class="">
430                <li class="shopping-cart-text">${name}</li>
431            </ul>
432            {{/each}}
433            <div class="uk-margin-small-top">
434                <button class="uk-button uk-button-small uk-button-secondary" onclick="window.location='${orderLink}';">Subscription Checkout</button>
435            </div>
436            <hr />
437            {{/each}}
438
439        </div>
440    </script>
440
441
442    
442<script type="text/x-jquery-tmpl" id="tmplPreOrder">
443        <div class="uk-margin-small-top">
444            <div class="uk-text-bold">{{html distribDay}}</div>
445            <div class="shopping-cart-text">${pickupDay}</div>
446            <div class="shopping-cart-text">${locName}</div>
447
448            <div class="uk-margin-small-top shopping-cart-text" style="border-bottom: thin solid #333; padding-bottom: 2px;">
449                Order# ${orderId}
450            </div>
451            <div class="shopping-cart-text uk-margin-small-top">${itemCount} item(s)</div>
452            <div class="shopping-cart-text">Total: ${orderTotal}</div>
453
454            <div class="uk-margin-small-top">
455                <button class="uk-button uk-button-small uk-button-secondary" onclick="window.location='${orderLink}';">Review and Confirm Pre-Order</button>
456            </div>
457            <hr />
458
459        </div>
460    </script>
460
461
462    
462<script type="text/javascript">
463        var baseUrl = "//shop.localfoodsplymouth.org/";
464
465        // display the shopping cart
466        function displayCart(onReady) {
467
468            // clear cart message
469            $("#cart-message").html("");
470            $("#cart-message").hide();
471
472            $.ajax({
473                type: "POST",
474                contentType: "application/json; charset=utf-8",
475                dataType: "json",
476                url: baseUrl + 'api/ProductApi/getOrderInfo',
477                success: function (data) {
478
479                    $("#item-count").html(data.itemCount);
480                    $("#order-total").html("Total: " + data.orderTotal);
481
482                    // clear carts first
483                    $("#order-items").empty();
484                    $("#cart-subs-items").empty();
485                    $("#cart-pre-orders").empty();
486
487                    //set for delete order item
488                    orderId = data.orderId;
489
490                    // hide/show stuff
491                    if (data.orderItemCount > 0) {
492                        // build items
493                        $(data.orderItems).each(function (i, item) {
494                            $("#order-items").append($("#tmplOrderItem").tmpl(item));
495                        });
496                        $("#order-icon-table").show();
497                        $("#edit-order-row").show();
498                        $("#order-list-body").show();
499                        $("#cart-items-empty").hide();
500                        $("#edit-order-button").attr("href", baseUrl + 'Order/Edit/' + data.orderId);
501                        $("#edit-order-button").text(data.orderButtonText);
502                        $("#cart-selected-sub-text").html(data.selectedSubText);
503                        $("#cart-selected-sub-nameloc").html(data.selectedSubNameAndLoc);
504                        $("#cart-ordernum-text").html(data.orderNumberText);
505                    }
506                    else {
507                        $("#order-icon-table").hide();
508                    }
509
510                    if (data.hasSubscriptions) {
511                        // build subs list
512                        $(data.subsDays).each(function (i, item) {
513                            $("#cart-subs-items").append($("#tmplSubsItem").tmpl(item));
514                        });
515                        $("#order-icon-subs").show();
516                    }
517                    else {
518                        $("#order-icon-subs").hide();
519                    }
520
521                    if (data.hasPreOrders) {
522                        // build pre-order list
523                        $(data.preOrders).each(function (i, item) {
524                            $("#cart-pre-orders").append($("#tmplPreOrder").tmpl(item));
525                        });
526                        $("#order-icon-pre-orders").show();
527                    }
528                    else {
529                        $("#order-icon-pre-orders").hide();
530                    }
531                    if (typeof onReady === 'function') { onReady(); }
532                },
533                error: function (error) {
534                    console.log(error.responseText);
535                }
536            });
537        }
538
539        function openProducer(pGuid) {
540            url = baseUrl + "Producer/" + pGuid;
541            window.open(url, "+blank");
542        }
543
544        function hideCartMessage() {
545            $("#cart-message").hide();
546        }
547
548        function updateCartMessage(message) {
549            $("#cart-message").html(message);
550            $("#cart-message").show();
551        }
552
553        function deleteOrderItem(itemId) {
554            var id = itemId;
555            $.ajax({
556                type: "GET",
557                contentType: "application/json; charset=utf-8",
558                dataType: "json",
559                url: baseUrl + 'api/ProductApi/deleteOrderItem/?id=' + id + "&orderId=" + orderId,
560
561                success: function (data) {
562                    if (data.success) {
563                        var href = window.location.href;
564                        var contains = href.includes("Order");
565                        displayCart()
566
567                        // handle analytics
568                        if (data.gaItem != null) {
569                            window.dataLayer = window.dataLayer || [];
570                            function gtag() { dataLayer.push(arguments); }
571                            gtag("event", "remove_from_cart", data.gaItem);
572                        }
573                    }
574                    else {
575                        displayCart()
576                        hideLoading();
577                        $("#cart-message").html(data.message);
578                        $("#cart-message").show();
579                    }
580
581                    if (contains) { location.reload() }
582                },
583                error: function (error) {
584                console.log(error.responseText);
585                }
586            });
587        }
588
589        function increaseQty(itemId) {
590            hideCartMessage();
591
592            var id = itemId;
593
594            var qty = $("#cart-qty-" + itemId).val();
595            if (!qty || isNaN(qty)) {
596                updateCartMessage("The current quantity of the item is not a valid number");
597                return;
598            }
599
600            // increase the qty
601            qty++;
602
603            $.ajax({
604                type: "GET",
605                contentType: "application/json; charset=utf-8",
606                dataType: "json",
607                url: baseUrl + 'api/ProductApi/changeOrderItem/?id=' + id + "&orderId=" + orderId + "&qty=1",
608
609                success: function (data) {
610                    if (data.success) {
611                        var href = window.location.href;
612                        var contains = href.includes("Order");
613                        displayCart()
614                    }
615                    else {
616                        displayCart()
617                        updateCartMessage(data.message);
618                    }
619
620                    if (contains) { location.reload() }
621                },
622                error: function (error) {
623                    console.log(error.responseText);
624                }
625            });
626        }
627
628        function decreaseQty(itemId) {
629            hideCartMessage();
630
631            var id = itemId;
632
633            var qty = $("#cart-qty-" + itemId).val();
634            if (!qty || isNaN(qty)) {
635                updateCartMessage("The current quantity of the item is not a valid number");
636                return;
637            }
638
639            // decrease the qty
640            qty--;
641
642            if (qty <= 0) {
643                deleteOrderItem(itemId);
644                return;
645            }
646
647            $.ajax({
648                type: "GET",
649                contentType: "application/json; charset=utf-8",
650                dataType: "json",
651                url: baseUrl + 'api/ProductApi/changeOrderItem/?id=' + id + "&orderId=" + orderId + "&qty=-1",
652
653                success: function (data) {
654                    if (data.success) {
655                        var href = window.location.href;
656                        var contains = href.includes("Order");
657                        displayCart()
658                    }
659                    else {
660                        displayCart()
661
662                        $("#cart-message").html(data.message);
663                        $("#cart-message").show();
664                    }
665
666                    if (contains) { location.reload() }
667                },
668                error: function (error) {
669                    console.log(error.responseText);
670                }
671            });
672        }
673
674        // -- Scroll-lock helpers for native <dialog> elements (shared by all six site dialogs) --
675        // Measures and compensates for scrollbar width to prevent layout shift on lock.
676        var _dialogOpenCount = 0;
677
678        // -- Focus-trap helpers (2.1.2) --
679        // Attaches/detaches a keydown handler on the dialog that manually cycles
680        // Tab/Shift+Tab between the first and last focusable elements.
681        // This is a belt-and-suspenders fallback: showModal() should trap focus
682        // natively, but Chromium's built-in trap breaks when overflow is set on
683        // the <dialog> element itself (crbug.com/1450137).  Even after fixing that
684        // CSS bug we keep this handler so the trap works in all supported browsers.
685        var FOCUSABLE_SELECTORS = 'a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])';
686
687        function _trapFocus(e) {
688            if (e.key !== 'Tab') return;
689            var dlg = e.currentTarget;
690            // Filter to elements that are actually reachable by the browser's tab order:
691            // hidden UIKit switcher panels (display:none) satisfy the selector but are
692            // skipped by the browser, making our computed "last" wrong and causing escape.
693            var focusable = Array.prototype.slice.call(dlg.querySelectorAll(FOCUSABLE_SELECTORS)).filter(function (el) {
694                return !!(el.offsetWidth || el.offsetHeight || el.getClientRects().length);
695            });
696            if (!focusable.length) { e.preventDefault(); return; }
697            var first = focusable[0];
698            var last  = focusable[focusable.length - 1];
699            // document.activeElement can equal dlg itself when Chromium places the
700            // <dialog> element at the end of its own tab cycle (after all children).
701            // Without this check the condition below would be false and focus would
702            // escape to the browser chrome on the very next Tab press.
703            if (e.shiftKey) {
704                if (document.activeElement === first || document.activeElement === dlg) { e.preventDefault(); last.focus(); }
705            } else {
706                if (document.activeElement === last  || document.activeElement === dlg) { e.preventDefault(); first.focus(); }
707            }
708        }
709
710        function openDialog(dlg) {
711            if (dlg.open) return;
712            if (_dialogOpenCount === 0) {
713                var sw = window.innerWidth - document.documentElement.clientWidth;
714                document.body.style.paddingRight = sw > 0 ? sw + 'px' : '';
715                document.body.style.overflow = 'hidden';
716            }
717            _dialogOpenCount++;
718            dlg.showModal();
719            dlg.addEventListener('keydown', _trapFocus);
720        }
721        function closeDialog(dlg) {
722            if (!dlg.open) return;
723            dlg.removeEventListener('keydown', _trapFocus);
724            dlg.close();
725            _dialogOpenCount = Math.max(0, _dialogOpenCount - 1);
726            if (_dialogOpenCount === 0) {
727                document.body.style.overflow = '';
728                document.body.style.paddingRight = '';
729            }
730        }
731        // -- End scroll-lock / focus-trap helpers --
732
733        function openCart() {
734            var dlg = document.getElementById('shopping-cart');
735            if (!dlg.open) { openDialog(dlg); }
736            var trigger = document.getElementById('cart-trigger-btn');
737            if (trigger) trigger.setAttribute('aria-expanded', 'true');
738            // Focus the first static element immediately so Escape works from the start
739            var continueShopping = document.getElementById('cart-continue-shopping');
740            if (continueShopping) continueShopping.focus();
741            // Refresh cart data; re-focus the first interactive element once content is rendered
742            displayCart(function () {
743                var first = dlg.querySelector('button:not([disabled]), a[href], input:not([disabled])');
744                if (first) first.focus();
745            });
746        }
747
748        function closeCart() {
749            var dlg = document.getElementById('shopping-cart');
750            closeDialog(dlg);
751        }
752
753        // -- Cart focus management (ACC-001 / ACC-027b) --------------------------
754        // This script runs at end of <body>, so DOM is already ready — no
755        // DOMContentLoaded wrapper needed (and it would never fire anyway).
756        (function () {
757            var cartDlg = document.getElementById('shopping-cart');
758            if (!cartDlg) return;
759
760            // Return focus to the trigger and reset aria-expanded on any close
761            cartDlg.addEventListener('close', function () {
762                var trigger = document.getElementById('cart-trigger-btn');
763                if (trigger) {
764                    trigger.setAttribute('aria-expanded', 'false');
765                    trigger.focus();
766                }
767            });
768
769            // Backdrop click: click on the <dialog> element itself (not its children)
770            cartDlg.addEventListener('click', function (e) {
771                if (e.target === this) closeDialog(this);
772            });
773        }());
774        // -- End cart focus management -----------------------------------------
775
776        function announceStatus(message) {
777            var el = document.getElementById("aria-status");
778            if (el) {
779                el.textContent = "";
780                setTimeout(function () { el.textContent = message; }, 50);
781            }
782        }
783
784        // -- Modal focus management utility (T2-011) --
785        // lfmOpenModal(modalId, triggerEl) - opens a UIKit modal and records the
786        //   trigger so focus is returned to it automatically when the modal closes.
787        // lfmCloseModal(modalId) - programmatically closes a UIKit modal.
788        (function () {
789            var _triggers = {};
790
791            window.lfmOpenModal = function (modalId, triggerEl) {
792                _triggers[modalId] = triggerEl || document.activeElement;
793                UIkit.modal(modalId).show();
794            };
795
796            window.lfmCloseModal = function (modalId) {
797                UIkit.modal(modalId).hide();
798            };
799
800            // Return focus to the recorded trigger element when any modal closes,
801            // and detach the focus trap from the inner dialog div.
802            UIkit.util.on(document, 'hidden', '.uk-modal', function (e) {
803                var id = '#' + e.target.id;
804                var dialog = e.target.querySelector('[role="dialog"], .uk-modal-dialog');
805                if (dialog) { dialog.removeEventListener('keydown', _trapFocus); }
806                var trigger = _triggers[id];
807                if (trigger && typeof trigger.focus === 'function') {
808                    trigger.focus();
809                }
810                delete _triggers[id];
811            });
812
813            // On open: stamp ARIA roles/labels, attach focus trap, move focus to first element.
814            UIkit.util.on(document, 'shown', '.uk-modal', function (e) {
815                var FOCUSABLE = 'a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])';
816                var dialog = e.target.querySelector('[role="dialog"], .uk-modal-dialog');
817                if (!dialog) return;
818
819                // -- 4.1.2 / 1.3.1: ensure role, aria-modal, aria-labelledby on every modal --
820                if (!dialog.getAttribute('role')) {
821                    dialog.setAttribute('role', 'dialog');
822                }
823                if (!dialog.getAttribute('aria-modal')) {
824                    dialog.setAttribute('aria-modal', 'true');
825                }
826                if (!dialog.getAttribute('aria-labelledby')) {
827                    // Look for a title element with an id inside .uk-modal-title
828                    var titleEl = dialog.querySelector('.uk-modal-title [id], .uk-modal-title[id]');
829                    if (titleEl) {
830                        var titleId = titleEl.id || titleEl.getAttribute('id');
831                        if (titleId) {
832                            dialog.setAttribute('aria-labelledby', titleId);
833                        }
834                    }
835                }
836                // -- end ARIA stamp --
837
838                dialog.addEventListener('keydown', _trapFocus);
839                var first = dialog.querySelector(FOCUSABLE);
840                if (first) { first.focus(); }
841            });
842        }());
843        // -- End modal focus management utility --
844    </script>
844
845</body>
846</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.