{"product_id":"15-meal-plan","title":"15 Meal Plan","description":"\u003cbody\u003e\n\u003clink rel=\"stylesheet\" href=\"https:\/\/fonts.googleapis.com\/css2?family=Montserrat:wght@500;700;800;900\u0026amp;family=Open+Sans:wght@400;600;700\u0026amp;display=swap\"\u003e\n\u003cstyle\u003e\n  * { box-sizing: border-box; margin: 0; padding: 0; }\n  body { font-family: 'Open Sans', Arial, sans-serif; background: #fff; color: #111; }\n  .lp { max-width: 680px; margin: 0 auto; overflow: hidden; background: #fff; }\n  .lp img { max-width: 100%; display: block; }\n  .lp a:focus-visible, .lp button:focus-visible, .lp input:focus-visible { outline: 3px solid #244F35; outline-offset: 3px; }\n\n  \/* ===== ANNOUNCE ===== *\/\n  .announce { background: #244F35; padding: 8px 16px; text-align: center; font-family: 'Montserrat', sans-serif; font-size: 12px; font-weight: 700; color: #fff; letter-spacing: 1px; text-transform: uppercase; }\n  .announce span { color: #B9D6C3; }\n\n  \/* ===== HERO ===== *\/\n  .hero { padding: 30px 24px 26px; text-align: center; border-bottom: 3px solid #244F35; }\n  .hero-eyebrow { display: flex; align-items: center; justify-content: center; gap: 10px; font-family: 'Montserrat', sans-serif; font-size: 11px; font-weight: 700; letter-spacing: 3px; text-transform: uppercase; color: #244F35; margin-bottom: 12px; }\n  .hero-eyebrow-line { width: 28px; height: 2px; background: #244F35; }\n  .hero h1 { font-family: 'Montserrat', sans-serif; font-size: clamp(34px, 8vw, 52px); font-weight: 900; line-height: 1.02; text-transform: uppercase; color: #111; margin-bottom: 12px; }\n  .hero-sub { font-size: 16px; line-height: 1.55; color: #444; max-width: 460px; margin: 0 auto; }\n  .hero-img { margin-top: 22px; aspect-ratio: 16\/10; }\n\n  .cta-btn { display: inline-block; background: #244F35; color: #fff !important; font-family: 'Montserrat', sans-serif; font-weight: 800; font-size: 15px; letter-spacing: 1.5px; text-transform: uppercase; text-decoration: none; padding: 15px 40px; border-radius: 4px; border: 0; cursor: pointer; }\n  .cta-btn:hover { background: #1A3A27; }\n  .cta-btn.dark { background: #111; }\n  .cta-btn.dark:hover { background: #000; }\n\n  .ph { background: #F3F3F3; border: 2px dashed #CFCFCF; border-radius: 6px; display: flex; align-items: center; justify-content: center; text-align: center; color: #777; font-family: 'Montserrat', sans-serif; font-size: 13px; font-weight: 600; padding: 14px; }\n\n  \/* ===== STATS TICKER ===== *\/\n  .stats-ticker { background: #244F35; overflow: hidden; white-space: nowrap; }\n  .ticker-track { display: inline-flex; animation: tick 22s linear infinite; }\n  .stats-ticker:hover .ticker-track { animation-play-state: paused; }\n  .stat-chip { flex: 0 0 auto; display: inline-flex; align-items: center; gap: 10px; padding: 14px 24px; border-right: 1px solid rgba(255,255,255,.28); }\n  .stat-chip-num { font-family: 'Montserrat', sans-serif; font-weight: 900; font-size: 26px; color: #fff; }\n  .stat-chip-label { font-family: 'Montserrat', sans-serif; font-weight: 700; font-size: 10px; letter-spacing: 1px; line-height: 1.25; text-transform: uppercase; color: #CFE3D6; white-space: normal; width: 80px; }\n  @keyframes tick { from { transform: translateX(0); } to { transform: translateX(-50%); } }\n  @media (prefers-reduced-motion: reduce) { .ticker-track { animation: none; } }\n\n  \/* ===== PROOF GRID ===== *\/\n  .proof { display: grid; grid-template-columns: repeat(3, 1fr); border-bottom: 1px solid #E5E5E5; }\n  .proof-cell { text-align: center; padding: 20px 8px; border-right: 1px solid #E5E5E5; }\n  .proof-cell:last-child { border-right: 0; }\n  .proof-num { font-family: 'Montserrat', sans-serif; font-weight: 900; font-size: 30px; color: #111; }\n  .proof-num span { color: #244F35; }\n  .proof-label { font-family: 'Montserrat', sans-serif; font-weight: 700; font-size: 10px; letter-spacing: 1.5px; text-transform: uppercase; color: #666; margin-top: 4px; }\n\n  \/* ===== SECTIONS ===== *\/\n  .lp .section { padding: 34px 24px; text-align: center; border-bottom: 1px solid #E5E5E5; }\n  .eyebrow { font-family: 'Montserrat', sans-serif; font-size: 11px; font-weight: 700; letter-spacing: 3px; text-transform: uppercase; color: #244F35; margin-bottom: 8px; }\n  .heading { font-family: 'Montserrat', sans-serif; font-size: clamp(28px, 6.5vw, 40px); font-weight: 900; line-height: 1.05; text-transform: uppercase; color: #111; margin-bottom: 12px; }\n  .lead { font-size: 15px; line-height: 1.65; color: #444; max-width: 520px; margin: 0 auto; }\n  .lead strong { color: #111; }\n  .lead + .lead { margin-top: 10px; }\n  .usp-sm { padding: 28px 24px; }\n\n  \/* Chef *\/\n  .chef-img { width: 200px; aspect-ratio: 4\/5; margin: 0 auto 18px; }\n  .chef-quote { font-family: 'Montserrat', sans-serif; font-weight: 800; font-size: 18px; line-height: 1.35; color: #111; max-width: 480px; margin: 18px auto 0; padding-top: 16px; border-top: 2px solid #244F35; }\n  .chef-quote cite { display: block; font-style: normal; font-weight: 700; font-size: 11px; letter-spacing: 2px; text-transform: uppercase; color: #244F35; margin-top: 8px; }\n\n  \/* Global fusion *\/\n  .cuisines { display: flex; flex-wrap: wrap; justify-content: center; gap: 8px; margin-top: 18px; }\n  .cuisine { font-family: 'Montserrat', sans-serif; font-weight: 700; font-size: 12px; letter-spacing: 1px; text-transform: uppercase; border: 2px solid #111; border-radius: 999px; padding: 7px 14px; color: #111; }\n  .cuisine.on { background: #244F35; border-color: #244F35; color: #fff; }\n  .menu-gif { margin-top: 20px; aspect-ratio: 1\/1; }\n\n  \/* How it works: one line *\/\n  .how { display: flex; align-items: center; justify-content: center; gap: 6px; margin-top: 16px; flex-wrap: nowrap; }\n  .how-chip { flex: 1 1 0; background: #F5F8F6; border: 1.5px solid #244F35; border-radius: 8px; padding: 12px 6px; text-align: center; }\n  .how-num { font-family: 'Montserrat', sans-serif; font-weight: 900; font-size: 18px; color: #244F35; }\n  .how-txt { font-family: 'Montserrat', sans-serif; font-weight: 700; font-size: 11px; letter-spacing: .5px; text-transform: uppercase; color: #111; line-height: 1.25; margin-top: 4px; }\n  .how-arrow { flex: 0 0 auto; color: #244F35; font-weight: 900; font-size: 18px; }\n\n  \/* Delivery *\/\n  .zones { display: flex; flex-wrap: wrap; justify-content: center; gap: 6px; margin: 16px 0 18px; }\n  .zone { font-family: 'Montserrat', sans-serif; font-weight: 700; font-size: 11px; letter-spacing: .5px; text-transform: uppercase; background: #F1F1F1; color: #111; padding: 6px 11px; border-radius: 999px; }\n  .zone.hub { background: #244F35; color: #fff; }\n  .map-frame { border: 2px solid #111; border-radius: 8px; overflow: hidden; text-align: left; }\n  .map-frame-head { background: #111; color: #fff; padding: 12px 16px; }\n  .mf-title { font-family: 'Montserrat', sans-serif; font-weight: 800; font-size: 14px; text-transform: uppercase; letter-spacing: .5px; }\n  .mf-sub { font-size: 12px; color: #BBB; margin-top: 2px; }\n  #mt-map { height: 340px; background: #EEE; z-index: 0; }\n  .mt-fallback { display: flex; align-items: center; justify-content: center; height: 100%; padding: 20px; text-align: center; font-family: 'Montserrat', sans-serif; font-weight: 600; font-size: 14px; color: #555; }\n  .mt-tip { background: #244F35 !important; color: #fff !important; border: 0 !important; font-family: 'Montserrat', sans-serif; font-weight: 700; font-size: 11px; padding: 3px 7px !important; border-radius: 4px !important; box-shadow: none !important; }\n  .mt-tip::before { border-top-color: #244F35 !important; }\n  .mt-tip.hq { background: #111 !important; }\n  .mt-tip.hq::before { border-top-color: #111 !important; }\n  .schedule-merged { display: flex; align-items: stretch; background: #F5F8F6; border-top: 2px solid #111; }\n  .schedule-merged-col { flex: 1; padding: 14px 12px; text-align: center; }\n  .smc-divider { width: 1px; background: #CFCFCF; }\n  .smc-label { font-family: 'Montserrat', sans-serif; font-weight: 700; font-size: 10px; letter-spacing: 1.5px; text-transform: uppercase; color: #244F35; }\n  .smc-value { font-family: 'Montserrat', sans-serif; font-weight: 900; font-size: 18px; color: #111; margin: 3px 0; text-transform: uppercase; }\n  .smc-note { font-size: 12px; color: #555; }\n  .rollover-note { font-size: 13px; color: #555; margin-top: 12px; }\n\n  .checker { margin-top: 18px; border: 2px solid #244F35; border-radius: 8px; padding: 16px; text-align: left; }\n  .checker label { display: block; font-family: 'Montserrat', sans-serif; font-weight: 800; font-size: 13px; letter-spacing: 1px; text-transform: uppercase; color: #111; margin-bottom: 10px; }\n  .checker-row { display: flex; gap: 8px; flex-wrap: wrap; }\n  .checker input { flex: 1 1 200px; font: inherit; font-size: 15px; padding: 12px 14px; border: 1.5px solid #CFCFCF; border-radius: 4px; color: #111; }\n  .checker .cta-btn { padding: 12px 24px; font-size: 13px; }\n  .result { font-family: 'Montserrat', sans-serif; font-size: 14px; font-weight: 600; margin-top: 10px; min-height: 1.3em; color: #555; }\n  .result.ok { color: #244F35; font-weight: 800; }\n  .result.no { color: #A32020; font-weight: 800; }\n\n  \/* Final CTA *\/\n  .cta-final { background: #111; color: #fff; text-align: center; padding: 36px 24px; }\n  .cta-final h2 { font-family: 'Montserrat', sans-serif; font-weight: 900; font-size: clamp(26px, 6vw, 36px); color: #FFFFFF !important; text-transform: uppercase; line-height: 1.05; margin-bottom: 10px; }\n  .cta-final p { font-size: 15px; color: #CCC; margin-bottom: 20px; }\n  .foot { background: #244F35; color: #fff; text-align: center; font-family: 'Montserrat', sans-serif; font-size: 11px; font-weight: 600; letter-spacing: .5px; padding: 14px 16px; }\n  .foot a { color: #fff; }\n\n  @media (max-width: 480px) {\n    .how { flex-wrap: wrap; }\n    .how-chip { flex: 1 1 40%; }\n    .how-arrow { display: none; }\n    .proof-num { font-size: 24px; }\n    .schedule-merged { flex-direction: column; }\n    .smc-divider { width: auto; height: 1px; }\n  }\n\u003c\/style\u003e\n\n\n\u003cdiv class=\"lp\"\u003e\n\n\u003cdiv class=\"announce\"\u003eChef-crafted meals \u003cspan\u003e|\u003c\/span\u003e Delivered every Monday \u0026amp; Thursday\u003c\/div\u003e\n\n\u003c!-- HERO --\u003e\n\u003cdiv class=\"hero\"\u003e\n  \u003cdiv class=\"hero-eyebrow\"\u003e\n\u003cspan class=\"hero-eyebrow-line\"\u003e\u003c\/span\u003eGourmet Meal Prep — London, ON\u003cspan class=\"hero-eyebrow-line\"\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n  \u003ch1\u003eChef-Crafted Meals Delivered Across London\u003c\/h1\u003e\n  \u003cp class=\"hero-sub\"\u003e\u003cem\u003e\u003cstrong\u003eLow-calorie, high-protein meals to fuel your busy days.\u003c\/strong\u003e\u003c\/em\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\n\u003c!-- STATS TICKER (doubled for a seamless loop) --\u003e\n\u003cdiv class=\"stats-ticker\" aria-label=\"Market Table at a glance\"\u003e\n  \u003cdiv class=\"ticker-track\"\u003e\n    \u003cdiv class=\"stat-chip\"\u003e\n\u003cspan class=\"stat-chip-num\"\u003e\u0026lt;550\u003c\/span\u003e\u003cspan class=\"stat-chip-label\"\u003eCalories per meal\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"stat-chip\"\u003e\n\u003cspan class=\"stat-chip-num\"\u003e30g+\u003c\/span\u003e\u003cspan class=\"stat-chip-label\"\u003eProtein per meal\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"stat-chip\"\u003e\n\u003cspan class=\"stat-chip-num\"\u003e20+\u003c\/span\u003e\u003cspan class=\"stat-chip-label\"\u003eYears chef experience\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"stat-chip\"\u003e\n\u003cspan class=\"stat-chip-num\"\u003e30 km\u003c\/span\u003e\u003cspan class=\"stat-chip-label\"\u003eDelivery radius\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"stat-chip\"\u003e\n\u003cspan class=\"stat-chip-num\"\u003eVegan\u003c\/span\u003e\u003cspan class=\"stat-chip-label\"\u003eOptions every menu\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"stat-chip\"\u003e\n\u003cspan class=\"stat-chip-num\"\u003e0\u003c\/span\u003e\u003cspan class=\"stat-chip-label\"\u003ePrep or cleanup\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"stat-chip\" aria-hidden=\"true\"\u003e\n\u003cspan class=\"stat-chip-num\"\u003e\u0026lt;550\u003c\/span\u003e\u003cspan class=\"stat-chip-label\"\u003eCalories per meal\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"stat-chip\" aria-hidden=\"true\"\u003e\n\u003cspan class=\"stat-chip-num\"\u003e30g+\u003c\/span\u003e\u003cspan class=\"stat-chip-label\"\u003eProtein per meal\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"stat-chip\" aria-hidden=\"true\"\u003e\n\u003cspan class=\"stat-chip-num\"\u003e20+\u003c\/span\u003e\u003cspan class=\"stat-chip-label\"\u003eYears chef experience\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"stat-chip\" aria-hidden=\"true\"\u003e\n\u003cspan class=\"stat-chip-num\"\u003e30 km\u003c\/span\u003e\u003cspan class=\"stat-chip-label\"\u003eDelivery radius\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"stat-chip\" aria-hidden=\"true\"\u003e\n\u003cspan class=\"stat-chip-num\"\u003eVegan\u003c\/span\u003e\u003cspan class=\"stat-chip-label\"\u003eOptions every menu\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"stat-chip\" aria-hidden=\"true\"\u003e\n\u003cspan class=\"stat-chip-num\"\u003e0\u003c\/span\u003e\u003cspan class=\"stat-chip-label\"\u003ePrep or cleanup\u003c\/span\u003e\n\u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- SOCIAL PROOF --\u003e\n\u003cdiv class=\"proof\"\u003e\n  \u003cdiv class=\"proof-cell\"\u003e\n\u003cdiv class=\"proof-num\"\u003e31\u003cspan\u003eK+\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"proof-label\"\u003eMeals Served\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"proof-cell\"\u003e\n\u003cdiv class=\"proof-num\"\u003e4.9\u003cspan\u003e★\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"proof-label\"\u003eStar Rating\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003cdiv class=\"proof-cell\"\u003e\n\u003cdiv class=\"proof-num\"\u003e#1\u003c\/div\u003e\n\u003cdiv class=\"proof-label\"\u003eIn London, Ontario\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- CHEF SECTION --\u003e\n\u003cdiv class=\"section\"\u003e\n  \u003cdiv class=\"heading\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1004\/5672\/6811\/files\/STRIPPED_65_bytes_-swap-out-these-men-with-indian-men-in-the-kitchen.jpg?v=1792613820\" alt=\"\"\u003e\u003c\/div\u003e\n  \u003cdiv class=\"heading\"\u003eExpertly Chef-Crafted Meals\u003c\/div\u003e\n  \u003cp class=\"lead\"\u003eEvery meal is made by our team of chefs, led by \u003cstrong\u003eHead Chef Chamin\u003c\/strong\u003e and his \u003cstrong\u003e20+ years of cooking experience\u003c\/strong\u003e in hotel kitchens across Sri Lanka, Singapore, Dubai and Toronto. You get \u003cstrong\u003erestaurant-quality food at home\u003c\/strong\u003e, without the restaurant price or the hours in the kitchen.\u003c\/p\u003e\n\u003c\/div\u003e\n\n\u003c!-- SHORT USPS --\u003e\n\u003cdiv class=\"section usp-sm\"\u003e\n  \u003cdiv class=\"eyebrow\"\u003eLight on Calories\u003c\/div\u003e\n  \u003cdiv class=\"heading\"\u003eUnder 550 Calories\u003c\/div\u003e\n  \u003cp class=\"lead\"\u003eStay on track without counting a thing. Every meal is \u003cstrong\u003eportioned by our chefs\u003c\/strong\u003e, so you get \u003cstrong\u003efull flavour with fewer calories\u003c\/strong\u003e and no guesswork.\u003c\/p\u003e\n\u003c\/div\u003e\n\n\u003cdiv class=\"section usp-sm\"\u003e\n  \u003cdiv class=\"eyebrow\"\u003eHigh Protein\u003c\/div\u003e\n  \u003cdiv class=\"heading\"\u003e30g+ of Protein\u003c\/div\u003e\n  \u003cp class=\"lead\"\u003eYour body uses protein every day to \u003cstrong\u003erepair itself and keep your muscles, bones and skin strong\u003c\/strong\u003e. It also \u003cstrong\u003ekeeps you full longer\u003c\/strong\u003e, so you’re not reaching for snacks an hour after lunch. Every meal gives you \u003cstrong\u003e30g+\u003c\/strong\u003e, so you hit your daily needs without tracking a thing.\u003c\/p\u003e\n\u003c\/div\u003e\n\n\u003cdiv class=\"section usp-sm\"\u003e\n  \u003cdiv class=\"eyebrow\"\u003eBalanced Nutrition\u003c\/div\u003e\n  \u003cdiv class=\"heading\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1004\/5672\/6811\/files\/salmon-bowl-callouts-clean-up-this-graphic-and-enhance-the-quality-of-t.jpg?v=1792613543\" alt=\"\"\u003e\u003c\/div\u003e\n  \u003cdiv class=\"heading\"\u003eBalanced Meals\u003c\/div\u003e\n  \u003cp class=\"lead\"\u003eEvery meal has a balance of \u003cstrong\u003efresh vegetables\u003c\/strong\u003e, \u003cstrong\u003ecarbs for fuel\u003c\/strong\u003e, and \u003cstrong\u003eprotein for building and maintaining muscle\u003c\/strong\u003e, so your body gets everything it needs in one container.\u003c\/p\u003e\n\u003c\/div\u003e\n\n\u003cdiv class=\"section usp-sm\"\u003e\n  \u003cdiv class=\"eyebrow\"\u003eQuality You Can Taste\u003c\/div\u003e\n  \u003cdiv class=\"heading\"\u003ePremium Ingredients\u003c\/div\u003e\n  \u003cp class=\"lead\"\u003eWe cook with \u003cstrong\u003echicken breast, salmon, tiger shrimp and haddock\u003c\/strong\u003e, \u003cstrong\u003efresh herbs\u003c\/strong\u003e and \u003cstrong\u003eolive oil\u003c\/strong\u003e, the same ingredients you’d find in a good restaurant, so every meal tastes as good as it is for you.\u003c\/p\u003e\n\u003c\/div\u003e\n\n\u003cdiv class=\"section usp-sm\"\u003e\n  \u003cdiv class=\"eyebrow\"\u003eNever Get Bored\u003c\/div\u003e\n  \u003cdiv class=\"heading\"\u003e10+ Meals to Choose From\u003c\/div\u003e\n  \u003cp class=\"lead\"\u003eFrom \u003cstrong\u003eLemon-Oregano Chicken Souvlaki\u003c\/strong\u003e to \u003cstrong\u003eSticky Honey Chili Salmon\u003c\/strong\u003e to \u003cstrong\u003eTandoori Tofu \u0026amp; Chickpea Masala\u003c\/strong\u003e, there’s a meal for every craving, including \u003cstrong\u003evegan picks\u003c\/strong\u003e. Mix and match as many as you like, so you’re never stuck eating the same thing all week.\u003c\/p\u003e\n\u003c\/div\u003e\n\n\u003c!-- GLOBAL FUSION --\u003e\n\u003cdiv class=\"section\"\u003e\n  \u003cdiv class=\"eyebrow\"\u003eInspired by the World\u003c\/div\u003e\n  \u003cdiv class=\"heading\"\u003eGlobal Fusion Meals\u003c\/div\u003e\n  \u003cp class=\"lead\"\u003eHealthy eating gets boring fast. Our menu blends \u003cstrong\u003eflavours from Asia, the Mediterranean and Latin America\u003c\/strong\u003e, so eating healthy never feels like a chore and you \u003cstrong\u003eactually look forward to your next meal\u003c\/strong\u003e.\u003c\/p\u003e\n  \u003cp class=\"lead\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1004\/5672\/6811\/files\/thali_piped_transparent_2-make-the-angle-the-same-as-what-i-provided-render-the-background-transpare_3.jpg?v=1792613685\" alt=\"\"\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\n\u003c!-- HOW IT WORKS (one line) --\u003e\n\u003cdiv class=\"section\"\u003e\n  \u003cdiv class=\"eyebrow\"\u003eHow It Works\u003c\/div\u003e\n  \u003cdiv class=\"heading\"\u003eDinner in 4 Steps\u003c\/div\u003e\n  \u003cdiv class=\"how\"\u003e\n    \u003cdiv class=\"how-chip\"\u003e\n\u003cdiv class=\"how-num\"\u003e1\u003c\/div\u003e\n\u003cdiv class=\"how-txt\"\u003ePick Your Meals\u003c\/div\u003e\n\u003c\/div\u003e\n    \u003cspan class=\"how-arrow\" aria-hidden=\"true\"\u003e›\u003c\/span\u003e\n    \u003cdiv class=\"how-chip\"\u003e\n\u003cdiv class=\"how-num\"\u003e2\u003c\/div\u003e\n\u003cdiv class=\"how-txt\"\u003eWe Cook Fresh\u003c\/div\u003e\n\u003c\/div\u003e\n    \u003cspan class=\"how-arrow\" aria-hidden=\"true\"\u003e›\u003c\/span\u003e\n    \u003cdiv class=\"how-chip\"\u003e\n\u003cdiv class=\"how-num\"\u003e3\u003c\/div\u003e\n\u003cdiv class=\"how-txt\"\u003eWe Deliver\u003c\/div\u003e\n\u003c\/div\u003e\n    \u003cspan class=\"how-arrow\" aria-hidden=\"true\"\u003e›\u003c\/span\u003e\n    \u003cdiv class=\"how-chip\"\u003e\n\u003cdiv class=\"how-num\"\u003e4\u003c\/div\u003e\n\u003cdiv class=\"how-txt\"\u003eHeat \u0026amp; Eat\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- DELIVERY --\u003e\n\u003cdiv class=\"section\"\u003e\n  \u003cdiv class=\"eyebrow\"\u003eDelivery\u003c\/div\u003e\n  \u003cdiv class=\"heading\"\u003eDelivered Across London, Ontario\u003c\/div\u003e\n  \u003cp class=\"lead\"\u003eWe deliver to \u003cstrong\u003eall of London\u003c\/strong\u003e and the towns around it, right to your door.\u003c\/p\u003e\n  \u003cdiv class=\"zones\"\u003e\n    \u003cspan class=\"zone hub\"\u003eLondon\u003c\/span\u003e\u003cspan class=\"zone\"\u003eSt. Thomas\u003c\/span\u003e\u003cspan class=\"zone\"\u003eKomoka\u003c\/span\u003e\u003cspan class=\"zone\"\u003eLambeth\u003c\/span\u003e\u003cspan class=\"zone\"\u003eByron\u003c\/span\u003e\u003cspan class=\"zone\"\u003eArva\u003c\/span\u003e\u003cspan class=\"zone\"\u003eIlderton\u003c\/span\u003e\u003cspan class=\"zone\"\u003eDorchester\u003c\/span\u003e\u003cspan class=\"zone\"\u003eBelmont\u003c\/span\u003e\u003cspan class=\"zone\"\u003eThorndale\u003c\/span\u003e\u003cspan class=\"zone\"\u003eMount Brydges\u003c\/span\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"map-frame\"\u003e\n    \u003cdiv class=\"map-frame-head\"\u003e\n      \u003cdiv class=\"mf-title\"\u003eOur Delivery Zone\u003c\/div\u003e\n      \u003cdiv class=\"mf-sub\"\u003ePins show the towns we deliver to\u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv id=\"mt-map\" role=\"region\" aria-label=\"Map of the Market Table delivery area\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"schedule-merged\"\u003e\n      \u003cdiv class=\"schedule-merged-col\"\u003e\n        \u003cdiv class=\"smc-label\"\u003eHome Delivery — Monday\u003c\/div\u003e\n        \u003cdiv class=\"smc-value\"\u003eEvery Monday\u003c\/div\u003e\n        \u003cdiv class=\"smc-note\"\u003e12 PM – 2 PM · Order by Sunday 7:00 PM\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"smc-divider\"\u003e\u003c\/div\u003e\n      \u003cdiv class=\"schedule-merged-col\"\u003e\n        \u003cdiv class=\"smc-label\"\u003eHome Delivery — Thursday\u003c\/div\u003e\n        \u003cdiv class=\"smc-value\"\u003eEvery Thursday\u003c\/div\u003e\n        \u003cdiv class=\"smc-note\"\u003e2 PM – 4 PM · Order by Wednesday 7:00 PM\u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cp class=\"rollover-note\"\u003eOrder online anytime, 24\/7. Miss a cutoff? Your order rolls to the \u003cstrong\u003enext delivery day\u003c\/strong\u003e.\u003c\/p\u003e\n\n  \u003cdiv class=\"checker\"\u003e\n    \u003clabel for=\"mt-addr\"\u003eDo we deliver to you?\u003c\/label\u003e\n    \u003cdiv class=\"checker-row\"\u003e\n      \u003cinput id=\"mt-addr\" type=\"text\" placeholder=\"Street address or postal code\" autocomplete=\"street-address\"\u003e\n      \u003cbutton class=\"cta-btn\" id=\"mt-check\" type=\"button\"\u003eCheck\u003c\/button\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"result\" id=\"mt-result\" role=\"status\" aria-live=\"polite\"\u003e\u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- FINAL CTA --\u003e\n\u003cdiv class=\"cta-final\"\u003e\n  \u003ch2\u003eYour Table Is Set\u003c\/h2\u003e\n  \u003cp\u003eThis week’s menu is ready. Pick your meals and we’ll handle the rest.\u003c\/p\u003e\n  \u003ca class=\"cta-btn\" href=\"\/collections\/meal-plans\"\u003eOrder Now\u003c\/a\u003e\n\u003c\/div\u003e\n\n\u003cdiv class=\"foot\"\u003e© 2026 Market Table · 361 Dundas St, London, ON N6B 1V5 · \u003ca href=\"\/pages\/contact\"\u003eContact\u003c\/a\u003e\n\u003c\/div\u003e\n\n\u003c\/div\u003e\n\n\u003cscript\u003e\n(function(){\n  var HQ = [42.98535, -81.24420];\n  var RADIUS_KM = 30;\n  var CSS = 'https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/leaflet\/1.9.4\/leaflet.min.css';\n  var JS  = 'https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/leaflet\/1.9.4\/leaflet.min.js';\n  var TOWNS = [\n    ['St. Thomas',42.7787,-81.1752],['Komoka',42.9416,-81.4340],['Lambeth',42.9053,-81.3150],\n    ['Arva',43.0390,-81.2930],['Ilderton',43.0550,-81.4110],['Dorchester',43.0010,-81.0340],\n    ['Belmont',42.8810,-81.0890],['Thorndale',43.1100,-81.1380],['Mount Brydges',42.9010,-81.4990],\n    ['Byron',42.9620,-81.3340]\n  ];\n  var map = null, userPin = null;\n\n  function km(a,b){\n    var R=6371,t=Math.PI\/180,dLat=(b[0]-a[0])*t,dLon=(b[1]-a[1])*t;\n    var x=Math.sin(dLat\/2)*Math.sin(dLat\/2)+Math.cos(a[0]*t)*Math.cos(b[0]*t)*Math.sin(dLon\/2)*Math.sin(dLon\/2);\n    return R*2*Math.atan2(Math.sqrt(x),Math.sqrt(1-x));\n  }\n  function loadCss(){\n    if(document.querySelector('link[data-mt-leaflet]')) return;\n    var l=document.createElement('link'); l.rel='stylesheet'; l.href=CSS; l.setAttribute('data-mt-leaflet','1'); document.head.appendChild(l);\n  }\n  function loadJs(cb){\n    if(window.L) return cb();\n    var s=document.createElement('script'); s.src=JS; s.async=true; s.onload=cb;\n    s.onerror=function(){ var el=document.getElementById('mt-map'); if(el) el.innerHTML='\u003cdiv class=\"mt-fallback\"\u003eWe deliver across London, including every town listed above.\u003c\/div\u003e'; };\n    document.head.appendChild(s);\n  }\n  function icon(color,star){\n    var inner = star ? '\u003ctext x=\"18\" y=\"17\" text-anchor=\"middle\" dominant-baseline=\"central\" font-size=\"15\" font-family=\"Arial\" font-weight=\"bold\" fill=\"#fff\"\u003e\u0026#9733;\u003c\/text\u003e' : '\u003ccircle cx=\"18\" cy=\"16\" r=\"5.5\" fill=\"#fff\"\/\u003e';\n    return L.divIcon({className:'',html:'\u003csvg width=\"36\" height=\"46\" viewBox=\"0 0 36 46\"\u003e\u003cpath d=\"M18 45C18 45 3 28 3 16a15 15 0 0 1 30 0c0 12-15 29-15 29z\" fill=\"'+color+'\"\/\u003e'+inner+'\u003c\/svg\u003e',iconSize:[36,46],iconAnchor:[18,45],popupAnchor:[0,-42]});\n  }\n  function init(){\n    var el=document.getElementById('mt-map'); if(!el||map) return;\n    map=L.map(el,{scrollWheelZoom:false}).setView(HQ,10);\n    L.tileLayer('https:\/\/{s}.basemaps.cartocdn.com\/light_all\/{z}\/{x}\/{y}{r}.png',{maxZoom:18,subdomains:'abcd',attribution:'\u0026copy; OpenStreetMap \u0026copy; CARTO'}).addTo(map);\n    var ring=L.circle(HQ,{radius:RADIUS_KM*1000,color:'#244F35',weight:2,dashArray:'6 6',fillColor:'#244F35',fillOpacity:.08}).addTo(map);\n    map.fitBounds(ring.getBounds(),{padding:[6,6]});\n    L.marker([42.9849,-81.2453],{icon:icon('#244F35',false)}).addTo(map)\n      .bindTooltip('London',{permanent:true,direction:'top',offset:[0,-40],className:'mt-tip'})\n      .bindPopup('\u003cb\u003eLondon\u003c\/b\u003e\u003cbr\u003e\u003csmall\u003e\u0026#10003; Delivery available\u003c\/small\u003e');\n    TOWNS.forEach(function(c){\n      L.marker([c[1],c[2]],{icon:icon('#244F35',false)}).addTo(map)\n        .bindTooltip(c[0],{permanent:true,direction:'top',offset:[0,-40],className:'mt-tip'})\n        .bindPopup('\u003cb\u003e'+c[0]+'\u003c\/b\u003e\u003cbr\u003e\u003csmall\u003e\u0026#10003; Delivery available\u003c\/small\u003e');\n    });\n    [300,1200].forEach(function(ms){setTimeout(function(){map.invalidateSize()},ms)});\n    window.addEventListener('load',function(){map.invalidateSize()});\n    window.addEventListener('resize',function(){map.invalidateSize()});\n    if('IntersectionObserver' in window){ new IntersectionObserver(function(es,o){es.forEach(function(e){if(e.isIntersecting){map.invalidateSize();o.disconnect()}})}).observe(el); }\n  }\n\n  function show(cls,msg){var r=document.getElementById('mt-result'); r.className='result '+cls; r.textContent=msg;}\n  function geocode(q){ return fetch('https:\/\/nominatim.openstreetmap.org\/search?format=json\u0026limit=1\u0026countrycodes=ca\u0026q='+encodeURIComponent(q)).then(function(r){return r.json()}); }\n  function check(){\n    var q=(document.getElementById('mt-addr').value||'').trim();\n    if(!q){ show('','Enter a street address or postal code.'); return; }\n    show('','Checking your address…');\n    var isPostal=\/^[A-Za-z]\\d[A-Za-z]\\s?\\d[A-Za-z]\\d$\/.test(q);\n    geocode(isPostal ? q.toUpperCase() : q+', Ontario').then(function(d){\n      if(d[0]) return d[0];\n      if(isPostal) return geocode(q.slice(0,3).toUpperCase()+', Ontario').then(function(d2){return d2[0]});\n      return null;\n    }).then(function(hit){\n      if(!hit){ show('','We couldn’t find that address. Check the spelling or try your postal code.'); return; }\n      var pt=[+hit.lat,+hit.lon], dist=km(HQ,pt);\n      if(map\u0026\u0026window.L){ if(userPin) map.removeLayer(userPin); userPin=L.marker(pt,{icon:icon(dist\u003c=RADIUS_KM?'#244F35':'#A32020',false)}).addTo(map); map.setView(pt,11); }\n      if(dist\u003c=RADIUS_KM) show('ok','Good news! We deliver to your address.');\n      else show('no','Sorry, that address is just outside our delivery zone for now.');\n    }).catch(function(){ show('','We couldn’t check that address right now. Try again in a moment.'); });\n  }\n\n  function start(){\n    var b=document.getElementById('mt-check'), i=document.getElementById('mt-addr');\n    if(b) b.addEventListener('click',check);\n    if(i) i.addEventListener('keydown',function(e){if(e.key==='Enter'){e.preventDefault();check();}});\n    if(!document.getElementById('mt-map')){\n      var n=0,t=setInterval(function(){ if(document.getElementById('mt-map')||++n\u003e20){clearInterval(t); if(document.getElementById('mt-map')){loadCss();loadJs(init);}} },250);\n      return;\n    }\n    loadCss(); loadJs(init);\n  }\n  if(document.readyState==='loading') document.addEventListener('DOMContentLoaded',start); else start();\n})();\n\u003c\/script\u003e\n\n\u003c\/body\u003e","brand":"Market Table","offers":[{"title":"Default Title","offer_id":50583919788170,"sku":null,"price":237.13,"currency_code":"CAD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0807\/5224\/6922\/files\/00.png?v=1793133693","url":"https:\/\/markettablemeals.com\/products\/15-meal-plan","provider":"Market Table","version":"1.0","type":"link"}