1<!doctype html> 2 3<html lang="en" dir="ltr"> 4 <head> 5 <meta charset="utf-8"> 6 <meta name="viewport" content="width=device-width, initial-scale=1.0, height=device-height, minimum-scale=1.0, maximum-scale=5.0"> 7 8 <title>Pure Peanut Crackers - Cracked Black Pepper - 20g</title><meta name="description" content="Uppernut Cracked Black Pepper Peanut cracker Bites offer a unique and satisfying crunch, with just the right amount of bold, peppery flavour. Each 20g pack is the perfect on-the-go snack to satisfy your hunger and spice cravings. These bites are a great alternative to traditional chips or other unhealthy snacks, provid"><link rel="canonical" href="https://sowandarrow.com/products/pure-peanut-crackers-cracked-black-pepper-20g"><link rel="shortcut icon" href="//sowandarrow.com/cdn/shop/files/Website_Favicon.png?v=1752265315&width=96"> 9 <link rel="apple-touch-icon" href="//sowandarrow.com/cdn/shop/files/Website_Favicon.png?v=1752265315&width=180"><link rel="preload" href="//sowandarrow.com/cdn/fonts/bricolage_grotesque/bricolagegrotesque_n4.3c051773a9f927cd8737c10568a7e4175690f7d9.woff2" as="font" type="font/woff2" crossorigin><link rel="preload" href="//sowandarrow.com/cdn/fonts/instrument_sans/instrumentsans_n4.db86542ae5e1596dbdb28c279ae6c2086c4c5bfa.woff2" as="font" type="font/woff2" crossorigin><meta property="og:type" content="product"> 10 <meta property="og:title" content="Pure Peanut Crackers - Cracked Black Pepper - 20g"> 11 <meta property="product:price:amount" content="1.65"> 12 <meta property="product:price:currency" content="GBP"> 13 <meta property="product:availability" content="in stock"><meta property="og:image" content="http://sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers.avif?v=1788431863&width=2048"> 14 <meta property="og:image:secure_url" content="https://sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers.avif?v=1788431863&width=2048"> 15 <meta property="og:image:width" content="996"> 16 <meta property="og:image:height" content="996"><meta property="og:description" content="Uppernut Cracked Black Pepper Peanut cracker Bites offer a unique and satisfying crunch, with just the right amount of bold, peppery flavour. Each 20g pack is the perfect on-the-go snack to satisfy your hunger and spice cravings. These bites are a great alternative to traditional chips or other unhealthy snacks, provid"><meta property="og:url" content="https://sowandarrow.com/products/pure-peanut-crackers-cracked-black-pepper-20g"> 17<meta property="og:site_name" content="Sow & Arrow"><meta name="twitter:card" content="summary"><meta name="twitter:title" content="Pure Peanut Crackers - Cracked Black Pepper - 20g"> 18 <meta name="twitter:description" content="Uppernut Cracked Black Pepper Peanut cracker Bites offer a unique and satisfying crunch, with just the right amount of bold, peppery flavour. Each 20g pack is the perfect on-the-go snack to satisfy your hunger and spice cravings. 19These bites are a great alternative to traditional chips or other unhealthy snacks, providing a grain-free, low-carb, delicious snacking experience. Whether you're a fan of bold flavours or just looking for a healthier snack option, our Cracked Black Pepper Peanut Bites are sure to satisfy your cravings."><meta name="twitter:image" content="https://sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers.avif?crop=center&height=1200&v=1788431863&width=1200"> 20 <meta name="twitter:image:alt" content="">
20<script type="application/ld+json">{"@context":"http:\/\/schema.org\/","@id":"\/products\/pure-peanut-crackers-cracked-black-pepper-20g#product","@type":"Product","brand":{"@type":"Brand","name":"Uppernut"},"category":"Crackers","description":"Uppernut Cracked Black Pepper Peanut cracker Bites offer a unique and satisfying crunch, with just the right amount of bold, peppery flavour. Each 20g pack is the perfect on-the-go snack to satisfy your hunger and spice cravings. \nThese bites are a great alternative to traditional chips or other unhealthy snacks, providing a grain-free, low-carb, delicious snacking experience. Whether you're a fan of bold flavours or just looking for a healthier snack option, our Cracked Black Pepper Peanut Bites are sure to satisfy your cravings.","gtin":"5070000615929","image":"https:\/\/sowandarrow.com\/cdn\/shop\/files\/CrackedBlackPepperPeanutCrackers.avif?v=1788431863\u0026width=1920","name":"Pure Peanut Crackers - Cracked Black Pepper - 20g","offers":{"@id":"\/products\/pure-peanut-crackers-cracked-black-pepper-20g?variant=57225090072954#offer","@type":"Offer","availability":"http:\/\/schema.org\/InStock","price":"1.65","priceCurrency":"GBP","url":"https:\/\/sowandarrow.com\/products\/pure-peanut-crackers-cracked-black-pepper-20g?variant=57225090072954"},"url":"https:\/\/sowandarrow.com\/products\/pure-peanut-crackers-cracked-black-pepper-20g"}</script>
20<script type="application/ld+json"> 21 { 22 "@context": "https://schema.org", 23 "@type": "BreadcrumbList", 24 "itemListElement": [{ 25 "@type": "ListItem", 26 "position": 1, 27 "name": "Home", 28 "item": "https://sowandarrow.com" 29 },{ 30 "@type": "ListItem", 31 "position": 2, 32 "name": "Pure Peanut Crackers - Cracked Black Pepper - 20g", 33 "item": "https://sowandarrow.com/products/pure-peanut-crackers-cracked-black-pepper-20g" 34 }] 35 } 36</script>
36<style>@font-face { 37 font-family: "Instrument Sans"; 38 font-weight: 500; 39 font-style: normal; 40 font-display: fallback; 41 src: url("//sowandarrow.com/cdn/fonts/instrument_sans/instrumentsans_n5.1ce463e1cc056566f977610764d93d4704464858.woff2") format("woff2"), 42 url("//sowandarrow.com/cdn/fonts/instrument_sans/instrumentsans_n5.9079eb7bba230c9d8d8d3a7d101aa9d9f40b6d14.woff") format("woff"); 43} 44@font-face { 45 font-family: "Instrument Sans"; 46 font-weight: 500; 47 font-style: italic; 48 font-display: fallback; 49 src: url("//sowandarrow.com/cdn/fonts/instrument_sans/instrumentsans_i5.d2033775d4997e4dcd0d47ebdd5234b5c14e3f53.woff2") format("woff2"), 50 url("//sowandarrow.com/cdn/fonts/instrument_sans/instrumentsans_i5.8e3cfa86b65acf809ce72bc4f9b58f185ef6b8c7.woff") format("woff"); 51} 52@font-face { 53 font-family: "Bricolage Grotesque"; 54 font-weight: 400; 55 font-style: normal; 56 font-display: fallback; 57 src: url("//sowandarrow.com/cdn/fonts/bricolage_grotesque/bricolagegrotesque_n4.3c051773a9f927cd8737c10568a7e4175690f7d9.woff2") format("woff2"), 58 url("//sowandarrow.com/cdn/fonts/bricolage_grotesque/bricolagegrotesque_n4.58698d726495f44d45631b33dcda62f474c467fc.woff") format("woff"); 59} 60@font-face { 61 font-family: "Bricolage Grotesque"; 62 font-weight: 600; 63 font-style: normal; 64 font-display: fallback; 65 src: url("//sowandarrow.com/cdn/fonts/bricolage_grotesque/bricolagegrotesque_n6.17eeb21593c407cef2956fb34ef1600d7c579b0c.woff2") format("woff2"), 66 url("//sowandarrow.com/cdn/fonts/bricolage_grotesque/bricolagegrotesque_n6.730eb5f49d56c0f7b763727330354d7315ee8a60.woff") format("woff"); 67} 68@font-face { 69 font-family: Inter; 70 font-weight: 400; 71 font-style: italic; 72 font-display: fallback; 73 src: url("//sowandarrow.com/cdn/fonts/inter/inter_i4.feae1981dda792ab80d117249d9c7e0f1017e5b3.woff2") format("woff2"), 74 url("//sowandarrow.com/cdn/fonts/inter/inter_i4.62773b7113d5e5f02c71486623cf828884c85c6e.woff") format("woff"); 75} 76@font-face { 77 font-family: "Instrument Sans"; 78 font-weight: 400; 79 font-style: normal; 80 font-display: fallback; 81 src: url("//sowandarrow.com/cdn/fonts/instrument_sans/instrumentsans_n4.db86542ae5e1596dbdb28c279ae6c2086c4c5bfa.woff2") format("woff2"), 82 url("//sowandarrow.com/cdn/fonts/instrument_sans/instrumentsans_n4.510f1b081e58d08c30978f465518799851ef6d8b.woff") format("woff"); 83} 84@font-face { 85 font-family: "Instrument Sans"; 86 font-weight: 400; 87 font-style: italic; 88 font-display: fallback; 89 src: url("//sowandarrow.com/cdn/fonts/instrument_sans/instrumentsans_i4.028d3c3cd8d085648c808ceb20cd2fd1eb3560e5.woff2") format("woff2"), 90 url("//sowandarrow.com/cdn/fonts/instrument_sans/instrumentsans_i4.7e90d82df8dee29a99237cd19cc529d2206706a2.woff") format("woff"); 91} 92@font-face { 93 font-family: "Instrument Sans"; 94 font-weight: 500; 95 font-style: normal; 96 font-display: fallback; 97 src: url("//sowandarrow.com/cdn/fonts/instrument_sans/instrumentsans_n5.1ce463e1cc056566f977610764d93d4704464858.woff2") format("woff2"), 98 url("//sowandarrow.com/cdn/fonts/instrument_sans/instrumentsans_n5.9079eb7bba230c9d8d8d3a7d101aa9d9f40b6d14.woff") format("woff"); 99} 100@font-face { 101 font-family: "Instrument Sans"; 102 font-weight: 600; 103 font-style: normal; 104 font-display: fallback; 105 src: url("//sowandarrow.com/cdn/fonts/instrument_sans/instrumentsans_n6.27dc66245013a6f7f317d383a3cc9a0c347fb42d.woff2") format("woff2"), 106 url("//sowandarrow.com/cdn/fonts/instrument_sans/instrumentsans_n6.1a71efbeeb140ec495af80aad612ad55e19e6d0e.woff") format("woff"); 107} 108@font-face { 109 font-family: "Instrument Sans"; 110 font-weight: 600; 111 font-style: italic; 112 font-display: fallback; 113 src: url("//sowandarrow.com/cdn/fonts/instrument_sans/instrumentsans_i6.ba8063f6adfa1e7ffe690cc5efa600a1e0a8ec32.woff2") format("woff2"), 114 url("//sowandarrow.com/cdn/fonts/instrument_sans/instrumentsans_i6.a5bb29b76a0bb820ddaa9417675a5d0bafaa8c1f.woff") format("woff"); 115} 116:root { 117 /* Container */ 118 --container-max-width: 100%; 119 --container-gutter: 1.25rem; 120 121 /* Spacing */ 122 --section-vertical-spacing: 3rem; 123 --section-stack-row-gap: 2rem; 124 125 /* Form settings */ 126 --form-gap: 1rem; /* Gap between fieldset and submit button */ 127 --fieldset-gap: 0.5rem; /* Gap between each form input within a fieldset */ 128 --form-control-gap: 0.5rem; /* Gap between input and label (ignored for floating label) */ 129 --checkbox-control-gap: 0.75rem; /* Horizontal gap between checkbox and its associated label */ 130 --input-padding-block: 0.65rem; /* Vertical padding for input, textarea and native select */ 131 --input-padding-inline: 1rem; /* Horizontal padding for input, textarea and native select */ 132 --checkbox-size: 0.875rem; /* Size (width and height) for checkbox */ 133 134 /* Product listing gaps */ 135 --product-list-column-gap: 0px; 136 --product-list-padding-inline: clamp(0px, var(--product-list-column-gap) , min(1.75rem, var(--product-list-column-gap)));--product-list-row-gap: 0px;/* Other sizes */ 137 --header-group-height: calc(var(--announcement-bar-height, 0px) + var(--countdown-condensed-height, 0px) + var(--header-height, 0px)); 138 --sticky-area-height: calc(var(--announcement-bar-is-sticky, 0) * var(--announcement-bar-height, 0px) + var(--header-is-sticky, 0) * var(--header-height, 0px)); 139 --sticky-offset: calc(var(--announcement-bar-is-sticky, 0) * var(--announcement-bar-height, 0px) + var(--header-is-sticky, 0) * var(--header-is-visible, 1) * var(--header-height, 0px)); 140 141 /* RTL support */ 142 --transform-logical-flip: 1; 143 --transform-origin-start: left;
144 --transform-origin-end: right; 145 146 /** 147 * --------------------------------------------------------------------- 148 * TYPOGRAPHY 149 * --------------------------------------------------------------------- 150 */ 151 152 /* Font properties */ 153 --subheading-font-family: "Instrument Sans", sans-serif; 154 --subheading-font-weight: 500; 155 --subheading-font-style: normal; 156 --subheading-font-size: 0.8125rem; 157 --subheading-text-transform: none; 158 --subheading-letter-spacing: 0.04em; 159 --heading-font-family: "Bricolage Grotesque", sans-serif; 160 --heading-font-weight: 400; 161 --heading-font-style: normal; 162 --heading-text-transform: none; 163 --heading-letter-spacing: -0.05em; 164 --heading-line-height: 0.9; 165 --heading-italic-font-family: Inter, sans-serif; 166 --heading-italic-font-weight: 400; 167 --heading-italic-font-size-multiplier: 0%; 168 --text-font-family: "Instrument Sans", sans-serif; 169 --text-font-weight: 400; 170 --text-font-style: normal; 171 --text-transform: none; 172 --text-letter-spacing: 0.0em; 173 --text-line-height: 1.4; 174 --text-font-medium-weight: 500; 175 --text-font-bold-weight: 600; 176 --button-font: var(--text-font-style) var(--text-font-weight) var(--button-font-size) / normal var(--text-font-family); 177 --button-text-transform: none; 178 --button-letter-spacing: 0.0em; 179 180 /* Font sizes */--text-heading-size-factor: 0.9; 181 --text-display-xl: max(0.75rem, clamp(3.5rem, 1.9223rem + 6.7314vw, 10rem) * var(--text-heading-size-factor)); 182 --text-display-l: max(0.75rem, clamp(3.375rem, 2.1311rem + 5.3074vw, 8.5rem) * var(--text-heading-size-factor)); 183 --text-display-m: max(0.75rem, clamp(3.25rem, 2.3701rem + 3.7540vw, 6.875rem) * var(--text-heading-size-factor)); 184 --text-h1: max(0.75rem, clamp(3rem, 2.3325rem + 2.8479vw, 5.75rem) * var(--text-heading-size-factor)); 185 --text-h2: max(0.75rem, clamp(2.5rem, 1.9539rem + 2.3301vw, 4.75rem) * var(--text-heading-size-factor)); 186 --text-h3: max(0.75rem, clamp(2rem, 1.6359rem + 1.5534vw, 3.5rem) * var(--text-heading-size-factor)); 187 --text-h4: max(0.75rem, clamp(1.75rem, 1.4466rem + 1.2945vw, 3rem) * var(--text-heading-size-factor)); 188 --text-h5: max(0.75rem, clamp(1.375rem, 1.2233rem + 0.6472vw, 2rem) * var(--text-heading-size-factor)); 189 --text-h6: max(0.75rem, clamp(1.1875rem, 1.1117rem + 0.3236vw, 1.5rem) * var(--text-heading-size-factor)); 190 --text-h7: max(0.75rem, clamp(1rem, 0.9545rem + 0.1942vw, 1.1875rem) * var(--text-heading-size-factor)); 191 --text-xs: 0.6875rem; 192 --text-sm: 0.75rem; 193 --text-base: 0.875rem; 194 --text-lg: 1.0625rem; 195 --button-font-size: 0.875rem; 196 197 /* Rounded variables (used for border radius) */ 198 --rounded-full: 9999px; 199 --subheading-border-radius: 0.0rem; 200 --button-border-radius: 1.875rem; 201 --input-border-radius: 1.875rem; 202 203 /* Product card variables */ 204 --product-card-row-count: 2; 205 206 /** 207 * --------------------------------------------------------------------- 208 * OTHER 209 * --------------------------------------------------------------------- 210 */ 211 212 --icon-stroke-width: 1px; 213 --quotation-mark-svg: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" focusable="false" width="62" fill="none" viewBox="0 0 62 57"><path fill="%23000" d="M.79 31.904 11.924.816h12.296l-8.12 31.088h7.888V56.96H.79V31.904Zm37.351 0L49.277.816h12.064l-8.12 31.088h7.888V56.96H38.141V31.904Z" /></svg>'); 214 } 215 216 [dir="rtl"]:root { 217 /* RTL support */ 218 --transform-logical-flip: -1; 219 --transform-origin-start: right; 220 --transform-origin-end: left; 221 } 222 223 @media screen and (min-width: 700px) { 224 :root { 225 --text-xs: 0.6875rem; 226 --text-sm: 0.8125rem; 227 --text-base: 0.9375rem; 228 --text-lg: 1.125rem; 229 --subheading-font-size: 0.875rem; 230 231 /* Spacing */ 232 --container-gutter: 2rem; 233 234 /* Form settings */ 235 --form-gap: 1.25rem; /* Gap between fieldset and submit button */ 236 --fieldset-gap: 0.75rem; /* Gap between each form input within a fieldset */ 237 --input-padding-block: 0.75rem; /* Vertical padding for input, textarea and native select */ 238 239 /* Font sizes */ 240 --button-font-size: 0.9375rem; 241
242 /* Product listing gaps */--product-list-column-gap: 0px; 243 --product-list-row-gap: 0px;} 244 } 245 246 @media screen and (min-width: 1000px) { 247 :root { 248 /* Spacing settings */ 249 --section-vertical-spacing: 4.5rem; 250 --section-stack-row-gap: 3rem; 251 } 252 } 253 254 @media screen and (min-width: 1399px) { 255 :root { 256 /* Spacing settings */ 257 --section-vertical-spacing: 5.5rem; 258 --container-gutter: 3rem; 259 } 260 } 261 262 /** 263 * --------------------------------------------------------------------- 264 * COLORS 265 * --------------------------------------------------------------------- 266 */ 267 268 :root {--page-overlay: 0 0 0 / 0.4; 269 --dialog-backdrop-blur: 12px; 270 271 /* Status colors */ 272 --success-background: 227 240 232; 273 --success-text: 22 131 66; 274 --warning-background: 253 241 224; 275 --warning-text: 237 138 0; 276 --error-background: 251 224 224; 277 --error-text: 224 0 0; 278 279 /* Product colors */ 280 --on-sale-text: 250 63 63; 281 --on-sale-badge-background: 250 63 63; 282 --on-sale-badge-text: 255 255 255; 283 --sold-out-badge-background: 50 30 30; 284 --sold-out-badge-text: 255 255 255; 285 --custom-badge-background: 28 110 131; 286 --custom-badge-text: 255 255 255; 287 --star-color: 246 164 41; 288 }.color-scheme--scheme-1 { 289 --accent: 50 30 30; 290 --background: 250 244 240; 291 --background-gradient: ; 292 --background-secondary: 255 255 255; 293 --has-transparent-background: 0; 294 --has-filled-background: 1; 295 --text-color: 50 30 30;--border-color: 230 223 219;/* Subheading colors */--subheading-background: 0 0 0 / 0.0; 296 --subheading-border: none; 297 --subheading-text-color: 50 30 30; 298 --subheading-has-padding: 0; 299 300 /* Heading highlight */ 301 --heading-highlight-accent-color: 50 30 30; 302 --heading-highlight-text-color: 255 255 255; 303 304 /* Button colors */ 305 --button-background-primary: 50 30 30; 306 --button-text-primary: 255 255 255; 307 308 /* Form inputs */ 309 --input-background: 255 255 255; 310 --input-text-color: 50 30 30; 311 --input-text-transform: none; 312 }.shopify-section:has(> .color-scheme--scheme-1) + .shopify-section:has(> .color-scheme--scheme-1) { 313 --section-has-same-background-as-previous-section: 1; 314 }.color-scheme--scheme-2 { 315 --accent: 50 30 30; 316 --background: 255 255 255; 317 --background-gradient: ; 318 --background-secondary: 250 244 240; 319 --has-transparent-background: 0; 320 --has-filled-background: 1; 321 --text-color: 50 30 30;--border-color: 235 233 233;/* Subheading colors */--subheading-background: 0 0 0 / 0.0; 322 --subheading-border: none; 323 --subheading-text-color: 50 30 30; 324 --subheading-has-padding: 0; 325 326 /* Heading highlight */ 327 --heading-highlight-accent-color: 50 30 30; 328 --heading-highlight-text-color: 255 255 255; 329 330 /* Button colors */ 331 --button-background-primary: 50 30 30; 332 --button-text-primary: 255 255 255; 333 334 /* Form inputs */ 335 --input-background: 255 255 255; 336 --input-text-color: 50 30 30; 337 --input-text-transform: none; 338 }.shopify-section:has(> .color-scheme--scheme-2) + .shopify-section:has(> .color-scheme--scheme-2) { 339 --section-has-same-background-as-previous-section: 1; 340 }.color-scheme--scheme-3 { 341 --accent: 255 255 255; 342 --background: 0 0 0 / 0; 343 --background-gradient: ; 344 --background-secondary: 240 240 240; 345 --has-transparent-background: 1; 346 --has-filled-background: 0; 347 --text-color: 255 255 255;--border-color: 255 255 255 / 0.6;/* Subheading colors */--subheading-background: 0 0 0 / 0.0; 348 --subheading-border: none; 349 --subheading-text-color: 255 255 255; 350 --subheading-has-padding: 0; 351 352 /* Heading highlight */ 353 --heading-highlight-accent-color: 3 3 5; 354 --heading-highlight-text-color: 255 255 255; 355 356 /* Button colors */ 357 --button-background-primary: 255 255 255; 358 --button-text-primary: 8 9 18; 359 360 /* Form inputs */ 361 --input-background: 255 255 255; 362 --input-text-color: 3 3 5; 363 --input-text-transform: none; 364 }.shopify-section:has(> .color-scheme--scheme-3) + .shopify-section:has(> .color-scheme--scheme-3) { 365 --section-has-same-background-as-previous-section: 1; 366 }.color-scheme--scheme-4 { 367 --accent: 250 244 240; 368 --background: 50 30 30; 369 --background-gradient: ; 370 --background-secondary: 255 255 255; 371 --has-transparent-background: 0; 372 --has-filled-background: 1; 373 --text-color: 250 244 240;--border-color: 70 51 51;/* Subheading colors */--subheading-background: 0 0 0 / 0.0; 374 --subheading-border: none; 375 --subheading-text-color: 250 244 240; 376 --subheading-has-padding: 0; 377 378 /* Heading highlight */ 379 --heading-highlight-accent-color: 250 244 240; 380 --heading-highlight-text-color: 50 30 30; 381 382 /* Button colors */ 383 --button-background-primary: 250 244 240; 384 --button-text-primary: 50 30 30; 385 386 /* Form inputs */ 387 --input-background: 35 15 15; 388 --input-text-color: 255 255 255; 389 --input-text-transform: none; 390 }.shopify-section:has(> .color-scheme--scheme-4) + .shopify-section:has(> .color-scheme--scheme-4) { 391 --section-has-same-background-as-previous-section: 1; 392 }.color-scheme--scheme-5 { 393 --accent: 50 30 30; 394 --background: 241 228 211; 395 --background-gradient: ; 396 --background-secondary: 255 255 255; 397 --has-transparent-background: 0; 398 --has-filled-background: 1; 399 --text-color: 50 30 30;--border-color: 222 208 193;/* Subheading colors */--subheading-background: 0 0 0 / 0.0; 400 --subheading-border: none; 401 --subheading-text-color: 50 30 30; 402 --subheading-has-padding: 0; 403 404 /* Heading highlight */ 405 --heading-highlight-accent-color: 163 42 26; 406 --heading-highlight-text-color: 255 255 255; 407 408 /* Button colors */ 409 --button-background-primary: 50 30 30; 410 --button-text-primary: 255 255 255; 411 412 /* Form inputs */ 413 --input-background: 255 255 255; 414 --input-text-color: 50 30 30; 415 --input-text-transform: none; 416 }.shopify-section:has(> .color-scheme--scheme-5) + .shopify-section:has(> .color-scheme--scheme-5) { 417 --section-has-same-background-as-previous-section: 1; 418 }.color-scheme--scheme-6 { 419 --accent: 255 255 255; 420 --background: 82 87 46; 421 --background-gradient: ; 422 --background-secondary: 255 255 255; 423 --has-transparent-background: 0; 424 --has-filled-background: 1; 425 --text-color: 255 255 255;--border-color: 99 104 67;/* Subheading colors */--subheading-background: 0 0 0 / 0.0; 426 --subheading-border: none; 427 --subheading-text-color: 255 255 255; 428 --subheading-has-padding: 0; 429 430 /* Heading highlight */ 431 --heading-highlight-accent-color: 255 255 255; 432 --heading-highlight-text-color: 82 87 46; 433 434 /* Button colors */ 435 --button-background-primary: 255 255 255; 436 --button-text-primary: 82 87 46; 437 438 /* Form inputs */ 439 --input-background: 255 255 255; 440 --input-text-color: 82 87 46; 441 --input-text-transform: none; 442 }.shopify-section:has(> .color-scheme--scheme-6) + .shopify-section:has(> .color-scheme--scheme-6) { 443 --section-has-same-background-as-previous-section: 1; 444 }.color-scheme--scheme-7 { 445 --accent: 255 255 255; 446 --background: 0 0 0; 447 --background-gradient: ; 448 --background-secondary: 0 0 0; 449 --has-transparent-background: 0; 450 --has-filled-background: 1; 451 --text-color: 255 255 255;--border-color: 26 26 26;/* Subheading colors */--subheading-background: 0 0 0 / 0.0; 452 --subheading-border: none; 453 --subheading-text-color: 255 255 255; 454 --subheading-has-padding: 0; 455 456 /* Heading highlight */ 457 --heading-highlight-accent-color: 255 255 255; 458 --heading-highlight-text-color: 255 255 255; 459 460 /* Button colors */ 461 --button-background-primary: 255 255 255; 462 --button-text-primary: 0 0 0; 463 464 /* Form inputs */ 465 --input-background: 0 0 0; 466 --input-text-color: 255 255 255; 467 --input-text-transform: none; 468 }.shopify-section:has(> .color-scheme--scheme-7) + .shopify-section:has(> .color-scheme--scheme-7) { 469 --section-has-same-background-as-previous-section: 1; 470 }</style>
471<script> 472 // This allows to expose several variables to the global scope, to be used in scripts 473 window.themeVariables = { 474 settings: { 475 pageType: "product", 476 moneyFormat: "£{{amount}}", 477 moneyWithCurrencyFormat: "£{{amount}} GBP", 478 currencyCodeEnabled: false, 479 cartType: "drawer", 480 showHeadingEffectAnimation: true, 481 staggerProducts: true 482 }, 483 484 strings: { 485 addedToCart: "{{product_title}} was added to cart", 486 closeGallery: "Close gallery", 487 zoomGallery: "Zoom", 488 errorGallery: "Image cannot be loaded", 489 shippingEstimatorNoResults: "Sorry, we do not ship to your address.", 490 shippingEstimatorOneResult: "There is one shipping rate for your address:", 491 shippingEstimatorMultipleResults: "There are several shipping rates for your address:", 492 shippingEstimatorError: "One or more error occurred while retrieving shipping rates:", 493 next: "Next", 494 previous: "Previous" 495 }, 496 497 mediaQueries: { 498 'sm': 'screen and (min-width: 700px)', 499 'md': 'screen and (min-width: 1000px)', 500 'lg': 'screen and (min-width: 1150px)', 501 'xl': 'screen and (min-width: 1400px)', 502 '2xl': 'screen and (min-width: 1600px)', 503 'sm-max': 'screen and (max-width: 699px)', 504 'md-max': 'screen and (max-width: 999px)', 505 'lg-max': 'screen and (max-width: 1149px)', 506 'xl-max': 'screen and (max-width: 1399px)', 507 '2xl-max': 'screen and (max-width: 1599px)', 508 'motion-safe': '(prefers-reduced-motion: no-preference)', 509 'motion-reduce': '(prefers-reduced-motion: reduce)', 510 'supports-hover': 'screen and (pointer: fine)', 511 'supports-touch': 'screen and (pointer: coarse)' 512 } 513 };</script>
513<script async crossorigin fetchpriority="high" src="/cdn/shopifycloud/importmap-polyfill/es-modules-shim.2.4.0.js"></script>
vendor: 1 bytes, line 513
513
514<script type="importmap">{ 515 "imports": { 516 "vendor": "//sowandarrow.com/cdn/shop/t/46/assets/vendor.min.js?v=30802987683311202721771353812", 517 "theme": "//sowandarrow.com/cdn/shop/t/46/assets/theme.js?v=48395685618620578471771353812", 518 "photoswipe": "//sowandarrow.com/cdn/shop/t/46/assets/photoswipe.min.js?v=13374349288281597431771353812" 519 } 520 } 521 </script>
521 522 523
523<script type="module" src="//sowandarrow.com/cdn/shop/t/46/assets/vendor.min.js?v=30802987683311202721771353812"></script>
523 524
524<script type="module" src="//sowandarrow.com/cdn/shop/t/46/assets/theme.js?v=48395685618620578471771353812"></script>
524 525 526
526<script>window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.start');</script>
526<meta name="google-site-verification" content="xPOQFUeFAPPQEexrW-jJtmZZ9ojbqXsAKBZ2TzYQZ2U"> 527<meta name="facebook-domain-verification" content="172d8m1onh7tlnuy1qedyy1wv27y5e"> 528<meta id="shopify-digital-wallet" name="shopify-digital-wallet" content="/75289362745/digital_wallets/dialog"> 529<link rel="ucp" href="/.well-known/ucp" version="2026-08-25"><link rel="buy" href="/cart/57225090072954:1?ucp/version=2026-08-25&context/payment/0/handler=dev.shopify.shop_pay" payment="dev.shopify.shop_pay com.google.pay dev.shopify.card"><link rel="alternate" type="application/json+oembed" href="https://sowandarrow.com/products/pure-peanut-crackers-cracked-black-pepper-20g.oembed">
530<script async="async" src="/checkouts/internal/preloads.js?locale=en-GB"></script>
530 531<link rel="preconnect" href="https://shop.app" crossorigin="anonymous">
532<script async="async" src="https://shop.app/checkouts/internal/preloads.js?locale=en-GB&shop_id=75289362745" crossorigin="anonymous"></script>
vendor: 1 bytes, line 532
532
533<script id="apple-pay-shop-capabilities" type="application/json">{"shopId":75289362745,"countryCode":"GB","currencyCode":"GBP","merchantCapabilities":["supports3DS"],"merchantId":"gid:\/\/shopify\/Shop\/75289362745","merchantName":"Sow \u0026 Arrow","requiredBillingContactFields":["postalAddress","email","phone"],"requiredShippingContactFields":["postalAddress","email","phone"],"shippingType":"shipping","supportedNetworks":["visa","maestro","masterCard","amex","discover","elo"],"total":{"type":"pending","label":"Sow \u0026 Arrow","amount":"1.00"},"shopifyPaymentsEnabled":true,"supportsSubscriptions":true}</script>
vendor: 1 bytes, line 533
533
534<script id="shopify-features" type="application/json">{"accessToken":"ac5f488cd338211fdf6d4c7833c3e413","betas":["rich-media-storefront-analytics"],"domain":"sowandarrow.com","predictiveSearch":true,"shopId":75289362745,"locale":"en"}</script>
vendor: 1 bytes, line 534
534
535<script>var Shopify = Shopify || {}; 536Shopify.shop = "sowandarrow.myshopify.com"; 537Shopify.locale = "en"; 538Shopify.currency = {"active":"GBP","rate":"1.0"}; 539Shopify.country = "GB"; 540Shopify.theme = {"name":"Stretch - Recommendations V2","id":183195631994,"schema_name":"Stretch","schema_version":"1.6.0","theme_store_id":null,"role":"main"}; 541Shopify.theme.handle = "null"; 542Shopify.theme.style = {"id":null,"handle":null}; 543Shopify.cdnHost = "sowandarrow.com/cdn"; 544Shopify.routes = Shopify.routes || {}; 545Shopify.routes.root = "/"; 546Shopify.shopJsCdnBaseUrl = "https://cdn.shopify.com/shopifycloud/shop-js"; 547Shopify.SignInWithShop = Shopify.SignInWithShop || {}; 548Shopify.SignInWithShop.User = Shopify.SignInWithShop.User || {}; 549Shopify.SignInWithShop.User.recognized = false;</script>
vendor: 1 bytes, line 549
549
550<script type="module">!function(o){(o.Shopify=o.Shopify||{}).modules=!0}(window);</script>
vendor: 1 bytes, line 550
550
551<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 551
551
552<script> 553 window.ShopifyPay = window.ShopifyPay || {}; 554 window.ShopifyPay.apiHost = "shop.app\/pay"; 555 window.ShopifyPay.redirectState = null; 556</script>
vendor: 1 bytes, line 556
556
557<script> 558 window.Shopify = window.Shopify || {}; 559 window.Shopify.SignInWithShop = window.Shopify.SignInWithShop || {}; 560 window.Shopify.SignInWithShop.assetMetrics = { sampleRate: 0.25 }; 561 window.Shopify.SignInWithShop.eligible = true; 562</script>
vendor: 1 bytes, line 562
562
563<script id="shop-js-analytics" type="application/json">{"pageType":"product"}</script>
vendor: 1 bytes, line 563
563
564<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 564
564
565<script type="module"> 566 await import("https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/loader.init-shop-cart-sync.en.esm.js"); 567 568 window.Shopify.SignInWithShop?.initShopCartSync?.({"fedCMEnabled":true,"windoidEnabled":true}); 569 570</script>
vendor: 1 bytes, line 570
570
571<script> 572 window.Shopify = window.Shopify || {}; 573 if (!window.Shopify.featureAssets) window.Shopify.featureAssets = {}; 574 window.Shopify.featureAssets['shop-js'] = {"avatar":["modules/v2/loader.avatar.en.esm.js"],"checkout-modal":["modules/v2/loader.checkout-modal.en.esm.js"],"init-customer-accounts-sign-up":["modules/v2/loader.init-customer-accounts-sign-up.en.esm.js"],"init-customer-accounts":["modules/v2/loader.init-customer-accounts.en.esm.js"],"init-fed-cm":["modules/v2/loader.init-fed-cm.en.esm.js"],"init-shop-cart-sync":["modules/v2/loader.init-shop-cart-sync.en.esm.js"],"init-shop-email-lookup-coordinator":["modules/v2/loader.init-shop-email-lookup-coordinator.en.esm.js"],"init-shop-for-new-customer-accounts":["modules/v2/loader.init-shop-for-new-customer-accounts.en.esm.js"],"init-shop-user-recognition":["modules/v2/loader.init-shop-user-recognition.en.esm.js"],"init-windoid":["modules/v2/loader.init-windoid.en.esm.js"],"lead-capture":["modules/v2/loader.lead-capture.en.esm.js"],"listener":["modules/v2/loader.listener.en.esm.js"],"pay-button":["modules/v2/loader.pay-button.en.esm.js"],"payment-terms":["modules/v2/loader.payment-terms.en.esm.js"],"shop-button":["modules/v2/loader.shop-button.en.esm.js"],"shop-cart-sync":["modules/v2/loader.shop-cart-sync.en.esm.js"],"shop-cash-offers":["modules/v2/loader.shop-cash-offers.en.esm.js"],"shop-follow-button":["modules/v2/loader.shop-follow-button.en.esm.js"],"shop-login-button":["modules/v2/loader.shop-login-button.en.esm.js"],"shop-login":["modules/v2/loader.shop-login.en.esm.js"],"shop-toast-manager":["modules/v2/loader.shop-toast-manager.en.esm.js"],"shop-user-recognition":["modules/v2/loader.shop-user-recognition.en.esm.js"]}; 575</script>
vendor: 1 bytes, line 575
575
576<script>(function() { 577 var isLoaded = false; 578 function asyncLoad() { 579 if (isLoaded) return; 580 isLoaded = true; 581 var urls = ["https:\/\/loox.io\/widget\/zOPWEQsJt6\/loox.1709898965797.js?shop=sowandarrow.myshopify.com","https:\/\/pc-quiz.s3.us-east-2.amazonaws.com\/current\/quiz-loader.min.js?shop=sowandarrow.myshopify.com","https:\/\/static.rechargecdn.com\/assets\/js\/widget.min.js?shop=sowandarrow.myshopify.com","https:\/\/cdn.rebuyengine.com\/onsite\/js\/rebuy.js?shop=sowandarrow.myshopify.com","https:\/\/shopify-widget.route.com\/shopify.widget.js?shop=sowandarrow.myshopify.com","https:\/\/cdn.rebuyengine.com\/onsite\/js\/rebuy.js?shop=sowandarrow.myshopify.com"]; 582 for (var i = 0; i < urls.length; i++) { 583 var s = document.createElement('script'); 584 s.type = 'text/javascript'; 585 s.async = true; 586 s.src = urls[i]; 587 var x = document.getElementsByTagName('script')[0]; 588 x.parentNode.insertBefore(s, x); 589 } 590 }; 591 if(window.attachEvent) { 592 window.attachEvent('onload', asyncLoad); 593 } else { 594 window.addEventListener('load', asyncLoad, false); 595 } 596})();</script>
vendor: 1 bytes, line 596
596
597<script id="__st">var __st={"a":75289362745,"offset":3600,"reqid":"0a923e05-d0fc-4b8d-a2e2-06452336f69c-1791086572","pageurl":"sowandarrow.com\/products\/pure-peanut-crackers-cracked-black-pepper-20g","u":"6927dcb82341","p":"product","rtyp":"product","rid":16190750032250};</script>
vendor: 1 bytes, line 597
597
598<script>window.ShopifyPaypalV4VisibilityTracking = true;</script>
vendor: 1 bytes, line 598
598
599<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'])})(!1,!0)}();</script>
vendor: 1 bytes, line 599
599
600<script integrity="sha256-JjoPp5ZfB1sSAs5SQaol1x1GgvveM+BgmRzyDexInEQ=" data-source-attribution="shopify.loadfeatures" defer="defer" src="//sowandarrow.com/cdn/shopifycloud/storefront/assets/storefront/load_feature-1bd60354.js" crossorigin="anonymous"></script>
vendor: 1 bytes, line 600
600
601<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 = "//sowandarrow.com/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>
601<script crossorigin="anonymous" defer="defer" src="//sowandarrow.com/cdn/shopifycloud/storefront/assets/shopify_pay/storefront-616277c7.js?v=20250812"></script>
vendor: 1 bytes, line 601
601
602<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 602
602
603<script> 604 window.Shopify = window.Shopify || {}; 605 window.Shopify.MCP = window.Shopify.MCP || {}; 606 window.Shopify.MCP.enabled = true; 607 window.Shopify.MCP.shop = "sowandarrow.myshopify.com"; 608 window.Shopify.MCP.mcpEndpoint = "https:\/\/sowandarrow.com\/api\/mcp"; 609 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?\"\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."}},"required":["query"]}}]; 610</script>
vendor: 1 bytes, line 610
610
611<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("\/\/sowandarrow.com\/cdn\/shopifycloud\/storefront\/assets\/storefront\/webmcp-c6b62ece.js","sha256-ke4DDuBjdvea3vxLWxHc9E9nq8zihuG4IfYEGbb77ys=");})(); 612</script>
vendor: 1 bytes, line 612
612
613<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://sowandarrow.com/cdn/shopifycloud/portable-wallets/latest/portable-wallets.en.js",t.type="module",document.head.appendChild(t)}}; 614</script>
vendor: 1 bytes, line 614
614
615<script data-source-attribution="shopify.dynamic_checkout.buyer_consent"> 616 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); 617</script>
vendor: 1 bytes, line 617
617
618<script> 619 function portableWalletsCleanup(e){e&&e.src&&console.error("Failed to load portable wallets script "+e.src);var t=document.querySelectorAll("shopify-accelerated-checkout .shopify-payment-button__skeleton, shopify-accelerated-checkout-cart .wallet-cart-button__skeleton"),e=document.getElementById("shopify-buyer-consent");for(let e=0;e<t.length;e++)t[e].remove();e&&e.remove()}function portableWalletsNotLoadedAsModule(e){e instanceof ErrorEvent&&"string"==typeof e.message&&e.message.includes("import.meta")&&"string"==typeof e.filename&&e.filename.includes("portable-wallets")&&(window.removeEventListener("error",portableWalletsNotLoadedAsModule),window.Shopify.PaymentButton.failedToLoad=e,"loading"===document.readyState?document.addEventListener("DOMContentLoaded",window.Shopify.PaymentButton.init):window.Shopify.PaymentButton.init())}window.addEventListener("error",portableWalletsNotLoadedAsModule); 620</script>
620 621
622<script type="module" src="https://sowandarrow.com/cdn/shopifycloud/portable-wallets/latest/portable-wallets.en.js" onError="portableWalletsCleanup(this)" crossorigin="anonymous"></script>
vendor: 1 bytes, line 622
622
623<script nomodule> 624 document.addEventListener("DOMContentLoaded", portableWalletsCleanup); 625</script>
625 626
627<script id='scb4127' type='text/javascript' async='' src='https://sowandarrow.com/cdn/shopifycloud/privacy-banner/storefront-banner.js'></script>
627<script integrity="sha256-/LA1C2Bx6899fYCos0FS9qLj2opaGFm7AXrTUvBEb4s=" data-source-attribution="shopify.remote_product_tracking" data-shopify-remote-tracking="{"session_id":"01M42H8CT8258TNN6ZKBWKZAB5","publisher_shop_id":75289362745,"theme_id":183195631994,"theme_published":true,"theme_store_id":0,"placement":"collection","event_data":{"source_product_id":16190750032250,"handle":"pure-peanut-crackers-cracked-black-pepper-20g","page_type":"product"},"recommendations_tracking_enabled":true}" defer="defer" src="//sowandarrow.com/cdn/shopifycloud/storefront/assets/storefront/remote_product_tracking-91d95044.js" crossorigin="anonymous"></script>
627 628<link id="shopify-accelerated-checkout-styles" rel="stylesheet" media="screen" href="https://sowandarrow.com/cdn/shopifycloud/portable-wallets/latest/accelerated-checkout-backwards-compat.css" crossorigin="anonymous"> 629<style id="shopify-accelerated-checkout-cart"> 630 #shopify-buyer-consent { 631 margin-top: 1em; 632 display: inline-block; 633 width: 100%; 634} 635 636#shopify-buyer-consent.hidden { 637 display: none; 638} 639 640#shopify-subscription-policy-button { 641 background: none; 642 border: none; 643 padding: 0; 644 text-decoration: underline; 645 font-size: inherit; 646 cursor: pointer; 647} 648 649#shopify-subscription-policy-button::before { 650 box-shadow: none; 651} 652 653 </style> 654
655<script id="shopify-cfh-end">window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.end');</script>
655 656
656<script>window.__WINDFALL_STOREFRONT_CONTRACT__ = {"version":1,"currency":"GBP","updatedAt":"2026-10-04T04:00:50.890Z","offers":[{"id":"love-mushroom-facemask","type":"combo_gift","status":"active","discountTitle":"Love Mushroom Facemask","label":"Free Facemask","gift":{"variantId":"gid:\/\/shopify\/ProductVariant\/57051372749178"},"requires":{"allOf":[{"id":"omegas","label":"Regenerative Omegas","anyOf":[{"source":"cart","productIds":["gid:\/\/shopify\/Product\/8429687832889","gid:\/\/shopify\/Product\/15338667213178","gid:\/\/shopify\/Product\/15629678248314"],"resolvedProductIds":["gid:\/\/shopify\/Product\/8429687832889","gid:\/\/shopify\/Product\/15338667213178","gid:\/\/shopify\/Product\/15629678248314"]},{"source":"subscribed_to","productIds":[],"collectionIds":[],"useCartProducts":true,"resolvedProductIds":[]}]},{"id":"love-mushroom","label":"any Love Mushroom product","anyOf":[{"source":"cart","productIds":["gid:\/\/shopify\/Product\/16143740961146","gid:\/\/shopify\/Product\/16144944038266","gid:\/\/shopify\/Product\/16143786967418","gid:\/\/shopify\/Product\/16145058955642","gid:\/\/shopify\/Product\/16163974513018","gid:\/\/shopify\/Product\/16145075863930"],"collectionIds":[],"resolvedProductIds":["gid:\/\/shopify\/Product\/16143740961146","gid:\/\/shopify\/Product\/16144944038266","gid:\/\/shopify\/Product\/16143786967418","gid:\/\/shopify\/Product\/16145058955642","gid:\/\/shopify\/Product\/16163974513018","gid:\/\/shopify\/Product\/16145075863930"]},{"source":"subscribed_to","productIds":[],"collectionIds":[],"useCartProducts":true,"resolvedProductIds":[]}]}]},"autoAdd":true,"maxQuantity":10,"giftLineProperty":"_sow_gift","ui":{"badge":"FREE GIFT","lockedMessage":"Add {{missing}} for a Free Gift","unlockedMessage":"Free Gift Unlocked","showInCartRow":true},"subscriptions":{"applyToSubscriptionProducts":false,"applyToOneTimePurchases":true},"discountGid":"gid:\/\/shopify\/DiscountAutomaticNode\/2278439813498","startsAt":"2026-08-13T23:15:49Z","endsAt":null},{"id":"spend-5-percent-100","type":"percent_off","status":"active","discountTitle":"5% Off","label":"5% Off","percent":5,"qualifying":{"requiresShipping":true,"excludeGiftLines":true},"ui":{"progressTier":1,"lockedMessage":"{{remaining}} away from 5% Off","unlockedMessage":"5% Off unlocked!"},"requires":{"allOf":[{"id":"spend-spend-5-percent-100","label":"Spend goal","anyOf":[{"source":"cart_value","amount":"100.00"}]}]},"subscriptions":{"applyToSubscriptionProducts":false,"applyToOneTimePurchases":true},"discountGid":"gid:\/\/shopify\/DiscountAutomaticNode\/2278424117626","startsAt":"2026-08-13T23:07:51Z","endsAt":null,"combines":{"productDiscounts":true}},{"id":"free-cacto-drink","type":"combo_gift","status":"active","discountTitle":"Cacto Drink","label":"Free Cacto Drink","qualifying":{"requiresShipping":true,"excludeGiftLines":true},"autoAdd":true,"maxQuantity":10,"giftLineProperty":"_sow_gift","ui":{"lockedMessage":"Add {{missing}} to unlock your free Cacto drink","unlockedMessage":"Free gift unlocked!","badge":"FREE GIFT"},"requires":{"allOf":[{"id":"group-1-ptf0dc","label":"any Cacto Soda","anyOf":[{"source":"cart","productIds":["gid:\/\/shopify\/Product\/16123905999226","gid:\/\/shopify\/Product\/16123908325754"],"collectionIds":[],"resolvedProductIds":["gid:\/\/shopify\/Product\/16123905999226","gid:\/\/shopify\/Product\/16123908325754"]}]}]},"gift":{"variantId":"gid:\/\/shopify\/ProductVariant\/57162383491450"},"subscriptions":{"applyToSubscriptionProducts":false,"applyToOneTimePurchases":true},"discountGid":"gid:\/\/shopify\/DiscountAutomaticNode\/2278448857466","startsAt":"2026-08-14T11:54:42Z","endsAt":null},{"id":"quick-discounts","type":"quick_discount","status":"active","label":"Quick discounts","discountTitle":"Quick discounts","items":[{"productId":"gid:\/\/shopify\/Product\/9391544729913","variantId":"gid:\/\/shopify\/ProductVariant\/49080416207161","productTitle":"Organic Chaga Turmeric Latte - 120g","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/organic-chaga-turmeric-latte-120g-from-mushrooms-for-life-available-at-sow-arrow-469473.webp?v=1726162087","price":"25.99","salePrice":"21.25","percent":18.2,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/9391522644281","variantId":"gid:\/\/shopify\/ProductVariant\/49080212914489","productTitle":"Organic Cordyceps Beetroot Latte - 130g","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/organic-cordyceps-beetroot-latte-130g-from-mushrooms-for-life-available-at-sow-arrow-435353.webp?v=1726162096","price":"25.99","salePrice":"21.25","percent":18.2,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/15071473926522","variantId":"gid:\/\/shopify\/ProductVariant\/55311076622714","productTitle":"Organic Lion's Mane Matcha L
656atte - 75g","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/organic-lions-mane-matcha-latte-75g-from-mushrooms-for-life-available-at-sow-arrow-691063.webp?v=1745773903","price":"25.99","salePrice":"21.25","percent":18.2,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/15519066521978","variantId":"gid:\/\/shopify\/ProductVariant\/56244032864634","productTitle":"Cheese, Bone Broth \u0026 Pumpkin Seed Muffins - 2 Pack","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/cheese-bone-broth-pumpkin-seed-muffins-2-pack-from-sow-arrow-available-at-sow-arrow-9071253.jpg?v=1770159078","price":"7.99","salePrice":"6.99","percent":12.5,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/8254166237497","variantId":"gid:\/\/shopify\/ProductVariant\/45022310105401","productTitle":"Hungry Woman by Pauline Cox - Signed Edition","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/hungry-woman-by-pauline-cox-signed-edition-from-pauline-cox-available-at-sow-arrow-899776.png?v=1726161909","price":"30.00","salePrice":"22.00","percent":26.7,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/15058965299578","variantId":"gid:\/\/shopify\/ProductVariant\/55277108756858","productTitle":"Dr. Immune Five Syrup (Reishi, Agaricus, Oyster, Chaga, Shiitake) - 250ml","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/dr-immune-five-syrup-reishi-agaricus-oyster-chaga-shiitake-250ml-from-hiffas-da-terra-available-at-sow-arrow-828675.webp?v=1745028198","price":"29.99","salePrice":"22.99","percent":23.3,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/16147013566842","variantId":"gid:\/\/shopify\/ProductVariant\/57056531906938","productTitle":"Creatine Monohydrate with Magnesium - 28 servings","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/creatine-monohydrate-with-magnesium-28-servings-from-hunter-gather-available-at-sow-arrow-6532218.webp?v=1783748113","price":"23.99","salePrice":"21.25","percent":11.4,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/16154190741882","variantId":"gid:\/\/shopify\/ProductVariant\/57081625575802","productTitle":"Grain-free Granola - Cinnamon","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/grain-free-granola-cinnamon-from-fudi-available-at-sow-arrow-7886385.png?v=1784328203","price":"7.49","salePrice":"6.75","percent":9.9,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/16154157121914","variantId":"gid:\/\/shopify\/ProductVariant\/57081501483386","productTitle":"Grain-free Granola - Cocoa","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/grain-free-granola-cocoa-from-fudi-available-at-sow-arrow-5704363.png?v=1784328203","price":"7.49","salePrice":"6.75","percent":9.9,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/16154161578362","variantId":"gid:\/\/shopify\/ProductVariant\/57081508594042","productTitle":"Grain-free Granola - Original","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/grain-free-granola-original-from-fudi-available-at-sow-arrow-2115599.png?v=1784328203","price":"7.49","salePrice":"6.75","percent":9.9,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/16154154303866","variantId":"gid:\/\/shopify\/ProductVariant\/57081494929786","productTitle":"Grain-free Granola - Spiced Biscuit","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/grain-free-granola-spiced-biscuit-from-fudi-available-at-sow-arrow-1060331.png?v=1784328208","price":"7.49","salePrice":"6.75","percent":9.9,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/16143786967418","variantId":"gid:\/\/shopify\/ProductVariant\/57046455681402","productTitle":"Organic Calm Reish Mushroom Drops (Alcohol Free) - 50ml","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/organic-calm-reish-mushroom-drops-alcohol-free-50ml-from-love-mushrooms-available-at-sow-arrow-7132081.webp?v=1783416673","price":"15.99","salePrice":"13.60","percent":14.9,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/16163974513018","variantId":"gid:\/\/shopify\/ProductVariant\/57122866594170","productTitle":"Organic Cordyceps Vitality liquid extract - 50ml (alcohol free)","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/organic-cordyceps-vitality-liquid-extract-50ml-alcohol
656-free-from-love-mushrooms-available-at-sow-arrow-4674430.webp?v=1785322450","price":"15.99","salePrice":"13.60","percent":14.9,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/16143740961146","variantId":"gid:\/\/shopify\/ProductVariant\/57046219391354","productTitle":"Organic Lionâs Mane Mushroom Extract (Alcohol Free) - 50ml","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/organic-lions-mane-mushroom-extract-alcohol-free-50ml-from-love-mushrooms-available-at-sow-arrow-2774941.webp?v=1783416673","price":"15.99","salePrice":"13.60","percent":14.9,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/16144944038266","variantId":"gid:\/\/shopify\/ProductVariant\/57051002208634","productTitle":"Organic Lion's Mane (4000mg per capsule) - 60 capsules","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/organic-lions-mane-4000mg-per-capsule-60-capsules-from-love-mushrooms-available-at-sow-arrow-6279251.webp?v=1783500129","price":"19.99","salePrice":"16.99","percent":15,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/16145058955642","variantId":"gid:\/\/shopify\/ProductVariant\/57051261370746","productTitle":"Organic Reishi (4000mg per capsule) - 60 capsules","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/organic-reishi-4000mg-per-capsule-60-capsules-from-love-mushrooms-available-at-sow-arrow-6810727.webp?v=1783582390","price":"19.99","salePrice":"16.99","percent":15,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/16145075863930","variantId":"gid:\/\/shopify\/ProductVariant\/57051365114234","productTitle":"Collagen Truffle Cotton Face Mask - 5 pack","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/collagen-truffle-cotton-face-mask-5-pack-from-sow-arrow-available-at-sow-arrow-6192698.webp?v=1783582389","price":"19.99","salePrice":"16.99","percent":15,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/16173430309242","variantId":"gid:\/\/shopify\/ProductVariant\/57160314323322","productTitle":"Organic Bean Chilli - 415g","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/organic-bean-chilli-415g-from-stoked-available-at-sow-arrow-9059328.webp?v=1786565719","price":"4.99","salePrice":"4.20","percent":15.8,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/16173429129594","variantId":"gid:\/\/shopify\/ProductVariant\/57160310980986","productTitle":"Organic Bolognese - 415g","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/organic-bolognese-415g-from-stoked-available-at-sow-arrow-8077676.webp?v=1786565719","price":"4.99","salePrice":"4.20","percent":15.8,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/16173424148858","variantId":"gid:\/\/shopify\/ProductVariant\/57160300036474","productTitle":"Organic Lentil Dhal - 415g","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/organic-lentil-dhal-415g-from-stoked-available-at-sow-arrow-3947139.webp?v=1786565721","price":"4.99","salePrice":"4.20","percent":15.8,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/16173427458426","variantId":"gid:\/\/shopify\/ProductVariant\/57160307048826","productTitle":"Organic Thai Green Curry - 415g","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/organic-thai-green-curry-415g-from-stoked-available-at-sow-arrow-1957289.webp?v=1786565720","price":"4.99","salePrice":"4.20","percent":15.8,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/16173431652730","variantId":"gid:\/\/shopify\/ProductVariant\/57160321794426","productTitle":"Organic Nacho Sauce - 400g","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/organic-nacho-sauce-400g-from-stoked-available-at-sow-arrow-8783507.webp?v=1786565718","price":"4.75","salePrice":"4.05","percent":14.7,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/16173249659258","variantId":"gid:\/\/shopify\/ProductVariant\/57159452492154","productTitle":"Crispy Shitake Seaweed Snacks - 5 Pack x 4g","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/crispy-shitake-seaweed-snacks-5-pack-x-4g-from-morish-available-at-sow-arrow-1069586.webp?v=1786565724","price":"4.99","salePrice":"4.25","percent":14.8,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/16173251133818","variantId":"gid:\/\/shopify\/ProductVariant\/57159465009530","productTitle":"Organic Olive Oil Seaweed Snacks - 5 Pack x 4g","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/organic-olive-oil-seaweed-snacks-5-pack-x-4g-from-morish-available-at-sow-arrow-2065874.webp?v=1786565723","price":"4.99","salePrice":"4.25","percent":14.8,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/14864049734010","variantId":"gid:\/\/shopify\/ProductVariant\/54849733099898","productTitle":"Biodynamic, Organic Fine Drinking Chocolate - 300g","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/biodynamic-organic-fine-drinking-chocolate-300g-from-vivani-available-at-sow-arrow-895931.webp?v=1732881687","price":"6.49","salePrice":"3.99","percent":38.5,"reason":"Short dated"},{"productId":"gid:\/\/shopify\/Product\/15632127000954","variantId":"gid:\/\/shopify\/ProductVariant\/56489454633338","productTitle":"Keto Pizza Base - 6 Pack","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/keto-pizza-base-6-pack-from-sow-arrow-available-at-sow-arrow-4180271.jpg?v=1770159081","price":"14.99","salePrice":"13.49","percent":10,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/15058953601402","variantId":"gid:\/\/shopify\/ProductVariant\/55277083853178","productTitle":"Organic Mico Cord (Cordyceps Extract) 835mg per cap - 70 capsules","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/organic-mico-cord-cordyceps-extract-835mg-per-cap-70-capsules-from-hiffas-da-terra-available-at-sow-arrow-164438.webp?v=1745028201","price":"65.99","salePrice":"52.79","percent":20,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/15058048582010","variantId":"gid:\/\/shopify\/ProductVariant\/55275421335930","productTitle":"Organic Mico-Chaga (Chaga Extract) 610mg per cap - 70 capsules","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/organic-mico-chaga-chaga-extract-610mg-per-cap-70-capsules-from-hiffas-da-terra-available-at-sow-arrow-509322.jpg?v=1744945379","price":"65.99","salePrice":"52.79","percent":20,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/15058005950842","variantId":"gid:\/\/shopify\/ProductVariant\/55275276697978","productTitle":"Organic Mico-Rei (Reishi Extract) 641mg per cap - 70 capsules","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/organic-mico-rei-reishi-extract-641mg-per-cap-70-capsules-from-hiffas-da-terra-available-at-sow-arrow-460826.webp?v=1744945383","price":"65.99","salePrice":"52.79","percent":20,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/15058025480570","variantId":"gid:\/\/shopify\/ProductVariant\/55275322507642","productTitle":"Organic Mico-Vir (Reishi \u0026 Cordyceps Extract) 670mg per cap - 70 capsules","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/organic-mico-vir-reishi-cordyceps-extract-670mg-per-cap-70-capsules-from-hiffas-da-terra-available-at-sow-arrow-487132.webp?v=1744945379","price":"65.99","salePrice":"52.79","percent":20,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/16110621884794","variantId":"gid:\/\/shopify\/ProductVariant\/56900480696698","productTitle":"Free-Range Chicken Bone Broth Powder - 300g","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/free-range-chicken-bone-broth-powder-300g-from-hunter-gather-available-at-sow-arrow-3329877.webp?v=1786565721","price":"31.99","salePrice":"28.89","percent":9.7,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/15927167025530","variantId":"gid:\/\/shopify\/ProductVariant\/56750704296314","productTitle":"Organic, British Authentic Desi Ghee - 300g","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/organic-british-authentic-desi-ghee-300g-from-shobhnas-ghee-available-at-sow-arrow-2538408.jpg?v=1775821527","price":"11.99","salePrice":"10.79","percent":10,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/16099802677626","variantId":"gid:\/\/shopify\/ProductVariant\/56859597177210","productTitle":"Collagen, MCT, Coffee Powder - 300g","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/collagen-mct-coffee-powder-300g-from-hunter-gather-available-at-sow-arrow-9156615.webp?v=1778113822","price":"34.00","salePrice":"30.60","percent":10,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/8730633896249","variantId":"gid:\/\/shopify\/ProductVariant\/46954128539961","productTitle":"Nano Gold \u0026 Platinum Glow \u0026 Shine - 50ml","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/nano-gold-platinum-glow-shine-50ml-from-the-health-factory-available-at-sow-arrow-524214.png?v=1726161966","price":"44.95","salePrice":"35.96","percent":20,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/8240018653497","variantId":"gid:\/\/shopify\/ProductVariant\/44853200814393","productTitle":"Nano Gold \u0026 Platinum Glow \u0026 Shine Collagen Support - 15ml","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/nano-gold-platinum-glow-shine-collagen-support-15ml-from-the-health-factory-available-at-sow-arrow-373680.png?v=1726161966","price":"24.99","salePrice":"19.99","percent":20,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/16190764384634","variantId":"gid:\/\/shopify\/ProductVariant\/57225131164026","productTitle":"Pure Peanut Crackers -Fiery Chilli Flakes - 20g","
656imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/3a4d98_ea75ec7d42be4adf911e6fa635cfd3d0_mv2.avif?v=1788432935","price":"1.65","salePrice":"1.32","percent":20,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/16190754488698","variantId":"gid:\/\/shopify\/ProductVariant\/57225101803898","productTitle":"Pure Peanut Crackers - Original - 20g","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/HighProteinPeanutCrackers3x20g_1.avif?v=1788432535","price":"1.65","salePrice":"1.32","percent":20,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/16190750032250","variantId":"gid:\/\/shopify\/ProductVariant\/57225090072954","productTitle":"Pure Peanut Crackers - Cracked Black Pepper - 20g","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/CrackedBlackPepperPeanutCrackers.avif?v=1788431863","price":"1.65","salePrice":"1.32","percent":20,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/16185733611898","variantId":"gid:\/\/shopify\/ProductVariant\/57208215503226","productTitle":"Popped Foxnuts - Black Pepper - 25g","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/popped-foxnuts-black-pepper-25g-from-bare-truth-available-at-sow-arrow-5601646.webp?v=1787974039","price":"2.29","salePrice":"1.95","percent":14.8,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/16185731875194","variantId":"gid:\/\/shopify\/ProductVariant\/57208213635450","productTitle":"Popped Foxnuts - Chilli Paprika - 25g","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/popped-foxnuts-chilli-paprika-25g-from-bare-truth-available-at-sow-arrow-7163493.jpg?v=1787974039","price":"2.29","salePrice":"1.95","percent":14.8,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/16185729122682","variantId":"gid:\/\/shopify\/ProductVariant\/57208208261498","productTitle":"Popped Foxnuts - Cinnamon Vanilla - 25g","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/popped-foxnuts-cinnamon-vanilla-25g-from-bare-truth-available-at-sow-arrow-1072382.webp?v=1787974039","price":"2.29","salePrice":"1.95","percent":14.8,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/16185728172410","variantId":"gid:\/\/shopify\/ProductVariant\/57208207245690","productTitle":"Popped Foxnuts - Coconut Cacao - 25g","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/popped-foxnuts-coconut-cacao-25g-from-bare-truth-available-at-sow-arrow-1139398.jpg?v=1787974038","price":"2.29","salePrice":"1.95","percent":14.8,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/16185703956858","variantId":"gid:\/\/shopify\/ProductVariant\/57208158454138","productTitle":"Crispy Sesame Oil Seaweed Snacks - 5 pack x 4g","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/crispy-sesame-oil-seaweed-snacks-5-pack-x-4g-from-morish-available-at-sow-arrow-1604112.webp?v=1788389354","price":"4.99","salePrice":"4.25","percent":14.8,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/16185703563642","variantId":"gid:\/\/shopify\/ProductVariant\/57208157372794","productTitle":"Avocado Oil Seaweed Snacks - 5 pack x 4g","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/avocado-oil-seaweed-snacks-5-pack-x-4g-from-morish-available-at-sow-arrow-4521024.webp?v=1788389358","price":"4.99","salePrice":"4.25","percent":14.8,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/16185706414458","variantId":"gid:\/\/shopify\/ProductVariant\/57208164581754","productTitle":"Avocado Oil Seaweed Snacks - Single - 4g","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/avocado-oil-seaweed-snacks-5-pack-x-4g-from-morish-available-at-sow-arrow-4521024.webp?v=1788389358","price":"1.29","salePrice":"1.10","percent":14.7,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/16173468320122","variantId":"gid:\/\/shopify\/ProductVariant\/57160449753466","productTitle":"Organic Olive Oil Seaweed Snacks - Single pack - 4g","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/organic-olive-oil-seaweed-snacks-single-pack-4g-from-morish-available-at-sow-arrow-8776612.webp?v=1788719775","price":"1.29","salePrice":"1.10","percent":14.7,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/16196423844218","variantId":"gid:\/\/shopify\/ProductVariant\/57248296763770","productTitle":"Organic Garden Pea \u0026 Vegetable Soup","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/organic-garden-pea-vegetable-soup-from-mr-organic-available-at-sow-arrow-6752651.webp?v=1788968290","price":"2.39","salePrice":"2.03","percent":15.1,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/16196414472570","variantId":"gid:\/\/shopify\/ProductVariant\/57248216514938","productTitle":"Organic Pumpkin, Carrot \u0026 Chilli Soup","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/organic-pumpkin-carrot-chilli-soup-from-mr-organic-available-at-sow-arrow-5572721.webp?v=1788968290","price":"2.39","salePrice":"2.03","percent":15.1,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/16196413129082","variantId":"gid:\/\/shopify\/ProductVariant\/57248213696890","productTitle":"Organic Tomato \u0026 Lentil Soup","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/organic-tomato-lentil-soup-from-mr-organic-available-at-sow-arrow-7972503.jpg?v=1788968289","price":"2.39","salePrice":"2.03","percent":15.1,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/16099857695098","variantId":"gid:\/\/shopify\/ProductVariant\/56859825996154","productTitle":"Vitamin D3 + K2 Oral Spray","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/vitamin-d3-k2-oral-spray-from-kiki-health-available-at-sow-arrow-2500733.webp?v=1778113820","price":"20.99","salePrice":"16.79","percent":20,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/16210802966906","variantId":"gid:\/\/shopify\/ProductVariant\/57297137435002","productTitle":"Grain-free, low carb - Original Toasted Muesli - 250g","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/grain-free-low-carb-original-toasted-muesli-250g-from-fudi-available-at-sow-arrow-6632558.webp?v=1790211191","price":"7.49","salePrice":"6.75","percent":9.9,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/14866288705914","variantId":"gid:\/\/shopify\/ProductVariant\/54853839913338","productTitle":"Vitamin D3 (2
656000IU) \u0026 K2 - 100 Capsules","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/vitamin-d3-2000iu-k2-100-capsules-from-terranova-available-at-sow-arrow-553422.webp?v=1733047619","price":"51.99","salePrice":"41.59","percent":20,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/8240020095289","variantId":"gid:\/\/shopify\/ProductVariant\/44853202977081","productTitle":"Vitamin D3 (2000IU) \u0026 K2 - 50 Capsules","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/vitamin-d3-2000iu-k2-50-capsules-from-terranova-available-at-sow-arrow-579237.jpg?v=1726162431","price":"28.69","salePrice":"22.95","percent":20,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/8240020128057","variantId":"gid:\/\/shopify\/ProductVariant\/44865340899641","productTitle":"Vitamin D3 2000IU (50ug) Complex - 50 or 100 capsules","variantTitle":"50 Capsules","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/vitamin-d3-2000iu-50ug-complex-50-or-100-capsules-from-terranova-available-at-sow-arrow-595618.jpg?v=1726162432","price":"15.29","salePrice":"12.32","percent":19.4,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/8240020128057","variantId":"gid:\/\/shopify\/ProductVariant\/44865340932409","productTitle":"Vitamin D3 2000IU (50ug) Complex - 50 or 100 capsules","variantTitle":"100 Capsules","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/vitamin-d3-2000iu-50ug-complex-50-or-100-capsules-from-terranova-available-at-sow-arrow-992320.jpg?v=1726162432","price":"28.89","salePrice":"21.51","percent":25.5,"reason":"Special Offers"}],"quickDefaults":{"reasons":["Sale","Clearance","Short dated","Damaged packaging","Display stock","Special Offers","Quick discounts"],"reasonsConfigured":true},"qualifying":{"requiresShipping":true,"excludeGiftLines":true},"ui":{"showInCart":false},"discountGid":"gid:\/\/shopify\/DiscountAutomaticNode\/2278451577210","startsAt":"2026-08-14T11:54:43Z","endsAt":null,"subscriptions":{"recurringCycleLimit":1},"quickReasons":["Special Offers","Short dated"],"quickItems":[["49080416207161","21.25",0],["49080212914489","21.25",0],["55311076622714","21.25",0],["56244032864634","6.99",0],["45022310105401","22.00",0],["55277108756858","22.99",0],["57056531906938","21.25",0],["57081625575802","6.75",0],["57081501483386","6.75",0],["57081508594042","6.75",0],["57081494929786","6.75",0],["57046455681402","13.60",0],["57122866594170","13.60",0],["57046219391354","13.60",0],["57051002208634","16.99",0],["57051261370746","16.99",0],["57051365114234","16.99",0],["57160314323322","4.20",0],["57160310980986","4.20",0],["57160300036474","4.20",0],["57160307048826","4.20",0],["57160321794426","4.05",0],["57159452492154","4.25",0],["57159465009530","4.25",0],["54849733099898","3.99",1],["56489454633338","13.49",0],["55277083853178","52.79",0],["55275421335930","52.79",0],["55275276697978","52.79",0],["55275322507642","52.79",0],["56900480696698","28.89",0],["56750704296314","10.79",0],["56859597177210","30.60",0],["46954128539961","35.96",0],["44853200814393","19.99",0],["57225131164026","1.32",0],["57225101803898","1.32",0],["57225090072954","1.32",0],["57208215503226","1.95",0],["57208213635450","1.95",0],["57208208261498","1.95",0],["57208207245690","1.95",0],["57208158454138","4.25",0],["57208157372794","4.25",0],["57208164581754","1.10",0],["57160449753466","1.10",0],["57248296763770","2.03",0],["57248216514938","2.03",0],["57248213696890","2.03",0],["56859825996154","16.79",0],["57297137435002","6.75",0]]}]};</script>
656 657
657<script src="//sowandarrow.com/cdn/shop/t/46/assets/windfall-product-promotions.js?v=71566852928092204341786684190" defer></script>
657 658 <link href="//sowandarrow.com/cdn/shop/t/46/assets/subscription-controls.css?v=28222874430186728211788641162" rel="stylesheet" type="text/css" media="all" /> 659
659<script src="//sowandarrow.com/cdn/shop/t/46/assets/subscription-selector.js?v=76638960017526934061788641162" defer></script>
659 660
660<script src="//sowandarrow.com/cdn/shop/t/46/assets/subscription-modifier.js?v=128681309436634824231788641167" defer></script>
660 661
661<script src="//sowandarrow.com/cdn/shop/t/46/assets/cross-sell.js?v=26270625333127106461788641163" defer></script>
661<link href="//sowandarrow.com/cdn/shop/t/46/assets/theme.css?v=405593962759408251786684190" rel="stylesheet" type="text/css" media="all" /><!-- BEGIN app block: shopify://apps/foxify-page-builder/blocks/app-embed/4e19e422-f550-4994-9ea0-84f23728223d --> 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677
677<script id='foxify-recently-viewed-product'> 678 const productHandle = "pure-peanut-crackers-cracked-black-pepper-20g"; 679 let max = 20; 680 const saveKey = 'foxify:recently-viewed'; 681 const products = localStorage.getItem(saveKey) ? JSON.parse(localStorage.getItem(saveKey)) : []; 682 if (productHandle && !products.includes(productHandle)) { 683 products.push(productHandle) 684 } 685 localStorage.setItem(saveKey, JSON.stringify(products.filter((x, i) => { 686 return i <= max - 1 687 }))) 688 </script>
688 689 690 691 692 693 694<!-- END app block --><!-- BEGIN app block: shopify://apps/pwa-mobile-app/blocks/app-embbed/f3b239f7-3e90-4ab2-8458-5a83727f15a6 --><link rel="manifest" href="/a/progressify/sowandarrow/manifest.json">
694<script 695 type="text/javascript" 696 async 697 src="https://pwa.lightifyme.com/progressify/sowandarrow/main.js"></script>
697 698 699 700 701 702 703 704<!-- END app block --><!-- BEGIN app block: shopify://apps/inbox/blocks/chat/841fc607-4181-4ad1-842d-e24d7f8bad6b --><link rel='modulepreload' href='https://cdn.shopify.com/storefront/web-components/chat.js' crossorigin fetchpriority='low'> 705
706<script id='shopify-chat-app-embed-data' type='application/json'> 707 { 708 "settings": { 709 "invertActivatorColors": false, 710 "greetingMessage": "", 711 "showFeaturedProducts": true, 712 "featuredProducts": [], 713 "horizontalPosition": "bottom_right", 714 "icon": "chat_bubble", 715 "buttonLabel": "" 716 } 717 } 718</script>
718 719 720<style data-shopify> 721 722 @font-face { 723 font-family: "Bricolage Grotesque"; 724 font-weight: 400; 725 font-style: normal; 726 font-display: swap; 727 src: url("//sowandarrow.com/cdn/fonts/bricolage_grotesque/bricolagegrotesque_n4.3c051773a9f927cd8737c10568a7e4175690f7d9.woff2") format("woff2"), 728 url("//sowandarrow.com/cdn/fonts/bricolage_grotesque/bricolagegrotesque_n4.58698d726495f44d45631b33dcda62f474c467fc.woff") format("woff"); 729} 730 731 @font-face { 732 font-family: "Bricolage Grotesque"; 733 font-weight: 700; 734 font-style: normal; 735 font-display: swap; 736 src: url("//sowandarrow.com/cdn/fonts/bricolage_grotesque/bricolagegrotesque_n7.de5675dd7a8e145fdc4cb2cfe67a16cb085528d0.woff2") format("woff2"), 737 url("//sowandarrow.com/cdn/fonts/bricolage_grotesque/bricolagegrotesque_n7.d701b766b46c76aceb10c78473f491dff9b09e5e.woff") format("woff"); 738} 739 740 741 742 743 744 /* Shadow DOM content does not prevent theme-wide :empty rules from matching the host. */ 745 shopify-chat:defined:empty { 746 display: grid; 747 } 748 749 :root { 750 --shopify-chat-bg-color: #FAF4F0; 751 --shopify-chat-text-color: #000000; 752 --shopify-chat-accent-bg-color: #000000; 753 --shopify-chat-accent-text-color: #FAF4F0; 754 --shopify-chat-activator-offset: 20px; 755 756 757 --shopify-chat-heading-font-family: "Bricolage Grotesque", sans-serif; 758 --shopify-chat-body-font-family: "Bricolage Grotesque", sans-serif; 759 --shopify-chat-font-size: 14px; 760 761 762 --shopify-chat-activator-font-size: 13px; 763 --shopify-chat-border-radius: 16px; 764 } 765 766 767 shopify-chat { 768 font-weight: 400; 769 font-style: normal; 770 } 771 772</style> 773
774<script src='https://cdn.shopify.com/storefront/web-components/chat.js' type='module' crossorigin fetchpriority='low' async></script>
774 775 776 777<!-- END app block --><!-- BEGIN app block: shopify://apps/pwa-mobile-app/blocks/app-head-top/f3b239f7-3e90-4ab2-8458-5a83727f15a6 --> 778 779 780
781<script> 782 783 document.addEventListener('DOMContentLoaded', () => { 784 785 let filed = "true" 786 console.log(filed,'filed'); 787 788 789 const shopDomain = "sowandarrow"; 790 const shop = "sowandarrow.myshopify.com"; 791 792 const manifestLink = document.createElement('link'); 793 manifestLink.rel = 'manifest'; 794 manifestLink.href = `/a/progressify/${shopDomain}/manifest.json`; 795 796 const scriptTag = document.createElement('script'); 797 scriptTag.type = 'text/javascript'; 798 scriptTag.async = true; 799 scriptTag.src = `https://pwa.lightifyme.com/progressify/${shopDomain}/main.js`; 800 801 if (scriptTag.src.includes(shopDomain)) { 802 document.head.prepend(scriptTag); 803 } 804 805 if (manifestLink.href.includes(shopDomain)) { 806 document.head.prepend(manifestLink); 807 } 808 }); 809</script>
809<!-- END app block --><!-- BEGIN app block: shopify://apps/tinyseo-seo-speed/blocks/breadcrumbs-json-ld-embed/0605268f-f7c4-4e95-b560-e43df7d59ae4 -->
809<script type="application/ld+json" id="tinyimg-breadcrumbs-json-ld"> 810 { 811 "@context": "https://schema.org", 812 "@type": "BreadcrumbList", 813 "itemListElement": [ 814 { 815 "@type": "ListItem", 816 "position": 1, 817 "item": { 818 "@id": "https://sowandarrow.com", 819 "name": "Home" 820 } 821 } 822 823 824 825 826 827 828 ,{ 829 "@type": "ListItem", 830 "position": 2, 831 "item": { 832 "@id": "https://sowandarrow.com/products/pure-peanut-crackers-cracked-black-pepper-20g", 833 "name": "Pure Peanut Crackers - Cracked Black Pepper - 20g" 834 } 835 } 836 837 ] 838 } 839 </script>
839 840<!-- END app block --><!-- BEGIN app block: shopify://apps/klaviyo-email-marketing-sms/blocks/klaviyo-onsite-embed/2632fe16-c075-4321-a88b-50b567f42507 --> 841 842 843 844 845 846 847 848 849 850 851 852 853
853<script async src="https://static.klaviyo.com/onsite/js/U6jjPm/klaviyo.js?company_id=U6jjPm"></script>
853 854
854<script>!function(){if(!window.klaviyo){window._klOnsite=window._klOnsite||[];try{window.klaviyo=new Proxy({},{get:function(n,i){return"push"===i?function(){var n;(n=window._klOnsite).push.apply(n,arguments)}:function(){for(var n=arguments.length,o=new Array(n),w=0;w<n;w++)o[w]=arguments[w];var t="function"==typeof o[o.length-1]?o.pop():void 0,e=new Promise((function(n){window._klOnsite.push([i].concat(o,[function(i){t&&t(i),n(i)}]))}));return e}}})}catch(n){window.klaviyo=window.klaviyo||[],window.klaviyo.push=function(){var n;(n=window._klOnsite).push.apply(n,arguments)}}}}();</script>
854 855 856 857
857<script id="viewed_product"> 858 if (item == null) { 859 var _learnq = _learnq || []; 860 861 var MetafieldReviews = null 862 var MetafieldYotpoRating = null 863 var MetafieldYotpoCount = null 864 var MetafieldLooxRating = null 865 var MetafieldLooxCount = null 866 var okendoProduct = null 867 var okendoProductReviewCount = null 868 var okendoProductReviewAverageValue = null 869 try { 870 // The following fields are used for Customer Hub recently viewed in order to add reviews. 871 // This information is not part of __kla_viewed. Instead, it is part of __kla_viewed_reviewed_items 872 MetafieldReviews = {}; 873 MetafieldYotpoRating = null 874 MetafieldYotpoCount = null 875 MetafieldLooxRating = null 876 MetafieldLooxCount = null 877 878 okendoProduct = null 879 // If the okendo metafield is not legacy, it will error, which then requires the new json formatted data 880 if (okendoProduct && 'error' in okendoProduct) { 881 okendoProduct = null 882 } 883 okendoProductReviewCount = okendoProduct ? okendoProduct.reviewCount : null 884 okendoProductReviewAverageValue = okendoProduct ? okendoProduct.reviewAverageValue : null 885 } catch (error) { 886 console.error('Error in Klaviyo onsite reviews tracking:', error); 887 } 888 889 var item = { 890 Name: "Pure Peanut Crackers - Cracked Black Pepper - 20g", 891 ProductID: 16190750032250, 892 Categories: ["New Arrivals","Offers","Our Full Range","Picnic Perfection","Products","Snacks","Store Cupboard Essentials"], 893 ImageURL: "https://sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers_small.avif?v=1788431863", 894 URL: "https://sowandarrow.com/products/pure-peanut-crackers-cracked-black-pepper-20g", 895 Brand: "Uppernut", 896 Price: "£1.65", 897 Value: "1.65", 898 CompareAtPrice: "£0.00" 899 }; 900 _learnq.push(['track', 'Viewed Product', item]); 901 _learnq.push(['trackViewedItem', { 902 Title: item.Name, 903 ItemId: item.ProductID, 904 Categories: item.Categories, 905 ImageUrl: item.ImageURL, 906 Url: item.URL, 907 Metadata: { 908 Brand: item.Brand, 909 Price: item.Price, 910 Value: item.Value, 911 CompareAtPrice: item.CompareAtPrice 912 }, 913 metafields:{ 914 reviews: MetafieldReviews, 915 yotpo:{ 916 rating: MetafieldYotpoRating, 917 count: MetafieldYotpoCount, 918 }, 919 loox:{ 920 rating: MetafieldLooxRating, 921 count: MetafieldLooxCount, 922 }, 923 okendo: { 924 rating: okendoProductReviewAverageValue, 925 count: okendoProductReviewCount, 926 } 927 } 928 }]); 929 } 930 </script>
930 931 932 933 934 935 936
936<script> 937 window.klaviyoReviewsProductDesignMode = false 938 </script>
938 939 940 941 942 <!-- BEGIN app snippet: customer-hub-data -->
942<script> 943 if (!window.customerHub) { 944 window.customerHub = {}; 945 } 946 window.customerHub.storefrontRoutes = { 947 login: "/account/login?return_url=%2F%23k-hub", 948 register: "/account/register?return_url=%2F%23k-hub", 949 logout: "/account/logout", 950 profile: "/account", 951 addresses: "/account/addresses", 952 }; 953 954 window.customerHub.userId = null; 955 956 window.customerHub.storeDomain = "sowandarrow.myshopify.com"; 957 958 959 window.customerHub.activeProduct = { 960 name: "Pure Peanut Crackers - Cracked Black Pepper - 20g", 961 category: null, 962 imageUrl: "https://sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers_small.avif?v=1788431863", 963 id: "16190750032250", 964 link: "https://sowandarrow.com/products/pure-peanut-crackers-cracked-black-pepper-20g", 965 options: [ 966 967 { 968 name: "Title", 969 values: [ 970 971 972 973 { 974 name: "Default Title", 975 colorHex: null, 976 swatchImageUrl: null 977 } 978 979 ] 980 } 981 982 ], 983 variants: [ 984 985 { 986 id: "57225090072954", 987 selectedOptions: [ 988 989 990 { 991 name: "Title", 992 value: "Default Title" 993 } 994 995 ], 996 997 imageUrl: null, 998 999 price: "165", 1000 currency: "GBP", 1001 availableForSale: true, 1002 title: "Default Title", 1003 }, 1004 1005 ], 1006 };
1007 window.customerHub.activeProduct.variants.forEach((variant) => { 1008 1009 variant.price = `${variant.price.slice(0, -2)}.${variant.price.slice(-2)}`; 1010 }); 1011 1012 1013 1014 window.customerHub.storeLocale = { 1015 currentLanguage: 'en', 1016 currentCountry: 'GB', 1017 availableLanguages: [ 1018 1019 { 1020 iso_code: 'en', 1021 endonym_name: 'English' 1022 } 1023 1024 ], 1025 availableCountries: [ 1026 1027 { 1028 iso_code: 'GG', 1029 name: 'Guernsey', 1030 currency_code: 'GBP' 1031 }, 1032 1033 { 1034 iso_code: 'JE', 1035 name: 'Jersey', 1036 currency_code: 'GBP' 1037 }, 1038 1039 { 1040 iso_code: 'GB', 1041 name: 'United Kingdom', 1042 currency_code: 'GBP' 1043 } 1044 1045 ] 1046 }; 1047 1048</script>
1048 1049<!-- END app snippet --> 1050 1051 1052 1053 1054 1055 1056 1057<!-- END app block --><!-- BEGIN app block: shopify://apps/tinyseo-seo-speed/blocks/product-json-ld-embed/0605268f-f7c4-4e95-b560-e43df7d59ae4 -->
1057<script type="application/ld+json" id="tinyimg-product-json-ld"> 1058 { 1059 "@context": "https://schema.org", 1060 "@graph": [ 1061 { 1062 "@type": "Product", 1063 "@id": "https://sowandarrow.com/products/pure-peanut-crackers-cracked-black-pepper-20g", 1064 "productID": "16190750032250", 1065 "name": "Pure Peanut Crackers - Cracked Black Pepper - 20g","image": "https://sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers.avif?v=1788431863","description": "Uppernut Cracked Black Pepper Peanut cracker Bites offer a unique and satisfying crunch, with just the right amount of bold, peppery flavour. Each 20g pack is the perfect on-the-go snack to satisfy your hunger and spice cravings. These bites are a great alternative to traditional chips or other unhealthy snacks, providing a grain-free, low-carb, delicious snacking experience. Whether you\u0026#39;re a fan of bold flavours or just looking for a healthier snack option, our Cracked Black Pepper Peanut Bites are sure to satisfy your cravings.", 1066 "url": "https://sowandarrow.com/products/pure-peanut-crackers-cracked-black-pepper-20g","manufacturer": { 1067 "@type": "Organization", 1068 "name": "Uppernut" 1069 }, 1070"category": "Food, Beverages \u0026 Tobacco \u003e Food Items \u003e Snack Foods \u003e Crackers", 1071"weight": { 1072 "@type": "QuantitativeValue", 1073 "value": "20", 1074 "unitCode": "GRM" 1075 }, 1076"offers" : [ 1077 { 1078 "@type" : "Offer" ,"gtin13": "5070000615929", 1079 "sku": "57225090072954", 1080"priceCurrency" : "GBP" , 1081 "price": "1.65", 1082 "priceValidUntil": "2027-01-02", 1083 "validFrom": "2026-09-03", 1084 1085 1086 "availability" : "https://schema.org/InStock", 1087 1088 "itemCondition": "https://schema.org/NewCondition", 1089 1090 1091 "url" : "https://sowandarrow.com/products/pure-peanut-crackers-cracked-black-pepper-20g?variant=57225090072954", 1092 1093 1094 1095 1096 1097 "seller" : { 1098 "@type" : "Organization", 1099 "name": "Sow \u0026amp; Arrow" 1100 } 1101 } 1102 ], 1103 "brand": { 1104 "@type": "Brand", 1105 "name": "Uppernut" 1106 } 1107 } 1108 1109 1110 1111 ] 1112 } 1113 </script>
1113 1114<!-- END app block --><!-- BEGIN app block: shopify://apps/microsoft-clarity/blocks/clarity_js/31c3d126-8116-4b4a-8ba1-baeda7c4aeea -->
1115<script type="text/javascript"> 1116 (function (c, l, a, r, i, t, y) { 1117 c[a] = c[a] || function () { (c[a].q = c[a].q || []).push(arguments); }; 1118 t = l.createElement(r); t.async = 1; t.src = "https://www.clarity.ms/tag/" + i + "?ref=shopify"; 1119 y = l.getElementsByTagName(r)[0]; y.parentNode.insertBefore(t, y); 1120 1121 c.Shopify.loadFeatures([{ name: "consent-tracking-api", version: "0.1" }], error => { 1122 if (error) { 1123 console.error("Error loading Shopify features:", error); 1124 return; 1125 } 1126 1127 c[a]('consentv2', { 1128 ad_Storage: c.Shopify.customerPrivacy.marketingAllowed() ? "granted" : "denied", 1129 analytics_Storage: c.Shopify.customerPrivacy.analyticsProcessingAllowed() ? "granted" : "denied", 1130 source: 101, 1131 }); 1132 }); 1133 1134 l.addEventListener("visitorConsentCollected", function (e) { 1135 c[a]('consentv2', { 1136 ad_Storage: e.detail.marketingAllowed ? "granted" : "denied", 1137 analytics_Storage: e.detail.analyticsAllowed ? "granted" : "denied", 1138 source: 101, 1139 }); 1140 }); 1141 })(window, document, "clarity", "script", "srn1o2afpx"); 1142</script>
1142 1143 1144 1145 1146<!-- END app block --><!-- BEGIN app block: shopify://apps/rebuy-personalization-engine/blocks/rebuy-global-embed/a26ae9b9-933b-40bf-bbc6-bf1220bbc4dc -->
1147<script> 1148 window.Rebuy = window.Rebuy || {}; 1149 window.Rebuy.customer = window.Rebuy.customer || {}; 1150 1151 window.Rebuy.market = window.Rebuy.market || {}; 1152 1153 window.Rebuy.market.country = "GB"; 1154 1155 1156 window.Rebuy.market.locale = "en"; 1157 1158</script>
1158 1159 1160 1161 1162 1163 1164<!-- END app block -->
1164<script src="https://cdn.shopify.com/extensions/01a0f6c2-aa0c-7102-a352-5a313c71c89c/bixgrow-affiliate-203/assets/bixgrow_tracker_logic.js" type="text/javascript" defer="defer"></script>
vendor: 1 bytes, line 1164
1164
1165<script src="https://cdn.shopify.com/extensions/01a101d9-652a-7b73-904c-cf9ed89a9db5/2026-10-03-12-58-30-UTC--0fc6178/assets/smile-loader.js" type="text/javascript" defer="defer"></script>
1165 1166<link href="https://monorail-edge.shopifysvc.com" rel="dns-prefetch">
1167<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: 75289362745,url: window.location.href,navigation_start,duration: currentMs - navigation_start,session_token,page_type: "product"};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 1167
1167
1168<script> 1169 window.__TREKKIE_SHIM_QUEUE = window.__TREKKIE_SHIM_QUEUE || []; 1170</script>
vendor: 1 bytes, line 1170
1170
1171<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}
1171).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: 75289362745,storefrontBaseUrl: "https://sowandarrow.com",extensionsBaseUrl: "https://extensions.shopifycdn.com/cdn/shopifycloud/web-pixels-manager",monorailEndpoint: "https://sowandarrow.com/.well-known/shopify/monorail/unstable/produce_batch",surface: "storefront-renderer",enabledBetaFlags: ["4c64608a","16072cab","8450a54b","7ee89bf1"],webPixelsConfigList: [{"id":"2703851898","configuration":"{\"shopId\":\"75289362745\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"83adcaf06c5deacff41ffdf8f92d9129","type":"APP","apiClientId":246667608065,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_phone","read_customer_personal_data"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"},{"id":"2619670906","configuration":"{\"pixelCode\":\"D81M3RJC77U0NC104QR0\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"22e92c2ad45662f435e4801458fb78cc","type":"APP","apiClientId":4383523,"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":"2546631034","configuration":"{\"shopId\":\"39312\",\"domainStatus\":\"0\",\"domain\":\"sowandarrow.com\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"13124b044e9b3aaaba4080cdba031853","type":"APP","apiClientId":5443297,"privacyPurposes":[],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]}
1171,"dataSharingState":"unrestricted"},{"id":"2059436410","configuration":"{\"accountID\":\"U6jjPm\",\"webPixelConfig\":\"eyJlbmFibGVBZGRlZFRvQ2FydEV2ZW50cyI6IHRydWV9\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"c63c5b72c8d77be5f2d27d14c081da38","type":"APP","apiClientId":123074,"privacyPurposes":["ANALYTICS","MARKETING"],"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":"1947500922","configuration":"{\"projectId\":\"srn1o2afpx\"}","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"]},"dataSharingState":"unrestricted"},{"id":"1853587834","configuration":"{\"shopId\":\"sowandarrow.myshopify.com\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"7093dff47f098f6de2afb75b62011ebe","type":"APP","apiClientId":2753413,"privacyPurposes":["ANALYTICS","MARKETING"],"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":"1644790138","configuration":"{\"accountID\":\"2de2ed03-0af8-4fa2-a602-a56f522d5573\",\"configs\":\"foxify,420dde02-66e0-4e84-a285-abcd1bbc3790,https:\/\/tracking.foxecom.app\/track\/batch\",\"appType\":\"production\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"9f2319e6a77ced168521277a4f8f9877","type":"APP","apiClientId":12239405057,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_email","read_customer_name","read_customer_personal_data"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"},{"id":"1513881978","configuration":"{\n \"accountID\":\"sowandarrow.myshopify.com\",\n \"environment\":\"production\",\n \"apiURL\":\"https:\/\/api.quizkitapp.com\"\n }","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"8b4008b7d9cf69ef6aab7ff3dbda8179","type":"APP","apiClientId":4291957,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_email","read_customer_personal_data"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"},{"id":"1513718138","configuration":"{\"store_id\":\"199628\",\"environment\":\"prod\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"10c4f173702937db6fa4bf871600cafd","type":"APP","apiClientId":294517,"privacyPurposes":["ANALYTICS"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"unrestricted"},{"id":"766148921","configuration":"{\"config\":\"{\\\"google_tag_ids\\\":[\\\"G-9EGY9XD0HN\\\",\\\"AW-10871694284\\\",\\\"GT-MR2PDWH5\\\"],\\\"target_country\\\":\\\"GB\\\",\\\"gtag_events\\\":[{\\\"type\\\":\\\"begin_checkout\\\",\\\"action_label\\\":[\\\"G-9EGY9XD0HN\\\",\\\"AW-10871694284\\\/tm1KCMzmpMMZEMzHg8Ao\\\"]},{\\\"type\\\":\\\"search\\\",\\\"action_label\\\":[\\\"G-9EGY9XD0HN\\\",\\\"AW-10871694284\\\/INISCMbmpMMZEMzHg8Ao\\\"]},{\\\"type\\\":\\\"remove_from_cart\\\",\\\"action_label\\\":\\\"G-9EGY9XD0HN\\\"},{\\\"type\\\":\\\"view_item\\\",\\\"action_label\\\":[\\\"G-9EGY9XD0HN\\\",\\\"AW-10871694284\\\/d5YcCMPmpMMZEMzHg8Ao\\\",\\\"MC-M1HQDEEWSE\\\"]},{\\\"type\\\":\\\"add_shipping_info\\\",\\\"action_label\\\":\\\"G-9EGY9XD0HN\\\"},{\\\"type\\\":\\\"purchase\\\",\\\"action_label\\\":[\\\"G-9EGY9XD0HN\\\",\\\"AW-10871694284\\\/bnnUCL3mpMMZEMzHg8Ao\\\",\\\"MC-M1HQDEEWSE\\\"]}
1171,{\\\"type\\\":\\\"page_view\\\",\\\"action_label\\\":[\\\"G-9EGY9XD0HN\\\",\\\"AW-10871694284\\\/VnhhCMDmpMMZEMzHg8Ao\\\",\\\"MC-M1HQDEEWSE\\\"]},{\\\"type\\\":\\\"view_item_list\\\",\\\"action_label\\\":\\\"G-9EGY9XD0HN\\\"},{\\\"type\\\":\\\"add_payment_info\\\",\\\"action_label\\\":[\\\"G-9EGY9XD0HN\\\",\\\"AW-10871694284\\\/MIMVCM_mpMMZEMzHg8Ao\\\"]},{\\\"type\\\":\\\"add_to_cart\\\",\\\"action_label\\\":[\\\"G-9EGY9XD0HN\\\",\\\"AW-10871694284\\\/EFI1CMnmpMMZEMzHg8Ao\\\"]},{\\\"type\\\":\\\"view_cart\\\",\\\"action_label\\\":\\\"G-9EGY9XD0HN\\\"}],\\\"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":"393347385","configuration":"{\"pixel_id\":\"2923452311160796\",\"pixel_type\":\"facebook_pixel\"}","eventPayloadVersion":"v1","runtimeContext":"OPEN","scriptVersion":"96420dbe9ea96c426a1b7f364f977719","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":"168689977","configuration":"{\"myshopifyDomain\":\"sowandarrow.myshopify.com\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"23b97d18e2aa74363140dc29c9284e87","type":"APP","apiClientId":2775569,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_phone","read_customer_personal_data"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"},{"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":"Sow \u0026 Arrow","paymentSettings":{"currencyCode":"GBP"},"myshopifyDomain":"sowandarrow.myshopify.com","countryCode":"GB","storefrontUrl":"https:\/\/sowandarrow.com"},"customer":null,"cart":null,"checkout":null,"productVariants":[{"price":{"amount":1.65,"currencyCode":"GBP"},"product":{"title":"Pure Peanut Crackers - Cracked Black Pepper - 20g","vendor":"Uppernut","id":"16190750032250","untranslatedTitle":"Pure Peanut Crackers - Cracked Black Pepper - 20g","url":"\/products\/pure-peanut-crackers-cracked-black-pepper-20g","type":"Snacks"},"id":"57225090072954","image":{"src":"\/\/sowandarrow.com\/cdn\/shop\/files\/CrackedBlackPepperPeanutCrackers.avif?v=1788431863"},"sku":null,"title":"Default Title","untranslatedTitle":"Default Title"}],"products":[{"id":"16190750032250","handle":"pure-peanut-crackers-cracked-black-pepper-20g","isCollective":false,"title":"Pure Peanut Crackers - Cracked Black Pepper - 20g","type":"Snacks","untranslatedTitle":"Pure Peanut Crackers - Cracked Black Pepper - 20g","url":"\/products\/pure-peanut-crackers-cracked-black-pepper-20g","vendor":"Uppernut","remoteShopId":null,"variants":[{"id":"57225090072954","image":{"src":"\/\/sowandarrow.com\/cdn\/shop\/files\/CrackedBlackPepperPeanutCrackers.avif?v=1788431863"},"price":{"amount":1.65,"currencyCode":"GBP"},"sku":null,"title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"16190754488698","handle":"pure-peanut-crackers-fiery-chilli-flakes-20g","isCollective":false,"title":"Pure Peanut Crackers - Original - 20g","type":"Snacks","untranslatedTitle":"Pure Peanut Crackers - Original - 20g","url":"\/products\/pure-peanut-crackers-fiery-chilli-flakes-20g","vendor":"Uppernut","remoteShopId":null,"variants":[{"id":"57225101803898","image":{"src":"\/\/sowandarrow.com\/cdn\/shop\/files\/HighProteinPeanutCrackers3x20g_1.avif?v=1788432535"},"price":{"amount":1.65,"currencyCode":"GBP"},"sku":null,"title":"Default Title","untranslatedTitle":"Default Title"}]}
1171,{"id":"16190764384634","handle":"pure-peanut-crackers-fiery-chilli-flakes-20g-copy","isCollective":false,"title":"Pure Peanut Crackers -Fiery Chilli Flakes - 20g","type":"Snacks","untranslatedTitle":"Pure Peanut Crackers -Fiery Chilli Flakes - 20g","url":"\/products\/pure-peanut-crackers-fiery-chilli-flakes-20g-copy","vendor":"Uppernut","remoteShopId":null,"variants":[{"id":"57225131164026","image":{"src":"\/\/sowandarrow.com\/cdn\/shop\/files\/3a4d98_ea75ec7d42be4adf911e6fa635cfd3d0_mv2.avif?v=1788432935"},"price":{"amount":1.65,"currencyCode":"GBP"},"sku":null,"title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"16196423844218","handle":"organic-pumpkin-carrot-chilli-soup-copy","isCollective":false,"title":"Organic Garden Pea \u0026 Vegetable Soup","type":"Soup","untranslatedTitle":"Organic Garden Pea \u0026 Vegetable Soup","url":"\/products\/organic-pumpkin-carrot-chilli-soup-copy","vendor":"Mr Organic","remoteShopId":null,"variants":[{"id":"57248296763770","image":{"src":"\/\/sowandarrow.com\/cdn\/shop\/files\/organic-garden-pea-vegetable-soup-from-mr-organic-available-at-sow-arrow-6752651.webp?v=1788968290"},"price":{"amount":2.39,"currencyCode":"GBP"},"sku":null,"title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"16196413129082","handle":"organic-tomato-lentil-soup","isCollective":false,"title":"Organic Tomato \u0026 Lentil Soup","type":"Soup","untranslatedTitle":"Organic Tomato \u0026 Lentil Soup","url":"\/products\/organic-tomato-lentil-soup","vendor":"Mr Organic","remoteShopId":null,"variants":[{"id":"57248213696890","image":{"src":"\/\/sowandarrow.com\/cdn\/shop\/files\/organic-tomato-lentil-soup-from-mr-organic-available-at-sow-arrow-7972503.jpg?v=1788968289"},"price":{"amount":2.39,"currencyCode":"GBP"},"sku":null,"title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"16196414472570","handle":"organic-tomato-lentil-soup-copy","isCollective":false,"title":"Organic Pumpkin, Carrot \u0026 Chilli Soup","type":"Soup","untranslatedTitle":"Organic Pumpkin, Carrot \u0026 Chilli Soup","url":"\/products\/organic-tomato-lentil-soup-copy","vendor":"Mr Organic","remoteShopId":null,"variants":[{"id":"57248216514938","image":{"src":"\/\/sowandarrow.com\/cdn\/shop\/files\/organic-pumpkin-carrot-chilli-soup-from-mr-organic-available-at-sow-arrow-5572721.webp?v=1788968290"},"price":{"amount":2.39,"currencyCode":"GBP"},"sku":null,"title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"16185731875194","handle":"popped-foxnuts-coconut-cacao-25g-copy","isCollective":false,"title":"Popped Foxnuts - Chilli Paprika - 25g","type":null,"untranslatedTitle":"Popped Foxnuts - Chilli Paprika - 25g","url":"\/products\/popped-foxnuts-coconut-cacao-25g-copy","vendor":"Bare Truth","remoteShopId":null,"variants":[{"id":"57208213635450","image":{"src":"\/\/sowandarrow.com\/cdn\/shop\/files\/popped-foxnuts-chilli-paprika-25g-from-bare-truth-available-at-sow-arrow-7163493.jpg?v=1787974039"},"price":{"amount":2.29,"currencyCode":"GBP"},"sku":null,"title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"16185729122682","handle":"popped-foxnuts-cinnamon-vanilla-25g","isCollective":false,"title":"Popped Foxnuts - Cinnamon Vanilla - 25g","type":"Snacks","untranslatedTitle":"Popped Foxnuts - Cinnamon Vanilla - 25g","url":"\/products\/popped-foxnuts-cinnamon-vanilla-25g","vendor":"Bare Truth","remoteShopId":null,"variants":[{"id":"57208208261498","image":{"src":"\/\/sowandarrow.com\/cdn\/shop\/files\/popped-foxnuts-cinnamon-vanilla-25g-from-bare-truth-available-at-sow-arrow-1072382.webp?v=1787974039"},"price":{"amount":2.29,"currencyCode":"GBP"},"sku":null,"title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"16210802966906","handle":"grain-free-low-carb-original-toasted-muesli-250g","isCollective":false,"title":"Grain-free, low carb - Original Toasted Muesli - 250g","type":"Cereal","untranslatedTitle":"Grain-free, low carb - Original Toasted Muesli - 250g","url":"\/products\/grain-free-low-carb-original-toasted-muesli-250g","vendor":"Fudi","remoteShopId":null,"variants":[{"id":"57297137435002","image":{"src":"\/\/sowandarrow.com\/cdn\/shop\/files\/grain-free-low-carb-original-toasted-muesli-250g-from-fudi-available-at-sow-arrow-6632558.webp?v=1790211191"},"price":{"amount":7.49,"currencyCode":"GBP"},"sku":null,"title":"Default Title","untranslatedTitle":"Default Title"}]}
1171,{"id":"16207781626234","handle":"montezuma-dark-cherry-and-pistachio-90g-copy","isCollective":false,"title":"Montezuma's Milk Chocolate Gingerbread - 90g","type":"Chocolate","untranslatedTitle":"Montezuma's Milk Chocolate Gingerbread - 90g","url":"\/products\/montezuma-dark-cherry-and-pistachio-90g-copy","vendor":"Montezuma's","remoteShopId":null,"variants":[{"id":"57281611334010","image":{"src":"\/\/sowandarrow.com\/cdn\/shop\/files\/montezumas-milk-chocolate-gingerbread-90g-from-montezumas-available-at-sow-arrow-3963050.webp?v=1790211191"},"price":{"amount":4.49,"currencyCode":"GBP"},"sku":null,"title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"16207780905338","handle":"montezuma-dark-cherry-and-pistachio-90g","isCollective":false,"title":"Montezuma's - Dark Cherry and Pistachio - 90g","type":"Chocolate","untranslatedTitle":"Montezuma's - Dark Cherry and Pistachio - 90g","url":"\/products\/montezuma-dark-cherry-and-pistachio-90g","vendor":"Montezuma's","remoteShopId":null,"variants":[{"id":"57281607500154","image":{"src":"\/\/sowandarrow.com\/cdn\/shop\/files\/montezumas-dark-cherry-and-pistachio-90g-from-montezumas-available-at-sow-arrow-6115485.webp?v=1790211189"},"price":{"amount":4.49,"currencyCode":"GBP"},"sku":null,"title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"16207780348282","handle":"montezuma-blonde-cinnamon-90g","isCollective":false,"title":"Montezuma's - Blonde Cinnamon - 90g","type":"Chocolate","untranslatedTitle":"Montezuma's - Blonde Cinnamon - 90g","url":"\/products\/montezuma-blonde-cinnamon-90g","vendor":"Montezuma's","remoteShopId":null,"variants":[{"id":"57281606582650","image":{"src":"\/\/sowandarrow.com\/cdn\/shop\/files\/montezumas-blonde-cinnamon-90g-from-montezumas-available-at-sow-arrow-6315176.webp?v=1790211192"},"price":{"amount":4.49,"currencyCode":"GBP"},"sku":null,"title":"Default Title","untranslatedTitle":"Default Title"}]}],"purchasingCompany":null},},"https://sowandarrow.com/cdn","5982071ew7ea472e3p69b68784m2150dfea",{"modern":"","legacy":""},{"trekkieShim":true,"agentContext":true,"apiClientId":"580111","facebookCapiEnabled":"true","themeId":"183195631994","themePublished":"true","eventMetadataId":"3b3bc413-9772-4d0f-ac7e-9d3038c27ce3","pageType":"product","resourceId":"16190750032250","shopId":"75289362745","storefrontBaseUrl":"https:\/\/sowandarrow.com","extensionBaseUrl":"https:\/\/extensions.shopifycdn.com\/cdn\/shopifycloud\/web-pixels-manager","surface":"storefront-renderer","enabledBetaFlags":"[\"4c64608a\", \"16072cab\", \"8450a54b\", \"7ee89bf1\"]","isMerchantRequest":"false","hashVersion":"5982071ew7ea472e3p69b68784m2150dfea","publish":"custom","events":"[[\"page_viewed\",{}],[\"product_viewed\",{\"productVariant\":{\"price\":{\"amount\":1.65,\"currencyCode\":\"GBP\"},\"product\":{\"title\":\"Pure Peanut Crackers - Cracked Black Pepper - 20g\",\"vendor\":\"Uppernut\",\"id\":\"16190750032250\",\"untranslatedTitle\":\"Pure Peanut Crackers - Cracked Black Pepper - 20g\",\"url\":\"\/products\/pure-peanut-crackers-cracked-black-pepper-20g\",\"type\":\"Snacks\"},\"id\":\"57225090072954\",\"image\":{\"src\":\"\/\/sowandarrow.com\/cdn\/shop\/files\/CrackedBlackPepperPeanutCrackers.avif?v=1788431863\"},\"sku\":null,\"title\":\"Default Title\",\"untranslatedTitle\":\"Default Title\"}}]]"});})();</script>
1171<script> 1172 window.ShopifyAnalytics = window.ShopifyAnalytics || {}; 1173 window.ShopifyAnalytics.meta = window.ShopifyAnalytics.meta || {}; 1174 window.ShopifyAnalytics.meta.currency = 'GBP'; 1175 var meta = {"product":{"id":16190750032250,"gid":"gid:\/\/shopify\/Product\/16190750032250","vendor":"Uppernut","type":"Snacks","handle":"pure-peanut-crackers-cracked-black-pepper-20g","variants":[{"id":57225090072954,"price":165,"name":"Pure Peanut Crackers - Cracked Black Pepper - 20g","public_title":null,"sku":null}],"remote":false},"page":{"pageType":"product","resourceType":"product","resourceId":16190750032250,"requestId":"0a923e05-d0fc-4b8d-a2e2-06452336f69c-1791086572"}}; 1176 for (var attr in meta) { 1177 window.ShopifyAnalytics.meta[attr] = meta[attr]; 1178 } 1179</script>
vendor: 1 bytes, line 1179
1179
1180<script class="analytics"> 1181 (function () { 1182 var customDocumentWrite = function(content) { 1183 var jquery = null; 1184 1185 if (window.jQuery) { 1186 jquery = window.jQuery; 1187 } else if (window.Checkout && window.Checkout.$) { 1188 jquery = window.Checkout.$; 1189 } 1190 1191 if (jquery) { 1192 jquery('body').append(content); 1193 } 1194 }; 1195 1196 var hasLoggedConversion = function(token) { 1197 if (token) { 1198 return document.cookie.indexOf('loggedConversion=' + token) !== -1; 1199 } 1200 return false; 1201 } 1202 1203 var setCookieIfConversion = function(token) { 1204 if (token) { 1205 var twoMonthsFromNow = new Date(Date.now()); 1206 twoMonthsFromNow.setMonth(twoMonthsFromNow.getMonth() + 2); 1207 1208 document.cookie = 'loggedConversion=' + token + '; expires=' + twoMonthsFromNow; 1209 } 1210 } 1211 1212 var trekkie = window.ShopifyAnalytics.lib = window.trekkie = window.trekkie || []; 1213 window.ShopifyAnalytics.lib.trekkie = window.trekkie; 1214 if (trekkie.integrations) { 1215 return; 1216 } 1217 trekkie.methods = [ 1218 'identify', 1219 'page', 1220 'ready', 1221 'track', 1222 'trackForm', 1223 'trackLink' 1224 ]; 1225 trekkie.factory = function(method) { 1226 return function() { 1227 var args = Array.prototype.slice.call(arguments); 1228 args.unshift(method); 1229 trekkie.push(args); 1230 if (method == 'track' || method == 'page') { 1231 var pageUrl; 1232 try { 1233 pageUrl = window.location.href; 1234 } catch (e) {} 1235 var pageReferrer; 1236 try { 1237 pageReferrer = document.referrer; 1238 } catch (e) {} 1239 try { 1240 if (window.__TREKKIE_SHIM_QUEUE == null) { 1241 window.__TREKKIE_SHIM_QUEUE = []; 1242 } 1243 window.__TREKKIE_SHIM_QUEUE.push({ 1244 from: 'trekkie-stub', 1245 method: method, 1246 args: args.slice(1), 1247 pageContext: { 1248 url: pageUrl, 1249 referrer: pageReferrer 1250 } 1251 }); 1252 } catch (e) { 1253 // no-op 1254 } 1255 } 1256 return trekkie; 1257 }; 1258 }; 1259 for (var i = 0; i < trekkie.methods.length; i++) { 1260 var key = trekkie.methods[i]; 1261 trekkie[key] = trekkie.factory(key); 1262 } 1263 trekkie.load = function(config) { 1264 trekkie.config = config || {}; 1265 trekkie.config.initialDocumentCookie = document.cookie; 1266 var first = document.getElementsByTagName('script')[0]; 1267var script = document.createElement('script'); 1268script.type = 'text/javascript'; 1269script.onerror = function(e) { 1270 var scriptFallback = document.createElement('script'); 1271 scriptFallback.type = 'text/javascript'; 1272 scriptFallback.onerror = function(error) { 1273 var Monorail = { 1274 produce: function produce(monorailDomain, schemaId, payload) { 1275 var currentMs = new Date().getTime(); 1276 var event = { 1277 schema_id: schemaId, 1278 payload: payload, 1279 metadata: { 1280 event_created_at_ms: currentMs, 1281 event_sent_at_ms: currentMs 1282 } 1283 }; 1284 return Monorail.sendRequest("https://" + monorailDomain + "/v1/produce", JSON.stringify(event)); 1285 }, 1286 sendRequest: function sendRequest(endpointUrl, payload) { 1287 // Try the sendBeacon API 1288 if (window && window.navigator && typeof window.navigator.sendBeacon === 'function' && typeof window.Blob === 'function' && !Monorail.isIos12()) { 1289 var blobData = new window.Blob([payload], { 1290 type: 'text/plain' 1291 }); 1292 1293 if (window.navigator.sendBeacon(endpointUrl, blobData)) { 1294 return true; 1295 } // sendBeacon was not successful 1296 1297 } // XHR beacon 1298 1299 var xhr = new XMLHttpRequest(); 1300 1301 try { 1302 xhr.open('POST', endpointUrl); 1303 xhr.setRequestHeader('Content-Type', 'text/plain'); 1304 xhr.send(payload); 1305 } catch (e) { 1306 console.log(e); 1307 } 1308 1309 return false; 1310 }, 1311 isIos12: function isIos12() { 1312 return window.navigator.userAgent.lastIndexOf('iPhone; CPU iPhone OS 12_') !== -1 || window.navigator.userAgent.lastIndexOf('iPad; CPU OS 12_') !== -1; 1313 } 1314 }; 1315 Monorail.produce('monorail-edge.shopifysvc.com', 1316 'trekkie_storefront_load_errors/1.1', 1317 {shop_id: 75289362745, 1318 theme_id: 183195631994, 1319 app_name: "storefront", 1320 context_url: window.location.href, 1321 source_url: "//sowandarrow.com/cdn/s/trekkie.storefront.2f6d7d7ede7d24234881a9cd5f47e679642fa1f6.min.js"}); 1322 1323 }; 1324 scriptFallback.async = true; 1325 scriptFallback.src = '//sowandarrow.com/cdn/s/trekkie.storefront.2f6d7d7ede7d24234881a9cd5f47e679642fa1f6.min.js'; 1326 first.parentNode.insertBefore(scriptFallback, first); 1327}; 1328script.async = true; 1329script.src = '//sowandarrow.com/cdn/s/trekkie.storefront.2f6d7d7ede7d24234881a9cd5f47e679642fa1f6.min.js'; 1330first.parentNode.insertBefore(script, first); 1331 1332 }; 1333 trekkie.load( 1334 {"Trekkie":{"appName":"storefront","development":false,"defaultAttributes":{"shopId":75289362745,"isMerchantRequest":null,"themeId":183195631994,"themeCityHash":"10284350431010864312","contentLanguage":"en","currency":"GBP","eventMetadataId":"3b3bc413-9772-4d0f-ac7e-9d3038c27ce3"},"isServerSideCookieWritingEnabled":true,"monorailRegion":"shop_domain","enabledBetaFlags":["764d78cb","8450a54b","7ee89bf1","4c64608a"]},"Session Attribution":{},"S2S":{"facebookCapiEnabled":true,"source":"trekkie-storefront-renderer","apiClientId":580111}} 1335 ); 1336 1337 var loaded = false;
1338 trekkie.ready(function() { 1339 if (loaded) return; 1340 loaded = true; 1341 1342 window.ShopifyAnalytics.lib = window.trekkie; 1343 1344 var originalDocumentWrite = document.write; 1345 document.write = customDocumentWrite; 1346 try { window.ShopifyAnalytics.merchantGoogleAnalytics.call(this); } catch(error) {}; 1347 document.write = originalDocumentWrite; 1348 1349 var match = window.location.pathname.match(/checkouts\/(.+)\/(thank_you|post_purchase)/) 1350 var token = match? match[1]: undefined; 1351 if (!hasLoggedConversion(token)) { 1352 setCookieIfConversion(token); 1353 window.ShopifyAnalytics.lib.track("Viewed Product",{"currency":"GBP","variantId":57225090072954,"productId":16190750032250,"productGid":"gid:\/\/shopify\/Product\/16190750032250","name":"Pure Peanut Crackers - Cracked Black Pepper - 20g","price":"1.65","sku":null,"brand":"Uppernut","variant":null,"category":"Snacks","nonInteraction":true,"remote":false,"available":true},undefined,undefined,{"shopifyEmitted":true}); 1354 } 1355 }); 1356 1357 window.ShopifyAnalytics.lib.page(null,{"pageType":"product","resourceType":"product","resourceId":16190750032250,"requestId":"0a923e05-d0fc-4b8d-a2e2-06452336f69c-1791086572","shopifyEmitted":true}); 1358 1359 var eventsListenerScript = document.createElement('script'); 1360 eventsListenerScript.async = true; 1361 eventsListenerScript.src = "//sowandarrow.com/cdn/shopifycloud/storefront/assets/shop_events_listener-4e26a9ce.js"; 1362 document.getElementsByTagName('head')[0].appendChild(eventsListenerScript); 1363})();</script>
vendor: 1 bytes, line 1363
1363
1364<script 1365 defer 1366 src="https://sowandarrow.com/cdn/shopifycloud/perf-kit/shopify-perf-kit-3.9.4.min.js" 1367 data-application="storefront-renderer" 1368 data-shop-id="75289362745" 1369 data-render-region="gcp-us-west1" 1370 data-page-type="product" 1371 data-theme-instance-id="183195631994" 1372 data-theme-name="Stretch" 1373 data-theme-version="1.6.0" 1374 data-monorail-region="shop_domain" 1375 data-resource-timing-sampling-rate="10" 1376 data-shs="true" 1377 data-shs-beacon="true" 1378 data-shs-export-with-fetch="true" 1379 data-shs-logs-sample-rate="1" 1380 data-shs-beacon-endpoint="https://sowandarrow.com/api/collect" 1381></script>
vendor: 1 bytes, line 1381
1381
1382<script id="shopify-chat-page-data" type="application/json">{"greetingMessage":"Welcome to Sow \u0026 Arrow. How can I help?","customerServiceEmail":"[email protected]","onlineStorePasswordProtected":false,"continueAsChip":false,"translations":[{"key":"agent_chat.panel.open_chat","value":"Open chat"},{"key":"agent_chat.panel.ask_anything","value":"Ask anything"},{"key":"agent_chat.panel.title","value":"Storekick"},{"key":"agent_chat.panel.unread_replies","value":"Unread replies"},{"key":"agent_chat.panel.back_to_chat","value":"Back to chat"},{"key":"agent_chat.panel.see_history","value":"See chat history"},{"key":"agent_chat.panel.new_chat","value":"Create a new chat"},{"key":"agent_chat.panel.close","value":"Close chat"},{"key":"agent_chat.panel.undock","value":"Undock chat"},{"key":"agent_chat.panel.dock","value":"Dock chat"},{"key":"agent_chat.panel.expand","value":"Expand chat"},{"key":"agent_chat.panel.contract","value":"Contract chat"},{"key":"agent_chat.panel.jump_to_latest","value":"Jump to latest"},{"key":"agent_chat.panel.loading_chat","value":"Loading chat"},{"key":"agent_chat.input.label","value":"Type your message"},{"key":"agent_chat.input.placeholder","value":"Ask anything..."},{"key":"agent_chat.input.send","value":"Send"},{"key":"agent_chat.input.stop","value":"Stop generating"},{"key":"agent_chat.thinking","value":"Thinking..."},{"key":"agent_chat.first_response_delayed","value":"Agent is taking longer to respondâ¦"},{"key":"agent_chat.searching","value":"Searching..."},{"key":"agent_chat.message.sent_timestamp","value":"Sent · {{time}}"},{"key":"agent_chat.message.automated_label","value":"Automated"},{"key":"agent_chat.message.automated_timestamp","value":"Automated · {{time}}"},{"key":"agent_chat.liveAgentHandoff","value":"Someone from our team will be with you shortly"},{"key":"agent_chat.human_handoff.action","value":"Chat with our team"},{"key":"agent_chat.human_handoff.request","value":"Iâd like to talk to someone from your team"},{"key":"agent_chat.human_handoff.ai_assistant","value":"AI assistant"},{"key":"agent_chat.greeting.default","value":"Hi there!"},{"key":"agent_chat.greeting.with_name","value":"Hi {{name}}!"},{"key":"agent_chat.greeting.welcome","value":"You can ask questions about shopping, sizing\/dimensions, shipping, returns, or order status."},{"key":"agent_chat.greeting.welcome_back","value":"Welcome back to %{shop_name}! How can I help?"},{"key":"agent_chat.greeting.welcome_back_no_shop","value":"Welcome back! How can I help?"},{"key":"agent_chat.greeting.welcome_to_shop","value":"Welcome to %{shop_name}. How can I help?"},{"key":"agent_chat.greeting.generic","value":"How can I help?"},{"key":"agent_chat.disclaimer.text","value":"This chat is powered by AI from Shopify and may make mistakes. Your messages are visible to {{shop_name}}. See"},{"key":"agent_chat.disclaimer.text_human","value":"Your messages are visible to {{shop_name}} and to Shopify for the provision and improvement of the services. See"},{"key":"agent_chat.disclaimer.link_text","value":"privacy policy"},{"key":"agent_chat.error.response_unavailable","value":"Response unavailable"},{"key":"agent_chat.error.generic","value":"Something went wrong."},{"key":"agent_chat.error.response_failed","value":"Couldnât load this message"},{"key":"agent_chat.error.message_send_failed","value":"Your message couldnât be sent"},{"key":"agent_chat.error.attachment_upload_failed","value":"Your attachment didnât upload"},{"key":"agent_chat.error.first_response_stalled","value":"Agent couldnât respond"},{"key":"agent_chat.error.try_again","value":"Try again"},{"key":"agent_chat.error.unavailable","value":"Chat isn't available right now - try again later"},{"key":"agent_chat.error.usage_limit","value":"Message limit reached â try again later or email us at {{email}}"},{"key":"agent_chat.error.usage_limit_no_email","value":"Message limit reached â try again later"},{"key":"agent_chat.error.cost_quota_unhandled","value":"Chat isnât available right nowâemail us at {{email}}"},{"key":"agent_chat.error.cost_quota_unhandled_no_email","value":"Chat isnât available right now"},{"key":"agent_chat.error.cost_quota_handover","value":"AI assistant isnât available right now â our team will reply shortly"},{"key":"agent_chat.history.heading","value":"Chat history"},{"key":"agent_chat.history.loading","value":"Loading conversation history"},{"key":"agent_chat.history.aria_label","value":"Conversation history"},{"key":"agent_chat.history.no_conversations","value":"No conversations"},{"key":"agent_chat.history.conversation.one","value":"conversation"},{"key":"agent_chat.history.conversation.other","value":"conversations"},{"key":"agent_chat.history.error_message","value":"Something went wrong."},{"key":"agent_chat.history.try_again","value":"Try again"},{"key":"agent_chat.history.no_past","value":"No past conversations"},{"key":"agent_chat.history.start_new","value":"Start a new chat"},{"key":"agent_chat.history.untitled","value":"Untitled conversation"},{"key":"agent_chat.history.resume","value":"Resume: {{title}}"},{"key":"agent_chat.history.resume_with_time","value":"Resume: {{title}}, {{time}}"},{"key":"agent_chat.history.delete","value":"Delete conversation: {{title}}"},{"key":"agent_chat.history.delete_failed","value":"Could not delete conversation"},{"key":"agent_chat.feedback.group_label","value":"Message feedback"},{"key":"agent_chat.feedback.thumbs_up","value":"Thumbs up"},{"key":"agent_chat.feedback.thumbs_down","value":"Thumbs down"},{"key":"agent_chat.feedback.add_comment","value":"Add comment"},{"key":"agent_chat.feedback.thanks","value":"Thanks for your feedback"},{"key":"agent_chat.feedback.placeholder_up","value":"Tell us what went well"},{"key":"agent_chat.feedback.placeholder_down","value":"Tell us what could have been better"},{"key":"agent_chat.feedback.comment_label","value":"Feedback comment"},{"key":"agent_chat.feedback.cancel","value":"Cancel"},{"key":"agent_chat.feedback.submit","value":"Submit"},{"key":"agent_chat.feedback.character_count","value":"{{current}}\/{{max}}"},{"key":"agent_chat.feedback.character_limit_reached","value":"Maximum length reached. Feedback is limited to {{max}} characters."},{"key":"agent_chat.buyer_profile.button.open","value":"Buyer Profile"},{"key":"agent_chat.buyer_profile.title","value":"Buyer Profile"},{"key":"agent_chat.buyer_profile.empty","value":"No buyer profile available."},{"key":"agent_chat.buyer_profile.close","value":"Close"},{"key":"agent_chat.suggestions.empty_state_label","value":"Suggested questions"},{"key":"agent_chat.suggestions.quick_reply_label","value":"Suggested replies"},{"key":"agent_chat.auth.sign_in_to_continue","value":"Sign in to continue"},{"key":"agent_chat.auth.sign_in","value":"Sign in"},{"key":"agent_chat.auth.skip_and_chat","value":"Skip and start chatting"},{"key":"agent_chat.auth.pre_chat_title","value":"Sign in to personalize and save your chats"},{"key":"agent_chat.auth.pre_chat_subtitle","value":"Sign in or create an account"},{"key":"agent_chat.auth.staff_chat_required_title","value":"Don't miss a reply"},{"key":"agent_chat.auth.staff_chat_required_subtitle","value":"Sign in to chat with our team. We'll email you if you leave the chat."},{"key":"agent_chat.auth.share_disclaimer","value":"By continuing, Shop will share your name and email with this store. See their {{terms_link}} and {{privacy_link}}"},{"key":"agent_chat.auth.terms_link","value":"terms"},{"key":"agent_chat.auth.privacy_link","value":"privacy policy"},{"key":"agent_chat.auth.declined_pre_chat","value":"I canât connect you with the store unless you sign in."},{"key":"agent_chat.reply_by_email.continuation_prompt","value":"If you leave the chat, weâll email you when thereâs a reply."},{"key":"agent_chat.reply_by_email.sign_in_prompt","value":"Sign in to get emailed when thereâs a reply."},{"key":"agent_chat.order_lookup.track_order","value":"Track my order"},{"key":"agent_chat.order_lookup.track_another_order","value":"Track another order"},{"key":"agent_chat.order_lookup.new_conversation","value":"New conversation"},{"key":"agent_chat.order_lookup.follow_up_label","value":"Order lookup actions"},{"key":"agent_chat.order_lookup.enter_order_information","value":"Enter order information"},{"key":"agent_chat.order_lookup.prompt","value":"To see your order status, please provide your order details."},{"key":"agent_chat.order_lookup.form_title","value":"Track my order"},{"key":"agent_chat.order_lookup.form_subtitle","value":"Please provide your information."},{"key":"agent_chat.order_lookup.order_number_label","value":"Order number"},{"key":"agent_chat.order_lookup.email_label","value":"Email address"},{"key":"agent_chat.order_lookup.submit","value":"Track my order"},{"key":"agent_chat.order_lookup.cancel","value":"Cancel"},{"key":"agent_chat.order_lookup.invalid_order_number","value":"Please enter a valid order number with only numbers and letters, no spaces (e.g. 1006)."},{"key":"agent_chat.order_lookup.invalid_order_number_whitespace","value":"Please enter a valid order number with only numbers and letters, no spaces (e.g. 1006)."},{"key":"agent_chat.order_lookup.invalid_email","value":"Please enter a valid email address"},{"key":"agent_chat.order_lookup.generic_error","value":"There was a problem looking up your order. Please try again."},{"key":"agent_chat.order_lookup.rate_limited_error","value":"Too many attempts. Try again later."},{"key":"agent_chat.order_lookup.locked_composer_status","value":"Order lookup is in progress. Start a new conversation to ask something else."},{"key":"agent_chat.legacy_contact.form_title","value":"Before we get started"},{"key":"agent_chat.legacy_contact.form_subtitle","value":"Please provide your information so we can reply to you if you leave the chat."},{"key":"agent_chat.legacy_contact.first_name_label","value":"First name"},{"key":"agent_chat.legacy_contact.last_name_label","value":"Last name"},{"key":"agent_chat.legacy_contact.email_label","value":"Email"},{"key":"agent_chat.legacy_contact.marketing_opt_in","value":"Email me with news and offers"},{"key":"agent_chat.legacy_contact.submit","value":"Start chat"},{"key":"agent_chat.legacy_contact.cancel","value":"Cancel"}
1382,{"key":"agent_chat.legacy_contact.invalid_first_name","value":"Enter a valid first name."},{"key":"agent_chat.legacy_contact.invalid_last_name","value":"Enter a valid last name."},{"key":"agent_chat.legacy_contact.invalid_email","value":"Enter a valid email address."},{"key":"agent_chat.legacy_contact.invalid_email_length","value":"Email address is too long."},{"key":"agent_chat.legacy_contact.generic_error","value":"Something went wrong."},{"key":"agent_chat.legacy_contact.rate_limited_error","value":"Too many attempts. Try again later."},{"key":"agent_chat.discountCard.useDiscount","value":"Use discount"},{"key":"agent_chat.discountCard.discountApplicationContext","value":"Applies automatically at checkout"},{"key":"agent_chat.cart.checkout","value":"Checkout"},{"key":"agent_chat.product.add_to_cart","value":"Add to cart"},{"key":"agent_chat.product.view_details","value":"View details"},{"key":"agent_chat.product.out_of_stock","value":"Out of stock"},{"key":"agent_chat.product.compare_suggestions","value":"Compare suggestions"},{"key":"agent_chat.product.hide_suggestions","value":"Hide suggestions"},{"key":"agent_chat.product.sold_out","value":"Sold out"},{"key":"agent_chat.order.item.one","value":"item"},{"key":"agent_chat.order.item.other","value":"items"},{"key":"agent_chat.order.less_items.one","value":"- hide {{count}} item"},{"key":"agent_chat.order.less_items.other","value":"- hide {{count}} items"},{"key":"agent_chat.order.more_items.one","value":"+ {{count}} more item"},{"key":"agent_chat.order.more_items.other","value":"+ {{count}} more items"},{"key":"agent_chat.order.view_order","value":"View order {{orderId}}"},{"key":"agent_chat.order.track_shipment","value":"Track shipment"},{"key":"agent_chat.order.of_total","value":"{{index}} of {{total}}"},{"key":"agent_chat.order.label","value":"Order {{number}}"},{"key":"agent_chat.order.count.one","value":"{{count}} Order"},{"key":"agent_chat.order.count.other","value":"{{count}} Orders"},{"key":"agent_chat.order.ordered_on","value":"Ordered {{date}}"},{"key":"agent_chat.order.select","value":"Select order {{number}}"},{"key":"agent_chat.return.heading","value":"Select items to return"},{"key":"agent_chat.return.toggle_item","value":"Select {{name}}"},{"key":"agent_chat.return.select_item_non_returnable","value":"{{name}}, not returnable"},{"key":"agent_chat.return.quantity_label","value":"Return quantity"},{"key":"agent_chat.return.reason_label","value":"Reason for return"},{"key":"agent_chat.return.reason_placeholder","value":"Select a reason"},{"key":"agent_chat.return.confirm","value":"Request return"},{"key":"agent_chat.return.confirmed","value":"Return requested"},{"key":"agent_chat.return.reason.size_too_small","value":"Size too small"},{"key":"agent_chat.return.reason.size_too_large","value":"Size too large"},{"key":"agent_chat.return.reason.unwanted","value":"Unwanted"},{"key":"agent_chat.return.reason.not_as_described","value":"Not as described"},{"key":"agent_chat.return.reason.wrong_item","value":"Wrong item"},{"key":"agent_chat.return.reason.defective","value":"Defective"},{"key":"agent_chat.return.reason.style","value":"Style"},{"key":"agent_chat.return.reason.color","value":"Color"},{"key":"agent_chat.return.reason.other_reason","value":"Other"},{"key":"agent_chat.scroll.previous","value":"Previous"},{"key":"agent_chat.scroll.next","value":"Next"}]}</script>
vendor: 1 bytes, line 1382
1382
1383<script id="shopify-customer-account-data" type="application/json">{"customer":null,"shop":{"id":"75289362745","customerAccountTranslations":[{"key":"account_menu.signed_out_state.sheet_title","value":"Sign in or create account"},{"key":"account_menu.signed_out_state.section_divider","value":"More ways to sign in"},{"key":"account_menu.signed_out_state.alternate_divider","value":"OR"},{"key":"account_menu.signed_out_state.email_field_label","value":"Email"},{"key":"account_menu.signed_out_state.orders_button","value":"Orders"},{"key":"account_menu.signed_out_state.profile_button","value":"Profile"},{"key":"account_menu.signed_out_state.shop_login_button","value":"Sign in with Shop"},{"key":"account_menu.signed_out_state.continue_with_google","value":"Continue with Google"},{"key":"account_menu.signed_out_state.continue_with_facebook","value":"Continue with Facebook"},{"key":"account_menu.signed_out_state.marketing_consent_label","value":"Email me with news and offers"},{"key":"account_menu.signed_in_state.greeting_with_name","value":"Hi, {{first_name}}"},{"key":"account_menu.signed_in_state.greeting_without_name","value":"Account"},{"key":"account_menu.signed_in_state.orders_button","value":"Orders"},{"key":"account_menu.signed_in_state.profile_button","value":"Profile"},{"key":"account_menu.location_picker.sheet_title","value":"Locations"},{"key":"account_menu.location_picker.search_field_placeholder","value":"Search"},{"key":"account_menu.aria_labels.close_menu","value":"Close menu"},{"key":"account_menu.aria_labels.back_to_main_menu","value":"Back to main menu from {{title}}"},{"key":"account_menu.aria_labels.open_submenu","value":"{{title}}, opens submenu"},{"key":"account_menu.aria_labels.loading_menu","value":"Loading menu"},{"key":"account_menu.aria_labels.account","value":"Account"},{"key":"account_menu.aria_labels.sign_in_with_email","value":"Sign in with email"},{"key":"account_menu.aria_labels.sign_in","value":"Sign in"}],"socialLoginProviders":[{"handle":"Shop"}],"legacyCustomerAccounts":true,"signInLinksVisible":true,"b2bEnabled":false,"marketingConsentSigninEnabled":false},"visitor":{"country":"GB","language":"en"}}</script>
1383 1384<meta name="shopify-y" content="4e074c64-9ea9-4db6-8ae4-7ce754ef90f4" data-expiration="1822644172000"><meta name="shopify-s" content="3a1b0e2a-aa85-4075-aacb-02d4ca2fccc1" data-expiration="1791088372000"><meta name="new-cookie-storage-activated" content="t"> 1385</head> 1386 1387 1388 1389 <body class="features--zoom-image "> 1390 1391<template id="drawer-default-template"> 1392 <div part="base"> 1393 <div part="overlay"></div> 1394 1395 <div part="content"> 1396 <header part="header"> 1397 <dialog-close-button style="display: contents"> 1398 <button type="button" part="close-button"> 1399 <span class="sr-only" part="sr-only">Close</span><svg 1400 aria-hidden="true" 1401 focusable="false" 1402 width="10" 1403 class="icon icon-close" 1404 1405 part="icon" 1406 fill="none" 1407 viewBox="0 0 10 10" 1408 > 1409 <path stroke="currentColor" d="m1 1 8 8m0-8L1 9" /> 1410 </svg></button> 1411 </dialog-close-button> 1412 1413 <slot name="header"></slot> 1414 </header> 1415 1416 <div part="body"> 1417 <slot></slot> 1418 </div> 1419 1420 <footer part="footer"> 1421 <slot name="footer"></slot> 1422 </footer> 1423 </div> 1424 </div> 1425</template><template id="drawer-popover-default-template"> 1426 <div part="base"> 1427 <div part="overlay"></div> 1428 1429 <div part="content"> 1430 <header part="header"> 1431 <dialog-close-button style="display: contents"> 1432 <button type="button" part="close-button"> 1433 <span class="sr-only" part="sr-only">Close</span><svg 1434 aria-hidden="true" 1435 focusable="false" 1436 width="10" 1437 class="icon icon-close" 1438 1439 part="icon" 1440 fill="none"
1441 viewBox="0 0 10 10" 1442 > 1443 <path stroke="currentColor" d="m1 1 8 8m0-8L1 9" /> 1444 </svg></button> 1445 </dialog-close-button> 1446 1447 <slot name="header"></slot> 1448 </header> 1449 1450 <div part="body"> 1451 <slot></slot> 1452 </div> 1453 </div> 1454 </div> 1455</template><template id="modal-default-template"> 1456 <div part="base"> 1457 <div part="overlay"></div> 1458 1459 <div part="content"> 1460 <slot name="image"></slot> 1461 1462 <div part="body"> 1463 <dialog-close-button style="display: contents"> 1464 <button type="button" part="close-button"> 1465 <span class="sr-only" part="sr-only">Close</span><svg 1466 aria-hidden="true" 1467 focusable="false" 1468 width="10" 1469 class="icon icon-close" 1470 1471 part="icon" 1472 fill="none" 1473 viewBox="0 0 10 10" 1474 > 1475 <path stroke="currentColor" d="m1 1 8 8m0-8L1 9" /> 1476 </svg></button> 1477 </dialog-close-button> 1478 1479 <slot></slot> 1480 </div> 1481 </div> 1482 </div> 1483</template><template id="popover-default-template"> 1484 <div part="base"> 1485 <div part="overlay"></div> 1486 1487 <div part="content"> 1488 <header part="header"> 1489 <slot name="header"></slot> 1490 1491 <dialog-close-button style="display: contents"> 1492 <button type="button" part="close-button"> 1493 <span class="sr-only" part="sr-only">Close</span><svg 1494 aria-hidden="true" 1495 focusable="false" 1496 width="10" 1497 class="icon icon-close" 1498 1499 part="icon" 1500 fill="none"
1501 viewBox="0 0 10 10" 1502 > 1503 <path stroke="currentColor" d="m1 1 8 8m0-8L1 9" /> 1504 </svg></button> 1505 </dialog-close-button> 1506 </header> 1507 1508 <div part="body"> 1509 <slot></slot> 1510 </div> 1511 </div> 1512 </div> 1513</template><template id="simple-popover-default-template"> 1514 <div part="base"> 1515 <div part="overlay"></div> 1516 1517 <div part="content"> 1518 <dialog-close-button style="display: contents"> 1519 <button type="button" part="close-button overlaid-close-button"> 1520 <span class="sr-only" part="sr-only">Close</span><svg 1521 aria-hidden="true" 1522 focusable="false" 1523 width="10" 1524 class="icon icon-close" 1525 1526 part="icon" 1527 fill="none" 1528 viewBox="0 0 10 10" 1529 > 1530 <path stroke="currentColor" d="m1 1 8 8m0-8L1 9" /> 1531 </svg></button> 1532 </dialog-close-button> 1533 1534 <div part="body"> 1535 <slot></slot> 1536 </div> 1537 </div> 1538 </div> 1539</template><template id="video-media-default-template"> 1540 <slot></slot> 1541 1542 <div part="play-button"><svg 1543 aria-hidden="true" 1544 focusable="false" 1545 width="12" 1546 class="icon icon-play-triangle" 1547 1548 part="icon" 1549 fill="none"
1550 viewBox="0 0 12 17" 1551 > 1552 <path fill="#ffffff" d="M1.783 15.889A1 1 0 0 1 .2 15.076V1.148A1 1 0 0 1 1.783.335l9.71 6.964a1 1 0 0 1 0 1.626l-9.71 6.964Z"/> 1553 </svg></div> 1554</template><loading-bar class="loading-bar" aria-hidden="true"></loading-bar> 1555 1556 <a href="#main" allow-hash-change class="skip-to-content sr-only">Skip to content</a> 1557 1558 <span id="header-scroll-tracker" style="position: absolute; width: 1px; height: 1px; top: 200px; left: 0;"></span><!-- BEGIN sections: header-group --> 1559<header id="shopify-section-sections--25965682524538__header" class="shopify-section shopify-section-group-header-group shopify-section--header"><style> 1560 :root { 1561 --header-is-sticky: 1; 1562 } 1563 1564 #shopify-section-sections--25965682524538__header {--header-grid: "primary-nav logo secondary-nav" / minmax(0, 1fr) auto minmax(0, 1fr);--header-transparent-header-text-color: 255 255 255; 1565 --header-non-transparent-text-color: 50 30 30; 1566 } 1567 1568 @media screen and (min-width: 1000px) { 1569 #shopify-section-sections--25965682524538__header {--header-grid: "logo primary-nav secondary-nav" / auto minmax(0, 1fr) auto;} 1570 }#shopify-section-sections--25965682524538__header { 1571 position: sticky; 1572 top: 0; 1573 } 1574 1575 .shopify-section--announcement-bar ~ #shopify-section-sections--25965682524538__header { 1576 top: calc(var(--announcement-bar-is-sticky, 0) * var(--announcement-bar-height, 0px)); 1577 }</style> 1578 1579<height-observer variable="header"> 1580 <x-header 1581 class="header color-scheme color-scheme--scheme-1" 1582 1583 > 1584 <a href="/" class="header__logo"><p class="header__logo-text heading">Sow & Arrow</p></a> 1585 1586<nav 1587 class="header__primary-nav " 1588 aria-label="Primary navigation" 1589 > 1590 <button 1591 type="button" 1592 aria-controls="menu-drawer" 1593 class="tap-area md:hidden" 1594 > 1595 <span class="sr-only">Menu</span> 1596 1597 <div class="h-stack gap-3" aria-hidden="true"> 1598 <div class="header__hamburger"> 1599 <span></span> 1600 <span></span> 1601 </div> 1602 1603 <span class="subheading md-max:hidden">Menu</span> 1604 </div> 1605 </button><a 1606 href="/search" 1607 class="header__search-link tap-area md:hidden" 1608 aria-controls="search-drawer" 1609 > 1610 <span class="sr-only">Search</span><svg 1611 aria-hidden="true" 1612 focusable="false" 1613 width="16" 1614 fill="none" 1615 class="icon icon-search" 1616 1617 part="icon"
1618 viewBox="0 0 16 16" 1619 > 1620 <path stroke-width="1" stroke="currentColor" d="M1.333 7.333a6 6 0 1 0 12 0 6 6 0 0 0-12 0ZM11.575 11.576l3.09 3.09" /> 1621 </svg></a><ul class="contents unstyled-list md-max:hidden"> 1622 1623 <li><a 1624 href="/" 1625 class="block subheading link-reversed" 1626 1627 1628 >Home</a></li> 1629 1630 <li><a 1631 href="/collections/new" 1632 class="block subheading link-reversed" 1633 1634 1635 >New</a></li> 1636 1637 <li><a 1638 href="/collections/shop" 1639 class="block subheading link-reversed" 1640 1641 1642 >Shop</a></li> 1643 1644 <li><a 1645 href="/collections/shop" 1646 class="block subheading link-reversed" 1647 1648 1649 aria-expanded="false" aria-controls="header-menu-dropdown-4" 1650 data-open-on-hover 1651 >Discover</a><header-dropdown-menu 1652 class="header__dropdown-menu color-scheme color-scheme--scheme-1" 1653 id="header-menu-dropdown-4" 1654 > 1655 <ul class="unstyled-list"><li> 1656 <a 1657 href="/collections/shop" 1658 class="subheading link-faded-reverse" 1659 1660 1661 >All Products</a></li><li> 1662 <a 1663 href="/collections/new" 1664 class="subheading link-faded-reverse" 1665 1666 1667 >New Arrivals</a></li><li> 1668 <a 1669 href="/collections/best-sellers" 1670 class="subheading link-faded-reverse" 1671 1672 1673 >Best Sellers</a></li><li> 1674 <a 1675 href="/collections/supplements" 1676 class="subheading link-faded-reverse" 1677 1678 1679 >Supplements</a></li><li> 1680 <a 1681 href="/collections/essentials" 1682 class="subheading link-faded-reverse" 1683 1684 1685 >Store Cupboard Essentials</a></li><li> 1686 <a 1687 href="/collections/personal-care" 1688 class="subheading link-faded-reverse" 1689 1690 1691 >Personal Care</a></li><li> 1692 <a 1693 href="/collections/bakery" 1694 class="subheading link-faded-reverse" 1695 1696 1697 >Low-Carb Bakery</a></li></ul> 1698 </header-dropdown-menu></li> 1699 1700 <li><a 1701 href="/collections/offers" 1702 class="block subheading link-reversed" 1703 1704 1705 >Offers</a></li> 1706 1707 <li><a 1708 href="/blogs/health" 1709 class="block subheading link-reversed" 1710 1711 1712 >Blogs</a></li></ul></nav><nav class="header__secondary-nav" aria-label="Secondary navigation"> 1713 <ul class="contents unstyled-list"><li class="hidden md:contents"> 1714 <div class="h-stack justify-between"><div class="h-stack gap-5"><div class="relative"> 1715 <button type="button" class="h-stack gap-2" aria-controls="popover-localization-secondary-nav-sections--25965682524538__header-country" aria-label="Change country or currency" aria-expanded="false"><img src="//cdn.shopify.com/static/images/flags/gb.svg?format=jpg&width=60" alt="United Kingdom" srcset="//cdn.shopify.com/static/images/flags/gb.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span class="subheading subheading-xs"> 1716 GBP £</span><svg 1717 aria-hidden="true" 1718 focusable="false" 1719 width="10" 1720 class="icon icon-chevron-down" 1721 1722 part="icon"
1723 viewBox="0 0 10 9" 1724 > 1725 <path fill="none" stroke="currentColor" stroke-width="1.5" d="m1 2.5 4 4 4-4" /> 1726 </svg></button> 1727 1728 <x-popover id="popover-localization-secondary-nav-sections--25965682524538__header-country" class="popover color-scheme color-scheme--scheme-1" preferred-alignment="start" > 1729 <p slot="header" class="subheading">Country</p><form method="post" action="/localization" id="localization-form-secondary-nav-sections--25965682524538__header-country" accept-charset="UTF-8" class="shopify-localization-form" enctype="multipart/form-data"><input type="hidden" name="form_type" value="localization" /><input type="hidden" name="utf8" value="â" /><input type="hidden" name="_method" value="put" /><input type="hidden" name="return_to" value="/products/pure-peanut-crackers-cracked-black-pepper-20g" /><div class="popover__value-list"><button type="submit" name="country_code" class="popover__value-option subheading link-faded-reverse" role="option" value="GG" aria-selected="false"><img src="//cdn.shopify.com/static/images/flags/gg.svg?format=jpg&width=60" alt="Guernsey" srcset="//cdn.shopify.com/static/images/flags/gg.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Guernsey (GBP £)</span> 1730 </button><button type="submit" name="country_code" class="popover__value-option subheading link-faded-reverse" role="option" value="JE" aria-selected="false"><img src="//cdn.shopify.com/static/images/flags/je.svg?format=jpg&width=60" alt="Jersey" srcset="//cdn.shopify.com/static/images/flags/je.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Jersey (GBP £)</span> 1731 </button><button type="submit" name="country_code" class="popover__value-option subheading link-faded-reverse" role="option" value="GB" aria-selected="true"><img src="//cdn.shopify.com/static/images/flags/gb.svg?format=jpg&width=60" alt="United Kingdom" srcset="//cdn.shopify.com/static/images/flags/gb.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>United Kingdom (GBP £)</span> 1732 </button></div></form></x-popover> 1733 </div></div></div> 1734 1735 <hr class="header__secondary-nav-separator"> 1736 </li><li class="header__account-link md-max:hidden"> 1737 <a href="/account" class="tap-area"> 1738 <span class="sr-only">Login</span><svg 1739 aria-hidden="true" 1740 focusable="false" 1741 width="16" 1742 fill="none" 1743 class="icon icon-account" 1744 1745 part="icon"
1746 viewBox="0 0 16 16" 1747 > 1748 <path stroke-width="1" stroke="currentColor" d="M15.418 15A8.003 8.003 0 0 0 .581 15" /> 1749 <circle stroke-width="1" cx="8" cy="4.5" r="3" stroke="currentColor" /> 1750 </svg></a> 1751 </li><li class="header__news-link" hidden> 1752 <news-modal-button class="contents"> 1753 <button class="tap-area" aria-controls="news-modal" aria-expanded="false"> 1754 <span class="sr-only">News modal</span><svg 1755 aria-hidden="true" 1756 focusable="false" 1757 width="16" 1758 fill="none" 1759 class="icon icon-bell" 1760 1761 part="icon" 1762 viewBox="0 0 16 16" 1763 > 1764 <path stroke-width="1" stroke="currentColor" d="M3.333 7v3.333L2 12.5h12l-1.333-2.167V7A4.665 4.665 0 0 0 4.7 3.7 4.667 4.667 0 0 0 3.333 7ZM6.5 15.5h3" /> 1765 </svg></button> 1766 </news-modal-button> 1767 </li> 1768 1769 <li class="header__search-link md-max:hidden"> 1770 <a href="/search" class="tap-area" aria-controls="search-drawer"> 1771 <span class="sr-only">Search</span><svg 1772 aria-hidden="true" 1773 focusable="false" 1774 width="16" 1775 fill="none" 1776 class="icon icon-search" 1777 1778 part="icon"
1779 viewBox="0 0 16 16" 1780 > 1781 <path stroke-width="1" stroke="currentColor" d="M1.333 7.333a6 6 0 1 0 12 0 6 6 0 0 0-12 0ZM11.575 11.576l3.09 3.09" /> 1782 </svg></a> 1783 </li> 1784 <li class="header__search-link"> 1785 <a 1786 href="/pages/wishlist" 1787 class="tap-area" 1788 > 1789 <span class="sr-only">Open wishlist</span><svg width="16" class="icon icon-heart" fill="none" viewBox="0 0 16 16"> 1790 <path stroke="currentColor" stroke-width="1" d="M7.105 3.105 8 4l.895-.895a3.771 3.771 0 1 1 5.334 5.333l-6.23 6.229-6.228-6.23a3.771 3.771 0 0 1 5.334-5.332Z"/> 1791 </svg></a> 1792 </li> 1793 <li class="header__cart-link relative"> 1794 <a 1795 href="/cart" 1796 class="tap-area" 1797 1798 aria-controls="cart-drawer" 1799 1800 data-no-instant 1801 > 1802 <span class="sr-only">Cart</span><svg 1803 aria-hidden="true" 1804 focusable="false" 1805 width="16" 1806 fill="none" 1807 class="icon icon-cart" 1808 1809 part="icon"
1810 viewBox="0 0 16 16" 1811 > 1812 <path stroke-width="1" stroke="currentColor" d="m1.5 14.5 1-12h11l1 12h-13Z"/> 1813 <path stroke-width="1" stroke="currentColor" d="M5.5 5c.238.833 1.071 2.5 2.5 2.5s2.262-1.667 2.5-2.5"/> 1814 </svg></a> 1815 1816 <cart-count 1817 class="header__active-dot"hidden 1818 1819 > 1820 <span class="sr-only">0 items</span> 1821 </cart-count> 1822 </li></ul> 1823 </nav><header-menu-drawer id="menu-drawer" class="menu-drawer color-scheme color-scheme--scheme-1"> 1824 <template> 1825 <div part="overlay"></div> 1826 1827 <div part="content"> 1828 <slot></slot> 1829 </div> 1830 </template><header-menu-drawer-panel id="menu-drawer-panel-main" data-main-panel class="menu-drawer__panel"> 1831 <div class="menu-drawer__panel-body"><ul class="v-stack gap-3 faded-linklist unstyled-list"><li><a href="/" class="h4 w-full">Home</a></li><li><a href="/collections/new" class="h4 w-full">New</a></li><li><a href="/collections/shop" class="h4 w-full">Shop</a></li><li><button type="button" class="h4 text-start w-full" data-panel-toggle aria-controls="menu-drawer-panel-4"> 1832 <div class="h-stack gap-3 sm:gap-5">Discover<svg 1833 aria-hidden="true" 1834 focusable="false" 1835 width="36" 1836 class="shrink-0 capped-icon icon icon-big-arrow-right" 1837 1838 part="icon"
1839 viewBox="0 0 36 36" 1840 > 1841 <path fill="none" stroke="currentColor" stroke-width="2" d="M1 18h32M16.5 1.5 33 18 16.5 34.5"/> 1842 </svg></div> 1843 </button></li><li><a href="/collections/offers" class="h4 w-full">Offers</a></li><li><a href="/blogs/health" class="h4 w-full">Blogs</a></li></ul><hr class="menu-drawer__separator"><ul class="v-stack gap-3 unstyled-list"><li> 1844 <a href="https://sowandarrow.com/account" class="subheading link-reversed">Your Account</a> 1845 </li><li> 1846 <a href="/pages/climate-commitment" class="subheading link-reversed">Our Impact</a> 1847 </li><li> 1848 <a href="/pages/contact" class="subheading link-reversed">Contact Us</a> 1849 </li></ul></div><div class="menu-drawer__panel-footer"><div class="menu-drawer__footer-item"><ul class="social-media unstyled-list" role="list"><li class="social-media__item branding-colors--facebook"> 1850 <a href="https://www.facebook.com/sowandarrow/" class="tap-area" target="_blank" rel="noopener" aria-label="Follow on Facebook"><svg 1851 aria-hidden="true" 1852 focusable="false" 1853 width="24" 1854 class="icon icon-facebook" 1855
1856 viewBox="0 0 24 24" 1857 > 1858 <path fill="currentColor" fill-rule="evenodd" d="M2 12c0 4.95 3.6 9.05 8.35 9.9l.059-.048-.009-.002V14.8H7.9V12h2.5V9.8c0-2.5 1.6-3.9 3.9-3.9.7 0 1.5.1 2.2.2v2.55h-1.3c-1.2 0-1.5.6-1.5 1.4V12h2.65l-.45 2.8h-2.2v7.05l-.09.016.04.034C18.4 21.05 22 16.95 22 12c0-5.5-4.5-10-10-10S2 6.5 2 12Z" clip-rule="evenodd"/> 1859 </svg></a> 1860 </li><li class="social-media__item branding-colors--instagram"> 1861 <a href="https://www.instagram.com/sowandarrow/?hl=en" class="tap-area" target="_blank" rel="noopener" aria-label="Follow on Instagram"><svg 1862 aria-hidden="true" 1863 focusable="false" 1864 width="24" 1865 class="icon icon-instagram" 1866 1867 viewBox="0 0 24 24" 1868 > 1869 <path fill-rule="evenodd" clip-rule="evenodd" d="M12 2.4c-2.607 0-2.934.011-3.958.058-1.022.046-1.72.209-2.33.446a4.705 4.705 0 0 0-1.7 1.107 4.706 4.706 0 0 0-1.108 1.7c-.237.611-.4 1.31-.446 2.331C2.41 9.066 2.4 9.392 2.4 12c0 2.607.011 2.934.058 3.958.046 1.022.209 1.72.446 2.33a4.706 4.706 0 0 0 1.107 1.7c.534.535 1.07.863 1.7 1.108.611.237 1.309.4 2.33.446 1.025.047 1.352.058 3.959.058s2.934-.011 3.958-.058c1.022-.046 1.72-.209 2.33-.446a4.706 4.706 0 0 0 1.7-1.107 4.706 4.706 0 0 0 1.108-1.7c.237-.611.4-1.31.446-2.33.047-1.025.058-1.352.058-3.959s-.011-2.934-.058-3.958c-.047-1.022-.209-1.72-.446-2.33a4.706 4.706 0 0 0-1.107-1.7 4.705 4.705 0 0 0-1.7-1.108c-.611-.237-1.31-.4-2.331-.446C14.934 2.41 14.608 2.4 12 2.4Zm0 1.73c2.563 0 2.867.01 3.88.056.935.042 1.443.199 1.782.33.448.174.768.382 1.104.718.336.336.544.656.718 1.104.131.338.287.847.33 1.783.046 1.012.056 1.316.056 3.879 0 2.563-.01 2.867-.056 3.88-.043.935-.199 1.444-.33 1.782a2.974 2.974 0 0 1-.719 1.104 2.974 2.974 0 0 1-1.103.718c-.339.131-.847.288-1.783.33-1.012.046-1.316.056-3.88.056-2.563 0-2.866-.01-3.878-.056-.936-.042-1.445-.199-1.783-.33a2.974 2.974 0 0 1-1.104-.718 2.974 2.974 0 0 1-.718-1.104c-.131-.338-.288-.847-.33-1.783-.047-1.012-.056-1.316-.056-3.879 0-2.563.01-2.867.056-3.88.042-.935.199-1.443.33-1.782.174-.448.382-.768.718-1.104a2.974 2.974 0 0 1 1.104-.718c.338-.131.847-.288 1.783-.33C9.133 4.14 9.437 4.13 12 4.13Zm0 11.07a3.2 3.2 0 1 1 0-6.4 3.2 3.2 0 0 1 0 6.4Zm0-8.13a4.93 4.93 0 1 0 0 9.86 4.93 4.93 0 0 0 0-9.86Zm6.276-.194a1.152 1.152 0 1 1-2.304 0 1.152 1.152 0 0 1 2.304 0Z" fill="currentColor"/> 1870 </svg></a> 1871 </li></ul></div><div class="menu-drawer__footer-item lg:hidden"> 1872 <div class="h-stack justify-between"><div class="h-stack gap-5"><div class="relative"> 1873 <button type="button" class="h-stack gap-2" aria-controls="popover-localization-menu-drawer-sections--25965682524538__header-country" aria-label="Change country or currency" aria-expanded="false"><img src="//cdn.shopify.com/static/images/flags/gb.svg?format=jpg&width=60" alt="United Kingdom" srcset="//cdn.shopify.com/static/images/flags/gb.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span class="subheading"> 1874 GBP £</span><svg 1875 aria-hidden="true" 1876 focusable="false" 1877 width="10" 1878 class="icon icon-chevron-down" 1879 1880 part="icon"
1881 viewBox="0 0 10 9" 1882 > 1883 <path fill="none" stroke="currentColor" stroke-width="1.5" d="m1 2.5 4 4 4-4" /> 1884 </svg></button> 1885 1886 <x-popover id="popover-localization-menu-drawer-sections--25965682524538__header-country" class="popover color-scheme color-scheme--scheme-1" preferred-position="above"> 1887 <p slot="header" class="subheading">Country</p><form method="post" action="/localization" id="localization-form-menu-drawer-sections--25965682524538__header-country" accept-charset="UTF-8" class="shopify-localization-form" enctype="multipart/form-data"><input type="hidden" name="form_type" value="localization" /><input type="hidden" name="utf8" value="â" /><input type="hidden" name="_method" value="put" /><input type="hidden" name="return_to" value="/products/pure-peanut-crackers-cracked-black-pepper-20g" /><div class="popover__value-list"><button type="submit" name="country_code" class="popover__value-option subheading link-faded-reverse" role="option" value="GG" aria-selected="false"><img src="//cdn.shopify.com/static/images/flags/gg.svg?format=jpg&width=60" alt="Guernsey" srcset="//cdn.shopify.com/static/images/flags/gg.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Guernsey (GBP £)</span> 1888 </button><button type="submit" name="country_code" class="popover__value-option subheading link-faded-reverse" role="option" value="JE" aria-selected="false"><img src="//cdn.shopify.com/static/images/flags/je.svg?format=jpg&width=60" alt="Jersey" srcset="//cdn.shopify.com/static/images/flags/je.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Jersey (GBP £)</span> 1889 </button><button type="submit" name="country_code" class="popover__value-option subheading link-faded-reverse" role="option" value="GB" aria-selected="true"><img src="//cdn.shopify.com/static/images/flags/gb.svg?format=jpg&width=60" alt="United Kingdom" srcset="//cdn.shopify.com/static/images/flags/gb.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>United Kingdom (GBP £)</span> 1890 </button></div></form></x-popover> 1891 </div></div><a href="/account" class="h-stack gap-2.5"><svg 1892 aria-hidden="true" 1893 focusable="false" 1894 width="16" 1895 fill="none" 1896 class="icon icon-account" 1897 1898 part="icon"
1899 viewBox="0 0 16 16" 1900 > 1901 <path stroke-width="1" stroke="currentColor" d="M15.418 15A8.003 8.003 0 0 0 .581 15" /> 1902 <circle stroke-width="1" cx="8" cy="4.5" r="3" stroke="currentColor" /> 1903 </svg><span class="subheading">Account</span> 1904 </a></div> 1905 </div></div></header-menu-drawer-panel><header-menu-drawer-panel id="menu-drawer-panel-4" class="menu-drawer__panel color-scheme color-scheme--scheme-1"> 1906 <div class="menu-drawer__panel-body"> 1907 <div class="v-stack gap-5.5"> 1908 <button type="button" class="back-button justify-self-start" data-panel-toggle aria-controls="menu-drawer-panel-main"><svg 1909 aria-hidden="true" 1910 focusable="false" 1911 width="10" 1912 class="icon icon-back-arrow icon--direction-aware" 1913 1914 part="icon" 1915 fill="none" 1916 viewBox="0 0 10 11" 1917 > 1918 <path stroke="currentColor" d="M5.5 1 1 5.5m0 0L5.5 10M1 5.5h9" /> 1919 </svg><span class="subheading">Back</span> 1920 </button> 1921 1922 <div class="v-stack gap-8"><ul class="v-stack gap-2.5 unstyled-list"><li> 1923 <a href="/collections/shop" class="link-reversed">All Products</a> 1924 </li><li> 1925 <a href="/collections/new" class="link-reversed">New Arrivals</a> 1926 </li><li> 1927 <a href="/collections/best-sellers" class="link-reversed">Best Sellers</a> 1928 </li><li> 1929 <a href="/collections/supplements" class="link-reversed">Supplements</a> 1930 </li><li> 1931 <a href="/collections/essentials" class="link-reversed">Store Cupboard Essentials</a> 1932 </li><li> 1933 <a href="/collections/personal-care" class="link-reversed">Personal Care</a> 1934 </li><li> 1935 <a href="/collections/bakery" class="link-reversed">Low-Carb Bakery</a> 1936 </li></ul></div> 1937 </div> 1938 </div> 1939 </header-menu-drawer-panel></header-menu-drawer></x-header> 1940</height-observer> 1941
1942<script> 1943 document.documentElement.style.setProperty('--header-height', `${Math.round(document.getElementById('shopify-section-sections--25965682524538__header').clientHeight)}px`); 1944</script>
1944 1945 1946 1947</header> 1948<!-- END sections: header-group --><!-- BEGIN sections: overlay-group --> 1949<section id="shopify-section-sections--25965682557306__cart-drawer" class="shopify-section shopify-section-group-overlay-group shopify-section--cart-drawer"><link href="//sowandarrow.com/cdn/shop/t/46/assets/cart-v2.css?v=165999826207480415951786684190" rel="stylesheet" type="text/css" media="all" /><cart-drawer 1950 id="cart-drawer" 1951 class="drawer drawer--cart color-scheme color-scheme--scheme-1 cart-drawer--v2" 1952 aria-label="Cart" 1953 handle-editor-events 1954 ><div class="cart-v2-header-tabs" slot="header" role="tablist" aria-label="Cart drawer sections"> 1955 <button type="button" role="tab" aria-selected="true" data-cart-v2-tab-index="0"><svg 1956 aria-hidden="true" 1957 focusable="false" 1958 width="14" 1959 fill="none" 1960 class="icon icon-cart" 1961 1962 part="icon" 1963 viewBox="0 0 16 16" 1964 > 1965 <path stroke-width="1" stroke="currentColor" d="m1.5 14.5 1-12h11l1 12h-13Z"/> 1966 <path stroke-width="1" stroke="currentColor" d="M5.5 5c.238.833 1.071 2.5 2.5 2.5s2.262-1.667 2.5-2.5"/> 1967 </svg>Cart (0) 1968 </button> 1969 <button type="button" role="tab" aria-selected="false" data-cart-v2-tab-index="1"><svg width="14" class="icon icon-heart" fill="none" viewBox="0 0 16 16"> 1970 <path stroke="currentColor" stroke-width="1" d="M7.105 3.105 8 4l.895-.895a3.771 3.771 0 1 1 5.334 5.333l-6.23 6.229-6.228-6.23a3.771 3.771 0 0 1 5.334-5.332Z"/> 1971 </svg>Wishlist 1972 </button> 1973 <button type="button" role="tab" aria-selected="false" data-cart-v2-tab-index="2"><svg 1974 aria-hidden="true" 1975 focusable="false" 1976 fill="none" 1977 width="14" 1978 class="icon icon-gift"
1979 viewBox="0 0 16 16" 1980 > 1981 <path stroke-width="1" stroke="currentColor" d="M2.5 8V5.5h11V8h-11ZM3.5 14.5V8h9v6.5h-9ZM8 5.5v8.75M8 4a1.875 1.875 0 0 0-3.75 0M11.813 4a1.875 1.875 0 1 0-3.75 0"/> 1982 </svg><span class="tab-pills__dot-indicator">Offers</span> 1983 </button> 1984 </div><x-tabs class="tab-pills"> 1985 <button type="button" slot="tab" data-drawer-tab="cart"><span class="subheading"> 1986 Cart 1987 </span> 1988 </button> 1989 1990 <div 1991 slot="tabpanel" 1992 1993 ><div class="empty-state cart-v2-empty-state"> 1994 <div class="prose prose-justify-center"> 1995 <p class="h5">Your cart is empty</p> 1996<a class="cart-v2-empty-state__button button button--sm" href="/collections/all" ><button-content class="button__content" up-text="Continue shopping">Continue shopping</button-content></a></div> 1997 </div></div> 1998 1999 <button type="button" slot="tab" data-drawer-tab="wishlist"><span class="subheading">Wishlist</span> 2000 </button> 2001 2002 <div slot="tabpanel" class="cart-wishlist-panel"><style> 2003 /* Fixed media frame overrides */ 2004 #cart-wishlist-wrapper-sections--25965682557306__cart-drawer .line-item__media-wrapper, 2005 #cart-wishlist-wrapper-sections--25965682557306__cart-drawer .line-item__media-wrapper a, 2006 #cart-wishlist-wrapper-sections--25965682557306__cart-drawer .line-item__media-wrapper img { 2007 width: 88px !important; 2008 height: 88px !important; 2009 display: flex !important; 2010 align-items: center !important; 2011 justify-content: center !important; 2012 overflow: hidden !important; 2013 object-fit: contain !important; 2014 } 2015 2016 /* Fixed media frame overrides */ 2017 #cart-wishlist-wrapper-sections--25965682557306__cart-drawer .line-item__media-wrapper { width: 88px !important; height: 88px !important; display: flex; align-items: center; justify-content: center; overflow: hidden; border-radius: 0.25rem; } 2018 #cart-wishlist-wrapper-sections--25965682557306__cart-drawer .line-item__media { max-width: 100% !important; max-height: 100% !important; object-fit: contain !important; } 2019 /* Ensure link fills wrapper */ 2020 #cart-wishlist-wrapper-sections--25965682557306__cart-drawer .line-item__media-wrapper > a { display: block !important; width: 100% !important; height: 100% !important; } 2021 /* Remove outer padding on line items */ 2022 #cart-wishlist-wrapper-sections--25965682557306__cart-drawer .line-item { padding: 0 !important; } 2023 /* Container behaviour matches cart-cross-sell widget */ 2024 #cart-wishlist-wrapper-sections--25965682557306__cart-drawer { 2025 display: block; 2026 width: 100%; 2027 min-height: 100%; 2028 margin-top: 0; 2029 } 2030 2031 .cart-wishlist-panel { 2032 min-height: 100%; 2033 } 2034 2035 #cart-wishlist-wrapper-sections--25965682557306__cart-drawer:has(.wishlist-empty, .wishlist-login) { 2036 display: grid; 2037 align-items: center; 2038 } 2039 2040 @keyframes wishlist-fade-in { 2041 from { opacity: 0; transform: translateY(10px); } 2042 to { opacity: 1; transform: translateY(0); } 2043 } 2044 #cart-wishlist-wrapper-sections--25965682557306__cart-drawer .wishlist-suggestion { 2045 background: rgb(var(--background) / .5); 2046 border-radius: 0.5rem; 2047 padding: 1rem; 2048 border: 1px dashed rgb(var(--border-color) / .3); 2049 opacity: 0; 2050 animation: wishlist-fade-in 0.3s ease-out 150ms forwards; 2051 } 2052 #cart-wishlist-wrapper-sections--25965682557306__cart-drawer .suggestion-pill { 2053 background: rgb(var(--accent-color)); 2054 color: rgb(var(--background)); 2055 padding: 0.25rem 0.5rem; 2056 border-radius: 1rem; 2057 font-size: 0.75rem; 2058 font-weight: 600; 2059 display: inline-flex; 2060 align-items: center; 2061 gap: 0.25rem; 2062 margin-bottom: 0.25rem; 2063 } 2064 2065 /* Animate each wishlist item like suggestions */ 2066 #cart-wishlist-wrapper-sections--25965682557306__cart-drawer .line-item { 2067 display: flex; 2068 align-items: center; 2069 gap: 1rem; 2070 background: rgb(var(--background)); 2071 border: 1px solid rgb(var(--border-color) / .2); 2072 border-radius: 0.5rem; 2073 padding: 0.75rem 1rem; 2074 margin-bottom: 1rem; 2075 opacity: 0; 2076 animation: wishlist-fade-in 0.3s ease-out 150ms forwards; 2077 } 2078 2079 2080 2081 #cart-wishlist-wrapper-sections--25965682557306__cart-drawer .wishlist-empty,
2082 #cart-wishlist-wrapper-sections--25965682557306__cart-drawer .wishlist-login { 2083 padding: 1.5rem 0; 2084 } 2085 #cart-wishlist-wrapper-sections--25965682557306__cart-drawer .wishlist-login a.button { 2086 display: inline-block; 2087 width: auto; 2088 margin: 0.5rem auto 0; 2089 } 2090 /* Cart cross-sell button styling */ 2091 #cart-wishlist-wrapper-sections--25965682557306__cart-drawer .action-button { 2092 background: rgb(var(--accent-color)); 2093 color: rgb(var(--background)); 2094 border: none; 2095 padding: 0.5rem 1rem; 2096 border-radius: 0.25rem; 2097 font-size: 0.875rem; 2098 font-weight: 500; 2099 cursor: pointer; 2100 transition: all 0.2s ease; 2101 align-self: flex-start; 2102 } 2103 #cart-wishlist-wrapper-sections--25965682557306__cart-drawer .action-button:hover { 2104 background: rgb(var(--accent-color) / 0.9); 2105 } 2106 #cart-wishlist-wrapper-sections--25965682557306__cart-drawer .action-button:disabled { 2107 opacity: 0.5; 2108 cursor: not-allowed; 2109 } 2110 #cart-wishlist-wrapper-sections--25965682557306__cart-drawer .in-cart-label { 2111 background: rgb(var(--success-color) / .1); 2112 color: rgb(var(--success-color)); 2113 padding: 0.5rem 1rem; 2114 border-radius: 0.25rem; 2115 font-size: 0.875rem; 2116 font-weight: 500; 2117 align-self: flex-start; 2118 } 2119#cart-wishlist-wrapper-sections--25965682557306__cart-drawer .wishlist-empty, 2120 #cart-wishlist-wrapper-sections--25965682557306__cart-drawer .wishlist-login { 2121 padding: 1.5rem 0; 2122 text-align: center; 2123 color: rgb(var(--text-color) / .7); 2124 } 2125 /* Wishlist item layout */ 2126 /* Media wrapper */ 2127 2128 #cart-wishlist-wrapper-sections--25965682557306__cart-drawer .line-item__info { 2129 flex: 1; 2130 display: flex; 2131 flex-direction: column; 2132 gap: 0.25rem; 2133 } 2134 /* Enforce fixed media frame */ 2135 #cart-wishlist-wrapper-sections--25965682557306__cart-drawer .line-item__media-wrapper { 2136 width: 88px !important; 2137 height: 88px !important; 2138 flex-shrink: 0; 2139 display: flex; 2140 align-items: center; 2141 justify-content: center; 2142 overflow: hidden; 2143 border-radius: 0.25rem; 2144 } 2145 #cart-wishlist-wrapper-sections--25965682557306__cart-drawer .line-item__media { 2146 display: block; 2147 max-width: 100% !important; 2148 max-height: 100% !important; 2149 object-fit: contain !important; 2150 } 2151</style> 2152 2153 <div id="cart-wishlist-wrapper-sections--25965682557306__cart-drawer" class="cart-wishlist-widget"> 2154 <div class="wishlist-login v-stack gap-2 text-center"> 2155 <p class="h5">Login to access all your favourites in one place</p> 2156 <p class="body-text text-subdued">Create an account to save your favourite items, build lists, and easily revisit them anytime.</p> 2157 <a href="/account/login" class="button button--primary">Login</a> 2158 </div> 2159 </div> 2160 2161 2162</div> 2163 2164 <button type="button" slot="tab" data-drawer-tab="offers"><span class="subheading tab-pills__dot-indicator">Offers</span> 2165 </button> 2166 2167 <div slot="tabpanel"><div class="cart-offers"><div class="cart-offers__item cart-offers__item--full" > 2168 <div class="v-stack gap-4"><p class="h6">Offers</p><product-list 2169 class="product-list cart-offers__product-list" 2170 style="--product-list-column-count: 2;" 2171 ><product-card class="product-card product-card--bordered product-card--info-outside color-scheme color-scheme--scheme-1" handle="pure-peanut-crackers-cracked-black-pepper-20g"><div class="product-card__figure"><badge-list class="badge-list badge-list--column align-start place-self-start"><on-sale-badge class="badge badge--on-sale ">Save 20%</on-sale-badge></badge-list><a href="/products/pure-peanut-crackers-cracked-black-pepper-20g" class="product-card__media" data-instant><img src="//sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers.avif?v=1788431863&width=996" alt="Pure Peanut Crackers - Cracked Black Pepper - 20g" srcset="//sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers.avif?v=1788431863&width=200 200w, //sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers.avif?v=1788431863&width=300 300w, //sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers.avif?v=1788431863&width=400 400w, //sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers.avif?v=1788431863&width=500 500w, //sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers.avif?v=1788431863&width=600 600w, //sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers.avif?v=1788431863&width=700 700w, //sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers.avif?v=1788431863&width=800 800w, //sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers.avif?v=1788431863&width=900 900w" width="996" height="996" sizes="(max-width: 699px) calc(50vw - 24px), 268px" class="product-card__image product-card__image--primary size-full object-cover aspect-square"><img src="//sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers_3.avif?v=1788431863&width=996" alt="Pure Peanut Crackers - Cracked Black Pepper - 20g" srcset="//sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers_3.avif?v=1788431863&width=200 200w, //sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers_3.avif?v=1788431863&width=300 300w, //sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers_3.avif?v=1788431863&width=400 400w, //sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers_3.avif?v=1788431863&width=500 500w, //sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers_3.avif?v=1788431863&width=600 600w, //sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers_3.avif?v=1788431863&width=700 700w, //sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers_3.avif?v=1788431863&width=800 800w, //sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers_3.avif?v=1788431863&width=900 900w" width="996" height="996" loading="lazy" class="product-card__image product-card__image--secondary" fetchpriority="low" sizes="(max-width: 699px) calc(50vw - 24px), 268px" draggable="false"></a><div class="product-card__quick-buy "><product-form><form method="post" action="/cart/add" id="product_form_16190750032250" accept-charset="UTF-8" class="shopify-product-form" enctype="multipart/form-data"><input type="hidden" name="form_type" value="product" /><input type="hidden" name="utf8" value="â" />
2171<input type="hidden" name="id" value="57225090072954"> 2172<button type="submit" class="touch:hidden button w-full" style="--button-background: 250 244 240;--button-text-color: 50 30 30;" ><button-content class="button__content" up-text="Add to cart">Add to cart</button-content></button><button type="submit" class="block tap-area no-touch:hidden"> 2173 <span class="sr-only">Add to cart</span> 2174 2175 <button-content><svg 2176 aria-hidden="true" 2177 focusable="false" 2178 width="16" 2179 fill="none" 2180 class="icon icon-cart" 2181 2182 part="icon" 2183 viewBox="0 0 16 16" 2184 > 2185 <path stroke-width="1" stroke="currentColor" d="m1.5 14.5 1-12h11l1 12h-13Z"/> 2186 <path stroke-width="1" stroke="currentColor" d="M5.5 5c.238.833 1.071 2.5 2.5 2.5s2.262-1.667 2.5-2.5"/> 2187 </svg></button-content> 2188 </button><input type="hidden" name="product-id" value="16190750032250" /><input type="hidden" name="section-id" value="sections--25965682557306__cart-drawer" /></form></product-form></div></div><div class="product-card__info "> 2189 <div class="v-stack gap-2.5 justify-items-start text-start"> 2190 <div class="v-stack gap-0.5"> 2191 <div class="v-stack gap-2.5"><div class="v-stack gap-1"> 2192 <div class="v-stack gap-0.5"><a href="/collections/vendors?q=Uppernut" class="vendor subheading text-subdued">Uppernut</a><a href="/products/pure-peanut-crackers-cracked-black-pepper-20g" class="product-title subheading " data-instant>Pure Peanut Crackers - Cracked Black Pepper - 20g</a> 2193 </div></div> 2194 </div><div class="v-stack gap-1"><price-list class="price-list "><sale-price class="subheading text-on-sale"> 2195 <span class="sr-only">Sale price</span>£1.32</sale-price><compare-at-price class="subheading text-subdued line-through"> 2196 <span class="sr-only">Regular price</span>£1.65</compare-at-price></price-list> 2197</div></div></div> 2198 </div></product-card><product-card class="product-card product-card--bordered product-card--info-outside color-scheme color-scheme--scheme-1" handle="pure-peanut-crackers-fiery-chilli-flakes-20g-copy"><div class="product-card__figure"><badge-list class="badge-list badge-list--column align-start place-self-start"><on-sale-badge class="badge badge--on-sale ">Save 20%</on-sale-badge></badge-list><a href="/products/pure-peanut-crackers-fiery-chilli-flakes-20g-copy" class="product-card__media" data-instant><img src="//sowandarrow.com/cdn/shop/files/3a4d98_ea75ec7d42be4adf911e6fa635cfd3d0_mv2.avif?v=1788432935&width=996" alt="Pure Peanut Crackers -Fiery Chilli Flakes - 20g" srcset="//sowandarrow.com/cdn/shop/files/3a4d98_ea75ec7d42be4adf911e6fa635cfd3d0_mv2.avif?v=1788432935&width=200 200w, //sowandarrow.com/cdn/shop/files/3a4d98_ea75ec7d42be4adf911e6fa635cfd3d0_mv2.avif?v=1788432935&width=300 300w, //sowandarrow.com/cdn/shop/files/3a4d98_ea75ec7d42be4adf911e6fa635cfd3d0_mv2.avif?v=1788432935&width=400 400w, //sowandarrow.com/cdn/shop/files/3a4d98_ea75ec7d42be4adf911e6fa635cfd3d0_mv2.avif?v=1788432935&width=500 500w, //sowandarrow.com/cdn/shop/files/3a4d98_ea75ec7d42be4adf911e6fa635cfd3d0_mv2.avif?v=1788432935&width=600 600w, //sowandarrow.com/cdn/shop/files/3a4d98_ea75ec7d42be4adf911e6fa635cfd3d0_mv2.avif?v=1788432935&width=700 700w, //sowandarrow.com/cdn/shop/files/3a4d98_ea75ec7d42be4adf911e6fa635cfd3d0_mv2.avif?v=1788432935&width=800 800w, //sowandarrow.com/cdn/shop/files/3a4d98_ea75ec7d42be4adf911e6fa635cfd3d0_mv2.avif?v=1788432935&width=900 900w" width="996" height="996" sizes="(max-width: 699px) calc(50vw - 24px), 268px" class="product-card__image product-card__image--primary size-full object-cover aspect-square"><img src="//sowandarrow.com/cdn/shop/files/FieryChilliFlakesPeanutCrackers.avif?v=1788432934&width=996" alt="Pure Peanut Crackers -Fiery Chilli Flakes - 20g" srcset="//sowandarrow.com/cdn/shop/files/FieryChilliFlakesPeanutCrackers.avif?v=1788432934&width=200 200w, //sowandarrow.com/cdn/shop/files/FieryChilliFlakesPeanutCrackers.avif?v=1788432934&width=300 300w, //sowandarrow.com/cdn/shop/files/FieryChilliFlakesPeanutCrackers.avif?v=1788432934&width=400 400w, //sowandarrow.com/cdn/shop/files/FieryChilliFlakesPeanutCrackers.avif?v=1788432934&width=500 500w, //sowandarrow.com/cdn/shop/files/FieryChilliFlakesPeanutCrackers.avif?v=1788432934&width=600 600w, //sowandarrow.com/cdn/shop/files/FieryChilliFlakesPeanutCrackers.avif?v=1788432934&width=700 700w, //sowandarrow.com/cdn/shop/files/FieryChilliFlakesPeanutCrackers.avif?v=1788432934&width=800 800w, //sowandarrow.com/cdn/shop/files/FieryChilliFlakesPeanutCrackers.avif?v=1788432934&width=900 900w" width="996" height="996" loading="lazy" class="product-card__image product-card__image--secondary" fetchpriority="low" sizes="(max-width: 699px) calc(50vw - 24px), 268px" draggable="false"></a><div class="product-card__quick-buy "><product-form><form method="post" action="/cart/add" id="product_form_16190764384634" accept-charset="UTF-8" class="shopify-product-form" enctype="multipart/form-data"><input type="hidden" name="form_type" value="product" /><input type="hidden" name="utf8" value="â" />
2198<input type="hidden" name="id" value="57225131164026"> 2199<button type="submit" class="touch:hidden button w-full" style="--button-background: 250 244 240;--button-text-color: 50 30 30;" ><button-content class="button__content" up-text="Add to cart">Add to cart</button-content></button><button type="submit" class="block tap-area no-touch:hidden"> 2200 <span class="sr-only">Add to cart</span> 2201 2202 <button-content><svg 2203 aria-hidden="true" 2204 focusable="false" 2205 width="16" 2206 fill="none" 2207 class="icon icon-cart" 2208 2209 part="icon" 2210 viewBox="0 0 16 16" 2211 > 2212 <path stroke-width="1" stroke="currentColor" d="m1.5 14.5 1-12h11l1 12h-13Z"/> 2213 <path stroke-width="1" stroke="currentColor" d="M5.5 5c.238.833 1.071 2.5 2.5 2.5s2.262-1.667 2.5-2.5"/> 2214 </svg></button-content> 2215 </button><input type="hidden" name="product-id" value="16190764384634" /><input type="hidden" name="section-id" value="sections--25965682557306__cart-drawer" /></form></product-form></div></div><div class="product-card__info "> 2216 <div class="v-stack gap-2.5 justify-items-start text-start"> 2217 <div class="v-stack gap-0.5"> 2218 <div class="v-stack gap-2.5"><div class="v-stack gap-1"> 2219 <div class="v-stack gap-0.5"><a href="/collections/vendors?q=Uppernut" class="vendor subheading text-subdued">Uppernut</a><a href="/products/pure-peanut-crackers-fiery-chilli-flakes-20g-copy" class="product-title subheading " data-instant>Pure Peanut Crackers -Fiery Chilli Flakes - 20g</a> 2220 </div></div> 2221 </div><div class="v-stack gap-1"><price-list class="price-list "><sale-price class="subheading text-on-sale"> 2222 <span class="sr-only">Sale price</span>£1.32</sale-price><compare-at-price class="subheading text-subdued line-through"> 2223 <span class="sr-only">Regular price</span>£1.65</compare-at-price></price-list> 2224</div></div></div> 2225 </div></product-card><product-card class="product-card product-card--bordered product-card--info-outside color-scheme color-scheme--scheme-1" handle="pure-peanut-crackers-fiery-chilli-flakes-20g"><div class="product-card__figure"><badge-list class="badge-list badge-list--column align-start place-self-start"><on-sale-badge class="badge badge--on-sale ">Save 20%</on-sale-badge></badge-list><a href="/products/pure-peanut-crackers-fiery-chilli-flakes-20g" class="product-card__media" data-instant><img src="//sowandarrow.com/cdn/shop/files/HighProteinPeanutCrackers3x20g_1.avif?v=1788432535&width=996" alt="Pure Peanut Crackers - Original - 20g" srcset="//sowandarrow.com/cdn/shop/files/HighProteinPeanutCrackers3x20g_1.avif?v=1788432535&width=200 200w, //sowandarrow.com/cdn/shop/files/HighProteinPeanutCrackers3x20g_1.avif?v=1788432535&width=300 300w, //sowandarrow.com/cdn/shop/files/HighProteinPeanutCrackers3x20g_1.avif?v=1788432535&width=400 400w, //sowandarrow.com/cdn/shop/files/HighProteinPeanutCrackers3x20g_1.avif?v=1788432535&width=500 500w, //sowandarrow.com/cdn/shop/files/HighProteinPeanutCrackers3x20g_1.avif?v=1788432535&width=600 600w, //sowandarrow.com/cdn/shop/files/HighProteinPeanutCrackers3x20g_1.avif?v=1788432535&width=700 700w, //sowandarrow.com/cdn/shop/files/HighProteinPeanutCrackers3x20g_1.avif?v=1788432535&width=800 800w, //sowandarrow.com/cdn/shop/files/HighProteinPeanutCrackers3x20g_1.avif?v=1788432535&width=900 900w" width="996" height="996" sizes="(max-width: 699px) calc(50vw - 24px), 268px" class="product-card__image product-card__image--primary size-full object-cover aspect-square"><img src="//sowandarrow.com/cdn/shop/files/HighProteinPeanutCrackers_2.avif?v=1788432535&width=996" alt="Pure Peanut Crackers - Original - 20g" srcset="//sowandarrow.com/cdn/shop/files/HighProteinPeanutCrackers_2.avif?v=1788432535&width=200 200w, //sowandarrow.com/cdn/shop/files/HighProteinPeanutCrackers_2.avif?v=1788432535&width=300 300w, //sowandarrow.com/cdn/shop/files/HighProteinPeanutCrackers_2.avif?v=1788432535&width=400 400w, //sowandarrow.com/cdn/shop/files/HighProteinPeanutCrackers_2.avif?v=1788432535&width=500 500w, //sowandarrow.com/cdn/shop/files/HighProteinPeanutCrackers_2.avif?v=1788432535&width=600 600w, //sowandarrow.com/cdn/shop/files/HighProteinPeanutCrackers_2.avif?v=1788432535&width=700 700w, //sowandarrow.com/cdn/shop/files/HighProteinPeanutCrackers_2.avif?v=1788432535&width=800 800w, //sowandarrow.com/cdn/shop/files/HighProteinPeanutCrackers_2.avif?v=1788432535&width=900 900w" width="996" height="996" loading="lazy" class="product-card__image product-card__image--secondary" fetchpriority="low" sizes="(max-width: 699px) calc(50vw - 24px), 268px" draggable="false"></a><div class="product-card__quick-buy "><product-form><form method="post" action="/cart/add" id="product_form_16190754488698" accept-charset="UTF-8" class="shopify-product-form" enctype="multipart/form-data"><input type="hidden" name="form_type" value="product" /><input type="hidden" name="utf8" value="â" />
2225<input type="hidden" name="id" value="57225101803898"> 2226<button type="submit" class="touch:hidden button w-full" style="--button-background: 250 244 240;--button-text-color: 50 30 30;" ><button-content class="button__content" up-text="Add to cart">Add to cart</button-content></button><button type="submit" class="block tap-area no-touch:hidden"> 2227 <span class="sr-only">Add to cart</span> 2228 2229 <button-content><svg 2230 aria-hidden="true" 2231 focusable="false" 2232 width="16" 2233 fill="none" 2234 class="icon icon-cart" 2235 2236 part="icon" 2237 viewBox="0 0 16 16" 2238 > 2239 <path stroke-width="1" stroke="currentColor" d="m1.5 14.5 1-12h11l1 12h-13Z"/> 2240 <path stroke-width="1" stroke="currentColor" d="M5.5 5c.238.833 1.071 2.5 2.5 2.5s2.262-1.667 2.5-2.5"/> 2241 </svg></button-content> 2242 </button><input type="hidden" name="product-id" value="16190754488698" /><input type="hidden" name="section-id" value="sections--25965682557306__cart-drawer" /></form></product-form></div></div><div class="product-card__info "> 2243 <div class="v-stack gap-2.5 justify-items-start text-start"> 2244 <div class="v-stack gap-0.5"> 2245 <div class="v-stack gap-2.5"><div class="v-stack gap-1"> 2246 <div class="v-stack gap-0.5"><a href="/collections/vendors?q=Uppernut" class="vendor subheading text-subdued">Uppernut</a><a href="/products/pure-peanut-crackers-fiery-chilli-flakes-20g" class="product-title subheading " data-instant>Pure Peanut Crackers - Original - 20g</a> 2247 </div></div> 2248 </div><div class="v-stack gap-1"><price-list class="price-list "><sale-price class="subheading text-on-sale"> 2249 <span class="sr-only">Sale price</span>£1.32</sale-price><compare-at-price class="subheading text-subdued line-through"> 2250 <span class="sr-only">Regular price</span>£1.65</compare-at-price></price-list> 2251</div></div></div> 2252 </div></product-card><product-card class="product-card product-card--bordered product-card--info-outside color-scheme color-scheme--scheme-1" handle="organic-pumpkin-carrot-chilli-soup-copy"><div class="product-card__figure"><badge-list class="badge-list badge-list--column align-start place-self-start"><span class="badge badge--custom badge--new ">New</span><on-sale-badge class="badge badge--on-sale ">Save 15%</on-sale-badge></badge-list><a href="/products/organic-pumpkin-carrot-chilli-soup-copy" class="product-card__media" data-instant><img src="//sowandarrow.com/cdn/shop/files/organic-garden-pea-vegetable-soup-from-mr-organic-available-at-sow-arrow-6752651.webp?v=1788968290&width=1280" alt="Organic Garden Pea & Vegetable Soup from Mr Organic | Available at Sow & Arrow" srcset="//sowandarrow.com/cdn/shop/files/organic-garden-pea-vegetable-soup-from-mr-organic-available-at-sow-arrow-6752651.webp?v=1788968290&width=200 200w, //sowandarrow.com/cdn/shop/files/organic-garden-pea-vegetable-soup-from-mr-organic-available-at-sow-arrow-6752651.webp?v=1788968290&width=300 300w, //sowandarrow.com/cdn/shop/files/organic-garden-pea-vegetable-soup-from-mr-organic-available-at-sow-arrow-6752651.webp?v=1788968290&width=400 400w, //sowandarrow.com/cdn/shop/files/organic-garden-pea-vegetable-soup-from-mr-organic-available-at-sow-arrow-6752651.webp?v=1788968290&width=500 500w, //sowandarrow.com/cdn/shop/files/organic-garden-pea-vegetable-soup-from-mr-organic-available-at-sow-arrow-6752651.webp?v=1788968290&width=600 600w, //sowandarrow.com/cdn/shop/files/organic-garden-pea-vegetable-soup-from-mr-organic-available-at-sow-arrow-6752651.webp?v=1788968290&width=700 700w, //sowandarrow.com/cdn/shop/files/organic-garden-pea-vegetable-soup-from-mr-organic-available-at-sow-arrow-6752651.webp?v=1788968290&width=800 800w, //sowandarrow.com/cdn/shop/files/organic-garden-pea-vegetable-soup-from-mr-organic-available-at-sow-arrow-6752651.webp?v=1788968290&width=900 900w, //sowandarrow.com/cdn/shop/files/organic-garden-pea-vegetable-soup-from-mr-organic-available-at-sow-arrow-6752651.webp?v=1788968290&width=1000 1000w, //sowandarrow.com/cdn/shop/files/organic-garden-pea-vegetable-soup-from-mr-organic-available-at-sow-arrow-6752651.webp?v=1788968290&width=1200 1200w" width="1280" height="1280" loading="lazy" sizes="auto, (max-width: 699px) calc(50vw - 24px), 268px" class="product-card__image product-card__image--primary size-full object-cover aspect-square"></a><div class="product-card__quick-buy "><product-form><form method="post" action="/cart/add" id="product_form_16196423844218" accept-charset="UTF-8" class="shopify-product-form" enctype="multipart/form-data"><input type="hidden" name="form_type" value="product" /><input type="hidden" name="utf8" value="â" />
2252<input type="hidden" name="id" value="57248296763770"> 2253<button type="submit" class="touch:hidden button w-full" style="--button-background: 250 244 240;--button-text-color: 50 30 30;" ><button-content class="button__content" up-text="Add to cart">Add to cart</button-content></button><button type="submit" class="block tap-area no-touch:hidden"> 2254 <span class="sr-only">Add to cart</span> 2255 2256 <button-content><svg 2257 aria-hidden="true" 2258 focusable="false" 2259 width="16" 2260 fill="none" 2261 class="icon icon-cart" 2262 2263 part="icon" 2264 viewBox="0 0 16 16" 2265 > 2266 <path stroke-width="1" stroke="currentColor" d="m1.5 14.5 1-12h11l1 12h-13Z"/> 2267 <path stroke-width="1" stroke="currentColor" d="M5.5 5c.238.833 1.071 2.5 2.5 2.5s2.262-1.667 2.5-2.5"/> 2268 </svg></button-content> 2269 </button><input type="hidden" name="product-id" value="16196423844218" /><input type="hidden" name="section-id" value="sections--25965682557306__cart-drawer" /></form></product-form></div></div><div class="product-card__info "> 2270 <div class="v-stack gap-2.5 justify-items-start text-start"> 2271 <div class="v-stack gap-0.5"> 2272 <div class="v-stack gap-2.5"><div class="v-stack gap-1"> 2273 <div class="v-stack gap-0.5"><a href="/collections/vendors?q=Mr%20Organic" class="vendor subheading text-subdued">Mr Organic</a><a href="/products/organic-pumpkin-carrot-chilli-soup-copy" class="product-title subheading " data-instant>Organic Garden Pea & Vegetable Soup</a> 2274 </div></div> 2275 </div><div class="v-stack gap-1"><price-list class="price-list "><sale-price class="subheading text-on-sale"> 2276 <span class="sr-only">Sale price</span>£2.03</sale-price><compare-at-price class="subheading text-subdued line-through"> 2277 <span class="sr-only">Regular price</span>£2.39</compare-at-price></price-list> 2278</div></div></div> 2279 </div></product-card><product-card class="product-card product-card--bordered product-card--info-outside color-scheme color-scheme--scheme-1" handle="organic-tomato-lentil-soup"><div class="product-card__figure"><badge-list class="badge-list badge-list--column align-start place-self-start"><span class="badge badge--custom badge--new ">New</span><sold-out-badge class="badge badge--sold-out ">Sold out</sold-out-badge><on-sale-badge class="badge badge--on-sale ">Save 15%</on-sale-badge></badge-list><a href="/products/organic-tomato-lentil-soup" class="product-card__media" data-instant><img src="//sowandarrow.com/cdn/shop/files/organic-tomato-lentil-soup-from-mr-organic-available-at-sow-arrow-7972503.jpg?v=1788968289&width=500" alt="Organic Tomato & Lentil Soup from Mr Organic | Available at Sow & Arrow" srcset="//sowandarrow.com/cdn/shop/files/organic-tomato-lentil-soup-from-mr-organic-available-at-sow-arrow-7972503.jpg?v=1788968289&width=200 200w, //sowandarrow.com/cdn/shop/files/organic-tomato-lentil-soup-from-mr-organic-available-at-sow-arrow-7972503.jpg?v=1788968289&width=300 300w, //sowandarrow.com/cdn/shop/files/organic-tomato-lentil-soup-from-mr-organic-available-at-sow-arrow-7972503.jpg?v=1788968289&width=400 400w, //sowandarrow.com/cdn/shop/files/organic-tomato-lentil-soup-from-mr-organic-available-at-sow-arrow-7972503.jpg?v=1788968289&width=500 500w" width="500" height="500" loading="lazy" sizes="auto, (max-width: 699px) calc(50vw - 24px), 268px" class="product-card__image product-card__image--primary size-full object-cover aspect-square"></a></div><div class="product-card__info "> 2280 <div class="v-stack gap-2.5 justify-items-start text-start"> 2281 <div class="v-stack gap-0.5"> 2282 <div class="v-stack gap-2.5"><div class="v-stack gap-1"> 2283 <div class="v-stack gap-0.5"><a href="/collections/vendors?q=Mr%20Organic" class="vendor subheading text-subdued">Mr Organic</a><a href="/products/organic-tomato-lentil-soup" class="product-title subheading " data-instant>Organic Tomato & Lentil Soup</a> 2284 </div></div> 2285 </div><div class="v-stack gap-1"><price-list class="price-list "><sale-price class="subheading text-on-sale">
2286 <span class="sr-only">Sale price</span>£2.03</sale-price><compare-at-price class="subheading text-subdued line-through"> 2287 <span class="sr-only">Regular price</span>£2.39</compare-at-price></price-list> 2288</div></div></div> 2289 </div></product-card><product-card class="product-card product-card--bordered product-card--info-outside color-scheme color-scheme--scheme-1" handle="organic-tomato-lentil-soup-copy"><div class="product-card__figure"><badge-list class="badge-list badge-list--column align-start place-self-start"><span class="badge badge--custom badge--new ">New</span><on-sale-badge class="badge badge--on-sale ">Save 15%</on-sale-badge></badge-list><a href="/products/organic-tomato-lentil-soup-copy" class="product-card__media" data-instant><img src="//sowandarrow.com/cdn/shop/files/organic-pumpkin-carrot-chilli-soup-from-mr-organic-available-at-sow-arrow-5572721.webp?v=1788968290&width=1280" alt="Organic Pumpkin, Carrot & Chilli Soup from Mr Organic | Available at Sow & Arrow" srcset="//sowandarrow.com/cdn/shop/files/organic-pumpkin-carrot-chilli-soup-from-mr-organic-available-at-sow-arrow-5572721.webp?v=1788968290&width=200 200w, //sowandarrow.com/cdn/shop/files/organic-pumpkin-carrot-chilli-soup-from-mr-organic-available-at-sow-arrow-5572721.webp?v=1788968290&width=300 300w, //sowandarrow.com/cdn/shop/files/organic-pumpkin-carrot-chilli-soup-from-mr-organic-available-at-sow-arrow-5572721.webp?v=1788968290&width=400 400w, //sowandarrow.com/cdn/shop/files/organic-pumpkin-carrot-chilli-soup-from-mr-organic-available-at-sow-arrow-5572721.webp?v=1788968290&width=500 500w, //sowandarrow.com/cdn/shop/files/organic-pumpkin-carrot-chilli-soup-from-mr-organic-available-at-sow-arrow-5572721.webp?v=1788968290&width=600 600w, //sowandarrow.com/cdn/shop/files/organic-pumpkin-carrot-chilli-soup-from-mr-organic-available-at-sow-arrow-5572721.webp?v=1788968290&width=700 700w, //sowandarrow.com/cdn/shop/files/organic-pumpkin-carrot-chilli-soup-from-mr-organic-available-at-sow-arrow-5572721.webp?v=1788968290&width=800 800w, //sowandarrow.com/cdn/shop/files/organic-pumpkin-carrot-chilli-soup-from-mr-organic-available-at-sow-arrow-5572721.webp?v=1788968290&width=900 900w, //sowandarrow.com/cdn/shop/files/organic-pumpkin-carrot-chilli-soup-from-mr-organic-available-at-sow-arrow-5572721.webp?v=1788968290&width=1000 1000w, //sowandarrow.com/cdn/shop/files/organic-pumpkin-carrot-chilli-soup-from-mr-organic-available-at-sow-arrow-5572721.webp?v=1788968290&width=1200 1200w" width="1280" height="1280" loading="lazy" sizes="auto, (max-width: 699px) calc(50vw - 24px), 268px" class="product-card__image product-card__image--primary size-full object-cover aspect-square"></a><div class="product-card__quick-buy "><product-form><form method="post" action="/cart/add" id="product_form_16196414472570" accept-charset="UTF-8" class="shopify-product-form" enctype="multipart/form-data"><input type="hidden" name="form_type" value="product" /><input type="hidden" name="utf8" value="â" /><input type="hidden" name="id" value="57248216514938"> 2290<button type="submit" class="touch:hidden button w-full" style="--button-background: 250 244 240;--button-text-color: 50 30 30;" ><button-content class="button__content" up-text="Add to cart">Add to cart</button-content></button><button type="submit" class="block tap-area no-touch:hidden"> 2291 <span class="sr-only">Add to cart</span> 2292 2293 <button-content><svg 2294 aria-hidden="true" 2295 focusable="false" 2296 width="16" 2297 fill="none" 2298 class="icon icon-cart" 2299 2300 part="icon"
2301 viewBox="0 0 16 16" 2302 > 2303 <path stroke-width="1" stroke="currentColor" d="m1.5 14.5 1-12h11l1 12h-13Z"/> 2304 <path stroke-width="1" stroke="currentColor" d="M5.5 5c.238.833 1.071 2.5 2.5 2.5s2.262-1.667 2.5-2.5"/> 2305 </svg></button-content> 2306 </button><input type="hidden" name="product-id" value="16196414472570" /><input type="hidden" name="section-id" value="sections--25965682557306__cart-drawer" /></form></product-form></div></div><div class="product-card__info "> 2307 <div class="v-stack gap-2.5 justify-items-start text-start"> 2308 <div class="v-stack gap-0.5"> 2309 <div class="v-stack gap-2.5"><div class="v-stack gap-1"> 2310 <div class="v-stack gap-0.5"><a href="/collections/vendors?q=Mr%20Organic" class="vendor subheading text-subdued">Mr Organic</a><a href="/products/organic-tomato-lentil-soup-copy" class="product-title subheading " data-instant>Organic Pumpkin, Carrot & Chilli Soup</a> 2311 </div></div> 2312 </div><div class="v-stack gap-1"><price-list class="price-list "><sale-price class="subheading text-on-sale"> 2313 <span class="sr-only">Sale price</span>£2.03</sale-price><compare-at-price class="subheading text-subdued line-through"> 2314 <span class="sr-only">Regular price</span>£2.39</compare-at-price></price-list> 2315</div></div></div> 2316 </div></product-card><product-card class="product-card product-card--bordered product-card--info-outside color-scheme color-scheme--scheme-1" handle="popped-foxnuts-coconut-cacao-25g-copy"><div class="product-card__figure"><badge-list class="badge-list badge-list--column align-start place-self-start"><sold-out-badge class="badge badge--sold-out ">Sold out</sold-out-badge><on-sale-badge class="badge badge--on-sale ">Save 15%</on-sale-badge></badge-list><a href="/products/popped-foxnuts-coconut-cacao-25g-copy" class="product-card__media" data-instant><img src="//sowandarrow.com/cdn/shop/files/popped-foxnuts-chilli-paprika-25g-from-bare-truth-available-at-sow-arrow-7163493.jpg?v=1787974039&width=1080" alt="Popped Foxnuts - Chilli Paprika - 25g from Bare Truth | Available at Sow & Arrow" srcset="//sowandarrow.com/cdn/shop/files/popped-foxnuts-chilli-paprika-25g-from-bare-truth-available-at-sow-arrow-7163493.jpg?v=1787974039&width=200 200w, //sowandarrow.com/cdn/shop/files/popped-foxnuts-chilli-paprika-25g-from-bare-truth-available-at-sow-arrow-7163493.jpg?v=1787974039&width=300 300w, //sowandarrow.com/cdn/shop/files/popped-foxnuts-chilli-paprika-25g-from-bare-truth-available-at-sow-arrow-7163493.jpg?v=1787974039&width=400 400w, //sowandarrow.com/cdn/shop/files/popped-foxnuts-chilli-paprika-25g-from-bare-truth-available-at-sow-arrow-7163493.jpg?v=1787974039&width=500 500w, //sowandarrow.com/cdn/shop/files/popped-foxnuts-chilli-paprika-25g-from-bare-truth-available-at-sow-arrow-7163493.jpg?v=1787974039&width=600 600w, //sowandarrow.com/cdn/shop/files/popped-foxnuts-chilli-paprika-25g-from-bare-truth-available-at-sow-arrow-7163493.jpg?v=1787974039&width=700 700w, //sowandarrow.com/cdn/shop/files/popped-foxnuts-chilli-paprika-25g-from-bare-truth-available-at-sow-arrow-7163493.jpg?v=1787974039&width=800 800w, //sowandarrow.com/cdn/shop/files/popped-foxnuts-chilli-paprika-25g-from-bare-truth-available-at-sow-arrow-7163493.jpg?v=1787974039&width=900 900w, //sowandarrow.com/cdn/shop/files/popped-foxnuts-chilli-paprika-25g-from-bare-truth-available-at-sow-arrow-7163493.jpg?v=1787974039&width=1000 1000w" width="1080" height="1080" loading="lazy" sizes="auto, (max-width: 699px) calc(50vw - 24px), 268px" class="product-card__image product-card__image--primary size-full object-cover aspect-square"><img src="//sowandarrow.com/cdn/shop/files/popped-foxnuts-chilli-paprika-25g-from-bare-truth-available-at-sow-arrow-4849374.webp?v=1787974040&width=1080" alt="Popped Foxnuts - Chilli Paprika - 25g from Bare Truth | Available at Sow & Arrow" srcset="//sowandarrow.com/cdn/shop/files/popped-foxnuts-chilli-paprika-25g-from-bare-truth-available-at-sow-arrow-4849374.webp?v=1787974040&width=200 200w, //sowandarrow.com/cdn/shop/files/popped-foxnuts-chilli-paprika-25g-from-bare-truth-available-at-sow-arrow-4849374.webp?v=1787974040&width=300 300w, //sowandarrow.com/cdn/shop/files/popped-foxnuts-chilli-paprika-25g-from-bare-truth-available-at-sow-arrow-4849374.webp?v=1787974040&width=400 400w, //sowandarrow.com/cdn/shop/files/popped-foxnuts-chilli-paprika-25g-from-bare-truth-available-at-sow-arrow-4849374.webp?v=1787974040&width=500 500w, //sowandarrow.com/cdn/shop/files/popped-foxnuts-chilli-paprika-25g-from-bare-truth-available-at-sow-arrow-4849374.webp?v=1787974040&width=600 600w, //sowandarrow.com/cdn/shop/files/popped-foxnuts-chilli-paprika-25g-from-bare-truth-available-at-sow-arrow-4849374.webp?v=1787974040&width=700 700w, //sowandarrow.com/cdn/shop/files/popped-foxnuts-chilli-paprika-25g-from-bare-truth-available-at-sow-arrow-4849374.webp?v=1787974040&width=800 800w, //sowandarrow.com/cdn/shop/files/popped-foxnuts-chilli-paprika-25g-from-bare-truth-available-at-sow-arrow-4849374.webp?v=1787974040&width=900 900w, //sowandarrow.com/cdn/shop/files/popped-foxnuts-chilli-paprika-25g-from-bare-truth-available-at-sow-arrow-4849374.webp?v=1787974040&width=1000 1000w" width="1080" height="1080" loading="lazy" class="product-card__image product-card__image--secondary" fetchpriority="low" sizes="auto, (max-width: 699px) calc(50vw - 24px), 268px" draggable="false"></a></div><div class="product-card__info "> 2317 <div class="v-stack gap-2.5 justify-items-start text-start"> 2318 <div class="v-stack gap-0.5"> 2319 <div class="v-stack gap-2.5"><div class="v-stack gap-1"> 2320 <div class="v-stack gap-0.5">
2320<a href="/collections/vendors?q=Bare%20Truth" class="vendor subheading text-subdued">Bare Truth</a><a href="/products/popped-foxnuts-coconut-cacao-25g-copy" class="product-title subheading " data-instant>Popped Foxnuts - Chilli Paprika - 25g</a> 2321 </div></div> 2322 </div><div class="v-stack gap-1"><price-list class="price-list "><sale-price class="subheading text-on-sale"> 2323 <span class="sr-only">Sale price</span>£1.95</sale-price><compare-at-price class="subheading text-subdued line-through"> 2324 <span class="sr-only">Regular price</span>£2.29</compare-at-price></price-list> 2325</div></div></div> 2326 </div></product-card><product-card class="product-card product-card--bordered product-card--info-outside color-scheme color-scheme--scheme-1" handle="popped-foxnuts-cinnamon-vanilla-25g"><div class="product-card__figure"><badge-list class="badge-list badge-list--column align-start place-self-start"><on-sale-badge class="badge badge--on-sale ">Save 15%</on-sale-badge></badge-list><a href="/products/popped-foxnuts-cinnamon-vanilla-25g" class="product-card__media" data-instant><img src="//sowandarrow.com/cdn/shop/files/popped-foxnuts-cinnamon-vanilla-25g-from-bare-truth-available-at-sow-arrow-1072382.webp?v=1787974039&width=1080" alt="Popped Foxnuts - Cinnamon Vanilla - 25g from Bare Truth | Available at Sow & Arrow" srcset="//sowandarrow.com/cdn/shop/files/popped-foxnuts-cinnamon-vanilla-25g-from-bare-truth-available-at-sow-arrow-1072382.webp?v=1787974039&width=200 200w, //sowandarrow.com/cdn/shop/files/popped-foxnuts-cinnamon-vanilla-25g-from-bare-truth-available-at-sow-arrow-1072382.webp?v=1787974039&width=300 300w, //sowandarrow.com/cdn/shop/files/popped-foxnuts-cinnamon-vanilla-25g-from-bare-truth-available-at-sow-arrow-1072382.webp?v=1787974039&width=400 400w, //sowandarrow.com/cdn/shop/files/popped-foxnuts-cinnamon-vanilla-25g-from-bare-truth-available-at-sow-arrow-1072382.webp?v=1787974039&width=500 500w, //sowandarrow.com/cdn/shop/files/popped-foxnuts-cinnamon-vanilla-25g-from-bare-truth-available-at-sow-arrow-1072382.webp?v=1787974039&width=600 600w, //sowandarrow.com/cdn/shop/files/popped-foxnuts-cinnamon-vanilla-25g-from-bare-truth-available-at-sow-arrow-1072382.webp?v=1787974039&width=700 700w, //sowandarrow.com/cdn/shop/files/popped-foxnuts-cinnamon-vanilla-25g-from-bare-truth-available-at-sow-arrow-1072382.webp?v=1787974039&width=800 800w, //sowandarrow.com/cdn/shop/files/popped-foxnuts-cinnamon-vanilla-25g-from-bare-truth-available-at-sow-arrow-1072382.webp?v=1787974039&width=900 900w, //sowandarrow.com/cdn/shop/files/popped-foxnuts-cinnamon-vanilla-25g-from-bare-truth-available-at-sow-arrow-1072382.webp?v=1787974039&width=1000 1000w" width="1080" height="1080" loading="lazy" sizes="auto, (max-width: 699px) calc(50vw - 24px), 268px" class="product-card__image product-card__image--primary size-full object-cover aspect-square"><img src="//sowandarrow.com/cdn/shop/files/popped-foxnuts-cinnamon-vanilla-25g-from-bare-truth-available-at-sow-arrow-4459179.webp?v=1787974039&width=1080" alt="Popped Foxnuts - Cinnamon Vanilla - 25g from Bare Truth | Available at Sow & Arrow" srcset="//sowandarrow.com/cdn/shop/files/popped-foxnuts-cinnamon-vanilla-25g-from-bare-truth-available-at-sow-arrow-4459179.webp?v=1787974039&width=200 200w, //sowandarrow.com/cdn/shop/files/popped-foxnuts-cinnamon-vanilla-25g-from-bare-truth-available-at-sow-arrow-4459179.webp?v=1787974039&width=300 300w, //sowandarrow.com/cdn/shop/files/popped-foxnuts-cinnamon-vanilla-25g-from-bare-truth-available-at-sow-arrow-4459179.webp?v=1787974039&width=400 400w, //sowandarrow.com/cdn/shop/files/popped-foxnuts-cinnamon-vanilla-25g-from-bare-truth-available-at-sow-arrow-4459179.webp?v=1787974039&width=500 500w, //sowandarrow.com/cdn/shop/files/popped-foxnuts-cinnamon-vanilla-25g-from-bare-truth-available-at-sow-arrow-4459179.webp?v=1787974039&width=600 600w, //sowandarrow.com/cdn/shop/files/popped-foxnuts-cinnamon-vanilla-25g-from-bare-truth-available-at-sow-arrow-4459179.webp?v=1787974039&width=700 700w, //sowandarrow.com/cdn/shop/files/popped-foxnuts-cinnamon-vanilla-25g-from-bare-truth-available-at-sow-arrow-4459179.webp?v=1787974039&width=800 800w, //sowandarrow.com/cdn/shop/files/popped-foxnuts-cinnamon-vanilla-25g-from-bare-truth-available-at-sow-arrow-4459179.webp?v=1787974039&width=900 900w, //sowandarrow.com/cdn/shop/files/popped-foxnuts-cinnamon-vanilla-25g-from-bare-truth-available-at-sow-arrow-4459179.webp?v=1787974039&width=1000 1000w" width="1080" height="1080" loading="lazy" class="product-card__image product-card__image--secondary" fetchpriority="low" sizes="auto, (max-width: 699px) calc(50vw - 24px), 268px" draggable="false"></a><div class="product-card__quick-buy "><product-form><form method="post" action="/cart/add" id="product_form_16185729122682" accept-charset="UTF-8" class="shopify-product-form" enctype="multipart/form-data"><input type="hidden" name="form_type" value="product" /><input type="hidden" name="utf8" value="â" />
2326<input type="hidden" name="id" value="57208208261498"> 2327<button type="submit" class="touch:hidden button w-full" style="--button-background: 250 244 240;--button-text-color: 50 30 30;" ><button-content class="button__content" up-text="Add to cart">Add to cart</button-content></button><button type="submit" class="block tap-area no-touch:hidden"> 2328 <span class="sr-only">Add to cart</span> 2329 2330 <button-content><svg 2331 aria-hidden="true" 2332 focusable="false" 2333 width="16" 2334 fill="none" 2335 class="icon icon-cart" 2336 2337 part="icon" 2338 viewBox="0 0 16 16" 2339 > 2340 <path stroke-width="1" stroke="currentColor" d="m1.5 14.5 1-12h11l1 12h-13Z"/> 2341 <path stroke-width="1" stroke="currentColor" d="M5.5 5c.238.833 1.071 2.5 2.5 2.5s2.262-1.667 2.5-2.5"/> 2342 </svg></button-content> 2343 </button><input type="hidden" name="product-id" value="16185729122682" /><input type="hidden" name="section-id" value="sections--25965682557306__cart-drawer" /></form></product-form></div></div><div class="product-card__info "> 2344 <div class="v-stack gap-2.5 justify-items-start text-start"> 2345 <div class="v-stack gap-0.5"> 2346 <div class="v-stack gap-2.5"><div class="v-stack gap-1"> 2347 <div class="v-stack gap-0.5"><a href="/collections/vendors?q=Bare%20Truth" class="vendor subheading text-subdued">Bare Truth</a><a href="/products/popped-foxnuts-cinnamon-vanilla-25g" class="product-title subheading " data-instant>Popped Foxnuts - Cinnamon Vanilla - 25g</a> 2348 </div></div> 2349 </div><div class="v-stack gap-1"><price-list class="price-list "><sale-price class="subheading text-on-sale"> 2350 <span class="sr-only">Sale price</span>£1.95</sale-price><compare-at-price class="subheading text-subdued line-through"> 2351 <span class="sr-only">Regular price</span>£2.29</compare-at-price></price-list> 2352</div></div></div> 2353 </div></product-card></product-list> 2354<a class="self-start button button--sm button--outline" style="--button-text-color: var(--button-background-primary);" href="/collections/offers" ><button-content class="button__content" up-text="View All Offers">View All Offers</button-content></a></div> 2355</div> 2356<div class="cart-offers__item cart-offers__item--full" > 2357 <div class="v-stack gap-4"><p class="h6">New Arrivals</p><product-list 2358 class="product-list cart-offers__product-list" 2359 style="--product-list-column-count: 2;" 2360 ><product-card class="product-card product-card--bordered product-card--info-outside color-scheme color-scheme--scheme-1" handle="grain-free-low-carb-original-toasted-muesli-250g"><div class="product-card__figure"><badge-list class="badge-list badge-list--column align-start place-self-start"><span class="badge badge--custom badge--new ">New</span><on-sale-badge class="badge badge--on-sale ">Save 10%</on-sale-badge></badge-list><a href="/products/grain-free-low-carb-original-toasted-muesli-250g" class="product-card__media" data-instant><img src="//sowandarrow.com/cdn/shop/files/grain-free-low-carb-original-toasted-muesli-250g-from-fudi-available-at-sow-arrow-6632558.webp?v=1790211191&width=990" alt="Grain-free, low carb - Original Toasted Muesli - 250g from Fudi | Available at Sow & Arrow" srcset="//sowandarrow.com/cdn/shop/files/grain-free-low-carb-original-toasted-muesli-250g-from-fudi-available-at-sow-arrow-6632558.webp?v=1790211191&width=200 200w, //sowandarrow.com/cdn/shop/files/grain-free-low-carb-original-toasted-muesli-250g-from-fudi-available-at-sow-arrow-6632558.webp?v=1790211191&width=300 300w, //sowandarrow.com/cdn/shop/files/grain-free-low-carb-original-toasted-muesli-250g-from-fudi-available-at-sow-arrow-6632558.webp?v=1790211191&width=400 400w, //sowandarrow.com/cdn/shop/files/grain-free-low-carb-original-toasted-muesli-250g-from-fudi-available-at-sow-arrow-6632558.webp?v=1790211191&width=500 500w, //sowandarrow.com/cdn/shop/files/grain-free-low-carb-original-toasted-muesli-250g-from-fudi-available-at-sow-arrow-6632558.webp?v=1790211191&width=600 600w, //sowandarrow.com/cdn/shop/files/grain-free-low-carb-original-toasted-muesli-250g-from-fudi-available-at-sow-arrow-6632558.webp?v=1790211191&width=700 700w, //sowandarrow.com/cdn/shop/files/grain-free-low-carb-original-toasted-muesli-250g-from-fudi-available-at-sow-arrow-6632558.webp?v=1790211191&width=800 800w, //sowandarrow.com/cdn/shop/files/grain-free-low-carb-original-toasted-muesli-250g-from-fudi-available-at-sow-arrow-6632558.webp?v=1790211191&width=900 900w" width="990" height="990" sizes="(max-width: 699px) calc(50vw - 24px), 268px" class="product-card__image product-card__image--primary size-full object-cover aspect-square"></a><div class="product-card__quick-buy "><product-form><form method="post" action="/cart/add" id="product_form_16210802966906" accept-charset="UTF-8" class="shopify-product-form" enctype="multipart/form-data"><input type="hidden" name="form_type" value="product" /><input type="hidden" name="utf8" value="â" />
2360<input type="hidden" name="id" value="57297137435002"> 2361<button type="submit" class="touch:hidden button w-full" style="--button-background: 250 244 240;--button-text-color: 50 30 30;" ><button-content class="button__content" up-text="Add to cart">Add to cart</button-content></button><button type="submit" class="block tap-area no-touch:hidden"> 2362 <span class="sr-only">Add to cart</span> 2363 2364 <button-content><svg 2365 aria-hidden="true" 2366 focusable="false" 2367 width="16" 2368 fill="none" 2369 class="icon icon-cart" 2370 2371 part="icon" 2372 viewBox="0 0 16 16" 2373 > 2374 <path stroke-width="1" stroke="currentColor" d="m1.5 14.5 1-12h11l1 12h-13Z"/> 2375 <path stroke-width="1" stroke="currentColor" d="M5.5 5c.238.833 1.071 2.5 2.5 2.5s2.262-1.667 2.5-2.5"/> 2376 </svg></button-content> 2377 </button><input type="hidden" name="product-id" value="16210802966906" /><input type="hidden" name="section-id" value="sections--25965682557306__cart-drawer" /></form></product-form></div></div><div class="product-card__info "> 2378 <div class="v-stack gap-2.5 justify-items-start text-start"> 2379 <div class="v-stack gap-0.5"> 2380 <div class="v-stack gap-2.5"><div class="v-stack gap-1"> 2381 <div class="v-stack gap-0.5"><a href="/collections/vendors?q=Fudi" class="vendor subheading text-subdued">Fudi</a><a href="/products/grain-free-low-carb-original-toasted-muesli-250g" class="product-title subheading " data-instant>Grain-free, low carb - Original Toasted Muesli - 250g</a> 2382 </div></div> 2383 </div><div class="v-stack gap-1"><price-list class="price-list "><sale-price class="subheading text-on-sale"> 2384 <span class="sr-only">Sale price</span>£6.75</sale-price><compare-at-price class="subheading text-subdued line-through"> 2385 <span class="sr-only">Regular price</span>£7.49</compare-at-price></price-list> 2386</div></div></div> 2387 </div></product-card><product-card class="product-card product-card--bordered product-card--info-outside color-scheme color-scheme--scheme-1" handle="montezuma-dark-cherry-and-pistachio-90g-copy"><div class="product-card__figure"><badge-list class="badge-list badge-list--column align-start place-self-start"><span class="badge badge--custom badge--new ">New</span></badge-list><a href="/products/montezuma-dark-cherry-and-pistachio-90g-copy" class="product-card__media" data-instant><img src="//sowandarrow.com/cdn/shop/files/montezumas-milk-chocolate-gingerbread-90g-from-montezumas-available-at-sow-arrow-3963050.webp?v=1790211191&width=1445" alt="Montezuma's Milk Chocolate Gingerbread - 90g from Montezuma's | Available at Sow & Arrow" srcset="//sowandarrow.com/cdn/shop/files/montezumas-milk-chocolate-gingerbread-90g-from-montezumas-available-at-sow-arrow-3963050.webp?v=1790211191&width=200 200w, //sowandarrow.com/cdn/shop/files/montezumas-milk-chocolate-gingerbread-90g-from-montezumas-available-at-sow-arrow-3963050.webp?v=1790211191&width=300 300w, //sowandarrow.com/cdn/shop/files/montezumas-milk-chocolate-gingerbread-90g-from-montezumas-available-at-sow-arrow-3963050.webp?v=1790211191&width=400 400w, //sowandarrow.com/cdn/shop/files/montezumas-milk-chocolate-gingerbread-90g-from-montezumas-available-at-sow-arrow-3963050.webp?v=1790211191&width=500 500w, //sowandarrow.com/cdn/shop/files/montezumas-milk-chocolate-gingerbread-90g-from-montezumas-available-at-sow-arrow-3963050.webp?v=1790211191&width=600 600w, //sowandarrow.com/cdn/shop/files/montezumas-milk-chocolate-gingerbread-90g-from-montezumas-available-at-sow-arrow-3963050.webp?v=1790211191&width=700 700w, //sowandarrow.com/cdn/shop/files/montezumas-milk-chocolate-gingerbread-90g-from-montezumas-available-at-sow-arrow-3963050.webp?v=1790211191&width=800 800w, //sowandarrow.com/cdn/shop/files/montezumas-milk-chocolate-gingerbread-90g-from-montezumas-available-at-sow-arrow-3963050.webp?v=1790211191&width=900 900w, //sowandarrow.com/cdn/shop/files/montezumas-milk-chocolate-gingerbread-90g-from-montezumas-available-at-sow-arrow-3963050.webp?v=1790211191&width=1000 1000w, //sowandarrow.com/cdn/shop/files/montezumas-milk-chocolate-gingerbread-90g-from-montezumas-available-at-sow-arrow-3963050.webp?v=1790211191&width=1200 1200w, //sowandarrow.com/cdn/shop/files/montezumas-milk-chocolate-gingerbread-90g-from-montezumas-available-at-sow-arrow-3963050.webp?v=1790211191&width=1400 1400w" width="1445" height="1445" sizes="(max-width: 699px) calc(50vw - 24px), 268px" class="product-card__image product-card__image--primary size-full object-cover aspect-square"></a><div class="product-card__quick-buy "><product-form><form method="post" action="/cart/add" id="product_form_16207781626234" accept-charset="UTF-8" class="shopify-product-form" enctype="multipart/form-data"><input type="hidden" name="form_type" value="product" /><input type="hidden" name="utf8" value="â" />
2387<input type="hidden" name="id" value="57281611334010"> 2388<button type="submit" class="touch:hidden button w-full" style="--button-background: 250 244 240;--button-text-color: 50 30 30;" ><button-content class="button__content" up-text="Add to cart">Add to cart</button-content></button><button type="submit" class="block tap-area no-touch:hidden"> 2389 <span class="sr-only">Add to cart</span> 2390 2391 <button-content><svg 2392 aria-hidden="true" 2393 focusable="false" 2394 width="16" 2395 fill="none" 2396 class="icon icon-cart" 2397 2398 part="icon" 2399 viewBox="0 0 16 16" 2400 > 2401 <path stroke-width="1" stroke="currentColor" d="m1.5 14.5 1-12h11l1 12h-13Z"/> 2402 <path stroke-width="1" stroke="currentColor" d="M5.5 5c.238.833 1.071 2.5 2.5 2.5s2.262-1.667 2.5-2.5"/> 2403 </svg></button-content> 2404 </button><input type="hidden" name="product-id" value="16207781626234" /><input type="hidden" name="section-id" value="sections--25965682557306__cart-drawer" /></form></product-form></div></div><div class="product-card__info "> 2405 <div class="v-stack gap-2.5 justify-items-start text-start"> 2406 <div class="v-stack gap-0.5"> 2407 <div class="v-stack gap-2.5"><div class="v-stack gap-1"> 2408 <div class="v-stack gap-0.5"><a href="/collections/vendors?q=Montezuma%27s" class="vendor subheading text-subdued">Montezuma's</a><a href="/products/montezuma-dark-cherry-and-pistachio-90g-copy" class="product-title subheading " data-instant>Montezuma's Milk Chocolate Gingerbread - 90g</a> 2409 </div></div> 2410 </div><div class="v-stack gap-1"><price-list class="price-list "><sale-price class="subheading text-subdued"> 2411 <span class="sr-only">Sale price</span>£4.49</sale-price></price-list> 2412</div></div></div> 2413 </div></product-card><product-card class="product-card product-card--bordered product-card--info-outside color-scheme color-scheme--scheme-1" handle="montezuma-dark-cherry-and-pistachio-90g"><div class="product-card__figure"><badge-list class="badge-list badge-list--column align-start place-self-start"><span class="badge badge--custom badge--new ">New</span></badge-list><a href="/products/montezuma-dark-cherry-and-pistachio-90g" class="product-card__media" data-instant><img src="//sowandarrow.com/cdn/shop/files/montezumas-dark-cherry-and-pistachio-90g-from-montezumas-available-at-sow-arrow-6115485.webp?v=1790211189&width=1445" alt="Montezuma's - Dark Cherry and Pistachio - 90g from Montezuma's | Available at Sow & Arrow" srcset="//sowandarrow.com/cdn/shop/files/montezumas-dark-cherry-and-pistachio-90g-from-montezumas-available-at-sow-arrow-6115485.webp?v=1790211189&width=200 200w, //sowandarrow.com/cdn/shop/files/montezumas-dark-cherry-and-pistachio-90g-from-montezumas-available-at-sow-arrow-6115485.webp?v=1790211189&width=300 300w, //sowandarrow.com/cdn/shop/files/montezumas-dark-cherry-and-pistachio-90g-from-montezumas-available-at-sow-arrow-6115485.webp?v=1790211189&width=400 400w, //sowandarrow.com/cdn/shop/files/montezumas-dark-cherry-and-pistachio-90g-from-montezumas-available-at-sow-arrow-6115485.webp?v=1790211189&width=500 500w, //sowandarrow.com/cdn/shop/files/montezumas-dark-cherry-and-pistachio-90g-from-montezumas-available-at-sow-arrow-6115485.webp?v=1790211189&width=600 600w, //sowandarrow.com/cdn/shop/files/montezumas-dark-cherry-and-pistachio-90g-from-montezumas-available-at-sow-arrow-6115485.webp?v=1790211189&width=700 700w, //sowandarrow.com/cdn/shop/files/montezumas-dark-cherry-and-pistachio-90g-from-montezumas-available-at-sow-arrow-6115485.webp?v=1790211189&width=800 800w, //sowandarrow.com/cdn/shop/files/montezumas-dark-cherry-and-pistachio-90g-from-montezumas-available-at-sow-arrow-6115485.webp?v=1790211189&width=900 900w, //sowandarrow.com/cdn/shop/files/montezumas-dark-cherry-and-pistachio-90g-from-montezumas-available-at-sow-arrow-6115485.webp?v=1790211189&width=1000 1000w, //sowandarrow.com/cdn/shop/files/montezumas-dark-cherry-and-pistachio-90g-from-montezumas-available-at-sow-arrow-6115485.webp?v=1790211189&width=1200 1200w, //sowandarrow.com/cdn/shop/files/montezumas-dark-cherry-and-pistachio-90g-from-montezumas-available-at-sow-arrow-6115485.webp?v=1790211189&width=1400 1400w" width="1445" height="1445" sizes="(max-width: 699px) calc(50vw - 24px), 268px" class="product-card__image product-card__image--primary size-full object-cover aspect-square"></a><div class="product-card__quick-buy "><product-form><form method="post" action="/cart/add" id="product_form_16207780905338" accept-charset="UTF-8" class="shopify-product-form" enctype="multipart/form-data"><input type="hidden" name="form_type" value="product" /><input type="hidden" name="utf8" value="â" />
2413<input type="hidden" name="id" value="57281607500154"> 2414<button type="submit" class="touch:hidden button w-full" style="--button-background: 250 244 240;--button-text-color: 50 30 30;" ><button-content class="button__content" up-text="Add to cart">Add to cart</button-content></button><button type="submit" class="block tap-area no-touch:hidden"> 2415 <span class="sr-only">Add to cart</span> 2416 2417 <button-content><svg 2418 aria-hidden="true" 2419 focusable="false" 2420 width="16" 2421 fill="none" 2422 class="icon icon-cart" 2423 2424 part="icon" 2425 viewBox="0 0 16 16" 2426 > 2427 <path stroke-width="1" stroke="currentColor" d="m1.5 14.5 1-12h11l1 12h-13Z"/> 2428 <path stroke-width="1" stroke="currentColor" d="M5.5 5c.238.833 1.071 2.5 2.5 2.5s2.262-1.667 2.5-2.5"/> 2429 </svg></button-content> 2430 </button><input type="hidden" name="product-id" value="16207780905338" /><input type="hidden" name="section-id" value="sections--25965682557306__cart-drawer" /></form></product-form></div></div><div class="product-card__info "> 2431 <div class="v-stack gap-2.5 justify-items-start text-start"> 2432 <div class="v-stack gap-0.5"> 2433 <div class="v-stack gap-2.5"><div class="v-stack gap-1"> 2434 <div class="v-stack gap-0.5"><a href="/collections/vendors?q=Montezuma%27s" class="vendor subheading text-subdued">Montezuma's</a><a href="/products/montezuma-dark-cherry-and-pistachio-90g" class="product-title subheading " data-instant>Montezuma's - Dark Cherry and Pistachio - 90g</a> 2435 </div></div> 2436 </div><div class="v-stack gap-1"><price-list class="price-list "><sale-price class="subheading text-subdued"> 2437 <span class="sr-only">Sale price</span>£4.49</sale-price></price-list> 2438</div></div></div> 2439 </div></product-card><product-card class="product-card product-card--bordered product-card--info-outside color-scheme color-scheme--scheme-1" handle="montezuma-blonde-cinnamon-90g"><div class="product-card__figure"><badge-list class="badge-list badge-list--column align-start place-self-start"><span class="badge badge--custom badge--new ">New</span></badge-list><a href="/products/montezuma-blonde-cinnamon-90g" class="product-card__media" data-instant><img src="//sowandarrow.com/cdn/shop/files/montezumas-blonde-cinnamon-90g-from-montezumas-available-at-sow-arrow-6315176.webp?v=1790211192&width=1445" alt="Montezuma's - Blonde Cinnamon - 90g from Montezuma's | Available at Sow & Arrow" srcset="//sowandarrow.com/cdn/shop/files/montezumas-blonde-cinnamon-90g-from-montezumas-available-at-sow-arrow-6315176.webp?v=1790211192&width=200 200w, //sowandarrow.com/cdn/shop/files/montezumas-blonde-cinnamon-90g-from-montezumas-available-at-sow-arrow-6315176.webp?v=1790211192&width=300 300w, //sowandarrow.com/cdn/shop/files/montezumas-blonde-cinnamon-90g-from-montezumas-available-at-sow-arrow-6315176.webp?v=1790211192&width=400 400w, //sowandarrow.com/cdn/shop/files/montezumas-blonde-cinnamon-90g-from-montezumas-available-at-sow-arrow-6315176.webp?v=1790211192&width=500 500w, //sowandarrow.com/cdn/shop/files/montezumas-blonde-cinnamon-90g-from-montezumas-available-at-sow-arrow-6315176.webp?v=1790211192&width=600 600w, //sowandarrow.com/cdn/shop/files/montezumas-blonde-cinnamon-90g-from-montezumas-available-at-sow-arrow-6315176.webp?v=1790211192&width=700 700w, //sowandarrow.com/cdn/shop/files/montezumas-blonde-cinnamon-90g-from-montezumas-available-at-sow-arrow-6315176.webp?v=1790211192&width=800 800w, //sowandarrow.com/cdn/shop/files/montezumas-blonde-cinnamon-90g-from-montezumas-available-at-sow-arrow-6315176.webp?v=1790211192&width=900 900w, //sowandarrow.com/cdn/shop/files/montezumas-blonde-cinnamon-90g-from-montezumas-available-at-sow-arrow-6315176.webp?v=1790211192&width=1000 1000w, //sowandarrow.com/cdn/shop/files/montezumas-blonde-cinnamon-90g-from-montezumas-available-at-sow-arrow-6315176.webp?v=1790211192&width=1200 1200w, //sowandarrow.com/cdn/shop/files/montezumas-blonde-cinnamon-90g-from-montezumas-available-at-sow-arrow-6315176.webp?v=1790211192&width=1400 1400w" width="1445" height="1445" loading="lazy" sizes="auto, (max-width: 699px) calc(50vw - 24px), 268px" class="product-card__image product-card__image--primary size-full object-cover aspect-square"></a><div class="product-card__quick-buy "><product-form><form method="post" action="/cart/add" id="product_form_16207780348282" accept-charset="UTF-8" class="shopify-product-form" enctype="multipart/form-data"><input type="hidden" name="form_type" value="product" /><input type="hidden" name="utf8" value="â" />
2439<input type="hidden" name="id" value="57281606582650"> 2440<button type="submit" class="touch:hidden button w-full" style="--button-background: 250 244 240;--button-text-color: 50 30 30;" ><button-content class="button__content" up-text="Add to cart">Add to cart</button-content></button><button type="submit" class="block tap-area no-touch:hidden"> 2441 <span class="sr-only">Add to cart</span> 2442 2443 <button-content><svg 2444 aria-hidden="true" 2445 focusable="false" 2446 width="16" 2447 fill="none" 2448 class="icon icon-cart" 2449 2450 part="icon" 2451 viewBox="0 0 16 16" 2452 > 2453 <path stroke-width="1" stroke="currentColor" d="m1.5 14.5 1-12h11l1 12h-13Z"/> 2454 <path stroke-width="1" stroke="currentColor" d="M5.5 5c.238.833 1.071 2.5 2.5 2.5s2.262-1.667 2.5-2.5"/> 2455 </svg></button-content> 2456 </button><input type="hidden" name="product-id" value="16207780348282" /><input type="hidden" name="section-id" value="sections--25965682557306__cart-drawer" /></form></product-form></div></div><div class="product-card__info "> 2457 <div class="v-stack gap-2.5 justify-items-start text-start"> 2458 <div class="v-stack gap-0.5"> 2459 <div class="v-stack gap-2.5"><div class="v-stack gap-1"> 2460 <div class="v-stack gap-0.5"><a href="/collections/vendors?q=Montezuma%27s" class="vendor subheading text-subdued">Montezuma's</a><a href="/products/montezuma-blonde-cinnamon-90g" class="product-title subheading " data-instant>Montezuma's - Blonde Cinnamon - 90g</a> 2461 </div></div> 2462 </div><div class="v-stack gap-1"><price-list class="price-list "><sale-price class="subheading text-subdued"> 2463 <span class="sr-only">Sale price</span>£4.49</sale-price></price-list> 2464</div></div></div> 2465 </div></product-card></product-list> 2466<a class="self-start button button--sm button--outline" style="--button-text-color: var(--button-background-primary);" href="/collections/new" ><button-content class="button__content" up-text="View All">View All</button-content></a></div> 2467</div> 2468</div></div> 2469 </x-tabs><style> 2470 /* Drawer layout */ 2471 .drawer--cart .drawer__body { 2472 display:flex; 2473 flex-direction:column; 2474 } 2475 2476 /* Cross-sell wrapper */ 2477 .cart-cross-sell-widget{ 2478 display:block; 2479 margin-top:auto; 2480 will-change:opacity,transform; 2481 contain:layout style; 2482 overflow:visible; 2483 } 2484 2485 /* Hidden state: keep in flow so JS can animate, just make it invisible */ 2486 .cart-cross-sell-widget[hidden]{ 2487 display:none!important; 2488 opacity:0!important; 2489 pointer-events:none; 2490 transform:translateY(10px); 2491 } 2492 </style> 2493 2494 <style> 2495 /* header â carousel spacing halved */ 2496 #cart-cross-sell-carousel-sections--25965682557306__cart-drawer-wrapper > .h-stack { 2497 margin-bottom: 0.75rem; 2498 margin-top: 0.75rem; 2499 } 2500 /* smaller product card */ 2501 .product-cross-sell { 2502 border: 1px solid #dcd7d3; 2503 border-radius: 4px; 2504 background: #fff; 2505 display: flex; 2506 align-items: center; 2507 gap: 0.5rem; 2508 padding: 0.75rem; 2509 margin-bottom: 0.5rem; 2510 } 2511 .product-cross-sell img { 2512 max-width: 80px; 2513 max-height: 80px; 2514 border-radius: 4px; 2515 object-fit: cover; 2516 } 2517 /* Price + stars container */ 2518 .product-cross-sell__price-wrapper { 2519 display: flex; 2520 align-items: center; 2521 gap: 0.75rem; 2522 } 2523 .product-cross-sell__price { 2524 font-size: .95rem; 2525 color: rgb(var(--text-color) / .6); 2526 } 2527 .star-rating { 2528 display: flex; 2529 align-items: center; 2530 } 2531 #cart-cross-sell-carousel-sections--25965682557306__cart-drawer-wrapper .star-rating span { 2532 margin-left: 0.25rem; 2533 font-size: .85rem; 2534 color: rgb(var(--text-color)/.6); 2535 line-height: 1; 2536 } 2537 .product-cross-sell__form button { 2538 align-self: flex-start; 2539 } 2540 /* loading state */ 2541 .cross-sell-loading { 2542 padding: 1rem; 2543 text-align: center; 2544 } 2545 .cross-sell-loading::before { 2546 content: ''; 2547 display: block; 2548 margin: 0 auto 0.5rem;
2549 width: 20px; 2550 height: 20px; 2551 border: 3px solid #dcd7d3; 2552 border-top-color: transparent; 2553 border-radius: 50%; 2554 animation: spin 1s linear infinite; 2555 } 2556 @keyframes spin { to { transform: rotate(360deg) } } 2557 /* Accordion & nav arrows */ 2558 .accordion__summary { display: flex; align-items: center; } 2559 .accordion__summary > span:first-child { margin-right: .5rem; } 2560 .accordion__summary .h-stack { margin-left: auto; display: flex; gap: 5px; } 2561 #cart-cross-sell-carousel-sections--25965682557306__cart-drawer-wrapper .accordion__disclosure:not([open]) .circle-button { 2562 opacity: 0 !important; pointer-events: none; 2563 } 2564 #cart-cross-sell-carousel-sections--25965682557306__cart-drawer-wrapper .circle-button.at-start, 2565 #cart-cross-sell-carousel-sections--25965682557306__cart-drawer-wrapper .circle-button.at-end { 2566 opacity: 0.6 !important; cursor: default !important; 2567 pointer-events: none !important; 2568 } 2569 #cart-cross-sell-carousel-sections--25965682557306__cart-drawer-wrapper .circle-button.at-start:hover, 2570 #cart-cross-sell-carousel-sections--25965682557306__cart-drawer-wrapper .circle-button.at-end:hover, 2571 #cart-cross-sell-carousel-sections--25965682557306__cart-drawer-wrapper .circle-button.at-start:focus, 2572 #cart-cross-sell-carousel-sections--25965682557306__cart-drawer-wrapper .circle-button.at-end:focus, 2573 #cart-cross-sell-carousel-sections--25965682557306__cart-drawer-wrapper .circle-button.at-start:active, 2574 #cart-cross-sell-carousel-sections--25965682557306__cart-drawer-wrapper .circle-button.at-end:active { 2575 background: transparent !important; 2576 box-shadow: none !important; 2577 transform: none !important; 2578 border-color: inherit !important; 2579 color: inherit !important; 2580 } 2581 #cart-cross-sell-carousel-sections--25965682557306__cart-drawer-wrapper .circle-button.at-start svg, 2582 #cart-cross-sell-carousel-sections--25965682557306__cart-drawer-wrapper .circle-button.at-end svg { 2583 fill: currentColor !important; 2584 } 2585</style> 2586 2587<div 2588 id="cart-cross-sell-carousel-sections--25965682557306__cart-drawer-wrapper" 2589 class="cart-cross-sell-widget cart-cross-sell-widget--v2" 2590 hidden 2591 data-rebuy-widget-id="YOUR_DEFAULT_CART_WIDGET_ID" 2592><div id="cart-cross-sell-carousel-sections--25965682557306__cart-drawer-container"> 2593 <div class="cart-cross-sell-placeholder cross-sell-loading">Loading recommendationsâ¦</div> 2594 <div class="cart-v2-recommendations" data-cart-v2-recommendations hidden> 2595 <section class="cart-v2-recommendation-section" aria-labelledby="cart-cross-sell-carousel-sections--25965682557306__cart-drawer-community-title"> 2596 <div class="cart-v2-recommendation-heading h-stack justify-between gap-3"> 2597 <p id="cart-cross-sell-carousel-sections--25965682557306__cart-drawer-community-title" class="h6">Community favourites</p> 2598 <div class="h-stack gap-2 hidden md:flex"> 2599 <button id="cart-cross-sell-carousel-sections--25965682557306__cart-drawer-community-prev" class="circle-button" type="button" aria-controls="cart-cross-sell-carousel-sections--25965682557306__cart-drawer-community-carousel"> 2600 <span class="sr-only">Previous</span><svg 2601 aria-hidden="true" 2602 focusable="false" 2603 width="9" 2604 class="icon icon-big-arrow-left icon--direction-aware" 2605 2606 part="icon"
2607 viewBox="0 0 36 36" 2608 > 2609 <path fill="none" stroke="currentColor" stroke-width="2" d="M35 18H3M19.5 34.5 3 18 19.5 1.5"/> 2610 </svg></button> 2611 <button id="cart-cross-sell-carousel-sections--25965682557306__cart-drawer-community-next" class="circle-button" type="button" aria-controls="cart-cross-sell-carousel-sections--25965682557306__cart-drawer-community-carousel"> 2612 <span class="sr-only">Next</span><svg 2613 aria-hidden="true" 2614 focusable="false" 2615 width="9" 2616 class="icon icon-big-arrow-right icon--direction-aware" 2617 2618 part="icon" 2619 viewBox="0 0 36 36" 2620 > 2621 <path fill="none" stroke="currentColor" stroke-width="2" d="M1 18h32M16.5 1.5 33 18 16.5 34.5"/> 2622 </svg></button> 2623 </div> 2624 </div> 2625 <div id="cart-cross-sell-carousel-sections--25965682557306__cart-drawer-community"></div> 2626 </section> 2627 2628 <section class="cart-v2-recommendation-section" aria-labelledby="cart-cross-sell-carousel-sections--25965682557306__cart-drawer-more-title"> 2629 <div class="cart-v2-recommendation-heading h-stack justify-between gap-3"> 2630 <p id="cart-cross-sell-carousel-sections--25965682557306__cart-drawer-more-title" class="h6">You may also like</p> 2631 <div class="h-stack gap-2 hidden md:flex"> 2632 <button id="cart-cross-sell-carousel-sections--25965682557306__cart-drawer-prev" class="circle-button" type="button" aria-controls="cart-cross-sell-carousel-sections--25965682557306__cart-drawer"> 2633 <span class="sr-only">Previous</span><svg 2634 aria-hidden="true" 2635 focusable="false" 2636 width="9" 2637 class="icon icon-big-arrow-left icon--direction-aware" 2638 2639 part="icon"
2640 viewBox="0 0 36 36" 2641 > 2642 <path fill="none" stroke="currentColor" stroke-width="2" d="M35 18H3M19.5 34.5 3 18 19.5 1.5"/> 2643 </svg></button> 2644 <button id="cart-cross-sell-carousel-sections--25965682557306__cart-drawer-next" class="circle-button" type="button" aria-controls="cart-cross-sell-carousel-sections--25965682557306__cart-drawer"> 2645 <span class="sr-only">Next</span><svg 2646 aria-hidden="true" 2647 focusable="false" 2648 width="9" 2649 class="icon icon-big-arrow-right icon--direction-aware" 2650 2651 part="icon" 2652 viewBox="0 0 36 36" 2653 > 2654 <path fill="none" stroke="currentColor" stroke-width="2" d="M1 18h32M16.5 1.5 33 18 16.5 34.5"/> 2655 </svg></button> 2656 </div> 2657 </div> 2658 <div id="cart-cross-sell-carousel-sections--25965682557306__cart-drawer-strip"></div> 2659 </section> 2660 </div> 2661 </div></div> 2662 2663<template id="cart-cross-sell-carousel-sections--25965682557306__cart-drawer-template"> 2664 <div class="product-cross-sell snap-start"> 2665 <a href="#" data-instant class="product-cross-sell__link"> 2666 <img src="" alt="" width="80" height="80"> 2667 </a> 2668 <div class="v-stack gap-1"> 2669 <a href="#" class="subheading" data-instant></a> 2670 <div class="product-cross-sell__price-wrapper"> 2671 <span class="product-cross-sell__price"></span> 2672 <span data-loox-rating class="star-rating"></span> 2673 </div> 2674 <div class="product-cross-sell__form"> 2675 <button type="button" class="link subheading subheading-xs action-button" aria-controls=""></button> 2676 </div> 2677 <quick-buy-modal 2678 id="" 2679 product-url="" 2680 class="modal modal--quick-buy color-scheme color-scheme--scheme-1" 2681 ></quick-buy-modal> 2682 </div> 2683 </div> 2684</template> 2685
2686<script 2687 data-cross-sell="sections--25965682557306__cart-drawer" 2688> 2689(function () { 2690 /* avoid double-instantiation */ 2691 const KEY = '__crossSell_sections--25965682557306__cart-drawer'; 2692 if (window[KEY]) { window[KEY].init(); return; } 2693 2694 /* ============================================================ 2695 Core 2696 ============================================================ */ 2697 let inCartIds = new Set(); 2698 let isLoading = false; 2699 let navigationResizeObservers = []; 2700 const cartV2 = true; 2701 const liquidCardRequests = new Map(); 2702 2703 async function fetchLiquidProductCards(recs) { 2704 const productIds = Array.from(new Set(recs.map((rec) => String(rec.productId || rec.id || '')).filter(Boolean))); 2705 if (!productIds.length) return []; 2706 2707 const requestKey = productIds.join(','); 2708 if (!liquidCardRequests.has(requestKey)) { 2709 liquidCardRequests.set(requestKey, (async () => { 2710 const query = productIds.map((id) => `id:${id}`).join(' OR '); 2711 const requestUrl = new URL(`${window.Shopify.routes.root}search`, window.location.origin); 2712 requestUrl.searchParams.set('type', 'product'); 2713 requestUrl.searchParams.set('q', query); 2714 requestUrl.searchParams.set('section_id', 'cart-recommendation-card-renderer'); 2715 2716 const response = await fetch(`${requestUrl.pathname}${requestUrl.search}`, { 2717 headers: { Accept: 'text/html' }, 2718 priority: 'low' 2719 }); 2720 if (!response.ok) throw new Error(`Liquid card request returned ${response.status}`); 2721 2722 const html = await response.text(); 2723 const parsedDocument = new DOMParser().parseFromString(html, 'text/html'); 2724 const cardContainer = parsedDocument.querySelector('[data-cart-v2-liquid-cards]'); 2725 if (!cardContainer) throw new Error('Liquid card response is missing its container'); 2726 2727 return Array.from(cardContainer.querySelectorAll(':scope > [data-cart-v2-liquid-card]')); 2728 })()); 2729 } 2730 2731 const cards = await liquidCardRequests.get(requestKey); 2732 const cardsByProductId = new Map( 2733 cards.map((card) => [String(card.dataset.productId || ''), card]) 2734 ); 2735 2736 return recs 2737 .map((rec) => { 2738 const card = cardsByProductId.get(String(rec.productId || rec.id || '')); 2739 return card ? { rec, card: document.importNode(card, true) } : null; 2740 }) 2741 .filter(Boolean); 2742 } 2743 2744 function toCardRecommendation(rec) { 2745 const selectedVariantId = rec?.selected_or_first_available_variant_id || rec?.variants?.[0]?.id || null; 2746 const variantCount = Number(rec?.variant_count || rec?.variants?.length || 0); 2747 const available = typeof rec?.available === 'boolean' ? rec.available : (rec?.variants?.[0]?.available ?? true); 2748 const priceCents = Number.isFinite(Number(rec?.price_min)) ? Number(rec.price_min) : rec?.variants?.[0]?.price != null ? Math.round(parseFloat(rec.variants[0].price) * 100) : null; 2749 2750 return { 2751 id: rec?.id ?? rec?.product_id ?? null, 2752 productId: rec?.product_id ?? rec?.id ?? null, 2753 title: rec?.title || '', 2754 vendor: rec?.vendor || '', 2755 description: rec?.short_description || rec?.description || rec?.body_html || '', 2756 url: rec?.url || rec?.link || (rec?.handle ? `/products/${rec.handle}` : null), 2757 image: { 2758 src: rec?.featured_image?.url || rec?.image?.src || rec?.image?.url || rec?.image || rec?.images?.[0]?.src || rec?.images?.[0]?.url || '', 2759 alt: rec?.featured_image?.alt || rec?.image?.alt || rec?.title || '' 2760 }, 2761 rating: rec?.metafields?.loox?.avg_rating ?? null, 2762 variantId: selectedVariantId, 2763 variantCount, 2764 available, 2765 priceCents, 2766 reason: rec?.reason || null 2767 }; 2768 } 2769 2770 function getRecSessionId() { 2771 let id; 2772 try { id = sessionStorage.getItem('rec_session_id'); } catch {} 2773 if (!id) { 2774 id = window.__recSessionId || (crypto.randomUUID ? crypto.randomUUID() : `rec-session-${Date.now()}`); 2775 try { sessionStorage.setItem('rec_session_id', id); } catch {} 2776 } 2777 window.__recSessionId = id; 2778 return id; 2779 } 2780 2781 function sendRecEvent(payload) { 2782 const body = JSON.stringify({ 2783 ...payload, 2784 session_id: getRecSessionId(), 2785 page_path: window.location.pathname, 2786 timestamp: new Date().toISOString() 2787 }); 2788
2789 const endpoint = 'https://api.sowandarrow.com/recommendations'; 2790 const pingUrl = `${endpoint}?rx=1&d=${encodeURIComponent(body)}`; 2791 const img = new Image(); 2792 window.__recoEventPings = window.__recoEventPings || []; 2793 window.__recoEventPings.push(img); 2794 img.onload = img.onerror = () => { 2795 window.__recoEventPings = window.__recoEventPings.filter((x) => x !== img); 2796 }; 2797 img.src = pingUrl; 2798 } 2799 2800 const sentImpressions = new Set(); 2801 function observeRecImpression(el, payload) { 2802 if (!el) return; 2803 const key = [ 2804 payload.placement || 'unknown', 2805 payload.request_uuid || 'no-request', 2806 payload.variant_id || payload.product_id || 'no-product' 2807 ].join('|'); 2808 if (sentImpressions.has(key)) return; 2809 2810 const observer = new IntersectionObserver((entries, obs) => { 2811 if (!entries.some(entry => entry.isIntersecting && entry.intersectionRatio >= 0.35)) return; 2812 sentImpressions.add(key); 2813 sendRecEvent({ ...payload, event_type: 'recommendation_impression' }); 2814 obs.disconnect(); 2815 }, { threshold: [0.35] }); 2816 2817 observer.observe(el); 2818 } 2819 2820 const api = { 2821 async init () { 2822 if (isLoading) return; 2823 2824 const container = document.getElementById('cart-cross-sell-carousel-sections--25965682557306__cart-drawer-container'); 2825 if (!container) { console.warn('[Cross-sell] container not found'); return; } 2826 2827 const cartDrawer = document.getElementById('cart-drawer'); 2828 if (cartDrawer && !cartDrawer.hasAttribute('open')) { 2829 return; 2830 } 2831 2832 const tabs = document.querySelector('x-tabs.tab-pills'); 2833 if (tabs && tabs.getAttribute('selected-index') !== '0') { 2834 return; 2835 } 2836 2837 isLoading = true; 2838 try { 2839 navigationResizeObservers.forEach(observer => observer.disconnect()); 2840 navigationResizeObservers = []; 2841 2842 /* 0âââmeasure one template card off-screen to lock spinner height */ 2843 const probe = document.createElement('div'); 2844 probe.style.cssText = 'position:absolute;visibility:hidden;pointer-events:none'; 2845 probe.appendChild( 2846 document.getElementById('cart-cross-sell-carousel-sections--25965682557306__cart-drawer-template').content.cloneNode(true) 2847 ); 2848 document.body.appendChild(probe); 2849 const phHeight = probe.offsetHeight + 8; 2850 probe.remove(); 2851 2852 /* 1âââplaceholder */ 2853 if (cartV2) { 2854 const placeholder = container.querySelector('.cross-sell-loading'); 2855 if (placeholder) placeholder.style.height = `${phHeight}px`; 2856 } else { 2857 container.innerHTML = ` 2858 <div class="cart-cross-sell-placeholder cross-sell-loading" 2859 style="height:${phHeight}px"> 2860 Loading recommendations⦠2861 </div>`; 2862 } 2863 2864 /* 2âââget cart contents */ 2865 let cart = { items: [], item_count: 0, items_subtotal_price: 0 };
2866 try { 2867 cart = await fetch('/cart.js').then(r => r.json()); 2868 } catch (err) { console.warn('[Cross-sell] /cart.js failed', err); } 2869 const customerProfile = null; 2870 2871 const inCartPids = new Set(cart.items.map(item => String(item.product_id))); 2872 const inCartVids = new Set(cart.items.map(item => String(item.variant_id))); 2873 inCartIds.clear(); 2874 inCartIds = new Set([...inCartPids, ...inCartVids]); 2875 2876 /* 3âââfetch recommendations */ 2877 let recs = []; 2878 let requestUuid = null; 2879 let sourceProductIdsForEvent = ''; 2880 try { 2881 const params = new URLSearchParams(); 2882 params.set('type', 'cart'); 2883 params.set('session_id', getRecSessionId()); 2884 2885 const contextProductIds = Array.from(new Set((cart.items || []).map((item) => String(item.product_id)).filter(Boolean))); 2886 if (contextProductIds.length > 0) { 2887 const productContext = contextProductIds.join(','); 2888 params.set('shopify_product_ids', productContext); 2889 sourceProductIdsForEvent = productContext; 2890 } else { 2891 sourceProductIdsForEvent = ''; 2892 } 2893 2894 2895 2896 if (customerProfile) { 2897 params.set('customer_profile', typeof customerProfile === 'string' ? customerProfile : JSON.stringify(customerProfile)); 2898 } 2899 2900 params.set('metafields', 'yes'); 2901 params.set('variant_metafields', 'true'); 2902 params.set('format', 'pretty'); 2903 /* Ask for a few spare candidates because Shopify search can omit a 2904 product that the recommendation service still knows about. */ 2905 params.set('limit', '16'); 2906 params.set('time', new Date().toISOString()); 2907 requestUuid = crypto.randomUUID ? crypto.randomUUID() : `uuid-${Date.now()}`; 2908 params.set('uuid', requestUuid); 2909 params.set('url', window.location.pathname); 2910 const localeCountry = ((navigator.language || '').split('-').pop() || '').toUpperCase(); 2911 const cc = /^[A-Z]{2}$/.test(localeCountry) ? localeCountry : "GB"; 2912 if (cc) params.set('country_code', cc); 2913 2914 console.log('[Cart]', `https://api.sowandarrow.com/rec
2914ommendations?${params}`); 2915 const data = await fetch(`https://api.sowandarrow.com/recommendations?${params}`,{credentials:'include'}) 2916 .then(r => r.json()); 2917 2918 const responseRequestUuid = data.request_uuid || requestUuid; 2919 const source = Array.isArray(data.products) ? data.products : []; 2920 recs = source 2921 .map(toCardRecommendation) 2922 .filter((rec) => rec.url && rec.variantId) 2923 .filter((rec) => rec.available) 2924 .filter((rec) => !inCartIds.has(String(rec.productId)) && !inCartIds.has(String(rec.variantId))) 2925 .map((rec) => ({ ...rec, __request_uuid: responseRequestUuid })) 2926 .slice(0, 16); 2927 2928 /* A narrow cart context can legitimately return only one or two 2929 matches. Backfill it with the engine's context-free cart picks so 2930 both native Liquid recommendation rows remain useful. */ 2931 if (recs.length < 16 && contextProductIds.length > 0) { 2932 const fallbackParams = new URLSearchParams(params); 2933 fallbackParams.delete('shopify_product_ids'); 2934 fallbackParams.set('limit', '20'); 2935 const fallbackRequestUuid = crypto.randomUUID ? crypto.randomUUID() : `uuid-${Date.now()}-fallback`; 2936 fallbackParams.set('uuid', fallbackRequestUuid); 2937 2938 const fallbackData = await fetch(`https://api.sowandarrow.com/rec
2938ommendations?${fallbackParams}`, { credentials: 'include' }) 2939 .then(r => r.json()); 2940 const fallbackResponseUuid = fallbackData.request_uuid || fallbackRequestUuid; 2941 const seenProductIds = new Set(recs.map(rec => String(rec.productId))); 2942 2943 const fallbackRecs = (Array.isArray(fallbackData.products) ? fallbackData.products : []) 2944 .map(toCardRecommendation) 2945 .filter((rec) => rec.url && rec.variantId) 2946 .filter((rec) => rec.available) 2947 .filter((rec) => !inCartIds.has(String(rec.productId)) && !inCartIds.has(String(rec.variantId))) 2948 .filter((rec) => { 2949 const productId = String(rec.productId); 2950 if (seenProductIds.has(productId)) return false; 2951 seenProductIds.add(productId); 2952 return true; 2953 }) 2954 .map((rec) => ({ ...rec, __request_uuid: fallbackResponseUuid })); 2955 2956 recs = [...recs, ...fallbackRecs].slice(0, 16); 2957 } 2958 } catch (err) { 2959 console.error('[Cart] rec fetch error', err); 2960 } 2961 2962 if (!recs.length) { 2963 document.getElementById('cart-cross-sell-carousel-sections--25965682557306__cart-drawer-wrapper')?.remove(); 2964 isLoading = false; 2965 return; 2966 } 2967 2968 /* 4âââbuild recommendation cards */ 2969 const tplHTML = document.getElementById('cart-cross-sell-carousel-sections--25965682557306__cart-drawer-template').innerHTML; 2970 2971 const buildCard = async (rec, cardClass = '') => { 2972 const card = document.createRange() 2973 .createContextualFragment(tplHTML) 2974 .firstElementChild; 2975 if (cardClass) card.classList.add(cardClass); 2976 2977 /* link / image / title / price */ 2978 const imageLink = card.querySelector('a.product-cross-sell__link'); 2979 imageLink.href = rec.url; 2980 const img = card.querySelector('img'); 2981 img.src = rec.image.src; img.alt = rec.image.alt; 2982 2983 const titleEl = card.querySelector('a.subheading'); 2984 titleEl.href = rec.url; titleEl.textContent = rec.title; 2985 2986 const vendorEl = card.querySelector('.product-cross-sell__vendor'); 2987 if (vendorEl) { 2988 vendorEl.textContent = rec.vendor; 2989 vendorEl.hidden = !rec.vendor; 2990 } 2991 2992 const trackClick = () => { 2993 sendRecEvent({ 2994 event_type: 'recommendation_click', 2995 recommendation_type: rec.reason || 'cart', 2996 placement: 'cart-cross-sell', 2997 request_uuid: rec.__request_uuid || requestUuid, 2998 source_product_ids: sourceProductIdsForEvent, 2999 product_id: rec.id, 3000 variant_id: rec.variantId, 3001 url: rec.url, 3002 customer_id: null 3003 }); 3004 if (window.__storeRecContext) { 3005 window.__storeRecContext({ 3006 product_id: rec.id, 3007 variant_id: rec.variantId, 3008 recommendation_type: rec.reason || 'cart', 3009 placement: 'cart-cross-sell', 3010 request_uuid: rec.__request_uuid || requestUuid, 3011 source_product_ids: sourceProductIdsForEvent, 3012 customer_id: null 3013 }); 3014 } 3015 }; 3016 imageLink.addEventListener('click', trackClick); 3017 titleEl.addEventListener('click', trackClick); 3018 3019 if (rec.priceCents != null) { 3020 card.querySelector('.product-cross-sell__price').textContent = Shopify.formatMoney(rec.priceCents, Shopify.money_format); 3021 } 3022 3023 /* rating */ 3024 const raw = parseFloat(rec.rating || NaN); 3025 const rEl = card.querySelector('[data-loox-rating]'); 3026 if (!isNaN(raw) && raw > 0) { 3027 rEl.innerHTML = 3028 `<svg 3029 aria-hidden="true" 3030 focusable="false" 3031 width="16" 3032 class="icon icon-star-rating" 3033 3034 part="icon"
3035 viewBox="0 0 13 13" 3036 > 3037 <path fill="#f6a429" d="m6.5 0 1.607 4.623 4.893.1-3.9 2.956 1.417 4.685L6.5 9.568l-4.017 2.796L3.9 7.679 0 4.723l4.893-.1L6.5 0Z"/> 3038 </svg><span>${raw.toFixed(1)}</span>`; 3039 } else { 3040 rEl.remove(); 3041 } 3042 3043 /* stock/options check */ 3044 const variantId = rec.variantId; 3045 let inStock = rec.available, needsOpt = rec.variantCount > 1; 3046 let productData = null; 3047 try { 3048 productData = await fetch(`${rec.url.replace(/\/$/, '')}.js`).then(r => r.json()); 3049 const m = productData.variants?.find(v => String(v.id) === String(variantId)); 3050 inStock = m?.available ?? true; 3051 needsOpt = (productData.variants?.length > 1) || (productData.selling_plan_groups?.length > 0); 3052 } catch {} 3053 3054 const descriptionEl = card.querySelector('.product-cross-sell__description'); 3055 if (descriptionEl && cardClass === 'cart-v2-community-favourite') { 3056 const descriptionSource = rec.description || productData?.description || ''; 3057 const descriptionProbe = document.createElement('div'); 3058 descriptionProbe.innerHTML = descriptionSource; 3059 const description = descriptionProbe.textContent.replace(/\s+/g, ' ').trim(); 3060 if (description) { 3061 descriptionEl.textContent = description; 3062 descriptionEl.hidden = false; 3063 } 3064 } 3065 3066 const btn = card.querySelector('.action-button'); 3067 const modal = card.querySelector('quick-buy-modal'); 3068 const qbId = `cart-quick-buy-${variantId}`; 3069 modal.id = qbId; 3070 modal.setAttribute('product-url', rec.url); 3071 btn.setAttribute('aria-controls', qbId); 3072 3073 if (!inStock) { 3074 btn.textContent = 'Sold out'; 3075 btn.disabled = true; 3076 btn.classList.add('opacity-50', 'is-sold-out'); 3077 } else if (needsOpt) { 3078 btn.textContent = 'Choose options'; 3079 btn.onclick = async () => { 3080 if (!modal.showModal) await customElements.whenDefined('quick-buy-modal'); 3081 modal.showModal(); 3082 }; 3083 } else { 3084 btn.textContent = 'Add to cart'; 3085 btn.onclick = async () => { 3086 btn.disabled = true; btn.textContent = 'Addingâ¦'; 3087 try { 3088 await fetch('/cart/add.js', { 3089 method: 'POST', 3090 headers: { 'Content-Type':'application/json' }, 3091 body: JSON.stringify({ items:[{ id: variantId, quantity: 1 }] }) 3092 }); 3093 sendRecEvent({ 3094 event_type: 'recommendation_add_to_cart', 3095 recommendation_type: rec.reason || 'cart', 3096 placement: 'cart-cross-sell', 3097 request_uuid: rec.__request_uuid || requestUuid, 3098 source_product_ids: sourceProductIdsForEvent, 3099 product_id: rec.id, 3100 variant_id: variantId, 3101 customer_id: null 3102 }); 3103 document.documentElement.dispatchEvent( 3104 new CustomEvent('cart:refresh', { bubbles:true }) 3105 ); 3106 } catch { 3107 btn.disabled = false; btn.textContent = 'Add to cart'; 3108 } 3109 }; 3110 } 3111 3112 observeRecImpression(card, { 3113 recommendation_type: rec.reason || 'cart', 3114 placement: 'cart-cross-sell', 3115 request_uuid: rec.__request_uuid || requestUuid, 3116 source_product_ids: sourceProductIdsForEvent, 3117 product_id: rec.id, 3118 variant_id: rec.variantId, 3119 customer_id: null 3120 }); 3121 return card; 3122 }; 3123 3124 const scroller = document.createElement('scroll-carousel'); 3125 scroller.id = 'cart-cross-sell-carousel-sections--25965682557306__cart-drawer'; 3126 scroller.className = 'cart-drawer__cross-sell-carousel scroll-area bleed'; 3127 scroller.setAttribute('role', 'region'); 3128 scroller.setAttribute('aria-label', 'Swipe to browse recommended products'); 3129 3130 if (cartV2) { 3131 const communityTarget = document.getElementById('cart-cross-sell-carousel-sections--25965682557306__cart-drawer-community'); 3132 const stripTarget = document.getElementById('cart-cross-sell-carousel-sections--25965682557306__cart-drawer-strip'); 3133 const recommendationContent = container.querySelector('[data-cart-v2-recommendations]'); 3134 const moreSection = stripTarget?.closest('.cart-v2-recommendation-section'); 3135 let liquidCards = []; 3136 3137 try { 3138 liquidCards = await fetchLiquidProductCards(recs); 3139 liquidCards = liquidCards.slice(0, 10); 3140 } catch (error) { 3141 console.warn('[Cart] Native Liquid recommendation cards failed', error); 3142 } 3143 3144 if (!liquidCards.length) { 3145 document.getElementById('cart-cross-sell-carousel-sections--25965682557306__cart-drawer-wrapper')?.remove(); 3146 return; 3147 } 3148 3149 const wireLiquidCard = ({ rec, card }) => { 3150 const eventPayload = { 3151 recommendation_type: rec.reason || 'cart', 3152 placement: 'cart-cross-sell', 3153 request_uuid: rec.__request_uuid || requestUuid, 3154 source_product_ids: sourceProductIdsForEvent, 3155 product_id: rec.id, 3156 variant_id: rec.variantId, 3157 customer_id: null 3158 }; 3159 3160 const trackClick = () => { 3161 sendRecEvent({ event_type: 'recommendation_click', ...eventPayload, url: rec.url }); 3162 window.__storeRecContext?.({ ...eventPayload, url: rec.url }); 3163 }; 3164 3165 card.querySelector('a.product-title')?.addEventListener('click', trackClick); 3166 card.querySelector('a.product-card__media')?.addEventListener('click', trackClick); 3167 card.querySelectorAll('form.shopify-product-form').forEach((form) => { 3168 form.addEventListener('submit', () => { 3169 sendRecEvent({ event_type: 'recommendation_add_to_cart', ...eventPayload }); 3170 }); 3171 }); 3172 3173 observeRecImpression(card, eventPayload); 3174 return card; 3175 }; 3176 3177 const communityScroller = document.createElement('scroll-carou
3177sel'); 3178 communityScroller.id = 'cart-cross-sell-carousel-sections--25965682557306__cart-drawer-community-carousel'; 3179 communityScroller.className = 'cart-v2-community-carousel scroll-area bleed'; 3180 communityScroller.setAttribute('role', 'region'); 3181 communityScroller.setAttribute('aria-label', 'Swipe through Community favourites'); 3182 3183 liquidCards.slice(0, 3).forEach((entry) => { 3184 communityScroller.appendChild(wireLiquidCard(entry)); 3185 }); 3186 3187 liquidCards.slice(3).forEach((entry) => { 3188 scroller.appendChild(wireLiquidCard(entry)); 3189 }); 3190 3191 communityTarget?.replaceChildren(communityScroller); 3192 stripTarget?.replaceChildren(scroller); 3193 if (moreSection) moreSection.hidden = scroller.children.length === 0; 3194 container.querySelector('.cross-sell-loading')?.remove(); 3195 if (recommendationContent) recommendationContent.hidden = false; 3196 } else { 3197 for (const rec of recs) { 3198 scroller.appendChild(await buildCard(rec)); 3199 } 3200 3201 /* 5âââswap in */ 3202 container.replaceChildren(scroller); 3203 } 3204 3205 const widget = document.getElementById('cart-cross-sell-carousel-sections--25965682557306__cart-drawer-wrapper'); 3206 if (widget) { 3207 const tabs = document.querySelector('x-tabs.tab-pills'); 3208 widget.hidden = tabs ? tabs.getAttribute('selected-index') !== '0' : false; 3209 } 3210 3211 /* 6ââânavigation arrows */ 3212 const guardTouchDragClicks = (targetScroller) => { 3213 const dragThreshold = 10; 3214 let activePointerId = null; 3215 let startX = 0; 3216 let startY = 0; 3217 let suppressClickUntil = 0; 3218 3219 targetScroller.addEventListener('pointerdown', (event) => { 3220 if (event.pointerType !== 'touch' && event.pointerType !== 'pen') return; 3221 3222 activePointerId = event.pointerId; 3223 startX = event.clientX; 3224 startY = event.clientY; 3225 suppressClickUntil = 0; 3226 }, { passive: true }); 3227 3228 targetScroller.addEventListener('pointermove', (event) => { 3229 if (event.pointerId !== activePointerId) return; 3230 3231 const movedX = Math.abs(event.clientX - startX); 3232 const movedY = Math.abs(event.clientY - startY); 3233 if (Math.max(movedX, movedY) >= dragThreshold) { 3234 suppressClickUntil = performance.now() + 700; 3235 } 3236 }, { passive: true }); 3237 3238 targetScroller.addEventListener('pointercancel', (event) => { 3239 if (event.pointerId !== activePointerId) return; 3240 suppressClickUntil = performance.now() + 700; 3241 activePointerId = null; 3242 }, { passive: true }); 3243 3244 targetScroller.addEventListener('pointerup', (event) => { 3245 if (event.pointerId === activePointerId) activePointerId = null; 3246 }, { passive: true }); 3247 3248 targetScroller.addEventListener('click', (event) => { 3249 if (event.detail === 0 || performance.now() > suppressClickUntil) return; 3250 3251 event.preventDefault(); 3252 event.stopImmediatePropagation(); 3253 suppressClickUntil = 0; 3254 }, true); 3255 }; 3256 3257 const setupCarouselNavigation = (targetScroller, prev, next) => { 3258 if (!targetScroller || !prev || !next || targetScroller.children.length === 0) return; 3259 3260 guardTouchDragClicks(targetScroller); 3261 3262 const navigationTolerance = 2; 3263 let pendingNavigationTarget = null; 3264 3265 const getNavigationState = () => { 3266 const max = Math.max(0, targetScroller.scrollWidth - targetScroller.clientWidth); 3267 const scrollPadding = parseFloat(getComputedStyle(targetScroller).scrollPaddingInlineStart) || 0; 3268 const stops = Array.from(targetScroller.children) 3269 .filter(card => !card.hidden) 3270 .map(card => Math.min(max, Math.max(0, card.offsetLeft - scrollPadding))) 3271 .filter((stop, index, values) => 3272 index === 0 || Math.abs(stop - values[index - 1]) > navigationTolerance 3273 ); 3274 3275 return { 3276 max, 3277 position: Math.min(max, Math.max(0, targetScroller.scrollLeft)), 3278 stops 3279 }; 3280 }; 3281 3282 const updateArrows = () => { 3283 const { max, position } = getNavigationState(); 3284 prev.classList.toggle('at-start', max <= navigationTolerance || position <= navigationTolerance); 3285 next.classList.toggle('at-end', max <= navigationTolerance || position >= max - navigationTolerance); 3286 }; 3287 3288 const clearPendingNavigationTarget = () => { 3289 pendingNavigationTarget = null; 3290 }; 3291 3292 const moveCarousel = direction => { 3293 const { max, position, stops } = getNavigationState(); 3294 if (max <= navigationTolerance || !stops.length) return; 3295 3296 const from = pendingNavigationTarget ?? position; 3297 let target; 3298 3299 if (direction === 'next') { 3300 target = stops.find(stop => stop >
3300 from + navigationTolerance); 3301 if (target == null) target = max; 3302 } else { 3303 target = stops.slice().reverse().find(stop => stop < from - navigationTolerance); 3304 if (target == null) target = 0; 3305 } 3306 3307 pendingNavigationTarget = target; 3308 prev.classList.toggle('at-start', target <= navigationTolerance); 3309 next.classList.toggle('at-end', target >= max - navigationTolerance); 3310 targetScroller.scrollTo({ 3311 left: target, 3312 behavior: window.matchMedia('(prefers-reduced-motion: reduce)').matches ? 'auto' : 'smooth' 3313 }); 3314 }; 3315 3316 prev.onclick = () => moveCarousel('previous'); 3317 next.onclick = () => moveCarousel('next'); 3318 targetScroller.addEventListener('scroll', updateArrows, { passive: true }); 3319 targetScroller.addEventListener('scrollend', () => { 3320 clearPendingNavigationTarget(); 3321 updateArrows(); 3322 }); 3323 targetScroller.addEventListener('pointerdown', clearPendingNavigationTarget, { passive: true }); 3324 targetScroller.addEventListener('touchstart', clearPendingNavigationTarget, { passive: true }); 3325 targetScroller.addEventListener('wheel', clearPendingNavigationTarget, { passive: true }); 3326 3327 const resizeObserver = new ResizeObserver(updateArrows); 3328 resizeObserver.observe(targetScroller); 3329 navigationResizeObservers.push(resizeObserver); 3330 3331 targetScroller.scrollTo({ left: 0, behavior: 'auto' }); 3332 updateArrows(); 3333 }; 3334 3335 setupCarouselNavigation( 3336 document.getElementById('cart-cross-sell-carousel-sections--25965682557306__cart-drawer-community-carousel'), 3337 document.getElementById('cart-cross-sell-carousel-sections--25965682557306__cart-drawer-community-prev'), 3338 document.getElementById('cart-cross-sell-carousel-sections--25965682557306__cart-drawer-community-next') 3339 ); 3340 setupCarouselNavigation( 3341 scroller, 3342 document.getElementById('cart-cross-sell-carousel-sections--25965682557306__cart-drawer-prev'), 3343 document.getElementById('cart-cross-sell-carousel-sections--25965682557306__cart-drawer-next') 3344 ); 3345 3346 } finally { 3347 isLoading = false; 3348 3349 /* A cart refresh can replace this snippet while the previous request is 3350 still resolving. If that happened, initialise the new container once 3351 instead of leaving its loading state behind. */ 3352 const latestContainer = document.getElementById('cart-cross-sell-carousel-sections--25965682557306__cart-drawer-container'); 3353 if (latestContainer && latestContainer !== container) { 3354 requestAnimationFrame(api.init); 3355 } 3356 } 3357 } 3358 }; 3359 3360 /* ============================================================ 3361 Standardized formatMoney 3362 ============================================================ */ 3363 window.Shopify = window.Shopify || {}; 3364 Shopify.money_format = "£{{amount}}"; 3365 if (!Shopify.formatMoney) { 3366 Shopify.formatMoney = function(cents, format) { 3367 const money = format || Shopify.money_format; 3368 const placeholder = /\{\{\s*amount\s*\}\}/; 3369 const formatted = isNaN(cents) ? '0.00' : (cents/100).toFixed(2); 3370 return money.replace(placeholder, formatted); 3371 }; 3372 } 3373 3374 /* ============================================================ 3375 Boot 3376 ============================================================ */ 3377 window[KEY] = api; 3378 3379 /* Native product forms emit variant:add only after Shopify confirms the 3380 add. Close the quick-view layer at that point so it cannot remain over 3381 the refreshed cart drawer. */ 3382 document.addEventListener('variant:add', (event) => { 3383 const quickBuyModal = event.target?.closest?.('quick-buy-modal.modal--quick-buy'); 3384 if (quickBuyModal?.open) quickBuyModal.hide(); 3385 }, true); 3386 3387 document.addEventListener('DOMContentLoaded', api.init); 3388 ['cart:change','variant:add','cart:refresh'].forEach(ev => 3389 document.addEventListener(ev, api.init) 3390 ); 3391 document.addEventListener('click', (event) => { 3392 if (event.target.closest("x-tabs.tab-pills button[slot='tab']")) { 3393 requestAnimationFrame(api.init); 3394 } 3395 }); 3396 3397 const cartDrawerEl = document.getElementById('cart-drawer'); 3398 if (cartDrawerEl) { 3399 cartDrawerEl.addEventListener('dialog:after-show', () => requestAnimationFrame(api.init)); 3400 } 3401 3402 /* fallback: drawer re-render */ 3403 const drawer = document.querySelector('[data-cart-drawer]') || document.getElementById('cart-drawer'); 3404 if (drawer) { 3405 new MutationObserver(m => 3406 m.some(x => x.type === 'childList') && requestAnimationFrame(api.init) 3407 ).observe(drawer, { childList:true }); 3408 3409 // Keep the cross-sell out of layout until the native tab transition has 3410 // finished. A single cancellable controller prevents delayed callbacks 3411 // or recommendation responses from shifting the Wishlist panel. 3412 let visibilityDelayId = null; 3413 let visibilityAnimation = null; 3414 3415 function clearVisibilityMotion() { 3416 if (visibilityDelayId !== null) { 3417 clearTimeout(visibilityDelayId); 3418 visibilityDelayId = null; 3419 } 3420 visibilityAnimation?.cancel(); 3421 visibilityAnimation = null; 3422 } 3423 3424 function syncCartVisibility(immediate = false) { 3425 const t = document.querySelector('x-tabs.tab-pills'); 3426 const w = document.getElementById('cart-cross-sell-carousel-sections--25965682557306__cart-drawer-wrapper'); 3427 if (!t || !w) return; 3428 3429 const onCart = t.getAttribute('selected-index') === '0'; 3430 clearVisibilityMotion(); 3431 3432 if (onCart) { 3433 if (!w.hidden) { 3434 w.style.opacity = ''; 3435 w.style.transform = ''; 3436 requestAnimationFrame(api.init); 3437 return; 3438 } 3439 3440 const show = () => { 3441 visibilityDelayId = null; 3442 if (document.querySelector('x-tabs.tab-pills')?.getAttribute('selected-index') !== '0') return; 3443 3444 w.hidden = false;
3445 requestAnimationFrame(api.init); 3446 3447 if (immediate) return; 3448 visibilityAnimation = w.animate([ 3449 { opacity: 0, transform: 'translateY(10px)' }, 3450 { opacity: 1, transform: 'translateY(0)' } 3451 ], { duration: 100, easing: 'ease-out' }); 3452 visibilityAnimation.finished.catch(() => {}).finally(() => { 3453 visibilityAnimation = null; 3454 }); 3455 }; 3456 3457 if (immediate) { 3458 show(); 3459 } else { 3460 visibilityDelayId = setTimeout(show, (t.animationDuration || 0.15) * 1000 + 20); 3461 } 3462 return; 3463 } 3464 3465 if (w.hidden) return; 3466 if (immediate) { 3467 w.hidden = true; 3468 w.style.opacity = ''; 3469 w.style.transform = ''; 3470 return; 3471 } 3472 3473 visibilityAnimation = w.animate([ 3474 { opacity: 1, transform: 'translateY(0)' }, 3475 { opacity: 0, transform: 'translateY(10px)' } 3476 ], { duration: 100, easing: 'ease-out' }); 3477 visibilityAnimation.finished.catch(() => {}).finally(() => { 3478 visibilityAnimation = null; 3479 if (document.querySelector('x-tabs.tab-pills')?.getAttribute('selected-index') !== '0') { 3480 w.hidden = true; 3481 } 3482 }); 3483 } 3484 3485 syncCartVisibility(true); 3486 new MutationObserver(() => syncCartVisibility(false)).observe(document, { subtree:true, attributes:true, attributeFilter:['selected-index'] }); 3487 } 3488})(); 3489</script>
3489 3490
3491<script data-cart-tab-persistence> 3492 (() => { 3493 const key = '__cartDrawerTabPersistence'; 3494 3495 if (window[key]) { 3496 window[key].restore(); 3497 return; 3498 } 3499 3500 let selectedIndex = 0; 3501 3502 const getTabs = () => document.querySelector('#cart-drawer x-tabs.tab-pills'); 3503 const getHeaderTabs = () => Array.from(document.querySelectorAll('#cart-drawer [data-cart-v2-tab-index]')); 3504 const resetDrawerScroll = () => { 3505 requestAnimationFrame(() => { 3506 const drawerBody = document.querySelector('#cart-drawer')?.shadowRoot?.querySelector('[part="body"]'); 3507 if (drawerBody) drawerBody.scrollTop = 0; 3508 }); 3509 }; 3510 3511 const syncHeaderTabs = () => { 3512 getHeaderTabs().forEach(button => { 3513 button.setAttribute('aria-selected', String(Number(button.dataset.cartV2TabIndex) === selectedIndex)); 3514 }); 3515 }; 3516 3517 const restore = () => { 3518 const tabs = getTabs(); 3519 if (!tabs) return; 3520 3521 selectedIndex = Math.min(selectedIndex, tabs.querySelectorAll('button[slot="tab"]').length - 1); 3522 if (tabs.selectedIndex !== selectedIndex) tabs.selectedIndex = selectedIndex; 3523 syncHeaderTabs(); 3524 }; 3525 3526 document.addEventListener('click', event => {
3527 const headerButton = event.target.closest('#cart-drawer [data-cart-v2-tab-index]'); 3528 if (headerButton) { 3529 const index = Number(headerButton.dataset.cartV2TabIndex); 3530 const tabs = getTabs(); 3531 if (!Number.isInteger(index) || !tabs) return; 3532 3533 const didChangeTab = index !== (tabs.selectedIndex ?? selectedIndex); 3534 selectedIndex = index; 3535 tabs.selectedIndex = index; 3536 syncHeaderTabs(); 3537 if (didChangeTab) resetDrawerScroll(); 3538 return; 3539 } 3540 3541 const button = event.target.closest('#cart-drawer x-tabs.tab-pills button[slot="tab"]'); 3542 if (!button) return; 3543 3544 const buttons = Array.from(button.parentElement.querySelectorAll(':scope > button[slot="tab"]')); 3545 const index = buttons.indexOf(button); 3546 if (index >= 0) { 3547 const didChangeTab = index !== selectedIndex; 3548 selectedIndex = index; 3549 syncHeaderTabs(); 3550 if (didChangeTab) resetDrawerScroll(); 3551 } 3552 }); 3553 3554 document.addEventListener('keydown', event => { 3555 if (!event.target.matches('#cart-drawer x-tabs.tab-pills button[role="tab"]')) return; 3556 if (event.key !== 'ArrowLeft' && event.key !== 'ArrowRight') return; 3557 3558 requestAnimationFrame(() => { 3559 const nextIndex = getTabs()?.selectedIndex ?? selectedIndex; 3560 const didChangeTab = nextIndex !== selectedIndex; 3561 selectedIndex = nextIndex; 3562 syncHeaderTabs(); 3563 if (didChangeTab) resetDrawerScroll(); 3564 }); 3565 }); 3566 3567 /* A successful add initiated while Wishlist or Offers is selected is 3568 deliberate navigation back to Cart. Plain cart refreshes retain the 3569 current tab through the normal restore path below. */ 3570 document.addEventListener('variant:add', () => { 3571 const tabs = getTabs(); 3572 const activeIndex = tabs?.selectedIndex ?? selectedIndex; 3573 if (activeIndex !== 1 && activeIndex !== 2) return; 3574 3575 selectedIndex = 0; 3576 if (tabs) tabs.selectedIndex = 0; 3577 syncHeaderTabs(); 3578 resetDrawerScroll(); 3579 }); 3580 3581 new MutationObserver(mutations => { 3582 const tabsWasReplaced = mutations.some(mutation => 3583 Array.from(mutation.addedNodes).some(node => 3584 node.nodeType === Node.ELEMENT_NODE && 3585 (node.matches?.('x-tabs.tab-pills') || node.querySelector?.('x-tabs.tab-pills')) 3586 ) 3587 ); 3588 3589 if (tabsWasReplaced) queueMicrotask(restore); 3590 }).observe(document.getElementById('cart-drawer'), { childList: true, subtree: true }); 3591 3592 document.getElementById('cart-drawer')?.addEventListener('cart-drawer:refreshed', restore); 3593 3594 window[key] = { restore }; 3595 syncHeaderTabs(); 3596 })(); 3597 </script>
3597 3598 3599
3599<script data-cart-savings-toggle> 3600 (() => { 3601 const key = '__cartSavingsToggle'; 3602 if (window[key]) return; 3603 window[key] = true; 3604 3605 document.addEventListener('click', event => { 3606 const summary = event.target.closest('#cart-drawer .cart-v2-savings__summary'); 3607 if (!summary) return; 3608 event.preventDefault(); 3609 3610 const details = summary.closest('details'); 3611 const breakdown = details?.querySelector('.cart-v2-savings__breakdown'); 3612 if (!details || !breakdown || details.dataset.animating) return; 3613 3614 details.dataset.animating = 'true'; 3615 const finish = () => delete details.dataset.animating; 3616 const timing = { duration: 220, easing: 'ease' }; 3617 3618 if (details.open) { 3619 details.classList.remove('is-open'); 3620 const animation = breakdown.animate( 3621 { height: [`${breakdown.offsetHeight}px`, '0px'], opacity: [1, 0], marginTop: ['0.5rem', '0rem'] }, 3622 timing 3623 ); 3624 animation.onfinish = () => { 3625 details.open = false; 3626 finish(); 3627 }; 3628 } else { 3629 details.open = true; 3630 details.classList.add('is-open'); 3631 const animation = breakdown.animate( 3632 { height: ['0px', `${breakdown.offsetHeight}px`], opacity: [0, 1], marginTop: ['0rem', '0.5rem'] }, 3633 timing 3634 ); 3635 animation.onfinish = finish; 3636 } 3637 }); 3638 })(); 3639 </script>
3639</cart-drawer> 3640 3641</section><div id="shopify-section-sections--25965682557306__search-drawer" class="shopify-section shopify-section-group-overlay-group"> 3642 3643<style> 3644 /* Custom carousel controls */ 3645 .custom-carousel-controls { 3646 display: flex; 3647 justify-content: center; 3648 gap: 1rem; 3649 margin-top: 0.5rem; 3650 } 3651 .custom-carousel-controls .circle-button { 3652 background: var(--button-background); 3653 color: var(--button-text-color); 3654 } 3655 .search-drawer__recommended .h-stack.nav-buttons { 3656 gap: 15px; 3657 } 3658 .search-drawer__recommended .search-drawer__product-carousel { 3659 align-items: stretch; 3660 position: relative; 3661 } 3662 .search-drawer__recommended .search-drawer__product-carousel > product-card { 3663 grid-template-rows: auto 1fr; 3664 } 3665</style> 3666 3667<x-drawer 3668 id="search-drawer" 3669 class="drawer drawer--search color-scheme color-scheme--scheme-1" 3670 handle-editor-events 3671> 3672 <!-- HEADER: Search form --> 3673 <div slot="header"> 3674 <form 3675 action="/search" 3676 id="predictive-search-form" 3677 method="GET" 3678 aria-owns="predictive-search" 3679 class="h-stack gap-2.5" 3680 role="search" 3681 ><svg 3682 aria-hidden="true" 3683 focusable="false" 3684 width="16" 3685 fill="none" 3686 class="icon icon-search" 3687 3688 part="icon"
3689 viewBox="0 0 16 16" 3690 > 3691 <path stroke-width="1" stroke="currentColor" d="M1.333 7.333a6 6 0 1 0 12 0 6 6 0 0 0-12 0ZM11.575 11.576l3.09 3.09" /> 3692 </svg><label for="search-drawer-input" class="sr-only"> 3693 Search for... 3694 </label> 3695 <input 3696 id="search-drawer-input" 3697 type="search" 3698 class="search-drawer__input h7" 3699 name="q" 3700 placeholder="Search for..." 3701 > 3702 </form> 3703 </div> 3704 3705 <!-- ⸠PREDICTIVE SEARCH --> 3706 <predictive-search id="predictive-search"> 3707 <!-- ⸠PLACEHOLDER (shown before the user types) --> 3708 <div slot="placeholder"> 3709 <div class="v-stack gap-8 sm:gap-12"><div class="v-stack gap-4.5"><p class="subheading text-subdued">Popular searches</p><div class="v-stack justify-items-start gap-3.5"><a href="/collections/new" class="h7 link-reversed">New Arrivals</a><a href="/collections/offers" class="h7 link-reversed">Special Offers</a><a href="/products/regenerative-omegas-fish-free-120-capsules" class="h7 link-reversed">Regenerative Omegas</a><a href="/collections/personal-care" class="h7 link-reversed">Personal Care</a></div> 3710 </div><!-- ⸠DYNAMIC RECOMMENDED PRODUCTS --> 3711 <div 3712 class="search-drawer__recommended v-stack gap-4.5" 3713 data-section-id="sections--25965682557306__search-drawer" 3714 > 3715 <div class="h-stack justify-between items-center"> 3716 <!-- dynamic, i18nâd heading --> 3717 <p class="subheading text-subdued"> 3718 Recommended for you 3719 </p> 3720 3721 <!-- nav arrows inline with title --> 3722 <div class="h-stack nav-buttons"> 3723 <button 3724 disabled 3725 type="button" 3726 id="recs-prev-sections--25965682557306__search-drawer" 3727 class="circle-button carousel-btn--prev" 3728 aria-label="Previous" 3729 ><svg 3730 aria-hidden="true" 3731 focusable="false" 3732 width="9" 3733 class="icon icon-big-arrow-left icon--direction-aware" 3734 3735 part="icon"
3736 viewBox="0 0 36 36" 3737 > 3738 <path fill="none" stroke="currentColor" stroke-width="2" d="M35 18H3M19.5 34.5 3 18 19.5 1.5"/> 3739 </svg></button> 3740 3741 <button 3742 type="button" 3743 id="recs-next-sections--25965682557306__search-drawer" 3744 class="circle-button carousel-btn--next" 3745 aria-label="Next" 3746 ><svg 3747 aria-hidden="true" 3748 focusable="false" 3749 width="9" 3750 class="icon icon-big-arrow-right icon--direction-aware" 3751 3752 part="icon" 3753 viewBox="0 0 36 36" 3754 > 3755 <path fill="none" stroke="currentColor" stroke-width="2" d="M1 18h32M16.5 1.5 33 18 16.5 34.5"/> 3756 </svg></button> 3757 </div> 3758 </div> 3759 3760 <!-- ⸠CAROUSEL TRACK --> 3761 <scroll-carousel 3762 id="recs-carousel-sections--25965682557306__search-drawer" 3763 class="search-drawer__product-carousel scroll-area bleed" 3764 ></scroll-carousel> 3765 </div></div> 3766 <!-- /.v-stack --> 3767 </div> 3768 <!-- /slot="placeholder" --> 3769 3770 <!-- ⸠RESULTS (filled by themeâs predictive-search JS) --> 3771 <div slot="results" class="contents"></div> 3772 </predictive-search> 3773</x-drawer> 3774 3775 3776
3777<script> 3778// Define Shopify.formatMoney globally if not already defined 3779window.Shopify = window.Shopify || {}; 3780Shopify.money_format = "£{{amount}}"; 3781if (!Shopify.formatMoney) { 3782 Shopify.formatMoney = function(cents, format) { 3783 const money = format || Shopify.money_format; 3784 const placeholder = /\{\{\s*amount\s*\}\}/; 3785 const formatted = isNaN(cents) ? '0.00' : (cents/100).toFixed(2); 3786 return money.replace(placeholder, formatted); 3787 }; 3788} 3789 3790document.addEventListener('DOMContentLoaded', () => { 3791 const endpoint = 'https://api.sowandarrow.com/recommendations'; 3792 const recLimit = 6; 3793 const recTimeoutMs = 4000; 3794 3795 function getRecSessionId() { 3796 let id; 3797 try { id = sessionStorage.getItem('rec_session_id'); } catch {} 3798 if (!id) { 3799 id = window.__recSessionId || (crypto.randomUUID ? crypto.randomUUID() : `rec-session-${Date.now()}`); 3800 try { sessionStorage.setItem('rec_session_id', id); } catch {} 3801 } 3802 window.__recSessionId = id; 3803 return id; 3804 } 3805 3806 function sendRecEvent(payload) { 3807 const body = { 3808 ...payload, 3809 session_id: getRecSessionId(), 3810 page_path: window.location.pathname, 3811 timestamp: new Date().toISOString() 3812 }; 3813 3814 fetch(endpoint, { 3815 method: 'POST', 3816 headers: { 'Content-Type': 'application/json' }, 3817 credentials: 'include', 3818 keepalive: true, 3819 body: JSON.stringify(body) 3820 }).catch((error) => { 3821 console.warn('[Search Drawer] Event post failed:', error); 3822 }); 3823 } 3824 3825 const sentImpressions = new Set(); 3826 function observeRecImpression(el, payload) { 3827 if (!el) return; 3828 const key = [ 3829 payload.placement || 'unknown', 3830 payload.request_uuid || 'no-request', 3831 payload.variant_id || payload.product_id || 'no-product' 3832 ].join('|'); 3833 if (sentImpressions.has(key)) return; 3834 3835 const observer = new IntersectionObserver((entries, obs) => { 3836 if (!entries.some(entry => entry.isIntersecting && entry.intersectionRatio >= 0.35)) return; 3837 sentImpressions.add(key); 3838 sendRecEvent({ ...payload, event_type: 'recommendation_impression' }); 3839 obs.disconnect(); 3840 }, { threshold: [0.35] }); 3841 3842 observer.observe(el); 3843 } 3844 3845 function toCardRecommendation(rec) { 3846 const selectedVariantId = rec?.selected_or_first_available_variant_id || rec?.variants?.[0]?.id || null; 3847 const variantCount = Number(rec?.variant_count || rec?.variants?.length || 0); 3848 const available = typeof rec?.available === 'boolean' ? rec.available : (rec?.variants?.[0]?.available ?? true); 3849 const priceCents = Number.isFinite(Number(rec?.price_min)) ? Number(rec.price_min) : rec?.variants?.[0]?.price != null ? Math.round(parseFloat(rec.variants[0].price) * 100) : null; 3850 const compareAtCents = Number.isFinite(Number(rec?.compare_at_price_min)) ? Number(rec.compare_at_price_min) : rec?.variants?.[0]?.compare_at_price != null ? Math.round(parseFloat(rec.variants[0].compare_at_price) * 100) : null; 3851 3852 return { 3853 id: rec?.id ?? rec?.product_id ?? null, 3854 title: rec?.title || '', 3855 url: rec?.url || rec?.link || (rec?.handle ? `/products/${rec.handle}` : null), 3856 handle: rec?.handle || null, 3857 vendor: rec?.vendor || null, 3858 image: { 3859 src: rec?.featured_image?.url || rec?.image?.src || rec?.image?.url || rec?.image || rec?.images?.[0]?.src || rec?.images?.[0]?.url || '', 3860 alt: rec?.featured_image?.alt || rec?.image?.alt || rec?.title || '' 3861 }, 3862 secondaryImage: rec?.images?.[1]?.src || rec?.images?.[1]?.url || null, 3863 recommendationId: rec?.recommendation_id || rec?.recommendationId || null, 3864 variantId: selectedVariantId, 3865 variantCount, 3866 available, 3867 priceCents, 3868 compareAtCents, 3869 reason: rec?.reason || null 3870 }; 3871 } 3872 3873 function readRecentlyViewedProductIds() { 3874 try { 3875 const value = JSON.parse(localStorage.getItem('theme:recently-viewed-products') || '[]'); 3876 return Array.isArray(value) ? value.map((id) => String(id)).filter(Boolean) : []; 3877 } catch { 3878 return []; 3879 } 3880 } 3881 3882 async function fetchRecommendations(params) { 3883 const controller = new AbortController(); 3884 const timeoutId = setTimeout(() => controller.abort(), recTimeoutMs); 3885 try { 3886 const response = await fetch(`${endpoint}?${params.toString()}`, { 3887 credentials: 'include', 3888 signal: controller.signal 3889 }); 3890 3891 if (!response.ok) { 3892 throw new Error(`Unexpected status ${response.status}`); 3893 } 3894 3895 return await response.json(); 3896 } finally { 3897 clearTimeout(timeoutId); 3898 } 3899 } 3900 3901 const searchDrawer = document.getElementById('search-drawer'); 3902 const wrapper = document.querySelector('.search-drawer__recommended'); 3903 if (!searchDrawer || !wrapper) return; 3904 3905 const sid = wrapper.dataset.sectionId; 3906 const carousel = document.getElementById(`recs-carousel-${sid}`); 3907 const prevBtn = wrapper.querySelector('.carousel-btn--prev'); 3908 const nextBtn = wrapper.querySelector('.carousel-btn--next'); 3909 if (!carousel || !prevBtn || !nextBtn) return; 3910 3911 const navigationTolerance = 2; 3912 let pendingNavigationTarget = null; 3913 3914 function getCarouselNavigationState() { 3915 const max = Math.max(0, carousel.scrollWidth - carousel.clientWidth); 3916 const scrollPadding = parseFloat(getComputedStyle(carousel).scrollPaddingInlineStart) || 0;
3917 const stops = Array.from(carousel.children) 3918 .filter((card) => !card.hidden) 3919 .map((card) => Math.min(max, Math.max(0, card.offsetLeft - scrollPadding))) 3920 .filter((stop, index, values) => index === 0 || Math.abs(stop - values[index - 1]) > navigationTolerance); 3921 3922 return { 3923 max, 3924 position: Math.min(max, Math.max(0, carousel.scrollLeft)), 3925 stops 3926 }; 3927 } 3928 3929 function updateCarouselNavigation() { 3930 const { max, position } = getCarouselNavigationState(); 3931 prevBtn.disabled = max <= navigationTolerance || position <= navigationTolerance; 3932 nextBtn.disabled = max <= navigationTolerance || position >= max - navigationTolerance; 3933 } 3934 3935 function clearPendingNavigationTarget() { 3936 pendingNavigationTarget = null; 3937 } 3938 3939 function moveCarousel(direction) { 3940 const { max, position, stops } = getCarouselNavigationState(); 3941 if (max <= navigationTolerance || !stops.length) return; 3942 3943 const from = pendingNavigationTarget ?? position; 3944 let target; 3945 3946 if (direction === 'next') { 3947 target = stops.find((stop) => stop > from + navigationTolerance); 3948 if (target == null) target = max; 3949 } else { 3950 target = stops.slice().reverse().find((stop) => stop < from - navigationTolerance); 3951 if (target == null) target = 0; 3952 } 3953 3954 pendingNavigationTarget = target; 3955 prevBtn.disabled = target <= navigationTolerance; 3956 nextBtn.disabled = target >= max - navigationTolerance; 3957 carousel.scrollTo({ 3958 left: target, 3959 behavior: window.matchMedia('(prefers-reduced-motion: reduce)').matches ? 'auto' : 'smooth' 3960 }); 3961 } 3962 3963 prevBtn.addEventListener('click', () => moveCarousel('previous')); 3964 nextBtn.addEventListener('click', () => moveCarousel('next')); 3965 carousel.addEventListener('scroll', updateCarouselNavigation, { passive: true }); 3966 carousel.addEventListener('scrollend', () => { 3967 clearPendingNavigationTarget(); 3968 updateCarouselNavigation(); 3969 }); 3970 carousel.addEventListener('pointerdown', clearPendingNavigationTarget, { passive: true }); 3971 carousel.addEventListener('touchstart', clearPendingNavigationTarget, { passive: true }); 3972 carousel.addEventListener('wheel', clearPendingNavigationTarget, { passive: true }); 3973 3974 const carouselNavigationResizeObserver = new ResizeObserver(updateCarouselNavigation); 3975 carouselNavigationResizeObserver.observe(carousel); 3976 3977 let fallbackEl = wrapper.querySelector('.search-drawer__recs-fallback'); 3978 if (!fallbackEl) { 3979 fallbackEl = document.createElement('p'); 3980 fallbackEl.className = 'search-drawer__recs-fallback h7 text-subdued'; 3981 fallbackEl.textContent = 'No recommendations available right now.'; 3982 fallbackEl.hidden = true; 3983 carousel.insertAdjacentElement('afterend', fallbackEl); 3984 } 3985 3986 function readCachedRecs(key) { 3987 try { 3988 const raw = localStorage.getItem(key); 3989 if (!raw) return []; 3990 const parsed = JSON.parse(raw); 3991 return Array.isArray(parsed) ? parsed : []; 3992 } catch { 3993 return []; 3994 } 3995 } 3996 3997 function writeCachedRecs(key, value) { 3998 try { 3999 localStorage.setItem(key, JSON.stringify(value)); 4000 return; 4001 } catch {} 4002 4003 try { 4004 const prefix = `searchDrawerRecs:${sid}:`; 4005 Object.keys(localStorage) 4006 .filter((k) => k.startsWith(prefix) && k !== key) 4007 .forEach((k) => localStorage.removeItem(k)); 4008 localStorage.setItem(key, JSON.stringify(value)); 4009 } catch {} 4010 } 4011 4012 function showFallback() { 4013 carousel.replaceChildren(); 4014 fallbackEl.hidden = false; 4015 prevBtn.disabled = true; 4016 nextBtn.disabled = true; 4017 wrapper.dataset.recommendationsState = 'fallback'; 4018 } 4019 4020 function showRecommendationsState() { 4021 fallbackEl.hidden = true; 4022 wrapper.dataset.recommendationsState = 'loaded'; 4023 } 4024 4025 function buildEventPayload(rec, sourceProductIds) { 4026 return { 4027 recommendation_type: rec.reason || 'search-drawer', 4028 placement: 'search-drawer', 4029 request_uuid: rec.__request_uuid || null, 4030 recommendation_id: rec.__recommendation_id || null, 4031 product_id: rec.id, 4032 variant_id: rec.variantId, 4033 served_rank: rec.__served_rank || null, 4034 source_product_ids: sourceProductIds, 4035 product_title: rec.title || null, 4036 product_handle: rec.handle || null, 4037 url: rec.url || null, 4038 customer_id: null 4039 }; 4040 } 4041 4042 const liquidCardRequests = new Map(); 4043 4044 async function fetchLiquidProductCards(recs) { 4045 const productIds = Array.from(new Set(recs.map((rec) =>
4045 String(rec.id || '')).filter(Boolean))); 4046 if (!productIds.length) return []; 4047 4048 const requestKey = productIds.join(','); 4049 if (!liquidCardRequests.has(requestKey)) { 4050 liquidCardRequests.set(requestKey, (async () => { 4051 const query = productIds.map((id) => `id:${id}`).join(' OR '); 4052 const requestUrl = new URL(`${window.Shopify.routes.root}search`, window.location.origin); 4053 requestUrl.searchParams.set('type', 'product'); 4054 requestUrl.searchParams.set('q', query); 4055 requestUrl.searchParams.set('section_id', 'search-recommendation-card-renderer'); 4056 4057 const response = await fetch(`${requestUrl.pathname}${requestUrl.search}`, { 4058 headers: { Accept: 'text/html' }, 4059 priority: 'low' 4060 }); 4061 if (!response.ok) { 4062 throw new Error(`Liquid card request returned ${response.status}`); 4063 } 4064 4065 const html = await response.text(); 4066 const parsedDocument = new DOMParser().parseFromString(html, 'text/html'); 4067 const container = parsedDocument.querySelector('[data-search-recommendation-liquid-cards]'); 4068 if (!container) throw new Error('Liquid card response is missing its container'); 4069 4070 return Array.from(container.querySelectorAll(':scope > product-card')); 4071 })()); 4072 } 4073 4074 const cards = await liquidCardRequests.get(requestKey); 4075 const cardsByHandle = new Map( 4076 cards.map((card) => [card.getAttribute('handle'), card]) 4077 ); 4078 4079 return recs 4080 .map((rec) => { 4081 const card = cardsByHandle.get(rec.handle); 4082 return card ? { rec, card: document.importNode(card, true) } : null; 4083 }) 4084 .filter(Boolean); 4085 } 4086 4087 async function renderRecommendations(recs, sourceProductIds) { 4088 const liquidCards = await fetchLiquidProductCards(recs); 4089 if (!liquidCards.length) return false; 4090 4091 showRecommendationsState(); 4092 carousel.replaceChildren(); 4093 4094 liquidCards.forEach(({ rec: rawRec, card: cardRoot }, idx) => { 4095 const rec = { 4096 ...rawRec, 4097 __served_rank: rawRec.__served_rank || idx + 1 4098 }; 4099 4100 const eventPayload = buildEventPayload(rec, sourceProductIds); 4101 4102 const trackClick = () => { 4103 sendRecEvent({ 4104 event_type: 'recommendation_click', 4105 ...eventPayload 4106 }); 4107 if (window.__storeRecContext) { 4108 window.__storeRecContext(eventPayload); 4109 } 4110 }; 4111 4112 cardRoot.querySelector('a.product-title')?.addEventListener('click', trackClick); 4113 cardRoot.querySelector('a.product-card__media')?.addEventListener('click', trackClick); 4114 4115 cardRoot.querySelectorAll('form.shopify-product-form').forEach((form) => { 4116 form.addEventListener('submit', () => { 4117 sendRecEvent({ 4118 event_type: 'recommendation_add_to_cart', 4119 ...eventPayload 4120 }); 4121 }); 4122 }); 4123 4124 carousel.appendChild(cardRoot); 4125 observeRecImpression(cardRoot, eventPayload); 4126 }); 4127 4128 requestAnimationFrame(() => { 4129 clearPendingNavigationTarget(); 4130 carousel.scrollTo({ left: 0, behavior: 'auto' }); 4131 updateCarouselNavigation(); 4132 }); 4133 4134 return true; 4135 } 4136 4137 let isLoading = false; 4138 async function loadRecommendationsOnOpen() { 4139 if (isLoading) return; 4140 isLoading = true; 4141 let hasRendered = false; 4142 4143 try { 4144 let cart = {}; 4145 try { 4146 cart = await fetch('/cart.js').then((r) => r.json()); 4147 } catch (error) { 4148 console.warn('[Search Drawer] Unable to fetch cart:', error); 4149 } 4150 4151 const inCart = (cart.items || []).map((item) => item.variant_id); 4152 const cartContextProductIds = (cart.items || []).map((item) => String(item.product_id)).filter(Boolean); 4153 const recentlyViewedProductIds = readRecentlyViewedProductIds(); 4154 const contextProductIds = Array.from(new Set([...cartContextProductIds, ...recentlyViewedProductIds])); 4155 const sourceProductIdsForEvent = contextProductIds.slice(0, 20); 4156 4157 const customerProfile = null; 4158 const cartVersion = [ 4159 cart.updated_at || '', 4160 cart.item_count || 0, 4161 cart.items_subtotal_price || 0 4162 ].join('-'); 4163 const cacheKey = `searchDrawerRecs:${sid}:${cartVersion}:${sourceProductIdsForEvent.join(',')}`; 4164 const cachedRecs = readCachedRecs(cacheKey); 4165 if (cachedRecs.length) { 4166 try { 4167 hasRendered = await renderRecommendations(cachedRecs, sourceProductIdsForEvent); 4168 } catch (error) { 4169 console.warn('[Search Drawer] Cached Liquid cards failed:', error); 4170 } 4171 } 4172 4173 const params = new URLSearchParams(); 4174 params.set('type', 'search-drawer'); 4175 params.set('session_id', getRecSessionId()); 4176 params.set('shopify_product_ids', sourceProductIdsForEvent.join(','));
4177 params.set('limit', String(recLimit)); 4178 params.set('time', new Date().toISOString()); 4179 params.set('url', window.location.pathname); 4180 4181 4182 4183 if (customerProfile) { 4184 params.set('customer_profile', typeof customerProfile === 'string' ? customerProfile : JSON.stringify(customerProfile)); 4185 } 4186 4187 const localeCountry = ((navigator.language || '').split('-').pop() || '').toUpperCase(); 4188 const cc = /^[A-Z]{2}$/.test(localeCountry) ? localeCountry : "GB"; 4189 if (cc) params.set('country_code', cc); 4190 4191 console.log('[Search Drawer]', `${endpoint}?${params.toString()}`); 4192 const data = await fetchRecommendations(params); 4193 const requestUuid = data?.request_uuid || null; 4194 const source = Array.isArray(data?.products) ? data.products : []; 4195 const inCartSet = new Set(inCart.map((id) => String(id))); 4196 4197 const freshRecs = source 4198 .map(toCardRecommendation) 4199 .filter((rec) => rec.url && rec.variantId) 4200 .filter((rec) => !inCartSet.has(String(rec.variantId))) 4201 .slice(0, recLimit) 4202 .map((rec, idx) => ({ 4203 ...rec, 4204 __request_uuid: requestUuid, 4205 __recommendation_id: rec.recommendationId || null, 4206 __served_rank: idx + 1 4207 })); 4208 4209 if (freshRecs.length) { 4210 const rendered = await renderRecommendations(freshRecs, sourceProductIdsForEvent); 4211 if (rendered) { 4212 writeCachedRecs(cacheKey, freshRecs); 4213 hasRendered = true; 4214 return; 4215 } 4216 } 4217 4218 if (!hasRendered) showFallback(); 4219 } catch (error) { 4220 console.warn('[Search Drawer] Recommendation fetch failed:', error); 4221 if (!hasRendered) showFallback(); 4222 } finally { 4223 isLoading = false; 4224 } 4225 } 4226 4227 searchDrawer.addEventListener('dialog:after-show', loadRecommendationsOnOpen); 4228 if (searchDrawer.hasAttribute('open')) { 4229 loadRecommendationsOnOpen(); 4230 } 4231}); 4232</script>
4232 4233 4234<style> 4235 /* --- search-drawer carousel controls (recommendations only) --- */ 4236 .carousel-wrapper{position:relative} 4237 .carousel-btn{ 4238 position:absolute;top:50%;transform:translateY(-50%); 4239 width:2.5rem;height:2.5rem;border-radius:50%;border:none; 4240 background:#fff;font-size:1.5rem;line-height:1;cursor:pointer; 4241 box-shadow:0 1px 3px rgba(0,0,0,.15);transition:opacity .2s; 4242 } 4243 .carousel-btn[disabled]{opacity:.35;cursor:not-allowed} 4244 .carousel-btn--prev{left:.25rem} 4245 .carousel-btn--next{right:.25rem} 4246</style> 4247</div> 4248<!-- END sections: overlay-group --><main id="main" class="anchor"> 4249 <section id="shopify-section-template--25965682590074__main" class="shopify-section shopify-section--main-product"><style>#shopify-section-template--25965682590074__main .product { 4250 padding-block-start: min(1.75rem, var(--container-gutter)); 4251 }@media screen and (min-width: 1000px) { 4252 #shopify-section-template--25965682590074__main { 4253 --product-grid: auto / minmax(0, 0.5fr) minmax(0, 0.5fr); 4254 } 4255 } 4256</style> 4257 4258<div 4259 class="color-scheme color-scheme--scheme-1" 4260 4261> 4262 <div class="container"><product-rerender 4263 id="product-info-16190750032250-template--25965682590074__main" 4264 observe-form="product-form-main-16190750032250-template--25965682590074__main" 4265 allow-partial-rerender 4266 > 4267 <div class="product"><style> 4268 @media screen and (max-width: 999px) { 4269 #shopify-section-template--25965682590074__main {--product-gallery-gap: 0rem;} 4270 } 4271 4272 @media screen and (min-width: 1000px) { 4273 #shopify-section-template--25965682590074__main {--product-gallery-gap: 0rem;}} 4274</style> 4275 4276<product-gallery id="product-gallery-product-gallery-carousel-16190750032250-template--25965682590074__main" class="product-gallery " form="product-form-main-16190750032250-template--25965682590074__main" filtered-indexes="[]" allow-zoom="3" zoom-color-scheme-id="scheme-1"> 4277 <div class="product-gallery__image-list"><div class="relative"> 4278 <scroll-carousel adaptive-height id="product-gallery-carousel-16190750032250-template--25965682590074__main" class="product-gallery__carousel scroll-area bleed md:unbleed" role="region"><div class="product-gallery__media snap-center is-initial " data-media-type="image" data-media-id="71649845969274" role="group" aria-label="Item 1 of 4" ><img src="//sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers.avif?v=1788431863&width=996" alt="Pure Peanut Crackers - Cracked Black Pepper - 20g" srcset="//sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers.avif?v=1788431863&width=200 200w, //sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers.avif?v=1788431863&width=300 300w, //sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers.avif?v=1788431863&width=400 400w, //sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers.avif?v=1788431863&width=500 500w, //sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers.avif?v=1788431863&width=600 600w, //sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers.avif?v=1788431863&width=700 700w, //sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers.avif?v=1788431863&width=800 800w" width="996" height="996" loading="eager" fetchpriority="high" sizes="(max-width: 699px) 100vw, 50vw" style=" "></div><div class="product-gallery__media snap-center " data-media-type="image" data-media-id="71649846002042" role="group" aria-label="Item 2 of 4" ><img src="//sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers_3.avif?v=1788431863&width=996" alt="Pure Peanut Crackers - Cracked Black Pepper - 20g" srcset="//sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers_3.avif?v=1788431863&width=200 200w, //sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers_3.avif?v=1788431863&width=300 300w, //sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers_3.avif?v=1788431863&width=400 400w, //sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers_3.avif?v=1788431863&width=500 500w, //sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers_3.avif?v=1788431863&width=600 600w, //sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers_3.avif?v=1788431863&width=700 700w, //sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers_3.avif?v=1788431863&width=800 800w" width="996" height="996" loading="lazy" sizes="auto, (max-width: 699px) 100vw, 50vw" style=" "></div><div class="product-gallery__media snap-center " data-media-type="image" data-media-id="71649846034810" role="group" aria-label="Item 3 of 4" ><img src="//sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers_2.avif?v=1788431863&width=996" alt="Pure Peanut Crackers - Cracked Black Pepper - 20g" srcset="//sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers_2.avif?v=1788431863&width=200 200w, //sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers_2.avif?v=1788431863&width=300 300w, //sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers_2.avif?v=1788431863&width=400 400w, //sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers_2.avif?v=1788431863&width=500 500w, //sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers_2.avif?v=1788431863&width=600 600w, //sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers_2.avif?v=1788431863&width=700 700w, //sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers_2.avif?v=1788431863&width=800 800w" width="996" height="996" loading="lazy" sizes="auto, (max-width: 699px) 100vw, 50vw" style=" "></div><div class="product-gallery__media snap-center " data-media-type="image" data-media-id="71649846067578" role="group" aria-label="Item 4 of 4" ><img src="//sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers_1.avif?v=1788431862&width=996" alt="Pure Peanut Crackers - Cracked Black Pepper - 20g" srcset="//sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers_1.avif?v=1788431862&width=200 200w, //sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers_1.avif?v=1788431862&width=300 300w, //sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers_1.avif?v=1788431862&width=400 400w, //sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers_1.avif?v=1788431862&width=500 500w, //sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers_1.avif?v=1788431862&width=600 600w, //sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers_1.avif?v=1788431862&width=700 700w, //sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers_1.avif?v=1788431862&width=800 800w" width="996" height="996" loading="lazy" sizes="auto, (max-width: 699px) 100vw, 50vw" style=" "></div>
4278</scroll-carousel><custom-cursor class="product-gallery__cursor custom-cursor" > 4279 <div class="circle-button circle-button--xl"><svg 4280 aria-hidden="true" 4281 focusable="false" 4282 width="12" 4283 class="icon icon-big-arrow-right" 4284 4285 part="icon" 4286 viewBox="0 0 36 36" 4287 > 4288 <path fill="none" stroke="currentColor" stroke-width="2" d="M1 18h32M16.5 1.5 33 18 16.5 34.5"/> 4289 </svg></div> 4290 </custom-cursor><open-lightbox-button aria-controls="product-gallery-carousel-16190750032250-template--25965682590074__main" > 4291 <button class="product-zoom-button"><svg 4292 aria-hidden="true" 4293 focusable="false" 4294 width="16" 4295 class="icon icon-zoom-plus" 4296 4297 part="icon" 4298 viewBox="0 0 15 15" 4299 > 4300 <path d="M7 0L7 7H0V8H7V15H8V8L15 8V7L8 7L8 0H7Z" fill="currentColor"/> 4301 </svg><span class="product-zoom-button__label">Zoom</span> 4302 </button> 4303 </open-lightbox-button></div><div class="product-gallery__controls-floating hidden md:contents"><carousel-navigation class="scroll-marker-group scroll-marker-group--lines align-self-center" aria-controls="product-gallery-carousel-16190750032250-template--25965682590074__main"><button type="button" class="scroll-marker tap-area tap-area--sm" aria-current="true"> 4304 <span class="sr-only">Go to item 1</span> 4305 </button><button type="button" class="scroll-marker tap-area tap-area--sm" aria-current="false"> 4306 <span class="sr-only">Go to item 2</span> 4307 </button><button type="button" class="scroll-marker tap-area tap-area--sm" aria-current="false"> 4308 <span class="sr-only">Go to item 3</span> 4309 </button><button type="button" class="scroll-marker tap-area tap-area--sm" aria-current="false"> 4310 <span class="sr-only">Go to item 4</span> 4311 </button></carousel-navigation></div><div class="product-gallery__controls-floating contents md:hidden"><carousel-navigation class="scroll-marker-group scroll-marker-group--lines align-self-center" aria-controls="product-gallery-carousel-16190750032250-template--25965682590074__main"><button type="button" class="scroll-marker tap-area tap-area--sm" aria-current="true"> 4312 <span class="sr-only">Go to item 1</span> 4313 </button><button type="button" class="scroll-marker tap-area tap-area--sm" aria-current="false"> 4314 <span class="sr-only">Go to item 2</span> 4315 </button><button type="button" class="scroll-marker tap-area tap-area--sm" aria-current="false"> 4316 <span class="sr-only">Go to item 3</span> 4317 </button><button type="button" class="scroll-marker tap-area tap-area--sm" aria-current="false"> 4318 <span class="sr-only">Go to item 4</span> 4319 </button></carousel-navigation></div></div></product-gallery><safe-sticky class="product-info text-start"> 4320 <div class="product-info__block-list"> 4321<div 4322 class="product-info__block-item" 4323 data-block-id="vendor" 4324 data-block-type="vendor" 4325 4326 4327 4328 ><a href="/collections/vendors?q=Uppernut" class="vendor subheading text-subdued">Uppernut</a></div> 4329<div 4330 class="product-info__block-item" 4331 data-block-id="title" 4332 data-block-type="title" 4333 4334 4335 4336 ><h1 class="product-title h3">Pure Peanut Crackers - Cracked Black Pepper - 20g</h1></div> 4337<div 4338 class="product-info__block-item" 4339 data-block-id="badges" 4340 data-block-type="badges" 4341 4342 data-block-allow-rerender 4343 4344 4345 4346 ><badge-list class="badge-list badge-list--row justify-start "><on-sale-badge class="badge badge--on-sale ">Save 20%</on-sale-badge></badge-list></div> 4347<div 4348 class="product-info__block-item" 4349 data-block-id="price" 4350 data-block-type="price" 4351 4352 data-block-allow-rerender 4353 4354 4355 4356 ><div class="v-stack gap-2"><div class="price-rating" style="display: flex; align-items: center; gap: 0.75rem;"> 4357 <!-- Price --> 4358 <div class="price"><price-list class="price-list justify-start"><sale-price class="h6 text-on-sale">
4359 <span class="sr-only">Sale price</span>£1.32</sale-price><compare-at-price class="h7 line-through"> 4360 <span class="sr-only">Regular price</span>£1.65</compare-at-price></price-list> 4361</div></div></div></div> 4362<div 4363 class="product-info__block-item" 4364 data-block-id="payment_terms" 4365 data-block-type="payment-terms" 4366 4367 data-block-allow-rerender 4368 4369 4370 4371 ><payment-terms class="payment-terms"><form method="post" action="/cart/add" id="product-form-main-16190750032250-template--25965682590074__main-payment-installment" accept-charset="UTF-8" class="shopify-product-form" enctype="multipart/form-data"><input type="hidden" name="form_type" value="product" /><input type="hidden" name="utf8" value="â" /><input type="hidden" name="id" value="57225090072954"><input type="hidden" name="product-id" value="16190750032250" /><input type="hidden" name="section-id" value="template--25965682590074__main" /></form></payment-terms></div> 4372<div 4373 class="product-info__block-item" 4374 data-block-id="inventory_ePBmxB" 4375 data-block-type="inventory" 4376 4377 data-block-allow-rerender 4378 4379 4380 4381 ><variant-inventory class="inventory text-success justify-items-start"><span class="inventory__text">20 in stock</span>
4381<progress-bar 4382 id="progress-bar-template--25965682590074__main-16190750032250" 4383 class="progress-bar" 4384 animate-on-scroll 4385 aria-valuenow="20" 4386 aria-valuemax="50" 4387 ></progress-bar></variant-inventory></div> 4388<div 4389 class="product-info__block-item" 4390 data-block-id="countdown_j36wXB" 4391 data-block-type="countdown" 4392 4393 4394 4395 ></div> 4396<div 4397 class="product-info__block-item" 4398 data-block-id="AZnBrV3NDUnVmL2JVK__loox_reviews_loox_reviews_stories_mKPtR6-1" 4399 data-block-type="@app" 4400 4401 4402 ><div id="shopify-block-AZnBrV3NDUnVmL2JVK__loox_reviews_loox_reviews_stories_mKPtR6" class="shopify-block shopify-app-block"><loox-reviews-stories-entry-widget 4403 class='loox-widget' 4404 4405 4406 product-id='16190750032250' 4407 product-name='Pure Peanut Crackers - Cracked Black Pepper - 20g' 4408 product-image='//sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers.avif?v=1788431863&width=64' 4409 tags='Blood Sugar Management,Crackers,Grain Free,High Protein,Kids Favourites,Nuts,Peanut Butter,Snacks,Truffles & Bites' 4410 4411></loox-reviews-stories-entry-widget> 4412 4413 4414</div></div> 4415<div 4416 class="product-info__block-item" 4417 data-block-id="AOFRCS0RaZUhmVHBRd__loox_reviews_loox_snippets_widget_Amnn7Y-1" 4418 data-block-type="@app" 4419 4420 4421 ><div id="shopify-block-AOFRCS0RaZUhmVHBRd__loox_reviews_loox_snippets_widget_Amnn7Y" class="shopify-block shopify-app-block"><loox-snippets-widget 4422 4423 reviews-type='product-reviews' 4424 product-id='16190750032250' 4425 review-count='' 4426 show-border='true' 4427 show-rating='true' 4428 color-scheme='default' 4429 shadow='' 4430 font-size='14px' 4431 background-color='#ffffff' 4432 text-color='#321e1e' 4433 name-color='' 4434 border-color='#f1e4d3' 4435 rating-icon-color='#f6a429' 4436 border-radius='8px' 4437 show-image='true' 4438 hide-arrows-mobile='false' 4439 reviews-limit='10' 4440 shadow-color='' 4441 alignment='left' 4442 max-width='' 4443 class="loox-widget" 4444> 4445</loox-snippets-widget> 4446 4447 4448</div></div> 4449<div 4450 class="product-info__block-item" 4451 data-block-id="product_variations_kMDzb9" 4452 data-block-type="product-variations" 4453 4454 4455 4456 ><div class="variant-picker"> 4457 <div class="variant-picker__option justify-start"><div class="h-stack gap-2"> 4458 <p class="text-subdued">Flavour:</p><span>Cracked Black Pepper</span></div><div class="variant-picker__option-values h-stack gap-3 wrap"><a 4459 href="/products/pure-peanut-crackers-fiery-chilli-flakes-20g" 4460 4461 class="block-swatch " 4462 ><span>Original</span> 4463 </a><a 4464 href="/products/pure-peanut-crackers-cracked-black-pepper-20g" 4465 4466 class="block-swatch is-selected" 4467 ><span>Cracked Black Pepper</span> 4468 </a><a 4469 href="/products/pure-peanut-crackers-fiery-chilli-flakes-20g-copy" 4470 4471 class="block-swatch " 4472 ><span>Fiery Chilli Flakes</span> 4473 </a></div> 4474 </div> 4475 </div></div> 4476<div 4477 class="product-info__block-item" 4478 data-block-id="variant_picker" 4479 data-block-type="variant-picker" 4480 4481 data-block-allow-rerender 4482 4483 4484 4485 ></div> 4486<div class="product-info__block-group accordion-group" data-group-type="accordion-group"><div 4487 class="product-info__block-item" 4488 data-block-id="accordion_N7g99J" 4489 data-block-type="accordion" 4490 4491 4492 ><accordion-disclosure class="accordion " > 4493 <details class="accordion__disclosure" > 4494 <summary class="accordion__summary "><div class="text-with-icon"><span>Description</span></div><svg 4495 aria-hidden="true" 4496 focusable="false" 4497 width="11" 4498 class="icon icon-accordion-small-arrow" 4499 4500 part="icon" 4501 fill="none"
4502 viewBox="0 0 11 7" 4503 > 4504 <path stroke="currentColor" stroke-width="1.5" d="M10 1 5.5 5.5 1 1" /> 4505 </svg></summary> 4506 4507 <div class="accordion__content prose"><p><meta charset="utf-8"><span>Uppernut Cracked Black Pepper Peanut cracker Bites offer a unique and satisfying crunch, with just the right amount of bold, peppery flavour. Each 20g pack is the perfect on-the-go snack to satisfy your hunger and spice cravings. </span></p> 4508<p><span>These bites are a great alternative to traditional chips or other unhealthy snacks, providing a grain-free, low-carb, delicious snacking experience. Whether you're a fan of bold flavours or just looking for a healthier snack option, our Cracked Black Pepper Peanut Bites are sure to satisfy your cravings.</span></p></div> 4509 </details> 4510</accordion-disclosure> 4511</div> 4512<div 4513 class="product-info__block-item" 4514 data-block-id="nutrition_combined" 4515 data-block-type="nutrition-combined" 4516 4517 4518 4519 ><accordion-disclosure class="accordion " > 4520 <details class="accordion__disclosure" > 4521 <summary class="accordion__summary "><span>Ingredients & Nutrition</span><svg 4522 aria-hidden="true" 4523 focusable="false" 4524 width="11" 4525 class="icon icon-accordion-small-arrow" 4526 4527 part="icon" 4528 fill="none"
4529 viewBox="0 0 11 7" 4530 > 4531 <path stroke="currentColor" stroke-width="1.5" d="M10 1 5.5 5.5 1 1" /> 4532 </svg></summary> 4533 4534 <div class="accordion__content "><div class="v-stack gap-5"><div class="v-stack gap-2"><p class="subheading text-subdued">Ingredients</p><div class="prose"><div class="metafield-rich_text_field"><p>Organic <strong>peanuts</strong> 97%, sea salt, xanthan gum, bicarbonate of soda, peppercorn.</p></div></div> 4535 </div><div class="v-stack gap-2"><p class="subheading text-subdued">Nutritional information</p><style> 4536 .nutrition-table{width:100%;border-collapse:collapse;display:block;overflow-x:auto;} 4537 .nutrition-table thead,.nutrition-table tbody{width:100%;} 4538 .nutrition-table tr{display:table;width:100%;table-layout:fixed;} 4539 .nutrition-table th,.nutrition-table td{padding:.5rem .6rem;border-bottom:1px solid #e5e5e5;text-align:left;} 4540 .nutrition-table th:last-child,.nutrition-table td:last-child{text-align:right;} 4541 .nutrition-table tr:last-child th,.nutrition-table tr:last-child td{border-bottom:none;} 4542 @media (max-width:480px){.nutrition-table th,.nutrition-table td{padding:.4rem .5rem;}} 4543</style> 4544 4545 4546 4547 4548 4549 4550 4551 <table class="nutrition-table"> 4552 <thead> 4553 <tr> 4554 <th>Nutrient</th><th>Per 100g</th><th>Per 20g Serving</th> 4555 </tr> 4556 </thead> 4557 <tbody> 4558 4559 4560 4561 <tr> 4562 4563 <th>Energy</th> 4564 4565 <td>1823 kJ / 435 kcal</td> 4566 4567 <td>364.6 kJ / 87 kcal</td> 4568 4569 </tr> 4570 4571 4572 4573 4574 <tr> 4575 4576 <th>Fat</th> 4577 4578 <td>17.3g</td> 4579 4580 <td>3.46g</td> 4581 4582 </tr> 4583 4584 4585 4586 4587 <tr> 4588 4589 <th>- of which Saturates</th> 4590 4591 <td>3.8g</td> 4592 4593 <td>0.76g</td> 4594 4595 </tr> 4596 4597 4598 4599 4600 <tr> 4601 4602 <th>- Mono-unsaturated</th> 4603 4604 <td>6.4g</td> 4605 4606 <td>1.28g</td> 4607 4608 </tr> 4609 4610 4611 4612 4613 <tr> 4614 4615 <th>- Poly-unsaturated</th> 4616 4617 <td>7.2g</td> 4618 4619 <td>1.44g</td> 4620 4621 </tr> 4622 4623 4624 4625 4626 <tr> 4627 4628 <th>Carbohydrate</th> 4629 4630 <td>17.9g</td> 4631 4632 <td>3.58g</td> 4633 4634 </tr> 4635 4636 4637 4638 4639 <tr> 4640 4641 <th>- of which Sugars</th> 4642 4643 <td>8.5g</td> 4644 4645 <td>1.7g</td> 4646 4647 </tr> 4648 4649 4650 4651 4652 <tr> 4653 4654 <th>Fibre</th> 4655 4656 <td>10.6g</td> 4657 4658 <td>2.12g</td> 4659 4660 </tr> 4661 4662 4663 4664 4665 <tr> 4666 4667 <th>Protein</th> 4668 4669 <td>46.7g</td> 4670 4671 <td>9.34g</td> 4672 4673 </tr> 4674 4675 4676 4677 4678 <tr> 4679 4680 <th>Salt</th> 4681 4682 <td>2.6g</td> 4683 4684 <td>0.52g</td> 4685 4686 </tr> 4687 4688 4689 </tbody> 4690 </table> 4691 </div><div class="v-stack gap-2"><p class="subheading text-subdued">Dietary</p><style> 4692 .diet-badge{ 4693 display:inline-block; 4694 margin:0 0.25rem 0.4rem 0; 4695 padding:0.3rem 0.75rem; 4696 border:1px solid #E6DFDA; 4697 border-radius:9999px; 4698 line-height:1.1; 4699 } 4700 </style> 4701 4702 4703 4704 4705 <div class="dietary-tags">
4706 <span class="diet-badge subheading">Dairy Free</span> 4707 4708 <span class="diet-badge subheading">Gluten Free</span> 4709 4710 <span class="diet-badge subheading">Keto</span> 4711 4712 <span class="diet-badge subheading">Low Carb</span> 4713 4714 <span class="diet-badge subheading">Low Sugar</span> 4715 4716 <span class="diet-badge subheading">Vegan</span> 4717 4718 <span class="diet-badge subheading">Vegetarian</span> 4719 <p class="text-subdued" style="margin-top:0.5rem;font-size:0.75rem;"> 4720 Please check the product packaging for the most up-to-date dietary and allergen details — information shown here cannot be guaranteed. 4721 </p> 4722 </div> 4723 </div></div></div> 4724 </details> 4725</accordion-disclosure> 4726</div> 4727<div 4728 class="product-info__block-item" 4729 data-block-id="accordion_zyTtgQ" 4730 data-block-type="accordion" 4731 4732 4733 ></div> 4734<div 4735 class="product-info__block-item" 4736 data-block-id="complementary_products_pmGxXA" 4737 data-block-type="complementary-products" 4738 4739 4740 4741 ><style> 4742 /* smaller product card */ 4743 .product-cross-sell { 4744 border: 1px solid #dcd7d3; 4745 border-radius: 4px; 4746 background: #fff; 4747 display: flex; 4748 align-items: center; 4749 gap: 0.5rem; 4750 padding: 0.75rem; 4751 margin-bottom: 0.5rem; 4752 } 4753 .product-cross-sell img { 4754 max-width: 80px; 4755 max-height: 80px; 4756 border-radius: 4px; 4757 object-fit: cover; 4758 } 4759 4760 /* Price + stars container */ 4761 .product-cross-sell__price-wrapper { 4762 display: flex; 4763 align-items: center; 4764 gap: 0.75rem; 4765 } 4766 .product-cross-sell__price { 4767 font-size: .95rem; 4768 color: rgb(var(--text-color) / .6); 4769 } 4770 .star-rating { 4771 display: flex; 4772 align-items: center; 4773 } 4774 #cart-drawer-cross-sell-template--25965682590074__main-wrapper .star-rating span { 4775 margin-left: 0.25rem; 4776 font-size: .85rem; 4777 color: rgb(var(--text-color)/.6); 4778 line-height: 1; 4779 } 4780 .product-cross-sell__form button { 4781 align-self: flex-start; 4782 } 4783 #cart-drawer-cross-sell-template--25965682590074__main-wrapper .product-cross-sell__promotion-badges { 4784 align-self: flex-start; 4785 margin-bottom: .25rem; 4786 } 4787 #cart-drawer-cross-sell-template--25965682590074__main-wrapper .product-cross-sell__price s { 4788 margin-left: .35rem; 4789 color: rgb(var(--text-color) / .6); 4790 } 4791 4792 /* Accordion & nav arrows */ 4793 .accordion__summary { display: flex; align-items: center; } 4794 .accordion__summary > span:first-child { margin-right: .5rem; } 4795 .accordion__summary .h-stack { 4796 margin-left: auto; 4797 display: flex; 4798 gap: 5px; 4799 } 4800 #cart-drawer-cross-sell-template--25965682590074__main-wrapper .accordion__disclosure:not([open]) .circle-button { 4801 opacity: 0 !important; 4802 pointer-events: none; 4803 } 4804 #cart-drawer-cross-sell-template--25965682590074__main-wrapper .circle-button.at-start, 4805 #cart-drawer-cross-sell-template--25965682590074__main-wrapper .circle-button.at-end { 4806 opacity: 0.6 !important; 4807 cursor: default !important; 4808 pointer-events: none !important; 4809 } 4810 #cart-drawer-cross-sell-template--25965682590074__main-wrapper .circle-button.at-start:hover, 4811 #cart-drawer-cross-sell-template--25965682590074__main-wrapper .circle-button.at-end:hover, 4812 #cart-drawer-cross-sell-template--25965682590074__main-wrapper .circle-button.at-start:focus, 4813 #cart-drawer-cross-sell-template--25965682590074__main-wrapper .circle-button.at-end:focus, 4814 #cart-drawer-cross-sell-template--25965682590074__main-wrapper .circle-button.at-start:active, 4815 #cart-drawer-cross-sell-template--25965682590074__main-wrapper .circle-button.at-end:active { 4816 background-color: transparent !important; 4817 box-shadow: none !important; 4818 transform: none !important; 4819 border-color: inherit !important; 4820 color: inherit !important; 4821 } 4822 #cart-drawer-cross-sell-template--25965682590074__main-wrapper .circle-button.at-start svg, 4823 #cart-drawer-cross-sell-template--25965682590074__main-wrapper .circle-button.at-end svg { 4824 fill: currentColor !important; 4825 } 4826</style> 4827 4828<accordion-disclosure 4829 id="cart-drawer-cross-sell-template--25965682590074__main-wrapper" 4830 class="accordion" 4831 4832> 4833 <details class="accordion__disclosure"> 4834 <summary class="accordion__summary subheading_title">
4835 <span>Perfect Pairings</span> 4836 <div class="h-stack"> 4837 <button id="cart-drawer-cross-sell-template--25965682590074__main-prev" class="circle-button" onclick="event.stopPropagation()"> 4838 <span class="sr-only">Previous</span><svg 4839 aria-hidden="true" 4840 focusable="false" 4841 width="9" 4842 class="icon icon-big-arrow-left icon--direction-aware" 4843 4844 part="icon" 4845 viewBox="0 0 36 36" 4846 > 4847 <path fill="none" stroke="currentColor" stroke-width="2" d="M35 18H3M19.5 34.5 3 18 19.5 1.5"/> 4848 </svg></button> 4849 <button id="cart-drawer-cross-sell-template--25965682590074__main-next" class="circle-button" onclick="event.stopPropagation()"> 4850 <span class="sr-only">Next</span><svg 4851 aria-hidden="true" 4852 focusable="false" 4853 width="9" 4854 class="icon icon-big-arrow-right icon--direction-aware" 4855 4856 part="icon" 4857 viewBox="0 0 36 36" 4858 > 4859 <path fill="none" stroke="currentColor" stroke-width="2" d="M1 18h32M16.5 1.5 33 18 16.5 34.5"/> 4860 </svg></button> 4861 </div><svg 4862 aria-hidden="true" 4863 focusable="false" 4864 width="11" 4865 class="icon icon-accordion-small-arrow" 4866 4867 part="icon" 4868 fill="none"
4869 viewBox="0 0 11 7" 4870 > 4871 <path stroke="currentColor" stroke-width="1.5" d="M10 1 5.5 5.5 1 1" /> 4872 </svg></summary> 4873 <div class="accordion__content"> 4874 <scroll-carousel id="cart-drawer-cross-sell-template--25965682590074__main" class="cart-drawer__cross-sell-carousel scroll-area bleed"> 4875 </scroll-carousel> 4876 </div> 4877 </details> 4878</accordion-disclosure> 4879 4880<template id="cart-drawer-cross-sell-template--25965682590074__main-template"> 4881 <div class="product-cross-sell snap-start"> 4882 <a href="#" data-instant class="product-cross-sell__link"> 4883 <div class="product-cross-sell__image-placeholder"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 525.5 525.5"><path d="M324.5 212.7H203c-1.6 0-2.8 1.3-2.8 2.8V308c0 1.6 1.3 2.8 2.8 2.8h121.6c1.6 0 2.8-1.3 2.8-2.8v-92.5c0-1.6-1.3-2.8-2.9-2.8zm1.1 95.3c0 .6-.5 1.1-1.1 1.1H203c-.6 0-1.1-.5-1.1-1.1v-92.5c0-.6.5-1.1 1.1-1.1h121.6c.6 0 1.1.5 1.1 1.1V308z"/><path d="M210.4 299.5H240v.1s.1 0 .2-.1h75.2v-76.2h-105v76.2zm1.8-7.2l20-20c1.6-1.6 3.8-2.5 6.1-2.5s4.5.9 6.1 2.5l1.5 1.5 16.8 16.8c-12.9 3.3-20.7 6.3-22.8 7.2h-27.7v-5.5zm101.5-10.1c-20.1 1.7-36.7 4.8-49.1 7.9l-16.9-16.9 26.3-26.3c1.6-1.6 3.8-2.5 6.1-2.5s4.5.9 6.1 2.5l27.5 27.5v7.8zm-68.9 15.5c9.7-3.5 33.9-10.9 68.9-13.8v13.8h-68.9zm68.9-72.7v46.8l-26.2-26.2c-1.9-1.9-4.5-3-7.3-3s-5.4 1.1-7.3 3l-26.3 26.3-.9-.9c-1.9-1.9-4.5-3-7.3-3s-5.4 1.1-7.3 3l-18.8 18.8V225h101.4z"/><path d="M232.8 254c4.6 0 8.3-3.7 8.3-8.3s-3.7-8.3-8.3-8.3-8.3 3.7-8.3 8.3 3.7 8.3 8.3 8.3zm0-14.9c3.6 0 6.6 2.9 6.6 6.6s-2.9 6.6-6.6 6.6-6.6-2.9-6.6-6.6 3-6.6 6.6-6.6z"/></svg></div> 4884 </a> 4885 <div class="v-stack gap-1"> 4886 <div class="badge-list badge-list--row product-cross-sell__promotion-badges"></div> 4887 <a href="#" class="subheading" data-instant></a> 4888 <div class="product-cross-sell__price-wrapper"> 4889 <span class="product-cross-sell__price"></span> 4890 <span data-loox-rating class="star-rating"></span> 4891 </div> 4892 <button type="button" class="link subheading subheading-xs" aria-controls=""></button> 4893 <quick-buy-modal 4894 id="" 4895 product-url="" 4896 class="modal modal--quick-buy color-scheme color-scheme--scheme-1" 4897 ></quick-buy-modal> 4898 </div> 4899 </div> 4900</template> 4901
4902<script> 4903 // Define Shopify.formatMoney globally if not already defined 4904 window.Shopify = window.Shopify || {}; 4905 Shopify.money_format = "£{{amount}}"; 4906 if (!Shopify.formatMoney) { 4907 Shopify.formatMoney = function(cents, format) { 4908 const money = format || Shopify.money_format; 4909 const placeholder = /\{\{\s*amount\s*\}\}/; 4910 const formatted = isNaN(cents) ? '0.00' : (cents/100).toFixed(2); 4911 return money.replace(placeholder, formatted); 4912 }; 4913 } 4914 4915 function renderStars(el, rating) { 4916 const SVG = `<svg 4917 aria-hidden="true" 4918 focusable="false" 4919 width="16" 4920 class="icon icon-star-rating" 4921 4922 part="icon" 4923 viewBox="0 0 13 13" 4924 > 4925 <path fill="#f6a429" d="m6.5 0 1.607 4.623 4.893.1-3.9 2.956 1.417 4.685L6.5 9.568l-4.017 2.796L3.9 7.679 0 4.723l4.893-.1L6.5 0Z"/> 4926 </svg>`; 4927 el.innerHTML = `${SVG}<span>${rating.toFixed(1)}</span>`; 4928 } 4929 4930 function toCardRecommendation(rec) { 4931 const featuredImage = rec?.featured_image?.url || rec?.image?.src || rec?.image?.url || rec?.image || rec?.images?.[0]?.src || rec?.images?.[0]?.url || ''; 4932 const selectedVariantId = rec?.selected_or_first_available_variant_id || rec?.variants?.[0]?.id || null; 4933 const variantCount = Number(rec?.variant_count || rec?.variants?.length || 0); 4934 const available = typeof rec?.available === 'boolean' ? rec.available : (rec?.variants?.[0]?.available ?? true); 4935 const priceCents = rec?.price_min != null && Number.isFinite(Number(rec.price_min)) ? Number(rec.price_min) : rec?.variants?.[0]?.price != null ? Math.round(parseFloat(rec.variants[0].price) * 100) : null; 4936 const compareAtCents = rec?.compare_at_price_min != null && Number.isFinite(Number(rec.compare_at_price_min)) ? Number(rec.compare_at_price_min) : rec?.variants?.[0]?.compare_at_price != null ? Math.round(parseFloat(rec.variants[0].compare_at_price) * 100) : null; 4937 4938 return { 4939 id: rec?.product_id ?? rec?.id ?? null, 4940 url: rec?.url || rec?.link || (rec?.handle ? `/products/${rec.handle}` : null), 4941 title: rec?.title || '', 4942 image: { src: featuredImage, alt: rec?.featured_image?.alt || rec?.image?.alt || rec?.title || '' }, 4943 variantId: selectedVariantId, 4944 variantCount, 4945 available, 4946 priceCents, 4947 compareAtCents, 4948 rating: rec?.metafields?.loox?.avg_rating ?? null, 4949 reason: rec?.reason || null 4950 }; 4951 } 4952 4953 async function refreshRecommendationProduct(rec) { 4954 const controller = new AbortController(); 4955 const timeout = setTimeout(() => controller.abort(), 4000); 4956 try { 4957 const url = new URL(rec.url, window.location.origin); 4958 if (url.origin !== window.location.origin) throw new Error('Invalid product origin'); 4959 url.pathname = url.pathname.replace(/\/$/, '') + '.js'; 4960 url.search = ''; 4961 url.hash = ''; 4962 const response = await fetch(url.href, { credentials: 'same-origin', cache: 'no-store', signal: controller.signal, headers: { Accept: 'application/json' } }); 4963 if (!response.ok) throw new Error('Product could not be loaded'); 4964 const product = await response.json(); 4965 const variants = Array.isArray(product.variants) ? product.variants : []; 4966 const selected = variants.find(variant => String(variant.id) === String(rec.variantId) && variant.available) 4967 || variants.find(variant => variant.available) || variants[0]; 4968 if (!selected || selected.price == null || !Number.isFinite(Number(selected.price))) throw new Error('Product price unavailable'); 4969 return { 4970 ...rec, id: product.id, variantId: selected.id, 4971 priceCents: Number(selected.price), compareAtCents: Number(selected.compare_at_price) || null, 4972 variantCount: variants.length, available: Boolean(selected.available), 4973 needsOptions: variants.length > 1 || (Array.isArray(product.selling_plan_groups) && product.selling_plan_groups.length > 0) 4974 }; 4975 } catch { 4976 return { ...rec, priceCents: null, compareAtCents: null, needsOptions: true }; 4977 } finally { 4978 clearTimeout(timeout); 4979 } 4980 } 4981 4982 function getRecSessionId() { 4983 let id;
4984 try { id = sessionStorage.getItem('rec_session_id'); } catch {} 4985 if (!id) { 4986 id = window.__recSessionId || (crypto.randomUUID ? crypto.randomUUID() : `rec-session-${Date.now()}`); 4987 try { sessionStorage.setItem('rec_session_id', id); } catch {} 4988 } 4989 window.__recSessionId = id; 4990 return id; 4991 } 4992 4993 function sendRecEvent(payload) { 4994 const body = JSON.stringify({ 4995 ...payload, 4996 session_id: getRecSessionId(), 4997 page_path: window.location.pathname, 4998 timestamp: new Date().toISOString() 4999 }); 5000 5001 const endpoint = 'https://api.sowandarrow.com/recommendations'; 5002 const pingUrl = `${endpoint}?rx=1&d=${encodeURIComponent(body)}`; 5003 const img = new Image(); 5004 window.__recoEventPings = window.__recoEventPings || []; 5005 window.__recoEventPings.push(img); 5006 img.onload = img.onerror = () => { 5007 window.__recoEventPings = window.__recoEventPings.filter((x) => x !== img); 5008 }; 5009 img.src = pingUrl; 5010 } 5011 5012 const sentImpressions = new Set(); 5013 function observeRecImpression(el, payload) { 5014 if (!el) return; 5015 const key = [ 5016 payload.placement || 'unknown', 5017 payload.request_uuid || 'no-request', 5018 payload.variant_id || payload.product_id || 'no-product' 5019 ].join('|'); 5020 if (sentImpressions.has(key)) return; 5021 5022 const observer = new IntersectionObserver((entries, obs) => { 5023 if (!entries.some(entry => entry.isIntersecting && entry.intersectionRatio >= 0.35)) return; 5024 sentImpressions.add(key); 5025 sendRecEvent({ ...payload, event_type: 'recommendation_impression' }); 5026 obs.disconnect(); 5027 }, { threshold: [0.35] }); 5028 5029 observer.observe(el); 5030 } 5031 5032 document.addEventListener('DOMContentLoaded', () => { 5033 requestAnimationFrame(async () => { 5034 const wrapper = document.getElementById('cart-drawer-cross-sell-template--25965682590074__main-wrapper'); 5035 const details = wrapper.querySelector('details.accordion__disclosure'); 5036 const summary = details.querySelector('summary'); 5037 const carousel = wrapper.querySelector('#cart-drawer-cross-sell-template--25965682590074__main'); 5038 const prevBtn = wrapper.querySelector('#cart-drawer-cross-sell-template--25965682590074__main-prev'); 5039 const nextBtn = wrapper.querySelector('#cart-drawer-cross-sell-template--25965682590074__main-next'); 5040 const tpl = document.getElementById('cart-drawer-cross-sell-template--25965682590074__main-template'); 5041 5042 if (!details || !summary || !carousel || !tpl) return; 5043 5044 // disable manual toggle until ready 5045 summary.style.pointerEvents = 'none'; 5046 5047 // 1) load cart.js for dynamic cart params 5048 let cart = { items: [], item_count: 0, items_subtotal_price: 0 };
5049 try { 5050 cart = await fetch('/cart.js').then(r => r.json()); 5051 } catch {} 5052 5053 const variantIdsArr = cart.items.map(i => i.variant_id); 5054 const customerProfile = null; 5055 5056 // 2) build query params 5057 const params = new URLSearchParams(); 5058 params.set('type', 'product-page'); 5059 params.set('shopify_product_ids', '16190750032250'); 5060 5061 if (customerProfile) { 5062 params.set('customer_profile', typeof customerProfile === 'string' ? customerProfile : JSON.stringify(customerProfile)); 5063 } 5064 params.set('metafields', 'yes'); 5065 params.set('variant_metafields', 'true'); 5066 params.set('time', new Date().toISOString()); 5067 const requestUuid = crypto.randomUUID ? crypto.randomUUID() : `uuid-${Date.now()}`; 5068 params.set('uuid', requestUuid); 5069 params.set('session_id', getRecSessionId()); 5070 params.set('limit', '10'); 5071 // optional url, format, country_code if you choose to set them via JS or data-attrs 5072 params.set('url', window.location.pathname); 5073 params.set('format', 'pretty'); 5074 const localeCountry = ((navigator.language || '').split('-').pop() || '').toUpperCase(); 5075 const cc = /^[A-Z]{2}$/.test(localeCountry) ? localeCountry : "GB"; 5076 if (cc) params.set('country_code', cc); 5077 params.set('type', 'product-page'); 5078 5079 // 3) fetch recommendations
5080 const endpoint = `https://api.sowandarrow.com/recommendations?${params}`; 5081 let recs = []; 5082 try { 5083 const json = await fetch(endpoint, { credentials:'include' }).then(r => r.json()); 5084 5085 const requestId = json.request_uuid || requestUuid; 5086 const source = Array.isArray(json.products) ? json.products : []; 5087 recs = source 5088 .map(toCardRecommendation) 5089 .filter((rec) => rec.url && rec.variantId) 5090 .map((rec) => ({ ...rec, __request_uuid: requestId })) 5091 .slice(0, 10); 5092 } catch { 5093 } 5094 5095 // filter out in-cart variants 5096 const inCartSet = new Set(variantIdsArr.map((id) => String(id))); 5097 recs = recs.filter((rec) => !inCartSet.has(String(rec.variantId))); 5098 if (!recs.length) { 5099 wrapper.style.display = 'none'; 5100 return; 5101 } 5102 5103 recs = await Promise.all(recs.map(refreshRecommendationProduct)); 5104 recs = recs.filter(rec => !inCartSet.has(String(rec.variantId))); 5105 if (!recs.length) { wrapper.style.display = 'none'; summary.style.pointerEvents = ''; return; } 5106 5107 // auto-open accordion with local animation (avoids bubbling clicks in cart drawer) 5108 setTimeout(() => { 5109 if (!details.open) { 5110 const summaryHeight = summary.clientHeight; 5111 5112 wrapper.classList.add('is-open'); 5113 details.open = true; 5114 details.style.overflow = 'hidden'; 5115 5116 const fullHeight = details.clientHeight; 5117 5118 details.animate( 5119 [ 5120 { height: `${summaryHeight}px` }, 5121 { height: `${fullHeight}px` } 5122 ], 5123 { duration: 250, easing: 'ease-in-out' } 5124 ).finished.finally(() => { 5125 details.style.height = ''; 5126 details.style.overflow = ''; 5127 }); 5128 5129 const content = details.querySelector('summary + *'); 5130 if (content) { 5131 content.animate( 5132 [ 5133 { opacity: 0, transform: 'translateY(4px)' }, 5134 { opacity: 1, transform: 'translateY(0px)' } 5135 ], 5136 { duration: 150, delay: 150, easing: 'ease' } 5137 ); 5138 } 5139 } 5140 5141 summary.style.pointerEvents = ''; 5142 }, 500); 5143 5144 // 4) render cards 5145 carousel.innerHTML = ''; 5146 for (const rec of recs) { 5147 const frag = document.createRange().createContextualFragment(tpl.innerHTML); 5148 const card = frag.firstElementChild; 5149 const link = card.querySelector('a.product-cross-sell__link'); 5150 const title = card.querySelector('a.subheading'); 5151 const priceEl = card.querySelector('.product-cross-sell__price'); 5152 const promotionBadges = card.querySelector('.product-cross-sell__promotion-badges'); 5153 const ratingEl = card.querySelector('[data-loox-rating]'); 5154 5155 const trackClick = () => { 5156 sendRecEvent({ 5157 event_type: 'recommendation_click', 5158 recommendation_type: rec.reason || 'product-page', 5159 placement: 'product-accordion', 5160 request_uuid: rec.__request_uuid || requestUuid, 5161 source_product_id: Number('16190750032250'), 5162 product_id: rec.id, 5163 variant_id: rec.variantId, 5164 url: rec.url, 5165 customer_id: null 5166 }); 5167 if (window.__storeRecContext) { 5168 window.__storeRecContext({ 5169 product_id: rec.id, 5170 variant_id: rec.variantId, 5171 recommendation_type: rec.reason || 'product-page', 5172 placement: 'product-accordion', 5173 request_uuid: rec.__request_uuid || requestUuid, 5174 source_product_id: Number('16190750032250'), 5175 customer_id: null 5176 }); 5177 } 5178 }; 5179 5180 link.addEventListener('click', trackClick); 5181 title.addEventListener('click', trackClick); 5182 5183 link.href = rec.url; 5184 5185 const imgPlaceholder = card.querySelector('.product-cross-sell__image-placeholder'); 5186 if (imgPlaceholder) { 5187 const img = document.createElement('img'); 5188 img.src = rec.image.src; 5189 img.alt = rec.image.alt || rec.title; 5190 img.width = 100; 5191 img.height = 100; 5192 imgPlaceholder.replaceWith(img); 5193 } 5194 title.href = rec.url; 5195 title.textContent = rec.title; 5196 5197 // 1) price + stars 5198 // set the price 5199 if (rec.priceCents != null) { 5200 const promotion = window.WindfallProductPromotion?.({ 5201 productId: rec.id, 5202 variantId: rec.variantId, 5203 priceCents: rec.priceCents, 5204 compareAtCents: rec.compareAtCents 5205 }) || { effectivePrice: rec.priceCents, struckPrice: rec.compareAtCents || 0 }; 5206 priceEl.textContent = Shopify.formatMoney(promotion.effectivePrice, Shopify.money_format); 5207 if (promotion.struckPrice > promotion.effectivePrice) { 5208 const compare = document.createElement('s'); 5209 compare.textContent = Shopify.formatMoney(promotion.struckPrice, Shopify.money_format); 5210 priceEl.appendChild(compare); 5211 const saleBadge = document.createElement('span'); 5212 saleBadge.className = 'badge badge--on-sale'; 5213 saleBadge.textContent = `Save ${promotion.savingPercent}%`; 5214 promotionBadges.appendChild(saleBadge); 5215 } 5216 if (promotion.specialOffer) { 5217 const specialBadge = document.createElement('span'); 5218 specialBadge.className = 'badge badge--on-sale badge--special-offer'; 5219 specialBadge.textContent = 'Special Offer'; 5220 promotionBadges.appendChild(specialBadge); 5221 } 5222 if (!promotionBadges.children.length) promotionBadges.remove(); 5223 } 5224 5225 // pull out, parse & render the rating 5226 const rawRating = rec.rating; 5227 const rating = rawRating != null ? parseFloat(rawRating) : NaN; 5228 5229 if (!isNaN(rating) && rating > 0) { 5230 renderStars(ratingEl, rating); 5231 } else { 5232 ratingEl.remove(); 5233 } 5234 5235 // stock/options/add-to-cart 5236 const variantId = rec.variantId; 5237 const inStock = rec.available; 5238 const needsOpt = rec.needsOptions; 5239 const placeholder = card.querySelector('button'); 5240 const modal = card.querySelector('quick-buy-modal'); 5241 const qbId = `cart-drawer-cross-sell-template--25965682590074__main-qb-${rec.id}`; 5242 5243 if (!inStock) { 5244 const f = document.createElement('form'); 5245 f.className = 'product-cross-sell__form'; 5246 const b = document.createElement('button'); 5247 b.type = 'submit'; b.disabled = true; 5248 b.className = 'link subheading subheading-xs';
5249 b.textContent = "Sold out"; 5250 f.append(b); placeholder.replaceWith(f); 5251 modal?.remove(); 5252 5253 } else if (needsOpt) { 5254 const f = document.createElement('form'); 5255 f.className = 'product-cross-sell__form'; 5256 const b = document.createElement('button'); 5257 b.type = 'button'; 5258 b.className = 'link subheading subheading-xs'; 5259 b.textContent = "Choose options"; 5260 b.setAttribute('aria-controls', qbId); 5261 b.addEventListener('click', trackClick); 5262 f.append(b); placeholder.replaceWith(f); 5263 if (modal) { modal.id = qbId; modal.setAttribute('product-url', rec.url); } 5264 5265 } else { 5266 const f = document.createElement('form'); 5267 f.className = 'product-cross-sell__form'; 5268 f.method = 'post'; 5269 f.action = '/cart/add.js'; 5270 f.addEventListener('submit', async e => { 5271 e.preventDefault(); 5272 try { 5273 const response = await fetch('/cart/add.js', { 5274 method: 'POST', 5275 headers: {'Content-Type':'application/json'}, 5276 body: JSON.stringify({ id: variantId, quantity: 1 }) 5277 }); 5278 if (!response.ok) throw new Error('Cart request failed'); 5279 sendRecEvent({ 5280 event_type: 'recommendation_add_to_cart', 5281 recommendation_type: rec.reason || 'product-page', 5282 placement: 'product-accordion', 5283 request_uuid: rec.__request_uuid || requestUuid, 5284 source_product_id: Number('16190750032250'), 5285 product_id: rec.id, 5286 variant_id: variantId, 5287 customer_id: null 5288 }); 5289 document.dispatchEvent(new CustomEvent('cart:refresh',{ bubbles:true })); 5290 document.querySelector('a[href="/cart"]')?.click(); 5291 } catch {} 5292 }); 5293 const inp = document.createElement('input'); 5294 inp.type = 'hidden'; inp.name = 'id'; inp.value = variantId; 5295 const sb = document.createElement('button'); 5296 sb.type = 'submit'; 5297 sb.className = 'link subheading subheading-xs'; 5298 sb.textContent = "Add to cart"; 5299 f.append(inp, sb); 5300 placeholder.replaceWith(f); 5301 modal?.remove(); 5302 } 5303 5304 carousel.appendChild(card); 5305 observeRecImpression(card, { 5306 recommendation_type: rec.reason || 'product-page', 5307 placement: 'product-accordion', 5308 request_uuid: rec.__request_uuid || requestUuid, 5309 source_product_id: Number('16190750032250'), 5310 product_id: rec.id, 5311 variant_id: rec.variantId, 5312 customer_id: null 5313 }); 5314 } 5315 5316 // 5) arrows 5317 function updateArrows() { 5318 const max = carousel.scrollWidth - carousel.clientWidth; 5319 prevBtn.classList.toggle('at-start', carousel.scrollLeft <= 0); 5320 nextBtn.classList.toggle('at-end', carousel.scrollLeft >= max); 5321 } 5322 updateArrows(); 5323 prevBtn.addEventListener('click', e => { 5324 e.stopPropagation(); 5325 if (!prevBtn.classList.contains('at-start')) { 5326 carousel.scrollBy({ left:-carousel.clientWidth, behavior:'smooth' }); 5327 } 5328 }); 5329 nextBtn.addEventListener('click', e => { 5330 e.stopPropagation(); 5331 if (!nextBtn.classList.contains('at-end')) { 5332 carousel.scrollBy({ left:carousel.clientWidth, behavior:'smooth' }); 5333 } 5334 }); 5335 carousel.addEventListener('scroll', updateArrows); 5336 }); 5337 }); 5338</script>
5338 5339 5340</div></div> 5341<div 5342 class="product-info__block-item" 5343 data-block-id="delivery_countdown_VCLrUj" 5344 data-block-type="delivery-countdown" 5345 5346 5347 5348 > 5349<div id="delivery-countdown-delivery_countdown_VCLrUj" class="h-stack align-start gap-2.5 delivery-countdown" hidden><svg 5350 aria-hidden="true" 5351 focusable="false" 5352 width="14" 5353 class="text-success icon icon-success-checkmark offset-icon" 5354 5355 part="icon" 5356 viewBox="0 0 14 12" 5357 > 5358 <path fill="none" stroke="currentColor" d="m1 6 4 4 8-8"/> 5359 </svg><div class="v-stack gap-1"> 5360 <p class="delivery-countdown__buy"></p> 5361 <p class="delivery-countdown__eta subheading subheading-xs text-subdued"></p> 5362 </div> 5363</div> 5364 5365 5366
5367<script> 5368(() => { 5369 const root = document.getElementById('delivery-countdown-delivery_countdown_VCLrUj'); 5370 if (!root) return; 5371 5372 const CONFIG = { 5373 cutoff: '13:00', 5374 etaDays: 2, 5375 fallbackBuy: "Order Before Midnight", 5376 fallbackEta: "for Carbon Neutral Speedy Delivery.", 5377 showNonUK: true 5378 }; 5379 5380 function isUK() { 5381 try { 5382 return Intl.DateTimeFormat().resolvedOptions().timeZone.startsWith('Europe'); 5383 } catch { return true; } 5384 } 5385 if (!isUK() && !CONFIG.showNonUK) return; 5386 5387 const cutoffParts = CONFIG.cutoff.split(':').map(Number); 5388 5389 function render() { 5390 const root = document.getElementById('delivery-countdown-delivery_countdown_VCLrUj'); 5391 if (!root) return; 5392 5393 const CONFIG = { 5394 cutoff: '13:00', 5395 etaDays: 2, 5396 fallbackBuy: "Order Before Midnight", 5397 fallbackEta: "for Carbon Neutral Speedy Delivery.", 5398 showNonUK: true 5399 }; 5400 5401 function isUK() { 5402 try { 5403 return Intl.DateTimeFormat().resolvedOptions().timeZone.startsWith('Europe'); 5404 } catch { return true; } 5405 } 5406 if (!isUK() && !CONFIG.showNonUK) return; 5407 5408 const now = new Date(); 5409 const cutoff = new Date(); cutoff.setHours(cutoffParts[0],cutoffParts[1],0,0); 5410 let diff = cutoff - now; 5411 let buyCopy = '', etaCopy = ''; 5412 if (diff > 0) { 5413 const mins = Math.ceil(diff/60000); 5414 if (mins < 60) { 5415 buyCopy = `Order in the next ${mins}m`; 5416 } else { 5417 const hrs = Math.floor(mins/60); 5418 const mm = String(mins%60).padStart(2,'0'); 5419 buyCopy = `Order in the next ${hrs}h ${mm}m`; 5420 } 5421 } else { 5422 buyCopy = CONFIG.fallbackBuy; 5423 etaCopy = CONFIG.fallbackEta; 5424 } 5425 if (!etaCopy) { 5426 if (CONFIG.etaDays > 2) { 5427 etaCopy = CONFIG.fallbackEta; 5428 } else { 5429 const deliveryDate = new Date(now); 5430 deliveryDate.setDate(deliveryDate.getDate() + CONFIG.etaDays); 5431 const weekday = deliveryDate.toLocaleDateString('en-GB', { weekday: 'long' }); 5432 etaCopy = `Estimated delivery ${CONFIG.etaDays === 1 ? 'Tomorrow' : weekday}.`; 5433 } 5434 } 5435 root.querySelector('.delivery-countdown__buy').textContent = buyCopy; 5436 root.querySelector('.delivery-countdown__eta').textContent = etaCopy; 5437 root.hidden = false; 5438 } 5439 5440 // initial render 5441 render(); 5442 // align first update to next full minute 5443 const nowMs = Date.now(); 5444 const msToNextMinute = 60000 - (nowMs % 60000); 5445 setTimeout(() => { 5446 render(); 5447 setInterval(render, 60000); 5448 }, msToNextMinute); 5449})(); 5450</script>
5450 5451 5452</div> 5453<div 5454 class="product-info__block-item" 5455 data-block-id="pickup_availability_btGJA6" 5456 data-block-type="pickup-availability" 5457 5458 data-block-allow-rerender 5459 5460 5461 5462 ><pickup-availability class="pickup-availability"><div class="h-stack align-start justify-start gap-2.5"><svg 5463 aria-hidden="true" 5464 focusable="false" 5465 width="14" 5466 class="text-success icon icon-success-checkmark offset-icon" 5467 5468 part="icon" 5469 viewBox="0 0 14 12" 5470 > 5471 <path fill="none" stroke="currentColor" d="m1 6 4 4 8-8"/> 5472 </svg><div class="v-stack justify-items-start gap-3.5"> 5473 <div><p>Pickup available at Sow & Arrow - Clevedon</p> 5474 <p class="subheading subheading-xs text-subdued">Usually ready in 4 hours</p></div> 5475 5476 <button type="button" class="subheading subheading-xs link" aria-controls="store-availability-drawer-16190750032250" aria-expanded="false">View store information</button> 5477 </div> 5478 </div> 5479 5480 <x-drawer id="store-availability-drawer-16190750032250" class="drawer drawer--pickup-availability color-scheme color-scheme--scheme-1"> 5481 <div class="h-stack gap-5" slot="header"><img src="//sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers.avif?v=1788431863&width=996" alt="Pure Peanut Crackers - Cracked Black Pepper - 20g" srcset="//sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers.avif?v=1788431863&width=72 72w, //sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers.avif?v=1788431863&width=144 144w" width="996" height="996" loading="lazy" sizes="72px" class="constrained-image" style="--image-max-width: 72px"><div class="v-stack gap-1"> 5482 <p class="h6">Pure Peanut Crackers - Cracked Black Pepper - 20g</p></div> 5483 </div> 5484 5485 <div class="v-stack gap-6"><div class="v-stack gap-2.5"> 5486 <div class="v-stack gap-2"> 5487 <p class="h6">Sow & Arrow - Clevedon</p> 5488 5489 <div class="h-stack gap-2.5"><svg 5490 aria-hidden="true" 5491 focusable="false" 5492 width="14" 5493 class="text-success icon icon-success-checkmark" 5494 5495 part="icon"
5496 viewBox="0 0 14 12" 5497 > 5498 <path fill="none" stroke="currentColor" d="m1 6 4 4 8-8"/> 5499 </svg><span>Pickup available, Usually ready in 4 hours</span></div> 5500 </div> 5501 5502 <div class="text-subdued"><p>15 Old Street<br>Clevedon BS21 6ND<br>United Kingdom</p><a href="tel:+441275870762">+441275870762</a></div> 5503 </div></div> 5504 </x-drawer></pickup-availability></div> 5505<div 5506 class="product-info__block-item" 5507 data-block-id="buy_buttons" 5508 data-block-type="buy-buttons" 5509 5510 data-block-allow-rerender 5511 5512 5513 5514 ><product-form><form method="post" action="/cart/add" id="product-form-main-16190750032250-template--25965682590074__main" accept-charset="UTF-8" class="shopify-product-form" enctype="multipart/form-data"><input type="hidden" name="form_type" value="product" /><input type="hidden" name="utf8" value="â" /><input type="hidden" name="id" value="57225090072954"> 5515 5516 5517 5518 <div class="v-stack gap-4"><div class="v-stack gap-2"> 5519 <buy-buttons 5520 class="buy-buttons buy-buttons--has-dynamic" 5521 form="product-form-main-16190750032250-template--25965682590074__main" 5522 > 5523 <div class="v-stack gap-2"><div class="h-stack gap-2"><quantity-selector class="quantity-selector " ><button type="button" class="quantity-selector__button" disabled> 5524 <span class="sr-only">Decrease quantity</span><svg 5525 aria-hidden="true" 5526 focusable="false" 5527 width="8" 5528 fill="none" 5529 class="icon icon-quantity-minus" 5530 5531 part="icon"
5532 viewBox="0 0 8 2" 5533 > 5534 <path d="M0 1H8" stroke="currentColor" stroke-width="1.5"/> 5535 </svg></button><quantity-input class="contents"> 5536 <input class="quantity-selector__input subheading" type="number" value="1" name="quantity" inputmode="numeric" step="1" min="1" max="20" form="product-form-main-16190750032250-template--25965682590074__main" aria-label="Change quantity"></quantity-input><button type="button" class="quantity-selector__button" > 5537 <span class="sr-only">Increase quantity</span><svg 5538 aria-hidden="true" 5539 focusable="false" 5540 width="8" 5541 fill="none" 5542 class="icon icon-quantity-plus" 5543 5544 part="icon" 5545 viewBox="0 0 8 8" 5546 > 5547 <path d="M0 4H8" stroke="currentColor" stroke-width="1.5"/> 5548 <path d="M4 0V8" stroke="currentColor" stroke-width="1.5"/> 5549 </svg></button></quantity-selector> 5550 5551<button type="submit" class="add-to-cart-button button w-full" ><button-content class="button__content" up-text="Add To Cart">Add To Cart</button-content></button></div><div data-shopify="payment-button" class="shopify-payment-button"> <shopify-accelerated-checkout recommended="{"supports_subs":true,"supports_def_opts":false,"name":"shop_pay","wallet_params":{"shopId":75289362745,"merchantName":"Sow \u0026 Arrow","personalized":true}}" fallback="{"supports_subs":true,"supports_def_opts":true,"name":"buy_it_now","wallet_params":{}}" access-token="ac5f488cd338211fdf6d4c7833c3e413" buyer-country="GB" buyer-locale="en" buyer-currency="GBP" variant-params="[{"id":57225090072954,"requiresShipping":true}]" shop-id="75289362745" enabled-flags="["1172c16a","a1d1f9a1","f5afabb3","370070f3"]" > <div class="shopify-payment-button__button" role="button" disabled aria-hidden="true" style="background-color: transparent; border: none"> <div class="shopify-payment-button__skeleton"> </div> </div> <div class="shopify-payment-button__more-options shopify-payment-button__skeleton" role="button" disabled aria-hidden="true"> </div> </shopify-accelerated-checkout> </div><style> 5552 #product-form-main-16190750032250-template--25965682590074__main .shopify-payment-button__button {} 5553 </style></div> 5554 </buy-buttons> 5555 </div> 5556 </div><input type="hidden" name="product-id" value="16190750032250" /><input type="hidden" name="section-id" value="template--25965682590074__main" /></form></product-form></div></div></safe-sticky> 5557</div> 5558 </product-rerender> 5559 </div> 5560</div><product-sticky-add-to-cart class="product-sticky-add-to-cart color-scheme color-scheme--scheme-1" main-product-form="product-form-main-16190750032250-template--25965682590074__main"> 5561 <product-rerender id="product-sticky-add-to-cart-16190750032250-template--25965682590074__main" observe-form="product-form-main-16190750032250-template--25965682590074__main"> 5562 <div class="h-stack gap-6 sm-max:hidden"><img src="//sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers.avif?v=1788431863&width=996" alt="Pure Peanut Crackers - Cracked Black Pepper - 20g" srcset="//sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers.avif?v=1788431863&width=70 70w, //sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers.avif?v=1788431863&width=140 140w, //sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers.avif?v=1788431863&width=210 210w, //sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers.avif?v=1788431863&width=280 280w" width="996" height="996" loading="lazy" class="constrained-image" style="--image-max-width: 70px"><div class="v-stack gap-0.5"> 5563 <span class="subheading">Pure Peanut Crackers - Cracked Black Pepper - 20g</span><price-list class="price-list "><sale-price class="h6 text-on-sale"> 5564 <span class="sr-only">Sale price</span>£1.32</sale-price><compare-at-price class="h7 line-through">
5565 <span class="sr-only">Regular price</span>£1.65</compare-at-price></price-list> 5566</div> 5567 </div> 5568<button type="submit" class="sm-max:hidden sticky-atc-button button button--outline" style="--button-text-color: var(--button-background-primary);" form="product-form-main-16190750032250-template--25965682590074__main" ><button-content class="button__content" up-text="Add To Cart">Add To Cart</button-content></button> 5569<button type="submit" class="sm:hidden sticky-atc-button button" form="product-form-main-16190750032250-template--25965682590074__main" ><button-content class="button__content" up-text="Add To Cart">Add To Cart</button-content></button><span hidden data-subscription-button-labels data-onetime="Add To Cart" data-subscription="Add & Subscribe"></span> 5570 </product-rerender> 5571 </product-sticky-add-to-cart><template id="quick-buy-content"> 5572 <product-rerender id="quick-buy-modal-content" observe-form="product-form-quick-buy-16190750032250-template--25965682590074__main"> 5573 <div class="quick-buy"> 5574 <style> 5575 @media screen and (max-width: 999px) { 5576 #shopify-section-template--25965682590074__main {--product-gallery-gap: 0rem;} 5577 } 5578 5579 @media screen and (min-width: 1000px) { 5580 #shopify-section-template--25965682590074__main {--product-gallery-gap: 0rem;}} 5581</style> 5582 5583<product-gallery id="product-gallery-product-gallery-carousel-16190750032250-template--25965682590074__main" class="product-gallery md-max:hidden" form="product-form-quick-buy-16190750032250-template--25965682590074__main" filtered-indexes="[]" > 5584 <div class="product-gallery__image-list"><div class="relative"> 5585 <scroll-carousel adaptive-height id="product-gallery-carousel-16190750032250-template--25965682590074__main" class="product-gallery__carousel scroll-area bleed md:unbleed" role="region"><div class="product-gallery__media snap-center is-initial " data-media-type="image" data-media-id="71649845969274" role="group" aria-label="Item 1 of 4" ><img src="//sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers.avif?v=1788431863&width=996" alt="Pure Peanut Crackers - Cracked Black Pepper - 20g" srcset="//sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers.avif?v=1788431863&width=200 200w, //sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers.avif?v=1788431863&width=300 300w, //sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers.avif?v=1788431863&width=400 400w, //sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers.avif?v=1788431863&width=500 500w, //sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers.avif?v=1788431863&width=600 600w, //sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers.avif?v=1788431863&width=700 700w, //sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers.avif?v=1788431863&width=800 800w" width="996" height="996" loading="eager" fetchpriority="high" sizes="(max-width: 699px) 100vw, 50vw" style=" "></div><div class="product-gallery__media snap-center " data-media-type="image" data-media-id="71649846002042" role="group" aria-label="Item 2 of 4" ><img src="//sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers_3.avif?v=1788431863&width=996" alt="Pure Peanut Crackers - Cracked Black Pepper - 20g" srcset="//sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers_3.avif?v=1788431863&width=200 200w, //sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers_3.avif?v=1788431863&width=300 300w, //sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers_3.avif?v=1788431863&width=400 400w, //sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers_3.avif?v=1788431863&width=500 500w, //sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers_3.avif?v=1788431863&width=600 600w, //sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers_3.avif?v=1788431863&width=700 700w, //sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers_3.avif?v=1788431863&width=800 800w" width="996" height="996" loading="lazy" sizes="auto, (max-width: 699px) 100vw, 50vw" style=" "></div><div class="product-gallery__media snap-center " data-media-type="image" data-media-id="71649846034810" role="group" aria-label="Item 3 of 4" ><img src="//sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers_2.avif?v=1788431863&width=996" alt="Pure Peanut Crackers - Cracked Black Pepper - 20g" srcset="//sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers_2.avif?v=1788431863&width=200 200w, //sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers_2.avif?v=1788431863&width=300 300w, //sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers_2.avif?v=1788431863&width=400 400w, //sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers_2.avif?v=1788431863&width=500 500w, //sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers_2.avif?v=1788431863&width=600 600w, //sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers_2.avif?v=1788431863&width=700 700w, //sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers_2.avif?v=1788431863&width=800 800w" width="996" height="996" loading="lazy" sizes="auto, (max-width: 699px) 100vw, 50vw" style=" "></div><div class="product-gallery__media snap-center " data-media-type="image" data-media-id="71649846067578" role="group" aria-label="Item 4 of 4" ><img src="//sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers_1.avif?v=1788431862&width=996" alt="Pure Peanut Crackers - Cracked Black Pepper - 20g" srcset="//sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers_1.avif?v=1788431862&width=200 200w, //sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers_1.avif?v=1788431862&width=300 300w, //sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers_1.avif?v=1788431862&width=400 400w, //sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers_1.avif?v=1788431862&width=500 500w, //sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers_1.avif?v=1788431862&width=600 600w, //sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers_1.avif?v=1788431862&width=700 700w, //sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers_1.avif?v=1788431862&width=800 800w" width="996" height="996" loading="lazy" sizes="auto, (max-width: 699px) 100vw, 50vw" style=" "></div>
5585</scroll-carousel><custom-cursor class="product-gallery__cursor custom-cursor" > 5586 <div class="circle-button circle-button--xl"><svg 5587 aria-hidden="true" 5588 focusable="false" 5589 width="12" 5590 class="icon icon-big-arrow-right" 5591 5592 part="icon" 5593 viewBox="0 0 36 36" 5594 > 5595 <path fill="none" stroke="currentColor" stroke-width="2" d="M1 18h32M16.5 1.5 33 18 16.5 34.5"/> 5596 </svg></div> 5597 </custom-cursor></div><div class="product-gallery__controls-floating hidden md:contents"><carousel-navigation class="scroll-marker-group scroll-marker-group--lines align-self-center" aria-controls="product-gallery-carousel-16190750032250-template--25965682590074__main"><button type="button" class="scroll-marker tap-area tap-area--sm" aria-current="true"> 5598 <span class="sr-only">Go to item 1</span> 5599 </button><button type="button" class="scroll-marker tap-area tap-area--sm" aria-current="false"> 5600 <span class="sr-only">Go to item 2</span> 5601 </button><button type="button" class="scroll-marker tap-area tap-area--sm" aria-current="false"> 5602 <span class="sr-only">Go to item 3</span> 5603 </button><button type="button" class="scroll-marker tap-area tap-area--sm" aria-current="false"> 5604 <span class="sr-only">Go to item 4</span> 5605 </button></carousel-navigation></div><div class="product-gallery__controls-floating contents md:hidden"></div></div></product-gallery> 5606 5607 <div class="v-stack gap-6"> 5608 <div class="h-stack gap-6 md:hidden"><img src="//sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers.avif?v=1788431863&width=996" alt="Pure Peanut Crackers - Cracked Black Pepper - 20g" srcset="//sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers.avif?v=1788431863&width=100 100w, //sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers.avif?v=1788431863&width=200 200w, //sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers.avif?v=1788431863&width=300 300w, //sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers.avif?v=1788431863&width=400 400w" width="996" height="996" loading="lazy" sizes="100px" class="quick-buy__product-image"><div class="v-stack gap-4"> 5609 <div class="v-stack gap-2"> 5610 <p class="h6">Pure Peanut Crackers - Cracked Black Pepper - 20g</p><price-list class="price-list "><sale-price class="subheading text-on-sale"> 5611 <span class="sr-only">Sale price</span>£1.32</sale-price><compare-at-price class="subheading text-subdued line-through"> 5612 <span class="sr-only">Regular price</span>£1.65</compare-at-price></price-list> 5613</div> 5614 5615 <a href="/products/pure-peanut-crackers-cracked-black-pepper-20g?variant=57225090072954" class="link justify-self-start">View details</a> 5616 </div> 5617 </div> 5618 5619 <hr class="divider md:hidden"> 5620 5621 <div class="quick-buy__info"><safe-sticky class="product-info text-start"> 5622 <div class="product-info__block-list"> 5623<div 5624 class="product-info__block-item" 5625 data-block-id="vendor" 5626 data-block-type="vendor" 5627 5628 5629 5630 ><a href="/collections/vendors?q=Uppernut" class="vendor subheading text-subdued">Uppernut</a></div> 5631<div 5632 class="product-info__block-item" 5633 data-block-id="title" 5634 data-block-type="title" 5635 5636 5637 5638 ><h2 class="product-title h4"> 5639 <a href="/products/pure-peanut-crackers-cracked-black-pepper-20g">Pure Peanut Crackers - Cracked Black Pepper - 20g</a> 5640 </h2></div> 5641<div 5642 class="product-info__block-item" 5643 data-block-id="badges" 5644 data-block-type="badges" 5645 5646 data-block-allow-rerender 5647 5648 5649 5650 ><badge-list class="badge-list badge-list--row justify-start "><on-sale-badge class="badge badge--on-sale ">Save 20%</on-sale-badge></badge-list></div> 5651<div 5652 class="product-info__block-item" 5653 data-block-id="price" 5654 data-block-type="price" 5655 5656 data-block-allow-rerender 5657 5658 5659 5660 ><div class="v-stack gap-2"><div class="price-rating" style="display: flex; align-items: center; gap: 0.75rem;"> 5661 <!-- Price --> 5662 <div class="price"><price-list class="price-list justify-start"><sale-price class="h6 text-on-sale">
5663 <span class="sr-only">Sale price</span>£1.32</sale-price><compare-at-price class="h7 line-through"> 5664 <span class="sr-only">Regular price</span>£1.65</compare-at-price></price-list> 5665</div></div></div></div> 5666<div 5667 class="product-info__block-item" 5668 data-block-id="payment_terms" 5669 data-block-type="payment-terms" 5670 5671 data-block-allow-rerender 5672 5673 5674 5675 ><payment-terms class="payment-terms"><form method="post" action="/cart/add" id="product-form-quick-buy-16190750032250-template--25965682590074__main-payment-installment" accept-charset="UTF-8" class="shopify-product-form" enctype="multipart/form-data"><input type="hidden" name="form_type" value="product" /><input type="hidden" name="utf8" value="â" /><input type="hidden" name="id" value="57225090072954"><input type="hidden" name="product-id" value="16190750032250" /><input type="hidden" name="section-id" value="template--25965682590074__main" /></form></payment-terms></div> 5676<div 5677 class="product-info__block-item" 5678 data-block-id="inventory_ePBmxB" 5679 data-block-type="inventory" 5680 5681 data-block-allow-rerender 5682 5683 5684 5685 ><variant-inventory class="inventory text-success justify-items-start"><span class="inventory__text">20 in stock</span>
5685<progress-bar 5686 id="progress-bar-template--25965682590074__main-16190750032250" 5687 class="progress-bar" 5688 animate-on-scroll 5689 aria-valuenow="20" 5690 aria-valuemax="50" 5691 ></progress-bar></variant-inventory></div> 5692<div 5693 class="product-info__block-item" 5694 data-block-id="AZnBrV3NDUnVmL2JVK__loox_reviews_loox_reviews_stories_mKPtR6-2" 5695 data-block-type="@app" 5696 5697 5698 ><div id="shopify-block-AZnBrV3NDUnVmL2JVK__loox_reviews_loox_reviews_stories_mKPtR6-1" class="shopify-block shopify-app-block"><loox-reviews-stories-entry-widget 5699 class='loox-widget' 5700 5701 5702 product-id='16190750032250' 5703 product-name='Pure Peanut Crackers - Cracked Black Pepper - 20g' 5704 product-image='//sowandarrow.com/cdn/shop/files/CrackedBlackPepperPeanutCrackers.avif?v=1788431863&width=64' 5705 tags='Blood Sugar Management,Crackers,Grain Free,High Protein,Kids Favourites,Nuts,Peanut Butter,Snacks,Truffles & Bites' 5706 5707></loox-reviews-stories-entry-widget> 5708 5709 5710</div></div> 5711<div 5712 class="product-info__block-item" 5713 data-block-id="AOFRCS0RaZUhmVHBRd__loox_reviews_loox_snippets_widget_Amnn7Y-2" 5714 data-block-type="@app" 5715 5716 5717 ><div id="shopify-block-AOFRCS0RaZUhmVHBRd__loox_reviews_loox_snippets_widget_Amnn7Y-1" class="shopify-block shopify-app-block"><loox-snippets-widget 5718 5719 reviews-type='product-reviews' 5720 product-id='16190750032250' 5721 review-count='' 5722 show-border='true' 5723 show-rating='true' 5724 color-scheme='default' 5725 shadow='' 5726 font-size='14px' 5727 background-color='#ffffff' 5728 text-color='#321e1e' 5729 name-color='' 5730 border-color='#f1e4d3' 5731 rating-icon-color='#f6a429' 5732 border-radius='8px' 5733 show-image='true' 5734 hide-arrows-mobile='false' 5735 reviews-limit='10' 5736 shadow-color='' 5737 alignment='left' 5738 max-width='' 5739 class="loox-widget" 5740> 5741</loox-snippets-widget> 5742 5743 5744</div></div> 5745<div 5746 class="product-info__block-item" 5747 data-block-id="product_variations_kMDzb9" 5748 data-block-type="product-variations" 5749 5750 5751 5752 ><div class="variant-picker"> 5753 <div class="variant-picker__option justify-start"><div class="h-stack gap-2"> 5754 <p class="text-subdued">Flavour:</p><span>Cracked Black Pepper</span></div><div class="variant-picker__option-values h-stack gap-3 wrap"><a 5755 href="/products/pure-peanut-crackers-fiery-chilli-flakes-20g" 5756 5757 class="block-swatch " 5758 ><span>Original</span> 5759 </a><a 5760 href="/products/pure-peanut-crackers-cracked-black-pepper-20g" 5761 5762 class="block-swatch is-selected" 5763 ><span>Cracked Black Pepper</span> 5764 </a><a 5765 href="/products/pure-peanut-crackers-fiery-chilli-flakes-20g-copy" 5766 5767 class="block-swatch " 5768 ><span>Fiery Chilli Flakes</span> 5769 </a></div> 5770 </div> 5771 </div></div> 5772<div 5773 class="product-info__block-item" 5774 data-block-id="variant_picker" 5775 data-block-type="variant-picker" 5776 5777 data-block-allow-rerender 5778 5779 5780 5781 ></div> 5782<div 5783 class="product-info__block-item" 5784 data-block-id="buy_buttons" 5785 data-block-type="buy-buttons" 5786 5787 data-block-allow-rerender 5788 5789 5790 5791 ><product-form><form method="post" action="/cart/add" id="product-form-quick-buy-16190750032250-template--25965682590074__main" accept-charset="UTF-8" class="shopify-product-form" enctype="multipart/form-data"><input type="hidden" name="form_type" value="product" /><input type="hidden" name="utf8" value="â" /><input type="hidden" name="id" value="57225090072954"> 5792 5793 5794 5795 <div class="v-stack gap-4"><div class="v-stack gap-2"> 5796 <buy-buttons 5797 class="buy-buttons buy-buttons--has-dynamic" 5798 form="product-form-quick-buy-16190750032250-template--25965682590074__main" 5799 > 5800 <div class="v-stack gap-2"><div class="h-stack gap-2"><quantity-selector class="quantity-selector " ><button type="button" class="quantity-selector__button" disabled> 5801 <span class="sr-only">Decrease quantity</span><svg 5802 aria-hidden="true" 5803 focusable="false" 5804 width="8" 5805 fill="none" 5806 class="icon icon-quantity-minus" 5807 5808 part="icon"
5809 viewBox="0 0 8 2" 5810 > 5811 <path d="M0 1H8" stroke="currentColor" stroke-width="1.5"/> 5812 </svg></button><quantity-input class="contents"> 5813 <input class="quantity-selector__input subheading" type="number" value="1" name="quantity" inputmode="numeric" step="1" min="1" max="20" form="product-form-quick-buy-16190750032250-template--25965682590074__main" aria-label="Change quantity"></quantity-input><button type="button" class="quantity-selector__button" > 5814 <span class="sr-only">Increase quantity</span><svg 5815 aria-hidden="true" 5816 focusable="false" 5817 width="8" 5818 fill="none" 5819 class="icon icon-quantity-plus" 5820 5821 part="icon" 5822 viewBox="0 0 8 8" 5823 > 5824 <path d="M0 4H8" stroke="currentColor" stroke-width="1.5"/> 5825 <path d="M4 0V8" stroke="currentColor" stroke-width="1.5"/> 5826 </svg></button></quantity-selector> 5827 5828<button type="submit" class="add-to-cart-button button w-full" ><button-content class="button__content" up-text="Add To Cart">Add To Cart</button-content></button></div><div data-shopify="payment-button" class="shopify-payment-button"> <shopify-accelerated-checkout recommended="{"supports_subs":true,"supports_def_opts":false,"name":"shop_pay","wallet_params":{"shopId":75289362745,"merchantName":"Sow \u0026 Arrow","personalized":true}}" fallback="{"supports_subs":true,"supports_def_opts":true,"name":"buy_it_now","wallet_params":{}}" access-token="ac5f488cd338211fdf6d4c7833c3e413" buyer-country="GB" buyer-locale="en" buyer-currency="GBP" variant-params="[{"id":57225090072954,"requiresShipping":true}]" shop-id="75289362745" enabled-flags="["1172c16a","a1d1f9a1","f5afabb3","370070f3"]" > <div class="shopify-payment-button__button" role="button" disabled aria-hidden="true" style="background-color: transparent; border: none"> <div class="shopify-payment-button__skeleton"> </div> </div> <div class="shopify-payment-button__more-options shopify-payment-button__skeleton" role="button" disabled aria-hidden="true"> </div> </shopify-accelerated-checkout> </div><style> 5829 #product-form-quick-buy-16190750032250-template--25965682590074__main .shopify-payment-button__button {} 5830 </style></div> 5831 </buy-buttons> 5832 </div> 5833 </div><input type="hidden" name="product-id" value="16190750032250" /><input type="hidden" name="section-id" value="template--25965682590074__main" /></form></product-form></div><a href="/products/pure-peanut-crackers-cracked-black-pepper-20g" class="link sm-max:hidden">View details</a></div></safe-sticky> 5834</div> 5835 </div> 5836 </div> 5837 </product-rerender> 5838</template>
5839<script> 5840 // We save the product ID in local storage to be eventually used for recently viewed section 5841 try { 5842 let recentlyViewedProducts = JSON.parse(localStorage.getItem('theme:recently-viewed-products') || '[]'); 5843 5844 recentlyViewedProducts = recentlyViewedProducts.filter(item => item !== 16190750032250); // Delete product to remove to the start 5845 recentlyViewedProducts.unshift(16190750032250); // Add at the start 5846 5847 localStorage.setItem('theme:recently-viewed-products', JSON.stringify(recentlyViewedProducts)); 5848 } catch (e) { 5849 // Safari in private mode does not allow setting item, we silently fail 5850 } 5851</script>
5851 5852 5853 5854</section><section id="shopify-section-template--25965682590074__related-products" class="shopify-section shopify-section--related-products"><style> 5855 #shopify-section-template--25965682590074__related-products { 5856 --product-list-column-count: 1; 5857 } 5858 5859 @media screen and (min-width: 700px) { 5860 #shopify-section-template--25965682590074__related-products { 5861 --product-list-column-count: 2; 5862 } 5863 } 5864 5865 @media screen and (min-width: 1000px) { 5866 #shopify-section-template--25965682590074__related-products { 5867 --product-list-column-count: 4; 5868 } 5869 } 5870</style> 5871 5872<product-recommendations class="block color-scheme color-scheme--scheme-1" product="16190750032250" limit="10" intent="related"></product-recommendations> 5873
5874<script> 5875 (function() { 5876 if (window.__shopifyRelatedRecoTrackingInit) return; 5877 window.__shopifyRelatedRecoTrackingInit = true; 5878 5879 function getRecSessionId() { 5880 let id; 5881 try { id = sessionStorage.getItem('rec_session_id'); } catch {} 5882 if (!id) { 5883 id = window.__recSessionId || (crypto.randomUUID ? crypto.randomUUID() : `rec-session-${Date.now()}`); 5884 try { sessionStorage.setItem('rec_session_id', id); } catch {} 5885 } 5886 window.__recSessionId = id; 5887 return id; 5888 } 5889 5890 function sendRecEvent(payload) { 5891 const body = JSON.stringify({ 5892 ...payload, 5893 session_id: getRecSessionId(), 5894 page_path: window.location.pathname, 5895 timestamp: new Date().toISOString() 5896 }); 5897 5898 const endpoint = 'https://api.sowandarrow.com/recommendations'; 5899 5900 const pingUrl = `${endpoint}?rx=1&d=${encodeURIComponent(body)}`; 5901 const img = new Image(); 5902 window.__recoEventPings = window.__recoEventPings || []; 5903 window.__recoEventPings.push(img); 5904 img.onload = img.onerror = () => { 5905 window.__recoEventPings = window.__recoEventPings.filter((x) => x !== img); 5906 }; 5907 img.src = pingUrl; 5908 } 5909 5910 const sentImpressions = new Set(); 5911 const sentServed = new Set(); 5912 const observer = new IntersectionObserver((entries) => { 5913 entries.forEach((entry) => { 5914 if (!entry.isIntersecting || entry.intersectionRatio < 0.35) return; 5915 5916 const card = entry.target; 5917 const requestUuid = card.dataset.recoRequestUuid; 5918 const href = card.dataset.recoUrl || null; 5919 const key = `${requestUuid || 'no-request'}|${href || card.dataset.recoHandle || 'unknown'}`; 5920 if (sentImpressions.has(key)) return; 5921 5922 sentImpressions.add(key); 5923 sendRecEvent({ 5924 event_type: 'recommendation_impression', 5925 recommendation_type: 'shopify-related', 5926 placement: 'shopify-related-products', 5927 request_uuid: requestUuid || null, 5928 url: href, 5929 product_id: Number(card.dataset.recoProductId) || null, 5930 variant_id: Number(card.dataset.recoVariantId) || null, 5931 source_product_id: Number(card.dataset.recoSourceProductId) || null, 5932 served_rank: Number(card.dataset.recoRank) || null, 5933 customer_id: null 5934 }); 5935 }); 5936 }, { threshold: [0.35] }); 5937 5938 function primeCard(card) { 5939 if (!card || card.dataset.recoObserved === '1') return; 5940 5941 const host = card.closest('product-recommendations'); 5942 if (host && !host.dataset.recoRequestUuid) { 5943 host.dataset.recoRequestUuid = crypto.randomUUID ? crypto.randomUUID() : `rec-request-${Date.now()}`; 5944 } 5945 5946 const link = card.querySelector('a.product-card__media, a.product-title, a[data-instant]'); 5947 card.dataset.recoHandle = card.getAttribute('handle') || ''; 5948 let products = {}; 5949 try { products = JSON.parse(host?.querySelector('[data-reco-products]')?.textContent || '{}'); } catch {} 5950 const product = products[card.dataset.recoHandle]; 5951 card.dataset.recoProductId = product?.product_id || ''; 5952 card.dataset.recoVariantId = product?.variant_id || ''; 5953 card.dataset.recoSourceProductId = host?.getAttribute('product') || ''; 5954 card.dataset.recoUrl = link?.getAttribute('href') || ''; 5955 card.dataset.recoRequestUuid = host?.dataset.recoRequestUuid || ''; 5956 card.dataset.recoObserved = '1'; 5957 observer.observe(card); 5958 } 5959 5960 function primeAllCards() { 5961 const cards = Array.from(document.querySelectorAll('product-recommendations[intent="related"] .product-card')); 5962 const ranks = new Map(); 5963 cards.forEach((card) => { 5964 const host = card.closest('product-recommendations'); 5965 const rank = (ranks.get(host) || 0) + 1; 5966 ranks.set(host, rank); 5967 card.dataset.recoRank = String(rank); 5968 primeCard(card); 5969 }); 5970 5971 cards.forEach((card, index) => { 5972 const requestUuid = card.dataset.recoRequestUuid || null; 5973 const link = card.querySelector('a.product-title, a.product-card__media, a[data-instant]'); 5974 const title = (card.querySelector('a.product-title')?.textContent || '').trim() || null; 5975 const url = card.dataset.recoUrl || link?.getAttribute('href') || null;
5976 const key = `${requestUuid || 'no-request'}|${url || card.dataset.recoHandle || 'unknown'}|${card.dataset.recoRank}`; 5977 if (sentServed.has(key)) return; 5978 5979 sentServed.add(key); 5980 sendRecEvent({ 5981 event_type: 'recommendation_served', 5982 recommendation_type: 'shopify-related', 5983 placement: 'shopify-related-products', 5984 request_uuid: requestUuid, 5985 product_id: Number(card.dataset.recoProductId) || null, 5986 variant_id: Number(card.dataset.recoVariantId) || null, 5987 source_product_id: Number(card.dataset.recoSourceProductId) || null, 5988 product_title: title, 5989 product_handle: card.dataset.recoHandle || null, 5990 url, 5991 served_rank: Number(card.dataset.recoRank) || null, 5992 customer_id: null 5993 }); 5994 }); 5995 } 5996 5997 document.addEventListener('click', (event) => { 5998 const control = event.target.closest('product-recommendations[intent="related"] .product-card a.product-card__media, product-recommendations[intent="related"] .product-card a.product-title, product-recommendations[intent="related"] .product-card a[data-instant], product-recommendations[intent="related"] .product-card button[aria-controls*="product-quick-buy"], product-recommendations[intent="related"] .product-card button[type="submit"]'); 5999 if (!control) return; 6000 const card = control.closest('.product-card'); 6001 if (!card) return; 6002 primeCard(card); 6003 const context = { 6004 recommendation_type: 'shopify-related', 6005 placement: 'shopify-related-products', 6006 request_uuid: card.dataset.recoRequestUuid || null, 6007 product_id: Number(card.dataset.recoProductId) || null, 6008 variant_id: Number(card.dataset.recoVariantId) || null, 6009 source_product_id: Number(card.dataset.recoSourceProductId) || null, 6010 served_rank: Number(card.dataset.recoRank) || null, 6011 customer_id: null 6012 }; 6013 if (context.product_id) window.__storeRecContext?.(context); 6014 sendRecEvent({ ...context, event_type: 'recommendation_click', url: card.dataset.recoUrl || control.getAttribute('href') || null }); 6015 }); 6016 6017 const mo = new MutationObserver(primeAllCards); 6018 mo.observe(document.documentElement, { childList: true, subtree: true }); 6019 primeAllCards(); 6020 })(); 6021</script>
6021 6022 6023 6024</section><section id="shopify-section-template--25965682590074__17516520624c5580e2" class="shopify-section shopify-section--apps"><div class="color-scheme color-scheme--scheme-1"> 6025 <div class="container section-spacing"><div class="section-header " ><div class="prose prose-justify-left" ><h2 id="shopify-block-AUjZRbzRzNG90S1B1V__section-header" class="h3" >Reviews</h2><div class="max-w-md"><p>Take a look at reviews about this product to get a better about how people found it.</p></div> 6026</div></div><div id="shopify-block-AdENPUk42L3huaUxHV__loox_reviews_loox_dynamic_section_7KVYw3" class="shopify-block shopify-app-block"> 6027 6028 6029 6030 6031 6032<div 6033 id="looxReviews" 6034 class="loox-widget" 6035 data-limit="20" 6036 6037 6038 data-product-thumbnails="false" 6039 6040 data-product-id="16190750032250" 6041 � 6042 6043 data-reviews-to-display="" 6044 data-default-tab="automatic" 6045 style="margin:0 auto;max-width:1920px;" 6046> 6047 <!-- BEGIN app snippet: loox-ssr-reviews-feed --> 6048<!-- END app snippet --> 6049</div> 6050 6051</div></div> 6052 </div> 6053</section> 6054 </main><!-- BEGIN sections: footer-group --> 6055<section id="shopify-section-sections--25965682491770__trust-icons" class="shopify-section shopify-section-group-footer-group shopify-section--trust-icons"><style> 6056 #shopify-section-sections--25965682491770__trust-icons { 6057 --trust-icons-item-count: 4; 6058 } 6059 </style> 6060 6061 <div class="color-scheme color-scheme--scheme-2"> 6062 <div class="trust-icons"><scroll-carousel id="carousel-sections--25965682491770__trust-icons" class="trust-icons__carousel snap-x scroll-area bleed md:unbleed"><div class="trust-icons__item snap-center" role="group" aria-label="Item 1 of 4" > 6063 <div class="prose prose-justify-center prose--compact"><svg 6064 aria-hidden="true" 6065 focusable="false" 6066 width="20" 6067 class="shrink-0 icon icon-picto-truck" 6068 6069 style="--icon-mobile-max-width: 20px; --icon-max-width: 24px" 6070
6071 viewBox="0 0 24 24" 6072 > 6073 <path vector-effect="non-scaling-stroke" d="M4.05494 18.7851H0.999756V3H13.9998V6H20L23 12V18.7851H20" fill="none" stroke="currentColor" stroke-width="1"/> 6074 <path vector-effect="non-scaling-stroke" d="M9 18.7852H15" fill="none" stroke="currentColor" stroke-width="1"/> 6075 <path vector-effect="non-scaling-stroke" d="M23 12H13.9998V6" fill="none" stroke="currentColor" stroke-width="1"/> 6076 <path vector-effect="non-scaling-stroke" d="M4 18.5C4 19.163 4.26339 19.7989 4.73223 20.2678C5.20107 20.7366 5.83696 21 6.5 21C7.16304 21 7.79893 20.7366 8.26777 20.2678C8.73661 19.7989 9 19.163 9 18.5C9 17.837 8.73661 17.2011 8.26777 16.7322C7.79893 16.2634 7.16304 16 6.5 16C5.83696 16 5.20107 16.2634 4.73223 16.7322C4.26339 17.2011 4 17.837 4 18.5Z" fill="none" stroke="currentColor" stroke-width="1"/> 6077 <path vector-effect="non-scaling-stroke" d="M15 18.5C15 19.163 15.2634 19.7989 15.7322 20.2678C16.2011 20.7366 16.837 21 17.5 21C18.163 21 18.7989 20.7366 19.2678 20.2678C19.7366 19.7989 20 19.163 20 18.5C20 17.837 19.7366 17.2011 19.2678 16.7322C18.7989 16.2634 18.163 16 17.5 16C16.837 16 16.2011 16.2634 15.7322 16.7322C15.2634 17.2011 15 17.837 15 18.5Z" fill="none" stroke="currentColor" stroke-width="1"/> 6078 </svg><p class="subheading">Free Deliver Over £55</p><p class="text-subdued">Completely free shipping when you spend over £55.</p></div> 6079 </div><div class="trust-icons__item snap-center" role="group" aria-label="Item 2 of 4" > 6080 <div class="prose prose-justify-center prose--compact"><svg 6081 aria-hidden="true" 6082 focusable="false" 6083 width="20" 6084 class="shrink-0 icon icon-picto-express-delivery" 6085 6086 style="--icon-mobile-max-width: 20px; --icon-max-width: 24px" 6087
6088 viewBox="0 0 24 24" 6089 > 6090 <path vector-effect="non-scaling-stroke" d="M14 1V5" fill="none" stroke="currentColor" stroke-width="1"/> 6091 <path vector-effect="non-scaling-stroke" d="M11 1H17" fill="none" stroke="currentColor" stroke-width="1"/> 6092 <path vector-effect="non-scaling-stroke" d="M6.5166 9C6.84179 8.51328 7.21599 8.05604 7.63599 7.63604C9.32382 5.94821 11.6131 5 14 5C16.387 5 18.6761 5.94821 20.364 7.63604C22.0518 9.32387 23 11.6131 23 14C23 16.3869 22.0518 18.6761 20.364 20.364C18.6761 22.0518 16.387 23 14 23C11.6131 23 9.32382 22.0518 7.636 20.364C7.21599 19.944 6.84179 19.4867 6.5166 19" fill="none" stroke="currentColor" stroke-width="1"/> 6093 <path vector-effect="non-scaling-stroke" d="M14 9V14H18" fill="none" stroke="currentColor" stroke-width="1"/> 6094 <path vector-effect="non-scaling-stroke" d="M0 12H7" fill="none" stroke="currentColor" stroke-width="1"/> 6095 <path vector-effect="non-scaling-stroke" d="M3 16H7" fill="none" stroke="currentColor" stroke-width="1"/> 6096 </svg><p class="subheading">Next Day Delivery</p><p class="text-subdued">When you order before 1pm Mon - Thu.</p></div> 6097 </div><div class="trust-icons__item snap-center" role="group" aria-label="Item 3 of 4" > 6098 <div class="prose prose-justify-center prose--compact"><svg 6099 aria-hidden="true" 6100 focusable="false" 6101 width="20" 6102 class="shrink-0 icon icon-picto-chat" 6103 6104 style="--icon-mobile-max-width: 20px; --icon-max-width: 24px" 6105
6106 viewBox="0 0 24 24" 6107 > 6108 <path vector-effect="non-scaling-stroke" d="M2 2H22V19H11.1L6.25 22V19H2V2Z" fill="none" stroke="currentColor" stroke-width="1"/> 6109 <path vector-effect="non-scaling-stroke" d="M9 9.5V9C9 7.34315 10.3431 6 12 6C13.6569 6 15 7.34315 15 9V9.75L12 11.5V13" fill="none" stroke="currentColor" stroke-width="1"/> 6110 <path vector-effect="non-scaling-stroke" d="M12 14.5V16.5" fill="none" stroke="currentColor" stroke-width="1"/> 6111 </svg><p class="subheading">Customer Support</p><p class="text-subdued">You can live chat with us anytime.</p></div> 6112 </div><div class="trust-icons__item snap-center" role="group" aria-label="Item 4 of 4" > 6113 <div class="prose prose-justify-center prose--compact"><svg 6114 aria-hidden="true" 6115 focusable="false" 6116 width="20" 6117 class="shrink-0 icon icon-picto-secure" 6118 6119 style="--icon-mobile-max-width: 20px; --icon-max-width: 24px" 6120 6121 viewBox="0 0 24 24" 6122 > 6123 <path vector-effect="non-scaling-stroke" d="M3 1V18L11.9999 22.86L21 18V1H3Z" fill="none" stroke="currentColor" stroke-width="1"/> 6124 <path vector-effect="non-scaling-stroke" d="M8 10.5H16V15.5H8V10.5Z" fill="none" stroke="currentColor" stroke-width="1"/> 6125 <path vector-effect="non-scaling-stroke" d="M9.5 10.5V7.50002C9.5 6.1193 10.6193 5 12 5C13.3807 5 14.5 6.1193 14.5 7.50002V10.5" fill="none" stroke="currentColor" stroke-width="1"/> 6126 </svg><p class="subheading">Secure payment</p><p class="text-subdued">Your payment information is processed securely.</p></div> 6127 </div></scroll-carousel><carousel-navigation class="scroll-marker-group scroll-marker-group--lines justify-self-center md:hidden" aria-controls="carousel-sections--25965682491770__trust-icons"><button class="scroll-marker tap-area tap-area--sm" aria-current="true"> 6128 <span class="sr-only">Go to item 1</span> 6129 </button><button class="scroll-marker tap-area tap-area--sm" aria-current="false"> 6130 <span class="sr-only">Go to item 2</span> 6131 </button><button class="scroll-marker tap-area tap-area--sm" aria-current="false"> 6132 <span class="sr-only">Go to item 3</span> 6133 </button><button class="scroll-marker tap-area tap-area--sm" aria-current="false"> 6134 <span class="sr-only">Go to item 4</span> 6135 </button></carousel-navigation></div> 6136 </div> 6137</section><footer id="shopify-section-sections--25965682491770__footer" class="shopify-section shopify-section-group-footer-group shopify-section--footer"><div class="footer color-scheme color-scheme--scheme-2"> 6138 <div class="container"><div class="footer__content"><div class="footer__block-list"><div class="footer__block footer__block--links footer__block--accordion-links" ><div class="v-stack gap-4.5 sm-max:hidden"><p class="subheading">Footer menu</p><ul class="v-stack gap-2.5 unstyled-list" role="list"><li> 6139 <a href="/search" class="link-reversed link-tap-area">Search</a> 6140 </li><li> 6141 <a href="/blogs/health" class="link-reversed link-tap-area">Blogs</a> 6142 </li><li> 6143 <a href="/pages/refer-a-friend" class="link-reversed link-tap-area">Refer a Friend</a> 6144 </li><li> 6145 <a href="/policies/privacy-policy" class="link-reversed link-tap-area">Privacy Policy</a> 6146 </li><li> 6147 <a href="/policies/refund-policy" class="link-reversed link-tap-area">Refund Policy</a> 6148 </li><li> 6149 <a href="/policies/terms-of-service" class="link-reversed link-tap-area">Terms of Service</a> 6150 </li></ul></div><accordion-disclosure class="accordion sm:hidden" > 6151 <details class="accordion__disclosure" > 6152 <summary class="accordion__summary subheading"><span>Footer menu</span><svg 6153 aria-hidden="true" 6154 focusable="false" 6155 width="11" 6156 class="icon icon-accordion-small-arrow" 6157 6158 part="icon" 6159 fill="none"
6160 viewBox="0 0 11 7" 6161 > 6162 <path stroke="currentColor" stroke-width="1.5" d="M10 1 5.5 5.5 1 1" /> 6163 </svg></summary> 6164 6165 <div class="accordion__content "><ul class="v-stack gap-2.5 unstyled-list" role="list"><li> 6166 <a href="/search" class="link-reversed link-tap-area">Search</a> 6167 </li><li> 6168 <a href="/blogs/health" class="link-reversed link-tap-area">Blogs</a> 6169 </li><li> 6170 <a href="/pages/refer-a-friend" class="link-reversed link-tap-area">Refer a Friend</a> 6171 </li><li> 6172 <a href="/policies/privacy-policy" class="link-reversed link-tap-area">Privacy Policy</a> 6173 </li><li> 6174 <a href="/policies/refund-policy" class="link-reversed link-tap-area">Refund Policy</a> 6175 </li><li> 6176 <a href="/policies/terms-of-service" class="link-reversed link-tap-area">Terms of Service</a> 6177 </li></ul></div> 6178 </details> 6179</accordion-disclosure> 6180</div><div class="footer__block footer__block--text " ><div class="v-stack gap-4.5"><p class="subheading">We do things differently</p><div class="prose"><p>From our freshly baked low-carb bakes created without compromise, to our carefully selected range of supplements and products, everything we offer is chosen with purpose and backed by knowledge.</p></div></div></div></div></div><hr class="separator full-bleed"> 6181 6182 <div class="footer__aside"><div class="h-stack gap-5 md:justify-start"><div class="relative"> 6183 <button type="button" class="h-stack gap-2" aria-controls="popover-localization--sections--25965682491770__footer-country" aria-label="Change country or currency" aria-expanded="false"><img src="//cdn.shopify.com/static/images/flags/gb.svg?format=jpg&width=60" alt="United Kingdom" srcset="//cdn.shopify.com/static/images/flags/gb.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span class="subheading"> 6184 United Kingdom (GBP £)</span><svg 6185 aria-hidden="true" 6186 focusable="false" 6187 width="10" 6188 class="icon icon-chevron-down" 6189 6190 part="icon"
6191 viewBox="0 0 10 9" 6192 > 6193 <path fill="none" stroke="currentColor" stroke-width="1.5" d="m1 2.5 4 4 4-4" /> 6194 </svg></button> 6195 6196 <x-popover id="popover-localization--sections--25965682491770__footer-country" class="popover color-scheme color-scheme--scheme-1" preferred-position="above"> 6197 <p slot="header" class="subheading">Country</p><form method="post" action="/localization" id="localization-form--sections--25965682491770__footer-country" accept-charset="UTF-8" class="shopify-localization-form" enctype="multipart/form-data"><input type="hidden" name="form_type" value="localization" /><input type="hidden" name="utf8" value="â" /><input type="hidden" name="_method" value="put" /><input type="hidden" name="return_to" value="/products/pure-peanut-crackers-cracked-black-pepper-20g" /><div class="popover__value-list"><button type="submit" name="country_code" class="popover__value-option subheading link-faded-reverse" role="option" value="GG" aria-selected="false"><img src="//cdn.shopify.com/static/images/flags/gg.svg?format=jpg&width=60" alt="Guernsey" srcset="//cdn.shopify.com/static/images/flags/gg.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Guernsey (GBP £)</span> 6198 </button><button type="submit" name="country_code" class="popover__value-option subheading link-faded-reverse" role="option" value="JE" aria-selected="false"><img src="//cdn.shopify.com/static/images/flags/je.svg?format=jpg&width=60" alt="Jersey" srcset="//cdn.shopify.com/static/images/flags/je.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Jersey (GBP £)</span> 6199 </button><button type="submit" name="country_code" class="popover__value-option subheading link-faded-reverse" role="option" value="GB" aria-selected="true"><img src="//cdn.shopify.com/static/images/flags/gb.svg?format=jpg&width=60" alt="United Kingdom" srcset="//cdn.shopify.com/static/images/flags/gb.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>United Kingdom (GBP £)</span> 6200 </button></div></form></x-popover> 6201 </div></div><ul class="social-media unstyled-list" role="list"><li class="social-media__item branding-colors--facebook"> 6202 <a href="https://www.facebook.com/sowandarrow/" class="tap-area" target="_blank" rel="noopener" aria-label="Follow on Facebook"><svg 6203 aria-hidden="true" 6204 focusable="false" 6205 width="24" 6206 class="icon icon-facebook" 6207
6208 viewBox="0 0 24 24" 6209 > 6210 <path fill="currentColor" fill-rule="evenodd" d="M2 12c0 4.95 3.6 9.05 8.35 9.9l.059-.048-.009-.002V14.8H7.9V12h2.5V9.8c0-2.5 1.6-3.9 3.9-3.9.7 0 1.5.1 2.2.2v2.55h-1.3c-1.2 0-1.5.6-1.5 1.4V12h2.65l-.45 2.8h-2.2v7.05l-.09.016.04.034C18.4 21.05 22 16.95 22 12c0-5.5-4.5-10-10-10S2 6.5 2 12Z" clip-rule="evenodd"/> 6211 </svg></a> 6212 </li><li class="social-media__item branding-colors--instagram"> 6213 <a href="https://www.instagram.com/sowandarrow/?hl=en" class="tap-area" target="_blank" rel="noopener" aria-label="Follow on Instagram"><svg 6214 aria-hidden="true" 6215 focusable="false" 6216 width="24" 6217 class="icon icon-instagram" 6218 6219 viewBox="0 0 24 24" 6220 > 6221 <path fill-rule="evenodd" clip-rule="evenodd" d="M12 2.4c-2.607 0-2.934.011-3.958.058-1.022.046-1.72.209-2.33.446a4.705 4.705 0 0 0-1.7 1.107 4.706 4.706 0 0 0-1.108 1.7c-.237.611-.4 1.31-.446 2.331C2.41 9.066 2.4 9.392 2.4 12c0 2.607.011 2.934.058 3.958.046 1.022.209 1.72.446 2.33a4.706 4.706 0 0 0 1.107 1.7c.534.535 1.07.863 1.7 1.108.611.237 1.309.4 2.33.446 1.025.047 1.352.058 3.959.058s2.934-.011 3.958-.058c1.022-.046 1.72-.209 2.33-.446a4.706 4.706 0 0 0 1.7-1.107 4.706 4.706 0 0 0 1.108-1.7c.237-.611.4-1.31.446-2.33.047-1.025.058-1.352.058-3.959s-.011-2.934-.058-3.958c-.047-1.022-.209-1.72-.446-2.33a4.706 4.706 0 0 0-1.107-1.7 4.705 4.705 0 0 0-1.7-1.108c-.611-.237-1.31-.4-2.331-.446C14.934 2.41 14.608 2.4 12 2.4Zm0 1.73c2.563 0 2.867.01 3.88.056.935.042 1.443.199 1.782.33.448.174.768.382 1.104.718.336.336.544.656.718 1.104.131.338.287.847.33 1.783.046 1.012.056 1.316.056 3.879 0 2.563-.01 2.867-.056 3.88-.043.935-.199 1.444-.33 1.782a2.974 2.974 0 0 1-.719 1.104 2.974 2.974 0 0 1-1.103.718c-.339.131-.847.288-1.783.33-1.012.046-1.316.056-3.88.056-2.563 0-2.866-.01-3.878-.056-.936-.042-1.445-.199-1.783-.33a2.974 2.974 0 0 1-1.104-.718 2.974 2.974 0 0 1-.718-1.104c-.131-.338-.288-.847-.33-1.783-.047-1.012-.056-1.316-.056-3.879 0-2.563.01-2.867.056-3.88.042-.935.199-1.443.33-1.782.174-.448.382-.768.718-1.104a2.974 2.974 0 0 1 1.104-.718c.338-.131.847-.288 1.783-.33C9.133 4.14 9.437 4.13 12 4.13Zm0 11.07a3.2 3.2 0 1 1 0-6.4 3.2 3.2 0 0 1 0 6.4Zm0-8.13a4.93 4.93 0 1 0 0 9.86 4.93 4.93 0 0 0 0-9.86Zm6.276-.194a1.152 1.152 0 1 1-2.304 0 1.152 1.152 0 0 1 2.304 0Z" fill="currentColor"/> 6222 </svg></a> 6223 </li></ul><div class="v-stack gap-3"> 6224 <p class="text-sm">© 2026 - Sow & Arrow <a target="_blank" rel="nofollow" href="https://www.shopify.com?utm_campaign=poweredby&utm_medium=shopify&utm_source=onlinestore"> </a></p></div> 6225 </div> 6226 </div> 6227</div> 6228 6229</footer> 6230<!-- END sections: footer-group --><x-toast class="toast"> 6231 6232 </x-toast>
6233<script> 6234(function () { 6235 if (window.__recAttributionInitialized) return; 6236 window.__recAttributionInitialized = true; 6237 var STORAGE_KEY = '__rec_ctx'; 6238 6239 // Called by recommendation click handlers to stash context before navigation 6240 window.__storeRecContext = function (ctx) { 6241 try { 6242 sessionStorage.setItem(STORAGE_KEY, JSON.stringify({ 6243 product_id: ctx.product_id, 6244 variant_id: ctx.variant_id || null, 6245 recommendation_type: ctx.recommendation_type, 6246 placement: ctx.placement, 6247 request_uuid: ctx.request_uuid || null, 6248 served_rank: ctx.served_rank || null, 6249 source_product_id: ctx.source_product_id || null, 6250 source_product_ids: ctx.source_product_ids || null, 6251 customer_id: ctx.customer_id || null, 6252 ts: Date.now() 6253 })); 6254 } catch (e) {} 6255 }; 6256 6257 // Only run the listener on product pages 6258 if (window.location.pathname.indexOf('/products/') === -1) return; 6259 6260 document.addEventListener('variant:add', function handler(event) { 6261 var ctx; 6262 try { ctx = JSON.parse(sessionStorage.getItem(STORAGE_KEY) || 'null'); } catch (e) { return; } 6263 if (!ctx || !ctx.product_id) return; 6264 if (!Number.isFinite(ctx.ts) || Date.now() - ctx.ts > 30 * 60 * 1000) { 6265 try { sessionStorage.removeItem(STORAGE_KEY); } catch (e) {} 6266 return; 6267 } 6268 var items = event.detail && event.detail.items; 6269 if (!Array.isArray(items)) return; 6270 6271 // Check if the added product matches the stored context 6272 var matched = items.some(function (item) { 6273 return String(item.product_id) === String(ctx.product_id); 6274 }); 6275 if (!matched) return; 6276 6277 // Fire the attribution event 6278 var addedItem = items.find(function (item) { 6279 return String(item.product_id) === String(ctx.product_id); 6280 }); 6281 6282 var sessionId; 6283 try { 6284 sessionId = sessionStorage.getItem('rec_session_id') || null; 6285 } catch (e) { sessionId = null; } 6286 6287 var payload = { 6288 event_type: 'recommendation_add_to_cart', 6289 recommendation_type: ctx.recommendation_type, 6290 placement: ctx.placement, 6291 request_uuid: ctx.request_uuid, 6292 served_rank: ctx.served_rank || null, 6293 product_id: ctx.product_id, 6294 variant_id: addedItem ? addedItem.variant_id || addedItem.id : ctx.variant_id, 6295 customer_id: ctx.customer_id, 6296 attributed_from: 'product-page', 6297 session_id: sessionId, 6298 page_path: window.location.pathname, 6299 timestamp: new Date().toISOString() 6300 }; 6301 if (ctx.source_product_id) payload.source_product_id = ctx.source_product_id; 6302 if (ctx.source_product_ids) payload.source_product_ids = ctx.source_product_ids; 6303
6304 var endpoint = 'https://api.sowandarrow.com/recommendations'; 6305 var pingUrl = endpoint + '?rx=1&d=' + encodeURIComponent(JSON.stringify(payload)); 6306 var img = new Image(); 6307 window.__recoEventPings = window.__recoEventPings || []; 6308 window.__recoEventPings.push(img); 6309 img.onload = img.onerror = function () { 6310 window.__recoEventPings = window.__recoEventPings.filter(function (x) { return x !== img; }); 6311 }; 6312 img.src = pingUrl; 6313 6314 // Clear context after firing so it only fires once 6315 try { sessionStorage.removeItem(STORAGE_KEY); } catch (e) {} 6316 6317 }); 6318})(); 6319</script>
6319 6320<div id="shopify-block-AakNoTzR0N0NkN3Z2W__11532412952436166569" class="shopify-block shopify-app-block"> 6321 6322 6323 <!-- __LXV: 1788179975806;__LXR: https://loox.io;__LXC: zOPWEQsJt6; -->
6323<script>var loox_global_hash = '1788179975806'; 6324var loox_bundle_reviews_enabled = false;</script>
6324<script>var visitor_level_referral = {"active":true,"rtl":false,"position":"right","button_text":"£5 Gift","button_bg_color":"118282","button_text_color":"ffffff","display_on_home_page":true,"display_on_product_page":true,"display_on_cart_page":true,"display_on_other_pages":true,"hide_on_mobile":false,"sidebar_visible":true,"orientation":"default","border_radius":{"key":"extraRounded","value":"16px","label":"Extra Rounded"}}; 6325</script>
6325<style>.loox-reviews-default { max-width: 1200px; margin: 0 auto; }.loox-rating .loox-icon { color:#EBBF20; } 6326:root { --lxs-rating-icon-color: #EBBF20; }</style> 6327 6328 6329 6330 6331 6332 6333 6334</div><div id="shopify-block-AVUVMWlY4Y0F6UEhId__9859414570452352049" class="shopify-block shopify-app-block">
6334<script> 6335 var bgReferralIdentifiersRaw = "[]"; 6336</script>
6336 6337 6338</div><div id="shopify-block-AMXlNNXM5SWtGZ0cxR__17151115064775110295" class="shopify-block shopify-app-block"><style data-recharge-theme='{"has_theme_customization": true, "design_mode": false }'> 6339 .recharge-theme { 6340 /* App */ 6341 --recharge-app-background: #FAF4F0; 6342 --recharge-app-container: 1200px; 6343 --recharge-app-vertical-padding: 40px; 6344 6345 /* Brand colors */ 6346 6347--recharge-color-brand: #467C99; 6348 6349 /* Tints */ 6350 --recharge-color-brand-120: #38637a; 6351 --recharge-color-brand-20: #6b96ad; 6352 --recharge-color-brand-40: #90b0c2; 6353 --recharge-color-brand-60: #b5cbd6; 6354 --recharge-color-brand-75: #d1dee6; 6355 --recharge-color-brand-85: #e3ebf0; 6356 6357 /* Neutral */ 6358 --recharge-color-neutral: hsl(201, 35%, 7%); 6359 --recharge-color-neutral-80: hsl(201, 7%, 25%); 6360 --recharge-color-neutral-70: hsl(201, 5%, 35%); 6361 --recharge-color-neutral-40: hsl(201, 3%, 63%); 6362 --recharge-color-neutral-10: hsl(201, 2%, 91%); 6363 6364 6365 /* Links */ 6366 --recharge-button-secondary: #467C99; 6367 --recharge-button-secondary-120: #38637a; 6368 --recharge-button-secondary-60: #90b0c2; 6369 6370 /* Images */ 6371 --recharge-images-ratio: 1; 6372 6373 /* Cards */ 6374 6375 --recharge-cards-background: #FFFFFF; 6376 6377 6378 6379 --recharge-cards-border-color: #F1E4D3; 6380 6381 6382 /* Fonts */ 6383 --recharge-typography-scale: 16px; 6384 --recharge-typography-size-1: calc(3 * var(--recharge-typography-scale)); 6385 --recharge-typography-size-2: calc(2.25 * var(--recharge-typography-scale)); 6386 --recharge-typography-size-3: calc(1.625 * var(--recharge-typography-scale)); 6387 --recharge-typography-size-4: calc(1.25 * var(--recharge-typography-scale)); 6388 --recharge-typography-size-5: calc(1 * var(--recharge-typography-scale)); 6389 --recharge-typography-size-6: calc(.875 * var(--recharge-typography-scale)); 6390 6391 /** Text **/ 6392 --recharge-typography-light: #FFFFFF; 6393 --recharge-typography-primary: var(--recharge-color-neutral); 6394 --recharge-typography-secondary: var(--recharge-color-neutral-70); 6395 6396 /* Corners */ 6397 --recharge-corners-radius: 0px; 6398 6399 --recharge-button-border-radius: 0px; 6400 6401 6402 /* Views */ 6403 6404 --recharge-views-background: #FAF4F0; 6405 6406 6407 /* Buttons */ 6408 --recharge-button-font-family: inherit; 6409 --recharge-button-brand: var(--recharge-color-brand); 6410 --recharge-button-color: #FFFFFF; 6411 } 6412</style> 6413 6414</div><div id="shopify-block-AS1BkbkJ2TVRDNEVIW__13997699835324413730" class="shopify-block shopify-app-block"><style> 6415:root { 6416--ooo-wl-product-card-button-position-block: 16px; 6417--ooo-wl-product-card-button-position-inline: 16px; 6418--ooo-wl-product-card-button-icon-color: rgb(50 30 30); 6419--ooo-wl-product-card-button-border-radius: 0px;} 6420@media screen and (min-width: 1000px) { 6421 :root {} 6422} 6423</style> 6424<ooo-wl-product-card-injector hidden><ooo-wl-access-button><ooo-wl-product-card-button template="ooo-wl-product-card-button"></ooo-wl-product-card-button></ooo-wl-access-button></ooo-wl-product-card-injector> 6425<template id="ooo-wl-product-card-button"> 6426 <link rel="stylesheet" href="https://cdn.shopify.com/extensions/01a0fcc1-0c55-7889-b686-426130743326/wishlist-power-300/assets/wishlist-product-card-button.css"> 6427 <button hidden type="button" role="checkbox" aria-checked="false" loading style="--ooo-wl-product-card-button-block-start: var(--ooo-wl-product-card-button-position-block); 6428--ooo-wl-product-card-button-inline-end: var(--ooo-wl-product-card-button-position-inline);"><!-- BEGIN app snippet: wishlist-icon --><svg fill="none" aria-hidden="false" focusable="false" width="22" class="ooo-wl-button-icon ooo-wl-button-icon--heart" viewBox="0 0 18 16"><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" d="M9.004 14.152 2.748 8.483c-3.4-3.4 1.598-9.928 6.256-4.647 4.659-5.281 9.635 1.27 6.257 4.647l-6.257 5.668Z"/></svg><!-- END app snippet --></button> 6429</template><!-- BEGIN app snippet: popup-login --> 6430<ooo-wl-login-popup id="ooo-wl-login-share"> 6431 <template shadowrootmode="open"> 6432 <link rel="stylesheet" href="https://cdn.shopify.com/extensions/01a0fcc1-0c55-7889-b686-426130743326/wishlist-power-300/assets/wishlist-popup-login.css"> 6433 <dialog> 6434 <div class="ooo-wl-popup__content"> 6435 <button class="ooo-wl-popup__close" aria-label="Click to close popup"><svg fill="none" aria-hidden="false" focusable="false" width="25" class="" viewBox="0 0 18 18"><path stroke="currentColor" stroke-width="1.5" d="m4.757 4.757 8.486 8.48
64356M4.757 13.243l8.486-8.486"/></svg></button> 6436 <div class="ooo-wl-v-stack"> 6437 <p class="ooo-wl-popup__title">Share your wishlist</p> 6438 <p class="ooo-wl-popup__description">You must log in to share your wishlist</p> 6439 </div> 6440 <a href="/account/login?checkout_url=%2Fproducts%2Fpure-peanut-crackers-cracked-black-pepper-20g" rel="nofollow noopener noreferrer" class="ooo-wl-popup__button">Login</a> 6441 </div> 6442 </dialog> 6443 </template> 6444</ooo-wl-login-popup> 6445<!-- END app snippet -->
6445<script> 6446window.ooo = window.ooo || {}; 6447window.ooo.wishlist = window.ooo.wishlist || {}; 6448window.ooo.wishlist.appProductCardActiveInCollection =false; 6449window.ooo.wishlist.customerId = null 6450window.ooo.wishlist.customerEmail = null 6451window.ooo.wishlist.customerHmac = "d47ef44188a5d84c49fa74c68adde3dbc42c2bdaafe2362bcd38d898912605ad" 6452window.ooo.wishlist.customerName = null 6453window.ooo.wishlist.moneyFormat = "£{{amount}}" 6454window.ooo.wishlist.moneyWithCurrencyFormat = "£{{amount}} GBP" 6455window.ooo.wishlist.currencyCodeEnabled = false 6456window.ooo.wishlist.__itemsLimit = () => { return false }; 6457window.ooo.wishlist.__apiAccess = () => { return true }; 6458window.ooo.wishlist.__marketsAccess = () => { return true } 6459</script>
6459 6460</div><div id="shopify-block-AR2FMSW9nNERWcU9kV__6174324309569838175" class="shopify-block shopify-app-block"> 6461 6462 6463<div class="smile-shopify-init" 6464 data-channel-key="channel_HaO88gx7qrq4P6pG86K5QtSF" 6465 6466></div> 6467 6468 6469</div><div id="shopify-block-AU3B4a2lHcnQ2Nko5U__2376147384742976171" class="shopify-block shopify-app-block">
6469<script> 6470 window.__WINDFALL_BOOTSTRAP__ = { 6471 contract: {"version":1,"currency":"GBP","updatedAt":"2026-10-04T04:00:50.890Z","offers":[{"id":"love-mushroom-facemask","type":"combo_gift","status":"active","discountTitle":"Love Mushroom Facemask","label":"Free Facemask","gift":{"variantId":"gid:\/\/shopify\/ProductVariant\/57051372749178"},"requires":{"allOf":[{"id":"omegas","label":"Regenerative Omegas","anyOf":[{"source":"cart","productIds":["gid:\/\/shopify\/Product\/8429687832889","gid:\/\/shopify\/Product\/15338667213178","gid:\/\/shopify\/Product\/15629678248314"],"resolvedProductIds":["gid:\/\/shopify\/Product\/8429687832889","gid:\/\/shopify\/Product\/15338667213178","gid:\/\/shopify\/Product\/15629678248314"]},{"source":"subscribed_to","productIds":[],"collectionIds":[],"useCartProducts":true,"resolvedProductIds":[]}]},{"id":"love-mushroom","label":"any Love Mushroom product","anyOf":[{"source":"cart","productIds":["gid:\/\/shopify\/Product\/16143740961146","gid:\/\/shopify\/Product\/16144944038266","gid:\/\/shopify\/Product\/16143786967418","gid:\/\/shopify\/Product\/16145058955642","gid:\/\/shopify\/Product\/16163974513018","gid:\/\/shopify\/Product\/16145075863930"],"collectionIds":[],"resolvedProductIds":["gid:\/\/shopify\/Product\/16143740961146","gid:\/\/shopify\/Product\/16144944038266","gid:\/\/shopify\/Product\/16143786967418","gid:\/\/shopify\/Product\/16145058955642","gid:\/\/shopify\/Product\/16163974513018","gid:\/\/shopify\/Product\/16145075863930"]},{"source":"subscribed_to","productIds":[],"collectionIds":[],"useCartProducts":true,"resolvedProductIds":[]}]}]},"autoAdd":true,"maxQuantity":10,"giftLineProperty":"_sow_gift","ui":{"badge":"FREE GIFT","lockedMessage":"Add {{missing}} for a Free Gift","unlockedMessage":"Free Gift Unlocked","showInCartRow":true},"subscriptions":{"applyToSubscriptionProducts":false,"applyToOneTimePurchases":true},"discountGid":"gid:\/\/shopify\/DiscountAutomaticNode\/2278439813498","startsAt":"2026-08-13T23:15:49Z","endsAt":null},{"id":"spend-5-percent-100","type":"percent_off","status":"active","discountTitle":"5% Off","label":"5% Off","percent":5,"qualifying":{"requiresShipping":true,"excludeGiftLines":true},"ui":{"progressTier":1,"lockedMessage":"{{remaining}} away from 5% Off","unlockedMessage":"5% Off unlocked!"},"requires":{"allOf":[{"id":"spend-spend-5-percent-100","label":"Spend goal","anyOf":[{"source":"cart_value","amount":"100.00"}]}]},"subscriptions":{"applyToSubscriptionProducts":false,"applyToOneTimePurchases":true},"discountGid":"gid:\/\/shopify\/DiscountAutomaticNode\/2278424117626","startsAt":"2026-08-13T23:07:51Z","endsAt":null,"combines":{"productDiscounts":true}},{"id":"free-cacto-drink","type":"combo_gift","status":"active","discountTitle":"Cacto Drink","label":"Free Cacto Drink","qualifying":{"requiresShipping":true,"excludeGiftLines":true},"autoAdd":true,"maxQuantity":10,"giftLineProperty":"_sow_gift","ui":{"lockedMessage":"Add {{missing}} to unlock your free Cacto drink","unlockedMessage":"Free gift unlocked!","badge":"FREE GIFT"},"requires":{"allOf":[{"id":"group-1-ptf0dc","label":"any Cacto Soda","anyOf":[{"source":"cart","productIds":["gid:\/\/shopify\/Product\/16123905999226","gid:\/\/shopify\/Product\/16123908325754"],"collectionIds":[],"resolvedProductIds":["gid:\/\/shopify\/Product\/16123905999226","gid:\/\/shopify\/Product\/16123908325754"]}]}]},"gift":{"variantId":"gid:\/\/shopify\/ProductVariant\/57162383491450"},"subscriptions":{"applyToSubscriptionProducts":false,"applyToOneTimePurchases":true},"discountGid":"gid:\/\/shopify\/DiscountAutomaticNode\/2278448857466","startsAt":"2026-08-14T11:54:42Z","endsAt":null},{"id":"quick-discounts","type":"quick_discount","status":"active","label":"Quick discounts","discountTitle":"Quick discounts","items":[{"productId":"gid:\/\/shopify\/Product\/9391544729913","variantId":"gid:\/\/shopify\/ProductVariant\/49080416207161","productTitle":"Organic Chaga Turmeric Latte - 120g","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/organic-chaga-turmeric-latte-120g-from-mushrooms-for-life-available-at-sow-arrow-469473.webp?v=1726162087","price":"25.99","salePrice":"21.25","percent":18.2,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/9391522644281","variantId":"gid:\/\/shopify\/ProductVariant\/49080212914489","productTitle":"Organic Cordyceps Beetroot Latte - 130g","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/organic-cordyceps-beetroot-latte-130g-from-mushrooms-for-life-available-at-sow-arrow-435353.webp?v=1726162096","price":"25.99","salePrice":"21.25","percent":18.2,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/15071473926522","variantId":"gid:\/\/shopify\/ProductVariant\/55311076622714","productTitle":"Organic Lion's Mane Matcha L
6471atte - 75g","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/organic-lions-mane-matcha-latte-75g-from-mushrooms-for-life-available-at-sow-arrow-691063.webp?v=1745773903","price":"25.99","salePrice":"21.25","percent":18.2,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/15519066521978","variantId":"gid:\/\/shopify\/ProductVariant\/56244032864634","productTitle":"Cheese, Bone Broth \u0026 Pumpkin Seed Muffins - 2 Pack","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/cheese-bone-broth-pumpkin-seed-muffins-2-pack-from-sow-arrow-available-at-sow-arrow-9071253.jpg?v=1770159078","price":"7.99","salePrice":"6.99","percent":12.5,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/8254166237497","variantId":"gid:\/\/shopify\/ProductVariant\/45022310105401","productTitle":"Hungry Woman by Pauline Cox - Signed Edition","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/hungry-woman-by-pauline-cox-signed-edition-from-pauline-cox-available-at-sow-arrow-899776.png?v=1726161909","price":"30.00","salePrice":"22.00","percent":26.7,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/15058965299578","variantId":"gid:\/\/shopify\/ProductVariant\/55277108756858","productTitle":"Dr. Immune Five Syrup (Reishi, Agaricus, Oyster, Chaga, Shiitake) - 250ml","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/dr-immune-five-syrup-reishi-agaricus-oyster-chaga-shiitake-250ml-from-hiffas-da-terra-available-at-sow-arrow-828675.webp?v=1745028198","price":"29.99","salePrice":"22.99","percent":23.3,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/16147013566842","variantId":"gid:\/\/shopify\/ProductVariant\/57056531906938","productTitle":"Creatine Monohydrate with Magnesium - 28 servings","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/creatine-monohydrate-with-magnesium-28-servings-from-hunter-gather-available-at-sow-arrow-6532218.webp?v=1783748113","price":"23.99","salePrice":"21.25","percent":11.4,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/16154190741882","variantId":"gid:\/\/shopify\/ProductVariant\/57081625575802","productTitle":"Grain-free Granola - Cinnamon","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/grain-free-granola-cinnamon-from-fudi-available-at-sow-arrow-7886385.png?v=1784328203","price":"7.49","salePrice":"6.75","percent":9.9,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/16154157121914","variantId":"gid:\/\/shopify\/ProductVariant\/57081501483386","productTitle":"Grain-free Granola - Cocoa","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/grain-free-granola-cocoa-from-fudi-available-at-sow-arrow-5704363.png?v=1784328203","price":"7.49","salePrice":"6.75","percent":9.9,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/16154161578362","variantId":"gid:\/\/shopify\/ProductVariant\/57081508594042","productTitle":"Grain-free Granola - Original","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/grain-free-granola-original-from-fudi-available-at-sow-arrow-2115599.png?v=1784328203","price":"7.49","salePrice":"6.75","percent":9.9,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/16154154303866","variantId":"gid:\/\/shopify\/ProductVariant\/57081494929786","productTitle":"Grain-free Granola - Spiced Biscuit","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/grain-free-granola-spiced-biscuit-from-fudi-available-at-sow-arrow-1060331.png?v=1784328208","price":"7.49","salePrice":"6.75","percent":9.9,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/16143786967418","variantId":"gid:\/\/shopify\/ProductVariant\/57046455681402","productTitle":"Organic Calm Reish Mushroom Drops (Alcohol Free) - 50ml","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/organic-calm-reish-mushroom-drops-alcohol-free-50ml-from-love-mushrooms-available-at-sow-arrow-7132081.webp?v=1783416673","price":"15.99","salePrice":"13.60","percent":14.9,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/16163974513018","variantId":"gid:\/\/shopify\/ProductVariant\/57122866594170","productTitle":"Organic Cordyceps Vitality liquid extract - 50ml (alcohol free)","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/organic-cordyceps-vitality-liquid-extract-50ml-alcohol
6471-free-from-love-mushrooms-available-at-sow-arrow-4674430.webp?v=1785322450","price":"15.99","salePrice":"13.60","percent":14.9,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/16143740961146","variantId":"gid:\/\/shopify\/ProductVariant\/57046219391354","productTitle":"Organic Lionâs Mane Mushroom Extract (Alcohol Free) - 50ml","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/organic-lions-mane-mushroom-extract-alcohol-free-50ml-from-love-mushrooms-available-at-sow-arrow-2774941.webp?v=1783416673","price":"15.99","salePrice":"13.60","percent":14.9,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/16144944038266","variantId":"gid:\/\/shopify\/ProductVariant\/57051002208634","productTitle":"Organic Lion's Mane (4000mg per capsule) - 60 capsules","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/organic-lions-mane-4000mg-per-capsule-60-capsules-from-love-mushrooms-available-at-sow-arrow-6279251.webp?v=1783500129","price":"19.99","salePrice":"16.99","percent":15,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/16145058955642","variantId":"gid:\/\/shopify\/ProductVariant\/57051261370746","productTitle":"Organic Reishi (4000mg per capsule) - 60 capsules","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/organic-reishi-4000mg-per-capsule-60-capsules-from-love-mushrooms-available-at-sow-arrow-6810727.webp?v=1783582390","price":"19.99","salePrice":"16.99","percent":15,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/16145075863930","variantId":"gid:\/\/shopify\/ProductVariant\/57051365114234","productTitle":"Collagen Truffle Cotton Face Mask - 5 pack","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/collagen-truffle-cotton-face-mask-5-pack-from-sow-arrow-available-at-sow-arrow-6192698.webp?v=1783582389","price":"19.99","salePrice":"16.99","percent":15,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/16173430309242","variantId":"gid:\/\/shopify\/ProductVariant\/57160314323322","productTitle":"Organic Bean Chilli - 415g","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/organic-bean-chilli-415g-from-stoked-available-at-sow-arrow-9059328.webp?v=1786565719","price":"4.99","salePrice":"4.20","percent":15.8,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/16173429129594","variantId":"gid:\/\/shopify\/ProductVariant\/57160310980986","productTitle":"Organic Bolognese - 415g","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/organic-bolognese-415g-from-stoked-available-at-sow-arrow-8077676.webp?v=1786565719","price":"4.99","salePrice":"4.20","percent":15.8,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/16173424148858","variantId":"gid:\/\/shopify\/ProductVariant\/57160300036474","productTitle":"Organic Lentil Dhal - 415g","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/organic-lentil-dhal-415g-from-stoked-available-at-sow-arrow-3947139.webp?v=1786565721","price":"4.99","salePrice":"4.20","percent":15.8,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/16173427458426","variantId":"gid:\/\/shopify\/ProductVariant\/57160307048826","productTitle":"Organic Thai Green Curry - 415g","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/organic-thai-green-curry-415g-from-stoked-available-at-sow-arrow-1957289.webp?v=1786565720","price":"4.99","salePrice":"4.20","percent":15.8,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/16173431652730","variantId":"gid:\/\/shopify\/ProductVariant\/57160321794426","productTitle":"Organic Nacho Sauce - 400g","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/organic-nacho-sauce-400g-from-stoked-available-at-sow-arrow-8783507.webp?v=1786565718","price":"4.75","salePrice":"4.05","percent":14.7,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/16173249659258","variantId":"gid:\/\/shopify\/ProductVariant\/57159452492154","productTitle":"Crispy Shitake Seaweed Snacks - 5 Pack x 4g","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/crispy-shitake-seaweed-snacks-5-pack-x-4g-from-morish-available-at-sow-arrow-1069586.webp?v=1786565724","price":"4.99","salePrice":"4.25","percent":14.8,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/16173251133818","variantId":"gid:\/\/shopify\/ProductVariant\/57159465009530","productTitle":"Organic Olive Oil Seaweed Snacks - 5 Pack x 4g","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/organic-olive-oil-seaweed-snacks-5-pack-x-4g-from-morish-available-at-sow-arrow-2065874.webp?v=1786565723","price":"4.99","salePrice":"4.25","percent":14.8,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/14864049734010","variantId":"gid:\/\/shopify\/ProductVariant\/54849733099898","productTitle":"Biodynamic, Organic Fine Drinking Chocolate - 300g","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/biodynamic-organic-fine-drinking-chocolate-300g-from-vivani-available-at-sow-arrow-895931.webp?v=1732881687","price":"6.49","salePrice":"3.99","percent":38.5,"reason":"Short dated"},{"productId":"gid:\/\/shopify\/Product\/15632127000954","variantId":"gid:\/\/shopify\/ProductVariant\/56489454633338","productTitle":"Keto Pizza Base - 6 Pack","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/keto-pizza-base-6-pack-from-sow-arrow-available-at-sow-arrow-4180271.jpg?v=1770159081","price":"14.99","salePrice":"13.49","percent":10,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/15058953601402","variantId":"gid:\/\/shopify\/ProductVariant\/55277083853178","productTitle":"Organic Mico Cord (Cordyceps Extract) 835mg per cap - 70 capsules","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/organic-mico-cord-cordyceps-extract-835mg-per-cap-70-capsules-from-hiffas-da-terra-available-at-sow-arrow-164438.webp?v=1745028201","price":"65.99","salePrice":"52.79","percent":20,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/15058048582010","variantId":"gid:\/\/shopify\/ProductVariant\/55275421335930","productTitle":"Organic Mico-Chaga (Chaga Extract) 610mg per cap - 70 capsules","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/organic-mico-chaga-chaga-extract-610mg-per-cap-70-capsules-from-hiffas-da-terra-available-at-sow-arrow-509322.jpg?v=1744945379","price":"65.99","salePrice":"52.79","percent":20,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/15058005950842","variantId":"gid:\/\/shopify\/ProductVariant\/55275276697978","productTitle":"Organic Mico-Rei (Reishi Extract) 641mg per cap - 70 capsules","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/organic-mico-rei-reishi-extract-641mg-per-cap-70-capsules-from-hiffas-da-terra-available-at-sow-arrow-460826.webp?v=1744945383","price":"65.99","salePrice":"52.79","percent":20,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/15058025480570","variantId":"gid:\/\/shopify\/ProductVariant\/55275322507642","productTitle":"Organic Mico-Vir (Reishi \u0026 Cordyceps Extract) 670mg per cap - 70 capsules","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/organic-mico-vir-reishi-cordyceps-extract-670mg-per-cap-70-capsules-from-hiffas-da-terra-available-at-sow-arrow-487132.webp?v=1744945379","price":"65.99","salePrice":"52.79","percent":20,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/16110621884794","variantId":"gid:\/\/shopify\/ProductVariant\/56900480696698","productTitle":"Free-Range Chicken Bone Broth Powder - 300g","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/free-range-chicken-bone-broth-powder-300g-from-hunter-gather-available-at-sow-arrow-3329877.webp?v=1786565721","price":"31.99","salePrice":"28.89","percent":9.7,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/15927167025530","variantId":"gid:\/\/shopify\/ProductVariant\/56750704296314","productTitle":"Organic, British Authentic Desi Ghee - 300g","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/organic-british-authentic-desi-ghee-300g-from-shobhnas-ghee-available-at-sow-arrow-2538408.jpg?v=1775821527","price":"11.99","salePrice":"10.79","percent":10,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/16099802677626","variantId":"gid:\/\/shopify\/ProductVariant\/56859597177210","productTitle":"Collagen, MCT, Coffee Powder - 300g","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/collagen-mct-coffee-powder-300g-from-hunter-gather-available-at-sow-arrow-9156615.webp?v=1778113822","price":"34.00","salePrice":"30.60","percent":10,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/8730633896249","variantId":"gid:\/\/shopify\/ProductVariant\/46954128539961","productTitle":"Nano Gold \u0026 Platinum Glow \u0026 Shine - 50ml","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/nano-gold-platinum-glow-shine-50ml-from-the-health-factory-available-at-sow-arrow-524214.png?v=1726161966","price":"44.95","salePrice":"35.96","percent":20,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/8240018653497","variantId":"gid:\/\/shopify\/ProductVariant\/44853200814393","productTitle":"Nano Gold \u0026 Platinum Glow \u0026 Shine Collagen Support - 15ml","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/nano-gold-platinum-glow-shine-collagen-support-15ml-from-the-health-factory-available-at-sow-arrow-373680.png?v=1726161966","price":"24.99","salePrice":"19.99","percent":20,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/16190764384634","variantId":"gid:\/\/shopify\/ProductVariant\/57225131164026","productTitle":"Pure Peanut Crackers -Fiery Chilli Flakes - 20g","
6471imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/3a4d98_ea75ec7d42be4adf911e6fa635cfd3d0_mv2.avif?v=1788432935","price":"1.65","salePrice":"1.32","percent":20,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/16190754488698","variantId":"gid:\/\/shopify\/ProductVariant\/57225101803898","productTitle":"Pure Peanut Crackers - Original - 20g","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/HighProteinPeanutCrackers3x20g_1.avif?v=1788432535","price":"1.65","salePrice":"1.32","percent":20,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/16190750032250","variantId":"gid:\/\/shopify\/ProductVariant\/57225090072954","productTitle":"Pure Peanut Crackers - Cracked Black Pepper - 20g","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/CrackedBlackPepperPeanutCrackers.avif?v=1788431863","price":"1.65","salePrice":"1.32","percent":20,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/16185733611898","variantId":"gid:\/\/shopify\/ProductVariant\/57208215503226","productTitle":"Popped Foxnuts - Black Pepper - 25g","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/popped-foxnuts-black-pepper-25g-from-bare-truth-available-at-sow-arrow-5601646.webp?v=1787974039","price":"2.29","salePrice":"1.95","percent":14.8,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/16185731875194","variantId":"gid:\/\/shopify\/ProductVariant\/57208213635450","productTitle":"Popped Foxnuts - Chilli Paprika - 25g","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/popped-foxnuts-chilli-paprika-25g-from-bare-truth-available-at-sow-arrow-7163493.jpg?v=1787974039","price":"2.29","salePrice":"1.95","percent":14.8,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/16185729122682","variantId":"gid:\/\/shopify\/ProductVariant\/57208208261498","productTitle":"Popped Foxnuts - Cinnamon Vanilla - 25g","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/popped-foxnuts-cinnamon-vanilla-25g-from-bare-truth-available-at-sow-arrow-1072382.webp?v=1787974039","price":"2.29","salePrice":"1.95","percent":14.8,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/16185728172410","variantId":"gid:\/\/shopify\/ProductVariant\/57208207245690","productTitle":"Popped Foxnuts - Coconut Cacao - 25g","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/popped-foxnuts-coconut-cacao-25g-from-bare-truth-available-at-sow-arrow-1139398.jpg?v=1787974038","price":"2.29","salePrice":"1.95","percent":14.8,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/16185703956858","variantId":"gid:\/\/shopify\/ProductVariant\/57208158454138","productTitle":"Crispy Sesame Oil Seaweed Snacks - 5 pack x 4g","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/crispy-sesame-oil-seaweed-snacks-5-pack-x-4g-from-morish-available-at-sow-arrow-1604112.webp?v=1788389354","price":"4.99","salePrice":"4.25","percent":14.8,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/16185703563642","variantId":"gid:\/\/shopify\/ProductVariant\/57208157372794","productTitle":"Avocado Oil Seaweed Snacks - 5 pack x 4g","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/avocado-oil-seaweed-snacks-5-pack-x-4g-from-morish-available-at-sow-arrow-4521024.webp?v=1788389358","price":"4.99","salePrice":"4.25","percent":14.8,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/16185706414458","variantId":"gid:\/\/shopify\/ProductVariant\/57208164581754","productTitle":"Avocado Oil Seaweed Snacks - Single - 4g","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/avocado-oil-seaweed-snacks-5-pack-x-4g-from-morish-available-at-sow-arrow-4521024.webp?v=1788389358","price":"1.29","salePrice":"1.10","percent":14.7,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/16173468320122","variantId":"gid:\/\/shopify\/ProductVariant\/57160449753466","productTitle":"Organic Olive Oil Seaweed Snacks - Single pack - 4g","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/organic-olive-oil-seaweed-snacks-single-pack-4g-from-morish-available-at-sow-arrow-8776612.webp?v=1788719775","price":"1.29","salePrice":"1.10","percent":14.7,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/16196423844218","variantId":"gid:\/\/shopify\/ProductVariant\/57248296763770","productTitle":"Organic Garden Pea \u0026 Vegetable Soup","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/organic-garden-pea-vegetable-soup-from-mr-organic-available-at-sow-arrow-6752651.webp?v=1788968290","price":"2.39","salePrice":"2.03","percent":15.1,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/16196414472570","variantId":"gid:\/\/shopify\/ProductVariant\/57248216514938","productTitle":"Organic Pumpkin, Carrot \u0026 Chilli Soup","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/organic-pumpkin-carrot-chilli-soup-from-mr-organic-available-at-sow-arrow-5572721.webp?v=1788968290","price":"2.39","salePrice":"2.03","percent":15.1,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/16196413129082","variantId":"gid:\/\/shopify\/ProductVariant\/57248213696890","productTitle":"Organic Tomato \u0026 Lentil Soup","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/organic-tomato-lentil-soup-from-mr-organic-available-at-sow-arrow-7972503.jpg?v=1788968289","price":"2.39","salePrice":"2.03","percent":15.1,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/16099857695098","variantId":"gid:\/\/shopify\/ProductVariant\/56859825996154","productTitle":"Vitamin D3 + K2 Oral Spray","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/vitamin-d3-k2-oral-spray-from-kiki-health-available-at-sow-arrow-2500733.webp?v=1778113820","price":"20.99","salePrice":"16.79","percent":20,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/16210802966906","variantId":"gid:\/\/shopify\/ProductVariant\/57297137435002","productTitle":"Grain-free, low carb - Original Toasted Muesli - 250g","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/grain-free-low-carb-original-toasted-muesli-250g-from-fudi-available-at-sow-arrow-6632558.webp?v=1790211191","price":"7.49","salePrice":"6.75","percent":9.9,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/14866288705914","variantId":"gid:\/\/shopify\/ProductVariant\/54853839913338","productTitle":"Vitamin D3 (2
6471000IU) \u0026 K2 - 100 Capsules","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/vitamin-d3-2000iu-k2-100-capsules-from-terranova-available-at-sow-arrow-553422.webp?v=1733047619","price":"51.99","salePrice":"41.59","percent":20,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/8240020095289","variantId":"gid:\/\/shopify\/ProductVariant\/44853202977081","productTitle":"Vitamin D3 (2000IU) \u0026 K2 - 50 Capsules","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/vitamin-d3-2000iu-k2-50-capsules-from-terranova-available-at-sow-arrow-579237.jpg?v=1726162431","price":"28.69","salePrice":"22.95","percent":20,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/8240020128057","variantId":"gid:\/\/shopify\/ProductVariant\/44865340899641","productTitle":"Vitamin D3 2000IU (50ug) Complex - 50 or 100 capsules","variantTitle":"50 Capsules","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/vitamin-d3-2000iu-50ug-complex-50-or-100-capsules-from-terranova-available-at-sow-arrow-595618.jpg?v=1726162432","price":"15.29","salePrice":"12.32","percent":19.4,"reason":"Special Offers"},{"productId":"gid:\/\/shopify\/Product\/8240020128057","variantId":"gid:\/\/shopify\/ProductVariant\/44865340932409","productTitle":"Vitamin D3 2000IU (50ug) Complex - 50 or 100 capsules","variantTitle":"100 Capsules","imageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0752\/8936\/2745\/files\/vitamin-d3-2000iu-50ug-complex-50-or-100-capsules-from-terranova-available-at-sow-arrow-992320.jpg?v=1726162432","price":"28.89","salePrice":"21.51","percent":25.5,"reason":"Special Offers"}],"quickDefaults":{"reasons":["Sale","Clearance","Short dated","Damaged packaging","Display stock","Special Offers","Quick discounts"],"reasonsConfigured":true},"qualifying":{"requiresShipping":true,"excludeGiftLines":true},"ui":{"showInCart":false},"discountGid":"gid:\/\/shopify\/DiscountAutomaticNode\/2278451577210","startsAt":"2026-08-14T11:54:43Z","endsAt":null,"subscriptions":{"recurringCycleLimit":1},"quickReasons":["Special Offers","Short dated"],"quickItems":[["49080416207161","21.25",0],["49080212914489","21.25",0],["55311076622714","21.25",0],["56244032864634","6.99",0],["45022310105401","22.00",0],["55277108756858","22.99",0],["57056531906938","21.25",0],["57081625575802","6.75",0],["57081501483386","6.75",0],["57081508594042","6.75",0],["57081494929786","6.75",0],["57046455681402","13.60",0],["57122866594170","13.60",0],["57046219391354","13.60",0],["57051002208634","16.99",0],["57051261370746","16.99",0],["57051365114234","16.99",0],["57160314323322","4.20",0],["57160310980986","4.20",0],["57160300036474","4.20",0],["57160307048826","4.20",0],["57160321794426","4.05",0],["57159452492154","4.25",0],["57159465009530","4.25",0],["54849733099898","3.99",1],["56489454633338","13.49",0],["55277083853178","52.79",0],["55275421335930","52.79",0],["55275276697978","52.79",0],["55275322507642","52.79",0],["56900480696698","28.89",0],["56750704296314","10.79",0],["56859597177210","30.60",0],["46954128539961","35.96",0],["44853200814393","19.99",0],["57225131164026","1.32",0],["57225101803898","1.32",0],["57225090072954","1.32",0],["57208215503226","1.95",0],["57208213635450","1.95",0],["57208208261498","1.95",0],["57208207245690","1.95",0],["57208158454138","4.25",0],["57208157372794","4.25",0],["57208164581754","1.10",0],["57160449753466","1.10",0],["57248296763770","2.03",0],["57248216514938","2.03",0],["57248213696890","2.03",0],["56859825996154","16.79",0],["57297137435002","6.75",0]]}]}, 6472 currency: "GBP", 6473 shopDate: "2026-10-04", 6474 customer: { 6475 loggedIn: false, 6476 ordersCount: 0, 6477 totalSpentCents: 0, 6478 hasOmegaSubscription: false, 6479 subscribedProductIds: [] 6480 } 6481 }; 6482</script>
vendor: 1 bytes, line 6482
6482
6483<script src="https://cdn.shopify.com/extensions/01a000c9-2e77-7daa-8e50-42b6ab534a39/windfall-9/assets/quiver-offers.js" defer></script>
6483 6484 6485 6486</div><div id="shopify-block-AOU94K1p0RDB0RlNGR__2883025457459210873" class="shopify-block shopify-app-block">
6486<script> 6487 window.ooo = window.ooo || {}; 6488 window.ooo.wishlist = window.ooo.wishlist || {}; 6489 window.ooo.wishlist.accessToWishlist ='login_to_use'; 6490 window.ooo.wishlist.sharedWishlist = true; 6491 window.ooo.wishlist.showShareWishlistButton = true; 6492 window.ooo.wishlist.useVariants = false; 6493 window.ooo.wishlist.translations = window.ooo.wishlist.translations || {}; 6494 window.ooo.wishlist.translations['shared_title'] = "Shared wishlist"; 6495 window.ooo.wishlist.translations['shared_title_with_name'] = "Shared wishlist of"; 6496 window.ooo.wishlist.translations['add_to_wishlist'] = "Add to wishlist button"; 6497 window.ooo.wishlist.translations['remove_from_wishlist'] = "Remove from wishlist button"; 6498 window.ooo.wishlist.translations['each'] = "ea"; 6499 window.ooo.wishlist.selectedTheme = "stretch"; 6500 window.ooo.wishlist.appSetupActive = true; 6501 window.ooo.wishlist.isB2bUser =null; 6502 window.ooo.wishlist.customerId = null; 6503 window.ooo.wishlist.customerHmac = "68d5eb3c528679cf51f73ede4b3824ac5b3431b9e0da39d290fc9ca9590e3693"; 6504 window.ooo.wishlist.customerName = null; 6505 window.ooo.wishlist.customerEmail = null; 6506 window.ooo.wishlist.moneyFormat = "£{{amount}}"; 6507 window.ooo.wishlist.moneyWithCurrencyFormat = "£{{amount}} GBP"; 6508 window.ooo.wishlist.currencyCodeEnabled = false; 6509 window.ooo.wishlist.appVersion = 1; 6510 window.ooo.wishlist.lastUpdatedAt = null; 6511 window.ooo.wishlist.wishlistCount = null; 6512 window.ooo.wishlist.__checkoutAccess = () => { return false }; 6513 window.ooo.wishlist.__itemsLimit = () => { return false }; 6514 window.ooo.wishlist.__apiAccess = () => { return true }; 6515 window.ooo.wishlist.__marketsAccess = () => { return true }; 6516 window.ooo.wishlist.__int = () => { return { px: false, kla: false, modules: null } };window.ooo.wishlist.hmac = "c3f01ea838d3b374b079c23a86b70e7610f2bfe27b9afe9351a1857519fd9c80"; 6517 window.ooo.wishlist.hmacApi = "48ab9777e79112b30eff8e0e37cdb62b60cbec497bfbad20104f7ba999555625"; 6518</script>
6518 6519<link rel="stylesheet" href="https://cdn.shopify.com/extensions/01a0fcc1-0c55-7889-b686-426130743326/wishlist-power-300/assets/wishlist-global-style.css"/><!-- BEGIN app snippet: wishlist-css-tokens --><style> 6520:root { 6521--stretch-button-background-color: 50 30 30; 6522--stretch-button-text-color: 255 255 255; 6523--theme-text-color: 50 30 30; 6524--theme-background-color: 250 244 240;--theme-border-color: 230 223 219;--ooo-wl-page-product-card-container-column-gap: 0; 6525--ooo-wl-page-product-card-container-row-gap: 0; 6526--ooo-wl-page-product-card-info-container-padding-inline: 10px; 6527--ooo-wl-page-product-card-info-container-padding-block: 0 10px;--theme-swatches-width: 30px; 6528--theme-swatches-height: 13px; 6529--theme-swatches-radius: 0; 6530--theme-swatches-selected-radius: 0; 6531--theme-swatches-selected-offset: none; 6532--theme-swatches-selected-bottom: -4px; 6533--theme-swatches-outline-color: transparent; 6534--theme-swatches-outline-border-width: 0; 6535--theme-swatches-outline-width: 100%; 6536--theme-swatches-outline-height: 2px; 6537--theme-swatches-selected-background-color: rgb(0, 0, 0); 6538} 6539</style>
6539<script>window.ooo = window.ooo || {};window.ooo.wishlist.stretchThemeProductListingSpacing = "none"</script>
6539<!-- END app snippet --><link rel="stylesheet" href="https://cdn.shopify.com/extensions/01a0fcc1-0c55-7889-b686-426130743326/wishlist-power-300/assets/wishlist-css-token-theme-stretch.css" /><!-- BEGIN app snippet: popup-login --> 6540<ooo-wl-login-popup id="ooo-wl-login-access"> 6541 <template shadowrootmode="open"> 6542 <link rel="stylesheet" href="https://cdn.shopify.com/extensions/01a0fcc1-0c55-7889-b686-426130743326/wishlist-power-300/assets/wishlist-popup-login.css"> 6543 <dialog> 6544 <div class="ooo-wl-popup__content"> 6545 <button class="ooo-wl-popup__close" aria-label="Click to close popup"><svg fill="none" aria-hidden="false" focusable="false" width="25" class="" viewBox="0 0 18 18"><path stroke="currentColor" stroke-width="1.5" d="m4.757 4.757 8.486 8.486M4.757 13.243l8.486-8.486"/></svg></button> 6546 <div class="ooo-wl-v-stack"> 6547 <p class="ooo-wl-popup__title">Access your wishlist</p> 6548 <p class="ooo-wl-popup__description">You must log in to access to your wishlist</p> 6549 </div> 6550 <a href="/account/login?checkout_url=%2Fproducts%2Fpure-peanut-crackers-cracked-black-pepper-20g" rel="nofollow noopener noreferrer" class="ooo-wl-popup__button">Login</a> 6551 </div> 6552 </dialog> 6553 </template> 6554</ooo-wl-login-popup> 6555<!-- END app snippet --><!-- BEGIN app snippet: popup-login --> 6556<ooo-wl-login-popup id="ooo-wl-login-share"> 6557 <template shadowrootmode="open"> 6558 <link rel="stylesheet" href="https://cdn.shopify.com/extensions/01a0fcc1-0c55-7889-b686-426130743326/wishlist-power-300/assets/wishlist-popup-login.css"> 6559 <dialog> 6560 <div class="ooo-wl-popup__content"> 6561 <button class="ooo-wl-popup__close" aria-label="Click to close popup"><svg fill="none" aria-hidden="false" focusable="false" width="25" class="" viewBox="0 0 18 18"><path stroke="currentColor" stroke-width="1.5" d="m4.757 4.757 8.486 8.486M4.757 13.243l8.486-8.486"/></svg></button> 6562 <div class="ooo-wl-v-stack"> 6563 <p class="ooo-wl-popup__title">Share your wishlist</p> 6564 <p class="ooo-wl-popup__description">You must log in to share your wishlist</p> 6565 </div> 6566 <a href="/account/login?checkout_url=%2Fproducts%2Fpure-peanut-crackers-cracked-black-pepper-20g" rel="nofollow noopener noreferrer" class="ooo-wl-popup__button">Login</a> 6567 </div> 6568 </dialog> 6569 </template> 6570</ooo-wl-login-popup> 6571<!-- END app snippet --><ooo-wl-tooltip hidden><span id="ooo-wl-tooltip"><span data-action="success-icon"><!-- BEGIN app snippet: wishlist-icon --><svg fill="none" aria-hidden="false" focusable="false" width="12" class="ooo-wl-button-icon ooo-wl-button-icon--tick" viewBox="0 0 12 12"><path stroke="currentColor" stroke-width="1.5" d="m1 5.941 3.53 3.53L11 3"/></svg><!-- END app snippet --></span><span data-action="error-icon"><!-- BEGIN app snippet: wishlist-icon --><svg fill="none" aria-hidden="false" focusable="false" width="12" class="ooo-wl-button-icon ooo-wl-button-icon--warning" viewBox="0 0 13 14"><circle cx="6.5" cy="7" r="6.5" fill="var(--ooo-wl-page-product-card-form-tooltip-error-color)"/><path fill="currentColor" d="M6.75 8.47a.387.387 0 0 1-.3-.12.606.606 0 0 1-.12-.34l-.3-3.82c-.02-.247.033-.443.16-.59.127-.153.313-.23.56-.23.24 0 .42.077.54.23.127.147.18.343.16.59l-.3 3.82a.522.522 0 0 1-.12.34.344.344 0 0 1-.28.12Zm0 2.08a.744.744 0 0 1-.55-.21.751.751 0 0 1-.2-.54c0-.213.067-.387.2-.52.14-.14.323-.21.55-.21.233 0 .413.07.54.21.133.133.2.307.2.52 0 .22-.067.4-.2.54-.127.14-.307.21-.54.21Z"/></svg><!-- END app snippet --></span><span data-action="message"></span></span></ooo-wl-tooltip><!-- BEGIN app snippet: import-scripts -->
6572<script type="module" src="https://cdn.shopify.com/extensions/01a0fcc1-0c55-7889-b686-426130743326/wishlist-power-300/assets/ooo-wishlist.min.js"></script>
vendor: 1 bytes, line 6572
6572
6573<script type="module" src="https://cdn.shopify.com/extensions/01a0fcc1-0c55-7889-b686-426130743326/wishlist-power-300/assets/ooo-wishlist-product-page.min.js"></script>
vendor: 1 bytes, line 6573
6573
6574<script type="module" src="https://cdn.shopify.com/extensions/01a0fcc1-0c55-7889-b686-426130743326/wishlist-power-300/assets/ooo-wishlist-product-card.min.js"></script>
6574<!-- END app snippet --> 6575</div>
6575<script src="https://cdn.shopify.com/storefront/standard-actions.js" type="module" data-source-attribution="shopify.standard_actions"></script>
6575 6576<shopify-store store-domain="https://sowandarrow.com" country="GB" language="en"></shopify-store> 6577<shopify-chat></shopify-chat> 6578</body> 6579</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.