PageSourceSearch

https://fresherdinners.com.sg/

html fresherdinners.com.sg collected 2026-10-07 11:37:45 UTC 300,171 bytes, 7,581 lines download raw bytes

1<!doctype html>
2<html
3  
4  lang="en"
5>
6  <head>
6<script data-source-attribution="shopify.event_observer.bootstrap">
7(function(){let e=navigator,t=`prototype`,n=`sendBeacon`,r=e[n],i=fetch,a=XMLHttpRequest[t],{open:o,send:s}=a,c=`EventListener`,l=`add${c}`,u=`remove${c}`,d=EventTarget[t],f=d[l],p=d[u],m=e=>Error((e=document.currentScript)&&[e?.src,e?.id||e?.dataset?.sourceAttribution]),h=(e=[],t=0)=>(e.p=n=>e[t++%1e3]=n,[e,t=>(e.forEach(e.p=t),e.length=0)]),[g,_]=h(),[v,y]=h(),b,x=new WeakMap,S=e=>e&&g.p([e,b||[m()]]);d[l]=function(e,t,n){let r=this,i=t?.handleEvent||t,a=x.get(t),o=m();i?.call&&!a&&x.set(t,a=function(e){b=[o,e.type];try{i.call(t==i?this:t,e)}finally{b=null}}),v.p([e,o,a,r?.tagName||r+``,r?.id]),f.call(r,e,a||t,n)},d[u]=function(e,t,n){p.call(this,e,x.get(t)||t,n)},a.open=function(e,t){x.set(this,[t+``,e]),o.apply(this,arguments)},a.send=function(e){S(x.get(this)),s.call(this,e)},fetch=(e,t)=>(S([(e?.url||e)+``,t?.method]),i(e,t)),e[n]=(t,n)=>(S([t+``,``]),r.call(e,t,n)),setTimeout(()=>import("//fresherdinners.com.sg/cdn/shopifycloud/storefront/assets/storefront/event_observer_reporter-ed358274.js").then(e=>e.$(_,y,f,i,`79351316693`)))})();
8//# sourceURL=event-observer-collector.js
9</script>
9
10
11    
11<script
12      src="https://code.jquery.com/jquery-4.0.0.min.js"
13      integrity="sha256-OaVG6prZf4v69dPg6PhVattBXkcOWQB62pdZ3ORyrao="
14      crossorigin="anonymous"
15    ></script>
15
16    <link rel="preconnect" href="https://fonts.googleapis.com">
17    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
18    <link
19      href="https://fonts.googleapis.com/css2?family=Bitter:ital,wght@0,100..900;1,100..900&display=swap"
20      rel="stylesheet"
21    >
22    <link rel="preconnect" href="https://fonts.googleapis.com">
23    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
24    <link href="https://fonts.googleapis.com/css2?family=Candal&display=swap" rel="stylesheet"><link
25        rel="icon"
26        type="image/png"
27        href="//fresherdinners.com.sg/cdn/shop/files/image-1_cb25f2ee-7806-44b6-a804-2d0f13ad6a46.png?crop=center&height=32&v=1782209738&width=32"
28      >
29    
30<meta charset="utf-8">
31<meta
32  http-equiv="X-UA-Compatible"
33  content="IE=edge"
34>
35<meta
36  name="viewport"
37  content="width=device-width,initial-scale=1"
38>
39<meta
40  name="view-transition"
41  content="same-origin"
42>
43<meta
44  name="theme-color"
45  content=""
46>
47
48<meta
49  property="og:site_name"
50  content="Fresher Dinners"
51>
52<meta
53  property="og:url"
54  content="https://fresherdinners.com.sg/"
55>
56<meta
57  property="og:title"
58  content="Fresher Dinners"
59>
60<meta
61  property="og:type"
62  content="website"
63>
64<meta
65  property="og:description"
66  content="Fresher Dinners offers delicious dinner delivery across Singapore. Discover a modern tingkat with freshly prepared meals and flexible meal subscriptions, delivered warm daily."
67><meta
68    property="og:image"
69    content="http://fresherdinners.com.sg/cdn/shop/files/fresher_dinners_angled_v3_1_1.png?v=1783472802"
70  >
71  <meta
72    property="og:image:secure_url"
73    content="https://fresherdinners.com.sg/cdn/shop/files/fresher_dinners_angled_v3_1_1.png?v=1783472802"
74  >
75  <meta
76    property="og:image:width"
77    content="1856"
78  >
79  <meta
80    property="og:image:height"
81    content="2304"
82  ><meta
83  name="twitter:card"
84  content="summary_large_image"
85>
86<meta
87  name="twitter:title"
88  content="Fresher Dinners"
89>
90<meta
91  name="twitter:description"
92  content="Fresher Dinners offers delicious dinner delivery across Singapore. Discover a modern tingkat with freshly prepared meals and flexible meal subscriptions, delivered warm daily."
93>
94
95<title>
96  Fresher Dinners
97</title>
98
99<link
100  rel="canonical"
101  href="https://fresherdinners.com.sg/"
102>
103
104
105  <meta
106    name="description"
107    content="Fresher Dinners offers delicious dinner delivery across Singapore. Discover a modern tingkat with freshly prepared meals and flexible meal subscriptions, delivered warm daily."
108  >
109
110<link href="//fresherdinners.com.sg/cdn/shop/t/2/assets/overflow-list.css?v=78235234226353326431775201778" as="style" rel="preload">
111<link href="//fresherdinners.com.sg/cdn/shop/t/2/assets/base.css?v=143910886164487506111787316882" rel="stylesheet" type="text/css" media="all" />
112<link href="//fresherdinners.com.sg/cdn/shop/t/2/assets/custom.css?v=147914268826806071381787315194" rel="stylesheet" type="text/css" media="all" />
113
114<link
115    rel="preload"
116    as="font"
117    href="//fresherdinners.com.sg/cdn/fonts/bitter/bitter_n4.0eb1d888c7dcf4b324dcc95156ce047a083f85f9.woff2"
118    type="font/woff2"
119    crossorigin
120    fetchpriority="low"
121  ><link
122    rel="preload"
123    as="font"
124    href="//fresherdinners.com.sg/cdn/fonts/bitter/bitter_n4.0eb1d888c7dcf4b324dcc95156ce047a083f85f9.woff2"
125    type="font/woff2"
126    crossorigin
127    fetchpriority="low"
128  ><link
129    rel="preload"
130    as="font"
131    href="//fresherdinners.com.sg/cdn/fonts/inter/inter_n9.5eeac4b640934cb12c98bb58e5b212c8a842a731.woff2"
132    type="font/woff2"
133    crossorigin
134    fetchpriority="low"
135  ><link
136    rel="preload"
137    as="font"
138    href="//fresherdinners.com.sg/cdn/fonts/inter/inter_n7.02711e6b374660cfc7915d1afc1c204e633421e4.woff2"
139    type="font/woff2"
140    crossorigin
141    fetchpriority="low"
142  >
143<script async crossorigin fetchpriority="high" src="/cdn/shopifycloud/importmap-polyfill/es-modules-shim.2.4.0.js"></script>
vendor: 1 bytes, line 143
143
144<script type="importmap">
145  {
146    "imports": {
147      "@theme/overflow-list": "//fresherdinners.com.sg/cdn/shop/t/2/assets/overflow-list.js?v=46858356770684902511775201778",
148      "@theme/product-title": "//fresherdinners.com.sg/cdn/shop/t/2/assets/product-title-truncation.js?v=81744426891537421781775201778",
149      "@theme/component": "//fresherdinners.com.sg/cdn/shop/t/2/assets/component.js?v=184240237101443119871775201778",
150      "@theme/dialog": "//fresherdinners.com.sg/cdn/shop/t/2/assets/dialog.js?v=150888536568694194021775201778",
151      "@theme/events": "//fresherdinners.com.sg/cdn/shop/t/2/assets/events.js?v=147926035229139604561775201778",
152      "@theme/focus": "//fresherdinners.com.sg/cdn/shop/t/2/assets/focus.js?v=60436577539430446401775201778",
153      "@theme/morph": "//fresherdinners.com.sg/cdn/shop/t/2/assets/morph.js?v=102085577784545683451775201778",
154      "@theme/paginated-list": "//fresherdinners.com.sg/cdn/shop/t/2/assets/paginated-list.js?v=95298315036233333871775201778",
155      "@theme/performance": "//fresherdinners.com.sg/cdn/shop/t/2/assets/performance.js?v=171015751390534793081775201778",
156      "@theme/product-form": "//fresherdinners.com.sg/cdn/shop/t/2/assets/product-form.js?v=37993400097492174081775201778",
157      "@theme/recently-viewed-products": "//fresherdinners.com.sg/cdn/shop/t/2/assets/recently-viewed-products.js?v=94729125001750262651775201778",
158      "@theme/scrolling": "//fresherdinners.com.sg/cdn/shop/t/2/assets/scrolling.js?v=162288454571026455011775201778",
159      "@theme/section-renderer": "//fresherdinners.com.sg/cdn/shop/t/2/assets/section-renderer.js?v=152586934315572818121775201778",
160      "@theme/section-hydration": "//fresherdinners.com.sg/cdn/shop/t/2/assets/section-hydration.js?v=108434990705342316311775201778",
161      "@theme/money-formatting": "//fresherdinners.com.sg/cdn/shop/t/2/assets/money-formatting.js?v=182191346160333327151775201778",
162      "@theme/utilities": "//fresherdinners.com.sg/cdn/shop/t/2/assets/utilities.js?v=137979405375850297411775201778",
163      "@theme/variant-picker": "//fresherdinners.com.sg/cdn/shop/t/2/assets/variant-picker.js?v=124079696159966615681775201778",
164      "@theme/media-gallery": "//fresherdinners.com.sg/cdn/shop/t/2/assets/media-gallery.js?v=14624021005636302161775201778",
165      "@theme/quick-add": "//fresherdinners.com.sg/cdn/shop/t/2/assets/quick-add.js?v=8173316780029216301775201778",
166      "@theme/paginated-list-aspect-ratio": "//fresherdinners.com.sg/cdn/shop/t/2/assets/paginated-list-aspect-ratio.js?v=25254270272143792451775201778",
167      "@theme/popover-polyfill": "//fresherdinners.com.sg/cdn/shop/t/2/assets/popover-polyfill.js?v=119029313658895111201775201778",
168      "@theme/component-quantity-selector": "//fresherdinners.com.sg/cdn/shop/t/2/assets/component-quantity-selector.js?v=67906657287482036641775201778",
169      "@theme/comparison-slider": "//fresherdinners.com.sg/cdn/shop/t/2/assets/comparison-slider.js?v=106705562947035711941775201778",
170      "@theme/sticky-add-to-cart": "//fresherdinners.com.sg/cdn/shop/t/2/assets/sticky-add-to-cart.js?v=48956925339276737091775201778",
171      "@theme/fly-to-cart": "//fresherdinners.com.sg/cdn/shop/t/2/assets/fly-to-cart.js?v=48483246440248933081775201778"
172    }
173  }
174</script>
174
175
176<script
177  src="//fresherdinners.com.sg/cdn/shop/t/2/assets/view-transitions.js?v=7106414069516106341775201778"
178  async
179  
180></script>
180
181
182<link
183  rel="modulepreload"
184  href="//fresherdinners.com.sg/cdn/shop/t/2/assets/utilities.js?v=137979405375850297411775201778"
185  fetchpriority="low"
186>
187<link
188  rel="modulepreload"
189  href="//fresherdinners.com.sg/cdn/shop/t/2/assets/component.js?v=184240237101443119871775201778"
190  fetchpriority="low"
191>
192<link
193  rel="modulepreload"
194  href="//fresherdinners.com.sg/cdn/shop/t/2/assets/section-renderer.js?v=152586934315572818121775201778"
195  fetchpriority="low"
196>
197<link
198  rel="modulepreload"
199  href="//fresherdinners.com.sg/cdn/shop/t/2/assets/section-hydration.js?v=108434990705342316311775201778"
200  fetchpriority="low"
201>
202<link
203  rel="modulepreload"
204  href="//fresherdinners.com.sg/cdn/shop/t/2/assets/morph.js?v=102085577784545683451775201778"
205  fetchpriority="low"
206>
207
208
209
210<link
211  rel="modulepreload"
212  href="//fresherdinners.com.sg/cdn/shop/t/2/assets/focus.js?v=60436577539430446401775201778"
213  fetchpriority="low"
214>
215<link
216  rel="modulepreload"
217  href="//fresherdinners.com.sg/cdn/shop/t/2/assets/recently-viewed-products.js?v=94729125001750262651775201778"
218  fetchpriority="low"
219>
220<link
221  rel="modulepreload"
222  href="//fresherdinners.com.sg/cdn/shop/t/2/assets/scrolling.js?v=162288454571026455011775201778"
223  fetchpriority="low"
224>
225<link
226  rel="modulepreload"
227  href="//fresherdinners.com.sg/cdn/shop/t/2/assets/events.js?v=147926035229139604561775201778"
228  fetchpriority="low"
229>
230<script
231  src="//fresherdinners.com.sg/cdn/shop/t/2/assets/popover-polyfill.js?v=119029313658895111201775201778"
232  type="module"
233  fetchpriority="low"
234></script>
vendor: 1 bytes, line 234
234
235<script
236  src="//fresherdinners.com.sg/cdn/shop/t/2/assets/overflow-list.js?v=46858356770684902511775201778"
237  type="module"
238  fetchpriority="low"
239></script>
vendor: 1 bytes, line 239
239
240<script
241  src="//fresherdinners.com.sg/cdn/shop/t/2/assets/quick-add.js?v=8173316780029216301775201778"
242  type="module"
243  fetchpriority="low"
244></script>
244
245
246  
246<script
247    src="//fresherdinners.com.sg/cdn/shop/t/2/assets/cart-discount.js?v=107077853990124422021775201778"
248    type="module"
249    fetchpriority="low"
250  ></script>
250
251
252
253<script
254  src="//fresherdinners.com.sg/cdn/shop/t/2/assets/dialog.js?v=150888536568694194021775201778"
255  type="module"
256  fetchpriority="low"
257></script>
vendor: 1 bytes, line 257
257
258<script
259  src="//fresherdinners.com.sg/cdn/shop/t/2/assets/variant-picker.js?v=124079696159966615681775201778"
260  type="module"
261  fetchpriority="low"
262></script>
vendor: 1 bytes, line 262
262
263<script
264  src="//fresherdinners.com.sg/cdn/shop/t/2/assets/product-card.js?v=124402285637860180781775201778"
265  type="module"
266  fetchpriority="low"
267></script>
vendor: 1 bytes, line 267
267
268<script
269  src="//fresherdinners.com.sg/cdn/shop/t/2/assets/product-form.js?v=37993400097492174081775201778"
270  type="module"
271  fetchpriority="low"
272></script>
vendor: 1 bytes, line 272
272
273<script
274  src="//fresherdinners.com.sg/cdn/shop/t/2/assets/fly-to-cart.js?v=48483246440248933081775201778"
275  type="module"
276  fetchpriority="low"
277></script>
vendor: 1 bytes, line 277
277
278<script
279  src="//fresherdinners.com.sg/cdn/shop/t/2/assets/accordion-custom.js?v=97588419883090888471775201778"
280  type="module"
281  fetchpriority="low"
282></script>
vendor: 1 bytes, line 282
282
283<script
284  src="//fresherdinners.com.sg/cdn/shop/t/2/assets/media.js?v=37825095869491791421775201778"
285  type="module"
286  fetchpriority="low"
287></script>
vendor: 1 bytes, line 287
287
288<script
289  src="//fresherdinners.com.sg/cdn/shop/t/2/assets/product-price.js?v=164492227269745550161775201778"
290  type="module"
291  fetchpriority="low"
292></script>
vendor: 1 bytes, line 292
292
293<script
294  src="//fresherdinners.com.sg/cdn/shop/t/2/assets/product-sku.js?v=121804655373531320511775201778"
295  type="module"
296  fetchpriority="low"
297></script>
vendor: 1 bytes, line 297
297
298<script
299  src="//fresherdinners.com.sg/cdn/shop/t/2/assets/product-title-truncation.js?v=81744426891537421781775201778"
300  type="module"
301  fetchpriority="low"
302></script>
vendor: 1 bytes, line 302
302
303<script
304  src="//fresherdinners.com.sg/cdn/shop/t/2/assets/product-inventory.js?v=81520546963552472391775201778"
305  type="module"
306  fetchpriority="low"
307></script>
vendor: 1 bytes, line 307
307
308<script
309  src="//fresherdinners.com.sg/cdn/shop/t/2/assets/show-more.js?v=94563802205717136101775201778"
310  type="module"
311  fetchpriority="low"
312></script>
vendor: 1 bytes, line 312
312
313<script
314  src="//fresherdinners.com.sg/cdn/shop/t/2/assets/slideshow.js?v=17868446697736367161775201778"
315  type="module"
316  fetchpriority="low"
317></script>
vendor: 1 bytes, line 317
317
318<script
319  src="//fresherdinners.com.sg/cdn/shop/t/2/assets/layered-slideshow.js?v=30135417790894624731775201778"
320  type="module"
321  fetchpriority="low"
322></script>
vendor: 1 bytes, line 322
322
323<script
324  src="//fresherdinners.com.sg/cdn/shop/t/2/assets/anchored-popover.js?v=95953304814728754461775201778"
325  type="module"
326  fetchpriority="low"
327></script>
vendor: 1 bytes, line 327
327
328<script
329  src="//fresherdinners.com.sg/cdn/shop/t/2/assets/floating-panel.js?v=151277338116891310371775201778"
330  type="module"
331  fetchpriority="low"
332></script>
vendor: 1 bytes, line 332
332
333<script
334  src="//fresherdinners.com.sg/cdn/shop/t/2/assets/video-background.js?v=25237992823806706551775201778"
335  type="module"
336  fetchpriority="low"
337></script>
vendor: 1 bytes, line 337
337
338<script
339  src="//fresherdinners.com.sg/cdn/shop/t/2/assets/component-quantity-selector.js?v=67906657287482036641775201778"
340  type="module"
341  fetchpriority="low"
342></script>
vendor: 1 bytes, line 342
342
343<script
344  src="//fresherdinners.com.sg/cdn/shop/t/2/assets/media-gallery.js?v=14624021005636302161775201778"
345  type="module"
346  fetchpriority="low"
347></script>
vendor: 1 bytes, line 347
347
348<script
349  src="//fresherdinners.com.sg/cdn/shop/t/2/assets/rte-formatter.js?v=40306132146590816021775201778"
350  type="module"
351  fetchpriority="low"
352></script>
vendor: 1 bytes, line 352
352
353<script
354  src="//fresherdinners.com.sg/cdn/shop/t/2/assets/volume-pricing.js?v=15442793518842484731775201778"
355  type="module"
356  fetchpriority="low"
357></script>
vendor: 1 bytes, line 357
357
358<script
359  src="//fresherdinners.com.sg/cdn/shop/t/2/assets/price-per-item.js?v=144512917617120124431775201778"
360  type="module"
361  fetchpriority="low"
362></script>
vendor: 1 bytes, line 362
362
363<script
364  src="//fresherdinners.com.sg/cdn/shop/t/2/assets/volume-pricing-info.js?v=94479640769665442661775201778"
365  type="module"
366  fetchpriority="low"
367></script>
367
368
369
370
371
372
373
374
375<script
376  src="//fresherdinners.com.sg/cdn/shop/t/2/assets/auto-close-details.js?v=58350291535404441581775201778"
377  defer="defer"
378></script>
378
379
380<script>
381  const Theme = {
382    translations: {
383      placeholder_image: `Placeholder image`,
384      added: `Added`,
385      recipient_form_fields_visible: `Recipient form fields are now visible`,
386      recipient_form_fields_hidden: `Recipient form fields are now hidden`,
387      recipient_form_error: `There was an error with the form submission`,
388      items_added_to_cart_one: `1 item added to cart`,
389      items_added_to_cart_other: `{{ count }} items added to cart`,
390    },
391    routes: {
392      cart_add_url: '/cart/add.js',
393      cart_change_url: '/cart/change',
394      cart_update_url: '/cart/update',
395      cart_url: '/cart',
396      predictive_search_url: '/search/suggest',
397      search_url: '/search',
398    },
399    template: {
400      name: 'index',
401    },
402  };
403</script>
403
404<style data-shopify>
405@font-face {
406  font-family: Bitter;
407  font-weight: 400;
408  font-style: normal;
409  font-display: swap;
410  src: url("//fresherdinners.com.sg/cdn/fonts/bitter/bitter_n4.0eb1d888c7dcf4b324dcc95156ce047a083f85f9.woff2") format("woff2"),
411       url("//fresherdinners.com.sg/cdn/fonts/bitter/bitter_n4.c816fa70d91ea90e3facdf24d42f14fc862a7052.woff") format("woff");
412}
413@font-face {
414  font-family: Bitter;
415  font-weight: 700;
416  font-style: normal;
417  font-display: swap;
418  src: url("//fresherdinners.com.sg/cdn/fonts/bitter/bitter_n7.6f54d15cb20937e632243f04624136dd03296182.woff2") format("woff2"),
419       url("//fresherdinners.com.sg/cdn/fonts/bitter/bitter_n7.a83f6c3c62c7eb472ab1c4f0356455e4be4dfdc5.woff") format("woff");
420}
421@font-face {
422  font-family: Bitter;
423  font-weight: 400;
424  font-style: italic;
425  font-display: swap;
426  src: url("//fresherdinners.com.sg/cdn/fonts/bitter/bitter_i4.67df40d17d77ae12f13ff551bfa685c46846abc0.woff2") format("woff2"),
427       url("//fresherdinners.com.sg/cdn/fonts/bitter/bitter_i4.b634e2f1232e0bcbc4eca7a49cd637dc6763bba9.woff") format("woff");
428}
429@font-face {
430  font-family: Bitter;
431  font-weight: 700;
432  font-style: italic;
433  font-display: swap;
434  src: url("//fresherdinners.com.sg/cdn/fonts/bitter/bitter_i7.485957fb58715eb0a05a877c35d35fd280cb7e07.woff2") format("woff2"),
435       url("//fresherdinners.com.sg/cdn/fonts/bitter/bitter_i7.3f7595391ddb853e63ac4226f896c9702ca9b5b0.woff") format("woff");
436}
437@font-face {
438  font-family: Inter;
439  font-weight: 900;
440  font-style: normal;
441  font-display: swap;
442  src: url("//fresherdinners.com.sg/cdn/fonts/inter/inter_n9.5eeac4b640934cb12c98bb58e5b212c8a842a731.woff2") format("woff2"),
443       url("//fresherdinners.com.sg/cdn/fonts/inter/inter_n9.a68b28f7e46ea1faab81e409809ee4919dd6e3f0.woff") format("woff");
444}
445@font-face {
446  font-family: Inter;
447  font-weight: 700;
448  font-style: normal;
449  font-display: swap;
450  src: url("//fresherdinners.com.sg/cdn/fonts/inter/inter_n7.02711e6b374660cfc7915d1afc1c204e633421e4.woff2") format("woff2"),
451       url("//fresherdinners.com.sg/cdn/fonts/inter/inter_n7.6dab87426f6b8813070abd79972ceaf2f8d3b012.woff") format("woff");
452}
453@font-face {
454  font-family: Inter;
455  font-weight: 900;
456  font-style: italic;
457  font-display: swap;
458  src: url("//fresherdinners.com.sg/cdn/fonts/inter/inter_i9.d229976d7ffd40dcab77d1b5d677b06fa3f92945.woff2") format("woff2"),
459       url("//fresherdinners.com.sg/cdn/fonts/inter/inter_i9.ed2ed118dc454c50160c647d59717916128bea79.woff") format("woff");
460}
461@font-face {
462  font-family: Inter;
463  font-weight: 700;
464  font-style: italic;
465  font-display: swap;
466  src: url("//fresherdinners.com.sg/cdn/fonts/inter/inter_i7.b377bcd4cc0f160622a22d638ae7e2cd9b86ea4c.woff2") format("woff2"),
467       url("//fresherdinners.com.sg/cdn/fonts/inter/inter_i7.7c69a6a34e3bb44fcf6f975857e13b9a9b25beb4.woff") format("woff");
468}
469
470
471  :root {
472    /* Page Layout */
473    --sidebar-width: 25rem;
474    --narrow-content-width: 36rem;
475    --normal-content-width: 42rem;
476    --wide-content-width: 46rem;
477    --narrow-page-width: 90rem;
478    --normal-page-width: 120rem;
479    --wide-page-width: 150rem;
480
481    /* Section Heights */
482    --section-height-small: 15rem;
483    --section-height-medium: 25rem;
484    --section-height-large: 35rem;
485
486    @media screen and (min-width: 40em) {
487      --section-height-small: 40svh;
488      --section-height-medium: 55svh;
489      --section-height-large: 70svh;
490    }
491
492    @media screen and (min-width: 60em) {
493      --section-height-small: 50svh;
494      --section-height-medium: 65svh;
495      --section-height-large: 80svh;
496    }
497
498    /* Letter spacing */
499    --letter-spacing-sm: 0.06em;
500    --letter-spacing-md: 0.13em;
501
502    /* Font families */
503    --font-body--family: Bitter, serif;
504    --font-body--style: normal;
505    --font-body--weight: 400;
506    --font-subheading--family: Bitter, serif;
507    --font-subheading--style: normal;
508    --font-subheading--weight: 400;
509    --font-heading--family: Inter, sans-serif;
510    --font-heading--style: normal;
511    --font-heading--weight: 900;
512    --font-accent--family: Inter, sans-serif;
513    --font-accent--style: normal;
514    --font-accent--weight: 700;
515
516    /* Margin sizes */
517    --font-h1--spacing: 0.25em;
518    --font-h2--spacing: 0.25em;
519    --font-h3--spacing: 0.25em;
520    --font-h4--spacing: 0.25em;
521    --font-h5--spacing: 0.25em;
522    --font-h6--spacing: 0.25em;
523    --font-paragraph--spacing: 0.5em;
524
525    /* Heading colors */
526    --font-h1--color: var(--color-foreground-heading);
527    --font-h2--color: var(--color-foreground-heading);
528    --font-h3--color: var(--color-foreground-heading);
529    --font-h4--color: var(--color-foreground-heading);
530    --font-h5--color: var(--color-foreground-heading);
531    --font-h6--color: var(--color-foreground-heading);
532
533    /** Z-Index / Layering */
534    --layer-section-background: -2;
535    --layer-lowest: -1;
536    --layer-base: 0;
537    --layer-flat: 1;
538    --layer-raised: 2;
539    --layer-heightened: 4;
540    --layer-sticky: 8;
541    --layer-window-overlay: 10;
542    --layer-header-menu: 12;
543    --layer-overlay: 16;
544    --layer-menu-drawer: 18;
545    --layer-temporary: 20;
546
547    /* Max-width / Measure */
548    --max-width--body-normal: 32.5em;
549    --max-width--body-narrow: 22.75em;
550
551    --max-width--heading-normal: 32.5em;
552    --max-width--heading-narrow: 19.5em;
553
554    --max-width--display-normal: 13em;
555    --max-width--display-narrow: 9.75em;
556    --max-width--display-tight: 3.25em;
557
558    /* Letter-spacing / Tracking */
559    --letter-spacing--display-tight: -0.03em;
560    --letter-spacing--display-normal: 0em;
561    --letter-spacing--display-loose: 0.03em;
562
563    --letter-spacing--heading-tight: -0.03em;
564    --letter-spacing--heading-normal: 0em;
565    --letter-spacing--heading-loose: 0.03em;
566
567    --letter-spacing--body-tight: -0.03em;
568    --letter-spacing--body-normal: 0em;
569    --letter-spacing--body-loose: 0.03em;
570
571    /* Line height / Leading */
572    --line-height: 1;
573
574    --line-height--display-tight: 1;
575    --line-height--display-normal: 1.1;
576    --line-height--display-loose: 1.2;
577
578    --line-height--heading-tight: 1.15;
579    --line-height--heading-normal: 1.25;
580    --line-height--heading-loose: 1.35;
581
582    --line-height--body-tight: 1.2;
583    --line-height--body-normal: 1.4;
584    --line-height--body-loose: 1.6;
585
586    /* Typography presets */
587    --font-size--paragraph: 0.875rem;--font-size--h1: clamp(3.0rem, 5.6vw, 3.5rem);--font-size--h2: clamp(2.25rem, 4.8vw, 3.0rem);--font-size--h3: 2.0rem;--font-size--h4: 1.5rem;--font-size--h5: 1.0rem;--font-size--h6: 0.875rem;--font-paragraph--weight: 400;--font-paragraph--letter-spacing: var(--letter-spacing--body-normal);--font-paragraph--size: var(--font-size--paragraph);--font-paragraph--family: var(--font-body--family);--font-paragraph--style: var(--font-body--style);--font-paragraph--case: ;--font-paragraph--line-height: var(--line-height--body-loose);--font-h1--weight: var(--font-heading--weight);--font-h1--letter-spacing: var(--letter-spacing--heading-normal);--font-h1--size: var(--font-size--h1);--font-h1--family: var(--font-heading--family);--font-h1--style: var(--font-heading--style);--font-h1--case: none;--font-h1--line-height: var(--line-height--display-tight);--font-h2--weight: var(--font-heading--weight);--font-h2--letter-spacing: var(--letter-spacing--heading-normal);--font-h2--size: var(--font-size--h2);--font-h2--family: var(--font-heading--family);--font-h2--style: var(--font-heading--style);--font-h2--case: none;--font-h2--line-height: var(--line-height--display-tight);--font-h3--weight: var(--font-heading--weight);--font-h3--letter-spacing: var(--letter-spacing--heading-normal);--font-h3--size: var(--font-size--h3);--font-h3--family: var(--font-heading--family);--font-h3--style: var(--font-heading--style);--font-h3--case: none;--font-h3--line-height: var(--line-height--display-normal);--font-h4--weight: var(--font-heading--weight);--font-h4--letter-spacing: var(--letter-spacing--heading-normal);--font-h4--size: var(--font-size--h4);--font-h4--family: var(--font-heading--family);--font-h4--style: var(--font-heading--style);--font-h4--case: none;--font-h4--line-height: var(--line-height--display-tight);--font-h5--weight: var(--font-subheading--weight);--font-h5--letter-spacing: var(--letter-spacing--heading-normal);--font-h5--size: var(--font-size--h5);--font-h5--family: var(--font-subheading--family);--font-h5--style: var(--font-subheading--style);--font-h5--case: none;--font-h5--line-height: var(--line-height--display-loose);--font-h6--weight: var(--font-subheading--weight);--font-h6--letter-spacing: var(--letter-spacing--heading-normal);--font-h6--size: var(--font-size--h6);--font-h6--family: var(--font-subheading--family);--font-h6--style: var(--font-subheading--style);--font-h6--case: none;--font-h6--line-height: var(--line-height--display-loose);
588
589    /* Hardcoded font sizes */
590    --font-size--3xs: 0.625rem;
591    --font-size--2xs: 0.75rem;
592    --font-size--xs: 0.8125rem;
593    --font-size--sm: 0.875rem;
594    --font-size--md: 1rem;
595    --font-size--lg: 1.125rem;
596    --font-size--xl: 1.25rem;
597    --font-size--2xl: 1.5rem;
598    --font-size--3xl: 2rem;
599    --font-size--4xl: 2.5rem;
600    --font-size--5xl: 3rem;
601    --font-size--6xl: 3.5rem;
602
603    /* Menu font sizes */
604    --menu-font-sm--size: 0.875rem;
605    --menu-font-sm--line-height: calc(1.1 + 0.5 * min(16 / 14));
606    --menu-font-md--size: 1rem;
607    --menu-font-md--line-height: calc(1.1 + 0.5 * min(16 / 16));
608    --menu-font-lg--size: 1.125rem;
609    --menu-font-lg--line-height: calc(1.1 + 0.5 * min(16 / 18));
610    --menu-font-xl--size: 1.25rem;
611    --menu-font-xl--line-height: calc(1.1 + 0.5 * min(16 / 20));
612    --menu-font-2xl--size: 1.75rem;
613    --menu-font-2xl--line-height: calc(1.1 + 0.5 * min(16 / 28));
614
615    /* Colors */
616    --color-error: #8B0000;
617    --color-success: #006400;
618    --color-white: #FFFFFF;
619    --color-white-rgb: 255 255 255;
620    --color-black: #000000;
621    --color-instock: #3ED660;
622    --color-lowstock: #EE9441;
623    --color-outofstock: #C8C8C8;
624
625    /* Opacity */
626    --opacity-5: 0.05;
627    --opacity-8: 0.08;
628    --opacity-10: 0.1;
629    --opacity-15: 0.15;
630    --opacity-20: 0.2;
631    --opacity-25: 0.25;
632    --opacity-30: 0.3;
633    --opacity-40: 0.4;
634    --opacity-50: 0.5;
635    --opacity-60: 0.6;
636    --opacity-70: 0.7;
637    --opacity-80: 0.8;
638    --opacity-85: 0.85;
639    --opacity-90: 0.9;
640    --opacity-subdued-text: var(--opacity-70);
641
642    --shadow-button: 0 2px 3px rgb(0 0 0 / 20%);
643    --gradient-image-overlay: linear-gradient(to top, rgb(0 0 0 / 0.5), transparent);
644
645    /* Spacing */
646    --margin-3xs: 0.125rem;
647    --margin-2xs: 0.3rem;
648    --margin-xs: 0.5rem;
649    --margin-sm: 0.7rem;
650    --margin-md: 0.8rem;
651    --margin-lg: 1rem;
652    --margin-xl: 1.25rem;
653    --margin-2xl: 1.5rem;
654    --margin-3xl: 1.75rem;
655    --margin-4xl: 2rem;
656    --margin-5xl: 3rem;
657    --margin-6xl: 5rem;
658
659    --scroll-margin: 50px;
660
661    --padding-3xs: 0.125rem;
662    --padding-2xs: 0.25rem;
663    --padding-xs: 0.5rem;
664    --padding-sm: 0.7rem;
665    --padding-md: 0.8rem;
666    --padding-lg: 1rem;
667    --padding-xl: 1.25rem;
668    --padding-2xl: 1.5rem;
669    --padding-3xl: 1.75rem;
670    --padding-4xl: 2rem;
671    --padding-5xl: 3rem;
672    --padding-6xl: 4rem;
673
674    --gap-3xs: 0.125rem;
675    --gap-2xs: 0.3rem;
676    --gap-xs: 0.5rem;
677    --gap-sm: 0.7rem;
678    --gap-md: 0.9rem;
679    --gap-lg: 1rem;
680    --gap-xl: 1.25rem;
681    --gap-2xl: 2rem;
682    --gap-3xl: 3rem;
683
684    --spacing-scale-sm: 0.6;
685    --spacing-scale-md: 0.7;
686    --spacing-scale-default: 1.0;
687
688    /* Checkout buttons gap */
689    --checkout-button-gap: 10px;
690
691    /* Borders */
692    --style-border-width: 1px;
693    --style-border-radius-xs: 0.2rem;
694    --style-border-radius-sm: 0.6rem;
695    --style-border-radius-md: 0.8rem;
696    --style-border-radius-50: 50%;
697    --style-border-radius-lg: 1rem;
698    --style-border-radius-pills: 40px;
699    --style-border-radius-inputs: 4px;
700    --style-border-radius-buttons-primary: 0px;
701    --style-border-radius-buttons-secondary: 0px;
702    --style-border-width-primary: 0px;
703    --style-border-width-secondary: 1px;
704    --style-border-width-inputs: 1px;
705    --style-border-radius-popover: 14px;
706    --style-border-popover: 1px none rgb(var(--color-border-rgb) / 50%);
707    --style-border-drawer: 1px none rgb(var(--color-border-rgb) / 50%);
708    --style-border-swatch-opacity: 10%;
709    --style-border-swatch-width: 1px;
710    --style-border-swatch-style: solid;
711
712    /* Animation */
713    --ease-out-cubic: cubic-bezier(0.33, 1, 0.68, 1);
714    --ease-out-quad: cubic-bezier(0.32, 0.72, 0, 1);
715    --ease-in-out-quad: cubic-bezier(0.455, 0.03, 0.515, 0.955);
716    --animation-speed-fast: 0.0625s;
717    --animation-speed: 0.125s;
718    --animation-speed-slow: 0.2s;
719    --animation-speed-medium: 0.15s;
720    --animation-easing: ease-in-out;
721    --animation-slideshow-easing: cubic-bezier(0.4, 0, 0.2, 1);
722    --drawer-animation-speed: 0.2s;
723    --animation-values-slow: var(--animation-speed-slow) var(--animation-easing);
724    --animation-values: var(--animation-speed) var(--animation-easing);
725    --animation-values-fast: var(--animation-speed-fast) var(--animation-easing);
726    --animation-values-allow-discrete: var(--animation-speed) var(--animation-easing) allow-discrete;
727    --animation-timing-hover: cubic-bezier(0.25, 0.46, 0.45, 0.94);
728    --animation-timing-active: cubic-bezier(0.5, 0, 0.75, 0);
729    --animation-timing-bounce: cubic-bezier(0.34, 1.56, 0.64, 1);
730    --animation-timing-default: cubic-bezier(0, 0, 0.2, 1);
731    --animation-timing-fade-in: cubic-bezier(0.16, 1, 0.3, 1);
732    --animation-timing-fade-out: cubic-bezier(0.4, 0, 0.2, 1);
733    /* Spring definitions suffixed with perceptual duration (d<ms>) and bounce (b<%>)*/
734    --spring-d300-b0-easing: linear(0, 0.0033 0.81%, 0.027 2.42%, 0.0916 4.84%, 0.4745 15.32%, 0.6422 20.97%, 0.7175, 0.7789, 0.8283 30.64%, 0.876, 0.9111 38.71%, 0.941, 0.9611 48.39%, 0.9707, 0.978 54.84%, 0.9885 62.1%, 0.9949 70.97%, 0.9982 82.26%, 0.9997 100%);
735    --spring-d300-b0-duration: 0.4980s;
736    --spring-d280-b0-easing: linear(0, 0.0044, 0.0164 1.85%, 0.085 4.63%, 0.4571 14.81%, 0.575 18.52%, 0.6505, 0.7148 24.07%, 0.7849, 0.8393, 0.8809 35.18%, 0.9189, 0.9453 44.44%, 0.9662, 0.9793 55.55%, 0.9894 62.95%, 0.995 71.28%, 0.9982 82.39%, 0.9997 99.98%);
737    --spring-d280-b0-duration: 0.4648s;
738    --spring-d260-b0-easing: linear(0, 0.0058, 0.0216 2.15%, 0.0748 4.29%, 0.4646 15.03%, 0.5673, 0.655, 0.7279, 0.7872, 0.8349, 0.8727 34.36%, 0.9107, 0.9379 42.95%, 0.9609 48.31%, 0.9778 54.76%, 0.9887 62.27%, 0.9948 70.86%, 0.9983 82.67%, 0.9997 99.85%);
739    --spring-d260-b0-duration: 0.4316s;
740    --spring-d220-b0-easing: linear(
741      0,
742      0.0093 1.37%,
743      0.0696 4.12%,
744      0.4667 15.09%,
745      0.6322 20.58%,
746      0.6986 23.32%,
747      0.7793 27.44%,
748      0.8219 30.18%,
749      0.8721,
750      0.9089 38.42%,
751      0.9427,
752      0.9644,
753      0.978 54.88%,
754      0.9881 61.74%,
755      0.9944 69.97%,
756      0.998 80.95%,
757      0.9996 98.78%
758    );
759    --spring-d220-b0-duration: 0.3818s;
760    --spring-d180-b0-easing: linear(0, 0.0234, 0.0805 4.48%, 0.4865 15.68%, 0.6211 20.16%, 0.7696 26.88%, 0.8064 29.12%, 0.8646, 0.9063, 0.9358, 0.9563 47.04%, 0.9757, 0.9867 60.48%, 0.9941 69.44%, 0.9979 80.64%, 0.9996 98.56%);
761    --spring-d180-b0-duration: 0.2988s;
762
763    /* View transitions */
764    /* View transition old */
765    --view-transition-old-main-content: var(--animation-speed) var(--animation-easing) both fadeOut;
766
767    /* View transition new */
768    --view-transition-new-main-content: var(--animation-speed) var(--animation-easing) both fadeIn, var(--animation-speed) var(--animation-easing) both slideInTopViewTransition;
769
770    /* Focus */
771    --focus-outline-width: 0.09375rem;
772    --focus-outline-offset: 0.2em;
773
774    /* Badges */
775    --badge-blob-padding-block: 1px;
776    --badge-blob-padding-inline: 12px 8px;
777    --badge-rectangle-padding-block: 1px;
778    --badge-rectangle-padding-inline: 6px;
779    @media screen and (min-width: 750px) {
780      --badge-blob-padding-block: 4px;
781      --badge-blob-padding-inline: 16px 12px;
782      --badge-rectangle-padding-block: 4px;
783      --badge-rectangle-padding-inline: 10px;
784    }
785
786    /* Icons */
787    --icon-size-2xs: 0.6rem;
788    --icon-size-xs: 0.85rem;
789    --icon-size-sm: 1.25rem;
790    --icon-size-md: 1.375rem;
791    --icon-size-lg: 1.5rem;
792    --icon-stroke-width: 1.5px;
793
794    /* Input */
795    --input-email-min-width: 200px;
796    --input-search-max-width: 650px;
797    --input-padding-y: 0.8rem;
798    --input-padding-x: 0.8rem;
799    --input-padding: var(--input-padding-y) var(--input-padding-x);
800    --input-box-shadow-width: var(--style-border-width-inputs);
801    --input-box-shadow: 0 0 0 var(--input-box-shadow-width) var(--color-input-border);
802    --input-box-shadow-focus: 0 0 0 calc(var(--input-box-shadow-width) + 0.5px) var(--color-input-border);
803    --input-disabled-background-color: rgb(var(--color-foreground-rgb) / var(--opacity-10));
804    --input-disabled-border-color: rgb(var(--color-foreground-rgb) / var(--opacity-5));
805    --input-disabled-text-color: rgb(var(--color-foreground-rgb) / var(--opacity-50));
806    --input-textarea-min-height: 55px;
807
808    /* Checkbox */
809    --checkbox-size: 22px;
810    --checkbox-border-radius: 7px;
811    --checkbox-border: 1px solid rgb(var(--color-foreground-rgb) / var(--opacity-35-55));
812    --checkbox-label-padding: 8px;
813
814    @media screen and (min-width: 750px) {
815      --checkbox-size: 16px;
816      --checkbox-border-radius: 5px;
817      --checkbox-label-padding: 6px;
818    }
819
820    /* Button size */
821    --button-size-sm: 30px;
822    --button-size-md: 36px;
823    --button-size: var(--minimum-touch-target);
824    --button-padding-inline: 24px;
825    --button-padding-block: 16px;
826
827    /* Button font-family */
828    --button-font-family-primary: var(--font-body--family);
829    --button-font-family-secondary: var(--font-body--family);
830
831    /* Button text case */
832    --button-text-case: ;
833    --button-text-case-primary: default;
834    --button-text-case-secondary: default;
835
836    /* Borders */
837    --border-color: rgb(var(--color-border-rgb) / var(--opacity-50));
838    --border-width-sm: 1px;
839    --border-width-md: 2px;
840    --border-width-lg: 5px;
841    --border-radius-sm: 0.25rem;
842
843    /* Drawers */
844    --drawer-inline-padding: 25px;
845    --drawer-menu-inline-padding: 2.5rem;
846    --drawer-header-block-padding: 20px;
847    --drawer-content-block-padding: 10px;
848    --drawer-header-desktop-top: 0rem;
849    --drawer-padding: calc(var(--padding-sm) + 7px);
850    --drawer-height: 100dvh;
851    --drawer-width: 95vw;
852    --drawer-max-width: 500px;
853
854    /* Variant Picker Swatches */
855    --variant-picker-swatch-width-unitless: 34;
856    --variant-picker-swatch-height-unitless: 34;
857    --variant-picker-swatch-width: 34px;
858    --variant-picker-swatch-height: 34px;
859    --variant-picker-swatch-radius: 32px;
860    --variant-picker-border-width: 1px;
861    --variant-picker-border-style: solid;
862    --variant-picker-border-opacity: 10%;
863
864    /* Variant Picker Buttons */
865    --variant-picker-button-radius: 14px;
866    --variant-picker-button-border-width: 1px;
867
868    /* Slideshow */
869    --slideshow-controls-size: 3.5rem;
870    --slideshow-controls-icon: 2rem;
871    --peek-next-slide-size: 3rem;
872
873    /* Utilities */
874    --backdrop-opacity: 0.15;
875    --backdrop-color-rgb: var(--color-shadow-rgb);
876    --minimum-touch-target: 44px;
877    --disabled-opacity: 0.5;
878    --skeleton-opacity: 0.025;
879
880    /* Shapes */
881    --shape--circle: circle(50% at center);
882    --shape--sunburst: polygon(100% 50%,94.62% 55.87%,98.3% 62.94%,91.57% 67.22%,93.3% 75%,85.7% 77.39%,85.36% 85.36%,77.39% 85.7%,75% 93.3%,67.22% 91.57%,62.94% 98.3%,55.87% 94.62%,50% 100%,44.13% 94.62%,37.06% 98.3%,32.78% 91.57%,25% 93.3%,22.61% 85.7%,14.64% 85.36%,14.3% 77.39%,6.7% 75%,8.43% 67.22%,1.7% 62.94%,5.38% 55.87%,0% 50%,5.38% 44.13%,1.7% 37.06%,8.43% 32.78%,6.7% 25%,14.3% 22.61%,14.64% 14.64%,22.61% 14.3%,25% 6.7%,32.78% 8.43%,37.06% 1.7%,44.13% 5.38%,50% 0%,55.87% 5.38%,62.94% 1.7%,67.22% 8.43%,75% 6.7%,77.39% 14.3%,85.36% 14.64%,85.7% 22.61%,93.3% 25%,91.57% 32.78%,98.3% 37.06%,94.62% 44.13%);
883    --shape--diamond: polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%);
884    --shape--blob: polygon(85.349% 11.712%, 87.382% 13.587%, 89.228% 15.647%, 90.886% 17.862%, 92.359% 20.204%, 93.657% 22.647%, 94.795% 25.169%, 95.786% 27.752%, 96.645% 30.382%, 97.387% 33.048%, 98.025% 35.740%, 98.564% 38.454%, 99.007% 41.186%, 99.358% 43.931%, 99.622% 46.685%, 99.808% 49.446%, 99.926% 52.210%, 99.986% 54.977%, 99.999% 57.744%, 99.975% 60.511%, 99.923% 63.278%, 99.821% 66.043%, 99.671% 68.806%, 99.453% 71.565%, 99.145% 74.314%, 98.724% 77.049%, 98.164% 79.759%, 97.433% 82.427%, 96.495% 85.030%, 95.311% 87.529%, 93.841% 89.872%, 92.062% 91.988%, 89.972% 93.796%, 87.635% 95.273%, 85.135% 96.456%, 82.532% 97.393%, 79.864% 98.127%, 77.156% 98.695%, 74.424% 99.129%, 71.676% 99.452%, 68.918% 99.685%, 66.156% 99.844%, 63.390% 99.942%, 60.624% 99.990%, 57.856% 99.999%, 55.089% 99.978%, 52.323% 99.929%, 49.557% 99.847%, 46.792% 99.723%, 44.031% 99.549%, 41.273% 99.317%, 38.522% 99.017%, 35.781% 98.639%, 33.054% 98.170%, 30.347% 97.599%, 27.667% 96.911%, 25.024% 96.091%, 22.432% 95.123%, 19.907% 93.994%, 17.466% 92.690%, 15.126% 91.216%, 12.902% 89.569%, 10.808% 87.761%, 8.854% 85.803%, 7.053% 83.703%, 5.418% 81.471%, 3.962% 79.119%, 2.702% 76.656%, 1.656% 74.095%, 0.846% 71.450%, 0.294% 68.740%, 0.024% 65.987%, 0.050% 63.221%, 0.343% 60.471%, 0.858% 57.752%, 1.548% 55.073%, 2.370% 52.431%, 3.283% 49.819%, 4.253% 47.227%, 5.249% 44.646%, 6.244% 42.063%, 7.211% 39.471%, 8.124% 36.858%, 8.958% 34.220%, 9.711% 31.558%, 10.409% 28.880%, 11.083% 26.196%, 11.760% 23.513%, 12.474% 20.839%, 13.259% 18.186%, 14.156% 15.569%, 15.214% 13.012%, 16.485% 10.556%, 18.028% 8.261%, 19.883
884% 6.211%, 22.041% 4.484%, 24.440% 3.110%, 26.998% 2.057%, 29.651% 1.275%, 32.360% 0.714%, 35.101% 0.337%, 37.859% 0.110%, 40.624% 0.009%, 43.391% 0.016%, 46.156% 0.113%, 48.918% 0.289%, 51.674% 0.533%, 54.425% 0.837%, 57.166% 1.215%, 59.898% 1.654%, 62.618% 2.163%, 65.322% 2.750%, 68.006% 3.424%, 70.662% 4.197%, 73.284% 5.081%, 75.860% 6.091%, 78.376% 7.242%, 80.813% 8.551%, 83.148% 10.036%, 85.349% 11.712%);
885
886    /* Buy buttons */
887    --height-buy-buttons: calc(var(--padding-lg) * 2 + var(--icon-size-sm));
888
889    /* Card image width and height variables */
890    --card-width-small: 10rem;
891
892    --height-small: 10rem;
893    --height-medium: 11.5rem;
894    --height-large: 13rem;
895    --height-full: 100vh;
896
897    @media screen and (min-width: 750px) {
898      --height-small: 17.5rem;
899      --height-medium: 21.25rem;
900      --height-large: 25rem;
901    }
902
903    /* Modal */
904    --modal-max-height: 65dvh;
905    --quick-add-modal-height: min(38.5rem, 96vh);
906    --quick-add-modal-width: min(54rem, 96vw);
907    --quick-add-modal-gallery-width: 24rem;
908
909    /* Card styles for search */
910    --card-bg-hover: rgb(var(--color-foreground-rgb) / var(--opacity-5));
911    --card-border-hover: rgb(var(--color-foreground-rgb) / var(--opacity-30));
912    --card-border-focus: rgb(var(--color-foreground-rgb) / var(--opacity-10));
913
914    /* Cart */
915    --cart-primary-font-family: var(--font-body--family);
916    --cart-primary-font-style: var(--font-body--style);
917    --cart-primary-font-weight: var(--font-body--weight);
918    --cart-secondary-font-family: var(--font-secondary--family);
919    --cart-secondary-font-style: var(--font-secondary--style);
920    --cart-secondary-font-weight: var(--font-secondary--weight);
921  }
922</style>
923<style data-shopify>
924  
925    
926      :root,
927    
928    
929    
930    .color-scheme-1 {
931        --color-background: rgb(250 247 243 / 1.0);
932        /* RGB values only to apply different opacities - Relative color values are not supported in iOS < 16.4 */
933        --color-background-rgb: 250 247 243;
934        --opacity-5-15: 0.05;
935        --opacity-10-25: 0.1;
936        --opacity-35-55: 0.35;
937        --opacity-40-60: 0.4;
938        --opacity-30-60: 0.3;
939        --color-foreground: rgb(0 0 0 / 0.81);
940        --color-foreground-rgb: 0 0 0;
941        --color-foreground-heading: rgb(0 0 0 / 1.0);
942        --color-foreground-heading-rgb: 0 0 0;
943        --color-primary: rgb(0 0 0 / 0.81);
944        --color-primary-rgb: 0 0 0;
945        --color-primary-hover: rgb(0 0 0 / 1.0);
946        --color-primary-hover-rgb: 0 0 0;
947        --color-border: rgb(0 0 0 / 0.06);
948        --color-border-rgb: 0 0 0;
949        --color-shadow: rgb(0 0 0 / 1.0);
950        --color-shadow-rgb: 0 0 0;
951        --color-primary-button-text: rgb(255 255 255 / 1.0);
952        --color-primary-button-background: rgb(0 0 0 / 1.0);
953        --color-primary-button-border: rgb(0 0 0 / 1.0);
954        --color-primary-button-hover-text: rgb(255 255 255 / 1.0);
955        --color-primary-button-hover-background: rgb(51 51 51 / 1.0);
956        --color-primary-button-hover-border: rgb(0 0 0 / 1.0);
957        --color-secondary-button-text: rgb(0 0 0 / 1.0);
958        --color-secondary-button-background: rgb(0 0 0 / 0.0);
959        --color-secondary-button-border: rgb(0 0 0 / 1.0);
960        --color-secondary-button-hover-text: rgb(51 51 51 / 1.0);
961        --color-secondary-button-hover-background: rgb(250 250 250 / 1.0);
962        --color-secondary-button-hover-border: rgb(51 51 51 / 1.0);
963        --color-input-background: rgb(255 255 255 / 0.78);
964        --color-input-text: rgb(51 51 51 / 1.0);
965        --color-input-text-rgb: 51 51 51;
966        --color-input-border: rgb(223 223 223 / 1.0);
967        --color-input-hover-background: rgb(0 0 0 / 0.01);
968        --color-variant-background: rgb(255 255 255 / 1.0);
969        --color-variant-border: rgb(0 0 0 / 0.13);
970        --color-variant-text: rgb(0 0 0 / 1.0);
971        --color-variant-text-rgb: 0 0 0;
972        --color-variant-hover-background: rgb(245 245 245 / 1.0);
973        --color-variant-hover-text: rgb(0 0 0 / 1.0);
974        --color-variant-hover-border: rgb(230 230 230 / 1.0);
975        --color-selected-variant-background: rgb(0 0 0 / 1.0);
976        --color-selected-variant-border: rgb(0 0 0 / 1.0);
977        --color-selected-variant-text: rgb(255 255 255 / 1.0);
978        --color-selected-variant-hover-background: rgb(26 26 26 / 1.0);
979        --color-selected-variant-hover-text: rgb(255 255 255 / 1.0);
980        --color-selected-variant-hover-border: rgb(26 26 26 / 1.0);
981
982        --input-disabled-background-color: rgb(var(--color-foreground-rgb) / var(--opacity-10));
983        --input-disabled-border-color: rgb(var(--color-foreground-rgb) / var(--opacity-5-15));
984        --input-disabled-text-color: rgb(var(--color-foreground-rgb) / var(--opacity-50));
985        --color-foreground-muted: rgb(var(--color-foreground-rgb) / var(--opacity-60));
986        --font-h1--color: var(--color-foreground-heading);
987        --font-h2--color: var(--color-foreground-heading);
988        --font-h3--color: var(--color-foreground-heading);
989        --font-h4--color: var(--color-foreground-heading);
990        --font-h5--color: var(--color-foreground-heading);
991        --font-h6--color: var(--color-foreground-heading);
992
993        /* Shadows */
994        
995          --shadow-drawer: 0px 4px 20px rgb(var(--color-shadow-rgb) / var(--opacity-15));
996        
997        
998          --shadow-blur: 20px;
999          --shadow-popover: 0px 4px 20px rgb(var(--color-shadow-rgb) / var(--opacity-15));
1000        
1001      }
1002  
1003    
1004    
1005    
1006    .color-scheme-2 {
1007        --color-background: rgb(245 245 245 / 1.0);
1008        /* RGB values only to apply different opacities - Relative color values are not supported in iOS < 16.4 */
1009        --color-background-rgb: 245 245 245;
1010        --opacity-5-15: 0.05;
1011        --opacity-10-25: 0.1;
1012        --opacity-35-55: 0.35;
1013        --opacity-40-60: 0.4;
1014        --opacity-30-60: 0.3;
1015        --color-foreground: rgb(0 0 0 / 0.81);
1016        --color-foreground-rgb: 0 0 0;
1017        --color-foreground-heading: rgb(0 0 0 / 1.0);
1018        --color-foreground-heading-rgb: 0 0 0;
1019        --color-primary: rgb(0 0 0 / 0.81);
1020        --color-primary-rgb: 0 0 0;
1021        --color-primary-hover: rgb(255 255 255 / 1.0);
1022        --color-primary-hover-rgb: 255 255 255;
1023        --color-border: rgb(223 223 223 / 1.0);
1024        --color-border-rgb: 223 223 223;
1025        --color-shadow: rgb(0 0 0 / 1.0);
1026        --color-shadow-rgb: 0 0 0;
1027        --color-primary-button-text: rgb(255 255 255 / 1.0);
1028        --color-primary-button-background: rgb(0 0 0 / 1.0);
1029        --color-primary-button-border: rgb(0 0 0 / 1.0);
1030        --color-primary-button-hover-text: rgb(255 255 255 / 1.0);
1031        --color-primary-button-hover-background: rgb(51 51 51 / 1.0);
1032        --color-primary-button-hover-border: rgb(51 51 51 / 1.0);
1033        --color-secondary-button-text: rgb(0 0 0 / 1.0);
1034        --color-secondary-button-background: rgb(0 0 0 / 0.0);
1035        --color-secondary-button-border: rgb(0 0 0 / 1.0);
1036        --color-secondary-button-hover-text: rgb(0 0 0 / 1.0);
1037        --color-secondary-button-hover-background: rgb(255 255 255 / 0.36);
1038        --color-secondary-button-hover-border: rgb(51 51 51 / 0.73);
1039        --color-input-background: rgb(0 0 0 / 0.0);
1040        --color-input-text: rgb(0 0 0 / 0.53);
1041        --color-input-text-rgb: 0 0 0;
1042        --color-input-border: rgb(0 0 0 / 0.13);
1043        --color-input-hover-background: rgb(255 255 255 / 0.36);
1044        --color-variant-background: rgb(255 255 255 / 1.0);
1045        --color-variant-border: rgb(230 230 230 / 1.0);
1046        --color-variant-text: rgb(0 0 0 / 1.0);
1047        --color-variant-text-rgb: 0 0 0;
1048        --color-variant-hover-background: rgb(245 245 245 / 1.0);
1049        --color-variant-hover-text: rgb(0 0 0 / 1.0);
1050        --color-variant-hover-border: rgb(230 230 230 / 1.0);
1051        --color-selected-variant-background: rgb(0 0 0 / 1.0);
1052        --color-selected-variant-border: rgb(0 0 0 / 1.0);
1053        --color-selected-variant-text: rgb(255 255 255 / 1.0);
1054        --color-selected-variant-hover-background: rgb(26 26 26 / 1.0);
1055        --color-selected-variant-hover-text: rgb(255 255 255 / 1.0);
1056        --color-selected-variant-hover-border: rgb(26 26 26 / 1.0);
1057
1058        --input-disabled-background-color: rgb(var(--color-foreground-rgb) / var(--opacity-10));
1059        --input-disabled-border-color: rgb(var(--color-foreground-rgb) / var(--opacity-5-15));
1060        --input-disabled-text-color: rgb(var(--color-foreground-rgb) / var(--opacity-50));
1061        --color-foreground-muted: rgb(var(--color-foreground-rgb) / var(--opacity-60));
1062        --font-h1--color: var(--color-foreground-heading);
1063        --font-h2--color: var(--color-foreground-heading);
1064        --font-h3--color: var(--color-foreground-heading);
1065        --font-h4--color: var(--color-foreground-heading);
1066        --font-h5--color: var(--color-foreground-heading);
1067        --font-h6--color: var(--color-foreground-heading);
1068
1069        /* Shadows */
1070        
1071          --shadow-drawer: 0px 4px 20px rgb(var(--color-shadow-rgb) / var(--opacity-15));
1072        
1073        
1074          --shadow-blur: 20px;
1075          --shadow-popover: 0px 4px 20px rgb(var(--color-shadow-rgb) / var(--opacity-15));
1076        
1077      }
1078  
1079    
1080    
1081    
1082    .color-scheme-3 {
1083        --color-background: rgb(238 241 234 / 1.0);
1084        /* RGB values only to apply different opacities - Relative color values are not supported in iOS < 16.4 */
1085        --color-background-rgb: 238 241 234;
1086        --opacity-5-15: 0.05;
1087        --opacity-10-25: 0.1;
1088        --opacity-35-55: 0.35;
1089        --opacity-40-60: 0.4;
1090        --opacity-30-60: 0.3;
1091        --color-foreground: rgb(0 0 0 / 0.81);
1092        --color-foreground-rgb: 0 0 0;
1093        --color-foreground-heading: rgb(0 0 0 / 1.0);
1094        --color-foreground-heading-rgb: 0 0 0;
1095        --color-primary: rgb(0 0 0 / 0.81);
1096        --color-primary-rgb: 0 0 0;
1097        --color-primary-hover: rgb(0 0 0 / 1.0);
1098        --color-primary-hover-rgb: 0 0 0;
1099        --color-border: rgb(0 0 0 / 0.81);
1100        --color-border-rgb: 0 0 0;
1101        --color-shadow: rgb(0 0 0 / 1.0);
1102        --color-shadow-rgb: 0 0 0;
1103        --color-primary-button-text: rgb(255 255 255 / 1.0);
1104        --color-primary-button-background: rgb(0 0 0 / 1.0);
1105        --color-primary-button-border: rgb(0 0 0 / 1.0);
1106        --color-primary-button-hover-text: rgb(255 255 255 / 1.0);
1107        --color-primary-button-hover-background: rgb(51 51 51 / 1.0);
1108        --color-primary-button-hover-border: rgb(51 51 51 / 1.0);
1109        --color-secondary-button-text: rgb(0 0 0 / 1.0);
1110        --color-secondary-button-background: rgb(0 0 0 / 0.0);
1111        --color-secondary-button-border: rgb(0 0 0 / 1.0);
1112        --color-secondary-button-hover-text: rgb(0 0 0 / 0.81);
1113        --color-secondary-button-hover-background: rgb(255 255 255 / 0.36);
1114        --color-secondary-button-hover-border: rgb(0 0 0 / 0.81);
1115        --color-input-background: rgb(0 0 0 / 0.0);
1116        --color-input-text: rgb(0 0 0 / 0.81);
1117        --color-input-text-rgb: 0 0 0;
1118        --color-input-border: rgb(0 0 0 / 0.81);
1119        --color-input-hover-background: rgb(255 255 255 / 0.36);
1120        --color-variant-background: rgb(255 255 255 / 1.0);
1121        --color-variant-border: rgb(230 230 230 / 1.0);
1122        --color-variant-text: rgb(0 0 0 / 1.0);
1123        --color-variant-text-rgb: 0 0 0;
1124        --color-variant-hover-background: rgb(245 245 245 / 1.0);
1125        --color-variant-hover-text: rgb(0 0 0 / 1.0);
1126        --color-variant-hover-border: rgb(230 230 230 / 1.0);
1127        --color-selected-variant-background: rgb(0 0 0 / 1.0);
1128        --color-selected-variant-border: rgb(0 0 0 / 1.0);
1129        --color-selected-variant-text: rgb(255 255 255 / 1.0);
1130        --color-selected-variant-hover-background: rgb(26 26 26 / 1.0);
1131        --color-selected-variant-hover-text: rgb(255 255 255 / 1.0);
1132        --color-selected-variant-hover-border: rgb(26 26 26 / 1.0);
1133
1134        --input-disabled-background-color: rgb(var(--color-foreground-rgb) / var(--opacity-10));
1135        --input-disabled-border-color: rgb(var(--color-foreground-rgb) / var(--opacity-5-15));
1136        --input-disabled-text-color: rgb(var(--color-foreground-rgb) / var(--opacity-50));
1137        --color-foreground-muted: rgb(var(--color-foreground-rgb) / var(--opacity-60));
1138        --font-h1--color: var(--color-foreground-heading);
1139        --font-h2--color: var(--color-foreground-heading);
1140        --font-h3--color: var(--color-foreground-heading);
1141        --font-h4--color: var(--color-foreground-heading);
1142        --font-h5--color: var(--color-foreground-heading);
1143        --font-h6--color: var(--color-foreground-heading);
1144
1145        /* Shadows */
1146        
1147          --shadow-drawer: 0px 4px 20px rgb(var(--color-shadow-rgb) / var(--opacity-15));
1148        
1149        
1150          --shadow-blur: 20px;
1151          --shadow-popover: 0px 4px 20px rgb(var(--color-shadow-rgb) / var(--opacity-15));
1152        
1153      }
1154  
1155    
1156    
1157    
1158    .color-scheme-4 {
1159        --color-background: rgb(225 237 245 / 1.0);
1160        /* RGB values only to apply different opacities - Relative color values are not supported in iOS < 16.4 */
1161        --color-background-rgb: 225 237 245;
1162        --opacity-5-15: 0.05;
1163        --opacity-10-25: 0.1;
1164        --opacity-35-55: 0.35;
1165        --opacity-40-60: 0.4;
1166        --opacity-30-60: 0.3;
1167        --color-foreground: rgb(0 0 0 / 0.81);
1168        --color-foreground-rgb: 0 0 0;
1169        --color-foreground-heading: rgb(0 0 0 / 1.0);
1170        --color-foreground-heading-rgb: 0 0 0;
1171        --color-primary: rgb(0 0 0 / 0.81);
1172        --color-primary-rgb: 0 0 0;
1173        --color-primary-hover: rgb(0 0 0 / 1.0);
1174        --color-primary-hover-rgb: 0 0 0;
1175        --color-border: rgb(29 54 134 / 0.5);
1176        --color-border-rgb: 29 54 134;
1177        --color-shadow: rgb(0 0 0 / 1.0);
1178        --color-shadow-rgb: 0 0 0;
1179        --color-primary-button-text: rgb(255 255 255 / 1.0);
1180        --color-primary-button-background: rgb(0 0 0 / 1.0);
1181        --color-primary-button-border: rgb(29 54 134 / 1.0);
1182        --color-primary-button-hover-text: rgb(255 255 255 / 1.0);
1183        --color-primary-button-hover-background: rgb(51 51 51 / 1.0);
1184        --color-primary-button-hover-border: rgb(0 0 0 / 1.0);
1185        --color-secondary-button-text: rgb(0 0 0 / 1.0);
1186        --color-secondary-button-background: rgb(0 0 0 / 0.0);
1187        --color-secondary-button-border: rgb(0 0 0 / 1.0);
1188        --color-secondary-button-hover-text: rgb(0 0 0 / 0.81);
1189        --color-secondary-button-hover-background: rgb(255 255 255 / 0.36);
1190        --color-secondary-button-hover-border: rgb(0 0 0 / 0.81);
1191        --color-input-background: rgb(0 0 0 / 0.0);
1192        --color-input-text: rgb(0 0 0 / 0.81);
1193        --color-input-text-rgb: 0 0 0;
1194        --color-input-border: rgb(0 0 0 / 0.81);
1195        --color-input-hover-background: rgb(255 255 255 / 0.36);
1196        --color-variant-background: rgb(255 255 255 / 1.0);
1197        --color-variant-border: rgb(230 230 230 / 1.0);
1198        --color-variant-text: rgb(0 0 0 / 1.0);
1199        --color-variant-text-rgb: 0 0 0;
1200        --color-variant-hover-background: rgb(245 245 245 / 1.0);
1201        --color-variant-hover-text: rgb(0 0 0 / 1.0);
1202        --color-variant-hover-border: rgb(230 230 230 / 1.0);
1203        --color-selected-variant-background: rgb(0 0 0 / 1.0);
1204        --color-selected-variant-border: rgb(0 0 0 / 1.0);
1205        --color-selected-variant-text: rgb(255 255 255 / 1.0);
1206        --color-selected-variant-hover-background: rgb(26 26 26 / 1.0);
1207        --color-selected-variant-hover-text: rgb(255 255 255 / 1.0);
1208        --color-selected-variant-hover-border: rgb(26 26 26 / 1.0);
1209
1210        --input-disabled-background-color: rgb(var(--color-foreground-rgb) / var(--opacity-10));
1211        --input-disabled-border-color: rgb(var(--color-foreground-rgb) / var(--opacity-5-15));
1212        --input-disabled-text-color: rgb(var(--color-foreground-rgb) / var(--opacity-50));
1213        --color-foreground-muted: rgb(var(--color-foreground-rgb) / var(--opacity-60));
1214        --font-h1--color: var(--color-foreground-heading);
1215        --font-h2--color: var(--color-foreground-heading);
1216        --font-h3--color: var(--color-foreground-heading);
1217        --font-h4--color: var(--color-foreground-heading);
1218        --font-h5--color: var(--color-foreground-heading);
1219        --font-h6--color: var(--color-foreground-heading);
1220
1221        /* Shadows */
1222        
1223          --shadow-drawer: 0px 4px 20px rgb(var(--color-shadow-rgb) / var(--opacity-15));
1224        
1225        
1226          --shadow-blur: 20px;
1227          --shadow-popover: 0px 4px 20px rgb(var(--color-shadow-rgb) / var(--opacity-15));
1228        
1229      }
1230  
1231    
1232    
1233    
1234    .color-scheme-5 {
1235        --color-background: rgb(51 51 51 / 1.0);
1236        /* RGB values only to apply different opacities - Relative color values are not supported in iOS < 16.4 */
1237        --color-background-rgb: 51 51 51;
1238        --opacity-5-15: 0.15;
1239        --opacity-10-25: 0.25;
1240        --opacity-35-55: 0.55;
1241        --opacity-40-60: 0.6;
1242        --opacity-30-60: 0.6;
1243        --color-foreground: rgb(255 255 255 / 1.0);
1244        --color-foreground-rgb: 255 255 255;
1245        --color-foreground-heading: rgb(255 255 255 / 1.0);
1246        --color-foreground-heading-rgb: 255 255 255;
1247        --color-primary: rgb(255 255 255 / 1.0);
1248        --color-primary-rgb: 255 255 255;
1249        --color-primary-hover: rgb(255 255 255 / 0.69);
1250        --color-primary-hover-rgb: 255 255 255;
1251        --color-border: rgb(255 255 255 / 0.69);
1252        --color-border-rgb: 255 255 255;
1253        --color-shadow: rgb(0 0 0 / 1.0);
1254        --color-shadow-rgb: 0 0 0;
1255        --color-primary-button-text: rgb(0 0 0 / 1.0);
1256        --color-primary-button-background: rgb(255 255 255 / 1.0);
1257        --color-primary-button-border: rgb(255 255 255 / 1.0);
1258        --color-primary-button-hover-text: rgb(255 255 255 / 1.0);
1259        --color-primary-button-hover-background: rgb(0 0 0 / 1.0);
1260        --color-primary-button-hover-border: rgb(0 0 0 / 1.0);
1261        --color-secondary-button-text: rgb(255 255 255 / 1.0);
1262        --color-secondary-button-background: rgb(0 0 0 / 0.0);
1263        --color-secondary-button-border: rgb(255 255 255 / 0.69);
1264        --color-secondary-button-hover-text: rgb(255 255 255 / 0.93);
1265        --color-secondary-button-hover-background: rgb(255 255 255 / 0.04);
1266        --color-secondary-button-hover-border: rgb(255 255 255 / 0.69);
1267        --color-input-background: rgb(51 51 51 / 1.0);
1268        --color-input-text: rgb(255 255 255 / 0.93);
1269        --color-input-text-rgb: 255 255 255;
1270        --color-input-border: rgb(255 255 255 / 0.69);
1271        --color-input-hover-background: rgb(255 255 255 / 0.04);
1272        --color-variant-background: rgb(255 255 255 / 1.0);
1273        --color-variant-border: rgb(230 230 230 / 1.0);
1274        --color-variant-text: rgb(0 0 0 / 1.0);
1275        --color-variant-text-rgb: 0 0 0;
1276        --color-variant-hover-background: rgb(245 245 245 / 1.0);
1277        --color-variant-hover-text: rgb(0 0 0 / 1.0);
1278        --color-variant-hover-border: rgb(230 230 230 / 1.0);
1279        --color-selected-variant-background: rgb(0 0 0 / 1.0);
1280        --color-selected-variant-border: rgb(0 0 0 / 1.0);
1281        --color-selected-variant-text: rgb(255 255 255 / 1.0);
1282        --color-selected-variant-hover-background: rgb(26 26 26 / 1.0);
1283        --color-selected-variant-hover-text: rgb(255 255 255 / 1.0);
1284        --color-selected-variant-hover-border: rgb(26 26 26 / 1.0);
1285
1286        --input-disabled-background-color: rgb(var(--color-foreground-rgb) / var(--opacity-10));
1287        --input-disabled-border-color: rgb(var(--color-foreground-rgb) / var(--opacity-5-15));
1288        --input-disabled-text-color: rgb(var(--color-foreground-rgb) / var(--opacity-50));
1289        --color-foreground-muted: rgb(var(--color-foreground-rgb) / var(--opacity-60));
1290        --font-h1--color: var(--color-foreground-heading);
1291        --font-h2--color: var(--color-foreground-heading);
1292        --font-h3--color: var(--color-foreground-heading);
1293        --font-h4--color: var(--color-foreground-heading);
1294        --font-h5--color: var(--color-foreground-heading);
1295        --font-h6--color: var(--color-foreground-heading);
1296
1297        /* Shadows */
1298        
1299          --shadow-drawer: 0px 4px 20px rgb(var(--color-shadow-rgb) / var(--opacity-15));
1300        
1301        
1302          --shadow-blur: 20px;
1303          --shadow-popover: 0px 4px 20px rgb(var(--color-shadow-rgb) / var(--opacity-15));
1304        
1305      }
1306  
1307    
1308    
1309    
1310    .color-scheme-6 {
1311        --color-background: rgb(0 0 0 / 0.0);
1312        /* RGB values only to apply different opacities - Relative color values are not supported in iOS < 16.4 */
1313        --color-background-rgb: 0 0 0;
1314        --opacity-5-15: 0.15;
1315        --opacity-10-25: 0.25;
1316        --opacity-35-55: 0.55;
1317        --opacity-40-60: 0.6;
1318        --opacity-30-60: 0.6;
1319        --color-foreground: rgb(255 255 255 / 1.0);
1320        --color-foreground-rgb: 255 255 255;
1321        --color-foreground-heading: rgb(255 255 255 / 1.0);
1322        --color-foreground-heading-rgb: 255 255 255;
1323        --color-primary: rgb(255 255 255 / 1.0);
1324        --color-primary-rgb: 255 255 255;
1325        --color-primary-hover: rgb(255 255 255 / 0.69);
1326        --color-primary-hover-rgb: 255 255 255;
1327        --color-border: rgb(230 230 230 / 1.0);
1328        --color-border-rgb: 230 230 230;
1329        --color-shadow: rgb(0 0 0 / 1.0);
1330        --color-shadow-rgb: 0 0 0;
1331        --color-primary-button-text: rgb(0 0 0 / 1.0);
1332        --color-primary-button-background: rgb(255 255 255 / 1.0);
1333        --color-primary-button-border: rgb(255 255 255 / 1.0);
1334        --color-primary-button-hover-text: rgb(255 255 255 / 1.0);
1335        --color-primary-button-hover-background: rgb(0 0 0 / 1.0);
1336        --color-primary-button-hover-border: rgb(0 0 0 / 1.0);
1337        --color-secondary-button-text: rgb(255 255 255 / 1.0);
1337
1338        --color-secondary-button-background: rgb(0 0 0 / 0.0);
1339        --color-secondary-button-border: rgb(255 255 255 / 1.0);
1340        --color-secondary-button-hover-text: rgb(255 255 255 / 1.0);
1341        --color-secondary-button-hover-background: rgb(255 255 255 / 0.08);
1342        --color-secondary-button-hover-border: rgb(255 255 255 / 1.0);
1343        --color-input-background: rgb(255 255 255 / 1.0);
1344        --color-input-text: rgb(0 0 0 / 0.53);
1345        --color-input-text-rgb: 0 0 0;
1346        --color-input-border: rgb(0 0 0 / 0.13);
1347        --color-input-hover-background: rgb(250 250 250 / 1.0);
1348        --color-variant-background: rgb(255 255 255 / 1.0);
1349        --color-variant-border: rgb(230 230 230 / 1.0);
1350        --color-variant-text: rgb(0 0 0 / 1.0);
1351        --color-variant-text-rgb: 0 0 0;
1352        --color-variant-hover-background: rgb(245 245 245 / 1.0);
1353        --color-variant-hover-text: rgb(0 0 0 / 1.0);
1354        --color-variant-hover-border: rgb(230 230 230 / 1.0);
1355        --color-selected-variant-background: rgb(0 0 0 / 1.0);
1356        --color-selected-variant-border: rgb(0 0 0 / 1.0);
1357        --color-selected-variant-text: rgb(255 255 255 / 1.0);
1358        --color-selected-variant-hover-background: rgb(26 26 26 / 1.0);
1359        --color-selected-variant-hover-text: rgb(255 255 255 / 1.0);
1360        --color-selected-variant-hover-border: rgb(26 26 26 / 1.0);
1361
1362        --input-disabled-background-color: rgb(var(--color-foreground-rgb) / var(--opacity-10));
1363        --input-disabled-border-color: rgb(var(--color-foreground-rgb) / var(--opacity-5-15));
1364        --input-disabled-text-color: rgb(var(--color-foreground-rgb) / var(--opacity-50));
1365        --color-foreground-muted: rgb(var(--color-foreground-rgb) / var(--opacity-60));
1366        --font-h1--color: var(--color-foreground-heading);
1367        --font-h2--color: var(--color-foreground-heading);
1368        --font-h3--color: var(--color-foreground-heading);
1369        --font-h4--color: var(--color-foreground-heading);
1370        --font-h5--color: var(--color-foreground-heading);
1371        --font-h6--color: var(--color-foreground-heading);
1372
1373        /* Shadows */
1374        
1375          --shadow-drawer: 0px 4px 20px rgb(var(--color-shadow-rgb) / var(--opacity-15));
1376        
1377        
1378          --shadow-blur: 20px;
1379          --shadow-popover: 0px 4px 20px rgb(var(--color-shadow-rgb) / var(--opacity-15));
1380        
1381      }
1382  
1383    
1384    
1385    
1386    .color-scheme-58084d4c-a86e-4d0a-855e-a0966e5043f7 {
1387        --color-background: rgb(0 0 0 / 0.0);
1388        /* RGB values only to apply different opacities - Relative color values are not supported in iOS < 16.4 */
1389        --color-background-rgb: 0 0 0;
1390        --opacity-5-15: 0.15;
1391        --opacity-10-25: 0.25;
1392        --opacity-35-55: 0.55;
1393        --opacity-40-60: 0.6;
1394        --opacity-30-60: 0.6;
1395        --color-foreground: rgb(0 0 0 / 1.0);
1396        --color-foreground-rgb: 0 0 0;
1397        --color-foreground-heading: rgb(0 0 0 / 1.0);
1398        --color-foreground-heading-rgb: 0 0 0;
1399        --color-primary: rgb(0 0 0 / 1.0);
1400        --color-primary-rgb: 0 0 0;
1401        --color-primary-hover: rgb(0 0 0 / 0.53);
1402        --color-primary-hover-rgb: 0 0 0;
1403        --color-border: rgb(230 230 230 / 1.0);
1404        --color-border-rgb: 230 230 230;
1405        --color-shadow: rgb(0 0 0 / 1.0);
1406        --color-shadow-rgb: 0 0 0;
1407        --color-primary-button-text: rgb(255 255 255 / 1.0);
1408        --color-primary-button-background: rgb(0 0 0 / 1.0);
1409        --color-primary-button-border: rgb(0 0 0 / 1.0);
1410        --color-primary-button-hover-text: rgb(255 255 255 / 1.0);
1411        --color-primary-button-hover-background: rgb(51 51 51 / 1.0);
1412        --color-primary-button-hover-border: rgb(51 51 51 / 1.0);
1413        --color-secondary-button-text: rgb(0 0 0 / 1.0);
1414        --color-secondary-button-background: rgb(0 0 0 / 0.0);
1415        --color-secondary-button-border: rgb(0 0 0 / 1.0);
1416        --color-secondary-button-hover-text: rgb(51 51 51 / 1.0);
1417        --color-secondary-button-hover-background: rgb(250 250 250 / 1.0);
1418        --color-secondary-button-hover-border: rgb(51 51 51 / 1.0);
1419        --color-input-background: rgb(255 255 255 / 1.0);
1420        --color-input-text: rgb(0 0 0 / 0.53);
1421        --color-input-text-rgb: 0 0 0;
1422        --color-input-border: rgb(0 0 0 / 0.13);
1423        --color-input-hover-background: rgb(250 250 250 / 1.0);
1424        --color-variant-background: rgb(255 255 255 / 1.0);
1425        --color-variant-border: rgb(230 230 230 / 1.0);
1426        --color-variant-text: rgb(0 0 0 / 1.0);
1427        --color-variant-text-rgb: 0 0 0;
1428        --color-variant-hover-background: rgb(245 245 245 / 1.0);
1429        --color-variant-hover-text: rgb(0 0 0 / 1.0);
1430        --color-variant-hover-border: rgb(230 230 230 / 1.0);
1431        --color-selected-variant-background: rgb(0 0 0 / 1.0);
1432        --color-selected-variant-border: rgb(0 0 0 / 1.0);
1433        --color-selected-variant-text: rgb(255 255 255 / 1.0);
1434        --color-selected-variant-hover-background: rgb(26 26 26 / 1.0);
1435        --color-selected-variant-hover-text: rgb(255 255 255 / 1.0);
1436        --color-selected-variant-hover-border: rgb(26 26 26 / 1.0);
1437
1438        --input-disabled-background-color: rgb(var(--color-foreground-rgb) / var(--opacity-10));
1439        --input-disabled-border-color: rgb(var(--color-foreground-rgb) / var(--opacity-5-15));
1440        --input-disabled-text-color: rgb(var(--color-foreground-rgb) / var(--opacity-50));
1441        --color-foreground-muted: rgb(var(--color-foreground-rgb) / var(--opacity-60));
1442        --font-h1--color: var(--color-foreground-heading);
1443        --font-h2--color: var(--color-foreground-heading);
1444        --font-h3--color: var(--color-foreground-heading);
1445        --font-h4--color: var(--color-foreground-heading);
1446        --font-h5--color: var(--color-foreground-heading);
1447        --font-h6--color: var(--color-foreground-heading);
1448
1449        /* Shadows */
1450        
1451          --shadow-drawer: 0px 4px 20px rgb(var(--color-shadow-rgb) / var(--opacity-15));
1452        
1453        
1454          --shadow-blur: 20px;
1455          --shadow-popover: 0px 4px 20px rgb(var(--color-shadow-rgb) / var(--opacity-15));
1456        
1457      }
1458  
1459    
1460    
1461    
1462    .color-scheme-3a22a853-b27c-4989-9b28-b2fe84f28659 {
1463        --color-background: rgb(204 90 48 / 1.0);
1464        /* RGB values only to apply different opacities - Relative color values are not supported in iOS < 16.4 */
1465        --color-background-rgb: 204 90 48;
1466        --opacity-5-15: 0.05;
1467        --opacity-10-25: 0.1;
1468        --opacity-35-55: 0.35;
1469        --opacity-40-60: 0.4;
1470        --opacity-30-60: 0.3;
1471        --color-foreground: rgb(255 255 255 / 1.0);
1472        --color-foreground-rgb: 255 255 255;
1473        --color-foreground-heading: rgb(255 255 255 / 1.0);
1474        --color-foreground-heading-rgb: 255 255 255;
1475        --color-primary: rgb(255 255 255 / 1.0);
1476        --color-primary-rgb: 255 255 255;
1477        --color-primary-hover: rgb(255 255 255 / 1.0);
1478        --color-primary-hover-rgb: 255 255 255;
1479        --color-border: rgb(0 0 0 / 0.06);
1480        --color-border-rgb: 0 0 0;
1481        --color-shadow: rgb(255 255 255 / 1.0);
1482        --color-shadow-rgb: 255 255 255;
1483        --color-primary-button-text: rgb(255 255 255 / 1.0);
1484        --color-primary-button-background: rgb(255 255 255 / 1.0);
1485        --color-primary-button-border: rgb(255 255 255 / 1.0);
1486        --color-primary-button-hover-text: rgb(255 255 255 / 1.0);
1487        --color-primary-button-hover-background: rgb(255 255 255 / 1.0);
1488        --color-primary-button-hover-border: rgb(255 255 255 / 1.0);
1489        --color-secondary-button-text: rgb(0 0 0 / 1.0);
1490        --color-secondary-button-background: rgb(0 0 0 / 0.0);
1491        --color-secondary-button-border: rgb(255 255 255 / 1.0);
1492        --color-secondary-button-hover-text: rgb(51 51 51 / 1.0);
1493        --color-secondary-button-hover-background: rgb(250 250 250 / 1.0);
1494        --color-secondary-button-hover-border: rgb(51 51 51 / 1.0);
1495        --color-input-background: rgb(255 255 255 / 0.78);
1496        --color-input-text: rgb(51 51 51 / 1.0);
1497        --color-input-text-rgb: 51 51 51;
1498        --color-input-border: rgb(223 223 223 / 1.0);
1499        --color-input-hover-background: rgb(0 0 0 / 0.01);
1500        --color-variant-background: rgb(255 255 255 / 1.0);
1501        --color-variant-border: rgb(0 0 0 / 0.13);
1502        --color-variant-text: rgb(0 0 0 / 1.0);
1503        --color-variant-text-rgb: 0 0 0;
1504        --color-variant-hover-background: rgb(245 245 245 / 1.0);
1505        --color-variant-hover-text: rgb(0 0 0 / 1.0);
1506        --color-variant-hover-border: rgb(230 230 230 / 1.0);
1507        --color-selected-variant-background: rgb(0 0 0 / 1.0);
1508        --color-selected-variant-border: rgb(0 0 0 / 1.0);
1509        --color-selected-variant-text: rgb(255 255 255 / 1.0);
1510        --color-selected-variant-hover-background: rgb(26 26 26 / 1.0);
1511        --color-selected-variant-hover-text: rgb(255 255 255 / 1.0);
1512        --color-selected-variant-hover-border: rgb(26 26 26 / 1.0);
1513
1514        --input-disabled-background-color: rgb(var(--color-foreground-rgb) / var(--opacity-10));
1515        --input-disabled-border-color: rgb(var(--color-foreground-rgb) / var(--opacity-5-15));
1516        --input-disabled-text-color: rgb(var(--color-foreground-rgb) / var(--opacity-50));
1517        --color-foreground-muted: rgb(var(--color-foreground-rgb) / var(--opacity-60));
1518        --font-h1--color: var(--color-foreground-heading);
1519        --font-h2--color: var(--color-foreground-heading);
1520        --font-h3--color: var(--color-foreground-heading);
1521        --font-h4--color: var(--color-foreground-heading);
1522        --font-h5--color: var(--color-foreground-heading);
1523        --font-h6--color: var(--color-foreground-heading);
1524
1525        /* Shadows */
1526        
1527          --shadow-drawer: 0px 4px 20px rgb(var(--color-shadow-rgb) / var(--opacity-15));
1528        
1529        
1530          --shadow-blur: 20px;
1531          --shadow-popover: 0px 4px 20px rgb(var(--color-shadow-rgb) / var(--opacity-15));
1532        
1533      }
1534  
1535    
1536    
1537    
1538    .color-scheme-39516907-68b0-49a6-8725-28e850d4665e {
1539        --color-background: rgb(255 255 255 / 0.78);
1540        /* RGB values only to apply different opacities - Relative color values are not supported in iOS < 16.4 */
1541        --color-background-rgb: 255 255 255;
1542        --opacity-5-15: 0.05;
1543        --opacity-10-25: 0.1;
1544        --opacity-35-55: 0.35;
1545        --opacity-40-60: 0.4;
1546        --opacity-30-60: 0.3;
1547        --color-foreground: rgb(0 0 0 / 0.81);
1548        --color-foreground-rgb: 0 0 0;
1549        --color-foreground-heading: rgb(0 0 0 / 1.0);
1550        --color-foreground-heading-rgb: 0 0 0;
1551        --color-primary: rgb(0 0 0 / 0.81);
1552        --color-primary-rgb: 0 0 0;
1553        --color-primary-hover: rgb(0 0 0 / 1.0);
1554        --color-primary-hover-rgb: 0 0 0;
1555        --color-border: rgb(0 0 0 / 0.06);
1556        --color-border-rgb: 0 0 0;
1557        --color-shadow: rgb(0 0 0 / 1.0);
1558        --color-shadow-rgb: 0 0 0;
1559        --color-primary-button-text: rgb(255 255 255 / 1.0);
1560        --color-primary-button-background: rgb(0 0 0 / 1.0);
1561        --color-primary-button-border: rgb(0 0 0 / 1.0);
1562        --color-primary-button-hover-text: rgb(255 255 255 / 1.0);
1563        --color-primary-button-hover-background: rgb(51 51 51 / 1.0);
1564        --color-primary-button-hover-border: rgb(0 0 0 / 1.0);
1565        --color-secondary-button-text: rgb(0 0 0 / 1.0);
1566        --color-secondary-button-background: rgb(0 0 0 / 0.0);
1567        --color-secondary-button-border: rgb(0 0 0 / 1.0);
1568        --color-secondary-button-hover-text: rgb(51 51 51 / 1.0);
1569        --color-secondary-button-hover-background: rgb(250 250 250 / 1.0);
1570        --color-secondary-button-hover-border: rgb(51 51 51 / 1.0);
1571        --color-input-background: rgb(255 255 255 / 0.78);
1572        --color-input-text: rgb(51 51 51 / 1.0);
1573        --color-input-text-rgb: 51 51 51;
1574        --color-input-border: rgb(223 223 223 / 1.0);
1575        --color-input-hover-background: rgb(0 0 0 / 0.01);
1576        --color-variant-background: rgb(255 255 255 / 1.0);
1577        --color-variant-border: rgb(0 0 0 / 0.13);
1578        --color-variant-text: rgb(0 0 0 / 1.0);
1579        --color-variant-text-rgb: 0 0 0;
1580        --color-variant-hover-background: rgb(245 245 245 / 1.0);
1581        --color-variant-hover-text: rgb(0 0 0 / 1.0);
1582        --color-variant-hover-border: rgb(230 230 230 / 1.0);
1583        --color-selected-variant-background: rgb(0 0 0 / 1.0);
1584        --color-selected-variant-border: rgb(0 0 0 / 1.0);
1585        --color-selected-variant-text: rgb(255 255 255 / 1.0);
1586        --color-selected-variant-hover-background: rgb(26 26 26 / 1.0);
1587        --color-selected-variant-hover-text: rgb(255 255 255 / 1.0);
1588        --color-selected-variant-hover-border: rgb(26 26 26 / 1.0);
1589
1590        --input-disabled-background-color: rgb(var(--color-foreground-rgb) / var(--opacity-10));
1591        --input-disabled-border-color: rgb(var(--color-foreground-rgb) / var(--opacity-5-15));
1592        --input-disabled-text-color: rgb(var(--color-foreground-rgb) / var(--opacity-50));
1593        --color-foreground-muted: rgb(var(--color-foreground-rgb) / var(--opacity-60));
1594        --font-h1--color: var(--color-foreground-heading);
1595        --font-h2--color: var(--color-foreground-heading);
1596        --font-h3--color: var(--color-foreground-heading);
1597        --font-h4--color: var(--color-foreground-heading);
1598        --font-h5--color: var(--color-foreground-heading);
1599        --font-h6--color: var(--color-foreground-heading);
1600
1601        /* Shadows */
1602        
1603          --shadow-drawer: 0px 4px 20px rgb(var(--color-shadow-rgb) / var(--opacity-15));
1604        
1605        
1606          --shadow-blur: 20px;
1607          --shadow-popover: 0px 4px 20px rgb(var(--color-shadow-rgb) / var(--opacity-15));
1608        
1609      }
1610  
1611    
1612    
1613    
1614    .color-scheme-f013a9d4-f3d5-4308-84c0-11895e862b26 {
1615        --color-background: rgb(247 239 227 / 1.0);
1616        /* RGB values only to apply different opacities - Relative color values are not supported in iOS < 16.4 */
1617        --color-background-rgb: 247 239 227;
1618        --opacity-5-15: 0.05;
1619        --opacity-10-25: 0.1;
1620        --opacity-35-55: 0.35;
1621        --opacity-40-60: 0.4;
1622        --opacity-30-60: 0.3;
1623        --color-foreground: rgb(0 0 0 / 0.81);
1624        --color-foreground-rgb: 0 0 0;
1625        --color-foreground-heading: rgb(0 0 0 / 1.0);
1626        --color-foreground-heading-rgb: 0 0 0;
1627        --color-primary: rgb(0 0 0 / 0.81);
1628        --color-primary-rgb: 0 0 0;
1629        --color-primary-hover: rgb(0 0 0 / 1.0);
1630        --color-primary-hover-rgb: 0 0 0;
1631        --color-border: rgb(0 0 0 / 0.06);
1632        --color-border-rgb: 0 0 0;
1633        --color-shadow: rgb(0 0 0 / 1.0);
1634        --color-shadow-rgb: 0 0 0;
1635        --color-primary-button-text: rgb(255 255 255 / 1.0);
1636        --color-primary-button-background: rgb(0 0 0 / 1.0);
1637        --color-primary-button-border: rgb(0 0 0 / 1.0);
1638        --color-primary-button-hover-text: rgb(255 255 255 / 1.0);
1639        --color-primary-button-hover-background: rgb(51 51 51 / 1.0);
1640        --color-primary-button-hover-border: rgb(0 0 0 / 1.0);
1641        --color-secondary-button-text: rgb(0 0 0 / 1.0);
1642        --color-secondary-button-background: rgb(0 0 0 / 0.0);
1643        --color-secondary-button-border: rgb(0 0 0 / 1.0);
1644        --color-secondary-button-hover-text: rgb(51 51 51 / 1.0);
1645        --color-secondary-button-hover-background: rgb(250 250 250 / 1.0);
1646        --color-secondary-button-hover-border: rgb(51 51 51 / 1.0);
1647        --color-input-background: rgb(255 255 255 / 0.78);
1648        --color-input-text: rgb(51 51 51 / 1.0);
1649        --color-input-text-rgb: 51 51 51;
1650        --color-input-border: rgb(223 223 223 / 1.0);
1651        --color-input-hover-background: rgb(0 0 0 / 0.01);
1652        --color-variant-background: rgb(255 255 255 / 1.0);
1653        --color-variant-border: rgb(0 0 0 / 0.13);
1654        --color-variant-text: rgb(0 0 0 / 1.0);
1655        --color-variant-text-rgb: 0 0 0;
1656        --color-variant-hover-background: rgb(245 245 245 / 1.0);
1657        --color-variant-hover-text: rgb(0 0 0 / 1.0);
1658        --color-variant-hover-border: rgb(230 230 230 / 1.0);
1659        --color-selected-variant-background: rgb(0 0 0 / 1.0);
1660        --color-selected-variant-border: rgb(0 0 0 / 1.0);
1661        --color-selected-variant-text: rgb(255 255 255 / 1.0);
1662        --color-selected-variant-hover-background: rgb(26 26 26 / 1.0);
1663       
1663 --color-selected-variant-hover-text: rgb(255 255 255 / 1.0);
1664        --color-selected-variant-hover-border: rgb(26 26 26 / 1.0);
1665
1666        --input-disabled-background-color: rgb(var(--color-foreground-rgb) / var(--opacity-10));
1667        --input-disabled-border-color: rgb(var(--color-foreground-rgb) / var(--opacity-5-15));
1668        --input-disabled-text-color: rgb(var(--color-foreground-rgb) / var(--opacity-50));
1669        --color-foreground-muted: rgb(var(--color-foreground-rgb) / var(--opacity-60));
1670        --font-h1--color: var(--color-foreground-heading);
1671        --font-h2--color: var(--color-foreground-heading);
1672        --font-h3--color: var(--color-foreground-heading);
1673        --font-h4--color: var(--color-foreground-heading);
1674        --font-h5--color: var(--color-foreground-heading);
1675        --font-h6--color: var(--color-foreground-heading);
1676
1677        /* Shadows */
1678        
1679          --shadow-drawer: 0px 4px 20px rgb(var(--color-shadow-rgb) / var(--opacity-15));
1680        
1681        
1682          --shadow-blur: 20px;
1683          --shadow-popover: 0px 4px 20px rgb(var(--color-shadow-rgb) / var(--opacity-15));
1684        
1685      }
1686  
1687
1688  body, .color-scheme-1, .color-scheme-2, .color-scheme-3, .color-scheme-4, .color-scheme-5, .color-scheme-6, .color-scheme-58084d4c-a86e-4d0a-855e-a0966e5043f7, .color-scheme-3a22a853-b27c-4989-9b28-b2fe84f28659, .color-scheme-39516907-68b0-49a6-8725-28e850d4665e, .color-scheme-f013a9d4-f3d5-4308-84c0-11895e862b26 {
1689    color: var(--color-foreground);
1690    background-color: var(--color-background);
1691  }
1692</style>
1693
1694
1695    
1695<script>window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.start');</script>
1695<meta id="shopify-digital-wallet" name="shopify-digital-wallet" content="/79351316693/digital_wallets/dialog">
1696<link rel="ucp" href="/.well-known/ucp" version="2026-08-25">
1696<script async="async" src="/checkouts/internal/preloads.js?locale=en-SG"></script>
vendor: 1 bytes, line 1696
1696
1697<script id="apple-pay-shop-capabilities" type="application/json">{"shopId":79351316693,"countryCode":"SG","currencyCode":"SGD","merchantCapabilities":["supports3DS"],"merchantId":"gid:\/\/shopify\/Shop\/79351316693","merchantName":"Fresher Dinners","requiredBillingContactFields":["postalAddress","email","phone"],"requiredShippingContactFields":["postalAddress","email","phone"],"shippingType":"shipping","supportedNetworks":["visa","masterCard","amex"],"total":{"type":"pending","label":"Fresher Dinners","amount":"1.00"},"shopifyPaymentsEnabled":true,"supportsSubscriptions":true}</script>
vendor: 1 bytes, line 1697
1697
1698<script id="shopify-features" type="application/json">{"accessToken":"f88c4f238cfa8749bd53215dcb719ee3","betas":["rich-media-storefront-analytics"],"domain":"fresherdinners.com.sg","predictiveSearch":true,"shopId":79351316693,"locale":"en"}</script>
vendor: 1 bytes, line 1698
1698
1699<script>var Shopify = Shopify || {};
1700Shopify.shop = "nsmy7n-ge.myshopify.com";
1701Shopify.locale = "en";
1702Shopify.currency = {"active":"SGD","rate":"1.0"};
1703Shopify.country = "SG";
1704Shopify.theme = {"name":"Copy of Horizon 03-04-2026","id":157894213845,"schema_name":"Horizon","schema_version":"3.3.1","theme_store_id":2481,"role":"main"};
1705Shopify.theme.handle = "null";
1706Shopify.theme.style = {"id":null,"handle":null};
1707Shopify.cdnHost = "fresherdinners.com.sg/cdn";
1708Shopify.routes = Shopify.routes || {};
1709Shopify.routes.root = "/";
1710Shopify.shopJsCdnBaseUrl = "https://cdn.shopify.com/shopifycloud/shop-js";
1711Shopify.SignInWithShop = Shopify.SignInWithShop || {};
1712Shopify.SignInWithShop.User = Shopify.SignInWithShop.User || {};
1713Shopify.SignInWithShop.User.recognized = false;</script>
vendor: 1 bytes, line 1713
1713
1714<script type="module">!function(o){(o.Shopify=o.Shopify||{}).modules=!0}(window);</script>
vendor: 1 bytes, line 1714
1714
1715<script>!function(o){function n(){var o=[];function n(){o.push(Array.prototype.slice.apply(arguments))}return n.q=o,n}var t=o.Shopify=o.Shopify||{};t.loadFeatures=n(),t.autoloadFeatures=n()}(window);</script>
vendor: 1 bytes, line 1715
1715
1716<script>
1717  window.Shopify = window.Shopify || {};
1718  window.Shopify.SignInWithShop = window.Shopify.SignInWithShop || {};
1719  window.Shopify.SignInWithShop.assetMetrics = { sampleRate: 0.25 };
1720  window.Shopify.SignInWithShop.eligible = false;
1721</script>
vendor: 1 bytes, line 1721
1721
1722<script id="shop-js-analytics" type="application/json">{"pageType":"index"}</script>
vendor: 1 bytes, line 1722
1722
1723<script defer="defer" async type="module" src="https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/loader.init-shop-cart-sync.en.esm.js"></script>
vendor: 1 bytes, line 1723
1723
1724<script type="module">
1725  await import("https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/loader.init-shop-cart-sync.en.esm.js");
1726
1727  window.Shopify.SignInWithShop?.initShopCartSync?.({"fedCMEnabled":true,"windoidEnabled":true});
1728
1729</script>
vendor: 1 bytes, line 1729
1729
1730<script>(function() {
1731  var isLoaded = false;
1732  function asyncLoad() {
1733    if (isLoaded) return;
1734    isLoaded = true;
1735    var urls = ["https:\/\/cdn-app.sealsubscriptions.com\/shopify\/public\/js\/sealsubscriptions.js?shop=nsmy7n-ge.myshopify.com"];
1736    for (var i = 0; i < urls.length; i++) {
1737      var s = document.createElement('script');
1738      s.type = 'text/javascript';
1739      s.async = true;
1740      s.src = urls[i];
1741      var x = document.getElementsByTagName('script')[0];
1742      x.parentNode.insertBefore(s, x);
1743    }
1744  };
1745  if(window.attachEvent) {
1746    window.attachEvent('onload', asyncLoad);
1747  } else {
1748    window.addEventListener('load', asyncLoad, false);
1749  }
1750})();</script>
vendor: 1 bytes, line 1750
1750
1751<script id="__st">var __st={"a":79351316693,"offset":28800,"reqid":"03149f5c-905e-4dab-8895-a283f95b88d4-1791373064","pageurl":"fresherdinners.com.sg\/","u":"1790a71864ea","p":"home"};</script>
vendor: 1 bytes, line 1751
1751
1752<script>window.ShopifyPaypalV4VisibilityTracking = true;</script>
vendor: 1 bytes, line 1752
1752
1753<script id="captcha-bootstrap">!function(){'use strict';const t='contact',e='account',n='new_comment',o=[[t,t],['blogs',n],['comments',n],[t,'customer']],c=[[e,'customer_login'],[e,'guest_login'],[e,'recover_customer_password'],[e,'create_customer']],r=t=>t.map((([t,e])=>`form[action*='/${t}']:not([data-nocaptcha='true']) input[name='form_type'][value='${e}']`)).join(','),a=t=>()=>t?[...document.querySelectorAll(t)].map((t=>t.form)):[];function s(){const t=[...o],e=r(t);return a(e)}const i='password',u='form_key',d=['recaptcha-v3-token','g-recaptcha-response','h-captcha-response',i],f=()=>{try{return window.sessionStorage}catch{return}},m='__shopify_v',_=t=>t.elements[u];function p(t,e,n=!1){try{const o=window.sessionStorage,c=JSON.parse(o.getItem(e)),{data:r}=function(t){const{data:e,action:n}=t;return t[m]||n?{data:e,action:n}:{data:t,action:n}}(c);for(const[e,n]of Object.entries(r))t.elements[e]&&(t.elements[e].value=n);n&&o.removeItem(e)}catch(o){console.error('form repopulation failed',{error:o})}}const l='form_type',E='cptcha';function T(t){t.dataset[E]=!0}const w=window,h=w.document,L='Shopify',v='ce_forms',y='captcha';let A=!1;((t,e)=>{const n=(g='f06e6c50-85a8-45c8-87d0-21a2b65856fe',I='https://cdn.shopify.com/shopifycloud/storefront-forms-hcaptcha/ce_storefront_forms_captcha_hcaptcha.v1.5.3.iife.js',D={infoText:'Protected by hCaptcha',privacyText:'Privacy',termsText:'Terms'},(t,e,n)=>{const o=w[L][v],c=o.bindForm;if(c)return c(t,g,e,D).then(n);var r;o.q.push([[t,g,e,D],n]),r=I,A||(h.body.append(Object.assign(h.createElement('script'),{id:'captcha-provider',async:!0,src:r})),A=!0)});var g,I,D;w[L]=w[L]||{},w[L][v]=w[L][v]||{},w[L][v].q=[],w[L][y]=w[L][y]||{},w[L][y].protect=function(t,e){n(t,void 0,e),T(t)},Object.freeze(w[L][y]),function(t,e,n,w,h,L){const[v,y,A,g]=function(t,e,n){const i=e?o:[],u=t?c:[],d=[...i,...u],f=r(d),m=r(i),_=r(d.filter((([t,e])=>n.includes(e))));return[a(f),a(m),a(_),s()]}(w,h,L),I=t=>{const e=t.target;return e instanceof HTMLFormElement?e:e&&e.form},D=t=>v().includes(t);t.addEventListener('submit',(t=>{const e=I(t);if(!e)return;const n=D(e)&&!e.dataset.hcaptchaBound&&!e.dataset.recaptchaBound,o=_(e),c=g().includes(e)&&(!o||!o.value);(n||c)&&t.preventDefault(),c&&!n&&(function(t){try{if(!f())return;!function(t){const e=f();if(!e)return;const n=_(t);if(!n)return;const o=n.value;o&&e.removeItem(o)}(t);const e=Array.from(Array(32),(()=>Math.random().toString(36)[2])).join('');!function(t,e){_(t)||t.append(Object.assign(document.createElement('input'),{type:'hidden',name:u})),t.elements[u].value=e}(t,e),function(t,e){const n=f();if(!n)return;const o=[...t.querySelectorAll(`input[type='${i}']`)].map((({name:t})=>t)),c=[...d,...o],r={};for(const[a,s]of new FormData(t).entries())c.includes(a)||(r[a]=s);n.setItem(e,JSON.stringify({[m]:1,action:t.action,data:r}))}(t,e)}catch(e){console.error('failed to persist form',e)}}(e),e.submit())}));const S=(t,e)=>{t&&!t.dataset[E]&&(n(t,e.some((e=>e===t))),T(t))};for(const o of['focusin','change'])t.addEventListener(o,(t=>{const e=I(t);D(e)&&S(e,y())}));const B=e.get('form_key'),M=e.get(l),P=B&&M;t.addEventListener('DOMContentLoaded',(()=>{const t=y();if(P)for(const e of t)e.elements[l].value===M&&p(e,B);[...new Set([...A(),...v().filter((t=>'true'===t.dataset.shopifyCaptcha))])].forEach((e=>S(e,t)))}))}(h,new URLSearchParams(w.location.search),n,t,e,['guest_login'])})(!0,!0)}();</script>
vendor: 1 bytes, line 1753
1753
1754<script integrity="sha256-JjoPp5ZfB1sSAs5SQaol1x1GgvveM+BgmRzyDexInEQ=" data-source-attribution="shopify.loadfeatures" defer="defer" src="//fresherdinners.com.sg/cdn/shopifycloud/storefront/assets/storefront/load_feature-1bd60354.js" crossorigin="anonymous"></script>
vendor: 1 bytes, line 1754
1754
1755<script>(function () {var userAgent = navigator.userAgent;var platform = navigator.platform;var maxTouchPoints = navigator.maxTouchPoints || 0;var isIOS = /iPad|iPhone|iPod/.test(platform) || (platform === 'MacIntel' && maxTouchPoints > 1);var isMacSafari = platform.indexOf('Mac') === 0 && /Safari/.test(userAgent) && !/Chrome|Chromium|CriOS|FxiOS|Edg|OPR|Android/.test(userAgent);var isAppleSafari = isIOS || isMacSafari;if (isAppleSafari) {fetch('/sf_private_access_tokens' + location.search).catch(function () {});}function browserMajorVersion(pattern) {var match = userAgent.match(pattern);return match ? parseInt(match[1], 10) : null;}function shouldLoadAutosizesPolyfill() {if (!window.PerformanceObserver?.supportedEntryTypes?.includes('paint')) {return false;}var chromeVersion = browserMajorVersion(/Chrome\/(\d+)/);if (chromeVersion !== null) {return chromeVersion < 126;}var firefoxVersion = browserMajorVersion(/Firefox\/(\d+)/);if (firefoxVersion !== null) {return firefoxVersion < 150;}var safariVersion = isAppleSafari ? browserMajorVersion(/Version\/(\d+).*Safari\//) : null;if (safariVersion !== null) {return safariVersion < 27;}return true;}if (shouldLoadAutosizesPolyfill()) {var autosizesScript = document.createElement('script');autosizesScript.async = true;autosizesScript.crossOrigin = 'anonymous';autosizesScript.src = "//fresherdinners.com.sg/cdn/shopifycloud/storefront/assets/storefront/autosizes-84416378.js";(document.head || document.documentElement).appendChild(autosizesScript);}window.ShopifyAnalytics = window.ShopifyAnalytics || {};window.ShopifyAnalytics.performance = window.ShopifyAnalytics.performance || {};(function () {var LONG_FRAME_THRESHOLD = 50;var longAnimationFrames = [];var activeRafId = null;function collectLongFrames() {var previousTime = null;function rafMonitor(now) {if (activeRafId === null) {return;}var delta = now - previousTime;if (delta > LONG_FRAME_THRESHOLD) {longAnimationFrames.push({startTime: previousTime,endTime: now,});}previousTime = now;activeRafId = requestAnimationFrame(rafMonitor);}previousTime = performance.now();activeRafId = requestAnimationFrame(rafMonitor);}if (!window.PerformanceObserver?.supportedEntryTypes?.includes('long-animation-frame')) {collectLongFrames();var timeoutId = setTimeout(function () {cancelAnimationFrame(activeRafId);}, 10000);window.ShopifyAnalytics.performance.getLongAnimationFrames = function (stopCollection) {if (stopCollection === undefined) {stopCollection = false;}if (stopCollection) {clearTimeout(timeoutId);cancelAnimationFrame(activeRafId);}return longAnimationFrames;};}})();})();</script>
1755<script id="shopify-origin-trials" async="async" integrity="sha256-qJbe/jEZBHtr5W/BlA2cKAz3vkXu6vJQyLjgvgCC86g=" src="//cdn.shopify.com/shopifycloud/storefront/assets/storefront/origin_trials-318ab40a.js" crossorigin="anonymous" onload="window.__shopifyOriginTrialsDone = true" onerror="window.__shopifyOriginTrialsDone = true"></script>
vendor: 1 bytes, line 1755
1755
1756<script>
1757  window.Shopify = window.Shopify || {};
1758  window.Shopify.MCP = window.Shopify.MCP || {};
1759  window.Shopify.MCP.enabled = true;
1760  window.Shopify.MCP.shop = "nsmy7n-ge.myshopify.com";
1761  window.Shopify.MCP.mcpEndpoint = "https:\/\/fresherdinners.com.sg\/api\/mcp";
1762  window.Shopify.MCP.tools = [{"name":"search_shop_policies_and_faqs","description":"Used to get facts about the stores policies, products, or services.\nSome examples of questions you can ask are:\n  - What is your return policy?\n  - What is your shipping policy?\n  - What is your phone number?\n  - What are your hours of operation?\"\nSet policy_types to also get the store's written policies (full text and URL).\n","inputSchema":{"$schema":"https:\/\/json-schema.org\/draft\/2020-12\/schema","type":"object","properties":{"query":{"type":"string","description":"A natural language query."},"context":{"type":"string","description":"Additional information about the request such as user demographics, mood, location, or other relevant details that could help in tailoring the response appropriately."},"policy_types":{"type":"array","items":{"type":"string","enum":["refund","shipping","privacy","terms_of_service","terms_of_sale","subscription","legal_notice","contact"]},"description":"Policy kinds to fetch, chosen from the user's question — e.g. [\"refund\"] for returns\/exchanges\/damaged items, [\"contact\"] for phone\/hours\/address. Include every kind the question touches. Omit it to get only FAQ answers."}},"required":["query"]}}];
1763</script>
vendor: 1 bytes, line 1763
1763
1764<script>(()=>{var d="shopify:webmcp_adapter_loaded",n=Symbol.for("shopify.webmcp_adapter_loading");function s(c,a,{win:r=window,doc:o=document}={}){function p(){try{return r.localStorage.getItem(d)==="true"}catch{return!1}}function l(){try{r.localStorage.setItem(d,"true")}catch{}}function u(){return typeof(o.modelContext||r.navigator?.modelContext)?.registerTool=="function"}function f(){if(r[n]||!u())return;let t=o.head||o.getElementsByTagName("head")[0];if(!t)return;let e=o.createElement("script");e.type="module",e.crossOrigin="anonymous",a&&(e.integrity=a),e.src=c,e.addEventListener("load",l,{once:!0}),e.addEventListener("error",()=>{r[n]=!1},{once:!0}),t.appendChild(e),r[n]=!0}function _(t){let e=o.getElementById("shopify-origin-trials");if(!e||r.__shopifyOriginTrialsDone){t();return}e.addEventListener("load",t,{once:!0}),e.addEventListener("error",t,{once:!0})}function i(){_(()=>r.setTimeout(f,0))}function m(){o.addEventListener("DOMContentLoaded",i,{once:!0})}p()?i():m()}s("\/\/fresherdinners.com.sg\/cdn\/shopifycloud\/storefront\/assets\/storefront\/webmcp-c6b62ece.js","sha256-ke4DDuBjdvea3vxLWxHc9E9nq8zihuG4IfYEGbb77ys=");})();
1765</script>
vendor: 1 bytes, line 1765
1765
1766<script data-source-attribution="shopify.dynamic_checkout.dynamic.init">var Shopify=Shopify||{};Shopify.PaymentButton=Shopify.PaymentButton||{isStorefrontPortableWallets:!0,init:function(){window.Shopify.PaymentButton.init=function(){};var t=document.createElement("script");t.src="https://fresherdinners.com.sg/cdn/shopifycloud/portable-wallets/latest/portable-wallets.en.js",t.type="module",document.head.appendChild(t)}};
1767</script>
vendor: 1 bytes, line 1767
1767
1768<script data-source-attribution="shopify.dynamic_checkout.buyer_consent">
1769  function portableWalletsHideBuyerConsent(e){var t=document.getElementById("shopify-buyer-consent"),n=document.getElementById("shopify-subscription-policy-button");t&&n&&(t.classList.add("hidden"),t.setAttribute("aria-hidden","true"),n.removeEventListener("click",e))}function portableWalletsShowBuyerConsent(e){var t=document.getElementById("shopify-buyer-consent"),n=document.getElementById("shopify-subscription-policy-button");t&&n&&(t.classList.remove("hidden"),t.removeAttribute("aria-hidden"),n.addEventListener("click",e))}window.Shopify?.PaymentButton&&(window.Shopify.PaymentButton.hideBuyerConsent=portableWalletsHideBuyerConsent,window.Shopify.PaymentButton.showBuyerConsent=portableWalletsShowBuyerConsent);
1770</script>
vendor: 1 bytes, line 1770
1770
1771<script data-source-attribution="shopify.dynamic_checkout.cart.bootstrap">document.addEventListener("DOMContentLoaded",(function(){function t(){return document.querySelector("shopify-accelerated-checkout-cart, shopify-accelerated-checkout")}if(t())Shopify.PaymentButton.init();else{new MutationObserver((function(e,n){t()&&(Shopify.PaymentButton.init(),n.disconnect())})).observe(document.body,{childList:!0,subtree:!0})}}));
1772</script>
1772
1773<link id="shopify-accelerated-checkout-styles" rel="stylesheet" media="screen" href="https://fresherdinners.com.sg/cdn/shopifycloud/portable-wallets/latest/accelerated-checkout-backwards-compat.css" crossorigin="anonymous">
1774<style id="shopify-accelerated-checkout-cart">
1775        #shopify-buyer-consent {
1776  margin-top: 1em;
1777  display: inline-block;
1778  width: 100%;
1779}
1780
1781#shopify-buyer-consent.hidden {
1782  display: none;
1783}
1784
1785#shopify-subscription-policy-button {
1786  background: none;
1787  border: none;
1788  padding: 0;
1789  text-decoration: underline;
1790  font-size: inherit;
1791  cursor: pointer;
1792}
1793
1794#shopify-subscription-policy-button::before {
1795  box-shadow: none;
1796}
1797
1798      </style>
1799<link rel="stylesheet" media="screen" href="//fresherdinners.com.sg/cdn/shop/t/2/compiled_assets/styles.css?v=23689101601640687041785990694">
1800<script id="shopify-cfh-end">window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.end');</script>
1800
1801
1802    
1803    <form method="post" action="/account" id="create_customer" accept-charset="UTF-8" data-login-with-shop-sign-up="true"><input type="hidden" name="form_type" value="create_customer" /><input type="hidden" name="utf8" value="✓" /><input type="hidden" name="return_to" value="/pages/profile" />
1804
1805  
1806
1807
1808</form>
1809    
1810  <!-- BEGIN app block: shopify://apps/delivery-pickup/blocks/odd-block/80605365-b4f4-42ba-9b84-3d39984a49dc -->  
1811  
1812  
1813  
1814  �
1815  
1815<script>
1816    function _0x2197(_0x2946b1,_0x6c7c4c){var _0x15d7c5=_0x15d7();return _0x2197=function(_0x219790,_0xc28fad){_0x219790=_0x219790-0x11e;var _0x5e1640=_0x15d7c5[_0x219790];return _0x5e1640;},_0x2197(_0x2946b1,_0x6c7c4c);}var _0x50d14b=_0x2197;(function(_0x227c2c,_0x423dfc){var _0x1ec0c9=_0x2197,_0x4f0baa=_0x227c2c();while(!![]){try{var _0x411c1e=parseInt(_0x1ec0c9(0x128))/0x1*(-parseInt(_0x1ec0c9(0x123))/0x2)+-parseInt(_0x1ec0c9(0x12b))/0x3+-parseInt(_0x1ec0c9(0x131))/0x4*(-parseInt(_0x1ec0c9(0x132))/0x5)+parseInt(_0x1ec0c9(0x133))/0x6*(parseInt(_0x1ec0c9(0x130))/0x7)+parseInt(_0x1ec0c9(0x126))/0x8*(-parseInt(_0x1ec0c9(0x12c))/0x9)+parseInt(_0x1ec0c9(0x121))/0xa+-parseInt(_0x1ec0c9(0x11e))/0xb*(-parseInt(_0x1ec0c9(0x135))/0xc);if(_0x411c1e===_0x423dfc)break;else _0x4f0baa['push'](_0x4f0baa['shift']());}catch(_0x405d49){_0x4f0baa['push'](_0x4f0baa['shift']());}}}(_0x15d7,0x9a9d2),window[_0x50d14b(0x12e)]=_0x50d14b(0x127));if(location['href'][_0x50d14b(0x12a)](_0x50d14b(0x136))){var order_id=atob(location[_0x50d14b(0x120)][_0x50d14b(0x129)]('?data=')[0x1])[_0x50d14b(0x129)]('&')[0x0][_0x50d14b(0x129)]('order_id=')[0x1],ty_link=atob(location[_0x50d14b(0x120)][_0x50d14b(0x129)](_0x50d14b(0x12f))[0x1])[_0x50d14b(0x129)]('&')[0x1][_0x50d14b(0x129)](_0x50d14b(0x137))[0x1],exist_id=localStorage[_0x50d14b(0x134)](_0x50d14b(0x122)),orderArray={};exist_id?(!JSON[_0x50d14b(0x124)](exist_id)[order_id]&&(orderArray[order_id]='0'),orderArray={...JSON['parse'](exist_id),...orderArray}):orderArray[order_id]='0',window[_0x50d14b(0x138)][_0x50d14b(0x125)](_0x50d14b(0x122),JSON[_0x50d14b(0x12d)](orderArray)),ty_link!=''&&(window[_0x50d14b(0x11f)]=ty_link);}function _0x15d7(){var _0x478bff=['997208RoDepl','{"0":1}','418478tReEui','split','includes','2243148YpOopi','81UqgdRC','stringify','prevent_checkout','?data=','35vemzzr','120NhMRkl','202715cchOqN','55716JRSdAd','getItem','20389548XjGGUI','data','order_link=','localStorage','11HvWIeX','location','href','7964580uJGPEk','order_id','6wJgwxN','parse','setItem'];_0x15d7=function(){return _0x478bff;};return _0x15d7();}
1817  </script>
1817<!-- When to load our JS in all pages -->
1818            
1818<script type="text/javascript" async src="https://odd.identixweb.com/order-delivery-date/front_scripts/static/js/main.js"></script>
1818�<!-- When to load our JS only in cart page but we need to load in customer order detail and account page for reschedule order details --><!-- To load our preview using "run wizard" button that time use this JS -->
1819 
1819<script type="text/javascript" async src="https://odd.identixweb.com/order-delivery-date/assets/js/odd_preview.min.js"></script>
1819
1820
1821  <!-- END app block --><!-- BEGIN app block: shopify://apps/apploy/blocks/apploy/b1c49136-afa0-4125-ac0d-1f6b7aca1d88 --><style>
1822  :root {
1823    --apploy-primary-background-color: #fff;
1824    --apploy-primary-color: #000;
1825    --apploy-primary-color-foreground: #fff;
1826    --apploy-secondary-color: #666;
1827    --apploy-secondary-color-foreground: #fff;
1828  }
1829</style>
1830<style>
1831  <!-- BEGIN app snippet: apploy-css.css -->.apploy-exclusive { display: none; }
1832.apploy-ma-sticky-header {
1833  position: fixed;
1834  top: 0;
1835  left: 0;
1836  right: 0;
1837  z-index: 1000;
1838}
1839.apploy-app-install-banner {
1840  display: none;
1841  position: fixed;
1842  left: 0;
1843  right: 0;
1844  bottom: 100px;
1845  width: 90vw;
1846  margin: 0 auto;
1847  background-color: var(--apploy-primary-background-color, #fff);
1848  display: flex;
1849  align-items: center;
1850  gap: 16px;
1851  padding: 12px;
1852  box-shadow: 0 -2px 10px rgba(0, 0, 0, 0.1);
1853  z-index: 999999;
1854  border-radius: 10px;
1855  animation: fadeIn 0.5s ease-in-out;
1856}
1857
1858.ios-safari .apploy-app-install-banner {
1859  background-color: rgba(255, 255, 255, 0.95);
1860  backdrop-filter: blur(10px);
1861  -webkit-backdrop-filter: blur(10px);
1862  border: 1px solid rgba(0, 0, 0, 0.1);
1863}
1864
1865.ios-safari .apploy-app-install-banner-subtitle {
1866  font-size: 11px;
1867  line-height: 1.3;
1868  color: #555;
1869}
1870
1871.ios-safari .apploy-app-install-button {
1872  background-color: var(--apploy-primary-color, #007AFF);
1873  border-radius: 20px;
1874  padding: 8px 16px;
1875  font-weight: 600;
1876  font-size: 14px;
1877}
1878
1879.apploy-app-install-banner-close {
1880  position: absolute;
1881  top: -5px;
1882  right: -5px;
1883  width: 1.5rem;
1884  height: 1.5rem;
1885  border: none;
1886  background: #b4b3b3;
1887  color: #000;
1888  cursor: pointer;
1889  display: flex;
1890  align-items: center;
1891  justify-content: center;
1892  padding: 10px;
1893  border-radius: 50%;
1894  transition: background-color 0.2s;
1895}
1896
1897.apploy-app-install-banner .apploy-app-install-banner-content {
1898  display: flex;
1899  align-items: center;
1900  gap: 16px;
1901  width: 100%;
1902}
1903
1904.apploy-app-install-banner .apploy-app-install-banner-logo {
1905  width: 40px;
1906  height: 40px;
1907  border-radius: 8px;
1908  object-fit: cover;
1909  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
1910  flex-shrink: 0;
1911}
1912
1913.apploy-app-install-banner .apploy-app-install-banner-text {
1914  flex: 1;
1915  min-width: 0;
1916}
1917
1918.apploy-app-install-banner .apploy-app-install-banner-title {
1919  margin: 0;
1920  font-size: 14px;
1921  font-weight: 600;
1922  color: #000;
1923}
1924
1925.apploy-app-install-banner .apploy-app-install-banner-subtitle {
1926  margin: 4px 0 0;
1927  font-size: 12px;
1928  color: #666;
1929}
1930
1931.apploy-app-install-banner .apploy-app-install-button {
1932  background-color: var(--apploy-primary-color, #5d73d0);
1933  color: var(--apploy-primary-color-foreground, #fff);
1934  border: none;
1935  border-radius: 6px;
1936  padding: 8px 16px;
1937  font-size: 14px;
1938  font-weight: 500;
1939  cursor: pointer;
1940  white-space: nowrap;
1941  transition: opacity 0.2s;
1942  flex-shrink: 0;
1943}
1944
1945.apploy-app-install-banner .apploy-app-install-button:hover {
1946  opacity: 0.9;
1947}
1948
1949.apploy-app-install-banner-qr {
1950  display: none;
1951  position: fixed;
1952  left: 20px;
1953  bottom: 80px;
1954  padding: 14px;
1955  background: #fff;
1956  border-radius: 8px;
1957  box-shadow: 0 2px 6px rgba(0, 0, 0, 0.1);
1958  z-index: 999999;
1959  transform: translateY(10px);
1960  transition:
1961    opacity 0.3s ease,
1962    transform 0.3s ease;
1963}
1964.apploy-app-install-banner-qr p {
1965  margin: 0;
1966  font-size: 12px;
1967  color: #666;
1968  text-align: center;
1969}
1970
1971.apploy-main-nav {
1972  display: none;
1973  position: fixed;
1974  bottom: 0;
1975  left: 0;
1976  right: 0;
1977  z-index: 1000;
1978  background: #fff;
1979  gap: 16px;
1980  flex-direction: row;
1981  justify-content: space-evenly;
1982  padding: 16px 0;
1983  border-top: 1px solid #e0e0e0;
1984  -webkit-user-select: none;
1985  -moz-user-select: none;
1986  -ms-user-select: none;
1987  user-select: none;
1988}
1989.apploy-main-nav-item {
1990  text-decoration: none;
1991  display: flex;
1992  flex-direction: column;
1993  align-items: center;
1994  color: #666;
1995  transition: color 0.3s ease;
1996  position: relative;
1997}
1998.apploy-main-nav-item img {
1999  width: 24px;
2000  height: 24px;
2001  transition: filter 0.3s ease;
2002}
2003.apploy-main-nav-item span {
2004  font-size: 12px;
2005}
2006.apploy-main-nav-item.active {
2007  color: var(--apploy-primary-color, #000);
2008}
2009.apploy-main-nav-item.active img {
2010  filter: brightness(0) saturate(100%) invert(27%) sepia(51%) saturate(1920%)
2011    hue-rotate(212deg) brightness(92%) contrast(89%);
2012}
2013
2014.apploy-cart-badge {
2015  position: absolute;
2016  top: -8px;
2017  right: -8px;
2018  min-width: 18px;
2019  height: 18px;
2020  padding: 0 4px;
2021  background-color: var(--apploy-secondary-color, #ff4b4b);
2022  color: var(--apploy-secondary-color-foreground, #fff);
2023  border-radius: 9px;
2024  font-size: 11px;
2025  font-weight: 600;
2026  display: flex;
2027  align-items: center;
2028  justify-content: center;
2029  line-height: 1;
2030}
2031.apploy-cart-badge:empty {
2032  display: none;
2033}
2034
2035@media only screen and (max-width: 768px) {
2036}
2037@media only screen and (min-width: 768px) {
2038  .apploy-app-install-banner {
2039    width: 200px;
2040    cursor: pointer;
2041    
2042      left: 20px;
2043      bottom: 20px;
2044      right: auto;
2045      transform-origin: left;
2046    
2047    transform: scale(0.8);
2048    width: auto;
2049    transition: transform 0.3s ease;
2050  }
2051  .apploy-app-install-banner:hover {
2052    transform: scale(0.85);
2053  }
2054
2055  .apploy-app-install-banner-close {
2056    display: none;
2057  }
2058  .apploy-app-install-banner-subtitle {
2059    display: none;
2060  }
2061  .apploy-app-install-banner-qr {
2062    
2063      left: 20px;
2064      bottom: calc(60px + 20px);
2065      right: auto;
2066    
2067    display: none;
2068  }
2069  .qr-subtitle {
2070    max-width: 200px;
2071    display: block;
2072  }
2073
2074}
2075
2076/* Bottom Sheet Variant */
2077.apploy-app-install-banner.bottom-sheet {
2078  position: fixed !important;
2079  bottom: 0 !important;
2080  left: 0 !important;
2081  right: 0 !important;
2082  width: 100% !important;
2083  margin: 0 !important;
2084  border-radius: 12px 12px 0 0;
2085  padding: 20px;
2086  display: flex;
2087  flex-direction: column;
2088  align-items: center;
2089  gap: 16px;
2090  transform: none !important;
2091  box-shadow: 0 -4px 20px rgba(0, 0, 0, 0.15);
2092  z-index: 999999;
2093}
2094
2095.apploy-app-install-banner.bottom-sheet .apploy-app-install-banner-content {
2096  display: flex;
2097  flex-direction: column;
2098  align-items: center;
2099  gap: 16px;
2100  width: 100%;
2101}
2102
2103.apploy-app-install-banner.bottom-sheet .apploy-app-install-banner-logo {
2104  width: 60px;
2105  height: 60px;
2106  border-radius: 12px;
2107  margin-bottom: 8px;
2108}
2109
2110.apploy-app-install-banner.bottom-sheet .apploy-app-install-banner-text {
2111  text-align: center;
2112  display: flex;
2113  flex-direction: column;
2114  align-items: center;
2115  gap: 8px;
2116}
2117
2118.apploy-app-install-banner.bottom-sheet .apploy-app-install-banner-title {
2119  font-size: 18px;
2120  font-weight: 600;
2121}
2122
2123.apploy-app-install-banner.bottom-sheet .apploy-app-install-banner-subtitle {
2124  font-size: 14px;
2125  color: #666;
2126  max-width: 80%;
2127}
2128
2129.apploy-app-install-banner.bottom-sheet .apploy-app-install-button {
2130  width: 100%;
2131  max-width: 300px;
2132  padding: 12px 24px;
2133  font-size: 16px;
2134  margin-top: 8px;
2135}
2136
2137/* Full Screen Variant */
2138.apploy-app-install-banner.full-screen {
2139  position: fixed;
2140  top: 0;
2141  left: 0;
2142  right: 0;
2143  bottom: 0;
2144  width: 100%;
2145  height: 100%;
2146  background: rgba(0, 0, 0, 0.8);
2147  border-radius: 0;
2148  padding: 0;
2149  display: flex;
2150  justify-content: center;
2151  align-items: center;
2152}
2153
2154.apploy-app-install-banner.full-screen .apploy-app-install-banner-content {
2155  background: transparent;
2156  padding: 32px;
2157  width: 90%;
2158  max-width: 400px;
2159  display: flex;
2160  flex-direction: column;
2161  align-items: center;
2162  gap: 24px;
2163}
2164
2165.apploy-app-install-banner.full-screen .apploy-app-install-banner-logo {
2166  width: 100px;
2167  height: 100px;
2168  border-radius: 16px;
2169  margin-bottom: 16px;
2170}
2171
2172.apploy-app-install-banner.full-screen .apploy-app-install-banner-text {
2173  text-align: center;
2174  display: flex;
2175  flex-direction: column;
2176  align-items: center;
2177  gap: 12px;
2178}
2179
2180.apploy-app-install-banner.full-screen .apploy-app-install-banner-title {
2181  font-size: 28px;
2182  font-weight: 600;
2183  color: #fff;
2184}
2185
2186.apploy-app-install-banner.full-screen .apploy-app-install-banner-subtitle {
2187  font-size: 18px;
2188  color: rgba(255, 255, 255, 0.9);
2189  max-width: 90%;
2190}
2191
2192.apploy-app-install-banner.full-screen .apploy-app-install-button {
2193  width: 100%;
2194  max-width: 300px;
2195  padding: 16px 32px;
2196  font-size: 20px;
2197  border-radius: 12px;
2198  background-color: var(--apploy-primary-color, #5d73d0);
2199  color: var(--apploy-primary-color-foreground, #fff);
2200  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);
2201  transition: transform 0.2s, box-shadow 0.2s;
2202  margin-top: 16px;
2203}
2204
2205.apploy-app-install-banner.full-screen .apploy-app-install-button:hover {
2206  transform: translateY(-2px);
2207  box-shadow: 0 6px 16px rgba(0, 0, 0, 0.3);
2208}
2209
2210.apploy-app-install-banner.full-screen .apploy-app-install-banner-close {
2211  position: absolute;
2212  top: 16px;
2213  right: 16px;
2214  width: 40px;
2215  height: 40px;
2216  background: rgba(255, 255, 255, 0.2);
2217  color: #fff;
2218  border-radius: 50%;
2219  display: flex;
2220  align-items: center;
2221  justify-content: center;
2222  cursor: pointer;
2223  transition: background-color 0.2s;
2224}
2225
2226.apploy-app-install-banner.full-screen .apploy-app-install-banner-close
2226:hover {
2227  background: rgba(255, 255, 255, 0.3);
2228}
2229<!-- END app snippet -->
2230</style>
2231
2232<!-- BEGIN app snippet: app-install-banner --><template id="apploy-app-install-banner-template">
2233  <div
2234    class="apploy-app-install-banner"
2235    id="apploy-app-install-banner"
2236  >
2237    <button
2238      class="apploy-app-install-banner-close"
2239      id="apploy-app-install-banner-close"
2240      aria-label="Close banner"
2241    >
2242      ✕
2243    </button>
2244    <div class="apploy-app-install-banner-content">
2245      
2246      <div class="apploy-app-install-banner-text" id="apploy-app-install-banner-text">
2247        <h3 class="apploy-app-install-banner-title" id="apploy-app-install-banner-title">
2248          Get the app
2249        </h3>
2250        <p class="apploy-app-install-banner-subtitle" id="apploy-app-install-banner-subtitle">
2251          Install our app to get personalized alerts, features and benefits.
2252        </p>
2253      </div>
2254      <button class="apploy-app-install-button" id="apploy-app-install-banner-button">
2255        Install App
2256      </button>
2257    </div>
2258  </div>
2259  
2260  
2261  
2262</template>
2263<!-- END app snippet -->
2264
2265  
2265<script src="https://cdn.shopify.com/extensions/01a11578-0c14-7aef-87f5-441165ef51b0/apploy-mobile-app-builder-362/assets/apploy-deferred-attribution.js" defer></script>
2265
2266
2267<script src="https://cdn.shopify.com/extensions/01a11578-0c14-7aef-87f5-441165ef51b0/apploy-mobile-app-builder-362/assets/apploy-bridge.js" defer></script>
vendor: 1 bytes, line 2267
2267
2268<script
2269  src="/apps/apploy/assets/themes/common.min.js"
2270  defer
2271></script>
2271
2272<!-- BEGIN app snippet: app-manager -->
2272<script
2273  type="text/javascript"
2274>
2275  class ApployAppManager {
2276    constructor() {
2277      this.appBridge = 'ReactNativeWebView';
2278      this.userAgent = navigator.userAgent;
2279      this.deferredPrompt = null;
2280      this.hiddenElements = [];
2281      this.banner = null;
2282      this.bannerButton = null;
2283      this.bannerQR = null;
2284      this.bannerText = null;
2285      this.bannerCloseButton = null;
2286      this.mainNav = null;
2287      this.themeConfig = null;
2288      this.init();
2289    }
2290
2291    async init() {
2292      if (this.isMobileApp()) {
2293        await this.loadThemeConfig();
2294        this.initializeMobileApp();
2295        this.initializeAdditionalCode();
2296      } else {
2297        if (this.isIOSSafari()) {
2298          document.body.classList.add('ios-safari');
2299        }
2300        this.initializeInstallExperience();
2301      }
2302    }
2303
2304    async loadThemeConfig() {
2305      this.themeConfig = JSON.parse(sessionStorage.getItem('apploy-theme-config'));
2306      if (!this.themeConfig) {
2307        const response = await fetch(`/apps/${window.apployApiSubpath}/assets/themes/theme-config.min.json`);
2308        const themeConfig = await response.json();
2309        const themeKey = window.Shopify.theme.schema_name.toLowerCase().replaceAll(' ', '-');
2310        if (themeConfig['themes'][themeKey]) {
2311          this.themeConfig = themeConfig['themes'][themeKey];
2312        } else {
2313          this.themeConfig = themeConfig['themes']['default-theme'];
2314        }
2315        if(this.themeConfig){
2316          sessionStorage.setItem('apploy-theme-config', JSON.stringify(this.themeConfig));
2317        }
2318      }
2319    }
2320
2321    initializeAdditionalCode() {
2322      if (window.additionalCss) {
2323        try {
2324          const style = document.createElement('style');
2325          style.textContent = window.additionalCss;
2326          document.head.appendChild(style);
2327        } catch (error) {
2328          console.error('Error applying additional CSS:', error);
2329        }
2330      }
2331
2332
2333      if (window.additionalJavascript) {
2334        try {
2335          const scriptFunction = new Function(window.additionalJavascript);
2336          scriptFunction();
2337        } catch (error) {
2338          console.error('Error executing additional JavaScript:', error);
2339        }
2340      }
2341    }
2342
2343    sendDataToBridge(data) {
2344      window.apployBridge.sendData(data);
2345    }
2346
2347    sendDataToMobileAppBridge(data) {
2348      window.apployBridge.sendData(data);
2349    }
2350
2351    initializeMobileApp() {
2352      this.setSalesAttribution();
2353      
2354      
2355      if (window.cssSelectorsToHide) {
2356        window.cssSelectorsToHide.split(',').forEach((selector) => {
2357          this.hiddenElements.push(selector);
2358        });
2359      }
2360      if(this.themeConfig){
2361        this.hiddenElements = [...this.hiddenElements, ...this.themeConfig.elements_to_hide];
2362      }
2363    }
2364
2365
2366    setSalesChannelAttributeInCart() {
2367      let attributes = {
2368        "_SalesChannel": 'Apploy'
2369      };
2370      
2371      window.apployFetch(window.Shopify.routes.root + 'cart/update.js', {
2372          method: 'POST',
2373          headers: {
2374              'Content-Type': 'application/json'
2375          },
2376          body: JSON.stringify({
2377              attributes: attributes
2378          })
2379      })
2380      .catch(error => console.error('Error adding sales channel attribute to cart:', error));
2381    }
2382
2383    setupMainNav() {
2384      const mainNavTemplate = document.getElementById('apploy-main-nav-template');
2385      this.mainNav = document.getElementById('apploy-main-nav');
2386      if (this.mainNav) {
2387        this.mainNav.style.display = 'flex';
2388        document.body.style.paddingBottom = '70px';
2389      }
2390    }
2391
2392    initializeInstallExperience() {
2393      if (!this.isMobileApp()) {
2394        this.setupInstallBanner();
2395      }
2396    }
2397
2398    hasInstallURL() {
2399      return window.apployAppInstallURL && window.apployAppInstallURL !== '';
2400    }
2401
2402    getInstallBannerQrWidth() {
2403      if (!this.bannerQR) {
2404        return 200;
2405      }
2406
2407      const img = this.bannerQR.querySelector('img');
2408      const containerWidth = this.bannerQR.clientWidth;
2409      if (containerWidth > 0) {
2410        return Math.max(50, containerWidth - 28);
2411      }
2412
2413      return Number(img?.getAttribute('width')) || 200;
2414    }
2415
2416    buildSqrcQrImageUrl(presentPageUrl) {
2417      const apiKey = window.apploySuperQrCodeApiKey;
2418      const installUrl = window.apployAppInstallURL;
2419      const apiBase = window.apploySqrcApiDomain || 'https://api.sqrc.toolstr.com';
2420
2421      if (!apiKey || !installUrl) {
2422        return null;
2423      }
2424
2425      const separator = installUrl.includes('?') ? '&' : '?';
2426      const data = `${installUrl}${separator}ol=${encodeURIComponent(presentPageUrl)}`;
2427      const params = new URLSearchParams();
2428      params.set('data', data);
2429      params.set('type', 'png');
2430      params.set('key', apiKey);
2431      params.set('width', '200');
2432
2433      return `${apiBase}/qrcode?${params.toString()}`;
2434    }
2435
2436    async updateInstallBannerQrCode() {
2437      const img = this.bannerQR?.querySelector('img[data-sqrc-enabled="true"]');
2438      if (!img) {
2439        return;
2440      }
2441
2442      const requestUrl = this.buildSqrcQrImageUrl(window.location.href);
2443      if (!requestUrl) {
2444        return;
2445      }
2446
2447      if (
2448        img.dataset.sqrcRequestUrl === requestUrl &&
2449        img.complete &&
2450        img.naturalWidth > 0
2451      ) {
2452        return;
2453      }
2454
2455      img.dataset.sqrcRequestUrl = requestUrl;
2456      img.src = requestUrl;
2457      this.warmSqrcResponseCache(requestUrl);
2458    }
2459
2460    async warmSqrcResponseCache(requestUrl) {
2461      if (!('caches' in window)) {
2462        return;
2463      }
2464
2465      try {
2466        const cache = await caches.open('apploy-sqrc-v1');
2467        if (await cache.match(requestUrl)) {
2468          return;
2469        }
2470
2471        const response = await fetch(requestUrl, {
2472          mode: 'no-cors',
2473          credentials: 'omit',
2474        });
2475        await cache.put(requestUrl, response.clone());
2476      } catch {
2477        // Cache warm is best-effort; display uses img.src directly
2478      }
2479    }
2480
2481    setupInstallBanner() {
2482      if(document.getElementById('apploy-app-install-banner')){
2483        return;
2484      }
2485      const installBannerTemplate = document.getElementById('apploy-app-install-banner-template');
2486      if (installBannerTemplate) {
2487        const clone = installBannerTemplate.content.cloneNode(true);
2488        document.body.appendChild(clone);
2489      }
2490
2491      this.banner = document.getElementById('apploy-app-install-banner');
2492      if (this.isMobile()) {
2493        this.banner.classList.add(window.apployMobileBannerType);
2494      }
2495      this.bannerButton = document.getElementById('apploy-app-install-banner-button');
2496      this.bannerQR = document.getElementById('apploy-app-install-banner-qr');
2497      this.bannerText = document.getElementById('apploy-app-install-banner-text');
2498      this.bannerCloseButton = document.getElementById('apploy-app-install-banner-close');
2499
2500      this.banner.style.display = 'none';
2501      this.bannerButton.style.display = 'none';
2502      if (this.bannerQR) {
2503        this.bannerQR.style.display = 'none';
2504        this.updateInstallBannerQrCode();
2505      }
2506
2507
2508      if (this.bannerButton) {
2509        const clickHandler = () => {
2510          if (this.hasInstallURL()) {
2511            const deferredLinkId = sessionStorage.getItem('apploy-deferred-link-id');
2512            if (deferredLinkId) {
2513              const installUrl = new URL(window.apployAppInstallURL, window.location.origin);
2514              installUrl.searchParams.set('apploy_deferred', deferredLinkId);
2515              installUrl.searchParams.set('ol', window.location.href);
2516              window.location.href = installUrl.toString();
2517              return;
2518            }
2519            const installUrl = new URL(window.apployAppInstallURL, window.location.origin);
2520            installUrl.searchParams.set('ol', window.location.href);
2521            window.location.href = installUrl.toString();
2522          }
2523        };
2524        this.bannerButton.removeEventListener('click', clickHandler);
2525        this.bannerButton.addEventListener('click', clickHandler);
2526      }
2527
2528      if (this.bannerCloseButton) {
2529        const closeHandler = () => {
2530          this.hideInstallBanner();
2531          sessionStorage.setItem('apploy-banner-closed', 'true');
2532        };
2533        this.bannerCloseButton.removeEventListener('click', closeHandler);
2534        this.bannerCloseButton.addEventListener('click', closeHandler);
2535      }
2536      if (window.apployAppInstallBannerEnabled) {
2537        setTimeout(() => {
2538          this.showInstallBanner();
2539        }, 3000);
2540      }
2541    }
2542
2543    hideInstallBanner() {
2544      if (this.banner) {
2545        this.banner.style.display = 'none';
2546      }
2547    }
2548
2549    showInstallBanner(options = {}) {
2550      const forceAdLanding = options.forceAdLanding === true;
2551      const hasAdAttribution =
2552        forceAdLanding ||
2553        !!window.apployAdAttribution ||
2554        !!sessionStorage.getItem('apploy-ad-attribution');
2555      const isMobile = this.isMobile();
2556      const isDesktop = !isMobile;
2557      const hasInstallURL = this.hasInstallURL();
2558      const hasDeferredPrompt = !!this.deferredPrompt;
2559      const isIOSSafari = this.isIOSSafari();
2560      const isAndroid = this.isAndroid();
2561
2562      const showButton =
2563        (isMobile && hasInstallURL) || // Mobile browser with store URL
2564        (isAndroid && hasDeferredPrompt); // Android PWA
2565
2566      this.bannerButton.style.display = showButton ? 'block' : 'none';
2567
2568      const shouldShowBanner =
2569        !this.isBannerClosed() &&
2570        (hasAdAttribution ||
2571          (isMobile && hasInstallURL) || // Mobile app install
2572          (isAndroid && hasDeferredPrompt) || // Android PWA
2573          (isDesktop && hasInstallURL)); // Desktop QR code
2574
2575      if (shouldShowBanner) {
2576        this.banner.style.display = 'flex';
2577
2578        if (hasAdAttribution && this.bannerText) {
2579          const title = document.getElementById('apploy-app-install-banner-title');
2580          const subtitle = document.getElementById('apploy-app-install-banner-subtitle');
2581          if (title) {
2582            title.textContent = 'Continue in the app';
2583          }
2584          if (subtitle) {
2585            subtitle.textContent =
2586              'Install our app to pick up where you left off from this ad.';
2587          }
2588        }
2589
2590        if (isMobile) {
2591          this.banner.classList.add(window.apployMobileBannerType);
2592          this.banner.style.bottom = `${window.apployMobileBannerBottomOffset}px`;
2593        } else {
2594          this.banner.classList.add(window.apployDesktopBannerPosition);
2595          this.banner.style.bottom = `${window.apployDesktopBannerBottomOffset}px`;
2596        }
2597
2598        if (isDesktop && this.bannerQR) {
2599          this.updateInstallBannerQrCode();
2600          this.banner.addEventListener('mouseenter', () => {
2601            this.bannerQR.style.display = 'block';
2602            this.bannerQR.style.animation = 'fadeIn 0.5s ease-in-out';
2603            this.bannerQR.style.transform = 'translateY(0)';
2604          });
2605          this.banner.addEventListener('mouseleave', () => {
2606            this.bannerQR.style.display = 'none';
2607          });
2608        }
2609      } else {
2610        this.hideInstallBanner();
2611      }
2612    }
2613
2614    isBannerClosed() {
2615      return sessionStorage.getItem('apploy-banner-closed') === 'true';
2616    }
2617
2618
2619    setSalesAttribution() {
2620      this.setSalesChannelAttributeInCart();
2621
2622      document.querySelectorAll('shopify-accelerated-checkout').forEach((acceleratedCheckout) => {
2623        if (!acceleratedCheckout.querySelector('input[name="properties[_SalesChannel]"]')) {
2624          const input = document.createElement('input');
2625          input.type = 'hidden';
2626          input.name = 'properties[_SalesChannel]';
2627          input.value = 'Apploy';
2628          acceleratedCheckout.appendChild(input);
2629        }
2630        
2631      });
2632
2633      const channelId = sessionStorage.getItem('apploy_ma_channel_id');
2634      console.log("channel id:", channelId);
2635      if (!channelId) return;
2636      document.querySelectorAll('form[action="/cart"], form[action="/cart/add"], form[action="/cart/update"], form[action="/checkout"]').forEach((form) => {
2637        if (!form.querySelector('input[name="access_token"]')) {
2638          const input = document.createElement('input');
2639          input.type = 'hidden';
2640          input.name = 'access_token';
2641          input.value = channelId;
2642          form.appendChild(input);
2643        } else {
2644          const input = form.querySelector('input[name="access_token"]');
2645          if (input) {
2646            input.value = channelId;
2647          }
2648        }
2649      });
2650    }
2651
2652    disableSelect() {
2653      document.body.style.userSelect = 'none';
2654      document.body.style.webkitUserSelect = 'none';
2655      document.body.style.msUserSelect = 'none';
2656    }
2657
2658    disableBounce() {
2659      document.body.style.overscrollBehavior = 'none';
2660    }
2661
2662    hideElement(element) {
2663      if (element) element.style.display = 'none';
2664    }
2665
2666
2667
2668    isMobile() {
2669      return /Android|iPhone|iPad|iPod/i.test(navigator.userAgent) || this.isIOS();
2670    }
2671
2672    isAndroid() {
2673      return /Android/i.test(navigator.userAgent);
2674    }
2675
2676    isIOS() {
2677      return (
2678        /iPad|iPhone|iPod/.test(navigator.userAgent) ||
2679        (navigator.platform === "MacIntel" && navigator.maxTouchPoints > 1)
2680      );
2681    }
2682
2683    isSafari() {
2684      const ua = navigator.userAgent;
2685      return (
2686        /^((?!chrome|android).)*safari/i.test(ua) &&
2687        !ua.includes("CriOS") &&
2688        !ua.includes("FxiOS")
2689      );
2690    }
2691
2692    isIOSSafari() {
2693      return this.isIOS() && this.isSafari();
2694    }
2695
2696    isMobileApp() {
2697      
2698      console.log("isMobileApp false");
2699      return false;
2700    }
2701
2702
2703    async handleNotificationPermission() {
2704      try {
2705        let permission = Notification.permission;
2706        if (permission === 'default') {
2707          permission = await Notification.requestPermission();
2708        }
2709
2710        let currentToken = null;
2711        let channelType = null;
2712        if (permission === 'granted') {
2713            currentToken = await window.apployFirebaseGetToken(window.apployFirebaseMessaging, {
2714              vapidKey: window.apployFirebaseVapidKey,
2715              serviceWorkerRegistration: window.apploySwRegistration,
2716            });
2717
2718          if (currentToken) {
2719            if (window.apployFCMToken !== currentToken) {
2720              window.apployEventsManager.capturePushToken(currentToken);
2721            }
2722          } else {
2723            console.log('No registration token available. Failed to generate one.');
2724          }
2725        } else {
2726          console.log('Notification permission denied');
2727          window.apployEventsManager.updateEndpoint({
2728            optOut: 'ALL',
2729            userId: window.apployCustomer?.id,
2730            category: 'PushNotification',
2731            channelType: channelType,
2732          });
2733        }
2734      } catch (err) {
2735        console.error('An error occurred while setting up push notifications:', err);
2736      }
2737    }
2738
2739  }
2740</script>
2740
2741<!-- END app snippet -->
2742<!-- BEGIN app snippet: event-manager -->
2742<script
2743  type="text/javascript"
2744>
2745  class ApployEventsManager {
2746    constructor() {
2747      this.event_key = 'apploy_user_event';
2748      this.storageKeys = {
2749        cartProducts: 'apploy_cart_products',
2750        purchased: 'apploy_purchased',
2751        lastCompletedCheckoutTimestamp: 'apploy_last_completed_checkout_timestamp',
2752        searchedQuery: 'apploy_searched_query',
2753        lastViewedProduct: 'apploy_last_viewed_product',
2754        lastViewedCollection: 'apploy_last_viewed_collection',
2755      };
2756      const parentObj = this;
2757      if (window.apployAppManager.isMobileApp()) {
2758        this.refreshCartCount();
2759        this.sendCustomerData(window.apployCustomer);
2760        // Listen to localStorage changes
2761        window.addEventListener('storage', function (event) {
2762          if (event.key === parentObj.event_key) {
2763            try {
2764              const parsedValue = JSON.parse(event.newValue);
2765              parentObj.processEvent(parsedValue);
2766            } catch (error) {
2767              // console.error("Failed to parse apploy_ma_event value", error);
2768            }
2769          }
2770        });
2771      }
2772    }
2773
2774    trackSession() {
2775      const sessionKey = 'amplifySessionId';
2776      let sessionId = sessionStorage.getItem(sessionKey);
2777
2778      if (!sessionId) {
2779        sessionId = `${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
2780        sessionStorage.setItem(sessionKey, sessionId);
2781        const secondsTimestamp = Math.floor(new Date().getTime() / 1000) * 1000;
2782        window.Amplify.Analytics.record({
2783          name: '_session.start',
2784          attributes: {
2785            sessionId: sessionId,
2786            timestamp: secondsTimestamp,
2787          },
2788        });
2789      }
2790
2791      return sessionId;
2792    }
2793
2794    // Existing methods
2795    recordEvent(eventData) {
2796      const clonedEventData = {
2797        name: eventData.name,
2798        attributes: {
2799          ...eventData.data.attributes,
2800          apployAppId: window.apployAppId,
2801        },
2802        metrics: eventData.data.metrics,
2803      };
2804      console.log('recordEvent', clonedEventData);
2805      if (window.Amplify && window.Amplify.Analytics) {
2806        window.Amplify.Analytics.record(clonedEventData);
2807      } else {
2808        console.log('recordEvent failed: Amplify not setup');
2809      }
2810    }
2811
2812    updateEndpoint(properties) {
2813      properties = {
2814        ...properties,
2815        attributes: {
2816          Surface: ['PWA'],
2817          Platform: window.apployAppManager.isIOS() ? ['IOS'] : ['ANDROID'],
2818          apployAppId: [window.apployAppId],
2819        },
2820      };
2821      if (window.Amplify && window.Amplify.Analytics) {
2822        window.Amplify.Analytics.updateEndpoint(properties);
2823      } else {
2824        console.log('updateEndpoint failed: Amplify not setup');
2825      }
2826    }
2827
2828    /** Bound on the cart lookup that enriches cart events. */
2829    CART_FETCH_TIMEOUT_MS = 1000;
2830
2831    async processEvent(event, storage_key = null) {
2832      try {
2833        if (!storage_key) {
2834          storage_key = this.event_key;
2835        }
2836        // Parse event if it's a string
2837        const eventData = typeof event === 'string' ? JSON.parse(event) : event;
2838        const { name, data } = eventData.eventData;
2839        if (['AddedToCart', 'RemovedFromCart', 'CompletedCheckout'].includes(eventData.eventData.name)) {
2840          this.refreshCartCount();
2841          window.apployAppManager.setSalesAttribution();
2842        }
2843        if (['AddedToCart', 'RemovedFromCart'].includes(eventData.eventData.name)) {
2844          // The pixel only sees the line that changed, so an abandoned-cart
2845          // notification could say "you left 1 item" to someone with five in
2846          // their cart. /cart.js is the only place the real totals live, and it
2847          // is already being fetched here — this just waits for the answer.
2848          await this.attachCartTotals(data);
2849        }
2850        let lineItems = [];
2851        if (
2852          data?.attributes?.lineItems &&
2853          data?.attributes?.lineItems.length > 0 &&
2854          data?.attributes?.lineItems[0]?.id
2855        ) {
2856          lineItems = JSON.parse(JSON.stringify(data?.attributes?.lineItems));
2857          delete data?.attributes?.lineItems;
2858        }
2859        if (eventData.eventData.name === 'CompletedCheckout') {
2860          try {
2861            if (eventData.eventData.data.attributes.lineItems) {
2862              delete eventData.eventData.data.attributes.lineItems;
2863            }
2864          } catch (error) {
2865            console.error('Error processing event:', error);
2866          }
2867        }
2868
2869        // processEvent will be called from storage event listener for mobile app
2870        if (window.apployAppManager.isMobileApp()) {
2871          console.log('sendDataToBridge.eventData', eventData);
2872          window.apployAppManager.sendDataToBridge(eventData);
2873        }
2874
2875        
2876        console.log('eventData.eventData.name', eventData.eventData.name);
2877        if (eventData.eventData.name === 'CompletedCheckout') {
2878          const that = this;
2879          if (lineItems) {
2880            lineItems.forEach((item) => {
2881              const lineItemEvent = JSON.stringify({
2882                type: 'event',
2883                eventData: {
2884                  name: 'PurchasedLineItem',
2885                  data: {
2886                    attributes: {
2887                      orderId: eventData.eventData.data.attributes.orderId || '',
2888                      productId: item.productId,
2889                      variantId: item.variantId,
2890                      currency: eventData.eventData.data.attributes.currencyCode,
2891                      productTitle: item.productTitle,
2892                      variantTitle: item.variantTitle,
2893                      lineItemId: item.id || Date.now(),
2894                    },
2895                    metrics: {
2896                      amount: item.amount,
2897                      quantity: item.quantity,
2898                      timestamp: eventData.eventData.data.metrics.timestamp,
2899                    },
2900                  },
2901                },
2902              });
2903              console.log('lineItemEvent', lineItemEvent);
2904              this.processEvent(lineItemEvent);
2905              
2906            });
2907          }
2908
2909          // clone and transform CompletedCheckout event data to monetization event data
2910          const monetizationEvent = JSON.stringify({
2911            type: 'event',
2912            eventData: {
2913              name: '_monetization.purchase',
2914              data: {
2915                attributes: {
2916                  _currency: eventData.eventData.data.attributes.currencyCode,
2917                },
2918                metrics: {
2919                  _item_price: eventData.eventData.data.metrics.totalAmount,
2920                  _quantity: eventData.eventData.data.metrics.quantity,
2921                  timestamp: eventData.eventData.data.metrics.timestamp,
2922                },
2923              },
2924            },
2925          });
2926          console.log('monetizationEvent', monetizationEvent);
2927          setTimeout(() => {
2928            that.processEvent(monetizationEvent);
2929          }, 10);
2930          
2931          // clone and transform CompletedCheckout event data to monetization event data
2932          const monetizationEventApptap = JSON.stringify({
2933            type: 'event',
2934            eventData: {
2935              name: 'Purchase',
2936              data: {
2937                attributes: {
2938                  currency: eventData.eventData.data.attributes.currencyCode,
2939                  orderId: eventData.eventData.data.attributes.orderId || '',
2940                },
2941                metrics: {
2942                  amount: eventData.eventData.data.metrics.totalAmount,
2943                  quantity: eventData.eventData.data.metrics.quantity,
2944                  timestamp: eventData.eventData.data.metrics.timestamp,
2945                },
2946              },
2947            },
2948          });
2949          console.log('monetizationEventApptap', monetizationEventApptap);
2950          setTimeout(() => {
2951            that.processEvent(monetizationEventApptap);
2952          }, 20);
2953        }
2954      } catch (error) {
2955        console.error('Error processing event:', error);
2956      }
2957    }
2958
2959    sendCustomerData(customerData) {
2960      window.apployAppManager.sendDataToBridge({
2961        customerData,
2962        type: 'customer',
2963      });
2964    }
2965
2966    sendCartCount(itemCount) {
2967      window.apployAppManager.sendDataToBridge({ itemCount, type: 'cart' });
2968    }
2969
2970    sendCartData(cart) {
2971      const items = (cart.items || []).map((item) => ({
2972        id: item.id,
2973        url: item.url,
2974        quantity: item.quantity,
2975        imageUrl: item.image || (item.featured_image && item.featured_image.url) || null,
2976        productTitle: item.product_title,
2977        variantTitle: item.variant_title || 'Default Title',
2978        price: item.price,
2979      }));
2980      window.apployAppManager.sendDataToBridge({
2981        type: 'cart',
2982        itemCount: cart.item_count,
2983        totalPrice: cart.total_price,
2984        items,
2985      });
2986    }
2987
2988    /**
2989     * Adds the whole cart's item count and value to a cart event.
2990     *
2991     * This sits on the critical path of event delivery, so it is bounded: a
2992     * slow cart costs the cart tokens, never the event. Without the timeout a
2993     * hanging /cart.js would hold the AddedToCart event until the shopper
2994     * navigated away, and that event is what triggers the abandoned-cart
2995     * journey — losing it loses the notification entirely.
2996     */
2997    async attachCartTotals(data) {
2998      if (!data || typeof data !== 'object') {
2999        return;
3000      }
3001      if (!data.attributes || typeof data.attributes !== 'object') {
3002        data.attributes = {};
3003      }
3004
3005      const controller =
3006        typeof AbortController !== 'undefined' ? new AbortController() : null;
3007      const timer = controller
3008        ? setTimeout(() => controller.abort(), this.CART_FETCH_TIMEOUT_MS)
3009        : null;
3010
3011      try {
3012        const response = await window.apployFetch(
3013          '/cart.js',
3014          controller ? { signal: controller.signal } : undefined,
3015        );
3016        if (!response.ok) return;
3017        const cart = await response.json();
3018
3019        if (typeof cart.item_count === 'number') {
3020          data.attributes.cartItemCount = cart.item_count;
3021        }
3022        if (typeof cart.total_price === 'number') {
3023          // Shopify's JS cart API reports money in the currency's minor unit,
3024          // so this is a /100 for the two-decimal currencies we have seen.
3025          // UNVERIFIED for zero-decimal currencies (JPY, KRW) — the currency is
3026          // sent alongside so a correction needs no new data.
3027          data.attributes.cartTotal = cart.total_price / 100;
3028        }
3029        if (typeof cart.currency === 'string') {
3030          data.attributes.cartCurrency = cart.currency;
3031        }
3032      } catch (error) {
3033        // Includes the abort. Non-fatal by design: the tokens fall back and the
3034        // event still ships.
3035        console.error('Error attaching cart totals:', error);
3036      } finally {
3037        if (timer) clearTimeout(timer);
3038      }
3039    }
3040
3041    refreshCartCount() {
3042      try {
3043        window
3044          .apployFetch('/cart.js')
3045          .then((response) => (response.ok ? response.json() : Promise.reject(response.statusText)))
3046          .then((data) => {
3047            if (data.item_count >= 0) {
3048              if (window.apployAppManager.themeConfig) {
3049                window.apployHandleCartUpdate(data.item_count);
3050              }
3051
3052              if (document.getElementById('apploy-cart-badge')) {
3053                document.getElementById('apploy-cart-badge').textContent = data.item_count ? data.item_count : '';
3054              } else {
3055                this.sendCartData(data);
3056              }
3057            }
3058          })
3059          .catch((error) => console.error('Error refreshing cart count:', error));
3060      } catch (error) {
3061        console.error('Error refreshing cart count:', error);
3062      }
3063    }
3064  }
3065</script>
3065
3066<!-- END app snippet -->
3067<script>
3068  window.apployAppId = `ba037fbd-130c-4dea-bece-adfae6a77520`;
3069  window.apployShopDomain = window.Shopify.shop;
3070  window.apployBackendUrl = `https://apploy.toolstr.com`;
3071  window.apployIsMobileApp = false;
3072  window.apployFetch = window.fetch;
3073  window.apployAppInstallURL = "";
3074  window.apploySuperQrCodeApiKey = "";
3075  window.apploySqrcApiDomain = 'https://api.sqrc.toolstr.com';
3076  window.apployAppInstallBannerEnabled = false;
3077  window.apployMobileBannerType = "floating";
3078  window.apployDesktopBannerPosition = "bottom-left";
3079  window.apployMobileBannerBottomOffset = 100;
3080  window.apployDesktopBannerBottomOffset = 20;
3081  window.cssSelectorsToHide = "footer";
3082  window.additionalJavascript = "";
3083  window.additionalCss = "";
3084  window.apployFCMToken = localStorage.getItem('apploy_fcm_token') || null;
3085  window.apployCustomer = {"id":null};
3086  window.apployApiSubpath = `apploy`;
3087  
3088
3089  document.addEventListener('DOMContentLoaded', () => {
3090    if (typeof ApployAppManager !== 'undefined') {
3091      window.apployAppManager = new ApployAppManager();
3092    } else {
3093      console.error('ApployAppManager class is not loaded');
3094    }
3095    if (typeof ApployEventsManager !== 'undefined') {
3096      window.apployEventsManager = new ApployEventsManager();
3097    } else {
3098      console.error('ApployEventsManager class is not loaded');
3099    }
3100  });
3101</script>
3101
3102
3103
3104
3105
3106
3107<!-- END app block --><!-- BEGIN app block: shopify://apps/seal-subscriptions/blocks/subscription-script-append/13b25004-a140-4ab7-b5fe-29918f759699 -->
3107<script defer="defer">
3108	/**	SealSubs loader,version number: 2.0 */
3109	(function(){
3110		var loadScript=function(a,b){var c=document.createElement("script");c.setAttribute("defer", "defer");c.type="text/javascript",c.readyState?c.onreadystatechange=function(){("loaded"==c.readyState||"complete"==c.readyState)&&(c.onreadystatechange=null,b())}:c.onload=function(){b()},c.src=a,document.getElementsByTagName("head")[0].appendChild(c)};
3111		// Set variable to prevent the other loader from requesting the same resources
3112		window.seal_subs_app_block_loader = true;
3113		appendScriptUrl('nsmy7n-ge.myshopify.com');
3114
3115		// get script url and append timestamp of last change
3116		function appendScriptUrl(shop) {
3117			var timeStamp = Math.floor(Date.now() / (1000*1*1));
3118			var timestampUrl = 'https://app.sealsubscriptions.com/shopify/public/status/shop/'+shop+'.js?'+timeStamp;
3119			loadScript(timestampUrl, function() {
3120				// append app script
3121				if (typeof sealsubscriptions_settings_updated == 'undefined') {
3122					sealsubscriptions_settings_updated = 'default-by-script';
3123				}
3124				
3125				var locale = '';
3126				if (typeof window !== 'undefined' && 
3127					typeof window.Shopify !== 'undefined' && 
3128					typeof window.Shopify.locale !== 'undefined'
3129				) {
3130					locale = window.Shopify.locale;
3131				}
3132
3133				var scriptUrl = "https://cdn-app.sealsubscriptions.com/shopify/public/js/sealsubscriptions-main.js?shop="+shop+"&"+sealsubscriptions_settings_updated+`&locale=${locale}`;
3134				loadScript(scriptUrl, function(){});
3135			});
3136		}
3137	})();
3138
3139	var SealSubsScriptAppended = true;
3140	
3141</script>
3141
3142
3143<!-- END app block --><!-- BEGIN app block: shopify://apps/microsoft-clarity/blocks/clarity_js/31c3d126-8116-4b4a-8ba1-baeda7c4aeea -->
3144<script type="text/javascript">
3145  (function (c, l, a, r, i, t, y) {
3146    c[a] = c[a] || function () { (c[a].q = c[a].q || []).push(arguments); };
3147    t = l.createElement(r); t.async = 1; t.src = "https://www.clarity.ms/tag/" + i + "?ref=shopify";
3148    y = l.getElementsByTagName(r)[0]; y.parentNode.insertBefore(t, y);
3149
3150    c.Shopify.loadFeatures([{ name: "consent-tracking-api", version: "0.1" }], error => {
3151      if (error) {
3152        console.error("Error loading Shopify features:", error);
3153        return;
3154      }
3155
3156      c[a]('consentv2', {
3157        ad_Storage: c.Shopify.customerPrivacy.marketingAllowed() ? "granted" : "denied",
3158        analytics_Storage: c.Shopify.customerPrivacy.analyticsProcessingAllowed() ? "granted" : "denied",
3159        source: 101,
3160      });
3161    });
3162
3163    l.addEventListener("visitorConsentCollected", function (e) {
3164      c[a]('consentv2', {
3165        ad_Storage: e.detail.marketingAllowed ? "granted" : "denied",
3166        analytics_Storage: e.detail.analyticsAllowed ? "granted" : "denied",
3167        source: 101,
3168      });
3169    });
3170  })(window, document, "clarity", "script", "xnsp1vmz70");
3171</script>
3171
3172
3173
3174
3175<!-- END app block --><!-- BEGIN app block: shopify://apps/parkour-facebook-pixel/blocks/threasury_pixel/f23b2ffe-4c53-446e-ad3a-7976ffbee5c2 -->
3176
3177<script>
3178  (function () {
3179    const params = new URLSearchParams(window.location.search);
3180    const hasBuilderMode = params.get('eventBuilderMode') === 'true';
3181    const encodedSelector = params.get('selector');
3182
3183    if (hasBuilderMode) {
3184      sessionStorage.setItem('eventBuilderMode', '1');
3185    }
3186
3187    const fromSession = sessionStorage.getItem('eventBuilderMode');
3188
3189    // ✅ Store the decoded selector globally
3190    if (encodedSelector) {
3191      try {
3192        const decoded = decodeURIComponent(encodedSelector);
3193        sessionStorage.setItem('eventBuilderSelector', decoded);
3194        window.extractedSelector = decoded;
3195        console.log('[Parkour] Builder selector loaded:', decoded);
3196      } catch (err) {
3197        console.warn('[Parkour] Failed to decode selector:', err);
3198      }
3199    }
3200
3201    // ✅ Load eventBuilder.js if in builder mode
3202    if (hasBuilderMode || fromSession) {
3203      const s = document.createElement('script');
3204      s.src = "https://cdn.shopify.com/extensions/01a08191-1bc5-79e2-bd0a-2c7e134c9184/parkour-pixel-111/assets/eventBuilder.js";
3205      s.async = true;
3206      document.head.appendChild(s);
3207    }
3208  })();
3209</script>
3209
3210
3211<script>
3212  document.addEventListener('DOMContentLoaded', function () {
3213    // Metafield emitted via | json (with </ escaped): raw template-literal
3214    // interpolation broke this whole block when the value contained a backtick or
3215    // quote, and a closing script tag inside a value was stored XSS.
3216    // base64_encode instead of | json: Shopify's json filter REFUSES multiline
3217    // metafields (emits {"error":"json not allowed for this object"}), and base64
3218    // output can never contain quotes/backslashes/closing tags — injection-proof
3219    // for every metafield type. base64_encode encodes the UTF-8 BYTES, and atob()
3220    // alone reads them back as Latin-1 — silent mojibake for any non-ASCII event
3221    // name/trigger (JSON.parse still succeeds!). TextDecoder restores real UTF-8;
3222    // for pure-ASCII values it is an exact identity.
3223    const metaData = (() => { try { return new TextDecoder().decode(Uint8Array.from(atob(''), (c) => c.charCodeAt(0))); } catch (e) { return ''; } })();
3224    try {
3225      // custom_events is a json-TYPE metafield, so `| json` can emit a real array —
3226      // handle array, plain-JSON string, and the legacy base64 shape (mirrors
3227      // safeParseMetaData) so the tracker loads on a fresh visitor's FIRST page view.
3228      let customEvents = Array.isArray(metaData) ? metaData : null;
3229      if (!customEvents && metaData) {
3230        try { customEvents = JSON.parse(metaData); }
3231        catch (e1) {
3232          try { customEvents = JSON.parse(decodeURIComponent(atob(metaData))); }
3233          catch (e2) { customEvents = null; }
3234        }
3235      }
3236      const fromLocal = localStorage.getItem('Parkour_custom_events_fb');
3237      // Only load the tracker when there are actually events (an empty [] used to
3238      // still boot the MutationObserver machinery on every page).
3239      const hasCustomEvents = (Array.isArray(customEvents) && customEvents.length > 0) || (fromLocal && fromLocal !== '[]');
3240      if (hasCustomEvents) {
3241        const script = document.createElement('script');
3242        script.src = "https://cdn.shopify.com/extensions/01a08191-1bc5-79e2-bd0a-2c7e134c9184/parkour-pixel-111/assets/customTracker.js";
3243        script.async = true;
3244        document.head.appendChild(script);
3245      }
3246    } catch (e) {
3247      console.warn('[Parkour] customTracker.js load failed', e);
3248    }
3249  });
3250</script>
3250
3251
3252<script>
3253const FacebookTracker = {
3254  config: {
3255    debug: localStorage.getItem('tdb') || null,
3256    storageKeys: {
3257      PREFERRED_ID: 'Parkour_preferred_id_fb',
3258      AD_INFO: 'Parkour_ad_info_fb',
3259      AD_LOGS: 'Parkour_ad_logs_fb',
3260      PIXEL_STATUS: 'Parkour_pixel_app_status_fb',
3261      PIXEL_CONFIG: 'Parkour_pixel_config_fb',
3262      CUSTOMER_HASHED: 'Parkour_Customer_params_fb',
3263      CUSTOM_EVENTS: 'Parkour_custom_events_fb',
3264      WEB_PIXEL: 'Parkour_web_pixel_fb',
3265      EXTERNAL_ID: 'Parkour_external_id',
3266      PAGE_DATA: 'Parkour_page_data',
3267      FBC: 'Parkour_fbc',
3268      FBP: 'Parkour_fbp',
3269    },
3270    fbParams: {
3271      standard: ['fbclid', 'utm_campaign', 'ad_name', 'utm_source', 'adset_name', 'campaign_id', 'adset_id', 'ad_id', 'utm_id']
3272    }
3273  },
3274
3275  utils: {
3276    log(message, data = null) {
3277      if (FacebookTracker.config.debug === null) return;
3278      console.log(`[Facebook Tracker] ${message}`, data);
3279    },
3280    stripDiacritics(str) {
3281      return str.normalize('NFD').replace(/[\u0300-\u036f]/g, '');
3282    },
3283    normalizeField(value, field) {
3284      if (!value) return '';
3285      let v = String(value).trim().toLowerCase();
3286      switch (field) {
3287        case 'email':
3288          return v;
3289        case 'phone':
3290          return v.replace(/[^0-9]/g, '');
3291        case 'city':
3292          return FacebookTracker.utils.stripDiacritics(v).replace(/[^a-z]/g, '');
3293        case 'state':
3294          v = FacebookTracker.utils.stripDiacritics(v);
3295          v = v.replace(/\b(county|province|region|state|district)\b/g, '');
3296          return v.replace(/[^a-z]/g, '');
3297        case 'country':
3298          v = FacebookTracker.utils.stripDiacritics(v).replace(/[^a-z]/g, '');
3299          return v.length === 2 ? v : '';
3300        case 'zipCode':
3301          return v.replace(/[\s\-]/g, '');
3302        default:
3303          return FacebookTracker.utils.stripDiacritics(v).replace(/[^a-z]/g, '');
3304      }
3305    },
3306    async HashString(str) {
3307      if (!str) return '';
3308      const encoder = new TextEncoder();
3309      const data = encoder.encode(str);
3310      const hash = await crypto.subtle.digest('SHA-256', data);
3311      return Array.from(new Uint8Array(hash)).map(b => b.toString(16).padStart(2, '0')).join('');
3312    },
3313    retry: async (fn, attempts = 3) => {
3314      for (let i = 0; i < attempts; i++) {
3315        try { return await fn(); } catch (e) {
3316          if (i === attempts - 1) throw e;
3317          await new Promise(r => setTimeout(r, (i + 1) * 1000));
3318        }
3319      }
3320    },
3321    generateId(prefix = 'CID') {
3322      return `${prefix}-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
3323    },
3324    getCookie(name) {
3325      const match = document.cookie.match(new RegExp(`(^| )${name}=([^;]+)`));
3326      return match ? match[2] : null;
3327    },
3328    setCookie(name, value, days = 90) {
3329      const expires = new Date(Date.now() + days * 864e5).toUTCString();
3330      document.cookie = `${name}=${value}; expires=${expires}; path=/; SameSite=Lax`;
3331    },
3332    getUrlParam(name) {
3333      return new URLSearchParams(window.location.search).get(name);
3334    },
3335    getRawUrlParam(name) {
3336      // Returns the param EXACTLY as it appears in the URL, without percent-decoding.
3337      // URLSearchParams.get() decodes %XX escapes and converts "+" to a space, which
3338      // mangles fbclid values and makes Meta flag a "modified fbclid value in fbc".
3339      const match = window.location.search.match(new RegExp('[?&]' + name + '=([^&#]*)'));
3340      return match ? match[1] : null;
3341    },
3342    getFormattedTimestamp() {
3343      const now = new Date();
3344      return { timestamp: now.toISOString(), formattedDate: now.toLocaleString() };
3345    },
3346    safeParseMetaData(data) {
3347      // Two writer generations exist in the wild: the service app stores RAW JSON
3348      // (json-type metafields), older installs stored btoa(encodeURIComponent(JSON))
3349      // in multiline string metafields. Try both — and NEVER throw: any third/corrupt
3350      // shape must degrade to null, because a throw here aborted the rest of init()
3351      // (fbc/fbp capture, cart attribution) for the whole shop.
3352      try {
3353        return JSON.parse(data);
3354      } catch (e) {
3355        try {
3356          return JSON.parse(decodeURIComponent(atob(data)));
3357        } catch (e2) {
3358          FacebookTracker.utils.log('Unparseable metafield shape — skipping', e2);
3359          return null;
3360        }
3361      }
3362    }
3363  },
3364
3365  storage: {
3366    set(key, value) {
3367      localStorage.setItem(key, typeof value === 'string' ? value : JSON.stringify(value));
3368    },
3369    get(key, type = 'json') {
3370      const val = localStorage.getItem(key);
3371      if (!val) return null;
3372      return type === 'string' ? val : JSON.parse(val);
3373    },
3374    remove(key) {
3375      localStorage.removeItem(key);
3376    },
3377    appendToArray(key, item) {
3378      const arr = FacebookTracker.storage.get(key) || [];
3379      FacebookTracker.storage.set(key, [...arr, item]);
3380    }
3381  },
3382
3383  tracking: {
3384    async initializeExternalId() {
3385      let id = FacebookTracker.storage.get(FacebookTracker.config.storageKeys.EXTERNAL_ID, 'string');
3386      if (!id) {
3387        id = FacebookTracker.utils.generateId();
3388        FacebookTracker.storage.set(FacebookTracker.config.storageKeys.EXTERNAL_ID, id);
3389      }
3390      return id;
3391    },
3392
3393    isFbcExpired(fbc) {
3394      if (!fbc) return true;
3395      const parts = fbc.split('.');
3396      if (parts.length < 4) return true;
3397      const timestamp = parseInt(parts[2], 10);
3398      if (isNaN(timestamp)) return true;
3399      const sevenDaysMs = 7 * 24 * 60 * 60 * 1000;
3400      return (Date.now() - timestamp) > sevenDaysMs;
3401    },
3402
3403    handleFbc() {
3404      // Read the fbclid EXACTLY as it appears in the URL (no decoding — that is what
3405      // produced the "modified fbclid value in fbc" warning) and the current _fbc cookie.
3406      let fbclid = FacebookTracker.utils.getRawUrlParam('fbclid');
3407      // Recovery for %XX-RE-ENCODED fbclids (email gateways / redirectors): decode
3408      // exactly once, and only when the result is a clean base64url click id — this
3409      // restores the original value and cannot reintroduce the +→space corruption
3410      // (decodeURIComponent leaves '+' untouched).
3411      if (fbclid && fbclid.indexOf('%') !== -1) {
3412        try {
3413          const decoded = decodeURIComponent(fbclid);
3414          if (/^[A-Za-z0-9_-]+$/.test(decoded)) fbclid = decoded;
3415        } catch (e) { /* malformed escape — keep raw */ }
3416      }
3417      const existing = FacebookTracker.utils.getCookie('_fbc');
3418
3419      if (fbclid && fbclid != 'fbclid') {
3420        // A fbclid in the URL is a fresh click. If a _fbc cookie already exists for THIS
3421        // same fbclid (e.g. set by Meta's own pixel), keep it as-is — it carries the
3422        // authoritative timestamp/subdomain index. Only (re)build for a NEW click, which
3423        // also refreshes the timestamp and prevents sending an expired fbclid later.
3424        // Compare the click-id SEGMENT, not the string tail: Meta's fbevents.js writes a
3425        // fifth "appendix" segment (fb.1.<ts>.<fbclid>.AQYCAQIB), so endsWith() saw a
3426        // "different" click and overwrote Meta's cookie on every ad landing.
3427        if (existing && existing.split('.')[3] === fbclid) {
3428          FacebookTracker.storage.set(FacebookTracker.config.storageKeys.FBC, existing);
3429          return existing;
3430        }
3431        const fbc = `fb.1.${Date.now()}.${fbclid}`;
3432        FacebookTracker.utils.setCookie('_fbc', fbc);
3433        FacebookTracker.storage.set(FacebookTracker.config.storageKeys.FBC, fbc);
3434        return fbc;
3435      }
3436      // No fresh fbclid: reuse a stored/cookie fbc only if it is not expired; otherwise
3437      // clear it from both stores so we never send an expired fbclid (its localStorage
3438      // copy has no natural expiry).
3439      const stored = FacebookTracker.storage.get(FacebookTracker.config.storageKeys.FBC, 'string');
3440      const cookie = FacebookTracker.utils.getCookie('_fbc');
3441      const fbc = stored || cookie;
3442      if (fbc && !FacebookTracker.tracking.isFbcExpired(fbc)) {
3443        FacebookTracker.storage.set(FacebookTracker.config.storageKeys.FBC, fbc);
3444        return fbc;
3445      }
3446      // Clear expired fbc
3447      FacebookTracker.storage.remove(FacebookTracker.config.storageKeys.FBC);
3448      FacebookTracker.utils.setCookie('_fbc', '', -1);
3449      return null;
3450    },
3451
3452    handleFbp() {
3453      let fbp = FacebookTracker.utils.getCookie('_fbp');
3454      if (!fbp) {
3455        fbp = `fb.1.${Date.now()}.${Math.floor(Math.random() * 1e9)}`;
3456        FacebookTracker.utils.setCookie('_fbp', fbp);
3457      }
3458      FacebookTracker.storage.set(FacebookTracker.config.storageKeys.FBP, fbp);
3459      return fbp;
3460    },
3461
3462    collectAdParameters() {
3463      const adData = FacebookTracker.storage.get(FacebookTracker.config.storageKeys.AD_INFO) || {};
3464      let hasNew = false;
3465      adData.facebook = adData.facebook || {};
3466
3467      FacebookTracker.config.fbParams.standard.forEach(param => {
3468        const value = FacebookTracker.utils.getUrlParam(param);
3469        if (value && adData.facebook[param] !== value) {
3470          adData.facebook[param] = value;
3471          hasNew = true;
3472        }
3473      });
3474
3475      adData.referrer = document.referrer;
3476      if (hasNew) FacebookTracker.storage.set(FacebookTracker.config.storageKeys.AD_INFO, adData);
3477      return adData;
3478    },
3479
3480    collectPageData() {
3481      return {
3482        product_name: null,
3483        selected_variant: null,
3484        product_id: null,
3485        variant_id: null,
3486        collection_ids: [],
3487        tags: null,
3488        page_type: "index",
3489        currency: "SGD",
3490        price: null
3491      }
3492    },
3493
3494    logAdData(adParams) {
3495      if (!adParams?.facebook || Object.keys(adParams.facebook).length === 0) return;
3496      const entry = {
3497        ...adParams,
3498        url: window.location.href,
3499        referrer: document.referrer,
3500        ...FacebookTracker.utils.getFormattedTimestamp()
3501      };
3502      FacebookTracker.storage.appendToArray(FacebookTracker.config.storageKeys.AD_LOGS, entry);
3503      FacebookTracker.utils.log('Ad data logged', entry);
3504    },
3505
3506    async hashCustomer() {
3507      try {
3508        const customerData = {
3509          email: null,
3510          first_name: null,
3511          last_name: null,
3512          phone: null,
3513          default_address: null
3514        };
3515
3516        // Geo context: only fetched when Shopify's own customer data is missing
3517        // fields, only when marketing consent is not denied, and cached for 24h.
3518        // Previously BOTH endpoints were hit on EVERY page view for EVERY visitor —
3519        // ipinfo's unauthenticated tier rate-limits, and shipping visitor IPs to a
3520        // third party regardless of consent state is a compliance exposure.
3521        let browsingGeo = {}, ipinfoGeo = {};
3522        const addrPeek = customerData.default_address;
3523        const needsGeo = !(addrPeek?.province_code || addrPeek?.province) || !addrPeek?.city || !addrPeek?.country_code || !addrPeek?.zip;
3524        const consentAllows = (() => {
3525          const cp = window.Shopify && window.Shopify.customerPrivacy;
3526          if (cp && typeof cp.marketingAllowed === 'function') {
3527            try { return cp.marketingAllowed() !== false; } catch (e) { return true; }
3528          }
3529          return true;
3530        })();
3531        if (needsGeo && consentAllows) {
3532          const cachedGeo = FacebookTracker.storage.get('Parkour_geo_fb');
3533          if (cachedGeo && cachedGeo.exp > Date.now()) {
3534            browsingGeo = cachedGeo.browsingGeo || {};
3535            ipinfoGeo = cachedGeo.ipinfoGeo || {};
3536          } else {
3537            try {
3538              const [browsingResp, ipinfoResp] = await Promise.all([
3539                fetch('/browsing_context_suggestions.json'),
3540                fetch('https://ipinfo.io/json')
3541              ]);
3542              browsingGeo = await browsingResp.json();
3543              ipinfoGeo = await ipinfoResp.json();
3544              FacebookTracker.storage.set('Parkour_geo_fb', { browsingGeo, ipinfoGeo, exp: Date.now() + 864e5 });
3545            } catch (geoErr) {
3546              FacebookTracker.utils.log('Geo fetch failed, using Shopify data only', geoErr);
3547            }
3548          }
3549        }
3550        const countryCode = browsingGeo?.detected_values?.country?.handle || ipinfoGeo.country || '';
3551
3552        const addr = customerData.default_address;
3553        const raw = {
3554          firstName: customerData.first_name || addr?.first_name || '',
3555          lastName: customerData.last_name || addr?.last_name || '',
3556          email: customerData.email || '',
3557          phone: customerData.phone || addr?.phone || '',
3558          state: addr?.province_code || addr?.province || ipinfoGeo.region || '',
3559          city: addr?.city || ipinfoGeo.city || '',
3560          country: addr?.country_code || countryCode,
3561          zipCode: addr?.zip || ipinfoGeo.postal || ''
3562        };
3563
3564        const formatted = {};
3565        for (const key in raw) {
3566          const normalized = FacebookTracker.utils.normalizeField(raw[key], key);
3567          if (normalized) formatted[key] = normalized;
3568        }
3569
3570        const hashed = {};
3571        for (const key in formatted) {
3572          hashed[key] = await FacebookTracker.utils.HashString(formatted[key]);
3573        }
3574        
3575        const existing = FacebookTracker.storage.get(FacebookTracker.config.storageKeys.CUSTOMER_HASHED);
3576        const newHashed = { ...existing, ...hashed };
3577        FacebookTracker.storage.set(FacebookTracker.config.storageKeys.CUSTOMER_HASHED, newHashed);
3578      } catch (err) {
3579        FacebookTracker.utils.log('Customer hash error', err, 'error');
3580      }
3581    },
3582
3583    captureFirstTouch() {
3584      const PREFIX = '__parkour_';
3585      const urlParams = new URLSearchParams(window.location.search);
3586
3587      const setOnce = (key, value) => {
3588        const existing = document.cookie.includes(`${key}=`);
3589        if (!existing) {
3590          localStorage.setItem(key, value);
3591          const expires = new Date(Date.now() + 90 * 864e5).toUTCString();
3592          document.cookie = `${key}=${encodeURIComponent(value)}; expires=${expires}; path=/; SameSite=Lax`;
3593        }
3594      };
3595
3596      const clickIds = ['fbclid', 'ttclid', 'gclid', 'ScCid', 'scCid', 'srsltid'];
3597      const utms = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content','ad_id','campaign_id','adset_id' ];
3598
3599      [...clickIds, ...utms].forEach(param => {
3600        const val = urlParams.get(param);
3601        if (val) setOnce(`${PREFIX}${param}`, val);
3602      });
3603
3604      setOnce(`${PREFIX}landing`, window.location.href);
3605      setOnce(`${PREFIX}referrer`, document.referrer || 'direct');
3606    }
3607  },
3608
3609  cart: {
3610    async updateAttributes(attributes) {
3611      // POST only OUR keys: /cart/update.js merges the provided attributes and leaves
3612      // every other attribute untouched. The old read-modify-write (GET /cart.js +
3613      // full-snapshot POST) doubled the request count on every page view and raced
3614      // the customer's own updates and the sibling TikTok/Snapchat trackers — a stale
3615      // snapshot could re-apply an OLD fbc over a freshly captured one.
3616      return FacebookTracker.utils.retry(async () => {
3617        return fetch('/cart/update.js', {
3618          method: 'POST',
3619          headers: { 'Content-Type': 'application/json' },
3620          body: JSON.stringify({ attributes })
3621        }).then(res => res.json());
3622      });
3623    }
3624  },
3625
3626  async init() {
3627    try {
3628      // Metafields emitted via | json (with </ escaped): raw template-literal
3629      // interpolation meant a single quote/backtick in any metafield killed init()
3630      // for the whole shop (no fbc/fbp capture, no cart attribution) and a closing
3631      // script tag in a value was stored XSS. normalizeMetafield keeps downstream string
3632      // handling identical whether the metafield renders as a string or an object.
3633      const normalizeMetafield = (v) => (v == null ? '' : (typeof v === 'string' ? v : JSON.stringify(v)));
3634      // b64: Shopify's json filter refuses multiline metafields (renders
3635      // {"error":"json not allowed for this object"} — this broke pixel_config),
3636      // while base64 output is injection-proof for EVERY metafield type: its
3637      // alphabet cannot contain quotes, backslashes, or closing script tags.
3638      // TextDecoder is required: base64_encode emits UTF-8 BYTES and bare atob()
3639      // reads them as Latin-1 — silently mojibaking non-ASCII metafield content.
3640      // Identity for ASCII, so the legacy btoa(encodeURIComponent(...)) shape that
3641      // safeParseMetaData handles is unaffected.
3642      const b64 = (s) => { try { return new TextDecoder().decode(Uint8Array.from(atob(s), (c) => c.charCodeAt(0))); } catch (e) { return ''; } };
3643      const pixelConfig = normalizeMetafield(b64('SlRWQ0pUVkU='));
3644      const appStatus = normalizeMetafield(b64('ZEhKMVpRPT0='));
3645      const preferredId = normalizeMetafield(b64(''));
3646      const customEvents = normalizeMetafield(b64(''));
3647      const webPixelEnabled = normalizeMetafield(b64(''));
3648      const supportExternalCheckout = normalizeMetafield(b64(''));
3649
3650      // null-guarded: an unparseable metafield must NOT clobber the last-known-good
3651      // value already in localStorage (the pixel keeps running on the previous config).
3652      if (pixelConfig) {
3653        const configDecoded = FacebookTracker.utils.safeParseMetaData(pixelConfig);
3654        if (configDecoded != null) FacebookTracker.storage.set(FacebookTracker.config.storageKeys.PIXEL_CONFIG, configDecoded);
3655      }
3656
3657      if (appStatus) {
3658        const statusDecoded =  FacebookTracker.utils.safeParseMetaData((appStatus));
3659        if (statusDecoded != null) FacebookTracker.storage.set(FacebookTracker.config.storageKeys.PIXEL_STATUS, statusDecoded);
3660      }
3661      if (webPixelEnabled) {
3662        const webPixelEnabledDecoded =  FacebookTracker.utils.safeParseMetaData((webPixelEnabled));
3663        if (webPixelEnabledDecoded != null) FacebookTracker.storage.set(FacebookTracker.config.storageKeys.WEB_PIXEL, webPixelEnabledDecoded);
3664      }
3665      if(preferredId) {
3666        FacebookTracker.storage.set(FacebookTracker.config.storageKeys.PREFERRED_ID, preferredId);
3667      }
3668
3669      if (customEvents) {
3670        const eventsDecoded = FacebookTracker.utils.safeParseMetaData(customEvents);
3671        if (eventsDecoded != null) FacebookTracker.storage.set(FacebookTracker.config.storageKeys.CUSTOM_EVENTS, eventsDecoded);
3672      }
3673
3674      // Check if external checkout support is enabled (defaults to true if metafield doesn't exist)
3675      let isExternalCheckoutEnabled = true;
3676      if (supportExternalCheckout) {
3677        try {
3678          const supportDecoded = FacebookTracker.utils.safeParseMetaData(supportExternalCheckout);
3679          isExternalCheckoutEnabled = supportDecoded?.enabled !== false;
3680        } catch (e) {
3681          FacebookTracker.utils.log('Failed to parse support_external_checkout metafield', e);
3682          // Default to true if parsing fails
3683          isExternalCheckoutEnabled = true;
3684        }
3685      }
3686
3687      // LOCAL capture first — a network failure below (cart 430 under load, geo
3688      // outage) must never cost first-touch attribution or fbc/fbp persistence.
3689      const externalId = await FacebookTracker.tracking.initializeExter
3689nalId();
3690      FacebookTracker.tracking.handleFbc();
3691      FacebookTracker.tracking.handleFbp();
3692      FacebookTracker.tracking.captureFirstTouch();
3693
3694      const pageData = FacebookTracker.tracking.collectPageData();
3695      if (pageData) FacebookTracker.storage.set(FacebookTracker.config.storageKeys.PAGE_DATA, pageData);
3696
3697      const adParams = FacebookTracker.tracking.collectAdParameters();
3698      if (adParams) FacebookTracker.tracking.logAdData(adParams);
3699
3700      const fbc = FacebookTracker.storage.get(FacebookTracker.config.storageKeys.FBC, 'string');
3701      const fbp = FacebookTracker.storage.get(FacebookTracker.config.storageKeys.FBP, 'string');
3702
3703      // Network side-effects LAST, individually guarded so one failing never
3704      // aborts the other.
3705      if (isExternalCheckoutEnabled) {
3706        try {
3707          await FacebookTracker.cart.updateAttributes({
3708            [FacebookTracker.config.storageKeys.EXTERNAL_ID]: externalId,
3709            ...(fbc ? { [FacebookTracker.config.storageKeys.FBC]: fbc } : {}),
3710            ...(fbp ? { [FacebookTracker.config.storageKeys.FBP]: fbp } : {})
3711          });
3712        } catch (cartErr) {
3713          FacebookTracker.utils.log('Cart attribute update failed', cartErr);
3714        }
3715      }
3716
3717      try {
3718        await FacebookTracker.tracking.hashCustomer();
3719      } catch (hashErr) {
3720        FacebookTracker.utils.log('hashCustomer failed', hashErr);
3721      }
3722
3723      FacebookTracker.utils.log('FacebookTracker initialized', { externalId, pageData, adParams });
3724    } catch (e) {
3725      FacebookTracker.utils.log('Init failed', e, 'error');
3726    }
3727  }
3728};
3729
3730document.addEventListener('DOMContentLoaded', () => {
3731  FacebookTracker.init().catch(e => FacebookTracker.utils.log('Init error', e, 'error'));
3732});
3733</script>
3733
3734<!-- END app block --><!-- BEGIN app block: shopify://apps/ta-banner-pop-up/blocks/bss-banner-popup/2db47c8b-7637-4260-aa84-586b08e92aea -->
3734<script id='bss-banner-config-data'>
3735	if(typeof BSS_BP == "undefined") {
3736	  window.BSS_BP = {
3737	  	app_id: "155531739137",
3738			shop_id: "26440",
3739			is_watermark: "true",
3740			customer: null,
3741			shopDomain: "nsmy7n-ge.myshopify.com",
3742			popup: {
3743				configs: [],
3744			},
3745			banner: {
3746				configs: []
3747			},
3748			window_popup: {
3749				configs: []
3750			},
3751			popupSettings: {
3752				delay_time: 2,
3753				gap_time: 3,
3754			},
3755			page_type: "index",
3756			productPageId: "",
3757			productPageData: null,
3758			collectionPageId: "",
3759			noImageAvailableImgUrl: "https://cdn.shopify.com/extensions/01a1104d-b3b6-7e4e-957b-271d42cef942/version_ee29e002-2026-10-06_15h21m/assets/no-image-available.png",
3760			currentLocale: {
3761				name: "English",
3762				primary: true,
3763				iso_code: "en",
3764			},
3765			country: {
3766				name: "Singapore",
3767				iso_code: "SG",
3768				currencySymbol: "$",
3769				// localization.market.id is deprecated by Shopify (only returns the most specific
3770				// market a buyer belongs to, breaks once a targeted market gets child markets).
3771				// Kept only as a fallback for configs not yet resynced with resolved country data
3772				// - see checkVisibilityMarket in shared/condition.js.
3773				market_id: "34349285589",
3774			},
3775			is_locked: false,
3776			partner_development: false,
3777			excluded_ips: '[]',
3778			current_page_ids: {
3779				product: "gid://shopify/Product/",
3780				collection: "gid://shopify/Collection/",
3781				page: "gid://shopify/Page/",
3782				blog: "gid://shopify/Blog/",
3783				article: "gid://shopify/Article/"
3784			},
3785			watermarkLogo: "https://cdn.shopify.com/extensions/01a1104d-b3b6-7e4e-957b-271d42cef942/version_ee29e002-2026-10-06_15h21m/assets/watermark_128.png",
3786		}
3787		Object.defineProperty(BSS_BP, 'plan_code', {
3788			enumerable: false,
3789			configurable: false,
3790			writable: false,
3791			value: "advanced",
3792		});
3793		Object.defineProperty(BSS_BP, 'is_exceed_quota', {
3794			enumerable: false,
3795			configurable: false,
3796			writable: false,
3797			value: "false",
3798		});
3799		Object.defineProperty(BSS_BP, 'is_legacy', {
3800			enumerable: false,
3801			configurable: false,
3802			writable: false,
3803			value: "false",
3804		});
3805	}
3806</script>
3806
3807
3808
3809	<link fetchpriority="high" rel="preload" as="script" href=https://cdn.shopify.com/extensions/01a1104d-b3b6-7e4e-957b-271d42cef942/version_ee29e002-2026-10-06_15h21m/assets/bss.bp.shared.js />
3810	<!-- BEGIN app snippet: window-popup-config -->
3811<!-- BSS Preload window popup image --><link href='https://cdn.shopify.com/s/files/1/0793/5131/6693/files/app-bss-banner-popup_0c978848-f271-4ba2-a822-be1a544c08bd_background.png?v=1787124105' as='image' rel="preload" fetchpriority='high' /><!-- Preload script -->
3812  
3813    <link rel="preload" href="https://cdn.shopify.com/extensions/01a1104d-b3b6-7e4e-957b-271d42cef942/version_ee29e002-2026-10-06_15h21m/assets/bss.bp.window-popup.js" as="script">
3814  
3815
3816	
3816<script id="bss-window-popup-config" type="application/json">
3817    {"configs":[{"id":20982,"shop_id":26440,"type":2,"priority":1,"is_show_first":true,"enable":true,"name":"New Announcement Popup","device":"desktop,mobile","countries":"","enable_allowed_countries":false,"country_type":0,"exclude_countries":{"type":0,"countries":[]},"customer_type":0,"excl_customer_type":0,"excl_specific_page_stt":false,"customer_ids":"","customer_tags":"","excl_customer_ids":"","excl_customer_tags":"","pages":"all","specific_page":"","excl_specific_page":"","enable_language":false,"allowed_languages":"","enable_to_date":true,"enable_visibility_date":false,"enable_fixed_time":false,"from_date":"2026-08-19T06:57:46.102Z","to_date":"2026-08-19T06:57:46.102Z","fixed_time":"{}","custom_css":"","product_type":0,"excl_product_type":0,"product_ids":"","collections":"","tags":"","excl_product_ids":"","excl_tags":"","collection_type":0,"collection_ids":"","excl_product_collections":"","delay_type":0,"delay_time":0,"added_to_cart_items":[],"button_selectors":"","delay_time_seconds":0,"show_again_type":2,"show_again_time":0,"is_deleted":false,"selected_markets":{"list":[],"enable":false},"trigger_settings":{"atc_tags":[],"cart_amount":0,"atc_collections":[],"cart_value_operator":0,"enable_on_cart_page":false,"exit_intent_device_target":0},"enable_utm_params":false,"utm_params":{"utm_sources":["facebook"],"custom_params":[]},"created_at":"2026-08-19T07:21:46.654Z","updated_at":"2026-08-19T08:15:29.381Z","window_popup":{"id":11719,"popup_id":20982,"template":0,"content_text":{"text":"\u003ch1 style=\"text-align: center;\"\u003e\u003cspan style=\"color: rgb(0, 0, 0); font-size: 32px;\"\u003e\u003cstrong class=\"bold\"\u003eFIRST DINNER ON US!\u003c\/strong\u003e\u003c\/span\u003e\u003c\/h1\u003e","sub_text":"\u003cp style=\"font-size: 13px; text-align: center;\"\u003e\u003cspan style=\"color: rgb(0, 0, 0); font-size: 16px;\"\u003eWelcome to Fresher Dinners - a world of\u003c\/span\u003e\u003cspan style=\"color: rgb(0, 0, 0);\"\u003e\u003cbr\u003e\u003c\/span\u003e\u003cspan style=\"color: rgb(0, 0, 0); font-size: 16px;\"\u003e\u003cem\u003enever \u003c\/em\u003easking \"what to eat for dinner\" \u003cem\u003eever\u003c\/em\u003e!\u003c\/span\u003e\u003cspan style=\"color: rgb(0, 0, 0);\"\u003e\u003cbr\u003e\u003cbr\u003e\u003c\/span\u003e\u003cspan style=\"color: rgb(0, 0, 0); font-size: 16px;\"\u003e\u003cstrong class=\"bold\"\u003eFirst time?\u003c\/strong\u003e\u003c\/span\u003e\u003cspan style=\"color: rgb(0, 0, 0);\"\u003e\u003cbr\u003e\u003c\/span\u003e\u003cspan style=\"color: rgb(0, 0, 0); font-size: 16px;\"\u003eGet your 1st Dinner FREE*\u003c\/span\u003e\u003c\/p\u003e","copyable_coupon":"DINNERSONUS"},"content_order":"text,sub_text,copyable_coupon","image_settings":{"url":"","size":37,"position":"left","image_url":"https:\/\/cdn.shopify.com\/s\/files\/1\/0793\/5131\/6693\/files\/app-bss-banner-popup_0c978848-f271-4ba2-a822-be1a544c08bd_background.png?v=1787124105","video_url":"","media_type":0,"show_on_mb":true,"success_url":"","image_url_s3":"https:\/\/production-banner-bucket.s3.us-east-2.amazonaws.com\/bss_bp\/customer_images\/26440\/0c978848-f271-4ba2-a822-be1a544c08bd_background.png","target_blank":false,"enable_image_slider":false,"image_slider_setting":{"configs":[{"label":"Image 1","image_url_s3":"https:\/\/production-banner-bucket.s3.us-east-2.amazonaws.com\/bss_bp\/images_library\/2d2445af-e34d-48b9-8996-9e5f730a569e_new_arrivals.png"},{"label":"Image 2","image_url_s3":"https:\/\/production-banner-bucket.s3.us-east-2.amazonaws.com\/bss_bp\/images_library\/b8050a8a-2a34-4e50-89e1-0018a5e4c284_50_off.png"}],"show_arrow":false,"pause_on_hover":true,"btn_arrow_color":"#FFFFFF","hide_dot_on_mobile":false,"show_pagination_dot":true,"transition_duration":4},"success_target_blank":false,"enable_after_click_button":false},"max_width":520,"height_type":0,"height":390,"element_gap":20,"overlay":40,"padding":"20px 20px 20px 20px","border_radius":"16px 16px 16px 16px","border_style":0,"border_width":"0px 0px 0px 0px","border_color":"#000000","bg_type":0,"bg_color":"#FFF9F4","bg_opacity":100,"bg_gradient":"{\"color1\":\"#FF6162\",\"color2\":\"#FF9766\"}","bg_preset":0,"bg_img_url_cdn":"","bg_img_url_s3":"","bg_img_path_name":"","bg_size":"auto","font_family":"Afacad Flux","font_url":"https:\/\/banner-sale-popup.tech-arms.io\/fonts\/Afacad_Flux.ttf","font_url_cdn":"https:\/\/cdn.shopify.com\/s\/files\/1\/0793\/5131\/6693\/files\/app-bss-banner-popup_Afacad_Flux_a23fef47-1c2e-4be0-927b-88fe6bf3c7bf.ttf?v=1787127327","text_color":{"text":"#000000","sub_text":"#616161"},"btn_settings":{"url":"","handle":"","padding":"8px 8px 8px 8px","typeUrl":"","act_type":3,"animation":0,"btn_color":"#000000","btn_style":"2","full_width":false,"success_url":"","target_blank":false,"btn_txt_color":"#FFFFFF","success_btn_type":0,"success_target_blank":false,"enable_after_click_button":false},"close_btn_settings":{"bg_color":"#D4ECC6","animation":"0","delay_time":0,"button_style":"0","x_icon_color":"#036F2F","hide_close_btn":false},"coupon_settings":{"bg_color":"#000000","animation":1,"font_size":14,"full_width":false,"text_color":"#E97300","discount_id":"","border_style":1,"coupon_source":0},"form_structure":null,"email_integrations":{"klaviyo":{"listId":"","enabled":false},"shopify":{"tags":"BSSpopup","enabled":true}},"success_config":{"order":["text","sub_text","copyable_coupon","button"],"font_url":"","btn_style":{"padding":"8px 8px 8px 8px","animation":0,"btn_color":"#000000","btn_style":"2","full_width":true,"btn_txt_color":"#FFFFFF"},"discount_id":"","font_family":"","content_text":{"text":"\u003cp style=\"text-align: center\"\u003e\u003cspan style=\"font-size: 24px\"\u003e\u003cstrong\u003eTHANK YOU!\u003c\/strong\u003e\u003c\/span\u003e\u003c\/p\u003e","button":"\u003cp style=\"text-align: center\"\u003e\u003cspan style=\"font-size: 16px\"\u003e\u003cstrong\u003eContinue shopping\u003c\/strong\u003e\u003c\/span\u003e\u003c\/p\u003e","sub_text":"\u003cp style=\"text-align: center\"\u003e\u003cspan style=\"font-size: 16px\"\u003eUse the code below to get your welcome discount:\u003c\/span\u003e\u003c\/p\u003e","copyable_coupon":""},"font_url_cdn":"","coupon_source":1},"countdown_style":{"digit_style":"0","timer_color":"{\"background\":\"#000000\",\"text\":\"#000000\",\"number\":\"#fff\",\"border\":\"#ff3f3f\",\"flipLine\":\"#000\",\"accentColor\":\"#FF3366\"}","act_timer_end":1,"countdown_format":"dd:hh:mm:ss","countdown_position":"center","font_size_countdown":20},"tease_config":{"type":3,"content":"\u003cp\u003e\u003cspan style=\"color: #FFFFFF; font-size: 14px\"\u003eDon’t Miss Out 🎁\u003c\/span\u003e\u003c\/p\u003e","bg_color":"#000000","font_url":"","animation":0,"close_pos":{"x":75,"y":17},"image_url":"https:\/\/production-banner-bucket.s3.us-east-2.amazonaws.com\/bss_bp\/customer_images\/15\/7ea5a586-84d3-4391-a68a-8693dfe49c87_dontmissout_teaser.png","image_size":100,"font_family":"","layout_type":0,"show_mobile":true,"enable_close":true,"font_url_cdn":"","show_desktop":true,"mobile_position":3,"desktop_position":3},"disable_backdrop_click":false,"position_config":{"margin_mobile":"20px 20px 20px 20px","margin_desktop":"20px 20px 20px 20px","position_mobile":4,"position_desktop":4},"auto_apply_discount":false,"countdown_success_style":null,"selected_template":{"preset":"SOCIAL_BOOST","customize":true,"modifiedFields":{"content_text.text":true,"content_text.sub_text":true}},"section_style":{},"rcm_products_config":null,"image_only":false,"layout_fields":null}}],"dictionary":null}
3818  </script>
3818
3819
3820  
3820<script>
3821    const bssWindowPopupConfig = document.querySelector("script#bss-window-popup-config");
3822    const parsedWPConfig = JSON.parse(bssWindowPopupConfig.textContent)  
3823    BSS_BP.window_popup.configs = parsedWPConfig.configs;
3824    BSS_BP.window_popup.dictionary = parsedWPConfig.dictionary || {};
3825  </script>
3825<!-- END app snippet -->
3826	<!-- BEGIN app snippet: banner-config --><!-- BSS Preload banner font --><link href='https://cdn.shopify.com/s/files/1/0793/5131/6693/files/app-bss-banner-popup_FontsFree-Net-Kiona-Bold_a008bfbc-d349-40fc-a34d-845b9596ea7d.ttf?v=1788863564' as='font' rel="preload" type="font/woff2" fetchpriority="low" crossorigin="anonymous"><link href='https://cdn.shopify.com/s/files/1/0793/5131/6693/files/app-bss-banner-popup_FontsFree-Net-Kiona-Bold_cedd5637-84e4-40dd-8626-4cb4b778f185.ttf?v=1788863630' as='font' rel="preload" type="font/woff2" fetchpriority="low" crossorigin="anonymous"><!-- Preload script -->
3827  
3828    <link rel="preload" as="script" href="https://cdn.shopify.com/extensions/01a1104d-b3b6-7e4e-957b-271d42cef942/version_ee29e002-2026-10-06_15h21m/assets/bss.bp.banner.js" />
3829  
3830
3831  
3831<script id="bss-banner-config" type="application/json">
3832    {"configs":[{"id":23410,"shop_id":26440,"banner_type":0,"name":"New Discount Banner Monthly","priority":1,"enable":true,"position":0,"customer_type":0,"product_type":0,"excl_product_type":0,"excl_customer_type":0,"enable_allowed_countries":false,"enable_fixed_time":false,"enable_visibility_date":false,"close_button":false,"is_fixed":false,"countries":"","country_type":0,"exclude_countries":{"type":0,"countries":[]},"fixed_time":"{}","from_date":"2026-08-19T07:27:41.342Z","to_date":"2026-08-19T07:27:41.342Z","enable_to_date":true,"customer_ids":"","customer_tags":"","collections":"","product_ids":"","tags":"","excl_customer_ids":"","excl_customer_tags":"","excl_product_ids":"","excl_tags":"","pages":"all","specific_pages":"","enable_excl_pages":false,"excl_pages":"","show_device":"all","btn_close_color":"#ffffff","show_arrow":false,"btn_arrow_color":"#ffffff","enable_language":false,"allowed_languages":"","custom_css":"","delay_type":0,"delay_time":0,"delay_time_seconds":0,"show_again_type":0,"show_again_time":0,"collection_type":0,"collection_ids":"","excl_product_collections":"","is_deleted":false,"created_at":"2026-08-19T07:38:17.942Z","updated_at":"2026-09-08T10:32:46.618Z","email_integrations":{"klaviyo":{"listId":"","enabled":false},"shopify":{"tags":"BSSbanner","enabled":true}},"multi_config":null,"added_to_cart_items":[],"trigger_settings":{"atc_tags":[],"cart_amount":0,"atc_collections":[],"cart_value_operator":0,"enable_on_cart_page":false},"extensional_close_style":null,"font_scale_enabled":false,"font_scale":0,"selected_markets":{"list":[],"enable":false},"enable_utm_params":false,"utm_params":{"utm_sources":["facebook"],"custom_params":[]},"banner_templates":[{"id":24239,"banner_id":23410,"template":4,"banner_text":"\u003cp style=\"font-size: 13px; text-align: center;\"\u003e\u003cspan style=\"color: rgb(255, 255, 255); font-size: 20px;\"\u003eSAVE ON YOUR FIRST Monthly SUBSCRIPTION!\u003c\/span\u003e\u003c\/p\u003e","clickable":false,"redirect_url":null,"bg_type":0,"bg_color":"#0C1961","bg_opacity":100,"bg_gradient":"{\"color1\":\"#FF6162\",\"color2\":\"#FF9766\"}","bg_preset":0,"bg_img_url_cdn":null,"bg_img_url_s3":"","bg_img_path_name":null,"bg_size":"auto","text_format":2,"font_color":"#ffffff","font_size":16,"font_size_button":13,"font_family":"FontsFree-Net-Kiona-Bold","font_url":"https:\/\/production-banner-bucket.s3.us-east-2.amazonaws.com\/bss_bp\/customer_fonts\/26440\/b288ce85-b141-41d8-b4f7-bf366c5c29b6_FontsFree-Net-Kiona-Bold.ttf","font_url_cdn":"https:\/\/cdn.shopify.com\/s\/files\/1\/0793\/5131\/6693\/files\/app-bss-banner-popup_FontsFree-Net-Kiona-Bold_a008bfbc-d349-40fc-a34d-845b9596ea7d.ttf?v=1788863564","act_type":4,"act_text":"\u003cp style=\"font-size: 13px;\"\u003e\u003cspan style=\"font-size: 13px;\"\u003eCOPY CODE\u003c\/span\u003e\u003c\/p\u003e","btn_style":0,"act_content_color":"#FAF2EB","btn_text_color":"#2f4052","countdown_start_time":"2026-08-19T07:27:00.000Z","countdown_end_time":"2026-08-19T19:27:00.000Z","act_timer_end":0,"timer_color":"{\"background\":\"#494949\",\"text\":\"#ffffff\",\"number\":\"#ffffff\",\"border\":\"#ff3f3f\",\"flipLine\":\"#000\",\"accentColor\":\"#FF3366\"}","trans_countdown":"{\"day\":\"Days\",\"hours\":\"Hrs\",\"minute\":\"Mins\",\"second\":\"Secs\"}","animation_type":0,"animation_duration":"3","animation_hover_pause":false,"font_size_countdown":20,"countdown_type":0,"countdown_format":"dd:hh:mm:ss","countdown_daily":"{\"from_time\":\"00:00\",\"to_time\":\"23:59\"}","countdown_interval":"{\"start_time\":\"2026-08-19T07:27:00.000Z\",\"countdown_length\":{\"days\":31,\"hours\":0,\"minutes\":0},\"break_length\":{\"days\":31,\"hours\":0,\"minutes\":0}}","bg_padding":12,"bg_padding_bottom":12,"bg_padding_left":0,"bg_padding_right":0,"mobile_padding_enabled":true,"mb_bg_padding":"12px 0px 12px 0px","content_gap":16,"font_scale_enabled":true,"font_scale":0,"border_width":"0px 0px 0px 0px","border_radius":"0px 0px 0px 0px","border_style":0,"border_color":"#000000","content_order":"text,coupon,action","btn_copy":"{\"text_copy\":\"DINNERONUS-M\",\"success_mess\":\"COPIED ✅\"}","discount_id":"","discount_style":"{\"border\":7,\"background\":\"#E68806\",\"text_color\":\"#FFFFFF\",\"font_size\":13,\"animation\":1}","selected_template":null,"modified_fields":{"act_text":true,"act_type":true,"btn_copy":true,"clickable":false,"banner_text":true,"coupon_code":true,"discount_id":false,"redirect_url":false,"translations":false,"act_timer_end":false,"content_order":true,"coupon_source":true,"enable_coupon":false,"animation_type":false,"countdown_type":false,"countdown_daily":false,"trans_countdown":false,"countdown_format":false,"animation_duration":false,"countdown_end_time":false,"countdown_interval":false,"free_shipping_goal":false,"countdown_start_time":false,"animation_hover_pause":false},"enable_coupon":false,"coupon_source":0,"coupon_code":"DINNERONUS-M","btn_settings":{"url":"","handle":"","padding":"8px 8px 8px 8px","typeUrl":"","animation":0,"btn_color":"#ffffff","btn_style":"2","success_url":"","target_blank":false,"btn_txt_color":"#4A90E2","success_btn_type":0,"success_target_blank":false,"enable_after_click_button":false},"countdown_evergreen":{"days":0,"hours":0,"minutes":15},"cta_popup_config":{"popup_id":0,"delay_time":0,"popup_type":2},"digit_style":"0","auto_apply_discount":false,"free_shipping_goal":{},"form_structure":null,"button_styles":{"padding":"8px 8px 8px 8px","animation":0},"progress_bar_config":null,"slide_config":null,"created_at":"2026-08-19T07:38:17.942Z","updated_at":"2026-08-19T07:38:17.942Z"}]},{"id":23651,"shop_id":26440,"banner_type":0,"name":"New Discount Banner Weekly","priority":1,"enable":true,"position":0,"customer_type":0,"product_type":0,"excl_product_type":0,"excl_customer_type":0,"enable_allowed_countries":false,"enable_fixed_time":false,"enable_visibility_date":false,"close_button":false,"is_fixed":false,"countries":"","country_type":0,"exclude_countries":{"type":0,"countries":[]},"fixed_time":"{}","from_date":"2026-08-19T07:27:41.342Z","to_date":"2026-08-19T07:27:41.342Z","enable_to_date":true,"customer_ids":"","customer_tags":"","collections":"","product_ids":"","tags":"","excl_customer_ids":"","excl_customer_tags":"","excl_product_ids":"","excl_tags":"","pages":"all","specific_pages":"","enable_excl_pages":false,"excl_pages":"","show_device":"all","btn_close_color":"#ffffff","show_arrow":false,"btn_arrow_color":"#ffffff","enable_language":false,"allowed_languages":"","custom_css":"","delay_type":0,"delay_time":0,"delay_time_seconds":0,"show_again_type":0,"show_again_time":0,"collection_type":0,"collection_ids":"","excl_product_collections":"","is_deleted":false,"created_at":"2026-09-08T10:31:48.105Z","updated_at":"2026-09-08T10:33:52.009Z","email_integrations":{"klaviyo":{"listId":"","enabled":false},"shopify":{"tags":"BSSbanner","enabled":true}},"multi_config":null,"added_to_cart_items":[],"trigger_settings":{"atc_tags":[],"cart_amount":0,"atc_collections":[],"cart_value_operator":0,"enable_on_cart_page":false},"extensional_close_style":null,"font_scale_enabled":false,"font_scale":0,"selected_markets":{"list":[],"enable":false},"enable_utm_params":false,"utm_params":{"utm_sources":["facebook"],"custom_params":[]},"banner_templates":[{"id":24490,"banner_id":23651,"template":4,"banner_text":"\u003cp style=\"font-size: 13px; text-align: center;\"\u003e\u003cspan style=\"color: rgb(255, 255, 255); font-size: 20px;\"\u003eSAVE ON YOUR FIRST WEEKLY SUBSCRIPTION!\u003c\/span\u003e\u003c\/p\u003e","clickable":false,"redirect_url":null,"bg_type":0,"bg_color":"#61200C","bg_opacity":100,"bg_gradient":"{\"color1\":\"#FF6162\",\"color2\":\"#FF9766\"}","bg_preset":0,"bg_img_url_cdn":null,"bg_img_url_s3":"","bg_img_path_name":null,"bg_size":"auto","text_format":2,"font_color":"#ffffff","font_size":16,"font_size_button":13,"font_family":"FontsFree-Net-Kiona-Bold","font_url":"https:\/\/production-banner-bucket.s3.us-east-2.amazonaws.com\/bss_bp\/customer_fonts\/26440\/b288ce85-b141-41d8-b4f7-bf366c5c29b6_FontsFree-Net-Kiona-Bold.ttf","font_url_cdn":"https:\/\/cdn.shopify.com\/s\/files\/1\/0793\/5131\/6693\/files\/app-bss-banner-popup_FontsFree-Net-Kiona-Bold_cedd5637-84e4-40dd-8626-4cb4b778f185.ttf?v=1788863630","act_type":4,"act_text":"\u003cp style=\"font-size: 13px;\"\u003e\u003cspan style=\"font-size: 13px;\"\u003eCOPY CODE\u003c\/span\u003e\u003c\/p\u003e","btn_style":0,"act_content_color":"#FAF2EB","btn_text_color":"#2f4052","countdown_start_time":"2026-08-19T07:27:00.000Z","countdown_end_time":"2026-08-19T19:27:00.000Z","act_timer_end":0,"timer_color":"{\"background\":\"#494949\",\"text\":\"#ffffff\",\"number\":\"#ffffff\",\"border\":\"#ff3f3f\",\"flipLine\":\"#000\",\"accentColor\":\"#FF3366\"}","trans_countdown":"{\"day\":\"Days\",\"hours\":\"Hrs\",\"minute\":\"Mins\",\"second\":\"Secs\"}","animation_type":0,"animation_duration":"3","animation_hover_pause":false,"font_size_countdown":20,"countdown_type":0,"countdown_format":"dd:hh:mm:ss","countdown_daily":"{\"from_time\":\"00:00\",\"to_time\":\"23:59\"}","countdown_interval":"{\"start_time\":\"2026-08-19T07:27:00.000Z\",\"countdown_length\":{\"days\":31,\"hours\":0,\"minutes\":0},\"break_length\":{\"days\":31,\"hours\":0,\"minutes\":0}}","bg_padding":12,"bg_padding_bottom":12,"bg_padding_left":0,"bg_padding_right":0,"mobile_padding_enabled":true,"mb_bg_padding":"12px 0px 12px 0px","content_gap":16,"font_scale_enabled":true,"font_scale":0,"border_width":"0px 0px 0px 0px","border_radius":"0px 0px 0px 0px","border_style":0,"border_color":"#000000","content_order":"text,coupon,action","btn_copy":"{\"text_copy\":\"DINNERONUS-WK\",\"success_mess\":\"COPIED ✅\"}","discount_id":"","discount_style":"{\"border\":7,\"background\":\"#E68806\",\"text_color\":\"#FFFFFF\",\"font_size\":13,\"animation\":1}","selected_template":null,"modified_fields":{"act_text":true,"act_type":true,"btn_copy":true,"clickable":false,"banner_text":true,"coupon_code":true,"discount_id":false,"redirect_url":false,"translations":false,"act_timer_end":false,"content_order":true,"coupon_source":true,"enable_coupon":false,"animation_type":false,"countdown_type":false,"countdown_daily":false,"trans_countdown":false,"countdown_format":false,"animation_duration":false,"countdown_end_time":false,"countdown_interval":false,"free_shipping_goal":false,"countdown_start_time":false,"animation_hover_pause":false},"enable_coupon":false,"coupon_source":0,"coupon_code":"DINNERONUS-WK","btn_settings":{"url":"","handle":"","padding":"8px 8px 8px 8px","typeUrl":"","animation":0,"btn_color":"#ffffff","btn_style":"2","success_url":"","target_blank":false,"btn_txt_color":"#4A90E2","success_btn_type":0,"success_target_blank":false,"enable_after_click_button":false},"countdown_evergreen":{"days":0,"hours":0,"minutes":15},"cta_popup_config":{"popup_id":0,"delay_time":0,"popup_type":2},"digit_style":"0","auto_apply_discount":false,"free_shipping_goal":{},"form_structure":null,"button_styles":{"padding":"8px 8px 8px 8px","animation":0},"progress_bar_config":null,"slide_config":null,"created_at":"2026-09-08T10:31:48.105Z","updated_at":"2026-09-08T10:31:48.105Z"}]}],"dictionary":null }
3833  </script>
3833
3834  
3834<script>
3835    const bssBannerDataScript = document.querySelector("script#bss-banner-config");
3836    const parsed = JSON.parse(bssBannerDataScript.textContent)  
3837    BSS_BP.banner.configs = parsed.configs;
3838    BSS_BP.banner.dictionary = parsed.dictionary || {};
3839  </script>
3839<!-- END app snippet -->
3840	<!-- BEGIN app snippet: sale-popup-config -->
3840<script id="bss-sale-popup-config" type="application/json">
3841    {"configs":[],"dictionary":null,"popup_settings":{"delay_time":2,"gap_time":3}}
3842  </script>
3842
3843
3844  
3844<script>
3845    const bssSalePopupConfig = document.querySelector("script#bss-sale-popup-config");
3846    const parsedSPConfig = JSON.parse(bssSalePopupConfig.textContent)  
3847    BSS_BP.popup.configs = parsedSPConfig.configs;
3848    BSS_BP.popup.dictionary = parsedSPConfig.dictionary || {};
3849    BSS_BP.popupSettings = parsedSPConfig.popup_settings || BSS_BP.popupSettings;
3850  </script>
3850<!-- END app snippet -->
3851
3852
3853<!-- BEGIN app snippet: support-code -->
3854<!-- END app snippet -->
3855
3856
3857	
3857<script
3858		id='init_script'
3859		defer
3860		src='https://cdn.shopify.com/extensions/01a1104d-b3b6-7e4e-957b-271d42cef942/version_ee29e002-2026-10-06_15h21m/assets/bss.bp.index.js'
3861	></script>
3861
3862
3863
3864
3865<!-- END app block --><link href="https://monorail-edge.shopifysvc.com" rel="dns-prefetch">
3866<script>(function(){if ("sendBeacon" in navigator && "performance" in window) {try {var session_token_from_headers = performance.getEntriesByType('navigation')[0].serverTiming.find(x => x.name == '_s').description;} catch {var session_token_from_headers = undefined;}var session_cookie_matches = document.cookie.match(/_shopify_s=([^;]*)/);var session_token_from_cookie = session_cookie_matches && session_cookie_matches.length === 2 ? session_cookie_matches[1] : "";var session_token = session_token_from_headers || session_token_from_cookie || "";function handle_abandonment_event(e) {var entries = performance.getEntries().filter(function(entry) {return /monorail-edge.shopifysvc.com/.test(entry.name);});if (!window.abandonment_tracked && entries.length === 0) {window.abandonment_tracked = true;var currentMs = Date.now();var navigation_start = performance.timing.navigationStart;var payload = {shop_id: 79351316693,url: window.location.href,navigation_start,duration: currentMs - navigation_start,session_token,page_type: "index"};window.navigator.sendBeacon("https://monorail-edge.shopifysvc.com/v1/produce", JSON.stringify({schema_id: "online_store_buyer_site_abandonment/1.1",payload: payload,metadata: {event_created_at_ms: currentMs,event_sent_at_ms: currentMs}}));}}window.addEventListener('pagehide', handle_abandonment_event);}}());</script>
vendor: 1 bytes, line 3866
3866
3867<script>
3868  window.__TREKKIE_SHIM_QUEUE = window.__TREKKIE_SHIM_QUEUE || [];
3869</script>
vendor: 1 bytes, line 3869
3869
3870<script>(function(){var wpmLoader=function(){"use strict";var e=/Googlebot|Storebot-Google|bingbot|Baiduspider|YandexBot|DuckDuckBot|Slurp|facebookexternalhit|Twitterbot|LinkedInBot|Applebot|AdsBot-Google|Mediapartners-Google|APIs-Google|PetalBot|SemrushBot|AhrefsBot|MJ12bot|DotBot|Acunetix|PerplexityBot|Perplexity-User/i,t=/bytedance/i;function i(){try{var e=document.cookie;if(!e||"string"!=typeof e)return;for(var t=0,i=e.split(";");t<i.length;t++){var n=i[t],r=n.indexOf("=");if(-1!==r){var o=n.slice(0,r).trim();if(o){var a=void 0;try{a=decodeURIComponent(o)}catch(e){a=o}if("_shopify_s"===a){var d=n.slice(r+1).trim();try{return decodeURIComponent(d)}catch(e){return d}}}}}return}catch(e){return}}function n(e){try{"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn(e)}catch(e){}}function r(e,t){return"string"==typeof e&&e.length>0&&e.length<=t?e:void 0}function o(e){var t;switch(null==(t=null==e?void 0:e.navigation)?void 0:t.type){case 0:return"navigate";case 1:return"reload";case 2:return"back_forward";default:return}}function a(){var e,t,i;try{var n=null==(i=null==(t=null==(e=self.ShopifyAnalytics)?void 0:e.lib)?void 0:t.trekkie)?void 0:i.state;return"awaiting-consent"===n||"initialized"===n?n:void 0}catch(e){return}}return function(d,s,u,l){var c=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{};try{var p=c.trekkieShim;!0!==p&&"true"!==p||null!=window.__TREKKIE_SHIM_QUEUE||(window.__TREKKIE_SHIM_QUEUE=[])}catch(e){}var f,v,h,y,g=(v=(f={modern:/Edge?\/(1{2}[4-9]|1[2-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Firefox\/(1{2}[4-9]|1[2-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Chrom(ium|e)\/(9{2}|\d{3,})\.\d+(\.\d+|)|(Maci|X1{2}).+ Version\/(15\.\d+|(1[6-9]|[2-9]\d|\d{3,})\.\d+)([,.]\d+|)( \(\w+\)|)( Mobile\/\w+|) Safari\/|Chrome.+OPR\/(9{2}|\d{3,})\.\d+\.\d+|(CPU[ +]OS|iPhone[ +]OS|CPU[ +]iPhone|CPU IPhone OS|CPU iPad OS)[ +]+(15[._]\d+|(1[6-9]|[2-9]\d|\d{3,})[._]\d+)([._]\d+|)|Android:?[ /-](14[89]|1[5-9]\d|[2-9]\d{2}|\d{4,})(\.\d+|)(\.\d+|)|Android.+Firefox\/(15\d|1[6-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Android.+Chrom(ium|e)\/(14[89]|1[5-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|SamsungBrowser\/([2-9]\d|\d{3,})\.\d+/,legacy:/Edge?\/(1[6-9]|[2-9]\d|\d{3,})\.\d+(\.\d+|)|Firefox\/(5[4-9]|[6-9]\d|\d{3,})\.\d+(\.\d+|)|Chrom(ium|e)\/(5[1-9]|[6-9]\d|\d{3,})\.\d+(\.\d+|)([\d.]+$|.*Safari\/(?![\d.]+ Edge\/[\d.]+$))|(Maci|X1{2}).+ Version\/(10\.\d+|(1[1-9]|[2-9]\d|\d{3,})\.\d+)([,.]\d+|)( \(\w+\)|)( Mobile\/\w+|) Safari\/|Chrome.+OPR\/(3[89]|[4-9]\d|\d{3,})\.\d+\.\d+|(CPU[ +]OS|iPhone[ +]OS|CPU[ +]iPhone|CPU IPhone OS|CPU iPad OS)[ +]+(10[._]\d+|(1[1-9]|[2-9]\d|\d{3,})[._]\d+)([._]\d+|)|Android:?[ /-](14[89]|1[5-9]\d|[2-9]\d{2}|\d{4,})(\.\d+|)(\.\d+|)|Mobile Safari.+OPR\/([89]\d|\d{3,})\.\d+\.\d+|Android.+Firefox\/(15\d|1[6-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Android.+Chrom(ium|e)\/(14[89]|1[5-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Android.+(UC? ?Browser|UCWEB|U3)[ /]?(15\.([5-9]|\d{2,})|(1[6-9]|[2-9]\d|\d{3,})\.\d+)\.\d+|SamsungBrowser\/(5\.\d+|([6-9]|\d{2,})\.\d+)|Android.+MQ{2}Browser\/(14(\.(9|\d{2,})|)|(1[5-9]|[2-9]\d|\d{3,})(\.\d+|))(\.\d+|)|K[Aa][Ii]OS\/(3\.\d+|([4-9]|\d{2,})\.\d+)(\.\d+|)/}).modern,h=f.legacy,(y=navigator.userAgent).match(e)?"bot":y.match(v)?"modern":y.match(h)?"legacy":y.match(t)?"bot":"unknown"),m=function(e){var t,i,n=r(e,128);try{var a=window.performance,d=null==(t=null==a?void 0:a.getEntriesByType)?void 0:t.call(a,"navigation")[0];if(!d)return{requestId:n,navigationType:o(a)};var s="type"in d?r(d.type,64):void 0,u="serverTiming"in d&&Array.isArray(d.serverTiming)?d.serverTiming:[];return{requestId:null!=n?n:r(null==(i=u.find(function(e){return"requestID"===e.name}))?void 0:i.description,128),navigationType:s}}catch(e){return{requestId:n}}}(c.requestId),w=function(e){var t=e.version,r=e.browserTarget,o=e.surface,a=e.shopId,d=e.monorailEndpoint,s=window.location.href;return{emit:function(e){var u=e.status,l=e.errorMsg,c=e.failureReason,p=e.useKeepaliveFallback,f=void 0!==p&&p,v=e.navigationType,h=e.pagehidePersisted,y=e.requestId,g=e.trekkieState;if(d){var m,w;try{var b=(new Date).getTime();m=JSON.stringify({metadata:{event_sent_at_ms:b},events:[{schema_id:"web_pixels_manager_load/3.3",payload:{version:t,bundle_target:r,page_url:s,status:u,surface:o,error_msg:l,failure_reason:c,navigation_type:v,pagehide_persisted:h,request_id:y,trekkie_state:g,shop_id:a,visit_token:i()},metadata:{event_created_at_ms:b}}]})}catch(e){return}try{if("function"==typeof window.navigator.sendBeacon&&-1===(w=window.navigator.userAgent).indexOf("iPhone; CPU iPhone OS 12_")&&-1===w.indexOf("iPad; CPU OS 12_")&&-1===w.indexOf("iPod touch; CPU iPhone OS 12_")&&window.navigator.sendBeacon.bind(window.navigator)(d,m))return}catch(e){}if(f)try{"function"==typeof window.fetch&&window.fetch(d,{method:"POST",headers:{"Content-Type":"text/plain"},body:m,keepalive:!0}
3870).catch(function(){})}catch(e){}else try{var _=new XMLHttpRequest;_.open("POST",d,!0),_.setRequestHeader("Content-Type","text/plain"),_.send(m)}catch(e){n("[Web Pixels Manager] Got an unhandled error while logging to Monorail.")}}else n("[Web Pixels Manager] No Monorail endpoint provided, skipping logging.")}}}({version:u,browserTarget:g,surface:d.surface,shopId:d.shopId,monorailEndpoint:d.monorailEndpoint});if(Boolean(null==(_=null==(b=window.Shopify)?void 0:b.analytics)?void 0:_.replayQueue))w.emit({status:"setup-skipped",errorMsg:"replay queue already initialized."});else{var b,_;w.emit({status:"setup-started"}),window.Shopify=window.Shopify||{};var S=window.Shopify;S.analytics=S.analytics||{};var P=S.analytics;P.replayQueue=[],P.publish=function(e,t,i){return P.replayQueue.push([e,t,i]),!0};try{self.performance.mark("wpm:start")}catch(e){}var k,C="modern"===g?"modern":"legacy",E=(null!=l?l:{modern:"",legacy:""})[C],I=[(k={baseUrl:s,hashVersion:u,buildTarget:C}).baseUrl,"/wpm","/b",k.hashVersion,"modern"===k.buildTarget?"m":"l",".js"].join(""),O=!1,T=!1;try{c.browserTarget=g,function(){O=!0;try{window.addEventListener("pagehide",M)}catch(e){O=!1}}(),R(function(){try{R(x)}catch(e){D(e)}}),w.emit({status:"loading",requestId:m.requestId,navigationType:m.navigationType,trekkieState:a()})}catch(e){D(e)}}function U(){var e;if(q(),!function(){var e,t;return Boolean(null==(t=null==(e=window.Shopify)?void 0:e.analytics)?void 0:t.initialized)}()){var t,i,n;try{if("function"!=typeof(null==(e=window.webPixelsManager)?void 0:e.init))return void A();if(!(null!==(n=i=t=window.webPixelsManager.init(d))&&"function"!=typeof n&&Object(n)===n&&"publish"in i&&"function"==typeof i.publish&&"publishCustomEvent"in i&&"function"==typeof i.publishCustomEvent&&"visitor"in i&&"function"==typeof i.visitor))return void A()}catch(e){return void A(e)}var r=window.Shopify.analytics;r.replayQueue.forEach(function(e){var i=e[0],n=e[1],r=e[2];t.publishCustomEvent(i,n,r)}),r.replayQueue=[],r.publish=t.publishCustomEvent,r.visitor=t.visitor,r.initialized=!0}}function A(e){B("manager_api_unavailable",void 0===e?void 0:Q(e))}function x(){B("script_load_failed","".concat(I," has failed to load"))}function B(e,t){T||(T=!0,q(),w.emit({status:"failed",errorMsg:t,failureReason:e,requestId:m.requestId,navigationType:m.navigationType,trekkieState:a()}))}function M(e){O&&(q(),w.emit({status:"pagehide-while-loading",useKeepaliveFallback:!0,pagehidePersisted:e.persisted,requestId:m.requestId,navigationType:m.navigationType,trekkieState:a()}))}function q(){O=!1;try{window.removeEventListener("pagehide",M)}catch(e){}}function R(e){var t;!function(e){var t=e.src,i=e.async,n=void 0===i||i,r=e.onload,o=e.onerror,a=e.sri,d=e.scriptDataAttributes,s=void 0===d?{}:d,u=document.createElement("script"),l=document.querySelector("head"),c=document.querySelector("body");if(u.async=n,u.src=t,a&&(u.integrity=a,u.crossOrigin="anonymous"),s)for(var p in s)if(Object.prototype.hasOwnProperty.call(s,p))try{u.dataset[p]=String(s[p])}catch(e){}if(r&&u.addEventListener("load",r),o&&u.addEventListener("error",o),l)l.appendChild(u);else{if(!c)throw new Error("Did not find a head or body element to append the script");c.appendChild(u)}}({src:I,async:!0,onload:U,onerror:e,sri:(t=E,"string"==typeof t&&/^sha384-[A-Za-z0-9+/=]+$/.test(t)?E:""),scriptDataAttributes:c})}function D(e){B("script_append_failed",Q(e))}function Q(e){return e instanceof Error?e.message:"Unknown error"}}}();wpmLoader({shopId: 79351316693,storefrontBaseUrl: "https://fresherdinners.com.sg",extensionsBaseUrl: "https://extensions.shopifycdn.com/cdn/shopifycloud/web-pixels-manager",monorailEndpoint: "https://fresherdinners.com.sg/.well-known/shopify/monorail/unstable/produce_batch",surface: "storefront-renderer",enabledBetaFlags: ["4c64608a","16072cab","8450a54b"],webPixelsConfigList: [{"id":"2465595605","configuration":"{\"pixel_id\":\"27518529634509861\",\"pixel_type\":\"facebook_pixel\"}","eventPayloadVersion":"v1","runtimeContext":"OPEN","scriptVersion":"bd2f978c17a94bbb8a74d43de2165dc5","type":"APP","apiClientId":2329312,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized","enabledFlags":["9a3ed68a"]},{"id":"2465398997","configuration":"{\"accountID\":\"6a8579f86a0fcb52fe3d30d5\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"36e3d4a51ce4f54c09fc3ba4b868fb3d","type":"APP","apiClientId":161884340225,"privacyPurposes":["SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"},{"id":"2465267925","configuration":"{\"accountID\":\"79351316693\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"a6f52647d7c45a761e1efaaae50eaefb","type":"APP","apiClientId":242350882817,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"},{"id":"2375385301","configuration":"{\"projectId\":\"xnsp1vmz70\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"d8a2bb2ccbb513dc8e8b6937f4b8033e","type":"APP","apiClientId":240074326017,"privacyPurposes":[],"capabilities":["advanced_dom_events"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_personal_data"],"dataSharingControls":["share_all_events"]}
3870,"dataSharingState":"unrestricted"},{"id":"2368176341","configuration":"{\"config\":\"{\\\"google_tag_ids\\\":[\\\"G-Z15W2036DX\\\"],\\\"target_country\\\":\\\"ZZ\\\",\\\"gtag_events\\\":[{\\\"type\\\":\\\"begin_checkout\\\",\\\"action_label\\\":\\\"G-Z15W2036DX\\\"},{\\\"type\\\":\\\"search\\\",\\\"action_label\\\":\\\"G-Z15W2036DX\\\"},{\\\"type\\\":\\\"remove_from_cart\\\",\\\"action_label\\\":\\\"G-Z15W2036DX\\\"},{\\\"type\\\":\\\"view_item\\\",\\\"action_label\\\":\\\"G-Z15W2036DX\\\"},{\\\"type\\\":\\\"add_shipping_info\\\",\\\"action_label\\\":\\\"G-Z15W2036DX\\\"},{\\\"type\\\":\\\"purchase\\\",\\\"action_label\\\":\\\"G-Z15W2036DX\\\"},{\\\"type\\\":\\\"page_view\\\",\\\"action_label\\\":\\\"G-Z15W2036DX\\\"},{\\\"type\\\":\\\"view_item_list\\\",\\\"action_label\\\":\\\"G-Z15W2036DX\\\"},{\\\"type\\\":\\\"add_payment_info\\\",\\\"action_label\\\":\\\"G-Z15W2036DX\\\"},{\\\"type\\\":\\\"add_to_cart\\\",\\\"action_label\\\":\\\"G-Z15W2036DX\\\"},{\\\"type\\\":\\\"view_cart\\\",\\\"action_label\\\":\\\"G-Z15W2036DX\\\"}],\\\"enable_monitoring_mode\\\":false}\"}","eventPayloadVersion":"v1","runtimeContext":"OPEN","scriptVersion":"a3321ca85cf5aaf6b57585fcd8d67b3a","type":"APP","apiClientId":1780363,"privacyPurposes":[],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized","enabledFlags":["9a3ed68a"]},{"id":"2119598293","configuration":"{\"accountID\":\"111\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"2724075f63b99c0876a76433be03f895","type":"APP","apiClientId":1788279,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"},{"id":"2041577685","configuration":"{\"appId\":\"ba037fbd-130c-4dea-bece-adfae6a77520\",\"appToken\":\"3a518b7afc920ac54fcb3579d3f50fb7\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"d2ac6858f372976b9c64742f15fdfe8d","type":"APP","apiClientId":206063009793,"privacyPurposes":["ANALYTICS"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_personal_data"],"dataSharingControls":["share_all_events"]},"dataSharingState":"unrestricted"},{"id":"shopify-app-pixel","configuration":"{}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"0530","apiClientId":"shopify-pixel","type":"APP","privacyPurposes":["ANALYTICS","MARKETING"]},{"id":"shopify-custom-pixel","eventPayloadVersion":"v1","runtimeContext":"LAX","scriptVersion":"0530","apiClientId":"shopify-pixel","type":"CUSTOM","privacyPurposes":["ANALYTICS","MARKETING"]}],isMerchantRequest: false,initData: {"shop":{"name":"Fresher Dinners","paymentSettings":{"currencyCode":"SGD"},"myshopifyDomain":"nsmy7n-ge.myshopify.com","countryCode":"SG","storefrontUrl":"https:\/\/fresherdinners.com.sg"},"customer":null,"cart":null,"checkout":null,"productVariants":[],"products":[{"id":"9495631528149","handle":"5-hour-slow-cooked-thick-congee","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"54315786666197","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"9384621113557","handle":"junior-dinner-2d","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"53913084592341","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"9300881965269","handle":"thursday","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"53386700325077","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"9510888440021","handle":"angel-hair-xin-chow-fried-bee-hoon","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"54376115372245","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]}],"purchasingCompany":null},},"https://fresherdinners.com.sg/cdn","87a86122w399bf3b8pd0403c97m2c07468c",{"modern":"","legacy":""},{"trekkieShim":true,"agentContext":true,"apiClientId":"580111","facebookCapiEnabled":"true","themeId":"157894213845","themeStoreId":"2481","themePublished":"true","eventMetadataId":"8f22de74-232e-4cf7-891e-af75144424b9","pageType":"home","shopId":"79351316693","storefrontBaseUrl":"https:\/\/fresherdinners.com.sg","extensionBaseUrl":"https:\/\/extensions.shopifycdn.com\/cdn\/shopifycloud\/web-pixels-manager","surface":"storefront-renderer","enabledBetaFlags":"[\"4c64608a\", \"16072cab\", \"8450a54b\"]","isMerchantRequest":"false","hashVersion":"87a86122w399bf3b8pd0403c97m2c07468c","publish":"custom","events":"[[\"page_viewed\",{}]]"});})();</script>
3870<script>
3871  window.ShopifyAnalytics = window.ShopifyAnalytics || {};
3872  window.ShopifyAnalytics.meta = window.ShopifyAnalytics.meta || {};
3873  window.ShopifyAnalytics.meta.currency = 'SGD';
3874  var meta = {"page":{"pageType":"home","requestId":"03149f5c-905e-4dab-8895-a283f95b88d4-1791373064"}};
3875  for (var attr in meta) {
3876    window.ShopifyAnalytics.meta[attr] = meta[attr];
3877  }
3878</script>
vendor: 1 bytes, line 3878
3878
3879<script class="analytics">
3880  (function () {
3881    var customDocumentWrite = function(content) {
3882      var jquery = null;
3883
3884      if (window.jQuery) {
3885        jquery = window.jQuery;
3886      } else if (window.Checkout && window.Checkout.$) {
3887        jquery = window.Checkout.$;
3888      }
3889
3890      if (jquery) {
3891        jquery('body').append(content);
3892      }
3893    };
3894
3895    var hasLoggedConversion = function(token) {
3896      if (token) {
3897        return document.cookie.indexOf('loggedConversion=' + token) !== -1;
3898      }
3899      return false;
3900    }
3901
3902    var setCookieIfConversion = function(token) {
3903      if (token) {
3904        var twoMonthsFromNow = new Date(Date.now());
3905        twoMonthsFromNow.setMonth(twoMonthsFromNow.getMonth() + 2);
3906
3907        document.cookie = 'loggedConversion=' + token + '; expires=' + twoMonthsFromNow;
3908      }
3909    }
3910
3911    var trekkie = window.ShopifyAnalytics.lib = window.trekkie = window.trekkie || [];
3912    window.ShopifyAnalytics.lib.trekkie = window.trekkie;
3913    if (trekkie.integrations) {
3914      return;
3915    }
3916    trekkie.methods = [
3917      'identify',
3918      'page',
3919      'ready',
3920      'track',
3921      'trackForm',
3922      'trackLink'
3923    ];
3924    trekkie.factory = function(method) {
3925      return function() {
3926        var args = Array.prototype.slice.call(arguments);
3927        args.unshift(method);
3928        trekkie.push(args);
3929        if (method == 'track' || method == 'page') {
3930          var pageUrl;
3931          try {
3932            pageUrl = window.location.href;
3933          } catch (e) {}
3934          var pageReferrer;
3935          try {
3936            pageReferrer = document.referrer;
3937          } catch (e) {}
3938          try {
3939            if (window.__TREKKIE_SHIM_QUEUE == null) {
3940              window.__TREKKIE_SHIM_QUEUE = [];
3941            }
3942            window.__TREKKIE_SHIM_QUEUE.push({
3943              from: 'trekkie-stub',
3944              method: method,
3945              args: args.slice(1),
3946              pageContext: {
3947                url: pageUrl,
3948                referrer: pageReferrer
3949              }
3950            });
3951          } catch (e) {
3952            // no-op
3953          }
3954        }
3955        return trekkie;
3956      };
3957    };
3958    for (var i = 0; i < trekkie.methods.length; i++) {
3959      var key = trekkie.methods[i];
3960      trekkie[key] = trekkie.factory(key);
3961    }
3962    trekkie.load = function(config) {
3963      trekkie.config = config || {};
3964      trekkie.config.initialDocumentCookie = document.cookie;
3965      var first = document.getElementsByTagName('script')[0];
3966var script = document.createElement('script');
3967script.type = 'text/javascript';
3968script.onerror = function(e) {
3969  var scriptFallback = document.createElement('script');
3970  scriptFallback.type = 'text/javascript';
3971  scriptFallback.onerror = function(error) {
3972          var Monorail = {
3973      produce: function produce(monorailDomain, schemaId, payload) {
3974        var currentMs = new Date().getTime();
3975        var event = {
3976          schema_id: schemaId,
3977          payload: payload,
3978          metadata: {
3979            event_created_at_ms: currentMs,
3980            event_sent_at_ms: currentMs
3981          }
3982        };
3983        return Monorail.sendRequest("https://" + monorailDomain + "/v1/produce", JSON.stringify(event));
3984      },
3985      sendRequest: function sendRequest(endpointUrl, payload) {
3986        // Try the sendBeacon API
3987        if (window && window.navigator && typeof window.navigator.sendBeacon === 'function' && typeof window.Blob === 'function' && !Monorail.isIos12()) {
3988          var blobData = new window.Blob([payload], {
3989            type: 'text/plain'
3990          });
3991
3992          if (window.navigator.sendBeacon(endpointUrl, blobData)) {
3993            return true;
3994          } // sendBeacon was not successful
3995
3996        } // XHR beacon
3997
3998        var xhr = new XMLHttpRequest();
3999
4000        try {
4001          xhr.open('POST', endpointUrl);
4002          xhr.setRequestHeader('Content-Type', 'text/plain');
4003          xhr.send(payload);
4004        } catch (e) {
4005          console.log(e);
4006        }
4007
4008        return false;
4009      },
4010      isIos12: function isIos12() {
4011        return window.navigator.userAgent.lastIndexOf('iPhone; CPU iPhone OS 12_') !== -1 || window.navigator.userAgent.lastIndexOf('iPad; CPU OS 12_') !== -1;
4012      }
4013    };
4014    Monorail.produce('monorail-edge.shopifysvc.com',
4015      'trekkie_storefront_load_errors/1.1',
4016      {shop_id: 79351316693,
4017      theme_id: 157894213845,
4018      app_name: "storefront",
4019      context_url: window.location.href,
4020      source_url: "//fresherdinners.com.sg/cdn/s/trekkie.storefront.51e69540e15035ae012ec8cc42e8f9cd792233a0.min.js"});
4021
4022  };
4023  scriptFallback.async = true;
4024  scriptFallback.src = '//fresherdinners.com.sg/cdn/s/trekkie.storefront.51e69540e15035ae012ec8cc42e8f9cd792233a0.min.js';
4025  first.parentNode.insertBefore(scriptFallback, first);
4026};
4027script.async = true;
4028script.src = '//fresherdinners.com.sg/cdn/s/trekkie.storefront.51e69540e15035ae012ec8cc42e8f9cd792233a0.min.js';
4029first.parentNode.insertBefore(script, first);
4030
4031    };
4032    trekkie.load(
4033      {"Trekkie":{"appName":"storefront","development":false,"defaultAttributes":{"shopId":79351316693,"isMerchantRequest":null,"themeId":157894213845,"themeCityHash":"8824506522435598658","contentLanguage":"en","currency":"SGD","eventMetadataId":"8f22de74-232e-4cf7-891e-af75144424b9"},"isServerSideCookieWritingEnabled":true,"monorailRegion":"shop_domain","enabledBetaFlags":["764d78cb","8450a54b","4c64608a"]},"Session Attribution":{},"S2S":{"facebookCapiEnabled":true,"source":"trekkie-storefront-renderer","apiClientId":580111}}
4034    );
4035
4036    var loaded = false;
4037    trekkie.ready(function() {
4038      if (loaded) return;
4039      loaded = true;
4040
4041      window.ShopifyAnalytics.lib = window.trekkie;
4042
4043      var originalDocumentWrite = document.write;
4044      document.write = customDocumentWrite;
4045      try { window.ShopifyAnalytics.merchantGoogleAnalytics.call(this); } catch(error) {};
4046      document.write = originalDocumentWrite;
4047
4048      var match = window.location.pathname.match(/checkouts\/(.+)\/(thank_you|post_purchase)/)
4049      var token = match? match[1]: undefined;
4050      if (!hasLoggedConversion(token)) {
4051        setCookieIfConversion(token);
4052        
4053      }
4054    });
4055
4056    window.ShopifyAnalytics.lib.page(null,{"pageType":"home","requestId":"03149f5c-905e-4dab-8895-a283f95b88d4-1791373064","shopifyEmitted":true});
4057
4058    var eventsListenerScript = document.createElement('script');
4059    eventsListenerScript.async = true;
4060    eventsListenerScript.src = "//fresherdinners.com.sg/cdn/shopifycloud/storefront/assets/shop_events_listener-4e26a9ce.js";
4061    document.getElementsByTagName('head')[0].appendChild(eventsListenerScript);
4062})();</script>
vendor: 1 bytes, line 4062
4062
4063<script
4064  defer
4065  src="https://fresherdinners.com.sg/cdn/shopifycloud/perf-kit/shopify-perf-kit-3.9.6.min.js"
4066  data-application="storefront-renderer"
4067  data-shop-id="79351316693"
4068  data-render-region="gcp-us-central1"
4069  data-page-type="index"
4070  data-theme-instance-id="157894213845"
4071  data-theme-name="Horizon"
4072  data-theme-version="3.3.1"
4073  data-monorail-region="shop_domain"
4074  data-resource-timing-sampling-rate="10"
4075  data-shs="true"
4076  data-shs-beacon="true"
4077  data-shs-export-with-fetch="true"
4078  data-shs-logs-sample-rate="1"
4079  data-shs-beacon-endpoint="https://fresherdinners.com.sg/api/collect"
4080></script>
4080
4081<meta name="shopify-y" content="6b261caf-2f36-46ff-b00a-f21b1bbf4dc1" data-expiration="1822930664000"><meta name="shopify-s" content="2d19306d-7a5d-43c2-9dd5-9e351cfb82af" data-expiration="1791374864000"><meta name="new-cookie-storage-activated" content="t">
4082</head>
4083  <style>
4084    @import url('https://fonts.googleapis.com/css2?family=Bitter:ital,wght@0,100..900;1,100..900&display=swap');
4085    @import url('https://fonts.googleapis.com/css2?family=Candal&display=swap');
4086  </style>
4087  <body class="index page-width-normal card-hover-effect-none 
4088      
4089  user-not-login
4090">
4091    <a
4092  class="skip-to-content-link button-secondary"
4093  href="#MainContent"
4094>
4095  Skip to content
4096</a>
4097
4098
4099
4100    <div id="header-group">
4101      <!-- BEGIN sections: header-group -->
4102<header id="shopify-section-sections--21415153402069__header_section" class="shopify-section shopify-section-group-header-group header-section">
4103
4104
4105
4106
4107
4108<script type="application/ld+json">
4109  {
4110    "@context": "http://schema.org",
4111    "@type": "Organization",
4112    "name": "Fresher Dinners",
4113    
4114      "logo": "https:\/\/fresherdinners.com.sg\/cdn\/shop\/files\/fresherdinners-logo-live-r0fqa8b2jhosi6y07txsv88nst1ozsiuiuhhh1zagy.png?v=1772728733\u0026width=500",
4115    
4116    "url": "https:\/\/fresherdinners.com.sg"
4117  }
4118</script>
4118
4119
4120<header-component
4121  id="header-component"
4122  class="header"
4123  data-theme-color="rgb(250 247 243)"
4124  
4125  
4126    sticky="always"
4127  
4128  data-skip-node-update
4129  data-scroll-direction="none"
4130><h1 class="visually-hidden">Fresher Dinners</h1>
4131    
4132
4133    
4134
4135    
4136    
4137      <div
4138        class="header__row header__row--top color-scheme-1 section section--full-width-margin section--page-width"
4139        ref="headerRowTop"style="--border-bottom-width: 0px; --border-bottom-width-mobile: 0px;">
4140        <div class="header__columns spacing-style">
4141          <div
4142      class="header__column header__column--left"
4143      data-testid="header-top-left"
4144    >
4145      
4146        
4147          
4148              
4149
4150
4151
4152    <div
4153      class="header__drawer"
4154      ref="headerDrawerContainer"
4155      data-hydration-key="header-drawer-mobile"
4156      
4157    >
4158      
4159
4160<script
4161  src="//fresherdinners.com.sg/cdn/shop/t/2/assets/header-drawer.js?v=121243031541024704371775201778"
4162  type="module"
4163  fetchpriority="low"
4164></script>
4164
4165
4166<header-drawer
4167  class="header-drawer "
4168  style="--menu-image-border-radius: 0px; --resource-card-corner-radius: 0px;"
4169>
4170  <details
4171    id="Details-menu-drawer-container"
4172    data-skip-node-update="true"
4173    class="menu-drawer-container"
4174    ref="details"
4175    scroll-lock
4176  >
4177    <summary
4178      class="header__icon header__icon--menu header__icon--summary"
4179      aria-label="Menu"
4180      on:click="/toggle"
4181    >
4182      <span class="svg-wrapper header-drawer-icon header-drawer-icon--open"><svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
4183  <path d="M1 3.5H13" stroke="currentColor" stroke-width="var(--icon-stroke-width)" stroke-linecap="round"/>
4184  <path d="M1 10.5H13" stroke="currentColor" stroke-width="var(--icon-stroke-width)" stroke-linecap="round"/>
4185</svg>
4186</span>
4187      <span class="svg-wrapper header-drawer-icon header-drawer-icon--close"><svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
4188  <path d="M12 2L2 12" stroke="currentColor" stroke-width="var(--icon-stroke-width)" stroke-linecap="round" stroke-linejoin="round"/>
4189  <path d="M12 12L2 2" stroke="currentColor" stroke-width="var(--icon-stroke-width)" stroke-linecap="round" stroke-linejoin="round"/>
4190</svg>
4191</span>
4192    </summary>
4193    <div
4194      ref="menuDrawer"
4195      class="
4196        menu-drawer
4197        color-scheme-1
4198      "
4199    >
4200      <button
4201        class="button close-button menu-drawer__close-button"
4202        type="button"
4203        aria-label="Close"
4204        on:click="/close"
4205      >
4206        <span class="svg-wrapper header-drawer-icon header-drawer-icon--close"><svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
4207  <path d="M12 2L2 12" stroke="currentColor" stroke-width="var(--icon-stroke-width)" stroke-linecap="round" stroke-linejoin="round"/>
4208  <path d="M12 12L2 2" stroke="currentColor" stroke-width="var(--icon-stroke-width)" stroke-linecap="round" stroke-linejoin="round"/>
4209</svg>
4210</span>
4211      </button>
4212      <nav
4213        class="menu-drawer__navigation"
4214        style="--menu-top-level-font-family: var(--font-body--family);
4215--menu-top-level-font-size-desktop: 0.875rem; --menu-top-level-font-style: var(--font-body--style); --menu-top-level-font-weight: var(--font-body--weight); --menu-top-level-font-case:none;
4216
4217  --menu-top-level-font-size: var(--menu-font-2xl--size); --menu-top-level-font-line-height:
4218  var(--menu-font-2xl--line-height);
4219
4220--menu-top-level-font-color: var(--color-foreground); --menu-top-level-font-color-rgb: var(--color-foreground-rgb);
4221
4222--menu-parent-font-family: var(--font-body--family); --menu-parent-font-style:
4223var(--font-body--style); --menu-parent-font-weight: var(--font-body--weight); --menu-parent-font-case:
4224none;
4225
4226    --menu-parent-font-size: var(--menu-font-sm--size); --menu-parent-font-line-height:
4227    var(--menu-font-sm--line-height); --menu-parent-font-color: rgb(var(--color-foreground-rgb) /
4228    var(--opacity-subdued-text)); --menu-parent-active-font-color: var(--color-foreground);
4229  
4230--menu-child-font-family: var(--font-body--family); --menu-child-font-style:
4231var(--font-body--style); --menu-child-font-weight: var(--font-body--weight); --menu-child-font-case:
4232none;
4233
4234    --menu-child-font-size: var(--menu-font-md--size); --menu-child-font-line-height: var(--menu-font-md--line-height);
4235    --menu-child-font-color: var(--color-foreground); --menu-child-active-font-color: rgb(var(--color-foreground-rgb) /
4236    var(--opacity-subdued-text));
4237  
4238
4239        "
4240      >
4241        <ul
4242          class="menu-drawer__menu has-submenu"
4243          role="list"
4244        >
4245            
4246            
4247
4248              <li
4249                style="--menu-drawer-animation-index: 1;"
4250                class="menu-drawer__list-item--flat"
4251              >
4252                
4253<a
4254                    id="HeaderDrawer-menu"
4255                    href="/pages/menu-selector"
4256                    class="menu-drawer__menu-item menu-drawer__menu-item--mainlist menu-drawer__animated-element focus-inset"
4257                    
4258                  >
4259                    <span class="menu-drawer__menu-item-text wrap-text">MENU</span>
4260                  </a>
4261                
4262              </li>
4263              <li
4264                style="--menu-drawer-animation-index: 2;"
4265                class="menu-drawer__list-item--flat"
4266              >
4267                
4268<a
4269                    id="HeaderDrawer-how-it-works"
4270                    href="/pages/how-it-works"
4271                    class="menu-drawer__menu-item menu-drawer__menu-item--mainlist menu-drawer__animated-element focus-inset"
4272                    
4273                  >
4274                    <span class="menu-drawer__menu-item-text wrap-text">How It Works</span>
4275                  </a>
4276                
4277              </li>
4278              <li
4279                style="--menu-drawer-animation-index: 3;"
4280                class="menu-drawer__list-item--flat"
4281              >
4282                
4283<a
4284                    id="HeaderDrawer-plans"
4285                    href="/pages/plans"
4286                    class="menu-drawer__menu-item menu-drawer__menu-item--mainlist menu-drawer__animated-element focus-inset"
4287                    
4288                  >
4289                    <span class="menu-drawer__menu-item-text wrap-text">Plans</span>
4290                  </a>
4291                
4292              </li>
4293              <li
4294                style="--menu-drawer-animation-index: 4;"
4295                class="menu-drawer__list-item--flat"
4296              >
4297                
4298<a
4299                    id="HeaderDrawer-juniors"
4300                    href="/pages/juniors"
4301                    class="menu-drawer__menu-item menu-drawer__menu-item--mainlist menu-drawer__animated-element focus-inset"
4302                    
4303                  >
4304                    <span class="menu-drawer__menu-item-text wrap-text">Juniors</span>
4305                  </a>
4306                
4307              </li>
4308              <li
4309                style="--menu-drawer-animation-index: 5;"
4310                class="menu-drawer__list-item--flat"
4311              >
4312                
4313<a
4314                    id="HeaderDrawer-faq"
4315                    href="/pages/help-and-faq"
4316                    class="menu-drawer__menu-item menu-drawer__menu-item--mainlist menu-drawer__animated-element focus-inset"
4317                    
4318                  >
4319                    <span class="menu-drawer__menu-item-text wrap-text">FAQ</span>
4320                  </a>
4321                
4322              </li>
4323        </ul>
4324      </nav>
4325      <div
4326        class="menu-drawer__utility-links menu-drawer__animated-element"
4327        style="--menu-drawer-animation-index: 5;"
4328      >
4329        
4330        </div>
4331
4332      
4333    </div>
4334    <div
4335      class="menu-drawer__backdrop"
4336      on:click="header-drawer/close"
4337    ></div>
4338  </details>
4339</header-drawer>
4340
4341
4342
4343    </div>
4344
4345  
4346
4347
4348
4349
4350
4351            
4352        
4353      
4354        
4355          
4356              
4357
4358
4359
4360
4361<a
4362   
4363  href="https://fresherdinners.com.sg/pages/home-dinner-plan"
4364  class="size-style spacing-style header-logo"
4365  style="
4366    --size-style-width: ;--size-style-height: ;
4367    --padding-block-start: 0px;--padding-block-end: 0px;--padding-inline-start: 0px;--padding-inline-end: 0px;
4368    --font-family: var(--font-body--family);
4369    --font-style: var(--font-body--style);
4370    --font-weight: 600;
4371  "
4372  
4373>
4374  
4375
4376  <span
4377    class="header-logo__image-container header-logo__image-container--original"
4378    data-testid="header-logo"
4379  >
4380    FRESHER DINNERS
4381    
4382  </span>
4383
4384  
4385</a>
4386
4387
4388
4389
4390
4391            
4392        
4393      
4394        
4395          
4396              
4397            
4398        
4399      
4400    </div><div
4401      class="header__column header__column--right"
4402      data-testid="header-top-right"
4403    >
4404      
4405        
4406          
4407              
4408
4409
4410
4411    
4412
4413    
4414
4415    <header-menu
4416      ref="headerMenu"
4417      class="header-menu"
4418      
4419      data-hydration-key="header-menu"
4420    >
4421      <div class="header-menu__inner">
4422        <nav
4423          class="menu-list"
4424          style="--menu-top-level-font-family: var(--font-body--family);
4425--menu-top-level-font-size-desktop: 0.875rem; --menu-top-level-font-style: var(--font-body--style); --menu-top-level-font-weight: var(--font-body--weight); --menu-top-level-font-case:none;
4426
4427  --menu-top-level-font-size: var(--menu-font-sm--size); --menu-top-level-font-line-height:
4428  var(--menu-font-sm--line-height);
4429
4430--menu-top-level-font-color: var(--color-foreground); --menu-top-level-font-color-rgb: var(--color-foreground-rgb);
4431"
4432        >
4433          
4434          <overflow-list
4435  
4436    ref="overflowMenu"
4437  
4438  
4439    class="overflow-menu color-scheme-matches-parent"
4440  
4441  
4442    minimum-items="2"
4443  
4444  
4445    data-testid="header-menu-overflow-list"
4446  
4447  
4448    data-skip-node-update
4449  
4450>
4451  <template shadowrootmode="open">
4452    <link href="//fresherdinners.com.sg/cdn/shop/t/2/assets/overflow-list.css?v=78235234226353326431775201778" rel="stylesheet" type="text/css" media="all" />
4453
4454    <ul part="list">
4455      <slot></slot>
4456      <slot
4457        name="more"
4458        part="more"
4459        hidden
4460        
4461      >
4462        <li
4463          part="more"
4464        >
4465          <button
4466            class="button"
4467            type="button"
4468            tabindex="0"
4469          >
4470            More
4471          </button>
4472        </li>
4473      </slot>
4474      <li
4475        part="placeholder"
4476        hidden
4477      ></li>
4478    </ul>
4479
4480    <div part="overflow">
4481      <ul part="overflow-list">
4482        <slot name="overflow"></slot>
4483      </ul>
4484    </div>
4485  </template>
4486
4487  
4488      
4489        <li
4490          role="presentation"
4491          class="menu-list__list-item"
4492          on:focus="/activate"
4493          on:blur="/deactivate"
4494          on:pointerenter="/activate"
4495          on:pointerleave="/deactivate"
4496        >
4497          <a
4498            href="/pages/menu-selector"
4499            data-skip-node-update="true"
4500            class="menu-list__link"ref="menuitem"
4501          >
4502            <span class="menu-list__link-title 1">MENU</span>
4503          </a></li>
4504      
4505        <li
4506          role="presentation"
4507          class="menu-list__list-item"
4508          on:focus="/activate"
4509          on:blur="/deactivate"
4510          on:pointerenter="/activate"
4511          on:pointerleave="/deactivate"
4512        >
4513          <a
4514            href="/pages/how-it-works"
4515            data-skip-node-update="true"
4516            class="menu-list__link"ref="menuitem"
4517          >
4518            <span class="menu-list__link-title 1">How It Works</span>
4519          </a></li>
4520      
4521        <li
4522          role="presentation"
4523          class="menu-list__list-item"
4524          on:focus="/activate"
4525          on:blur="/deactivate"
4526          on:pointerenter="/activate"
4527          on:pointerleave="/deactivate"
4528        >
4529          <a
4530            href="/pages/plans"
4531            data-skip-node-update="true"
4532            class="menu-list__link"ref="menuitem"
4533          >
4534            <span class="menu-list__link-title 1">Plans</span>
4535          </a></li>
4536      
4537        <li
4538          role="presentation"
4539          class="menu-list__list-item"
4540          on:focus="/activate"
4541          on:blur="/deactivate"
4542          on:pointerenter="/activate"
4543          on:pointerleave="/deactivate"
4544        >
4545          <a
4546            href="/pages/juniors"
4547            data-skip-node-update="true"
4548            class="menu-list__link"ref="menuitem"
4549          >
4550            <span class="menu-list__link-title 1">Juniors</span>
4551          </a></li>
4552      
4553        <li
4554          role="presentation"
4555          class="menu-list__list-item"
4556          on:focus="/activate"
4557          on:blur="/deactivate"
4558          on:pointerenter="/activate"
4559          on:pointerleave="/deactivate"
4560        >
4561          <a
4562            href="/pages/help-and-faq"
4563            data-skip-node-update="true"
4564            class="menu-list__link"ref="menuitem"
4565          >
4566            <span class="menu-list__link-title 1">FAQ</span>
4567          </a></li>
4568      
4569
4570  <!-- Static Profile menu item ends here -->
4571
4572 <li
4573    role="presentation"
4574    class="menu-list__list-item menu-list__list-item--profile"
4575    on:focus="/activate"
4576    on:blur="/deactivate"
4577    on:pointerenter="/activate"
4578    on:pointerleave="/deactivate"
4579  >
4580    <a
4581      href="/pages/profile"
4582      data-skip-node-update="true"
4583      class="menu-list__link"
4584      ref="menuitem"
4585    >
4586      <span class="menu-list__link-title">
4587       <svg
4588  width="22"
4589  height="22"
4590  viewBox="0 0 24 24"
4591  fill="none"
4592  xmlns="http://www.w3.org/2000/svg"
4593  aria-hidden="true"
4594  focusable="false"
4595>
4596  <circle
4597    cx="12"
4598    cy="8"
4599    r="4"
4600    stroke="currentColor"
4601    stroke-width="1.8"
4602  />
4603  <path
4604    d="M4.5 20C4.5 16.4 7.5 13.5 12 13.5C16.5 13.5 19.5 16.4 19.5 20"
4605    stroke="currentColor"
4606    stroke-width="1.8"
4607    stroke-linecap="round"
4608  />
4609</svg>
4610      </span>
4611    </a>
4612  </li>
4613
4614  <!-- Static Profile menu item ends here -->
4615
4616      <li
4617        class="menu-list__list-item"
4618        role="presentation"
4619        slot="more"
4620        on:focus="/activate"
4621        on:blur="/deactivate"
4622        on:pointerenter="/activate"
4623        on:pointerleave="/deactivate"
4624      >
4625        <button role="menuitem" class="menu-list__link button-unstyled">
4626          <span class="menu-list__link-title">More</span>
4627        </button>
4628        
4629      </li>
4630    
4631</overflow-list>
4632
4633        </nav>
4634      </div>
4635
4636      
4636<script
4637        src="//fresherdinners.com.sg/cdn/shop/t/2/assets/header-menu.js?v=181417698387236267271775201778"
4638        type="module"
4639        fetchpriority="low"
4640      ></script>
4640
4641    </header-menu>
4642
4643
4644
4645
4646
4647
4648            
4649        
4650      
4651        
4652          
4653              
4654  
4655  
4656
4657            
4658        
4659      
4660        
4661          
4662              
4663
4664
4665
4666            
4667        
4668      
4669        
4670          
4671              
4671<script
4672  type="module"
4673  src="//fresherdinners.com.sg/cdn/shop/t/2/assets/cart-icon.js?v=157241182139685326961775201778"
4674  fetchpriority="low"
4675></script>
4675
4676
4677
4678
4679<header-actions>
4680  
4681  <div
4682    role="presentation"
4683    class="menu-list__list-item menu-list__list-item--profile mobileacount"
4684    on:focus="/activate"
4685    on:blur="/deactivate"
4686    on:pointerenter="/activate"
4687    on:pointerleave="/deactivate"
4688  >
4689    <a
4690      href="/pages/profile"
4691      data-skip-node-update="true"
4692      class="menu-list__link"
4693      ref="menuitem"
4694    >
4695      <span class="menu-list__link-title">
4696       <svg
4697  width="22"
4698  height="22"
4699  viewBox="0 0 24 24"
4700  fill="none"
4701  xmlns="http://www.w3.org/2000/svg"
4702  aria-hidden="true"
4703  focusable="false"
4704>
4705  <circle
4706    cx="12"
4707    cy="8"
4708    r="4"
4709    stroke="currentColor"
4710    stroke-width="1.8"
4711  />
4712  <path
4713    d="M4.5 20C4.5 16.4 7.5 13.5 12 13.5C16.5 13.5 19.5 16.4 19.5 20"
4714    stroke="currentColor"
4715    stroke-width="1.8"
4716    stroke-linecap="round"
4717  />
4718</svg>
4719      </span>
4720    </a>
4721  </div>
4722
4723  
4724    
4724<script
4725      src="//fresherdinners.com.sg/cdn/shop/t/2/assets/cart-drawer.js?v=60516533948368149871775201778"
4726      type="module"
4727      fetchpriority="low"
4728    ></script>
4728
4729
4730    
4731
4732    <cart-drawer-component
4733      class="cart-drawer"
4734      
4735      
4736    >
4737      <template id="empty-cart-template">
4738        
4739      <div class="cart-drawer__header">
4740        <button
4741          ref="closeButton"
4742          on:click="cart-drawer-component/close"
4743          class="button close-button cart-drawer__close-button button-unstyled"
4744          aria-label="Close dialog"
4745        >
4746          <span class="svg-wrapper"><svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
4747  <path d="M12 2L2 12" stroke="currentColor" stroke-width="var(--icon-stroke-width)" stroke-linecap="round" stroke-linejoin="round"/>
4748  <path d="M12 12L2 2" stroke="currentColor" stroke-width="var(--icon-stroke-width)" stroke-linecap="round" stroke-linejoin="round"/>
4749</svg>
4750</span>
4751        </button>
4752      </div>
4753
4754      <div
4755        class="cart-drawer__content"
4756        aria-label="Cart"
4757      >
4758        <h2
4759          class="cart-drawer__heading h4 cart-drawer__heading--empty"
4760          id="cart-drawer-heading-empty"
4761        >
4762          Your cart is empty
4763        </h2>
4764
4765        <div class="cart-drawer__items">
4766          
4767
4768
4769
4770<script
4771  src="//fresherdinners.com.sg/cdn/shop/t/2/assets/component-cart-items.js?v=16199507049899445991775201778"
4772  type="module"
4773  fetchpriority="low"
4774></script>
vendor: 1 bytes, line 4774
4774
4775<script
4776  src="//fresherdinners.com.sg/cdn/shop/t/2/assets/component-cart-quantity-selector.js?v=105130809908858639751775201778"
4777  type="module"
4778  fetchpriority="low"
4779></script>
vendor: 1 bytes, line 4779
4779
4780<script
4781  src="//fresherdinners.com.sg/cdn/shop/t/2/assets/volume-pricing-info.js?v=94479640769665442661775201778"
4782  type="module"
4783  fetchpriority="low"
4784></script>
4784
4785
4786<div
4787  
4788  class="cart-items__wrapper"
4789  
4790>
4791  
4792<a
4793      class="button cart-items__empty-button"
4794      href="/collections/all"
4795    >
4796      <span class="button-text">
4797        Continue shopping
4798      </span>
4799    </a></div>
4800
4801
4802
4803        </div>
4804      </div>
4805    
4806      </template>
4807      <button
4808        class="button header-actions__action button-unstyled"
4809        on:click="/open"
4810        aria-haspopup="dialog"
4811        aria-label="Cart"
4812        aria-describedby="cart-bubble-text"
4813        data-testid="cart-drawer-trigger"
4814      >
4815        
4816  <cart-icon
4817    class="
4818      header-actions__cart-icon
4819      
4820    "
4821    data-testid="cart-icon"
4822  >
4823    <span
4824      class="svg-wrapper"
4825      aria-hidden="true"
4826    >
4827      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="none"><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="var(--icon-stroke-width)" d="M3.392 6.875h13.216v8.016c0 .567-.224 1.112-.624 1.513-.4.402-.941.627-1.506.627H5.522a2.13 2.13 0 0 1-1.506-.627 2.15 2.15 0 0 1-.624-1.513zM8.818 2.969h2.333c.618 0 1.211.247 1.649.686a2.35 2.35 0 0 1 .683 1.658v1.562H6.486V5.313c0-.622.246-1.218.683-1.658a2.33 2.33 0 0 1 1.65-.686"/></svg>
4828
4829    </span>
4830
4831    <div
4832  ref="cartBubble"
4833  class="cart-bubble visually-hidden"
4834  
4835  
4836    data-maintain-ratio
4837  
4838>
4839  <span class="cart-bubble__background"></span>
4840  <span
4841    ref="cartBubbleText"
4842    id="cart-bubble-text"
4843    class="cart-bubble__text"
4844    
4845      role="status"
4846    
4847  >
4848    <span class="visually-hidden">Total items in cart: 0
4849    </span>
4850    <span
4851      class="cart-bubble__text-count hidden"
4852      ref="cartBubbleCount"
4853      aria-hidden="true"
4854      data-testid="cart-bubble"
4855    >
48560</span>
4857  </span>
4858</div>
4859
4860  </cart-icon>
4861
4862      </button>
4863
4864      <dialog
4865        ref="dialog"
4866        class="cart-drawer__dialog dialog-modal dialog-drawer color-scheme-1 cart-drawer--empty"
4867        aria-labelledby="cart-drawer-heading-empty"
4868        scroll-lock
4869        cart-summary-sticky="true"
4870      >
4871        <div
4872          class="cart-drawer__inner"
4873          data-hydration-key="cart-drawer-inner"
4874        >
4875          <cart-items-component
4876            class="cart-items-component"
4877            data-drawer
4878            data-section-id="sections--21415153402069__header_section"
4879          >
4880      <div class="cart-drawer__header">
4881        <button
4882          ref="closeButton"
4883          on:click="cart-drawer-component/close"
4884          class="button close-button cart-drawer__close-button button-unstyled"
4885          aria-label="Close dialog"
4886        >
4887          <span class="svg-wrapper"><svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
4888  <path d="M12 2L2 12" stroke="currentColor" stroke-width="var(--icon-stroke-width)" stroke-linecap="round" stroke-linejoin="round"/>
4889  <path d="M12 12L2 2" stroke="currentColor" stroke-width="var(--icon-stroke-width)" stroke-linecap="round" stroke-linejoin="round"/>
4890</svg>
4891</span>
4892        </button>
4893      </div>
4894
4895      <div
4896        class="cart-drawer__content"
4897        aria-label="Cart"
4898      >
4899        <h2
4900          class="cart-drawer__heading h4 cart-drawer__heading--empty"
4901          id="cart-drawer-heading-empty"
4902        >
4903          Your cart is empty
4904        </h2>
4905
4906        <div class="cart-drawer__items">
4907          
4908
4909
4910
4911<script
4912  src="//fresherdinners.com.sg/cdn/shop/t/2/assets/component-cart-items.js?v=16199507049899445991775201778"
4913  type="module"
4914  fetchpriority="low"
4915></script>
vendor: 1 bytes, line 4915
4915
4916<script
4917  src="//fresherdinners.com.sg/cdn/shop/t/2/assets/component-cart-quantity-selector.js?v=105130809908858639751775201778"
4918  type="module"
4919  fetchpriority="low"
4920></script>
vendor: 1 bytes, line 4920
4920
4921<script
4922  src="//fresherdinners.com.sg/cdn/shop/t/2/assets/volume-pricing-info.js?v=94479640769665442661775201778"
4923  type="module"
4924  fetchpriority="low"
4925></script>
4925
4926
4927<div
4928  
4929  class="cart-items__wrapper"
4930  
4931>
4932  
4933<a
4934      class="button cart-items__empty-button"
4935      href="/collections/all"
4936    >
4937      <span class="button-text">
4938        Continue shopping
4939      </span>
4940    </a></div>
4941
4942
4943
4944        </div>
4945      </div>
4946    
4947</cart-items-component>
4948        </div>
4949      </dialog>
4950    </cart-drawer-component>
4951  
4952<a
4953  href="/pages/plans"
4954  class="custom-btn"
4955>
4956  See Plans & Pricing
4957</a>
4958
4959</header-actions>
4960
4961
4962  <style>
4963.custom-btn {
4964  font-family: Kiona-bold, 'Josefin Sans', sans-serif;
4965  font-size: 14px;
4966  letter-spacing: 0.1em;
4967  color: #ffffff;
4968  background: #cc5a30;
4969  padding: 0.6rem 1.6rem;
4970  text-decoration: none;
4971  transition: background 0.2s ease;
4972  display: inline-block;
4973  font-weight: 700;
4974  width: max-content;
4975  text-align: center;
4976}
4977.custom-btn:hover {
4978  background: #b94e27;
4979}
4980.header cart-drawer-component.cart-drawer {
4981    display: none;
4982}
4983</style>
4984
4985          
4986        
4987      
4988    </div>
4989        </div>
4990      </div>
4991    
4992  
4993    
4994
4995    
4996
4997    
4998    
4999  
5000
5001  
5002</header-component>
5003
5004<script
5005  src="//fresherdinners.com.sg/cdn/shop/t/2/assets/header.js?v=36718054510661947891775201778"
5006  type="module"
5007></script>
5007
5008
5009<script>
5010  window.addEventListener('scroll', function () {
5011    const header = document.querySelector('.header__row--top');
5012
5013    if (!header) return;
5014
5015    if (window.scrollY > 0) {
5016        header.classList.add('is-active');
5017    } else {
5018        header.classList.remove('is-active');
5019    }
5020});
5021</script>
5021
5022
5023
5024
5025
5026
5027  
5027<script type="module">
5028    import { hydrate } from '@theme/section-hydration';
5029    const url = new URL(window.location.href);
5030    url.searchParams.delete('page');
5031    hydrate('sections--21415153402069__header_section', url);
5032  </script>
5032
5033
5034
5035</header><div id="shopify-section-sections--21415153402069__17760573989f7d0ab2" class="shopify-section shopify-section-group-header-group section-wrapper">
5036
5037
5038
5039<div class="section-background color-scheme-1"></div>
5040<div
5041  class="section  section--page-width color-scheme-1"
5042  data-testid="ui-test-section"
5043
5044  
5045
5046  style="
5047    
5048
5049    
5050  "
5051>
5052  <div class="custom-section-background">
5053    
5054
5055
5056
5057  </div>
5058
5059  <div
5060    class="border-style custom-section-content"
5061    style="--border-width: 1px; --border-style: none; --border-color:
5062rgb(var(--color-border-rgb) / 1.0); --border-radius:
50630px; 
5064"
5065  >
5066    
5067
5068    <div
5069      class="
5070        
5071        spacing-style
5072        layout-panel-flex
5073        layout-panel-flex--column
5074        section-content-wrapper
5075         mobile-column
5076      "
5077      style="
5078        --flex-direction: column; --flex-wrap: nowrap; --flex-wrap-mobile: wrap;
5079
5080--gap: 12px;
5081
5082--horizontal-alignment: flex-start; --vertical-alignment: center;
5083--vertical-alignment-mobile: center;
5084
5085        --padding-block-start: 0px;--padding-block-end: 0px;
5086      "
5087      data-testid="section-content"
5088    >
5089      
5090  
5091
5092    </div>
5093  </div>
5094</div>
5095
5096
5097
5098
5099
5100</div><div id="shopify-section-sections--21415153402069__177605752264a532fd" class="shopify-section shopify-section-group-header-group section-wrapper">
5101
5102
5103
5104<div class="section-background color-scheme-1"></div>
5105<div
5106  class="section  section--page-width color-scheme-1"
5107  data-testid="ui-test-section"
5108
5109  
5110
5111  style="
5112    
5113
5114    
5115  "
5116>
5117  <div class="custom-section-background">
5118    
5119
5120
5121
5122  </div>
5123
5124  <div
5125    class="border-style custom-section-content"
5126    style="--border-width: 1px; --border-style: none; --border-color:
5127rgb(var(--color-border-rgb) / 1.0); --border-radius:
51280px; 
5129"
5130  >
5131    
5132
5133    <div
5134      class="
5135        
5136        spacing-style
5137        layout-panel-flex
5138        layout-panel-flex--column
5139        section-content-wrapper
5140         mobile-column
5141      "
5142      style="
5143        --flex-direction: column; --flex-wrap: nowrap; --flex-wrap-mobile: wrap;
5144
5145--gap: 12px;
5146
5147--horizontal-alignment: flex-start; --vertical-alignment: center;
5148--vertical-alignment-mobile: center;
5149
5150        --padding-block-start: 0px;--padding-block-end: 0px;
5151      "
5152      data-testid="section-content"
5153    >
5154      
5155  
5156
5157    </div>
5158  </div>
5159</div>
5160
5161
5162
5163
5164
5165</div><div id="shopify-section-sections--21415153402069__17760578677fe58d4e" class="shopify-section shopify-section-group-header-group section-wrapper">
5166
5167
5168
5169<div class="section-background color-scheme-1"></div>
5170<div
5171  class="section  section--page-width color-scheme-1"
5172  data-testid="ui-test-section"
5173
5174  
5175
5176  style="
5177    
5178
5179    
5180  "
5181>
5182  <div class="custom-section-background">
5183    
5184
5185
5186
5187  </div>
5188
5189  <div
5190    class="border-style custom-section-content"
5191    style="--border-width: 1px; --border-style: none; --border-color:
5192rgb(var(--color-border-rgb) / 1.0); --border-radius:
51930px; 
5194"
5195  >
5196    
5197
5198    <div
5199      class="
5200        
5201        spacing-style
5202        layout-panel-flex
5203        layout-panel-flex--column
5204        section-content-wrapper
5205         mobile-column
5206      "
5207      style="
5208        --flex-direction: column; --flex-wrap: nowrap; --flex-wrap-mobile: wrap;
5209
5210--gap: 12px;
5211
5212--horizontal-alignment: flex-start; --vertical-alignment: center;
5213--vertical-alignment-mobile: center;
5214
5215        --padding-block-start: 0px;--padding-block-end: 0px;
5216      "
5217      data-testid="section-content"
5218    >
5219      
5220  
5221
5222    </div>
5223  </div>
5224</div>
5225
5226
5227
5228
5229
5230</div><div id="shopify-section-sections--21415153402069__17760595209405dc20" class="shopify-section shopify-section-group-header-group section-wrapper">
5231
5232
5233
5234<div class="section-background color-scheme-1"></div>
5235<div
5236  class="section  section--page-width color-scheme-1"
5237  data-testid="ui-test-section"
5238
5239  
5240
5241  style="
5242    
5243
5244    
5245  "
5246>
5247  <div class="custom-section-background">
5248    
5249
5250
5251
5252  </div>
5253
5254  <div
5255    class="border-style custom-section-content"
5256    style="--border-width: 1px; --border-style: none; --border-color:
5257rgb(var(--color-border-rgb) / 1.0); --border-radius:
52580px; 
5259"
5260  >
5261    
5262
5263    <div
5264      class="
5265        
5266        spacing-style
5267        layout-panel-flex
5268        layout-panel-flex--column
5269        section-content-wrapper
5270         mobile-column
5271      "
5272      style="
5273        --flex-direction: column; --flex-wrap: nowrap; --flex-wrap-mobile: wrap;
5274
5275--gap: 12px;
5276
5277--horizontal-alignment: flex-start; --vertical-alignment: center;
5278--vertical-alignment-mobile: center;
5279
5280        --padding-block-start: 0px;--padding-block-end: 0px;
5281      "
5282      data-testid="section-content"
5283    >
5284      
5285  
5286
5287    </div>
5288  </div>
5289</div>
5290
5291
5292
5293
5294
5295</div><div id="shopify-section-sections--21415153402069__17760616087c9efc29" class="shopify-section shopify-section-group-header-group section-wrapper">
5296
5297
5298
5299<div class="section-background color-scheme-1"></div>
5300<div
5301  class="section  section--page-width color-scheme-1"
5302  data-testid="ui-test-section"
5303
5304  
5305
5306  style="
5307    
5308
5309    
5310  "
5311>
5312  <div class="custom-section-background">
5313    
5314
5315
5316
5317  </div>
5318
5319  <div
5320    class="border-style custom-section-content"
5321    style="--border-width: 1px; --border-style: none; --border-color:
5322rgb(var(--color-border-rgb) / 1.0); --border-radius:
53230px; 
5324"
5325  >
5326    
5327
5328    <div
5329      class="
5330        
5331        spacing-style
5332        layout-panel-flex
5333        layout-panel-flex--column
5334        section-content-wrapper
5335         mobile-column
5336      "
5337      style="
5338        --flex-direction: column; --flex-wrap: nowrap; --flex-wrap-mobile: wrap;
5339
5340--gap: 12px;
5341
5342--horizontal-alignment: flex-start; --vertical-alignment: center;
5343--vertical-alignment-mobile: center;
5344
5345        --padding-block-start: 0px;--padding-block-end: 0px;
5346      "
5347      data-testid="section-content"
5348    >
5349      
5350  
5351
5352    </div>
5353  </div>
5354</div>
5355
5356
5357
5358
5359
5360</div><div id="shopify-section-sections--21415153402069__1776063829d038887f" class="shopify-section shopify-section-group-header-group section-wrapper">
5361
5362
5363
5364<div class="section-background color-scheme-1"></div>
5365<div
5366  class="section  section--page-width color-scheme-1"
5367  data-testid="ui-test-section"
5368
5369  
5370
5371  style="
5372    
5373
5374    
5375  "
5376>
5377  <div class="custom-section-background">
5378    
5379
5380
5381
5382  </div>
5383
5384  <div
5385    class="border-style custom-section-content"
5386    style="--border-width: 1px; --border-style: none; --border-color:
5387rgb(var(--color-border-rgb) / 1.0); --border-radius:
53880px; 
5389"
5390  >
5391    
5392
5393    <div
5394      class="
5395        
5396        spacing-style
5397        layout-panel-flex
5398        layout-panel-flex--column
5399        section-content-wrapper
5400         mobile-column
5401      "
5402      style="
5403        --flex-direction: column; --flex-wrap: nowrap; --flex-wrap-mobile: wrap;
5404
5405--gap: 12px;
5406
5407--horizontal-alignment: flex-start; --vertical-alignment: center;
5408--vertical-alignment-mobile: center;
5409
5410        --padding-block-start: 0px;--padding-block-end: 0px;
5411      "
5412      data-testid="section-content"
5413    >
5414      
5415  
5416
5417    </div>
5418  </div>
5419</div>
5420
5421
5422
5423
5424
5425</div><div id="shopify-section-sections--21415153402069__1776159488bfa156b1" class="shopify-section shopify-section-group-header-group section-wrapper">
5426
5427
5428
5429<div class="section-background color-scheme-1"></div>
5430<div
5431  class="section  section--page-width color-scheme-1"
5432  data-testid="ui-test-section"
5433
5434  
5435
5436  style="
5437    
5438
5439    
5440  "
5441>
5442  <div class="custom-section-background">
5443    
5444
5445
5446
5447  </div>
5448
5449  <div
5450    class="border-style custom-section-content"
5451    style="--border-width: 1px; --border-style: none; --border-color:
5452rgb(var(--color-border-rgb) / 1.0); --border-radius:
54530px; 
5454"
5455  >
5456    
5457
5458    <div
5459      class="
5460        
5461        spacing-style
5462        layout-panel-flex
5463        layout-panel-flex--column
5464        section-content-wrapper
5465         mobile-column
5466      "
5467      style="
5468        --flex-direction: column; --flex-wrap: nowrap; --flex-wrap-mobile: wrap;
5469
5470--gap: 12px;
5471
5472--horizontal-alignment: flex-start; --vertical-alignment: center;
5473--vertical-alignment-mobile: center;
5474
5475        --padding-block-start: 0px;--padding-block-end: 0px;
5476      "
5477      data-testid="section-content"
5478    >
5479      
5480  
5481
5482    </div>
5483  </div>
5484</div>
5485
5486
5487
5488
5489
5490</div><div id="shopify-section-sections--21415153402069__1782990040dca571e4" class="shopify-section shopify-section-group-header-group section-wrapper">
5491
5492
5493
5494<div class="section-background color-scheme-1"></div>
5495<div
5496  class="section  section--page-width color-scheme-1"
5497  data-testid="ui-test-section"
5498
5499  
5500
5501  style="
5502    
5503
5504    
5505  "
5506>
5507  <div class="custom-section-background">
5508    
5509
5510
5511
5512  </div>
5513
5514  <div
5515    class="border-style custom-section-content"
5516    style="--border-width: 1px; --border-style: none; --border-color:
5517rgb(var(--color-border-rgb) / 1.0); --border-radius:
55180px; 
5519"
5520  >
5521    
5522
5523    <div
5524      class="
5525        
5526        spacing-style
5527        layout-panel-flex
5528        layout-panel-flex--column
5529        section-content-wrapper
5530         mobile-column
5531      "
5532      style="
5533        --flex-direction: column; --flex-wrap: nowrap; --flex-wrap-mobile: wrap;
5534
5535--gap: 12px;
5536
5537--horizontal-alignment: flex-start; --vertical-alignment: center;
5538--vertical-alignment-mobile: center;
5539
5540        --padding-block-start: 0px;--padding-block-end: 0px;
5541      "
5542      data-testid="section-content"
5543    >
5544      
5545  <div id="shopify-block-AdDlwb0VMejFJaDZMV__credit_system_low_credit_banner_Vqqzzf" class="shopify-block shopify-app-block"><!-- BEGIN app snippet: low-credit-banner --><link href="//cdn.shopify.com/extensions/01a0c3d1-9ffb-7fc0-a40e-7ef0b76a0dd3/credit-system-1119/assets/collection-extension.css" rel="stylesheet" type="text/css" media="all" />
5546<script src="https://cdn.shopify.com/extensions/01a0c3d1-9ffb-7fc0-a40e-7ef0b76a0dd3/credit-system-1119/assets/low-credit-banner.js" defer></script>
5546
5547
5548
5549<!-- END app snippet -->
5550
5551</div>
5552
5553    </div>
5554  </div>
5555</div>
5556
5557
5558
5559
5560
5561</div>
5562<!-- END sections: header-group -->
5563    </div>
5564
5565
5566
5567
5568    
5569    
5570
5571
5572
5573    
5573<script>
5574      // Inline header height and menu style calculations to prevent layout shift
5575      // Note: Updates in calculateHeaderGroupHeight(), updateTransparentHeaderOffset() and setHeaderMenuStyle() utilities.js should be kept in sync with this function
5576      (function setHeaderHeighCustomProperties() {
5577        /*
5578         * Header calculation functions for maintaining CSS variables
5579         * Mimic calculateHeaderGroupHeight() in utilities.js
5580         */
5581        const header = document.querySelector('header-component');
5582        const headerGroup = document.querySelector('#header-group');
5583        const hasHeaderSection = headerGroup?.querySelector('.header-section');
5584
5585        if (!header || !headerGroup) return;
5586
5587        const headerHeight = header.offsetHeight;
5588
5589        // Calculate the total height of the header group
5590        let headerGroupHeight = 0;
5591        const children = headerGroup.children;
5592        for (let i = 0; i < children.length; i++) {
5593          const element = children[i];
5594          if (element === header || !(element instanceof HTMLElement)) continue;
5595          headerGroupHeight += element.offsetHeight;
5596        }
5597
5598        // Check for transparent header special case
5599        if (header.hasAttribute('transparent') && header.parentElement?.nextElementSibling) {
5600          headerGroupHeight += headerHeight;
5601        }
5602
5603        // Set CSS variables
5604        document.body.style.setProperty('--header-height', `${headerHeight}px`);
5605        document.body.style.setProperty('--header-group-height', `${headerGroupHeight}px`);
5606
5607        /**
5608         * Updates CSS custom properties for transparent header offset calculation
5609         * Mimic updateTransparentHeaderOffset() in utilities.js
5610         */
5611
5612        if (!hasHeaderSection || !header?.hasAttribute('transparent')) {
5613          document.body.style.setProperty('--transparent-header-offset-boolean', '0');
5614          return;
5615        }
5616
5617        const hasImmediateSection = hasHeaderSection.nextElementSibling?.classList.contains('shopify-section');
5618
5619        const shouldApplyOffset = !hasImmediateSection ? '1' : '0';
5620        document.body.style.setProperty('--transparent-header-offset-boolean', shouldApplyOffset);
5621      })();
5622
5623      (function setHeaderMenuStyle() {
5624        const headerComponent = document.querySelector('#header-component');
5625        if (headerComponent) {
5626          const isTouchDevice = 'ontouchstart' in window && navigator.maxTouchPoints > 0;
5627          const overflowList = headerComponent?.querySelector('overflow-list');
5628          const hasReachedMinimum = overflowList && overflowList.hasAttribute('minimum-reached');
5629          headerComponent.dataset.menuStyle = isTouchDevice || hasReachedMinimum ? 'drawer' : 'menu';
5630        }
5631      })();
5632    </script>
5632
5633
5634    <main
5635      id="MainContent"
5636      class="content-for-layout"
5637      role="main"
5638      data-page-transition-enabled="false"
5639      data-product-transition="false"
5640      data-template="index"
5641    >
5642      <section id="shopify-section-template--21415158382805__fd_app_section_mYAtPN" class="shopify-section"><style>
5643      #fd-sec-template--21415158382805__fd_app_section_mYAtPN {
5644        --fd-splash-bg:   #faf6f0;
5645        --fd-splash-text: #2b2418;
5646        --fd-btn-bg:      #c4623a;
5647        --fd-btn-text:    #ffffff;
5648        --fd-accent:      #aeaeae;
5649        --fd-charcoal:    #2B2418;
5650        --fd-muted:       #8c7b6b;
5651        --fd-white:       #faf6f0;
5652        --fd-border:      #E0D8CE;
5653      }
5654      .fds-wrap {
5655        background-image: url('https://cdn.shopify.com/s/files/1/0793/5131/6693/files/food-hero-welcome-iNjTnbbpdDDXdA3rhHMo3P.webp?v=1779280207');
5656        background-position: center;
5657        background-size: cover;
5658        width: 100%;
5659        height: 100vh;
5660        position:relative;
5661    }
5662    .fds-wrap::before {
5663        content: "";
5664        width: 100%;
5665        height:100%;
5666        background: linear-gradient(rgba(0, 0, 0, 0.05) 0%, rgba(0, 0, 0, 0.3) 40%, rgba(0, 0, 0, 0.75) 75%, rgba(0, 0, 0, 0.88) 100%);
5667        position: absolute;
5668        left: 0;
5669        bottom: 0;
5670        z-index: 0;
5671        /* opacity: 0.8; */
5672    }
5673    .fds-wrap {
5674      min-height: 100%;
5675     
5676         display: flex;
5677        align-items: center;
5678        justify-content: center; 
5679        /* padding: 20px; */
5680    }
5681    .fds-phone {
5682        width: 100%;
5683        overflow: hidden;
5684        position: relative;
5685        display: flex;
5686        flex-direction: column;
5687        height:100%;
5688    }
5689     
5690    
5691  .fds-splash {
5692       flex: 1; 
5693      display: flex;
5694      flex-direction: column;
5695      align-items: center;
5696      justify-content: end;
5697      padding: 70px 40px;
5698      gap: 20px;
5699      transition: opacity .4s ease, transform .4s ease;
5700      height: 100%;
5701  }
5702    .fds-splash.fds-hidden {
5703      opacity: 0; transform: scale(.96); pointer-events: none;
5704      position: absolute; inset: 0;
5705    }
5706
5707    .fds-logo {
5708      width: 80px; height: 80px; background: var(--fd-btn-bg);
5709      border-radius: 22px;
5710      display: flex; align-items: center; justify-content: center;
5711      box-shadow: 0 8px 24px rgba(0,0,0,.2);
5712      animation: fdsFloat 3s ease-in-out infinite;
5713      display:none;
5714    }
5715    @keyframes fdsFloat { 0%,100%{transform:translateY(0)} 50%{transform:translateY(-6px)} }
5716    .fds-logo img { width: 44px; height: 44px; object-fit: contain; }
5717    .fds-logo svg { width: 40px; height: 40px; }
5718    .fds-brand {
5719        font-family: kiona, sans-serif;
5720        text-transform: uppercase;
5721        font-size: 34px;
5722        color: rgb(255 255 255);
5723        text-align: center;
5724        line-height: 1.1;
5725        margin-bottom: 5px;
5726        letter-spacing: 0.094em;
5727        font-weight: 800;
5728    }
5729    .fds-tagline {
5730        font-family: Bitter, serif;
5731        text-align: center;
5732        font-size: 16px;
5733        margin: 0px;
5734        color: #d9d9d9;
5735        font-weight: 600;
5736    }
5737    .fds-btn-cta {
5738        background: var(--fd-btn-bg);
5739        color: var(--fd-btn-text);
5740        border-width: medium;
5741        border-style: none;
5742        border-color: currentcolor;
5743        border-image: initial;
5744        border-radius: 2px;
5745        padding: 16px 48px;
5746        font-family: kiona, sans-serif;
5747        text-transform: uppercase;
5748        font-size: 16px;
5749        letter-spacing: 0.094em;
5750        cursor: pointer;
5751        box-shadow: rgba(196, 98, 58, 0.35) 0px 4px 16px;
5752        opacity: 1;
5753        transform: none;
5754        font-weight: 600;
5755    }
5756    .fds-btn-cta:hover  { filter: brightness(1.08); }
5757    .fds-btn-cta:active { transform: scale(.97); }
5758
5759    .fds-signin {
5760        color: #ffffff;
5761        font-family: Bitter, serif;
5762        font-size: 14px;
5763        margin: 0;
5764    }
5765    .fds-signin a { color: var(--fd-accent); font-weight: 600; text-decoration: underline; }
5766    .fds-signin a:hover { text-decoration: none; }
5767
5768    .fds-signin a:focus, .fds-signin a:active {
5769      color:#fff;
5770    }
5771                /* ── SLIDER ── */
5772    .fds-slider {
5773    flex: 1;
5774    display: none;
5775    flex-direction: column;
5776      background: var(--fd-white);
5777    overflow: hidden;
5778    }
5779    .fds-slider.fds-on { display: flex; }
5780
5781    .fds-viewport { flex: 1; display: flex; overflow: hidden; position: relative; }
5782    .fds-track {
5783      display: flex; width: 100%;
5784      transition: transform .45s cubic-bezier(.65,0,.35,1); will-change: transform;
5785    }
5786
5787  .fds-slide { min-width: 100%; display: flex; flex-direction: column; }
5788    .fds-slide-img {
5789        width: 100%;
5790        
5791          height: 45%;
5792        position: relative;
5793        overflow: hidden;
5794        flex-shrink: 0;
5795    }
5796        .fds-slide-img img { width: 100%; height: 100%; object-fit: cover; display: block; }
5797    .fds-slide-img::after {
5798        content: '';
5799        position: absolute;
5800        bottom: 0px;
5801        left: 0px;
5802        right: 0px;
5803        height: 80px;
5804        background: linear-gradient(transparent, rgb(250, 246, 240));
5805    }
5806    .fds-badge {
5807        position: absolute;
5808        top: 20px;
5809        right: 20px;
5810        background: rgba(255, 255, 255, 0.8);
5811        border-width: medium;
5812        border-style: none;
5813        border-color: currentcolor;
5814        border-image: initial;
5815        border-radius: 20px;
5816        padding: 6px 14px ;
5817        font-family: Bitter, serif;
5818        font-size: 13px;
5819        color: rgb(140, 123, 107);
5820        cursor: pointer;
5821    }
5822    .fds-skip-btn {
5823      position: absolute;
5824      top: 20px;
5825      right: 20px;
5826      z-index: 99;
5827      background: rgba(255,255,255,0.85);
5828      color: var(--fd-muted);
5829      font-family: Bitter, serif;
5830      font-size: 13px;
5831      padding: 6px 16px;
5832      border-radius: 20px;
5833      text-decoration: none;
5834      cursor: pointer;
5835    }
5836    .fds-skip-btn:hover {
5837      background: white;
5838      color: var(--fd-accent);
5839    }
5840  h4.input-heading {
5841    font-family: 'kiona';
5842    font-size: 12px;
5843    font-weight: 600;
5844    letter-spacing: 0.094em;
5845    margin-bottom: 20px;
5846}
5847    .input-wapper input {
5848        width: 100%;
5849        background: rgb(255, 255, 255);
5850        border: 1.5px solid rgb(232, 228, 220);
5851        border-radius: 2px;
5852        padding: 0.875rem 1rem;
5853        font-family: Bitter, serif;
5854        font-size: 0.9375rem;
5855        color: rgb(0, 0, 0);
5856        outline: none;
5857        box-sizing: border-box;
5858        transition: border-color 160ms;
5859    }
5860    .fds-content {
5861        padding: 24px 28px 32px;
5862        display: flex;
5863        flex-direction: column;
5864        gap: 10px;
5865    }
5866    .input-wapper {
5867        padding: 24px 28px 32px;
5868    }
5869    .fds-step {
5870        font-size: 12px;
5871        font-weight: 700;
5872        letter-spacing: .14em;
5873        text-transform: uppercase;
5874        color: var(--fd-accent);
5875    }
5876    .fds-title {
5877    width: 240px;
5878    font-family: kiona, sans-serif;
5879    text-transform: uppercase;
5880    font-size: 22px;
5881    color: rgb(44, 36, 22);
5882    line-height: 1.3;
5883    margin-bottom: 10px;
5884    white-space: pre-line;
5885    letter-spacing: 0.094em;
5886    }
5887    .fds-desc {
5888    font-size: 15px;
5889    color: var(--fd-muted);
5890    line-height: 1.65;
5891    flex: 1;
5892    margin: 0;
5893    }
5894
5895    .fds-dots {
5896    display: flex;
5897    gap: 6px;
5898    justify-content: center;
5899    padding-bottom: 4px;
5900    }
5901    .fds-dot  {
5902    width: 7px;
5903    height: 7px;
5904    border-radius: 50%;
5905    background: var(--dot-color);
5906    transition: width .3s, background .3s, border-radius .3s;
5907    }
5908    .fds-dot.fds-dot-on {
5909    width: 24px;
5910    border-radius: 4px;
5911    background: var(--dot-active);
5912    }
5913  .fds-dots-sec {
5914      display: flex;
5915      align-items: center;
5916      justify-content: space-between;
5917      padding: 0px 28px 20px;
5918      display: none;
5919  }
5920    .fds-nav {
5921    display: flex;
5922    gap: 12px;
5923    /* padding: 14px 32px 36px ; */
5924    width: 50%;
5925    /* margin-left: auto ; */
5926    justify-content: end;
5927    }
5928    .fds-btn-prev {
5929    padding: 8px ;
5930    font-size: 14px;
5931    font-weight: 600;
5932    color: var(--fd-charcoal);
5933    transition: border-color .2s, color .2s;
5934    width: 48px;
5935    height: 48px;
5936    border-radius: 2px;
5937    border: 2px solid rgb(232, 221, 208);
5938    background: white;
5939    display: flex;
5940    align-items: center;
5941    justify-content: center;
5942    cursor: pointer;
5943    }
5944    .fds-btn-prev:hover {
5945    border-color: var(--fd-accent);
5946    color: var(--fd-accent);
5947    }
5948    .fds-btn-next {
5949    padding: 8px ;
5950    background: var(--next-color);
5951    border: none;
5952    font-size: 14px;
5953    font-weight: 700;
5954    letter-spacing: .08em;
5955    text-transform: uppercase;
5956    color: var(--fd-btn-text);
5957    transition: filter .2s, transform .15s;
5958    width: 48px;
5959    height: 48px;
5960    border-radius: 2px;
5961    display: flex;
5962    align-items: center;
5963    justify-content: center;
5964    cursor: pointer;
5965    box-shadow: rgba(196, 98, 58, 0.333) 0px 4px 12px;
5966    }
5967    .fds-btn-next:hover  {
5968    filter: brightness(1.08);
5969    }
5970    .fds-btn-next:active {
5971    transform: scale(.97);
5972    }
5973    .fds-btn-next.fds-finish {
5974    background: #3A7D44;
5975    box-shadow: 0 5px 18px rgba(58,125,68,.3);
5976    }
5977    .header-box {
5978    display: flex;
5979    flex-direction: column;
5980    align-items: center;
5981    }
5982    span.line {
5983    width: 100%;
5984    height: 1px;
5985    background: #fff;
5986    display: inline-block;
5987    max-width: 30%;
5988    }
5989    span.line.bottom {
5990    margin-top: 5px;
5991    }
5992    .fds-brand {
5993    margin: 15px 0;
5994    }
5995  .custom-onboarding-btn {
5996      width: 100%;
5997      background: #cc5a30;
5998      color: #fff;
5999      border: none;
6000      /* border-radius: 6px; */
6001      padding: 16px;
6002      font-size: 11px;
6003      letter-spacing: 0.14em;
6004      text-transform: uppercase;
6005      cursor: pointer;
6006      transition: all 0.25s ease;
6007      font-family: sans-serif;
6008      font-weight: 600;
6009      margin-top: 17px;
6010  }
6011    .custom-onboarding-btn a {
6012        text-align: center;
6013        color: #fff;
6014    }
6015    .custom-onboarding-btn:hover {
6016    background: #b44c27;
6017    transform: translateY(-2px);
6018    }
6019
6020    @media (min-width: 768px) {
6021      #fd-sec-template--21415158382805__fd_app_section_mYAtPN {
6022        display: none;
6023      }
6024    }
6025    @media (max-width:768px){
6026      .fds-btn-cta {
6027          width: fit-content;
6028      }
6029      }
6030</style>
6031
6032
6033
6034<link rel="preconnect" href="https://fonts.googleapis.com">
6035<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
6036<link
6037  href="https://fonts.googleapis.com/css2?family=Playfair+Display:wght@700;900&family=DM+Sans:wght@400;500;600&display=swap"
6038  rel="stylesheet"
6039>
6040<div id="fd-sec-template--21415158382805__fd_app_section_mYAtPN">
6041  <div class="fds-wrap">
6042    <div class="fds-phone">
6043      <div class="fds-splash" id="fds-splash-template--21415158382805__fd_app_section_mYAtPN">
6044        <div class="fds-logo"><img src="//fresherdinners.com.sg/cdn/shop/files/fy_100x100.png?v=1776066103" alt="<p>FRESHER <br/>DINNERS</p>"></div>
6045        <div class="header-box">
6046          <span class="line top"> </span>
6047          <h1 class="fds-brand"><p>FRESHER <br/>DINNERS</p></h1>
6048          <span class="line bottom"> </span>
6049        </div>
6050        <p class="fds-tagline">Dinners Made Delicious</p>
6051
6052        <button class="fds-btn-cta" id="fds-start-template--21415158382805__fd_app_section_mYAtPN">GET STARTED</button>
6053
6054        <input type="hidden" id="fds-logged-in-template--21415158382805__fd_app_section_mYAtPN" value="no">
6055
6056        <p class="fds-signin"><a href="/pages/profile">Sign in to your account</a></p>
6057      </div>
6058
6059      <div class="fds-slider" id="fds-slider-template--21415158382805__fd_app_section_mYAtPN">
6060        
6061        <div class="fds-viewport">
6062          <div class="fds-track" id="fds-track-template--21415158382805__fd_app_section_mYAtPN"><div
6063                class="fds-slide"
6064                data-dot="#e0d8ce"
6065                data-dot-active="#c4614a"
6066                data-next="#c4614a"
6067                
6068              >
6069                <div class="fds-slide-img"><span class="fds-badge">
6070                      
6071                      <a href="/account">Skip</a>
6072                    </span><img
6073                      src="//fresherdinners.com.sg/cdn/shop/files/app_onboard_1-bMcyvVqttmRGzcnGUjMoEd.webp?v=1776757010"
6074                      alt="Welcome to Fresher Dinners"
6075                      loading="eager"
6076                    ></div>
6077
6078                <div class="fds-content">
6079                  <h2 class="fds-title">Welcome to Fresher Dinners</h2>
6080                  <p class="fds-desc">Delicious, family style dinners, delivered to your door daily. Let's get you set up in under a minute.</p>
6081                </div>
6082                
6083                  <div class="input-wapper">
6084                    <h4 class="input-heading">What should we call you?</h4>
6085                    <input type="text" placeholder="Your First Name" name="Name" id="first_name">
6086                    <button class="custom-onboarding-btn">
6087<a href="/customer_authentication/login?return_to=%2Fpages%2Fprofile"                      
6088                  class="fds-btn-next1"
6089                  id="customer-login-btn"
6090                >
6091                  <span class="login-btn-text">
6092                    Hello  — Next
6093                  </span>
6094
6095                  <span class="login-btn-loader" aria-hidden="true"></span>
6096                </a>
6097                    </button>
6098                  </div>
6099                
6100              </div></div>
6101        </div>
6102        <div class="fds-dots-sec">
6103          <div class="fds-dots" id="fds-dots-template--21415158382805__fd_app_section_mYAtPN"></div>
6104          <div class="fds-nav">
6105            <button class="fds-btn-prev" id="fds-prev-template--21415158382805__fd_app_section_mYAtPN">
6106              
6107              <svg
6108                xmlns="http://www.w3.org/2000/svg"
6109                width="32"
6110                height="32"
6111                viewBox="0 0 24 24"
6112                fill="none"
6113                stroke="#000"
6114                stroke-width="2"
6115                stroke-linecap="round"
6116                stroke-linejoin="arcs"
6117              >
6118                <path d="M15 18l-6-6 6-6"></path>
6119              </svg>
6120            </button>
6121            
6122            <a href="/pages/profile" class="fds-btn-next">
6123              
6124
6125              <svg
6126                xmlns="http://www.w3.org/2000/svg"
6127                width="32"
6128                height="32"
6129                viewBox="0 0 24 24"
6130                fill="none"
6131                stroke="#fff"
6132                stroke-width="2"
6133                stroke-linecap="round"
6134                stroke-linejoin="arcs"
6135              >
6136                <path d="M9 18l6-6-6-6"></path>
6137              </svg>
6138            </a>
6139          </div>
6140        </div>
6141      </div>
6142    </div>
6143  </div>
6144</div>
6145
6146<style>
6147  .custom-onboarding-btn {
6148  position: relative;
6149  display: inline-flex;
6150  align-items: center;
6151  justify-content: center;
6152  min-width: 140px;
6153  min-height: 45px;
6154  text-decoration: none;
6155}
6156
6157.login-btn-loader {
6158  display: none;
6159  width: 18px;
6160  height: 18px;
6161  border: 2px solid currentColor;
6162  border-right-color: transparent;
6163  border-radius: 50%;
6164  animation: login-btn-spin 0.7s linear infinite;
6165}
6166
6167.custom-onboarding-btn.is-loading {
6168  pointer-events: none;
6169  cursor: wait;
6170  opacity: 0.8;
6171}
6172
6173.custom-onboarding-btn.is-loading .login-btn-text {
6174  display: none;
6175}
6176
6177.custom-onboarding-btn.is-loading .login-btn-loader {
6178  display: block;
6179}
6180
6181@keyframes login-btn-spin {
6182  to {
6183    transform: rotate(360deg);
6184  }
6185}
6186</style>
6187<script>
6188  document.addEventListener('DOMContentLoaded', function () {
6189    var loginButton = document.getElementById('customer-login-btn');
6190
6191    if (!loginButton) return;
6192
6193    loginButton.addEventListener('click', function (event) {
6194      if (loginButton.classList.contains('is-loading')) {
6195        event.preventDefault();
6196        return;
6197      }
6198
6199      loginButton.classList.add('is-loading');
6200      loginButton.setAttribute('aria-disabled', 'true');
6201    });
6202    window.addEventListener('pageshow', function () {
6203      loginButton.classList.remove('is-loading');
6204      loginButton.removeAttribute('aria-disabled');
6205    });
6206  });
6207</script>
vendor: 2 bytes, line 6207
6207
6208<script>
6209  (function(){
6210    var ID = 'template--21415158382805__fd_app_section_mYAtPN';
6211
6212
6213      var params = new URLSearchParams(window.location.search);
6214      var utmSource = params.get('utm_source');
6215      var utmMedium = params.get('utm_medium');
6216
6217      if (utmSource === 'google' && utmMedium === 'cpc') {
6218        window.location.replace('/pages/home-dinner-plan');
6219        return;
6220      }
6221
6222      
6223      
6224
6225    
6226
6227    var isLoggedIn = document.getElementById('fds-logged-in-' + ID);
6228
6229if (isLoggedIn && isLoggedIn.value === 'yes') {
6230  // Logged in
6231  window.location.href = '/pages/home-dinner-plan';
6232} else {
6233  // Logged out
6234  window.location.href = ' /pages/home-dinner-plan';
6235}
6236
6237    var TOTAL   = 1;
6238    var FINISH  = '/pages/home-dinner-plan';
6239    var FLABEL  = '';
6240    var NLABEL  = '';
6241    var cur     = 0;
6242
6243    var splash  = document.getElementById('fds-splash-' + ID);
6244    var slider  = document.getElementById('fds-slider-' + ID);
6245    var track   = document.getElementById('fds-track-'  + ID);
6246    var btnPrev = document.getElementById('fds-prev-'   + ID);
6247    var btnNext = document.getElementById('fds-next-'   + ID);
6248
6249    function buildDots(){
6250      var c = document.getElementById('fds-dots-' + ID);
6251      if(!c || c.dataset.built) return;
6252      c.dataset.built = '1';
6253      for(var i = 0; i < TOTAL; i++){
6254        var d = document.createElement('span');
6255        d.className = 'fds-dot' + (i === 0 ? ' fds-dot-on' : '');
6256        c.appendChild(d);
6257      }
6258    }
6259
6260    function updateDots(){
6261      document.querySelectorAll('#fds-dots-' + ID + ' .fds-dot').forEach(function(d, idx){
6262        d.classList.toggle('fds-dot-on', idx === cur);
6263      });
6264    }
6265
6266    function applyColors() {
6267      var activeSlide = document.querySelectorAll('#fd-sec-' + ID + ' .fds-slide')[cur];
6268      if(!activeSlide) return;
6269      var dot = activeSlide.getAttribute('data-dot');
6270      var dotActive = activeSlide.getAttribute('data-dot-active');
6271      var next = activeSlide.getAttribute('data-next');
6272      var sec = document.getElementById('fd-sec-' + ID);
6273      if(dot) sec.style.setProperty('--dot-color', dot);
6274      if(dotActive) sec.style.setProperty('--dot-active', dotActive);
6275      if(next) sec.style.setProperty('--next-color', next);
6276    }
6277
6278    function goTo(n){
6279      cur = Math.max(0, Math.min(n, TOTAL - 1));
6280      track.style.transform = 'translateX(-' + (cur * 100) + '%)';
6281      btnPrev.style.visibility = cur === 0 ? 'hidden' : 'visible';
6282      updateDots();
6283      applyColors();
6284    }
6285
6286    document.getElementById('fds-start-' + ID).addEventListener('click', function(){
6287      var loggedIn = document.getElementById('fds-logged-in-' + ID);
6288      if(loggedIn && loggedIn.value === 'yes'){
6289        window.location.href = '/pages/home-dinner-plan';
6290      } else {
6291        splash.classList.add('fds-hidden');
6292        slider.classList.add('fds-on');
6293        buildDots();
6294        goTo(0);
6295      }
6296    });
6297
6298    btnNext.addEventListener('click', function(){
6299      if(cur === TOTAL - 1){
6300        window.location.href = '/account/register';
6301      } else {
6302        goTo(cur + 1);
6303        buildDots();
6304      }
6305    });
6306
6307    btnPrev.addEventListener('click', function(){
6308      goTo(cur - 1);
6309    });
6310
6311    var tx = 0;
6312    track.addEventListener('touchstart', function(e){
6313      tx = e.touches[0].clientX;
6314    }, { passive: true });
6315
6316    track.addEventListener('touchend', function(e){
6317      var dx = e.changedTouches[0].clientX - tx;
6318      if(Math.abs(dx) > 50){
6319        goTo(cur + (dx < 0 ? 1 : -1));
6320      }
6321    }, { passive: true });
6322
6323  })();
6324</script>
6324
6325
6326
6327
6328</section>
6329    </main>
6330
6331    <!-- BEGIN sections: footer-group -->
6332<section id="shopify-section-sections--21415153238229__mobile_footer_menu_wbXgn3" class="shopify-section shopify-section-group-footer-group mobile-footer-menu"> 
6333<style>
6334
6335    .mobile-footer-menu {
6336  display: none !important;
6337  visibility: visible !important;
6338  opacity: 1 !important;
6339}
6340.mobile-bottom-menu {
6341  position: fixed;
6342  left: 50%;
6343  bottom: 0;
6344  transform: translateX(-50%);
6345  width: 100%;
6346  max-width:100%;
6347  height: 60px;
6348  background: #fff;
6349  border-top: 1px solid #eee;
6350  display: flex !important;
6351  visibility: visible !important;
6352  opacity: 1 !important;
6353  align-items: center;
6354  justify-content: space-around;
6355  z-index: 999999 !important;
6356  border-radius: 2px 2px 0 0;
6357  box-shadow: 0 -4px 18px rgba(0,0,0,0.08);
6358}
6359
6360.mobile-bottom-menu__item {
6361    text-decoration: none;
6362    color: #8b6f58;
6363    display: flex;
6364    flex-direction: column;
6365    align-items: center;
6366    justify-content: center;
6367    gap: 4px;
6368    width: 100%;
6369    min-width: 55px;
6370}
6371
6372.mobile-bottom-menu__icon {
6373  display: flex;
6374  align-items: center;
6375  justify-content: center;
6376}
6377
6378.mobile-bottom-menu__icon svg,
6379.mobile-bottom-menu__icon img {
6380  width: 22px;
6381  height: 22px;
6382  display: block;
6383}
6384
6385.mobile-bottom-menu__icon svg {
6386  stroke: currentColor;
6387}
6388
6389.mobile-bottom-menu__label {
6390  font-size: 11px;
6391  font-weight: 600;
6392  line-height: 1;
6393}
6394
6395.mobile-bottom-menu__item:hover {
6396  color: #c4623a;
6397}
6398
6399.mobile-bottom-menu__fallback {
6400  font-size: 18px;
6401  color: currentColor;
6402}
6403a.mobile-bottom-menu__item.active {
6404    /* background: #c4623a; */
6405    color: #c4623a;
6406    height: 100%;
6407    width: 100%;
6408}
6409  @media (min-width:768px) {
6410     .mobile-bottom-menu {
6411     display:none !important;
6412    }
6413  }
6414</style>
6415
6416 </section><div id="shopify-section-sections--21415153238229__section_dNLTUt" class="shopify-section shopify-section-group-footer-group section-wrapper">
6417
6418
6419
6420<div class="section-background color-scheme-3a22a853-b27c-4989-9b28-b2fe84f28659"></div>
6421<div
6422  class="section email-wrapper section--page-width color-scheme-3a22a853-b27c-4989-9b28-b2fe84f28659"
6423  data-testid="ui-test-section"
6424
6425  
6426
6427  style="
6428    
6429
6430    
6431  "
6432>
6433  <div class="custom-section-background">
6434    
6435
6436
6437
6438  </div>
6439
6440  <div
6441    class="border-style custom-section-content"
6442    style="--border-width: 1px; --border-style: none; --border-color:
6443rgb(var(--color-border-rgb) / 1.0); --border-radius:
64440px; 
6445"
6446  >
6447    
6448
6449    <div
6450      class="
6451        
6452        spacing-style
6453        layout-panel-flex
6454        layout-panel-flex--column
6455        section-content-wrapper
6456         mobile-column
6457      "
6458      style="
6459        --flex-direction: column; --flex-wrap: nowrap; --flex-wrap-mobile: wrap;
6460
6461--gap: 16px;
6462
6463--horizontal-alignment: center; --vertical-alignment: center;
6464--vertical-alignment-mobile: center;
6465
6466        --padding-block-start: max(20px, calc(var(--spacing-scale) * 40px));--padding-block-end: 0px;
6467      "
6468      data-testid="section-content"
6469    >
6470      
6471  
6472
6473
6474
6475
6476
6477
6478
6479
6480  <div class=" spacing-style text-block text-block--AUkhkaGZQS2xocmk5Z__text_7CUCra h2    text-block--align-center  "  style="    --padding-block-start: 0px; --padding-block-end:0px; --padding-inline-start:0px; --padding-inline-end:0px;     --color: var(--color-foreground);    --width: 100%;    --max-width: var(--max-width--body-normal);          --text-align: center;          ">
6481    <h2>Subscribe to our emails</h2>
6482  </div>
6483
6484
6485
6486
6487
6488
6489
6490
6491
6492
6493
6494
6495
6496
6497
6498  <div class=" spacing-style text-block text-block--AM0RvV2svcGFoVEovU__text_Hww38A custom    text-block--align-center custom-typography  custom-font-size  custom-color   "  style="    --padding-block-start: 0px; --padding-block-end:0px; --padding-inline-start:0px; --padding-inline-end:0px;     --color: var(--color-foreground);--font-size: 1.125rem;      --font-weight: var(--font-body--weight);--font-family: var(--font-body--family);    --text-transform: none;    --text-wrap: pretty;          --line-height: var(--line-height--body-normal);        --letter-spacing: var(--letter-spacing--body-normal);    --width: 100%;    --max-width: var(--max-width--body-normal);          --text-align: center;          ">
6499    <p>Be the first to know about new collections and special offers.&nbsp;</p>
6500  </div>
6501
6502
6503
6504
6505
6506
6507
6508
6509
6510<div
6511  class="email-signup-block size-style spacing-style"
6512  style="--size-style-width:50%;--size-style-height: ;--padding-block-start: 0px;--padding-block-end: 0px;--padding-inline-start: 0px;--padding-inline-end: 0px;"
6513  
6514>
6515  
6516  
6517<form method="post" action="/contact#contact_form" id="contact_form" accept-charset="UTF-8" class="email-signup__form spacing-style"><input type="hidden" name="form_type" value="customer" /><input type="hidden" name="utf8" value="✓" />
6518    <input
6519      name="contact[id]"
6520      type="hidden"
6521      value="EmailSignup-AV2ZoZmpvV29rTTk2Z__email_signup_WB8963"
6522    >
6523
6524    <div
6525      class="email-signup__input-group     "
6526      style="--border-width: 1px; --border-radius: 0px;"
6527    >
6528      <label
6529        for="EmailInput-AV2ZoZmpvV29rTTk2Z__email_signup_WB8963"
6530        class="visually-hidden"
6531      >
6532        Email
6533      </label>
6534      <input
6535        id="EmailInput-AV2ZoZmpvV29rTTk2Z__email_signup_WB8963"
6536        class="email-signup__input email-signup__input--all paragraph "
6537        type="email"
6538        name="contact[email]"
6539        autocorrect="off"
6540        autocapitalize="off"
6541        autocomplete="email"
6542        placeholder="Email address"
6543        required
6544        
6545      >
6546      <button
6547        class="email-signup__button  email-signup__button--text paragraph button button--AV2ZoZmpvV29rTTk2Z__email_signup_WB8963 "
6548        
6549      >
6550        
6551          Get Menus & Offers
6552        
6553      </button>
6554    </div></form>
6555</div>
6556
6557
6558
6559
6560
6561
6562    </div>
6563  </div>
6564</div>
6565
6566
6567
6568
6569
6570</div><div id="shopify-section-sections--21415153238229__custom_landing_footer_EnKBrP" class="shopify-section shopify-section-group-footer-group"><footer class="landing-footer">
6571  <div class="landing-footer__inner">
6572    
6573    <div class="landing-footer__logo">
6574      FRESHER DINNERS
6575      <br>
6576      <div class="company-address">Mandai Foodlink, 5 Mandai<br>
6577         Link #06-04,Singapore,<br> Singapore, 728654 </div>
6578    </div>
6579
6580    
6581
6582    <div class="landing-footer__links">
6583      
6584        <a href="/pages/menu-selector">
6585          Menu
6586        </a>
6587      
6588        <a href="/pages/how-it-works">
6589          How It Works
6590        </a>
6591      
6592        <a href="/pages/plans">
6593          Plans
6594        </a>
6595      
6596        <a href="/pages/juniors">
6597          Juniors
6598        </a>
6599      
6600        <a href="/pages/help-and-faq">
6601          FAQ
6602        </a>
6603      
6604        <a href="">
6605          Get Started
6606        </a>
6607      
6608    </div>
6609
6610   <div class="landing-footer__social-icons">
6611  
6612    <a
6613      href="https://www.instagram.com/fresher.singapore/"
6614      class="landing-footer__social-link"
6615      target="_blank"
6616      rel="noopener noreferrer"
6617      aria-label="Instagram"
6618    >
6619      <svg
6620        width="24"
6621        height="24"
6622        viewBox="0 0 24 24"
6623        fill="none"
6624        xmlns="http://www.w3.org/2000/svg"
6625        aria-hidden="true"
6626      >
6627        <rect
6628          x="3"
6629          y="3"
6630          width="18"
6631          height="18"
6632          rx="5"
6633          stroke="currentColor"
6634          stroke-width="2"
6635        />
6636        <circle
6637          cx="12"
6638          cy="12"
6639          r="4"
6640          stroke="currentColor"
6641          stroke-width="2"
6642        />
6643        <circle
6644          cx="17.5"
6645          cy="6.5"
6646          r="1"
6647          fill="currentColor"
6648        />
6649      </svg>
6650    </a>
6651  
6652
6653  
6654    <a
6655      href="https://www.facebook.com/fresher.singapore/"
6656      class="landing-footer__social-link"
6657      target="_blank"
6658      rel="noopener noreferrer"
6659      aria-label="Facebook"
6660    >
6661      <svg
6662        width="24"
6663        height="24"
6664        viewBox="0 0 24 24"
6665        fill="currentColor"
6666        xmlns="http://www.w3.org/2000/svg"
6667        aria-hidden="true"
6668      >
6669        <path d="M13.5 21V13.2H16.2L16.6 10.2H13.5V8.3C13.5 7.4 13.8 6.8 15.1 6.8H16.7V4.1C16.4 4.1 15.4 4 14.2 4C11.7 4 10 5.5 10 8.4V10.2H7.2V13.2H10V21H13.5Z"/>
6670      </svg>
6671    </a>
6672  
6673  
6674  <a
6675    href="https://wa.me/6588365052?text=Hi%20Fresher%20Dinners%2C%20I%E2%80%99m%20interested%20in%20your%20dinner%20plans."
6676    class="landing-footer__social-link"
6677    target="_blank"
6678    rel="noopener noreferrer"
6679    aria-label="WhatsApp"
6680  >
6681    <svg
6682      width="24"
6683      height="24"
6684      viewBox="0 0 24 24"
6685      fill="currentColor"
6686      xmlns="http://www.w3.org/2000/svg"
6687      aria-hidden="true"
6688    >
6689      <path d="M20.52 3.48A11.86 11.86 0 0 0 12.03 0C5.4 0 0 5.4 0 12.03c0 2.12.55 4.19 1.6 6.02L0 24l6.11-1.58A12.03 12.03 0 0 0 12.03 24C18.66 24 24 18.6 24 11.97c0-3.2-1.25-6.2-3.48-8.49ZM12.03 21.84c-1.82 0-3.6-.49-5.17-1.42l-.37-.22-3.63.94.97-3.54-.24-.37a9.8 9.8 0 1 1 8.44 4.61Zm5.39-7.34c-.3-.15-1.77-.87-2.04-.97-.27-.1-.47-.15-.67.15-.2.3-.77.97-.94 1.17-.17.2-.35.22-.65.07-.3-.15-1.28-.47-2.44-1.5-.9-.8-1.5-1.8-1.67-2.1-.17-.3-.02-.46.13-.61.13-.13.3-.35.45-.52.15-.17.2-.3.3-.5.1-.2.05-.37-.03-.52-.08-.15-.67-1.62-.92-2.22-.24-.58-.49-.5-.67-.5h-.57c-.2 0-.52.08-.8.37-.27.3-1.05 1.02-1.05 2.49s1.08 2.89 1.23 3.09c.15.2 2.13 3.25 5.17 4.56.72.31 1.29.5 1.73.64.73.23 1.39.2 1.91.12.58-.09 1.77-.72 2.02-1.42.25-.69.25-1.29.17-1.42-.08-.13-.28-.2-.58-.35Z"/>
6690    </svg>
6691  </a>
6692
6693</div>
6694
6695  </div>
6696</footer>
6697
6698<style>
6699.company-address {
6700    font-size: .82rem;
6701    color: rgba(255, 255, 255, .75);
6702    text-decoration: none;
6703    transition: opacity .2s ease;
6704    text-transform: capitalize;
6705    margin-top: 10px;
6706}
6707
6708.landing-footer {
6709  background: #cc5a30;
6710  padding: 3rem clamp(1.5rem, 8vw, 8rem);
6711  
6712}
6713
6714.landing-footer__inner {
6715  display: flex;
6716  justify-content: space-between;
6717  align-items: center;
6718  flex-wrap: wrap;
6719  gap: 1.5rem;
6720}
6721
6722.landing-footer__logo {
6723  font-family: "Josefin Sans", sans-serif;
6724  font-size: 1rem;
6725  letter-spacing: .12em;
6726  color: rgba(255,255,255,.85);
6727  text-transform: uppercase;
6728}
6729
6730.landing-footer__links {
6731  display: flex;
6732  gap: 2rem;
6733  flex-wrap: wrap;
6734}
6735
6736.landing-footer__links a {
6737  font-size: .82rem;
6738  color: rgba(255,255,255,.75);
6739  text-decoration: none;
6740  transition: opacity .2s ease;
6741}
6742
6743.landing-footer__links a:hover {
6744  opacity: .8;
6745}
6746
6747</style>
6748
6749</div>
6750<!-- END sections: footer-group -->
6751
6752    
6752<script
6753  src="//fresherdinners.com.sg/cdn/shop/t/2/assets/dialog.js?v=150888536568694194021775201778"
6754  type="module"
6755></script>
6755
6756
6757<script
6758  src="//fresherdinners.com.sg/cdn/shop/t/2/assets/predictive-search.js?v=149240552485540508541775201778"
6759  type="module"
6760  fetchpriority="low"
6761></script>
6761
6762
6763<dialog-component
6764  id="search-modal"
6765  class="search-modal"
6766  
6767>
6768  <dialog
6769    ref="dialog"
6770    on:click="/closeDialogOnClickOutside"
6771    on:keydown="/closeDialogOnEscapePress"
6772    class="search-modal__content dialog-modal"
6773    scroll-lock
6774    aria-labelledby="search-modal-heading"
6775  >
6776    <h2
6777      id="search-modal-heading"
6778      class="visually-hidden"
6779    >
6780      Search
6781    </h2>
6782    <predictive-search-component
6783      class="predictive-search color-scheme-1"
6784      style="--product-corner-radius: 0px; --card-corner-radius: 4px;"
6785      data-section-id="predictive-search"
6786      data-testid="search-component--modal"
6787      role="search"
6788      aria-label="Search"
6789    >
6790      <form
6791        action="/search"
6792        method="get"
6793        role="search"
6794        class="predictive-search-form"
6795        ref="form"
6796        on:keydown="/onSearchKeyDown"
6797      >
6798        <div
6799          class="predictive-search-form__header"
6800        >
6801          <div class="predictive-search-form__header-inner">
6802            <label
6803              for="cmdk-input"
6804              class="visually-hidden"
6805            >Search</label>
6806            <input
6807              class="search-input"
6808              id="cmdk-input"
6809              type="search"
6810              name="q"
6811              role="combobox"
6812              aria-expanded="false"
6813              aria-owns="predictive-search-results"
6814              aria-controls="predictive-search-results"
6815              aria-haspopup="listbox"
6816              aria-autocomplete="list"
6817              autocomplete="off"
6818              placeholder="Search"
6819              ref="searchInput"
6820              on:input="/search"
6821              on:keydown="/onSearchKeyDown"
6822            >
6823            <input
6824              name="options[prefix]"
6825              type="hidden"
6826              value="last"
6827            >
6828            <span class="svg-wrapper predictive-search__icon">
6829              <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="none"><circle cx="9" cy="9" r="4.75" stroke="currentColor" stroke-width="var(--icon-stroke-width)"/><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="var(--icon-stroke-width)" d="m12.5 12.5 3.25 3.25"/></svg>
6830
6831            </span>
6832            <button
6833              type="button"
6834              class="button-unstyled predictive-search__reset-button"
6835              ref="resetButton"
6836              hidden
6837              on:click="/resetSearch"
6838            >
6839              Clear
6840            </button>
6841          </div>
6842          <button
6843            type="button"
6844            class="button predictive-search__close-modal-button"
6845            aria-label="Close dialog"
6846            on:click="dialog-component/closeDialog"
6847            ref="closeModalButton"
6848          >
6849            <span class="svg-wrapper">
6850              <svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
6851  <path d="M12 2L2 12" stroke="currentColor" stroke-width="var(--icon-stroke-width)" stroke-linecap="round" stroke-linejoin="round"/>
6852  <path d="M12 12L2 2" stroke="currentColor" stroke-width="var(--icon-stroke-width)" stroke-linecap="round" stroke-linejoin="round"/>
6853</svg>
6854
6855            </span>
6856          </button>
6857        </div>
6858
6859        <div class="predictive-search-form__content-wrapper">
6860          <div
6861            class="predictive-search-form__content"
6862            tabindex="-1"
6863            ref="predictiveSearchResults"
6864            on:click="/handleModalClick"
6865          >
6866            
6867
6868<div
6869  id="predictive-search-results"
6870  class="predictive-search-dropdown"
6871  role="listbox"
6872  aria-expanded="true"
6873  style="--color-shadow: rgb(var(--color-foreground-rgb) / 0.1);"
6874>
6875  
6876    <div class="predictive-search-results__inner">
6877      
6878      
6879        
6880        
6881        
6882          <div
6883  id="predictive-search-products"
6884  class="predictive-search-results__products"
6885  
6886    data-testid="products-list-default--modal"
6887  
6888>
6889  
6890    <h4 class="predictive-search-results__title">
6891      Products
6892    </h4>
6893    <ul
6894      class="predictive-search-results__list predictive-search-results__wrapper-products list-unstyled"
6895      role="listbox"
6896      aria-label="Products"
6897    >
6898      
6899      
6900        <li
6901          class="predictive-search-results__card predictive-search-results__card--product"
6902          ref="resultsItems[]"
6903        >
6904          
6905<div
6906  class="resource-card"
6907  href="/products/5-hour-slow-cooked-thick-congee"
6908  data-resource-type="product"
6909>
6910  <a
6911    class="resource-card__link"
6912    href="/products/5-hour-slow-cooked-thick-congee"
6913  >
6914    <span class="visually-hidden">
6915      5 Hour Slow Cooked Thick Congee
6916    </span>
6917  </a>
6918  <div
6919    class="resource-card__media"
6920    style="--resource-card-aspect-ratio: 4 / 5;"
6921    
6922  >
6923      
6924      
6925<img src="//fresherdinners.com.sg/cdn/shop/files/5.steamfishset.png?v=1784713341&amp;width=500" alt="" srcset="//fresherdinners.com.sg/cdn/shop/files/5.steamfishset.png?v=1784713341&amp;width=240 240w, //fresherdinners.com.sg/cdn/shop/files/5.steamfishset.png?v=1784713341&amp;width=352 352w" width="500" height="625" loading="lazy" class="resource-card__image" sizes="auto" transitionToProduct="false" style="object-position: 50.0% 50.0%;">
6926
6927          <img src="//fresherdinners.com.sg/cdn/shop/files/superiorsteamfish.png?v=1784713351&amp;width=500" alt="5 Hour Slow Cooked Thick Congee" srcset="//fresherdinners.com.sg/cdn/shop/files/superiorsteamfish.png?v=1784713351&amp;width=240 240w, //fresherdinners.com.sg/cdn/shop/files/superiorsteamfish.png?v=1784713351&amp;width=352 352w" width="500" height="625" loading="lazy" class="resource-card__image resource-card__image--secondary" sizes="auto" transitionToProduct="false" data-media-id="41875919241429" style="object-position: 50.0% 50.0%;">
6928</div>
6929
6930  <div class="resource-card__content">
6931    <p class="resource-card__title paragraph">5 Hour Slow Cooked Thick Congee</p>
6932
6933    
6934      <div ref="priceContainer">
6935  
6936    
6937    
6938
6939    
6940      <span class="price">$16.00</span>
6941    
6942
6943    
6944  
6945</div>
6946    
6947  </div>
6948</div>
6949
6950        </li>
6951      
6952        <li
6953          class="predictive-search-results__card predictive-search-results__card--product"
6954          ref="resultsItems[]"
6955        >
6956          
6957<div
6958  class="resource-card"
6959  href="/products/junior-dinner-2d"
6960  data-resource-type="product"
6961>
6962  <a
6963    class="resource-card__link"
6964    href="/products/junior-dinner-2d"
6965  >
6966    <span class="visually-hidden">
6967      ABC chicken soup
6968    </span>
6969  </a>
6970  <div
6971    class="resource-card__media"
6972    style="--resource-card-aspect-ratio: 4 / 5;"
6973    
6974  >
6975      
6976      
6977<img src="//fresherdinners.com.sg/cdn/shop/files/2-Tuesday-ABC_chicken_soup.png?v=1784250401&amp;width=500" alt="" srcset="//fresherdinners.com.sg/cdn/shop/files/2-Tuesday-ABC_chicken_soup.png?v=1784250401&amp;width=240 240w, //fresherdinners.com.sg/cdn/shop/files/2-Tuesday-ABC_chicken_soup.png?v=1784250401&amp;width=352 352w" width="500" height="400" loading="lazy" class="resource-card__image" sizes="auto" transitionToProduct="false" style="object-position: 50.0% 50.0%;">
6978</div>
6979
6980  <div class="resource-card__content">
6981    <p class="resource-card__title paragraph">ABC chicken soup</p>
6982
6983    
6984      <div ref="priceContainer">
6985  
6986    
6987    
6988
6989    
6990      <span class="price">$7.90</span>
6991    
6992
6993    
6994  
6995</div>
6996    
6997  </div>
6998</div>
6999
7000        </li>
7001      
7002        <li
7003          class="predictive-search-results__card predictive-search-results__card--product"
7004          ref="resultsItems[]"
7005        >
7006          
7007<div
7008  class="resource-card"
7009  href="/products/thursday"
7010  data-resource-type="product"
7011>
7012  <a
7013    class="resource-card__link"
7014    href="/products/thursday"
7015  >
7016    <span class="visually-hidden">
7017      Almond Pesto Pasta with Blistered Cherry Tomatoes
7018    </span>
7019  </a>
7020  <div
7021    class="resource-card__media"
7022    style="--resource-card-aspect-ratio: 4 / 5;"
7023    
7024  >
7025      
7026      
7027<img src="//fresherdinners.com.sg/cdn/shop/files/WhatsAppImage2026-03-13at17.04.56_1_66806044-c413-4d25-a7c3-29ae2137cf94.jpg?v=1773427677&amp;width=500" alt="" srcset="//fresherdinners.com.sg/cdn/shop/files/WhatsAppImage2026-03-13at17.04.56_1_66806044-c413-4d25-a7c3-29ae2137cf94.jpg?v=1773427677&amp;width=240 240w, //fresherdinners.com.sg/cdn/shop/files/WhatsAppImage2026-03-13at17.04.56_1_66806044-c413-4d25-a7c3-29ae2137cf94.jpg?v=1773427677&amp;width=352 352w" width="500" height="892" loading="lazy" class="resource-card__image" sizes="auto" transitionToProduct="false" style="object-position: 50.0% 50.0%;">
7028
7029          <img src="//fresherdinners.com.sg/cdn/shop/files/WhatsAppImage2026-03-13at17.04.56_51ba8e1a-1837-4dd2-bf04-d7246e46068d.jpg?v=1773427676&amp;
7029width=500" alt="Almond Pesto Pasta with Blistered Cherry Tomatoes" srcset="//fresherdinners.com.sg/cdn/shop/files/WhatsAppImage2026-03-13at17.04.56_51ba8e1a-1837-4dd2-bf04-d7246e46068d.jpg?v=1773427676&amp;width=240 240w, //fresherdinners.com.sg/cdn/shop/files/WhatsAppImage2026-03-13at17.04.56_51ba8e1a-1837-4dd2-bf04-d7246e46068d.jpg?v=1773427676&amp;width=352 352w" width="500" height="892" loading="lazy" class="resource-card__image resource-card__image--secondary" sizes="auto" transitionToProduct="false" data-media-id="40311252123861" style="object-position: 50.0% 50.0%;">
7030</div>
7031
7032  <div class="resource-card__content">
7033    <p class="resource-card__title paragraph">Almond Pesto Pasta with Blistered Cherry Tomatoes</p>
7034
7035    
7036      <div ref="priceContainer">
7037  
7038    
7039    
7040
7041    
7042      <span class="price">$16.00</span>
7043    
7044
7045    
7046  
7047</div>
7048    
7049  </div>
7050</div>
7051
7052        </li>
7053      
7054        <li
7055          class="predictive-search-results__card predictive-search-results__card--product"
7056          ref="resultsItems[]"
7057        >
7058          
7059<div
7060  class="resource-card"
7061  href="/products/angel-hair-xin-chow-fried-bee-hoon"
7062  data-resource-type="product"
7063>
7064  <a
7065    class="resource-card__link"
7066    href="/products/angel-hair-xin-chow-fried-bee-hoon"
7067  >
7068    <span class="visually-hidden">
7069      Angel hair xin chow fried bee hoon
7070    </span>
7071  </a>
7072  <div
7073    class="resource-card__media"
7074    style="--resource-card-aspect-ratio: 4 / 5;"
7075    
7076  >
7077      
7078      
7079<img src="//fresherdinners.com.sg/cdn/shop/files/EDITED2-Tuesday-Angelhairxinchowfriedbeehoon.png?v=1785308369&amp;width=500" alt="" srcset="//fresherdinners.com.sg/cdn/shop/files/EDITED2-Tuesday-Angelhairxinchowfriedbeehoon.png?v=1785308369&amp;width=240 240w, //fresherdinners.com.sg/cdn/shop/files/EDITED2-Tuesday-Angelhairxinchowfriedbeehoon.png?v=1785308369&amp;width=352 352w" width="500" height="500" loading="lazy" class="resource-card__image" sizes="auto" transitionToProduct="false" style="object-position: 50.0% 50.0%;">
7080</div>
7081
7082  <div class="resource-card__content">
7083    <p class="resource-card__title paragraph">Angel hair xin chow fried bee hoon</p>
7084
7085    
7086      <div ref="priceContainer">
7087  
7088    
7089    
7090
7091    
7092      <span class="price">$7.90</span>
7093    
7094
7095    
7096  
7097</div>
7098    
7099  </div>
7100</div>
7101
7102        </li>
7103      
7104    </ul>
7105  
7106</div>
7107
7108
7109
7110        
7111      
7112    </div>
7113  
7114</div>
7115
7116          </div>
7117
7118          <div class="predictive-search-form__footer">
7119            <button
7120              class="button predictive-search__search-button"
7121              ref="viewAllButton"
7122            >
7123              View all
7124            </button>
7125          </div>
7126        </div>
7127      </form>
7128    </predictive-search-component>
7129  </dialog>
7130</dialog-component>
7131
7132
7133
7134
7135    
7136      <quick-add-dialog id="quick-add-dialog">
7137  <dialog
7138    class="quick-add-modal dialog-modal color-scheme-1"
7139    ref="dialog"
7140    scroll-lock
7141  >
7142    <button
7143      ref="closeButton"
7144      on:click="/closeDialog"
7145      class="button button-unstyled close-button quick-add-modal__close"
7146      aria-label="Close dialog"
7147    ><svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
7148  <path d="M12 2L2 12" stroke="currentColor" stroke-width="var(--icon-stroke-width)" stroke-linecap="round" stroke-linejoin="round"/>
7149  <path d="M12 12L2 2" stroke="currentColor" stroke-width="var(--icon-stroke-width)" stroke-linecap="round" stroke-linejoin="round"/>
7150</svg>
7151</button>
7152
7153    <div
7154      id="quick-add-modal-content"
7155      class="quick-add-modal__content"
7156    ></div>
7157  </dialog>
7158</quick-add-dialog>
7159
7160
7161
7162    
7163    
7163<script>
7164      setTimeout(function () {
7165        $('.fd-plan-card').eq(2).trigger('click');
7166        $('.fd-dinner-card').eq(1).trigger('click');
7167      }, 1000);
7168    </script>
7168
7169
7170    
7171
7172    
7173
7174
7175    
7175<script>
7176  function changeLoginButtonColor() {
7177    var btn = document.querySelector('button[aria-label="Continue"]');
7178
7179    if (btn) {
7180      btn.style.setProperty("background-color", "#CD5B31", "important");
7181      btn.style.setProperty("border-color", "#CD5B31", "important");
7182      btn.style.setProperty("color", "#ffffff", "important");
7183    }
7184  }
7185
7186  document.addEventListener("DOMContentLoaded", changeLoginButtonColor);
7187  window.addEventListener("load", changeLoginButtonColor);
7188  setTimeout(changeLoginButtonColor, 500);
7189  setTimeout(changeLoginButtonColor, 1500);
7190  setTimeout(changeLoginButtonColor, 3000);
7191</script>
7191
7192    
7193
7194
7195<script>
7196window.addEventListener('load', function () {
7197  fetch('/cart/clear.js', {
7198    method: 'POST',
7199    credentials: 'include',
7200    cache: 'no-store'
7201  });
7202});
7203
7204</script>
7204
7205
7206
7207  
7207<script>
7208    if (window.innerWidth <= 767) {
7209      window.location.replace('/pages/home-dinner-plan');
7210    }
7211  </script>
7211
7212
7213
7214
7215    
7216    <style>
7217        .desktop-app-popup {
7218          display: none;
7219          position: fixed;
7220          inset: 0;
7221          background: rgba(0, 0, 0, 0.55);
7222          z-index: 999999;
7223          align-items: center;
7224          justify-content: center;
7225          padding: 20px;
7226        }
7227
7228        .desktop-app-popup-box {
7229          position: relative;
7230          background: #fffaf6;
7231          max-width: 440px;
7232          width: 100%;
7233          padding: 34px 30px 28px;
7234          border-radius: 2px;
7235          text-align: center;
7236          box-shadow: 0 18px 60px rgba(0, 0, 0, 0.28);
7237          font-family: inherit;
7238        }
7239
7240        .desktop-app-popup-close-icon {
7241          position: absolute;
7242          top: 14px;
7243          right: 16px;
7244          background: transparent;
7245          border: 0;
7246          font-size: 24px;
7247          line-height: 1;
7248          cursor: pointer;
7249          color: #7a3b23;
7250        }
7251
7252        .desktop-app-popup-icon {
7253          width: 58px;
7254          height: 58px;
7255          margin: 0 auto 16px;
7256          border-radius: 50%;
7257          background: #c95f34;
7258          color: #fff;
7259          display: flex;
7260          align-items: center;
7261          justify-content: center;
7262          font-size: 26px;
7263        }
7264
7265      .desktop-app-popup-box h3 {
7266          margin: 0 0 12px;
7267          font-family: kiona, sans-serif;
7268          font-size: 26px;
7269          line-height: 1.15;
7270          font-weight: 600;
7271          color: #2b2b2b;
7272          font-weight: revert-rule;
7273          text-transform: uppercase;
7274          letter-spacing: .094em;
7275      }
7276
7277       .desktop-app-popup-box p {
7278          margin: 0 auto 24px;
7279          font-size: 14px;
7280          line-height: 1.5;
7281          color: #555;
7282          max-width: 340px;
7283      }
7284
7285        .desktop-app-popup-actions {
7286          display: flex;
7287          gap: 12px;
7288          justify-content: center;
7289          align-items: center;
7290          flex-wrap: wrap;
7291        }
7292
7293      .desktop-app-popup-primary, .desktop-app-popup-secondary {
7294          min-width: 160px;
7295          padding: 13px 18px;
7296          border-radius: 2px;
7297          font-size: 14px;
7298          font-weight: 500;
7299          text-decoration: none;
7300          cursor: pointer;
7301          border: 1px solid #c95f34;
7302          line-height: 1.4 !important;
7303      }
7304
7305        .desktop-app-popup-primary {
7306          background: #c95f34;
7307          color: #fff;
7308        }
7309
7310        .desktop-app-popup-secondary {
7311          background: #fff;
7312          color: #c95f34;
7313        }
7314
7315        @media (min-width: 768px) {
7316          .desktop-app-popup.is-active {
7317            display: flex;
7318          }
7319        }
7320
7321        @media (max-width: 767px) {
7322          .desktop-app-popup {
7323            display: none !important;
7324          }
7325        }
7326    </style>
7327
7328    
7329
7330    
7330<script>
7331      function closeDesktopPopup() {
7332        var popup = document.getElementById('desktopAppPopup');
7333        if (popup) {
7334          popup.classList.remove('is-active');
7335        }
7336      }
7337
7338      document.addEventListener('DOMContentLoaded', function () {
7339        var popup = document.getElementById('desktopAppPopup');
7340
7341        if (popup && window.innerWidth >= 768) {
7342          setTimeout(function () {
7343            popup.classList.add('is-active');
7344          }, 500);
7345        }
7346      });
7347    </script>
7347
7348
7349    
7350
7351
7352
7353
7354    
7355
7356    
7357<style data-shopify>
7358  .floating-whatsapp {
7359  position: fixed;
7360  right: 20px;
7361  bottom: 20px;
7362  width: 55px;
7363  height: 55px;
7364  border-radius: 50%;
7365  z-index: 9999;
7366  display: flex;
7367  align-items: center;
7368  justify-content: center;
7369 box-shadow: 0 8px 24px rgba(0, 0, 0, 0.2); 
7370  text-decoration: none;
7371  transition: all 0.3s ease;
7372}
7373
7374.floating-whatsapp:hover {
7375  transform: translateY(-4px) scale(1.08);
7376 box-shadow: 0 12px 28px rgba(0, 0, 0, 0.3);
7377}
7378
7379.floating-whatsapp__image,
7380.floating-whatsapp__svg {
7381  width: 55px;
7382  height: 55px;
7383  display: block;
7384}
7385
7386.floating-whatsapp__image {
7387  object-fit: contain;
7388}
7389
7390
7391@media screen and (max-width: 749px) {
7392  .floating-whatsapp {
7393    width: 50px;
7394    height: 50px;
7395    right: 16px;
7396    bottom: 16px;
7397  }
7398body.page-menu-selector .floating-whatsapp {
7399    bottom: 70px;
7400}
7401body.page-custom-checkout .floating-whatsapp {
7402  bottom: 100px;
7403}
7404  .floating-whatsapp__image,
7405  .floating-whatsapp__svg {
7406    width: 50px;
7407    height: 50px;
7408  }
7409}
7410
7411/* =========================
7412   WHATSAPP PROMPT
7413========================= */
7414
7415.whatsapp-prompt {
7416  position: fixed;
7417  right: 85px;
7418  bottom: 30px;
7419  width: 280px;
7420  max-width: calc(100vw - 110px);
7421  padding: 22px 20px 22px 20px;
7422  background: #FFFFFF;
7423  color: #222222;
7424  font-size: 15px;
7425  line-height: 1.4;
7426  border-radius: 10px;
7427  box-shadow: 0 8px 25px rgba(0,0,0,0.18);
7428  z-index: 999999;
7429  opacity: 0;
7430  visibility: hidden;
7431  transform: translateY(12px) scale(.96);
7432  transition:
7433    opacity .3s ease,
7434    visibility .3s ease,
7435    transform .3s ease;
7436    min-height: 50px;
7437}
7438
7439.whatsapp-prompt::after {
7440  content: "";
7441  position: absolute;
7442  right: -9px;
7443  bottom: 18px;
7444  width: 0;
7445  height: 0;
7446  border-top: 9px solid transparent;
7447  border-bottom: 9px solid transparent;
7448  border-left: 10px solid #FFFFFF;
7449}
7450
7451.whatsapp-prompt.is-visible {
7452  opacity: 1;
7453  visibility: visible;
7454  transform: translateY(0) scale(1);
7455}
7456
7457.whatsapp-prompt__content {
7458  white-space: normal;
7459}
7460
7461.whatsapp-prompt__close {
7462  position: absolute;
7463  top: 5px;
7464  right: 5px;
7465  width: 22px;
7466  height: 22px;
7467  padding: 0;
7468  border: 0;
7469  background: transparent;
7470  color: #222222;
7471  font-size: 18px;
7472  line-height: 1;
7473  cursor: pointer;
7474  opacity: .6;
7475}
7476
7477.whatsapp-prompt__close:hover {
7478  opacity: 1;
7479}
7480
7481
7482/* =========================
7483   MOBILE
7484========================= */
7485
7486@media screen and (max-width: 749px) {
7487
7488  .whatsapp-prompt {
7489    right: 20px;
7490    bottom: 78px;
7491    width: 280px;
7492    max-width: calc(100vw - 95px);
7493    font-size: 14px;
7494    padding: 20px 14px 14px 18px;
7495  }
7496
7497.whatsapp-prompt::after {
7498    right: 20px;
7499    bottom: -11px;
7500    transform: rotate(
750190deg);
7502}
7503}
7504</style>
7505
7506
7507
7508
7509
7510  <div class="whatsapp-wedget-wraaper">
7511    
7512  <div
7513    class="whatsapp-prompt"
7514    id="whatsapp-prompt"
7515  >
7516    <div class="whatsapp-prompt__content">
7517      <p><strong>Hi there! </strong><br/>Need help with prices or have a question?<br/>Chat with us on WhatsApp!</p>
7518    </div>
7519
7520    
7521      <button
7522        type="button"
7523        class="whatsapp-prompt__close"
7524        aria-label="Close"
7525      >
7526        &times;
7527      </button>
7528    
7529  </div>
7530
7531
7532
7533<a
7534  href="https://wa.me/6588365052?text=Hi%20Fresher%20Dinners%2C%20I%E2%80%99m%20interested%20in%20your%20dinner%20plans."
7535  class="floating-whatsapp"
7536  target="_blank"
7537  rel="noopener noreferrer"
7538>
7539
7540  
7541
7542    <img src="//fresherdinners.com.sg/cdn/shop/files/whatsapp-logo-icon.png?v=1785993326&amp;width=80" alt="" srcset="//fresherdinners.com.sg/cdn/shop/files/whatsapp-logo-icon.png?v=1785993326&amp;width=80 80w" width="80" height="80" loading="lazy" class="floating-whatsapp__image">
7543
7544  
7545
7546</a>
7547
7548
7549</div>
7550
7551<script>
7552document.addEventListener('DOMContentLoaded', function () {
7553  const prompt = document.getElementById('whatsapp-prompt');
7554  if (!prompt) return;
7555
7556  let closed = false, timer;
7557
7558  window.addEventListener('scroll', function () {
7559    if (closed) return;
7560
7561    prompt.classList.add('is-visible');
7562    clearTimeout(timer);
7563
7564    
7565  },
7566   { passive: true });
7567
7568  prompt.querySelector('.whatsapp-prompt__close')?.addEventListener('click', function () {
7569    closed = true;
7570    prompt.classList.remove('is-visible');
7571    clearTimeout(timer);
7572  });
7573});
7574</script>
7574
7575
7576 
7577
7578
7579  
7579<script src="https://cdn.shopify.com/storefront/standard-actions.js" type="module" data-source-attribution="shopify.standard_actions"></script>
7579
7580</body>
7581</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.