Back to Compare


Momentous
Whey Protein Isolate 10-Travel Packs Chocolate 10 Packs
PricePrice
£0.125
KcalKcal
4.5

Momentous
Kcal
90
/2000kcal
Protein
20g
/50g
Per serving. % values based on daily recommended intake.
Whey Protein Isolate 10-Travel Packs Chocolate 10 Packs
Momentous
PricePrice
£0.125
KcalKcal
4.5
Flavour
Momentous
Flavour
Momentous
Price History
Loading...
Description
Optimize performance, recovery, and muscle maintenance with Momentous whey protein packs. Comes with 10 single-serve packets, perfect for travel days.
Ingredients
Chocolate: grass-fed whey protein isolate, ProHydrolase®, natural flavors, cocoa, salt, monk fruit extract, stevia
Vanilla: grass-fed whey protein isolate, ProHydrolase®, natural flavors, salt, monk fruit extract, stevia
Strawberry: grass-fed whey protein isolate, ProHydrolase®, natural strawberry flavor, Reb M, beet root/carrot juice powder (for color)
ProHydrolase® is a clinically researched enzyme that enhances protein breakdown and amino acid uptake.
*Reb M is a natural, plant-based sweetener with zero glycemic response or aftertaste. Our Reb M is made from fermented sources and is 250× sweeter than sugar without bloating, 2.5× sweeter than monk fruit, and made sustainably with less land, water, and crop rotation.
Onset Time & Expected Results
Use daily, as needed to hit your individual protein goals. A general guideline many experts suggest is 0.8 to 1.2 grams of protein per pound of body weight (about 1.6 to 2.7 grams per kilogram) each day. Competitive athletes, people with intense training schedules, or those aiming to build significant muscle may benefit from the higher end of that range
Estimated 4-6 weeks of supplementation for noticeable improvements in strength and performance, with consistent intake and resistance training. Long-term benefits are best achieved with consistent daily use.
Results vary depending on a host of individual factors including diet and lifestyle, but may include increased strength and stamina, reduced recovery time, and improved overall wellbeing
Clinical Research & 3rd Party Test Results
There are 5 credible reviews and studies related to this product:
Timing and distribution of protein ingestion during prolonged recovery from resistance exercise alters myofibrillar protein synthesis
Whey protein isolate attenuates strength decline after eccentrically-induced muscle damage in healthy individuals
Effect of whey protein supplementation on body composition changes in women: a systematic review and meta-analysis
A systematic review, meta-analysis and meta-regression of the effect of protein supplementation on resistance training-induced gains in muscle mass and strength in healthy adults
Protein supplementation elicits greater gains in maximal oxygen uptake capacity and stimulates lean mass accretion during prolonged endurance training: a double-blind randomized controlled trial
Build Your Stack
Best Seller
{const lazyImages = window.lazyImages = window.lazyImages || []
const el = document.querySelector("#image7492")
if(el && window.lazyImageFn) window.lazyImageFn(el);
else if(el) lazyImages.push(el)
}
4.7
Rated 4.7 out of 5 stars
3,092
{"averageRating":"4.7","reviewCount":3092}
Whey Protein Isolate
Supports lean muscle mass and recovery*
High in leucine to build and repair muscle faster*
No gums, fillers, or artificial sweeteners
£34.50
£46.00
Add to Bag
Whey Protein Isolate
Flavor:
ChocolateVanillaUnflavoredStrawberry
Subscribe & Save 25%
£
34.50
£ 46.00
Out of Stock Protection
10% off future deliveries
Cancel or reschedule anytime
Experience long-term results
Delivery every 1 month
Delivery every 2 months
Delivery every 3 months
One-time Purchase
£ 46.00
£
46.00
£ 46.00
£
46.00
Sorry, We are currently out of stock!
Estimated to be back in stock:
Add to Bag
Notify me when available
View Full Details
.first-hidden {
display: none;
}
Whey Protein Isolate
Flavor:
ChocolateVanillaUnflavoredStrawberry
Subscribe & Save 25%
£
34.50
£ 46.00
Out of Stock Protection
10% off future deliveries
Cancel or reschedule anytime
Experience long-term results
Delivery every 1 month
Delivery every 2 months
Delivery every 3 months
One-time Purchase
£ 46.00
£
46.00
£ 46.00
£
46.00
Sorry, We are currently out of stock!
Estimated to be back in stock:
Add to Bag
Notify me when available
View Full Details
.first-hidden {
display: none;
}
Upgraded Formula
{const lazyImages = window.lazyImages = window.lazyImages || []
const el = document.querySelector("#image9136")
if(el && window.lazyImageFn) window.lazyImageFn(el);
else if(el) lazyImages.push(el)
}
4.9
Rated 4.9 out of 5 stars
3,664
{"averageRating":"4.9","reviewCount":3664}
Creatine 15-Travel Packs
New Signature Spec creatine standard
Ultrafine powder for exceptional mixability
Unrivaled 6-stage testing & certification
£13.50
£18.00
Add to Bag
Creatine 15-Travel Packs
Flavor:
LemonUnflavoredWatermelon
Subscribe & Save 25%
£
13.50
£ 18.00
Out of Stock Protection
10% off future deliveries
Cancel or reschedule anytime
Experience long-term results
Delivery every 1 month
Delivery every 2 months
Delivery every 3 months
One-time Purchase
£ 18.00
£
18.00
£ 18.00
£
18.00
Sorry, We are currently out of stock!
Estimated to be back in stock:
Add to Bag
Notify me when available
View Full Details
.first-hidden {
display: none;
}
Creatine 15-Travel Packs
Flavor:
LemonUnflavoredWatermelon
Subscribe & Save 25%
£
13.50
£ 18.00
Out of Stock Protection
10% off future deliveries
Cancel or reschedule anytime
Experience long-term results
Delivery every 1 month
Delivery every 2 months
Delivery every 3 months
One-time Purchase
£ 18.00
£
18.00
£ 18.00
£
18.00
Sorry, We are currently out of stock!
Estimated to be back in stock:
Add to Bag
Notify me when available
View Full Details
.first-hidden {
display: none;
}
{const lazyImages = window.lazyImages = window.lazyImages || []
const el = document.querySelector("#image5363")
if(el && window.lazyImageFn) window.lazyImageFn(el);
else if(el) lazyImages.push(el)
}
4.8
Rated 4.8 out of 5 stars
1,090
{"averageRating":"4.8","reviewCount":1090}
Collagen Peptides 10-Travel Packs
10g collagen + 5g FORTIGEL® for soft tissue strength
Includes Vitamin C to support collagen synthesis
Supports mobility, skin elasticity, and resilience
£17.25
£23.00
Add to Bag
Collagen Peptides 10-Travel Packs
Subscribe & Save 25%
£
17.25
£ 23.00
Out of Stock Protection
10% off future deliveries
Cancel or reschedule anytime
Experience long-term results
Delivery every 1 month
Delivery every 2 months
Delivery every 3 months
One-time Purchase
£ 23.00
£
23.00
£ 23.00
£
23.00
Sorry, We are currently out of stock!
Estimated to be back in stock:
Add to Bag
Notify me when available
View Full Details
.first-hidden {
display: none;
}
Collagen Peptides 10-Travel Packs
Subscribe & Save 25%
£
17.25
£ 23.00
Out of Stock Protection
10% off future deliveries
Cancel or reschedule anytime
Experience long-term results
Delivery every 1 month
Delivery every 2 months
Delivery every 3 months
One-time Purchase
£ 23.00
£
23.00
£ 23.00
£
23.00
Sorry, We are currently out of stock!
Estimated to be back in stock:
Add to Bag
Notify me when available
View Full Details
.first-hidden {
display: none;
}
{const lazyImages = window.lazyImages = window.lazyImages || []
const el = document.querySelector("#image6204")
if(el && window.lazyImageFn) window.lazyImageFn(el);
else if(el) lazyImages.push(el)
}
4.5
Rated 4.5 out of 5 stars
139
{"averageRating":"4.5","reviewCount":139}
Elite Sleep
A synergestic blend to promote restful sleep
Helps reset circadian rhythm during disrupted sleep cycles
Supports nighttime recovery & reduces next-day grogginess
£26.25
£35.00
Add to Bag
Elite Sleep
Subscribe & Save 25%
£
26.25
£ 35.00
Out of Stock Protection
10% off future deliveries
Cancel or reschedule anytime
Experience long-term results
Delivery every 1 month
Delivery every 2 months
Delivery every 3 months
One-time Purchase
£ 35.00
£
35.00
£ 35.00
£
35.00
Sorry, We are currently out of stock!
Estimated to be back in stock:
Add to Bag
Notify me when available
View Full Details
.first-hidden {
display: none;
}
Elite Sleep
Subscribe & Save 25%
£
26.25
£ 35.00
Out of Stock Protection
10% off future deliveries
Cancel or reschedule anytime
Experience long-term results
Delivery every 1 month
Delivery every 2 months
Delivery every 3 months
One-time Purchase
£ 35.00
£
35.00
£ 35.00
£
35.00
Sorry, We are currently out of stock!
Estimated to be back in stock:
Add to Bag
Notify me when available
View Full Details
.first-hidden {
display: none;
}
.product-carousel .swiper-slide {
flex-shrink: 0;
}
@media (min-width: 768px) {
.product-carousel .swiper-wrapper {
display: flex;
gap: 1rem;
overflow-x: auto;
scrollbar-width: none;
-ms-overflow-style: none;
}
.product-carousel .swiper-wrapper::-webkit-scrollbar {
display: none;
}
}
#shopify-section-template--20282416955575__horizontal_line_Bjwmrg {
padding-top: 0px;
padding-bottom: 10px;
}
@media (max-width: 1023px) {
#shopify-section-template--20282416955575__horizontal_line_Bjwmrg {
padding-top: 0px;
padding-bottom: 20px;
}
}
Frequently Asked Questions
Where is Momentous Whey Protein sourced from?
Momentous Whey Protein Isolate is a whey protein supplement sourced from European dairy farms that follow rigorous standards for animal welfare and product quality. The cows are pasture-raised, grass-fed, and not treated with hormones such as rBST.
This sourcing helps ensure a cleaner, higher-quality protein with lower contaminants and better digestibility, supporting muscle recovery and daily protein intake.
How is Whey Protein Isolate different from conventional whey protein or whey concentrate?
Whey Protein Isolate is a more highly filtered form of whey protein than conventional whey or whey concentrate. This additional filtration removes more fat and lactose, resulting in a product that is over 90% protein, lower in carbohydrates and fats, and easier to digest.
Momentous Whey Protein Isolate is sourced from grass-fed cows, contributing to a cleaner protein source and more sustainable dairy practices.
Is Momentous Grass Fed Whey Protein suitable for specialty diets (e.g., Vegetarian, Vegan, Gluten-Free, Keto, Low Carb or Lactose Intolerance)?
Momentous Grass-Fed Whey Protein Isolate is a dairy-based protein supplement and is not suitable for a vegan diet. However, it can fit into several specialty diets:
Vegetarian: Acceptable for those who include dairy in their diet.
Gluten-Free: Made without gluten-containing ingredients and tested for purity.
Keto and Low Carb: Naturally low in carbohydrates.
Lactose Intolerance: As an isolate, most lactose is removed, and added ProHydrolase® enzyme supports digestion. It is not guaranteed to be completely lactose-free, so individuals with severe intolerance should consult a healthcare professional.
How much protein should I consume daily?
Protein needs vary based on factors like activity level, body composition goals, and overall diet. A general guideline many experts suggest is 0.8 to 1.2 grams of protein per pound of body weight (about 1.6 to 2.7 grams per kilogram) each day. Competitive athletes, people with intense training schedules, or those aiming to build significant muscle may benefit from the higher end of that range.
For personalized guidance, consult a qualified nutrition professional who can account for your unique health status and performance goals.
Is this product Third Party Certified?
Yes, all of our products are third-party tested. But that’s not enough for us. That's why we created The Momentous Standard®: a higher bar for science, sourcing, and verification, backed by independent proof you can trust.
Every finished batch of Whey Protein Isolate is certified through NSF Certified for Sport®, a respected independent program that verifies label accuracy and screens for hundreds of banned substances. If a batch fails to meet these independent standards, it does not ship. We also take transparency a step further by publishing third-party test results via Light Labs on individual product pages and making Certificates of Analysis (COAs) available for every batch.
We earn trust the hard way, by proving quality at every step, on every batch, with no shortcuts.
Is whey protein good for digestion or sensitive stomachs?
Whey Protein Isolate is generally easier to digest than whey concentrates because most of the lactose is removed during processing. Added digestive enzymes further support protein breakdown and absorption. Individuals with severe lactose intolerance should consult a healthcare professional before use.
Who should use whey protein?
Whey protein can be used by a wide range of individuals looking to support muscle recovery, performance, or daily protein intake.
Whey protein is commonly used by:
Athletes and active individuals supporting muscle repair and recovery
Endurance athletes with higher ongoing protein needs
Strength trainers aiming to build or maintain lean muscle mass
Individuals with busy schedules or limited access to whole-food protein sources
Whey protein is best used as a supplement to a balanced diet and regular training routine to help meet daily protein needs.
25 Serving Jar
12 Serving Jar
10 Travel Packs
4.7
Rated 4.7 out of 5 stars
Based on 3,092 reviews
5 Rated out of 5 stars
2.6k
Total 5 star reviews: 2.6k 4 Rated out of 5 stars
259
Total 4 star reviews: 259 3 Rated out of 5 stars
94
Total 3 star reviews: 94 2 Rated out of 5 stars
53
Total 2 star reviews: 53 1 Rated out of 5 stars
54
Total 1 star reviews: 54
93%would recommend these products
Slide 1 selected
Reviews Summary
Generated by AI from 100 most recent customer reviews
Last updated 4 months ago
Customers say this protein powder mixes well with water, milk, and smoothies without clumping. Many appreciate the clean taste and smooth texture, noting it doesn't have the chalky quality of other protein powders. The vanilla and chocolate flavors receive praise for being delicious and not overly sweet, though some find certain flavors too sweet. Users enjoy adding it to coffee, yogurt, and baked goods. Many reviews mention it's gentle on the stomach and doesn't cause digestive issues. The unflavored version is particularly valued for its versatility. Some customers note the price is high but appreciate the quality ingredients.
Read More
Customers Talked About
Taste
Mixability
Quality
Digestibility
Versatility
Filters
Write a Review (Opens in a new window)
3,092 reviews
Sort Most RecentPhotos & VideosMost HelpfulHighest RatingOldestLowest RatingLeast Helpful
JP
Janie P.
Verified Buyer
Product Standouts Taste + Texture
Yesterday
Product Standouts Taste + Texture
Reviewing
Whey Protein Isolate
Rated 5 out of 5 stars
Great flavor with a little sweetness
Love to make my protein coffee with it!
Read MoreRead more about this review
Was this helpful?Yes, this review from Janie P. was helpful. 0 people voted yesNo, this review from Janie P. was not helpful. 0 people voted no
MH
Mike H.
Verified Buyer
Product Standouts Taste + Texture, Trust and Transparency
2 days ago
Product Standouts Taste + Texture, Trust and Transparency
Reviewing
Whey Protein Isolate
Rated 5 out of 5 stars
Best On The Market!
Hands down the cleanest and best protein you can find anywhere! Easily digestible and tastes great - be momentous, Live Momentous!
Read MoreRead more about this review
Was this helpful?Yes, this review from Mike H. was helpful. 0 people voted yesNo, this review from Mike H. was not helpful. 0 people voted no
LN
Lucinda N.
Verified Buyer
2 days ago
Reviewing
Whey Protein Isolate
Rated 5 out of 5 stars
Strawberry Whey
LOVE IT mixed with a scoop of Momentous Unflavored Fiber and either package of Strawberry or Watermelon LMNT electrolytes or a scoop of Momentous Guava Passion Fruit Orange.
Read MoreRead more about this review
Was this helpful?Yes, this review from Lucinda N. was helpful. 0 people voted yesNo, this review from Lucinda N. was not helpful. 0 people voted no
SR
Sherry R.
Verified Buyer
Product Standouts Trust and Transparency, Results, Taste + Texture, Ease of Use
2 days ago
Product Standouts Trust and Transparency, Results, Taste + Texture, Ease of Use
Reviewing
Whey Protein Isolate
Rated 5 out of 5 stars
Love it!!!
I’ve been adding the unflavoured Momentous protein powder to my morning coffee, and it’s become a part of my daily routine. It mixes well and doesn’t alter the taste of my coffee at all, which was very important to me. It’s an easy way to get a good serving of protein first thing in the morning without adding extra flavours or sweetness. I also trust the Momentous brand for its quality, so I feel confident making it part of my everyday routine. Highly recommend if you’re looking for a clean, versatile protein powder!
Read MoreRead more about this review
Was this helpful?Yes, this review from Sherry R. was helpful. 1 person voted yesNo, this review from Sherry R. was not helpful. 0 people voted no
JK
John K.
Verified Buyer
Product Standouts Taste + Texture, Ease of Use, Results, Trust and Transparency
3 days ago
Product Standouts Taste + Texture, Ease of Use, Results, Trust and Transparency
Reviewing
Whey Protein Isolate
Rated 5 out of 5 stars
This is always part of my morning ritual.
This jumpstarts my day every morning. I really enjoy the flavor, it blends easily and packs a big protein punch. Mixed with my morning fruit serving and with some low fat milk, this can easily be a 70 grams of protein powerhouse. Plus, it's sports certified and third party tested, because I don't want to be putting any unnecessary or useless fillers in to my body. Those days are over.
Read MoreRead more about this review
Was this helpful?Yes, this review from John K. was helpful. 0 people voted yesNo, this review from John K. was not helpful. 0 people voted no
Loading...
Loading...
Show More
{"areReviewsGrouped":true,"chatAssistant":{"reviewCount":3092},"media":[{"productId":"shopify-6843810939063","dateCreated":"2026-04-13T23:43:16.361Z","dynamicImageKey":"72adcf9f-ede7-4232-8bc6-db71fceaf77c/dbf33b32-87e1-42c6-a3c4-4a55bddf6a1f","imageAlt":"Two white supplement containers from Momentous brand - one labeled \"Creatine Chews\" for cognitive and muscle performance, and one labeled \"Whey Protein Isolate\" in strawberry flavor, sitting in a cardboard shipping box","imageUrls":{"fullSizeUrl":"https://media-dynamic.okendo.io/images/72adcf9f-ede7-4232-8bc6-db71fceaf77c/dbf33b32-87e1-42c6-a3c4-4a55bddf6a1f.jpg?d=3200x3200","largeUrl":"https://media-dynamic.okendo.io/images/72adcf9f-ede7-4232-8bc6-db71fceaf77c/dbf33b32-87e1-42c6-a3c4-4a55bddf6a1f.jpg?d=1600x1600","thumbnailUrl":"https://media-dynamic.okendo.io/images/72adcf9f-ede7-4232-8bc6-db71fceaf77c/dbf33b32-87e1-42c6-a3c4-4a55bddf6a1f.jpg?d=120x120&crop=center"},"reviewId":"50a7038e-6f21-4365-a5b8-8426b8178c13","streamId":"dbf33b32-87e1-42c6-a3c4-4a55bddf6a1f","type":"image","collectionId":"39f845f9-e3f5-40c7-af6f-3f7cd055978e"},{"productId":"shopify-6843810939063","dateCreated":"2026-03-08T19:28:35.000Z","dynamicImageKey":"72adcf9f-ede7-4232-8bc6-db71fceaf77c/bdc8a60b-c4b4-4050-bf97-165ab937ad33","imageAlt":"A hand holding a white container of Momentous Whey Protein Isolate supplement in chocolate flavor, with product information and branding visible on the label","imageUrls":{"fullSizeUrl":"https://media-dynamic.okendo.io/images/72adcf9f-ede7-4232-8bc6-db71fceaf77c/bdc8a60b-c4b4-4050-bf97-165ab937ad33.jpg?d=3200x3200","largeUrl":"https://media-dynamic.okendo.io/images/72adcf9f-ede7-4232-8bc6-db71fceaf77c/bdc8a60b-c4b4-4050-bf97-165ab937ad33.jpg?d=1600x1600","thumbnailUrl":"https://media-dynamic.okendo.io/images/72adcf9f-ede7-4232-8bc6-db71fceaf77c/bdc8a60b-c4b4-4050-bf97-165ab937ad33.jpg?d=120x120&crop=center"},"reviewId":"66e28cab-5f35-4f3d-b0f3-501b8b98c959","streamId":"bdc8a60b-c4b4-4050-bf97-165ab937ad33","type":"image","collectionId":"39f845f9-e3f5-40c7-af6f-3f7cd055978e"},{"productId":"shopify-8030361419959","dateCreated":"2026-03-02T14:17:24.000Z","dynamicImageKey":"72adcf9f-ede7-4232-8bc6-db71fceaf77c/5f766322-43ec-4c8e-89c2-e2c96a81e2a5","imageAlt":"A kitchen counter with a white protein powder container labeled \"Whey protein Isolate\" next to a tall glass containing a layered coffee drink with milk foam on top","imageUrls":{"fullSizeUrl":"https://media-dynamic.okendo.io/images/72adcf9f-ede7-4232-8bc6-db71fceaf77c/5f766322-43ec-4c8e-89c2-e2c96a81e2a5.jpg?d=3200x3200","largeUrl":"https://media-dynamic.okendo.io/images/72adcf9f-ede7-4232-8bc6-db71fceaf77c/5f766322-43ec-4c8e-89c2-e2c96a81e2a5.jpg?d=1600x1600","thumbnailUrl":"https://media-dynamic.okendo.io/images/72adcf9f-ede7-4232-8bc6-db71fceaf77c/5f766322-43ec-4c8e-89c2-e2c96a81e2a5.jpg?d=120x120&crop=center"},"reviewId":"928bd12b-c819-4924-ba60-daa850ce8159","streamId":"5f766322-43ec-4c8e-89c2-e2c96a81e2a5","type":"image","collectionId":"39f845f9-e3f5-40c7-af6f-3f7cd055978e"}],"productAttributes":[],"questionCount":0,"reviewAggregate":{"dateUpdated":"2026-07-25T19:15:56.216Z","mediaCount":3,"productId":"shopify-7883642765495","productName":"Whey Protein Isolate 10-Travel Packs","ratingAndReviewCount":3092,"ratingAndReviewCountByLevel":{"level1Count":54,"level2Count":53,"level3Count":94,"level4Count":259,"level5Count":2632},"ratingAndReviewValuesTotal":14638,"ratingCount":0,"ratingCountByLevel":{},"ratingValuesTotal":0,"recommendationCount":2891,"replyCount":7,"replyWordsTotal":683,"reviewCount":3092,"reviewCountByLevel":{"level1Count":54,"level2Count":53,"level3Count":94,"level4Count":259,"level5Count":2632},"reviewRatingValuesTotal":14638,"reviewWordsTotal":83611,"subscriberId_productId":"72adcf9f-ede7-4232-8bc6-db71fceaf77c:shopify-7883642765495","subscriberId":"72adcf9f-ede7-4232-8bc6-db71fceaf77c"},"reviews":[{"subscriberId":"72adcf9f-ede7-4232-8bc6-db71fceaf77c","reviewId":"fc1e21c7-771a-4b1b-be7a-afd9ff646c82","subscriberId_productId":"72adcf9f-ede7-4232-8bc6-db71fceaf77c:shopify-6843810939063","productId":"shopify-6843810939063","body":"Love to make my protein coffee with it!","dateCreated":"2026-07-24T18:40:17.537Z","dateUpdated":"2026-07-24T18:40:17.537Z","helpfulCount":0,"isRecommended":true,"languageCode":"en","productAttributes":[{"title":"Product Standouts","type":"multi-value","value":["Taste + Texture"]}],"productHandle":"essential-whey-protein","productImageUrl":"https://cdn.shopify.com/s/files/1/1400/2351/files/Whey_Protein_Vanilla_Ecomm_x280.png?v=1768931843","productName":"Whey Protein Isolate","productUrl":"//www.livemomentous.com/products/essential-whey-protein","productVariantName":"Vanilla","rating":5,"reviewer":{"displayName":"Janie P.","isVerified":true},"isIncentivized":false,"status":"approved","title":"Great flavor with a little sweetness ","unhelpfulCount":0,"variantId":"40138095722679"},{"subscriberId":"72adcf9f-ede7-4232-8bc6-db71fceaf77c","reviewId":"3c057686-646c-4f59-9b42-fa40cc2d3816","subscriberId_productId":"72adcf9f-ede7-4232-8bc6-db71fceaf77c:shopify-6843810939063","productId":"shopify-6843810939063","body":"Hands down the cleanest and best protein you can find anywhere! Easily digestible and tastes great - be momentous, Live Momentous!","dateCreated":"2026-07-23T13:47:04.819Z","dateUpdated":"2026-07-23T13:47:04.819Z","helpfulCount":0,"isRecommended":true,"languageCode":"en","productAttributes":[{"title":"Product Standouts","type":"multi-value","value":["Taste + Texture","Trust and Transparency"]}],"productHandle":"essential-whey-protein","productImageUrl":"https://cdn.shopify.com/s/files/1/1400/2351/files/Whey_Protein_Vanilla_Ecomm_x280.png?v=1768931843","productName":"Whey Protein Isolate","productUrl":"//www.livemomentous.com/products/essential-whey-protein","productVariantName":"Vanilla","rating":5,"reviewer":{"displayName":"Mike H.","isVerified":true},"isIncentivized":false,"status":"approved","title":"Best On The Market!","unhelpfulCount":0,"variantId":"40138095722679"},{"subscriberId":"72adcf9f-ede7-4232-8bc6-db71fceaf77c","reviewId":"f3d25f39-fae1-40c9-9607-04d52143fbe1","subscriberId_productId":"72adcf9f-ede7-4232-8bc6-db71fceaf77c:shopify-6843810939063","productId":"shopify-6843810939063","body":"LOVE IT mixed with a scoop of Momentous Unflavored Fiber and either package of Strawberry or Watermelon LMNT electrolytes or a scoop of Momentous Guava Passion Fruit Orange. ","dateCreated":"2026-07-23T03:24:20.669Z","dateUpdated":"2026-07-23T03:24:20.669Z","helpfulCount":0,"isRecommended":true,"languageCode":"en","productHandle":"essential-whey-protein","productImageUrl":"https://cdn.shopify.com/s/files/1/1400/2351/files/Whey_Protein_Strawberry_V2_Ecomm_x280.png?v=1768931843","productName":"Whey Protein Isolate","productUrl":"//www.livemomentous.com/products/essential-whey-protein","productVariantName":"Strawberry","rating":5,"reviewer":{"displayName":"Lucinda N.","isVerified":true},"isIncentivized":false,"status":"approved","title":"Strawberry Whey","unhelpfulCount":0,"variantId":"45191939096759"},{"subscriberId":"72adcf9f-ede7-4232-8bc6-db71fceaf77c","reviewId":"922ed182-5d76-407c-bf06-a23e59a38ad0","subscriberId_productId":"72adcf9f-ede7-4232-8bc6-db71fceaf77c:shopify-6843810939063","productId":"shopify-6843810939063","body":"I’ve been adding the unflavoured Momentous protein powder to my morning coffee, and it’s become a part of my daily routine. It mixes well and doesn’t alter the taste of my coffee at all, which was very important to me. It’s an easy way to get a good serving of protein first thing in the morning without adding extra flavours or sweetness. I also trust the Momentous brand for its quality, so I feel confident making it part of my everyday routine. Highly recommend if you’re looking for a clean, versatile protein powder!","dateCreated":"2026-07-22T22:50:43.111Z","dateUpdated":"2026-07-22T22:50:43.111Z","helpfulCount":1,"isRecommended":true,"languageCode":"en","productAttributes":[{"title":"Product Standouts","type":"multi-value","value":["Trust and Transparency","Results","Taste + Texture","Ease of Use"]}],"productHandle":"essential-whey-protein","productImageUrl":"https://cdn.shopify.com/s/files/1/1400/2351/files/Whey-Protein_25-Serv_Unflavored_x280.png?v=1782251788","productName":"Whey Protein Isolate","productUrl":"//www.livemomentous.com/products/essential-whey-protein","productVariantName":"Unflavored","rating":5,"reviewer":{"displayName":"Sherry R.","isVerified":true},"isIncentivized":false,"status":"approved","title":"Love it!!! ","unhelpfulCount":0,"variantId":"43277469548727"},{"subscriberId":"72adcf9f-ede7-4232-8bc6-db71fceaf77c","reviewId":"ca3d1e9e-42f1-49b6-b6e0-d5535e0a7d58","subscriberId_productId":"72adcf9f-ede7-4232-8bc6-db71fceaf77c:shopify-6843810939063","productId":"shopify-6843810939063","body":"This jumpstarts my day every morning. I really enjoy the flavor, it blends easily and packs a big protein punch. Mixed with my morning fruit serving and with some low fat milk, this can easily be a 70 grams of protein powerhouse. Plus, it's sports certified and third party tested, because I don't want to be putting any unnecessary or useless fillers in to my body. Those days are over.","dateCreated":"2026-07-22T16:49:23.172Z","dateUpdated":"2026-07-22T16:49:23.172Z","helpfulCount":0,"isRecommended":true,"languageCode":"en","productAttributes":[{"title":"Product Standouts","type":"multi-value","value":["Taste + Texture","Ease of Use","Results","Trust and Transparency"]}],"productHandle":"essential-whey-protein","productImageUrl":"https://cdn.shopify.com/s/files/1/1400/2351/files/Whey_Protein_Vanilla_Ecomm_x280.png?v=1768931843","productName":"Whey Protein Isolate","productUrl":"//www.livemomentous.com/products/essential-whey-protein","productVariantName":"Vanilla","rating":5,"reviewer":{"displayName":"John K.","isVerified":true},"isIncentivized":false,"status":"approved","title":"This is always part of my morning ritual.","unhelpfulCount":0,"variantId":"40138095722679"}],"reviewsKeywords":{"keywordTopics":[{"keywords":[{"name":"taste","occurrences":1043},{"name":"flavor","occurrences":365},{"name":"sweetness","occurrences":84},{"name":"chocolate flavor","occurrences":59},{"name":"vanilla flavor","occurrences":54},{"name":"chocolate","occurrences":42},{"name":"vanilla","occurrences":37},{"name":"aftertaste","occurrences":33},{"name":"strawberry flavor","occurrences":27},{"name":"strawberry","occurrences":18},{"name":"smell","occurrences":18},{"name":"flavors","occurrences":17},{"name":"chai flavor","occurrences":8},{"name":"mint flavor","occurrences":5}],"topic":"Taste"},{"keywords":[{"name":"mixing","occurrences":333},{"name":"texture","occurrences":258},{"name":"mixability","occurrences":202},{"name":"blending","occurrences":116},{"name":"dissolving","occurrences":46},{"name":"consistency","occurrences":38},{"name":"dissolves","occurrences":31},{"name":"drinkability","occurrences":12},{"name":"clumping","occurrences":7},{"name":"solubility","occurrences":6},{"name":"dissolves easily","occurrences":5},{"name":"foaming","occurrences":5}],"topic":"Mixability"},{"keywords":[{"name":"quality","occurrences":193},{"name":"ingredients","occurrences":178},{"name":"protein","occurrences":146},{"name":"clean","occurrences":45},{"name":"protein content","occurrences":31},{"name":"protein quality","occurrences":20},{"name":"whey protein","occurrences":16},{"name":"testing","occurrences":14},{"name":"grass fed","occurrences":12},{"name":"additives","occurrences":12},{"name":"fillers","occurrences":11},{"name":"purity","occurrences":11}],"topic":"Quality"},{"keywords":[{"name":"digestibility","occurrences":95},{"name":"digestion","occurrences":75},{"name":"bloating","occurrences":39},{"name":"tolerance","occurrences":8},{"name":"stomach comfort","occurrences":7},{"name":"stomach","occurrences":10},{"name":"digestible","occurrences":4},{"name":"gentle","occurrences":2},{"name":"stomach sensitivity","occurrences":2}],"topic":"Digestibility"},{"keywords":[{"name":"versatility","occurrences":76},{"name":"unflavored","occurrences":86},{"name":"smoothies","occurrences":46},{"name":"coffee","occurrences":25},{"name":"smoothie","occurrences":19},{"name":"baking","occurrences":8},{"name":"protein coffee","occurrences":8},{"name":"versatile","occurrences":7},{"name":"yogurt","occurrences":7},{"name":"recipes","occurrences":5}],"topic":"Versatility"},{"keywords":[{"name":"convenience","occurrences":50},{"name":"travel","occurrences":27},{"name":"packaging","occurrences":23},{"name":"portability","occurrences":23},{"name":"ease of use","occurrences":12},{"name":"travel packs","occurrences":12},{"name":"container","occurrences":5},{"name":"travel pack","occurrences":5},{"name":"easy to use","occurrences":2}],"topic":"Convenience"},{"keywords":[{"name":"price","occurrences":50},{"name":"energy","occurrences":34},{"name":"recovery","occurrences":27},{"name":"effectiveness","occurrences":18},{"name":"results","occurrences":17},{"name":"workout","occurrences":14},{"name":"filling","occurrences":12},{"name":"satiety","occurrences":11},{"name":"value","occurrences":9},{"name":"performance","occurrences":8}],"topic":"Value"}],"languageCode":"en"},"reviewsNextUrl":"https://api.okendo.io/v1/stores/72adcf9f-ede7-4232-8bc6-db71fceaf77c/products/shopify-7883642765495/reviews?limit=5&orderBy=date%20desc&lastEvaluated=%7B%22reviewId%22%3A%22ca3d1e9e-42f1-49b6-b6e0-d5535e0a7d58%22%2C%22dateCreated%22%3A%222026-07-22T16%3A49%3A23.172Z%22%2C%22subscriberId_collectionId%22%3A%2272adcf9f-ede7-4232-8bc6-db71fceaf77c%3A39f845f9-e3f5-40c7-af6f-3f7cd055978e%22%7D","reviewsSummary":{"body":"Customers say this protein powder mixes well with water, milk, and smoothies without clumping. Many appreciate the clean taste and smooth texture, noting it doesn't have the chalky quality of other protein powders. The vanilla and chocolate flavors receive praise for being delicious and not overly sweet, though some find certain flavors too sweet. Users enjoy adding it to coffee, yogurt, and baked goods. Many reviews mention it's gentle on the stomach and doesn't cause digestive issues. The unflavored version is particularly valued for its versatility. Some customers note the price is high but appreciate the quality ingredients.","contributingReviewCount":100,"dateGenerated":"2026-02-26T00:07:57.908Z","datePublished":"2026-02-26T05:07:04.226Z","languageCode":"en"},"sort":{"defaultSort":"date desc"}}
!(function() { const widgets = document.querySelectorAll('.js-oke-widgetSize'); if (widgets && widgets.length) { if (!window.okeSetWidgetSizes) { window.okeSetWidgetSizes = (allWidgets) => { if (allWidgets) { allWidgets.forEach(widget => { const width = widget.getBoundingClientRect().width; widget.classList.remove('oke-is-small', 'oke-is-medium', 'oke-is-large'); widget.classList.add(width > 960 ? 'oke-is-large' : width > 640 ? 'oke-is-medium' : 'oke-is-small'); }); } }; } if (!window.okeResizeObserver) { let okeMetafieldResizerTimer; window.okeResizeObserver = new ResizeObserver(entries => { if (entries && entries.length) { if (okeMetafieldResizerTimer) { clearTimeout(okeMetafieldResizerTimer); } okeMetafieldResizerTimer = window.setTimeout(() => { window.okeSetWidgetSizes(entries.map(e => e.target)); }, 100); } }); } window.okeSetWidgetSizes(document.querySelectorAll('.js-oke-widgetSize')); widgets.forEach((widget) => { window.okeResizeObserver.observe(widget); }); } })();
@media (min-width: 1024px) {
.oke-w-main {
width: 67%;
margin-left: auto;
}
}
[
{
"@context": "https://schema.org/",
"@type": "Product",
"name": "Whey Protein Isolate 10-Travel Packs",
"url": "https:\/\/www.livemomentous.com\/products\/grass-fed-whey-protein-10-travel-packs",
"image":"https:\/\/www.livemomentous.com\/cdn\/shop\/files\/Updated_Whey_Carton-Chocolate_FEB252025_CC.png?v=1744999739\u0026width=2000","description": "The most efficacious Whey Protein Isolate available, in convenient single-serving travel packs. Protein is a must for everyone, every day when Performance for Life™ is the goal, and our travel packs make that easier than ever, so you can focus more energy on the next goal to hit. 20g of high-quality, grass-fed whey protein per pack supports muscle recovery, performance, and daily nutrition wherever life takes you. NSF Certified for Sport®, our formula is rigorously tested to meet the highest standards of purity and safety.","sku": "850030796653","brand": {
"@type": "Brand",
"name": "Momentous"
},"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.7",
"reviewCount": "3092",
"bestRating": "5",
"worstRating": "1"
},"hasMerchantReturnPolicy": {
"@type": "MerchantReturnPolicy",
"@id": "#momentous-return-policy",
"applicableCountry": "US",
"returnPolicyCategory": "https://schema.org/MerchantReturnFiniteReturnWindow",
"merchantReturnDays": 30,
"merchantReturnLink": "https:\/\/www.livemomentous.com\/policies\/refund-policy",
"returnMethod": "https://schema.org/ReturnByMail",
"returnFees": "https://schema.org/FreeReturn",
"customerRemorseReturnFees": "https://schema.org/FreeReturn",
"returnShippingFeesAmount": {
"@type": "MonetaryAmount",
"value": 0,
"currency": "USD"
},
"refundType": "https://schema.org/FullRefund"
},
"offers": [{
"@type": "Offer","sku": "850030796653","gtin12": "850030796653","itemCondition": "https://schema.org/NewCondition",
"availability": "https://schema.org/InStock",
"price": 26.0,
"priceCurrency": "GBP",
"url": "https:\/\/www.livemomentous.com\/products\/grass-fed-whey-protein-10-travel-packs?variant=43759555313847","priceSpecification": [
{
"@type": "UnitPriceSpecification",
"price": 26.0,
"priceCurrency": "GBP",
"name": "One-Time Purchase"
},
{
"@type": "UnitPriceSpecification",
"price": 19.5,
"priceCurrency": "GBP",
"name": "Delivery every 1 month",
"validForMemberTier": {
"@type": "MemberProgramTier",
"@id": "#momentous-subscriber",
"name": "Subscriber"
}
}
],"hasMerchantReturnPolicy": {
"@type": "MerchantReturnPolicy",
"@id": "#momentous-return-policy"
}
},
{
"@type": "Offer","sku": "850030796660","gtin12": "850030796660","itemCondition": "https://schema.org/NewCondition",
"availability": "https://schema.org/InStock",
"price": 26.0,
"priceCurrency": "GBP",
"url": "https:\/\/www.livemomentous.com\/products\/grass-fed-whey-protein-10-travel-packs?variant=43759555346615","priceSpecification": [
{
"@type": "UnitPriceSpecification",
"price": 26.0,
"priceCurrency": "GBP",
"name": "One-Time Purchase"
},
{
"@type": "UnitPriceSpecification",
"price": 19.5,
"priceCurrency": "GBP",
"name": "Delivery every 1 month",
"validForMemberTier": {
"@type": "MemberProgramTier",
"@id": "#momentous-subscriber",
"name": "Subscriber"
}
}
],"hasMerchantReturnPolicy": {
"@type": "MerchantReturnPolicy",
"@id": "#momentous-return-policy"
}
},
{
"@type": "Offer","sku": "850030796912","gtin12": "850030796912","itemCondition": "https://schema.org/NewCondition",
"availability": "https://schema.org/InStock",
"price": 26.0,
"priceCurrency": "GBP",
"url": "https:\/\/www.livemomentous.com\/products\/grass-fed-whey-protein-10-travel-packs?variant=44828084764855","priceSpecification": [
{
"@type": "UnitPriceSpecification",
"price": 26.0,
"priceCurrency": "GBP",
"name": "One-Time Purchase"
},
{
"@type": "UnitPriceSpecification",
"price": 19.5,
"priceCurrency": "GBP",
"name": "Delivery every 1 month",
"validForMemberTier": {
"@type": "MemberProgramTier",
"@id": "#momentous-subscriber",
"name": "Subscriber"
}
}
],"hasMerchantReturnPolicy": {
"@type": "MerchantReturnPolicy",
"@id": "#momentous-return-policy"
}
}
]
},
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Home",
"item": "https:\/\/www.livemomentous.com"
},
{
"@type": "ListItem",
"position": 2,
"name": "Protein",
"item": "https:\/\/www.livemomentous.com\/collections\/protein"
},
{
"@type": "ListItem",
"position": 3,
"name": "Whey Protein Isolate 10-Travel Packs",
"item": "https:\/\/www.livemomentous.com\/products\/grass-fed-whey-protein-10-travel-packs"
}
]
}
]
.combined-product-button.flavour-disabled {
opacity: 0.5;
position: relative;
cursor: not-allowed;
pointer-events: none;
}
.combined-product-button.flavour-disabled:after {
content: ' ';
position: absolute;
width: 100%;
height: 100%;
top: 0;
left: 0;
background: linear-gradient(to top left, rgba(0,0,0,0) calc(50% - 1px), #CFCFCA, rgba(0,0,0,0) calc(50% + 1px))
}
Sign up for offers, product news, and tips
Support
Account
Help & Contact
Subscriptions
Locations
Press Inquiries
Company
About Us
Careers
Blog
Affiliate Program
Trusted Experts
Wholesale
Corporate Wellness
Resources
Privacy Policy
Terms of Service
Your Privacy Choices
Accessibility
California Prop 65
Save with HSA/FSA
Certificate of Analysis
Patents
Do Not Sell My Information
*These statements have not been evaluated by the food and drug administration. This product is not intended to diagnose, treat, cure, or prevent any disease.
Afghanistan - USD $
Åland Islands - USD $
Algeria - USD $
Andorra - EUR €
Anguilla - USD $
Antigua & Barbuda - USD $
Argentina - USD $
Armenia - USD $
Aruba - USD $
Ascension Island - USD $
Australia - AUD $
Austria - EUR €
Bahamas - USD $
Bahrain - USD $
Bangladesh - USD $
Barbados - USD $
Belgium - EUR €
Belize - USD $
Bermuda - USD $
Bhutan - USD $
Bolivia - USD $
Bosnia & Herzegovina - USD $
Botswana - USD $
Brazil - USD $
British Indian Ocean Territory - USD $
Brunei - USD $
Bulgaria - USD $
Burkina Faso - USD $
Burundi - USD $
Cambodia - USD $
Cameroon - USD $
Canada - CAD $
Cape Verde - USD $
Caribbean Netherlands - USD $
Cayman Islands - USD $
Central African Republic - USD $
Chad - USD $
Chile - USD $
China - USD $
Christmas Island - USD $
Cocos (Keeling) Islands - USD $
Colombia - USD $
Congo - Brazzaville - USD $
Congo - Kinshasa - USD $
Cook Islands - USD $
Costa Rica - USD $
Côte d’Ivoire - USD $
Croatia - USD $
Curaçao - USD $
Cyprus - EUR €
Czechia - USD $
Denmark - USD $
Dominica - USD $
Dominican Republic - USD $
Ecuador - USD $
Egypt - USD $
El Salvador - USD $
Estonia - EUR €
Eswatini - USD $
Ethiopia - USD $
Falkland Islands - USD $
Finland - EUR €
France - EUR €
French Guiana - USD $
French Polynesia - USD $
French Southern Territories - USD $
Gabon - USD $
Gambia - USD $
Germany - EUR €
Ghana - USD $
Greece - EUR €
Guadeloupe - USD $
Guatemala - USD $
Guernsey - USD $
Guinea - USD $
Guyana - USD $
Haiti - USD $
Hong Kong SAR - USD $
Hungary - USD $
Iceland - USD $
India - USD $
Indonesia - USD $
Iraq - USD $
Ireland - EUR €
Isle of Man - USD $
Israel - USD $
Italy - EUR €
Jamaica - USD $
Japan - USD $
Jersey - USD $
Jordan - USD $
Kenya - USD $
Kosovo - EUR €
Kuwait - USD $
Laos - USD $
Latvia - EUR €
Lebanon - USD $
Liberia - USD $
Liechtenstein - USD $
Lithuania - EUR €
Luxembourg - EUR €
Macao SAR - USD $
Madagascar - USD $
Malawi - USD $
Malaysia - USD $
Maldives - USD $
Mali - USD $
Malta - EUR €
Martinique - USD $
Mauritania - USD $
Mauritius - USD $
Mayotte - USD $
Mexico - USD $
Moldova - USD $
Monaco - EUR €
Montenegro - EUR €
Morocco - USD $
Mozambique - USD $
Namibia - USD $
Nauru - USD $
Nepal - USD $
Netherlands - EUR €
New Zealand - USD $
Nicaragua - USD $
Niger - USD $
Nigeria - USD $
Niue - USD $
Norfolk Island - USD $
Norway - USD $
Oman - USD $
Pakistan - USD $
Palestinian Territories - USD $
Panama - USD $
Papua New Guinea - USD $
Paraguay - USD $
Peru - USD $
Philippines - USD $
Pitcairn Islands - USD $
Poland - USD $
Portugal - EUR €
Qatar - USD $
Réunion - USD $
Romania - USD $
Rwanda - USD $
San Marino - EUR €
São Tomé & Príncipe - USD $
Saudi Arabia - USD $
Senegal - USD $
Seychelles - USD $
Sierra Leone - USD $
Singapore - USD $
Slovakia - EUR €
Slovenia - EUR €
Solomon Islands - USD $
Somalia - USD $
South Africa - USD $
South Georgia & South Sandwich Islands - USD $
South Korea - USD $
South Sudan - USD $
Spain - EUR €
Sri Lanka - USD $
St. Helena - USD $
St. Pierre & Miquelon - USD $
Suriname - USD $
Svalbard & Jan Mayen - USD $
Sweden - USD $
Switzerland - USD $
Taiwan - USD $
Tajikistan - USD $
Tanzania - USD $
Thailand - USD $
Togo - USD $
Tokelau - USD $
Trinidad & Tobago - USD $
Tristan da Cunha - USD $
Tunisia - USD $
Türkiye - USD $
Turkmenistan - USD $
Tuvalu - USD $
U.S. Outlying Islands - USD $
Uganda - USD $
Ukraine - USD $
United Arab Emirates - USD $
United Kingdom - GBP £
United States - USD $
Uruguay - USD $
Vatican City - USD $
Venezuela - USD $
Vietnam - USD $
Western Sahara - USD $
Yemen - USD $
Zambia - USD $
Zimbabwe - USD $
United Kingdom - GB £
.country-selector {
position: relative;
}
.country-selector__select {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
opacity: 0;
cursor: pointer;
}
.country-selector__selected-display {
display: flex;
align-items: center;
gap: 8px;
}
document.querySelector('.country-selector__select').addEventListener('change', function() {
const selectedOption = this.options[this.selectedIndex];
const flagSrc = selectedOption.dataset.flagSrc;
const currency = selectedOption.dataset.currency;
// Update the displayed flag and text
const display = this.closest('.country-selector').querySelector('.country-selector__selected-display');
display.querySelector('img').src = flagSrc;
display.querySelector('img').alt = selectedOption.text;
display.querySelector('span').textContent = selectedOption.text;
// Submit the form
this.closest('form').submit();
});
document.addEventListener("DOMContentLoaded", () => {
const managePreferencesBtn = document.querySelector(
'a[aria-label="Your Privacy Choices"]'
);
if (managePreferencesBtn) {
managePreferencesBtn.addEventListener("click", (event) => {
event.preventDefault();
const consent = window[Symbol.for("blotout-consent")];
if (consent && typeof consent.showBanner === "function") {
consent.showBanner();
console.log('Banner Fired')
}
});
}
});
document.addEventListener('DOMContentLoaded', function() {
// Handle newsletter form submission
document.addEventListener('newsletter-submit', function(event) {
const email = event.detail.email;
// Here you can integrate with your email service (Klaviyo, Mailchimp, etc.)
// Example: Send to Klaviyo or your backend
console.log('Newsletter subscription:', email);
// You can add your newsletter integration here
// For example, if using Klaviyo:
// if (window._learnq) {
// window._learnq.push(['identify', { $email: email }]);
// }
});
});
/* Ensure x-cloak works properly */
[x-cloak] {
display: none !important;
}
/* Custom styles for localization form integration */
#footer-new .country-selector {
min-width: 200px;
}
#footer-new .country-selector__selected-display {
padding: 8px 12px;
cursor: pointer;
transition: border-color 0.2s;
}
#footer-new .country-selector__selected-display:hover {
border-color: #f97316;
}
#footer-new .country-selector__selected-display:focus-within {
outline: 2px solid #f97316;
outline-offset: 2px;
}
/* Ensure proper spacing for social icons */
#footer-new [role="list"] {
list-style: none;
padding: 0;
margin: 0;
}
/* Smooth transitions for all interactive elements */
#footer-new a,
#footer-new button {
transition: all 0.2s ease-in-out;
}
/* High contrast mode support */
@media (prefers-contrast: high) {
#footer-new {
border-top: 2px solid currentColor;
}
#footer-new a:focus,
#footer-new button:focus {
outline-width: 3px;
}
}
/* Reduced motion support */
@media (prefers-reduced-motion: reduce) {
#footer-new * {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;
}
}
.footer-new__logo {
width: 300px;
height: 120px;
}
@media (max-width: 768px) {
.footer-new__logo {
width: 200px;
height: 85px;
}
}
.new-footer-klaviyo-form button[type="button"] {
font-size: 0 !important;
}
.new-footer-klaviyo-form button[type="button"]::before {
content: "";
display: inline-block;
width: 19px;
height: 16px;
background-image: url("data:image/svg+xml;utf8,");
background-repeat: no-repeat;
background-size: contain;
margin-right: 6px; /* spacing before text */
vertical-align: middle;
}
function closeKlaviyoOutOfStockModal() {
let modalElem = document.getElementById("klaviyo_modal");
modalElem.style.display = "none";
document.getElementById('back-in-stock').innerHTML = ""
document.body.classList.remove('back-in-stock-opned')
}
function successKlaviyoOutOfStockModal() {
document.getElementById("klaviyo_out_of_stock_form").innerHTML = `
We’ll notify you when the product is back in stock!
You will receive an email when the product is back in stock! `; } function createKlaviyoOutOfStockSubscriptionModal(variantId, productTitle, variantTitle, backDate, image) { let modalElem = document.createElement("div"); modalElem.innerHTML = `
We’ll notify you when the product is back in stock!
${productTitle}
${variantTitle}
Estimated to be back in stock: ${backDate}
Email
Notify me when available
`
modalElem.id = "klaviyo_modal";
modalElem.classList.add("klaviyo_modal");
modalElem.style.display = "block";
return modalElem;
}
function klaviyoFormValidateEmail(email) {
return String(email)
.toLowerCase()
.match(
/^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
);
};
window.openKlaviyoStockAlertSubscriptionForm = function(variantId, productTitle, variantTitle, backDate, image) {
let modalElem = createKlaviyoOutOfStockSubscriptionModal(variantId, productTitle, variantTitle, backDate, image);
document.getElementById('back-in-stock').appendChild(modalElem);
document.body.classList.add('back-in-stock-opned')
document.querySelectorAll('.klaviyo_modal_close_triger').forEach(item => {
item.addEventListener("click", closeKlaviyoOutOfStockModal);
})
document.getElementById("klaviyo_out_of_stock_form_button").addEventListener("click", function(evt) {
evt.stopPropagation();
const email = document.getElementById("Klaviyo_out_of_stock_email").value;
const emailValidation = klaviyoFormValidateEmail(email);
console.log(email, variantId, 'email, variantId');
if (!emailValidation) return;
const data = {
data: {
type: "back-in-stock-subscription",
attributes: {
profile: {
data: {
type: "profile",
attributes: {
email: email
}
}
},
channels: ["EMAIL"]
},
relationships: {
variant: {
data: {
type: "catalog-variant",
id: `$shopify:::$default:::${variantId}`
}
}
}
}
};
fetch("https://a.klaviyo.com/client/back-in-stock-subscriptions/?company_id=MfVp5f", {
method: "POST",
headers: {
"Content-Type": "application/json",
"revision": "2024-06-15"
},
body: JSON.stringify(data)
})
.then(async res => {
if (!res.ok) {
const errorText = await res.text(); // Don't assume JSON here
console.error("Klaviyo API error:", errorText);
throw new Error("Failed to subscribe");
}
// Only try parsing JSON if there's content
const contentType = res.headers.get("content-type") || "";
if (contentType.includes("application/json")) {
const result = await res.json();
console.log("Subscription success:", result);
}
// Run your success handler
successKlaviyoOutOfStockModal();
})
.catch(err => {
console.error("Klaviyo Back-in-Stock Error:", err);
});
});
document.getElementById("Klaviyo_out_of_stock_email").addEventListener("input", function(evt) {
let email = document.getElementById("Klaviyo_out_of_stock_email").value;
let emailValidation = klaviyoFormValidateEmail(email)
if (emailValidation) {
document.getElementById('klaviyo_out_of_stock_form_button').removeAttribute("disabled");
}
else {
document.getElementById("klaviyo_out_of_stock_form_button").setAttribute("disabled", "true");
}
})
}
window.upsell_popup = {
title : null,
subtitle : null,
info : null,
product_handle : "",
product_id : 1234,
product_image : "//www.livemomentous.com/cdn/shopifycloud/storefront/assets/no-image-2048-a2addb12_550x.gif",
product_variants : [
],
base_product_id : 1234
}
if (window.location.pathname == '/a/account/login') {
window.location.replace('/tools/recurring/login/');
}
window.addEventListener('load', function() {
var _learnq = window._learnq || [];
function addedToCart() {
fetch(`${window.location.origin}/cart.js`)
.then(res => res.clone().json().then(data => {
var cart = {
total_price: data.total_price/100,
$value: data.total_price/100,
total_discount: data.total_discount,
original_total_price: data.original_total_price/100,
items: data.items
}
if (item !== 'undefined') {
cart = Object.assign(cart, item)
}
if (klAjax) {
_learnq.push(['track', 'Added to Cart', cart]);
klAjax = false;
}
}))
};
(function (ns, fetch) {
ns.fetch = function() {
const response = fetch.apply(this, arguments);
response.then(res => {
if (`${window.location.origin}/cart/add.js`
.includes(res.url)) {
addedToCart()
}
});
return response
}
}(window, window.fetch));
var klAjax = true;
var atcButtons = document.querySelectorAll("form[action*='/cart/add'] button[type='submit']");
for (var i = 0; i {
window.ShopifyAnalytics.meta.selectedVariantId = '43759555313847';
console.log(
'window.ShopifyAnalytics.meta.selectedVariantId:',
window.ShopifyAnalytics.meta.selectedVariantId
);
}, 5000);
.rebuy-product-actions .subscription-checkbox .slider.round,
.buttons-wrappers button:nth-of-type(2) {
display: none;
}
.siena-iframe {
display: none;
}
@media (max-width: 1366px) {
.siena-iframe {
z-index: 39;
}
.siena-iframe.siena-iframe--bottom-0,
.siena-iframe.siena-iframe--fullscreen{
z-index: 9999999;
}
}
ttd_dom_ready( function() {
if (typeof TTDUniversalPixelApi === 'function') {
var universalPixelApi = new TTDUniversalPixelApi();
universalPixelApi.init("h4w8qq9", ["k1r6x4d"], "https://insight.adsrvr.org/track/up");
}
});
document.querySelectorAll('button[aria-label*="Add to Bag"]').forEach(function(btn) {
var productn = btn.getAttribute('aria-label').slice(11)
btn.addEventListener('click', function(event) {
var conversionPixel = new Image();
conversionPixel.src = "https://insight.adsrvr.org/track/pxl/?adv=h4w8qq9&ct=0:fmme5s8&fmt=3&td1=" + productn + "&ts=" + (new Date()).getTime(); // Adding a unique ID to prevent caching
conversionPixel.height = 1;
conversionPixel.width = 1;
conversionPixel.style.display = "none"; // Hide the pixel
document.body.appendChild(conversionPixel);
});
});
0 ? 'is-visible' : 'is-hidden', 'widget-layout-' + currentLayout()]">
:
1 ? 'lazy' : 'eager'" v-bind:src="itemImage(product, product.selected_variant, '400x400')" v-bind:alt="itemImageAlt(product, product.selected_variant)">
{{ value }}
{{ frequencyLabel(frequency, product.subscription_interval) }}
Quantity
{{ n }}
Sale price
Original price
Price
Powered by Rebuy
0 ? 'is-visible' : 'is-hidden']">
:
0">
{{ variant.title }}
{{ value }}
0">
0 ? 'is-visible' : 'is-hidden', 'widget-layout-' + currentLayout()]">
:
1 ? 'lazy' : 'eager'" v-bind:src="itemImage(product, product.selected_variant, '400x400')" v-bind:alt="itemImageAlt(product, product.selected_variant)">
{{ value }}
Select your purchase method
Out of Stock Protection
{{ frequencyLabel(frequency, product.subscription_interval) }}
One-Time Purchase
Receive Once
Add to Bag
Price
View Product
el.classList.remove('show')); $event.target.closest('.rebuy-product-block').querySelector('.rebuy-product-options').classList.add('show')"
type="button">
Price
Powered by Rebuy
0 ? 'is-visible' : 'is-hidden', 'widget-layout-' + currentLayout()]">
:
1 ? 'lazy' : 'eager'" v-bind:src="itemImage(product, product.selected_variant, '400x400')" v-bind:alt="itemImageAlt(product, product.selected_variant)">
{{ value }}
Select your purchase method
Out of Stock Protection
{{ frequencyLabel(frequency, product.subscription_interval) }}
One-Time Purchase
Receive Once
Add to Bag
Price
View Product
el.classList.remove('show')); $event.target.closest('.rebuy-product-block').querySelector('.rebuy-product-options').classList.add('show')"
type="button">
Price
Powered by Rebuy
Search
Search for products, collections, pages, and articles
.search-form-wrapper {
position: relative;
-webkit-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0);
isolation: isolate;
}
.search-form__input:focus {
border: 1px solid #000;
}
.search-form__results {
width: 480px;
border-radius: 10px;
border: 1px solid #E5E7EB;
background: #FFF;
box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
top: 100%;
}
@media(max-width: 640px) {
.search-form__results {
width: 100%;
border-radius: 10px;
border: none;
margin-top: 0;
}
}
.search-form__results.show {
display: block;
}
.search-result-divider {
border-top: 1px solid var(--grey-100, #e5e5e5);
}
.search-product-img {
width: 5rem;
height: 5rem;
}
@media(max-width: 640px) {
.search-product-img {
width: 70px;
height: 70px;
}
}
.atc-btn[data-loading] {
opacity: 0.6;
pointer-events: none;
}
.atc-btn[data-added] {
background-color: #2d7a3a;
}
.search-form__results.is-loading::after {
content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 2px;
background: linear-gradient(90deg, transparent 0%, var(--grey-900, #171717) 50%, transparent 100%);
background-size: 200% 100%;
animation: search-loading-shimmer 1.2s ease-in-out infinite;
pointer-events: none;
}
.search-form__results-content {
max-height: calc(100vh - 170px);
overflow-y: auto;
-webkit-overflow-scrolling: touch;
overscroll-behavior: contain;
}
.search-result-divider {
position: sticky;
bottom: 0;
background-color: #FFF;
z-index: 10;
}
@keyframes search-loading-shimmer {
0% { background-position: -100% 0; }
100% { background-position: 200% 0; }
}
@media(max-width: 640px) {
.search-product-row {
flex-direction: column;
align-items: flex-start !important;
}
.search-recommended-section {
display: none;
}
}
.query-item-text *,
.query-item-text {
white-space: nowrap;
}
.query-item-text mark {
background-color: #FFFADF;
color: inherit;
border-radius: 2px;
}
.search-form__clear-btn {
background: none;
border: none;
padding: 0;
cursor: pointer;
line-height: 0;
color: var(--grey-400, #999);
}
.search-form__clear-btn:hover svg path {
stroke: var(--grey-700, #404040);
}
(function() {
'use strict';
const SEARCH_ICON = `
`;
// Guard: only define the class once even if snippet is rendered multiple times
if (!window.MomentousPredictiveSearch) {
window.MomentousPredictiveSearch = class {
constructor(wrapper) {
this.wrapper = wrapper;
this.input = wrapper.querySelector('[data-search-input]');
this.resultsContainer = wrapper.querySelector('[data-search-results]');
this.resultsContent = wrapper.querySelector('[data-search-results-content]');
this.form = wrapper.querySelector('.search-form');
this.submitBtn = wrapper.querySelector('[data-search-submit]');
this.clearBtn = wrapper.querySelector('[data-search-clear]');
this.debounceTimer = null;
this.currentRequest = null;
this.currentQuery = '';
this.minQueryLength = 2;
this.debounceDelay = 300;
this.cache = new Map();
this.requestId = 0;
this.init();
}
init() {
this.input.addEventListener('input', (e) => {
this.handleInput(e.target.value);
this.updateClearBtn();
});
if (this.clearBtn) {
this.clearBtn.addEventListener('click', () => {
this.input.value = '';
this.currentQuery = '';
this.hideResults();
this.updateClearBtn();
this.input.focus();
});
}
this.input.addEventListener('focus', () => {
if (this.input.value.length >= this.minQueryLength) {
this.showResults();
}
});
this.input.addEventListener('touchend', (e) => {
e.stopPropagation();
this.input.focus();
});
this.input.addEventListener('touchstart', (e) => {
e.stopPropagation();
}, { passive: true });
const handleOutsideInteraction = (e) => {
if (!this.wrapper.contains(e.target)) {
const sidebarPanel = document.getElementById('ss-panel');
if (sidebarPanel && sidebarPanel.contains(this.wrapper) && sidebarPanel.contains(e.target)) {
return;
}
this.hideResults();
}
};
document.addEventListener('click', handleOutsideInteraction);
document.addEventListener('touchstart', handleOutsideInteraction, { passive: true });
document.addEventListener('keydown', (e) => {
if (e.key === 'Escape') this.hideResults();
});
}
updateClearBtn() {
const show = this.input.value.length >= this.minQueryLength;
if (this.clearBtn) this.clearBtn.classList.toggle('hidden', !show);
if (this.submitBtn) this.submitBtn.classList.toggle('hidden', show);
}
handleInput(query) {
const trimmedQuery = query.trim();
if (this.debounceTimer) clearTimeout(this.debounceTimer);
if (trimmedQuery.length {
this.fetchSearchData(trimmedQuery);
}, this.debounceDelay);
}
async fetchSearchData(query) {
if (this.cache.has(query)) {
const cached = this.cache.get(query);
this.setLoadingState(false);
this.renderResults(cached.results, query, cached.recommended);
return;
}
if (this.currentRequest) {
this.currentRequest.abort();
this.currentRequest = null;
}
const requestId = ++this.requestId;
const controller = new AbortController();
this.currentRequest = controller;
const baseUrl = window.Shopify?.routes?.root || '/';
const apiUrl = `${baseUrl}search/suggest.json?q=${encodeURIComponent(query)}&resources[type]=product,query&resources[limit]=5&resources[limit_scope]=each`;
try {
const response = await fetch(apiUrl, {
signal: controller.signal,
headers: { 'Accept': 'application/json' }
});
if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`);
const data = await response.json();
if (requestId !== this.requestId) return;
this.currentRequest = null;
const results = data.resources?.results || {};
if (this.cache.size > 50) this.cache.clear();
this.cache.set(query, { results, recommended: null });
this.setLoadingState(false);
this.renderResults(results, query, null);
} catch (error) {
if (error.name === 'AbortError') return;
if (requestId !== this.requestId) return;
console.error('Predictive search error:', error);
this.setLoadingState(false);
this.showError();
}
}
async fetchRecommendations(productId) {
try {
const baseUrl = window.Shopify?.routes?.root || '/';
const url = `${baseUrl}recommendations/products.json?product_id=${productId}&limit=6&intent=related`;
const response = await fetch(url, { headers: { 'Accept': 'application/json' } });
if (!response.ok) return [];
const data = await response.json();
return (data.products || [])
.filter(p => {
const tags = (p.tags || []).map(t => t.toLowerCase());
return !tags.includes('searchnise_ignore') && !tags.includes('search_hide');
})
.slice(0, 3);
} catch (e) {
return [];
}
}
async addToCart(variantId, btn) {
btn.setAttribute('data-loading', '');
btn.textContent = 'Adding...';
try {
const response = await fetch('/cart/add.js', {
method: 'POST',
headers: { 'Content-Type': 'application/json', 'Accept': 'application/json' },
body: JSON.stringify({ id: variantId, quantity: 1 })
});
if (!response.ok) throw new Error('Failed to add to cart');
btn.removeAttribute('data-loading');
btn.setAttribute('data-added', '');
btn.textContent = 'Added!';
document.dispatchEvent(new CustomEvent('cart:refresh'));
setTimeout(() => {
btn.removeAttribute('data-added');
btn.textContent = 'Add to Cart';
}, 2000);
} catch (e) {
btn.removeAttribute('data-loading');
btn.textContent = 'Add to Cart';
console.error('ATC error:', e);
}
}
bindAtcButtons() {
this.resultsContent.querySelectorAll('.atc-btn').forEach(btn => {
btn.addEventListener('click', (e) => {
e.preventDefault();
const variantId = btn.dataset.variantId;
if (variantId) this.addToCart(variantId, btn);
});
});
}
renderResults(results, query, preloadedRecommended) {
if (!results || ((!results.products || results.products.length === 0) && (!results.queries || results.queries.length === 0))) {
this.resultsContent.innerHTML = `
No results found for "${this.escapeHtml(query)}"
`;
this.showResults();
return;
}
const products = (results.products || [])
.filter(p => {
const tags = (p.tags || []).map(t => t.toLowerCase());
return !tags.includes('searchnise_ignore') && !tags.includes('search_hide');
})
.slice(0, 4);
const queries = (results.queries || []).slice(0, 4);
const firstProductId = products.length > 0 ? products[0].id : null;
let html = '';
if (products.length > 0) {
html += ``;
products.forEach(product => {
html += this.renderMatchedProduct(product);
});
html += `
`;
}
if (queries.length > 0) {
html += `
Top Searches
- ${SEARCH_ICON}
${queries.map(q => this.renderQueryItem(q)).join('')}
`;
}
const searchUrl = (window.Shopify?.routes?.root || '/') + `search?q=${encodeURIComponent(query)}&type=product`;
html += `
View all results for “${this.escapeHtml(query)}”
`;
if (firstProductId) {
if (preloadedRecommended && preloadedRecommended.length > 0) {
html += this.renderRecommendedSection(preloadedRecommended);
} else if (preloadedRecommended === null) {
html += `
`;
}
}
this.resultsContent.innerHTML = html;
this.showResults();
this.bindAtcButtons();
if (firstProductId && preloadedRecommended === null) {
this.fetchAndPatchRecommendations(firstProductId, query);
}
}
renderMatchedProduct(product) {
const imgUrl = product.featured_image?.url || product.image || '';
const imgSized = imgUrl ? imgUrl.replace(/(\.[a-z]+)(\?.*)?$/i, '_220x220$1$2') : '';
const price = this.formatPrice(product.price, product.price_min, product.price_max);
const isSingleVariant = !product.variants || product.variants.length
${imgSized
? `
`
: `
`
}
${title}
${price ? `${price}
` : ''}
View Product
`;
}
renderSuggestedProduct(product) {
const imgUrl = product.featured_image?.src || product.featured_image?.url || product.images?.[0] || '';
const imgSized = imgUrl ? imgUrl.replace(/(\.[a-z]+)(\?.*)?$/i, '_300x300$1$2') : '';
const productUrl = this.escapeHtml(product.url || `/products/${product.handle}`);
const title = this.escapeHtml(product.title || '');
return `
${imgSized
? `
`
: `
`
}
${title}
`;
}
renderQueryItem(item) {
const queryText = item.styled_text || this.escapeHtml(item.text || '');
const queryUrl = this.escapeHtml(item.url || '#');
return `
${queryText}
`;
}
renderRecommendedSection(recommended) {
return `
Suggested Products
${recommended.map(p => this.renderSuggestedProduct(p)).join('')}
`;
}
async fetchAndPatchRecommendations(productId, query) {
const recommended = await this.fetchRecommendations(productId);
if (query !== this.currentQuery) return;
if (this.cache.has(query)) {
this.cache.get(query).recommended = recommended;
}
const slot = this.resultsContent.querySelector('[data-recommendations-slot]');
if (!slot) return;
if (recommended.length > 0) {
slot.outerHTML = this.renderRecommendedSection(recommended);
} else {
slot.remove();
}
}
setLoadingState(loading) {
this.resultsContainer.classList.toggle('is-loading', loading);
if (loading && !this.resultsContainer.classList.contains('show')) {
this.showResults();
}
}
formatPrice(price, priceMin, priceMax) {
if (!price && !priceMin && !priceMax) return '';
const formatCurrency = (amount) => {
if (window.Shopify?.formatMoney) {
return window.Shopify.formatMoney(amount, window.Shopify.money_format || '$');
}
const currency = window.Shopify?.currency?.active || 'USD';
return new Intl.NumberFormat('en-US', { style: 'currency', currency }).format(amount);
};
if (priceMin && priceMax && priceMin !== priceMax) {
return `${formatCurrency(priceMin)} – ${formatCurrency(priceMax)}`;
}
return formatCurrency(price || priceMin || priceMax);
}
escapeHtml(text) {
if (text == null) return '';
const div = document.createElement('div');
div.textContent = String(text);
return div.innerHTML;
}
showError() {
this.resultsContent.innerHTML = `
Unable to load results. Please try again.
`;
this.showResults();
}
showResults() {
this.resultsContainer.classList.remove('hidden');
this.resultsContainer.classList.add('show');
}
hideResults() {
this.resultsContainer.classList.add('hidden');
this.resultsContainer.classList.remove('show');
}
};
} // end if (!window.MomentousPredictiveSearch)
function initPredictiveSearch() {
document.querySelectorAll('[data-search-form]').forEach(function(wrapper) {
if (!wrapper.__predictiveSearch) {
wrapper.__predictiveSearch = new window.MomentousPredictiveSearch(wrapper);
}
});
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', initPredictiveSearch);
} else {
initPredictiveSearch();
}
})();
Recommended Products
Creatine - 60 Servings
£27.00
View Product
Creatine - 90 Servings
£33.00
View Product
Creatine Chews 150-Count
£39.00
View Product
#ss-backdrop {
display: none;
position: fixed;
inset: 0;
background: rgba(0,0,0,0.45);
z-index: 400;
}
#ss-panel {
display: flex;
flex-direction: column;
position: fixed;
top: 0;
right: 0;
bottom: 0;
width: 440px;
max-width: 100%;
background: #fff;
z-index: 401;
transform: translateX(100%);
transition: transform 0.3s ease;
box-shadow: -4px 0 24px rgba(0,0,0,0.1);
}
#ss-panel.open,
#ss-backdrop.open {
display: flex; /* backdrop uses display:block via override below */
}
#ss-backdrop.open { display: block; }
#ss-panel.open { transform: translateX(0); }
#ss-header {
display: flex;
align-items: center;
justify-content: space-between;
padding: 18px 20px;
border-bottom: 1px solid #e5e5e5;
flex-shrink: 0;
}
#ss-title {
font-size: 17px;
font-weight: 600;
color: #171717;
}
#ss-header button {
background: none;
border: none;
cursor: pointer;
padding: 4px;
color: #555;
line-height: 0;
}
#ss-body {
flex: 1;
min-height: 0;
overflow-y: auto;
padding: 18px 20px;
-webkit-overflow-scrolling: touch;
}
/* Results appear inline, not as a dropdown */
#ss-panel .search-form-wrapper { isolation: auto; }
#ss-panel .search-form__results {
position: static !important;
width: 100% !important;
border: none !important;
box-shadow: none !important;
border-radius: 0 !important;
margin-top: 10px !important;
}
#ss-panel .search-form__results-content {
padding: 0 !important;
}
/* Recommended */
#ss-recommended { margin-top: 20px; }
#ss-recommended-label {
font-size: 11px;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.06em;
color: #757575;
margin: 0 0 12px;
}
.ss-rec-item {
display: flex;
align-items: center;
gap: 12px;
padding: 10px 12px;
border: 1px solid #e5e5e5;
border-radius: 8px;
text-decoration: none;
margin-bottom: 8px;
transition: background 0.15s;
}
.ss-rec-item:hover { background: #fafafa; }
.ss-rec-item img,
.ss-rec-img-placeholder {
width: 72px;
height: 72px;
border-radius: 6px;
object-fit: cover;
flex-shrink: 0;
background: #f0f0f0;
}
.ss-rec-info {
flex: 1;
min-width: 0;
display: flex;
flex-direction: column;
gap: 4px;
}
.ss-rec-title {
font-size: 13px;
font-weight: 600;
color: #171717;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.ss-rec-price {
font-size: 13px;
color: #737373;
}
#ss-recommended.hidden { display: none; }
var _ssScrollY = 0;
function openSearchSidebar() {
_ssScrollY = window.pageYOffset || document.documentElement.scrollTop;
document.body.style.position = 'fixed';
document.body.style.top = '-' + _ssScrollY + 'px';
document.body.style.width = '100%';
document.getElementById('ss-panel').classList.add('open');
document.getElementById('ss-backdrop').classList.add('open');
setTimeout(function() {
var input = document.querySelector('#ss-panel [data-search-input]');
if (input) input.focus();
}, 320);
}
function closeSearchSidebar() {
document.getElementById('ss-panel').classList.remove('open');
document.getElementById('ss-backdrop').classList.remove('open');
document.body.style.position = '';
document.body.style.top = '';
document.body.style.width = '';
window.scrollTo(0, _ssScrollY);
}
// Hide recommended when typing, show when empty
document.addEventListener('DOMContentLoaded', function() {
var input = document.querySelector('#ss-panel [data-search-input]');
var rec = document.getElementById('ss-recommended');
if (!input || !rec) return;
input.addEventListener('input', function() {
if (input.value.trim().length > 0) {
rec.classList.add('hidden');
} else {
rec.classList.remove('hidden');
}
});
// Clear button also restores recommended
var clearBtn = document.querySelector('#ss-panel [data-search-clear]');
if (clearBtn) {
clearBtn.addEventListener('click', function() {
setTimeout(function() { rec.classList.remove('hidden'); }, 20);
});
}
});
document.addEventListener('keydown', function(e) {
if (e.key === 'Escape') closeSearchSidebar();
});
.favicon {display: block;}
(function() {
var initialCartState = [];
var previousCartStateKey = 'previousCartState';
var removedItemsKey = 'removedItemsState';
var previousCartState = [];
try {
previousCartState = JSON.parse(localStorage.getItem(previousCartStateKey) || '[]');
} catch (e) {
previousCartState = [];
}
var removedItems = previousCartState.filter(function(prevItem) {
return !initialCartState.some(function(currItem) {
return currItem.id === prevItem.id;
});
});
if (removedItems.length) {
localStorage.setItem(removedItemsKey, JSON.stringify(removedItems));
}
localStorage.setItem(previousCartStateKey, JSON.stringify(initialCartState));
})();
(function() {
var productId = "7883642765495";
var productTitle = "Whey Protein Isolate 10-Travel Packs";
var productHandle = "grass-fed-whey-protein-10-travel-packs";
var marketId = "21022965943";
var storageKey = 'oe_viewedProducts';
function trackViewedProducts() {
if (!productId) return;
var viewedProducts = [];
try {
viewedProducts = JSON.parse(localStorage.getItem(storageKey) || '[]');
} catch (e) {
viewedProducts = [];
}
viewedProducts = viewedProducts.filter(function(p) { return p.id !== productId; });
viewedProducts.unshift({
id: productId,
title: productTitle,
handle: productHandle,
viewedAt: new Date().toISOString()
});
viewedProducts = viewedProducts.slice(0, 50);
localStorage.setItem(storageKey, JSON.stringify(viewedProducts));
updateCartAttributes();
}
function updateCartAttributes() {
var viewedProducts = [];
try {
viewedProducts = JSON.parse(localStorage.getItem(storageKey) || '[]');
} catch (e) {
return;
}
var productIds = viewedProducts.map(function(p) { return p.id; }).slice(0, 10).join(',');
var cartAttributes = {};
if (productIds) cartAttributes['__upsell_recently_viewed_products'] = productIds;
if (marketId) cartAttributes['__upsell_market_id'] = marketId;
if (Object.keys(cartAttributes).length === 0) return;
fetch(window.Shopify.routes.root + 'cart/update.js', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ attributes: cartAttributes })
}).catch(function() {});
}
trackViewedProducts();
window.addEventListener('popstate', trackViewedProducts);
})();
window['ShopifyForms'] = {
...window['ShopifyForms'],
currentPageType: "product"
};
.recharge-theme {
/* App */
--recharge-app-background: #F9F8F4;
--recharge-app-container: 1200px;
--recharge-app-vertical-padding: 32px;
/* Brand colors */
--recharge-color-brand: #467C99;
/* Tints */
--recharge-color-brand-120: #38637a;
--recharge-color-brand-20: #6b96ad;
--recharge-color-brand-40: #90b0c2;
--recharge-color-brand-60: #b5cbd6;
--recharge-color-brand-75: #d1dee6;
--recharge-color-brand-85: #e3ebf0;
/* Neutral */
--recharge-color-neutral: hsl(201, 35%, 7%);
--recharge-color-neutral-80: hsl(201, 7%, 25%);
--recharge-color-neutral-70: hsl(201, 5%, 35%);
--recharge-color-neutral-40: hsl(201, 3%, 63%);
--recharge-color-neutral-10: hsl(201, 2%, 91%);
/* Links */
--recharge-button-secondary: #467C99;
--recharge-button-secondary-120: #38637a;
--recharge-button-secondary-60: #90b0c2;
/* Images */
--recharge-images-ratio: 1;
/* Cards */
--recharge-cards-background: #FFFFFF;
--recharge-cards-border-color: RGBA(0,0,0,0);
/* Fonts */
--recharge-typography-scale: 16px;
--recharge-typography-size-1: calc(3 * var(--recharge-typography-scale));
--recharge-typography-size-2: calc(2.25 * var(--recharge-typography-scale));
--recharge-typography-size-3: calc(1.625 * var(--recharge-typography-scale));
--recharge-typography-size-4: calc(1.25 * var(--recharge-typography-scale));
--recharge-typography-size-5: calc(1 * var(--recharge-typography-scale));
--recharge-typography-size-6: calc(.875 * var(--recharge-typography-scale));
/** Text **/
--recharge-typography-light: #FFFFFF;
--recharge-typography-primary: var(--recharge-color-neutral);
--recharge-typography-secondary: var(--recharge-color-neutral-70);
/* Corners */
--recharge-corners-radius: 8px;
--recharge-button-border-radius: 8px;
/* Views */
--recharge-views-background: #F9F8F4;
/* Buttons */
--recharge-button-font-family: inherit;
--recharge-button-brand: var(--recharge-color-brand);
--recharge-button-color: #FFFFFF;
} Nutrient Per 100g Per serving Energy 343.51kcal 90kcal Protein 76.34g 20g
Price History
Loading...
${productTitle}
${variantTitle}
Estimated to be back in stock: ${backDate}
Email
Notify me when available
`
modalElem.id = "klaviyo_modal";
modalElem.classList.add("klaviyo_modal");
modalElem.style.display = "block";
return modalElem;
}
function klaviyoFormValidateEmail(email) {
return String(email)
.toLowerCase()
.match(
/^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
);
};
window.openKlaviyoStockAlertSubscriptionForm = function(variantId, productTitle, variantTitle, backDate, image) {
let modalElem = createKlaviyoOutOfStockSubscriptionModal(variantId, productTitle, variantTitle, backDate, image);
document.getElementById('back-in-stock').appendChild(modalElem);
document.body.classList.add('back-in-stock-opned')
document.querySelectorAll('.klaviyo_modal_close_triger').forEach(item => {
item.addEventListener("click", closeKlaviyoOutOfStockModal);
})
document.getElementById("klaviyo_out_of_stock_form_button").addEventListener("click", function(evt) {
evt.stopPropagation();
const email = document.getElementById("Klaviyo_out_of_stock_email").value;
const emailValidation = klaviyoFormValidateEmail(email);
console.log(email, variantId, 'email, variantId');
if (!emailValidation) return;
const data = {
data: {
type: "back-in-stock-subscription",
attributes: {
profile: {
data: {
type: "profile",
attributes: {
email: email
}
}
},
channels: ["EMAIL"]
},
relationships: {
variant: {
data: {
type: "catalog-variant",
id: `$shopify:::$default:::${variantId}`
}
}
}
}
};
fetch("https://a.klaviyo.com/client/back-in-stock-subscriptions/?company_id=MfVp5f", {
method: "POST",
headers: {
"Content-Type": "application/json",
"revision": "2024-06-15"
},
body: JSON.stringify(data)
})
.then(async res => {
if (!res.ok) {
const errorText = await res.text(); // Don't assume JSON here
console.error("Klaviyo API error:", errorText);
throw new Error("Failed to subscribe");
}
// Only try parsing JSON if there's content
const contentType = res.headers.get("content-type") || "";
if (contentType.includes("application/json")) {
const result = await res.json();
console.log("Subscription success:", result);
}
// Run your success handler
successKlaviyoOutOfStockModal();
})
.catch(err => {
console.error("Klaviyo Back-in-Stock Error:", err);
});
});
document.getElementById("Klaviyo_out_of_stock_email").addEventListener("input", function(evt) {
let email = document.getElementById("Klaviyo_out_of_stock_email").value;
let emailValidation = klaviyoFormValidateEmail(email)
if (emailValidation) {
document.getElementById('klaviyo_out_of_stock_form_button').removeAttribute("disabled");
}
else {
document.getElementById("klaviyo_out_of_stock_form_button").setAttribute("disabled", "true");
}
})
}
window.upsell_popup = {
title : null,
subtitle : null,
info : null,
product_handle : "",
product_id : 1234,
product_image : "//www.livemomentous.com/cdn/shopifycloud/storefront/assets/no-image-2048-a2addb12_550x.gif",
product_variants : [
],
base_product_id : 1234
}
if (window.location.pathname == '/a/account/login') {
window.location.replace('/tools/recurring/login/');
}
window.addEventListener('load', function() {
var _learnq = window._learnq || [];
function addedToCart() {
fetch(`${window.location.origin}/cart.js`)
.then(res => res.clone().json().then(data => {
var cart = {
total_price: data.total_price/100,
$value: data.total_price/100,
total_discount: data.total_discount,
original_total_price: data.original_total_price/100,
items: data.items
}
if (item !== 'undefined') {
cart = Object.assign(cart, item)
}
if (klAjax) {
_learnq.push(['track', 'Added to Cart', cart]);
klAjax = false;
}
}))
};
(function (ns, fetch) {
ns.fetch = function() {
const response = fetch.apply(this, arguments);
response.then(res => {
if (`${window.location.origin}/cart/add.js`
.includes(res.url)) {
addedToCart()
}
});
return response
}
}(window, window.fetch));
var klAjax = true;
var atcButtons = document.querySelectorAll("form[action*='/cart/add'] button[type='submit']");
for (var i = 0; i {
window.ShopifyAnalytics.meta.selectedVariantId = '43759555313847';
console.log(
'window.ShopifyAnalytics.meta.selectedVariantId:',
window.ShopifyAnalytics.meta.selectedVariantId
);
}, 5000);
.rebuy-product-actions .subscription-checkbox .slider.round,
.buttons-wrappers button:nth-of-type(2) {
display: none;
}
.siena-iframe {
display: none;
}
@media (max-width: 1366px) {
.siena-iframe {
z-index: 39;
}
.siena-iframe.siena-iframe--bottom-0,
.siena-iframe.siena-iframe--fullscreen{
z-index: 9999999;
}
}
ttd_dom_ready( function() {
if (typeof TTDUniversalPixelApi === 'function') {
var universalPixelApi = new TTDUniversalPixelApi();
universalPixelApi.init("h4w8qq9", ["k1r6x4d"], "https://insight.adsrvr.org/track/up");
}
});
document.querySelectorAll('button[aria-label*="Add to Bag"]').forEach(function(btn) {
var productn = btn.getAttribute('aria-label').slice(11)
btn.addEventListener('click', function(event) {
var conversionPixel = new Image();
conversionPixel.src = "https://insight.adsrvr.org/track/pxl/?adv=h4w8qq9&ct=0:fmme5s8&fmt=3&td1=" + productn + "&ts=" + (new Date()).getTime(); // Adding a unique ID to prevent caching
conversionPixel.height = 1;
conversionPixel.width = 1;
conversionPixel.style.display = "none"; // Hide the pixel
document.body.appendChild(conversionPixel);
});
});
0 ? 'is-visible' : 'is-hidden', 'widget-layout-' + currentLayout()]">
:
1 ? 'lazy' : 'eager'" v-bind:src="itemImage(product, product.selected_variant, '400x400')" v-bind:alt="itemImageAlt(product, product.selected_variant)">
{{ value }}
{{ frequencyLabel(frequency, product.subscription_interval) }}
Quantity
{{ n }}
Sale price
Original price
Price
Powered by Rebuy
0 ? 'is-visible' : 'is-hidden']">
:
0">
{{ variant.title }}
{{ value }}
0">
0 ? 'is-visible' : 'is-hidden', 'widget-layout-' + currentLayout()]">
:
1 ? 'lazy' : 'eager'" v-bind:src="itemImage(product, product.selected_variant, '400x400')" v-bind:alt="itemImageAlt(product, product.selected_variant)">
{{ value }}
Select your purchase method
Out of Stock Protection
{{ frequencyLabel(frequency, product.subscription_interval) }}
One-Time Purchase
Receive Once
Add to Bag
Price
View Product
el.classList.remove('show')); $event.target.closest('.rebuy-product-block').querySelector('.rebuy-product-options').classList.add('show')"
type="button">
Price
Powered by Rebuy
0 ? 'is-visible' : 'is-hidden', 'widget-layout-' + currentLayout()]">
:
1 ? 'lazy' : 'eager'" v-bind:src="itemImage(product, product.selected_variant, '400x400')" v-bind:alt="itemImageAlt(product, product.selected_variant)">
{{ value }}
Select your purchase method
Out of Stock Protection
{{ frequencyLabel(frequency, product.subscription_interval) }}
One-Time Purchase
Receive Once
Add to Bag
Price
View Product
el.classList.remove('show')); $event.target.closest('.rebuy-product-block').querySelector('.rebuy-product-options').classList.add('show')"
type="button">
Price
Powered by Rebuy
Search
Search for products, collections, pages, and articles
.search-form-wrapper {
position: relative;
-webkit-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0);
isolation: isolate;
}
.search-form__input:focus {
border: 1px solid #000;
}
.search-form__results {
width: 480px;
border-radius: 10px;
border: 1px solid #E5E7EB;
background: #FFF;
box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
top: 100%;
}
@media(max-width: 640px) {
.search-form__results {
width: 100%;
border-radius: 10px;
border: none;
margin-top: 0;
}
}
.search-form__results.show {
display: block;
}
.search-result-divider {
border-top: 1px solid var(--grey-100, #e5e5e5);
}
.search-product-img {
width: 5rem;
height: 5rem;
}
@media(max-width: 640px) {
.search-product-img {
width: 70px;
height: 70px;
}
}
.atc-btn[data-loading] {
opacity: 0.6;
pointer-events: none;
}
.atc-btn[data-added] {
background-color: #2d7a3a;
}
.search-form__results.is-loading::after {
content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 2px;
background: linear-gradient(90deg, transparent 0%, var(--grey-900, #171717) 50%, transparent 100%);
background-size: 200% 100%;
animation: search-loading-shimmer 1.2s ease-in-out infinite;
pointer-events: none;
}
.search-form__results-content {
max-height: calc(100vh - 170px);
overflow-y: auto;
-webkit-overflow-scrolling: touch;
overscroll-behavior: contain;
}
.search-result-divider {
position: sticky;
bottom: 0;
background-color: #FFF;
z-index: 10;
}
@keyframes search-loading-shimmer {
0% { background-position: -100% 0; }
100% { background-position: 200% 0; }
}
@media(max-width: 640px) {
.search-product-row {
flex-direction: column;
align-items: flex-start !important;
}
.search-recommended-section {
display: none;
}
}
.query-item-text *,
.query-item-text {
white-space: nowrap;
}
.query-item-text mark {
background-color: #FFFADF;
color: inherit;
border-radius: 2px;
}
.search-form__clear-btn {
background: none;
border: none;
padding: 0;
cursor: pointer;
line-height: 0;
color: var(--grey-400, #999);
}
.search-form__clear-btn:hover svg path {
stroke: var(--grey-700, #404040);
}
(function() {
'use strict';
const SEARCH_ICON = `
`;
// Guard: only define the class once even if snippet is rendered multiple times
if (!window.MomentousPredictiveSearch) {
window.MomentousPredictiveSearch = class {
constructor(wrapper) {
this.wrapper = wrapper;
this.input = wrapper.querySelector('[data-search-input]');
this.resultsContainer = wrapper.querySelector('[data-search-results]');
this.resultsContent = wrapper.querySelector('[data-search-results-content]');
this.form = wrapper.querySelector('.search-form');
this.submitBtn = wrapper.querySelector('[data-search-submit]');
this.clearBtn = wrapper.querySelector('[data-search-clear]');
this.debounceTimer = null;
this.currentRequest = null;
this.currentQuery = '';
this.minQueryLength = 2;
this.debounceDelay = 300;
this.cache = new Map();
this.requestId = 0;
this.init();
}
init() {
this.input.addEventListener('input', (e) => {
this.handleInput(e.target.value);
this.updateClearBtn();
});
if (this.clearBtn) {
this.clearBtn.addEventListener('click', () => {
this.input.value = '';
this.currentQuery = '';
this.hideResults();
this.updateClearBtn();
this.input.focus();
});
}
this.input.addEventListener('focus', () => {
if (this.input.value.length >= this.minQueryLength) {
this.showResults();
}
});
this.input.addEventListener('touchend', (e) => {
e.stopPropagation();
this.input.focus();
});
this.input.addEventListener('touchstart', (e) => {
e.stopPropagation();
}, { passive: true });
const handleOutsideInteraction = (e) => {
if (!this.wrapper.contains(e.target)) {
const sidebarPanel = document.getElementById('ss-panel');
if (sidebarPanel && sidebarPanel.contains(this.wrapper) && sidebarPanel.contains(e.target)) {
return;
}
this.hideResults();
}
};
document.addEventListener('click', handleOutsideInteraction);
document.addEventListener('touchstart', handleOutsideInteraction, { passive: true });
document.addEventListener('keydown', (e) => {
if (e.key === 'Escape') this.hideResults();
});
}
updateClearBtn() {
const show = this.input.value.length >= this.minQueryLength;
if (this.clearBtn) this.clearBtn.classList.toggle('hidden', !show);
if (this.submitBtn) this.submitBtn.classList.toggle('hidden', show);
}
handleInput(query) {
const trimmedQuery = query.trim();
if (this.debounceTimer) clearTimeout(this.debounceTimer);
if (trimmedQuery.length {
this.fetchSearchData(trimmedQuery);
}, this.debounceDelay);
}
async fetchSearchData(query) {
if (this.cache.has(query)) {
const cached = this.cache.get(query);
this.setLoadingState(false);
this.renderResults(cached.results, query, cached.recommended);
return;
}
if (this.currentRequest) {
this.currentRequest.abort();
this.currentRequest = null;
}
const requestId = ++this.requestId;
const controller = new AbortController();
this.currentRequest = controller;
const baseUrl = window.Shopify?.routes?.root || '/';
const apiUrl = `${baseUrl}search/suggest.json?q=${encodeURIComponent(query)}&resources[type]=product,query&resources[limit]=5&resources[limit_scope]=each`;
try {
const response = await fetch(apiUrl, {
signal: controller.signal,
headers: { 'Accept': 'application/json' }
});
if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`);
const data = await response.json();
if (requestId !== this.requestId) return;
this.currentRequest = null;
const results = data.resources?.results || {};
if (this.cache.size > 50) this.cache.clear();
this.cache.set(query, { results, recommended: null });
this.setLoadingState(false);
this.renderResults(results, query, null);
} catch (error) {
if (error.name === 'AbortError') return;
if (requestId !== this.requestId) return;
console.error('Predictive search error:', error);
this.setLoadingState(false);
this.showError();
}
}
async fetchRecommendations(productId) {
try {
const baseUrl = window.Shopify?.routes?.root || '/';
const url = `${baseUrl}recommendations/products.json?product_id=${productId}&limit=6&intent=related`;
const response = await fetch(url, { headers: { 'Accept': 'application/json' } });
if (!response.ok) return [];
const data = await response.json();
return (data.products || [])
.filter(p => {
const tags = (p.tags || []).map(t => t.toLowerCase());
return !tags.includes('searchnise_ignore') && !tags.includes('search_hide');
})
.slice(0, 3);
} catch (e) {
return [];
}
}
async addToCart(variantId, btn) {
btn.setAttribute('data-loading', '');
btn.textContent = 'Adding...';
try {
const response = await fetch('/cart/add.js', {
method: 'POST',
headers: { 'Content-Type': 'application/json', 'Accept': 'application/json' },
body: JSON.stringify({ id: variantId, quantity: 1 })
});
if (!response.ok) throw new Error('Failed to add to cart');
btn.removeAttribute('data-loading');
btn.setAttribute('data-added', '');
btn.textContent = 'Added!';
document.dispatchEvent(new CustomEvent('cart:refresh'));
setTimeout(() => {
btn.removeAttribute('data-added');
btn.textContent = 'Add to Cart';
}, 2000);
} catch (e) {
btn.removeAttribute('data-loading');
btn.textContent = 'Add to Cart';
console.error('ATC error:', e);
}
}
bindAtcButtons() {
this.resultsContent.querySelectorAll('.atc-btn').forEach(btn => {
btn.addEventListener('click', (e) => {
e.preventDefault();
const variantId = btn.dataset.variantId;
if (variantId) this.addToCart(variantId, btn);
});
});
}
renderResults(results, query, preloadedRecommended) {
if (!results || ((!results.products || results.products.length === 0) && (!results.queries || results.queries.length === 0))) {
this.resultsContent.innerHTML = `
No results found for "${this.escapeHtml(query)}"
`;
this.showResults();
return;
}
const products = (results.products || [])
.filter(p => {
const tags = (p.tags || []).map(t => t.toLowerCase());
return !tags.includes('searchnise_ignore') && !tags.includes('search_hide');
})
.slice(0, 4);
const queries = (results.queries || []).slice(0, 4);
const firstProductId = products.length > 0 ? products[0].id : null;
let html = '';
if (products.length > 0) {
html += ``;
products.forEach(product => {
html += this.renderMatchedProduct(product);
});
html += `
`;
}
if (queries.length > 0) {
html += `
Top Searches
- ${SEARCH_ICON}
${queries.map(q => this.renderQueryItem(q)).join('')}
`;
}
const searchUrl = (window.Shopify?.routes?.root || '/') + `search?q=${encodeURIComponent(query)}&type=product`;
html += `
View all results for “${this.escapeHtml(query)}”
`;
if (firstProductId) {
if (preloadedRecommended && preloadedRecommended.length > 0) {
html += this.renderRecommendedSection(preloadedRecommended);
} else if (preloadedRecommended === null) {
html += `
`;
}
}
this.resultsContent.innerHTML = html;
this.showResults();
this.bindAtcButtons();
if (firstProductId && preloadedRecommended === null) {
this.fetchAndPatchRecommendations(firstProductId, query);
}
}
renderMatchedProduct(product) {
const imgUrl = product.featured_image?.url || product.image || '';
const imgSized = imgUrl ? imgUrl.replace(/(\.[a-z]+)(\?.*)?$/i, '_220x220$1$2') : '';
const price = this.formatPrice(product.price, product.price_min, product.price_max);
const isSingleVariant = !product.variants || product.variants.length
${imgSized
? `
`
: `
`
}
${title}
${price ? `${price}
` : ''}
View Product
`;
}
renderSuggestedProduct(product) {
const imgUrl = product.featured_image?.src || product.featured_image?.url || product.images?.[0] || '';
const imgSized = imgUrl ? imgUrl.replace(/(\.[a-z]+)(\?.*)?$/i, '_300x300$1$2') : '';
const productUrl = this.escapeHtml(product.url || `/products/${product.handle}`);
const title = this.escapeHtml(product.title || '');
return `
${imgSized
? `
`
: `
`
}
${title}
`;
}
renderQueryItem(item) {
const queryText = item.styled_text || this.escapeHtml(item.text || '');
const queryUrl = this.escapeHtml(item.url || '#');
return `
${queryText}
`;
}
renderRecommendedSection(recommended) {
return `
Suggested Products
${recommended.map(p => this.renderSuggestedProduct(p)).join('')}
`;
}
async fetchAndPatchRecommendations(productId, query) {
const recommended = await this.fetchRecommendations(productId);
if (query !== this.currentQuery) return;
if (this.cache.has(query)) {
this.cache.get(query).recommended = recommended;
}
const slot = this.resultsContent.querySelector('[data-recommendations-slot]');
if (!slot) return;
if (recommended.length > 0) {
slot.outerHTML = this.renderRecommendedSection(recommended);
} else {
slot.remove();
}
}
setLoadingState(loading) {
this.resultsContainer.classList.toggle('is-loading', loading);
if (loading && !this.resultsContainer.classList.contains('show')) {
this.showResults();
}
}
formatPrice(price, priceMin, priceMax) {
if (!price && !priceMin && !priceMax) return '';
const formatCurrency = (amount) => {
if (window.Shopify?.formatMoney) {
return window.Shopify.formatMoney(amount, window.Shopify.money_format || '$');
}
const currency = window.Shopify?.currency?.active || 'USD';
return new Intl.NumberFormat('en-US', { style: 'currency', currency }).format(amount);
};
if (priceMin && priceMax && priceMin !== priceMax) {
return `${formatCurrency(priceMin)} – ${formatCurrency(priceMax)}`;
}
return formatCurrency(price || priceMin || priceMax);
}
escapeHtml(text) {
if (text == null) return '';
const div = document.createElement('div');
div.textContent = String(text);
return div.innerHTML;
}
showError() {
this.resultsContent.innerHTML = `
Unable to load results. Please try again.
`;
this.showResults();
}
showResults() {
this.resultsContainer.classList.remove('hidden');
this.resultsContainer.classList.add('show');
}
hideResults() {
this.resultsContainer.classList.add('hidden');
this.resultsContainer.classList.remove('show');
}
};
} // end if (!window.MomentousPredictiveSearch)
function initPredictiveSearch() {
document.querySelectorAll('[data-search-form]').forEach(function(wrapper) {
if (!wrapper.__predictiveSearch) {
wrapper.__predictiveSearch = new window.MomentousPredictiveSearch(wrapper);
}
});
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', initPredictiveSearch);
} else {
initPredictiveSearch();
}
})();
Recommended Products
Creatine - 60 Servings
£27.00
View Product
Creatine - 90 Servings
£33.00
View Product
Creatine Chews 150-Count
£39.00
View Product
#ss-backdrop {
display: none;
position: fixed;
inset: 0;
background: rgba(0,0,0,0.45);
z-index: 400;
}
#ss-panel {
display: flex;
flex-direction: column;
position: fixed;
top: 0;
right: 0;
bottom: 0;
width: 440px;
max-width: 100%;
background: #fff;
z-index: 401;
transform: translateX(100%);
transition: transform 0.3s ease;
box-shadow: -4px 0 24px rgba(0,0,0,0.1);
}
#ss-panel.open,
#ss-backdrop.open {
display: flex; /* backdrop uses display:block via override below */
}
#ss-backdrop.open { display: block; }
#ss-panel.open { transform: translateX(0); }
#ss-header {
display: flex;
align-items: center;
justify-content: space-between;
padding: 18px 20px;
border-bottom: 1px solid #e5e5e5;
flex-shrink: 0;
}
#ss-title {
font-size: 17px;
font-weight: 600;
color: #171717;
}
#ss-header button {
background: none;
border: none;
cursor: pointer;
padding: 4px;
color: #555;
line-height: 0;
}
#ss-body {
flex: 1;
min-height: 0;
overflow-y: auto;
padding: 18px 20px;
-webkit-overflow-scrolling: touch;
}
/* Results appear inline, not as a dropdown */
#ss-panel .search-form-wrapper { isolation: auto; }
#ss-panel .search-form__results {
position: static !important;
width: 100% !important;
border: none !important;
box-shadow: none !important;
border-radius: 0 !important;
margin-top: 10px !important;
}
#ss-panel .search-form__results-content {
padding: 0 !important;
}
/* Recommended */
#ss-recommended { margin-top: 20px; }
#ss-recommended-label {
font-size: 11px;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.06em;
color: #757575;
margin: 0 0 12px;
}
.ss-rec-item {
display: flex;
align-items: center;
gap: 12px;
padding: 10px 12px;
border: 1px solid #e5e5e5;
border-radius: 8px;
text-decoration: none;
margin-bottom: 8px;
transition: background 0.15s;
}
.ss-rec-item:hover { background: #fafafa; }
.ss-rec-item img,
.ss-rec-img-placeholder {
width: 72px;
height: 72px;
border-radius: 6px;
object-fit: cover;
flex-shrink: 0;
background: #f0f0f0;
}
.ss-rec-info {
flex: 1;
min-width: 0;
display: flex;
flex-direction: column;
gap: 4px;
}
.ss-rec-title {
font-size: 13px;
font-weight: 600;
color: #171717;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.ss-rec-price {
font-size: 13px;
color: #737373;
}
#ss-recommended.hidden { display: none; }
var _ssScrollY = 0;
function openSearchSidebar() {
_ssScrollY = window.pageYOffset || document.documentElement.scrollTop;
document.body.style.position = 'fixed';
document.body.style.top = '-' + _ssScrollY + 'px';
document.body.style.width = '100%';
document.getElementById('ss-panel').classList.add('open');
document.getElementById('ss-backdrop').classList.add('open');
setTimeout(function() {
var input = document.querySelector('#ss-panel [data-search-input]');
if (input) input.focus();
}, 320);
}
function closeSearchSidebar() {
document.getElementById('ss-panel').classList.remove('open');
document.getElementById('ss-backdrop').classList.remove('open');
document.body.style.position = '';
document.body.style.top = '';
document.body.style.width = '';
window.scrollTo(0, _ssScrollY);
}
// Hide recommended when typing, show when empty
document.addEventListener('DOMContentLoaded', function() {
var input = document.querySelector('#ss-panel [data-search-input]');
var rec = document.getElementById('ss-recommended');
if (!input || !rec) return;
input.addEventListener('input', function() {
if (input.value.trim().length > 0) {
rec.classList.add('hidden');
} else {
rec.classList.remove('hidden');
}
});
// Clear button also restores recommended
var clearBtn = document.querySelector('#ss-panel [data-search-clear]');
if (clearBtn) {
clearBtn.addEventListener('click', function() {
setTimeout(function() { rec.classList.remove('hidden'); }, 20);
});
}
});
document.addEventListener('keydown', function(e) {
if (e.key === 'Escape') closeSearchSidebar();
});
.favicon {display: block;}
(function() {
var initialCartState = [];
var previousCartStateKey = 'previousCartState';
var removedItemsKey = 'removedItemsState';
var previousCartState = [];
try {
previousCartState = JSON.parse(localStorage.getItem(previousCartStateKey) || '[]');
} catch (e) {
previousCartState = [];
}
var removedItems = previousCartState.filter(function(prevItem) {
return !initialCartState.some(function(currItem) {
return currItem.id === prevItem.id;
});
});
if (removedItems.length) {
localStorage.setItem(removedItemsKey, JSON.stringify(removedItems));
}
localStorage.setItem(previousCartStateKey, JSON.stringify(initialCartState));
})();
(function() {
var productId = "7883642765495";
var productTitle = "Whey Protein Isolate 10-Travel Packs";
var productHandle = "grass-fed-whey-protein-10-travel-packs";
var marketId = "21022965943";
var storageKey = 'oe_viewedProducts';
function trackViewedProducts() {
if (!productId) return;
var viewedProducts = [];
try {
viewedProducts = JSON.parse(localStorage.getItem(storageKey) || '[]');
} catch (e) {
viewedProducts = [];
}
viewedProducts = viewedProducts.filter(function(p) { return p.id !== productId; });
viewedProducts.unshift({
id: productId,
title: productTitle,
handle: productHandle,
viewedAt: new Date().toISOString()
});
viewedProducts = viewedProducts.slice(0, 50);
localStorage.setItem(storageKey, JSON.stringify(viewedProducts));
updateCartAttributes();
}
function updateCartAttributes() {
var viewedProducts = [];
try {
viewedProducts = JSON.parse(localStorage.getItem(storageKey) || '[]');
} catch (e) {
return;
}
var productIds = viewedProducts.map(function(p) { return p.id; }).slice(0, 10).join(',');
var cartAttributes = {};
if (productIds) cartAttributes['__upsell_recently_viewed_products'] = productIds;
if (marketId) cartAttributes['__upsell_market_id'] = marketId;
if (Object.keys(cartAttributes).length === 0) return;
fetch(window.Shopify.routes.root + 'cart/update.js', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ attributes: cartAttributes })
}).catch(function() {});
}
trackViewedProducts();
window.addEventListener('popstate', trackViewedProducts);
})();
window['ShopifyForms'] = {
...window['ShopifyForms'],
currentPageType: "product"
};
.recharge-theme {
/* App */
--recharge-app-background: #F9F8F4;
--recharge-app-container: 1200px;
--recharge-app-vertical-padding: 32px;
/* Brand colors */
--recharge-color-brand: #467C99;
/* Tints */
--recharge-color-brand-120: #38637a;
--recharge-color-brand-20: #6b96ad;
--recharge-color-brand-40: #90b0c2;
--recharge-color-brand-60: #b5cbd6;
--recharge-color-brand-75: #d1dee6;
--recharge-color-brand-85: #e3ebf0;
/* Neutral */
--recharge-color-neutral: hsl(201, 35%, 7%);
--recharge-color-neutral-80: hsl(201, 7%, 25%);
--recharge-color-neutral-70: hsl(201, 5%, 35%);
--recharge-color-neutral-40: hsl(201, 3%, 63%);
--recharge-color-neutral-10: hsl(201, 2%, 91%);
/* Links */
--recharge-button-secondary: #467C99;
--recharge-button-secondary-120: #38637a;
--recharge-button-secondary-60: #90b0c2;
/* Images */
--recharge-images-ratio: 1;
/* Cards */
--recharge-cards-background: #FFFFFF;
--recharge-cards-border-color: RGBA(0,0,0,0);
/* Fonts */
--recharge-typography-scale: 16px;
--recharge-typography-size-1: calc(3 * var(--recharge-typography-scale));
--recharge-typography-size-2: calc(2.25 * var(--recharge-typography-scale));
--recharge-typography-size-3: calc(1.625 * var(--recharge-typography-scale));
--recharge-typography-size-4: calc(1.25 * var(--recharge-typography-scale));
--recharge-typography-size-5: calc(1 * var(--recharge-typography-scale));
--recharge-typography-size-6: calc(.875 * var(--recharge-typography-scale));
/** Text **/
--recharge-typography-light: #FFFFFF;
--recharge-typography-primary: var(--recharge-color-neutral);
--recharge-typography-secondary: var(--recharge-color-neutral-70);
/* Corners */
--recharge-corners-radius: 8px;
--recharge-button-border-radius: 8px;
/* Views */
--recharge-views-background: #F9F8F4;
/* Buttons */
--recharge-button-font-family: inherit;
--recharge-button-brand: var(--recharge-color-brand);
--recharge-button-color: #FFFFFF;
} Nutrient Per 100g Per serving Energy 343.51kcal 90kcal Protein 76.34g 20g
Price History
Loading...
1 ? 'lazy' : 'eager'" v-bind:src="itemImage(product, product.selected_variant, '400x400')" v-bind:alt="itemImageAlt(product, product.selected_variant)">
{{ value }}
{{ frequencyLabel(frequency, product.subscription_interval) }}
Quantity
{{ n }}
Sale price
Original price
Price
Powered by Rebuy
0 ? 'is-visible' : 'is-hidden']">
:
0">
{{ variant.title }}
{{ value }}
0">
0 ? 'is-visible' : 'is-hidden', 'widget-layout-' + currentLayout()]">
:
1 ? 'lazy' : 'eager'" v-bind:src="itemImage(product, product.selected_variant, '400x400')" v-bind:alt="itemImageAlt(product, product.selected_variant)">
{{ value }}
Select your purchase method
Out of Stock Protection
{{ frequencyLabel(frequency, product.subscription_interval) }}
One-Time Purchase
Receive Once
Add to Bag
Price
View Product
el.classList.remove('show')); $event.target.closest('.rebuy-product-block').querySelector('.rebuy-product-options').classList.add('show')"
type="button">
Price
Powered by Rebuy
0 ? 'is-visible' : 'is-hidden', 'widget-layout-' + currentLayout()]">
:
1 ? 'lazy' : 'eager'" v-bind:src="itemImage(product, product.selected_variant, '400x400')" v-bind:alt="itemImageAlt(product, product.selected_variant)">
{{ value }}
Select your purchase method
Out of Stock Protection
{{ frequencyLabel(frequency, product.subscription_interval) }}
One-Time Purchase
Receive Once
Add to Bag
Price
View Product
el.classList.remove('show')); $event.target.closest('.rebuy-product-block').querySelector('.rebuy-product-options').classList.add('show')"
type="button">
Price
Powered by Rebuy
Search
Search for products, collections, pages, and articles
.search-form-wrapper {
position: relative;
-webkit-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0);
isolation: isolate;
}
.search-form__input:focus {
border: 1px solid #000;
}
.search-form__results {
width: 480px;
border-radius: 10px;
border: 1px solid #E5E7EB;
background: #FFF;
box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
top: 100%;
}
@media(max-width: 640px) {
.search-form__results {
width: 100%;
border-radius: 10px;
border: none;
margin-top: 0;
}
}
.search-form__results.show {
display: block;
}
.search-result-divider {
border-top: 1px solid var(--grey-100, #e5e5e5);
}
.search-product-img {
width: 5rem;
height: 5rem;
}
@media(max-width: 640px) {
.search-product-img {
width: 70px;
height: 70px;
}
}
.atc-btn[data-loading] {
opacity: 0.6;
pointer-events: none;
}
.atc-btn[data-added] {
background-color: #2d7a3a;
}
.search-form__results.is-loading::after {
content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 2px;
background: linear-gradient(90deg, transparent 0%, var(--grey-900, #171717) 50%, transparent 100%);
background-size: 200% 100%;
animation: search-loading-shimmer 1.2s ease-in-out infinite;
pointer-events: none;
}
.search-form__results-content {
max-height: calc(100vh - 170px);
overflow-y: auto;
-webkit-overflow-scrolling: touch;
overscroll-behavior: contain;
}
.search-result-divider {
position: sticky;
bottom: 0;
background-color: #FFF;
z-index: 10;
}
@keyframes search-loading-shimmer {
0% { background-position: -100% 0; }
100% { background-position: 200% 0; }
}
@media(max-width: 640px) {
.search-product-row {
flex-direction: column;
align-items: flex-start !important;
}
.search-recommended-section {
display: none;
}
}
.query-item-text *,
.query-item-text {
white-space: nowrap;
}
.query-item-text mark {
background-color: #FFFADF;
color: inherit;
border-radius: 2px;
}
.search-form__clear-btn {
background: none;
border: none;
padding: 0;
cursor: pointer;
line-height: 0;
color: var(--grey-400, #999);
}
.search-form__clear-btn:hover svg path {
stroke: var(--grey-700, #404040);
}
(function() {
'use strict';
const SEARCH_ICON = `
`;
// Guard: only define the class once even if snippet is rendered multiple times
if (!window.MomentousPredictiveSearch) {
window.MomentousPredictiveSearch = class {
constructor(wrapper) {
this.wrapper = wrapper;
this.input = wrapper.querySelector('[data-search-input]');
this.resultsContainer = wrapper.querySelector('[data-search-results]');
this.resultsContent = wrapper.querySelector('[data-search-results-content]');
this.form = wrapper.querySelector('.search-form');
this.submitBtn = wrapper.querySelector('[data-search-submit]');
this.clearBtn = wrapper.querySelector('[data-search-clear]');
this.debounceTimer = null;
this.currentRequest = null;
this.currentQuery = '';
this.minQueryLength = 2;
this.debounceDelay = 300;
this.cache = new Map();
this.requestId = 0;
this.init();
}
init() {
this.input.addEventListener('input', (e) => {
this.handleInput(e.target.value);
this.updateClearBtn();
});
if (this.clearBtn) {
this.clearBtn.addEventListener('click', () => {
this.input.value = '';
this.currentQuery = '';
this.hideResults();
this.updateClearBtn();
this.input.focus();
});
}
this.input.addEventListener('focus', () => {
if (this.input.value.length >= this.minQueryLength) {
this.showResults();
}
});
this.input.addEventListener('touchend', (e) => {
e.stopPropagation();
this.input.focus();
});
this.input.addEventListener('touchstart', (e) => {
e.stopPropagation();
}, { passive: true });
const handleOutsideInteraction = (e) => {
if (!this.wrapper.contains(e.target)) {
const sidebarPanel = document.getElementById('ss-panel');
if (sidebarPanel && sidebarPanel.contains(this.wrapper) && sidebarPanel.contains(e.target)) {
return;
}
this.hideResults();
}
};
document.addEventListener('click', handleOutsideInteraction);
document.addEventListener('touchstart', handleOutsideInteraction, { passive: true });
document.addEventListener('keydown', (e) => {
if (e.key === 'Escape') this.hideResults();
});
}
updateClearBtn() {
const show = this.input.value.length >= this.minQueryLength;
if (this.clearBtn) this.clearBtn.classList.toggle('hidden', !show);
if (this.submitBtn) this.submitBtn.classList.toggle('hidden', show);
}
handleInput(query) {
const trimmedQuery = query.trim();
if (this.debounceTimer) clearTimeout(this.debounceTimer);
if (trimmedQuery.length {
this.fetchSearchData(trimmedQuery);
}, this.debounceDelay);
}
async fetchSearchData(query) {
if (this.cache.has(query)) {
const cached = this.cache.get(query);
this.setLoadingState(false);
this.renderResults(cached.results, query, cached.recommended);
return;
}
if (this.currentRequest) {
this.currentRequest.abort();
this.currentRequest = null;
}
const requestId = ++this.requestId;
const controller = new AbortController();
this.currentRequest = controller;
const baseUrl = window.Shopify?.routes?.root || '/';
const apiUrl = `${baseUrl}search/suggest.json?q=${encodeURIComponent(query)}&resources[type]=product,query&resources[limit]=5&resources[limit_scope]=each`;
try {
const response = await fetch(apiUrl, {
signal: controller.signal,
headers: { 'Accept': 'application/json' }
});
if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`);
const data = await response.json();
if (requestId !== this.requestId) return;
this.currentRequest = null;
const results = data.resources?.results || {};
if (this.cache.size > 50) this.cache.clear();
this.cache.set(query, { results, recommended: null });
this.setLoadingState(false);
this.renderResults(results, query, null);
} catch (error) {
if (error.name === 'AbortError') return;
if (requestId !== this.requestId) return;
console.error('Predictive search error:', error);
this.setLoadingState(false);
this.showError();
}
}
async fetchRecommendations(productId) {
try {
const baseUrl = window.Shopify?.routes?.root || '/';
const url = `${baseUrl}recommendations/products.json?product_id=${productId}&limit=6&intent=related`;
const response = await fetch(url, { headers: { 'Accept': 'application/json' } });
if (!response.ok) return [];
const data = await response.json();
return (data.products || [])
.filter(p => {
const tags = (p.tags || []).map(t => t.toLowerCase());
return !tags.includes('searchnise_ignore') && !tags.includes('search_hide');
})
.slice(0, 3);
} catch (e) {
return [];
}
}
async addToCart(variantId, btn) {
btn.setAttribute('data-loading', '');
btn.textContent = 'Adding...';
try {
const response = await fetch('/cart/add.js', {
method: 'POST',
headers: { 'Content-Type': 'application/json', 'Accept': 'application/json' },
body: JSON.stringify({ id: variantId, quantity: 1 })
});
if (!response.ok) throw new Error('Failed to add to cart');
btn.removeAttribute('data-loading');
btn.setAttribute('data-added', '');
btn.textContent = 'Added!';
document.dispatchEvent(new CustomEvent('cart:refresh'));
setTimeout(() => {
btn.removeAttribute('data-added');
btn.textContent = 'Add to Cart';
}, 2000);
} catch (e) {
btn.removeAttribute('data-loading');
btn.textContent = 'Add to Cart';
console.error('ATC error:', e);
}
}
bindAtcButtons() {
this.resultsContent.querySelectorAll('.atc-btn').forEach(btn => {
btn.addEventListener('click', (e) => {
e.preventDefault();
const variantId = btn.dataset.variantId;
if (variantId) this.addToCart(variantId, btn);
});
});
}
renderResults(results, query, preloadedRecommended) {
if (!results || ((!results.products || results.products.length === 0) && (!results.queries || results.queries.length === 0))) {
this.resultsContent.innerHTML = `
No results found for "${this.escapeHtml(query)}"
`;
this.showResults();
return;
}
const products = (results.products || [])
.filter(p => {
const tags = (p.tags || []).map(t => t.toLowerCase());
return !tags.includes('searchnise_ignore') && !tags.includes('search_hide');
})
.slice(0, 4);
const queries = (results.queries || []).slice(0, 4);
const firstProductId = products.length > 0 ? products[0].id : null;
let html = '';
if (products.length > 0) {
html += ``;
products.forEach(product => {
html += this.renderMatchedProduct(product);
});
html += `
`;
}
if (queries.length > 0) {
html += `
Top Searches
- ${SEARCH_ICON}
${queries.map(q => this.renderQueryItem(q)).join('')}
`;
}
const searchUrl = (window.Shopify?.routes?.root || '/') + `search?q=${encodeURIComponent(query)}&type=product`;
html += `
View all results for “${this.escapeHtml(query)}”
`;
if (firstProductId) {
if (preloadedRecommended && preloadedRecommended.length > 0) {
html += this.renderRecommendedSection(preloadedRecommended);
} else if (preloadedRecommended === null) {
html += `
`;
}
}
this.resultsContent.innerHTML = html;
this.showResults();
this.bindAtcButtons();
if (firstProductId && preloadedRecommended === null) {
this.fetchAndPatchRecommendations(firstProductId, query);
}
}
renderMatchedProduct(product) {
const imgUrl = product.featured_image?.url || product.image || '';
const imgSized = imgUrl ? imgUrl.replace(/(\.[a-z]+)(\?.*)?$/i, '_220x220$1$2') : '';
const price = this.formatPrice(product.price, product.price_min, product.price_max);
const isSingleVariant = !product.variants || product.variants.length
${imgSized
? `
`
: `
`
}
${title}
${price ? `${price}
` : ''}
View Product
`;
}
renderSuggestedProduct(product) {
const imgUrl = product.featured_image?.src || product.featured_image?.url || product.images?.[0] || '';
const imgSized = imgUrl ? imgUrl.replace(/(\.[a-z]+)(\?.*)?$/i, '_300x300$1$2') : '';
const productUrl = this.escapeHtml(product.url || `/products/${product.handle}`);
const title = this.escapeHtml(product.title || '');
return `
${imgSized
? `
`
: `
`
}
${title}
`;
}
renderQueryItem(item) {
const queryText = item.styled_text || this.escapeHtml(item.text || '');
const queryUrl = this.escapeHtml(item.url || '#');
return `
${queryText}
`;
}
renderRecommendedSection(recommended) {
return `
Suggested Products
${recommended.map(p => this.renderSuggestedProduct(p)).join('')}
`;
}
async fetchAndPatchRecommendations(productId, query) {
const recommended = await this.fetchRecommendations(productId);
if (query !== this.currentQuery) return;
if (this.cache.has(query)) {
this.cache.get(query).recommended = recommended;
}
const slot = this.resultsContent.querySelector('[data-recommendations-slot]');
if (!slot) return;
if (recommended.length > 0) {
slot.outerHTML = this.renderRecommendedSection(recommended);
} else {
slot.remove();
}
}
setLoadingState(loading) {
this.resultsContainer.classList.toggle('is-loading', loading);
if (loading && !this.resultsContainer.classList.contains('show')) {
this.showResults();
}
}
formatPrice(price, priceMin, priceMax) {
if (!price && !priceMin && !priceMax) return '';
const formatCurrency = (amount) => {
if (window.Shopify?.formatMoney) {
return window.Shopify.formatMoney(amount, window.Shopify.money_format || '$');
}
const currency = window.Shopify?.currency?.active || 'USD';
return new Intl.NumberFormat('en-US', { style: 'currency', currency }).format(amount);
};
if (priceMin && priceMax && priceMin !== priceMax) {
return `${formatCurrency(priceMin)} – ${formatCurrency(priceMax)}`;
}
return formatCurrency(price || priceMin || priceMax);
}
escapeHtml(text) {
if (text == null) return '';
const div = document.createElement('div');
div.textContent = String(text);
return div.innerHTML;
}
showError() {
this.resultsContent.innerHTML = `
Unable to load results. Please try again.
`;
this.showResults();
}
showResults() {
this.resultsContainer.classList.remove('hidden');
this.resultsContainer.classList.add('show');
}
hideResults() {
this.resultsContainer.classList.add('hidden');
this.resultsContainer.classList.remove('show');
}
};
} // end if (!window.MomentousPredictiveSearch)
function initPredictiveSearch() {
document.querySelectorAll('[data-search-form]').forEach(function(wrapper) {
if (!wrapper.__predictiveSearch) {
wrapper.__predictiveSearch = new window.MomentousPredictiveSearch(wrapper);
}
});
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', initPredictiveSearch);
} else {
initPredictiveSearch();
}
})();
Recommended Products
Creatine - 60 Servings
£27.00
View Product
Creatine - 90 Servings
£33.00
View Product
Creatine Chews 150-Count
£39.00
View Product
#ss-backdrop {
display: none;
position: fixed;
inset: 0;
background: rgba(0,0,0,0.45);
z-index: 400;
}
#ss-panel {
display: flex;
flex-direction: column;
position: fixed;
top: 0;
right: 0;
bottom: 0;
width: 440px;
max-width: 100%;
background: #fff;
z-index: 401;
transform: translateX(100%);
transition: transform 0.3s ease;
box-shadow: -4px 0 24px rgba(0,0,0,0.1);
}
#ss-panel.open,
#ss-backdrop.open {
display: flex; /* backdrop uses display:block via override below */
}
#ss-backdrop.open { display: block; }
#ss-panel.open { transform: translateX(0); }
#ss-header {
display: flex;
align-items: center;
justify-content: space-between;
padding: 18px 20px;
border-bottom: 1px solid #e5e5e5;
flex-shrink: 0;
}
#ss-title {
font-size: 17px;
font-weight: 600;
color: #171717;
}
#ss-header button {
background: none;
border: none;
cursor: pointer;
padding: 4px;
color: #555;
line-height: 0;
}
#ss-body {
flex: 1;
min-height: 0;
overflow-y: auto;
padding: 18px 20px;
-webkit-overflow-scrolling: touch;
}
/* Results appear inline, not as a dropdown */
#ss-panel .search-form-wrapper { isolation: auto; }
#ss-panel .search-form__results {
position: static !important;
width: 100% !important;
border: none !important;
box-shadow: none !important;
border-radius: 0 !important;
margin-top: 10px !important;
}
#ss-panel .search-form__results-content {
padding: 0 !important;
}
/* Recommended */
#ss-recommended { margin-top: 20px; }
#ss-recommended-label {
font-size: 11px;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.06em;
color: #757575;
margin: 0 0 12px;
}
.ss-rec-item {
display: flex;
align-items: center;
gap: 12px;
padding: 10px 12px;
border: 1px solid #e5e5e5;
border-radius: 8px;
text-decoration: none;
margin-bottom: 8px;
transition: background 0.15s;
}
.ss-rec-item:hover { background: #fafafa; }
.ss-rec-item img,
.ss-rec-img-placeholder {
width: 72px;
height: 72px;
border-radius: 6px;
object-fit: cover;
flex-shrink: 0;
background: #f0f0f0;
}
.ss-rec-info {
flex: 1;
min-width: 0;
display: flex;
flex-direction: column;
gap: 4px;
}
.ss-rec-title {
font-size: 13px;
font-weight: 600;
color: #171717;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.ss-rec-price {
font-size: 13px;
color: #737373;
}
#ss-recommended.hidden { display: none; }
var _ssScrollY = 0;
function openSearchSidebar() {
_ssScrollY = window.pageYOffset || document.documentElement.scrollTop;
document.body.style.position = 'fixed';
document.body.style.top = '-' + _ssScrollY + 'px';
document.body.style.width = '100%';
document.getElementById('ss-panel').classList.add('open');
document.getElementById('ss-backdrop').classList.add('open');
setTimeout(function() {
var input = document.querySelector('#ss-panel [data-search-input]');
if (input) input.focus();
}, 320);
}
function closeSearchSidebar() {
document.getElementById('ss-panel').classList.remove('open');
document.getElementById('ss-backdrop').classList.remove('open');
document.body.style.position = '';
document.body.style.top = '';
document.body.style.width = '';
window.scrollTo(0, _ssScrollY);
}
// Hide recommended when typing, show when empty
document.addEventListener('DOMContentLoaded', function() {
var input = document.querySelector('#ss-panel [data-search-input]');
var rec = document.getElementById('ss-recommended');
if (!input || !rec) return;
input.addEventListener('input', function() {
if (input.value.trim().length > 0) {
rec.classList.add('hidden');
} else {
rec.classList.remove('hidden');
}
});
// Clear button also restores recommended
var clearBtn = document.querySelector('#ss-panel [data-search-clear]');
if (clearBtn) {
clearBtn.addEventListener('click', function() {
setTimeout(function() { rec.classList.remove('hidden'); }, 20);
});
}
});
document.addEventListener('keydown', function(e) {
if (e.key === 'Escape') closeSearchSidebar();
});
.favicon {display: block;}
(function() {
var initialCartState = [];
var previousCartStateKey = 'previousCartState';
var removedItemsKey = 'removedItemsState';
var previousCartState = [];
try {
previousCartState = JSON.parse(localStorage.getItem(previousCartStateKey) || '[]');
} catch (e) {
previousCartState = [];
}
var removedItems = previousCartState.filter(function(prevItem) {
return !initialCartState.some(function(currItem) {
return currItem.id === prevItem.id;
});
});
if (removedItems.length) {
localStorage.setItem(removedItemsKey, JSON.stringify(removedItems));
}
localStorage.setItem(previousCartStateKey, JSON.stringify(initialCartState));
})();
(function() {
var productId = "7883642765495";
var productTitle = "Whey Protein Isolate 10-Travel Packs";
var productHandle = "grass-fed-whey-protein-10-travel-packs";
var marketId = "21022965943";
var storageKey = 'oe_viewedProducts';
function trackViewedProducts() {
if (!productId) return;
var viewedProducts = [];
try {
viewedProducts = JSON.parse(localStorage.getItem(storageKey) || '[]');
} catch (e) {
viewedProducts = [];
}
viewedProducts = viewedProducts.filter(function(p) { return p.id !== productId; });
viewedProducts.unshift({
id: productId,
title: productTitle,
handle: productHandle,
viewedAt: new Date().toISOString()
});
viewedProducts = viewedProducts.slice(0, 50);
localStorage.setItem(storageKey, JSON.stringify(viewedProducts));
updateCartAttributes();
}
function updateCartAttributes() {
var viewedProducts = [];
try {
viewedProducts = JSON.parse(localStorage.getItem(storageKey) || '[]');
} catch (e) {
return;
}
var productIds = viewedProducts.map(function(p) { return p.id; }).slice(0, 10).join(',');
var cartAttributes = {};
if (productIds) cartAttributes['__upsell_recently_viewed_products'] = productIds;
if (marketId) cartAttributes['__upsell_market_id'] = marketId;
if (Object.keys(cartAttributes).length === 0) return;
fetch(window.Shopify.routes.root + 'cart/update.js', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ attributes: cartAttributes })
}).catch(function() {});
}
trackViewedProducts();
window.addEventListener('popstate', trackViewedProducts);
})();
window['ShopifyForms'] = {
...window['ShopifyForms'],
currentPageType: "product"
};
.recharge-theme {
/* App */
--recharge-app-background: #F9F8F4;
--recharge-app-container: 1200px;
--recharge-app-vertical-padding: 32px;
/* Brand colors */
--recharge-color-brand: #467C99;
/* Tints */
--recharge-color-brand-120: #38637a;
--recharge-color-brand-20: #6b96ad;
--recharge-color-brand-40: #90b0c2;
--recharge-color-brand-60: #b5cbd6;
--recharge-color-brand-75: #d1dee6;
--recharge-color-brand-85: #e3ebf0;
/* Neutral */
--recharge-color-neutral: hsl(201, 35%, 7%);
--recharge-color-neutral-80: hsl(201, 7%, 25%);
--recharge-color-neutral-70: hsl(201, 5%, 35%);
--recharge-color-neutral-40: hsl(201, 3%, 63%);
--recharge-color-neutral-10: hsl(201, 2%, 91%);
/* Links */
--recharge-button-secondary: #467C99;
--recharge-button-secondary-120: #38637a;
--recharge-button-secondary-60: #90b0c2;
/* Images */
--recharge-images-ratio: 1;
/* Cards */
--recharge-cards-background: #FFFFFF;
--recharge-cards-border-color: RGBA(0,0,0,0);
/* Fonts */
--recharge-typography-scale: 16px;
--recharge-typography-size-1: calc(3 * var(--recharge-typography-scale));
--recharge-typography-size-2: calc(2.25 * var(--recharge-typography-scale));
--recharge-typography-size-3: calc(1.625 * var(--recharge-typography-scale));
--recharge-typography-size-4: calc(1.25 * var(--recharge-typography-scale));
--recharge-typography-size-5: calc(1 * var(--recharge-typography-scale));
--recharge-typography-size-6: calc(.875 * var(--recharge-typography-scale));
/** Text **/
--recharge-typography-light: #FFFFFF;
--recharge-typography-primary: var(--recharge-color-neutral);
--recharge-typography-secondary: var(--recharge-color-neutral-70);
/* Corners */
--recharge-corners-radius: 8px;
--recharge-button-border-radius: 8px;
/* Views */
--recharge-views-background: #F9F8F4;
/* Buttons */
--recharge-button-font-family: inherit;
--recharge-button-brand: var(--recharge-color-brand);
--recharge-button-color: #FFFFFF;
} Nutrient Per 100g Per serving Energy 343.51kcal 90kcal Protein 76.34g 20g
Price History
Loading...
0">
{{ variant.title }}
{{ value }}
0">
0 ? 'is-visible' : 'is-hidden', 'widget-layout-' + currentLayout()]">
:
1 ? 'lazy' : 'eager'" v-bind:src="itemImage(product, product.selected_variant, '400x400')" v-bind:alt="itemImageAlt(product, product.selected_variant)">
{{ value }}
Select your purchase method
Out of Stock Protection
{{ frequencyLabel(frequency, product.subscription_interval) }}
One-Time Purchase
Receive Once
Add to Bag
Price
View Product
el.classList.remove('show')); $event.target.closest('.rebuy-product-block').querySelector('.rebuy-product-options').classList.add('show')"
type="button">
Price
Powered by Rebuy
0 ? 'is-visible' : 'is-hidden', 'widget-layout-' + currentLayout()]">
:
1 ? 'lazy' : 'eager'" v-bind:src="itemImage(product, product.selected_variant, '400x400')" v-bind:alt="itemImageAlt(product, product.selected_variant)">
{{ value }}
Select your purchase method
Out of Stock Protection
{{ frequencyLabel(frequency, product.subscription_interval) }}
One-Time Purchase
Receive Once
Add to Bag
Price
View Product
el.classList.remove('show')); $event.target.closest('.rebuy-product-block').querySelector('.rebuy-product-options').classList.add('show')"
type="button">
Price
Powered by Rebuy
Search
Search for products, collections, pages, and articles
.search-form-wrapper {
position: relative;
-webkit-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0);
isolation: isolate;
}
.search-form__input:focus {
border: 1px solid #000;
}
.search-form__results {
width: 480px;
border-radius: 10px;
border: 1px solid #E5E7EB;
background: #FFF;
box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
top: 100%;
}
@media(max-width: 640px) {
.search-form__results {
width: 100%;
border-radius: 10px;
border: none;
margin-top: 0;
}
}
.search-form__results.show {
display: block;
}
.search-result-divider {
border-top: 1px solid var(--grey-100, #e5e5e5);
}
.search-product-img {
width: 5rem;
height: 5rem;
}
@media(max-width: 640px) {
.search-product-img {
width: 70px;
height: 70px;
}
}
.atc-btn[data-loading] {
opacity: 0.6;
pointer-events: none;
}
.atc-btn[data-added] {
background-color: #2d7a3a;
}
.search-form__results.is-loading::after {
content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 2px;
background: linear-gradient(90deg, transparent 0%, var(--grey-900, #171717) 50%, transparent 100%);
background-size: 200% 100%;
animation: search-loading-shimmer 1.2s ease-in-out infinite;
pointer-events: none;
}
.search-form__results-content {
max-height: calc(100vh - 170px);
overflow-y: auto;
-webkit-overflow-scrolling: touch;
overscroll-behavior: contain;
}
.search-result-divider {
position: sticky;
bottom: 0;
background-color: #FFF;
z-index: 10;
}
@keyframes search-loading-shimmer {
0% { background-position: -100% 0; }
100% { background-position: 200% 0; }
}
@media(max-width: 640px) {
.search-product-row {
flex-direction: column;
align-items: flex-start !important;
}
.search-recommended-section {
display: none;
}
}
.query-item-text *,
.query-item-text {
white-space: nowrap;
}
.query-item-text mark {
background-color: #FFFADF;
color: inherit;
border-radius: 2px;
}
.search-form__clear-btn {
background: none;
border: none;
padding: 0;
cursor: pointer;
line-height: 0;
color: var(--grey-400, #999);
}
.search-form__clear-btn:hover svg path {
stroke: var(--grey-700, #404040);
}
(function() {
'use strict';
const SEARCH_ICON = `
`;
// Guard: only define the class once even if snippet is rendered multiple times
if (!window.MomentousPredictiveSearch) {
window.MomentousPredictiveSearch = class {
constructor(wrapper) {
this.wrapper = wrapper;
this.input = wrapper.querySelector('[data-search-input]');
this.resultsContainer = wrapper.querySelector('[data-search-results]');
this.resultsContent = wrapper.querySelector('[data-search-results-content]');
this.form = wrapper.querySelector('.search-form');
this.submitBtn = wrapper.querySelector('[data-search-submit]');
this.clearBtn = wrapper.querySelector('[data-search-clear]');
this.debounceTimer = null;
this.currentRequest = null;
this.currentQuery = '';
this.minQueryLength = 2;
this.debounceDelay = 300;
this.cache = new Map();
this.requestId = 0;
this.init();
}
init() {
this.input.addEventListener('input', (e) => {
this.handleInput(e.target.value);
this.updateClearBtn();
});
if (this.clearBtn) {
this.clearBtn.addEventListener('click', () => {
this.input.value = '';
this.currentQuery = '';
this.hideResults();
this.updateClearBtn();
this.input.focus();
});
}
this.input.addEventListener('focus', () => {
if (this.input.value.length >= this.minQueryLength) {
this.showResults();
}
});
this.input.addEventListener('touchend', (e) => {
e.stopPropagation();
this.input.focus();
});
this.input.addEventListener('touchstart', (e) => {
e.stopPropagation();
}, { passive: true });
const handleOutsideInteraction = (e) => {
if (!this.wrapper.contains(e.target)) {
const sidebarPanel = document.getElementById('ss-panel');
if (sidebarPanel && sidebarPanel.contains(this.wrapper) && sidebarPanel.contains(e.target)) {
return;
}
this.hideResults();
}
};
document.addEventListener('click', handleOutsideInteraction);
document.addEventListener('touchstart', handleOutsideInteraction, { passive: true });
document.addEventListener('keydown', (e) => {
if (e.key === 'Escape') this.hideResults();
});
}
updateClearBtn() {
const show = this.input.value.length >= this.minQueryLength;
if (this.clearBtn) this.clearBtn.classList.toggle('hidden', !show);
if (this.submitBtn) this.submitBtn.classList.toggle('hidden', show);
}
handleInput(query) {
const trimmedQuery = query.trim();
if (this.debounceTimer) clearTimeout(this.debounceTimer);
if (trimmedQuery.length {
this.fetchSearchData(trimmedQuery);
}, this.debounceDelay);
}
async fetchSearchData(query) {
if (this.cache.has(query)) {
const cached = this.cache.get(query);
this.setLoadingState(false);
this.renderResults(cached.results, query, cached.recommended);
return;
}
if (this.currentRequest) {
this.currentRequest.abort();
this.currentRequest = null;
}
const requestId = ++this.requestId;
const controller = new AbortController();
this.currentRequest = controller;
const baseUrl = window.Shopify?.routes?.root || '/';
const apiUrl = `${baseUrl}search/suggest.json?q=${encodeURIComponent(query)}&resources[type]=product,query&resources[limit]=5&resources[limit_scope]=each`;
try {
const response = await fetch(apiUrl, {
signal: controller.signal,
headers: { 'Accept': 'application/json' }
});
if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`);
const data = await response.json();
if (requestId !== this.requestId) return;
this.currentRequest = null;
const results = data.resources?.results || {};
if (this.cache.size > 50) this.cache.clear();
this.cache.set(query, { results, recommended: null });
this.setLoadingState(false);
this.renderResults(results, query, null);
} catch (error) {
if (error.name === 'AbortError') return;
if (requestId !== this.requestId) return;
console.error('Predictive search error:', error);
this.setLoadingState(false);
this.showError();
}
}
async fetchRecommendations(productId) {
try {
const baseUrl = window.Shopify?.routes?.root || '/';
const url = `${baseUrl}recommendations/products.json?product_id=${productId}&limit=6&intent=related`;
const response = await fetch(url, { headers: { 'Accept': 'application/json' } });
if (!response.ok) return [];
const data = await response.json();
return (data.products || [])
.filter(p => {
const tags = (p.tags || []).map(t => t.toLowerCase());
return !tags.includes('searchnise_ignore') && !tags.includes('search_hide');
})
.slice(0, 3);
} catch (e) {
return [];
}
}
async addToCart(variantId, btn) {
btn.setAttribute('data-loading', '');
btn.textContent = 'Adding...';
try {
const response = await fetch('/cart/add.js', {
method: 'POST',
headers: { 'Content-Type': 'application/json', 'Accept': 'application/json' },
body: JSON.stringify({ id: variantId, quantity: 1 })
});
if (!response.ok) throw new Error('Failed to add to cart');
btn.removeAttribute('data-loading');
btn.setAttribute('data-added', '');
btn.textContent = 'Added!';
document.dispatchEvent(new CustomEvent('cart:refresh'));
setTimeout(() => {
btn.removeAttribute('data-added');
btn.textContent = 'Add to Cart';
}, 2000);
} catch (e) {
btn.removeAttribute('data-loading');
btn.textContent = 'Add to Cart';
console.error('ATC error:', e);
}
}
bindAtcButtons() {
this.resultsContent.querySelectorAll('.atc-btn').forEach(btn => {
btn.addEventListener('click', (e) => {
e.preventDefault();
const variantId = btn.dataset.variantId;
if (variantId) this.addToCart(variantId, btn);
});
});
}
renderResults(results, query, preloadedRecommended) {
if (!results || ((!results.products || results.products.length === 0) && (!results.queries || results.queries.length === 0))) {
this.resultsContent.innerHTML = `
No results found for "${this.escapeHtml(query)}"
`;
this.showResults();
return;
}
const products = (results.products || [])
.filter(p => {
const tags = (p.tags || []).map(t => t.toLowerCase());
return !tags.includes('searchnise_ignore') && !tags.includes('search_hide');
})
.slice(0, 4);
const queries = (results.queries || []).slice(0, 4);
const firstProductId = products.length > 0 ? products[0].id : null;
let html = '';
if (products.length > 0) {
html += ``;
products.forEach(product => {
html += this.renderMatchedProduct(product);
});
html += `
`;
}
if (queries.length > 0) {
html += `
Top Searches
- ${SEARCH_ICON}
${queries.map(q => this.renderQueryItem(q)).join('')}
`;
}
const searchUrl = (window.Shopify?.routes?.root || '/') + `search?q=${encodeURIComponent(query)}&type=product`;
html += `
View all results for “${this.escapeHtml(query)}”
`;
if (firstProductId) {
if (preloadedRecommended && preloadedRecommended.length > 0) {
html += this.renderRecommendedSection(preloadedRecommended);
} else if (preloadedRecommended === null) {
html += `
`;
}
}
this.resultsContent.innerHTML = html;
this.showResults();
this.bindAtcButtons();
if (firstProductId && preloadedRecommended === null) {
this.fetchAndPatchRecommendations(firstProductId, query);
}
}
renderMatchedProduct(product) {
const imgUrl = product.featured_image?.url || product.image || '';
const imgSized = imgUrl ? imgUrl.replace(/(\.[a-z]+)(\?.*)?$/i, '_220x220$1$2') : '';
const price = this.formatPrice(product.price, product.price_min, product.price_max);
const isSingleVariant = !product.variants || product.variants.length
${imgSized
? `
`
: `
`
}
${title}
${price ? `${price}
` : ''}
View Product
`;
}
renderSuggestedProduct(product) {
const imgUrl = product.featured_image?.src || product.featured_image?.url || product.images?.[0] || '';
const imgSized = imgUrl ? imgUrl.replace(/(\.[a-z]+)(\?.*)?$/i, '_300x300$1$2') : '';
const productUrl = this.escapeHtml(product.url || `/products/${product.handle}`);
const title = this.escapeHtml(product.title || '');
return `
${imgSized
? `
`
: `
`
}
${title}
`;
}
renderQueryItem(item) {
const queryText = item.styled_text || this.escapeHtml(item.text || '');
const queryUrl = this.escapeHtml(item.url || '#');
return `
${queryText}
`;
}
renderRecommendedSection(recommended) {
return `
Suggested Products
${recommended.map(p => this.renderSuggestedProduct(p)).join('')}
`;
}
async fetchAndPatchRecommendations(productId, query) {
const recommended = await this.fetchRecommendations(productId);
if (query !== this.currentQuery) return;
if (this.cache.has(query)) {
this.cache.get(query).recommended = recommended;
}
const slot = this.resultsContent.querySelector('[data-recommendations-slot]');
if (!slot) return;
if (recommended.length > 0) {
slot.outerHTML = this.renderRecommendedSection(recommended);
} else {
slot.remove();
}
}
setLoadingState(loading) {
this.resultsContainer.classList.toggle('is-loading', loading);
if (loading && !this.resultsContainer.classList.contains('show')) {
this.showResults();
}
}
formatPrice(price, priceMin, priceMax) {
if (!price && !priceMin && !priceMax) return '';
const formatCurrency = (amount) => {
if (window.Shopify?.formatMoney) {
return window.Shopify.formatMoney(amount, window.Shopify.money_format || '$');
}
const currency = window.Shopify?.currency?.active || 'USD';
return new Intl.NumberFormat('en-US', { style: 'currency', currency }).format(amount);
};
if (priceMin && priceMax && priceMin !== priceMax) {
return `${formatCurrency(priceMin)} – ${formatCurrency(priceMax)}`;
}
return formatCurrency(price || priceMin || priceMax);
}
escapeHtml(text) {
if (text == null) return '';
const div = document.createElement('div');
div.textContent = String(text);
return div.innerHTML;
}
showError() {
this.resultsContent.innerHTML = `
Unable to load results. Please try again.
`;
this.showResults();
}
showResults() {
this.resultsContainer.classList.remove('hidden');
this.resultsContainer.classList.add('show');
}
hideResults() {
this.resultsContainer.classList.add('hidden');
this.resultsContainer.classList.remove('show');
}
};
} // end if (!window.MomentousPredictiveSearch)
function initPredictiveSearch() {
document.querySelectorAll('[data-search-form]').forEach(function(wrapper) {
if (!wrapper.__predictiveSearch) {
wrapper.__predictiveSearch = new window.MomentousPredictiveSearch(wrapper);
}
});
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', initPredictiveSearch);
} else {
initPredictiveSearch();
}
})();
Recommended Products
Creatine - 60 Servings
£27.00
View Product
Creatine - 90 Servings
£33.00
View Product
Creatine Chews 150-Count
£39.00
View Product
#ss-backdrop {
display: none;
position: fixed;
inset: 0;
background: rgba(0,0,0,0.45);
z-index: 400;
}
#ss-panel {
display: flex;
flex-direction: column;
position: fixed;
top: 0;
right: 0;
bottom: 0;
width: 440px;
max-width: 100%;
background: #fff;
z-index: 401;
transform: translateX(100%);
transition: transform 0.3s ease;
box-shadow: -4px 0 24px rgba(0,0,0,0.1);
}
#ss-panel.open,
#ss-backdrop.open {
display: flex; /* backdrop uses display:block via override below */
}
#ss-backdrop.open { display: block; }
#ss-panel.open { transform: translateX(0); }
#ss-header {
display: flex;
align-items: center;
justify-content: space-between;
padding: 18px 20px;
border-bottom: 1px solid #e5e5e5;
flex-shrink: 0;
}
#ss-title {
font-size: 17px;
font-weight: 600;
color: #171717;
}
#ss-header button {
background: none;
border: none;
cursor: pointer;
padding: 4px;
color: #555;
line-height: 0;
}
#ss-body {
flex: 1;
min-height: 0;
overflow-y: auto;
padding: 18px 20px;
-webkit-overflow-scrolling: touch;
}
/* Results appear inline, not as a dropdown */
#ss-panel .search-form-wrapper { isolation: auto; }
#ss-panel .search-form__results {
position: static !important;
width: 100% !important;
border: none !important;
box-shadow: none !important;
border-radius: 0 !important;
margin-top: 10px !important;
}
#ss-panel .search-form__results-content {
padding: 0 !important;
}
/* Recommended */
#ss-recommended { margin-top: 20px; }
#ss-recommended-label {
font-size: 11px;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.06em;
color: #757575;
margin: 0 0 12px;
}
.ss-rec-item {
display: flex;
align-items: center;
gap: 12px;
padding: 10px 12px;
border: 1px solid #e5e5e5;
border-radius: 8px;
text-decoration: none;
margin-bottom: 8px;
transition: background 0.15s;
}
.ss-rec-item:hover { background: #fafafa; }
.ss-rec-item img,
.ss-rec-img-placeholder {
width: 72px;
height: 72px;
border-radius: 6px;
object-fit: cover;
flex-shrink: 0;
background: #f0f0f0;
}
.ss-rec-info {
flex: 1;
min-width: 0;
display: flex;
flex-direction: column;
gap: 4px;
}
.ss-rec-title {
font-size: 13px;
font-weight: 600;
color: #171717;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.ss-rec-price {
font-size: 13px;
color: #737373;
}
#ss-recommended.hidden { display: none; }
var _ssScrollY = 0;
function openSearchSidebar() {
_ssScrollY = window.pageYOffset || document.documentElement.scrollTop;
document.body.style.position = 'fixed';
document.body.style.top = '-' + _ssScrollY + 'px';
document.body.style.width = '100%';
document.getElementById('ss-panel').classList.add('open');
document.getElementById('ss-backdrop').classList.add('open');
setTimeout(function() {
var input = document.querySelector('#ss-panel [data-search-input]');
if (input) input.focus();
}, 320);
}
function closeSearchSidebar() {
document.getElementById('ss-panel').classList.remove('open');
document.getElementById('ss-backdrop').classList.remove('open');
document.body.style.position = '';
document.body.style.top = '';
document.body.style.width = '';
window.scrollTo(0, _ssScrollY);
}
// Hide recommended when typing, show when empty
document.addEventListener('DOMContentLoaded', function() {
var input = document.querySelector('#ss-panel [data-search-input]');
var rec = document.getElementById('ss-recommended');
if (!input || !rec) return;
input.addEventListener('input', function() {
if (input.value.trim().length > 0) {
rec.classList.add('hidden');
} else {
rec.classList.remove('hidden');
}
});
// Clear button also restores recommended
var clearBtn = document.querySelector('#ss-panel [data-search-clear]');
if (clearBtn) {
clearBtn.addEventListener('click', function() {
setTimeout(function() { rec.classList.remove('hidden'); }, 20);
});
}
});
document.addEventListener('keydown', function(e) {
if (e.key === 'Escape') closeSearchSidebar();
});
.favicon {display: block;}
(function() {
var initialCartState = [];
var previousCartStateKey = 'previousCartState';
var removedItemsKey = 'removedItemsState';
var previousCartState = [];
try {
previousCartState = JSON.parse(localStorage.getItem(previousCartStateKey) || '[]');
} catch (e) {
previousCartState = [];
}
var removedItems = previousCartState.filter(function(prevItem) {
return !initialCartState.some(function(currItem) {
return currItem.id === prevItem.id;
});
});
if (removedItems.length) {
localStorage.setItem(removedItemsKey, JSON.stringify(removedItems));
}
localStorage.setItem(previousCartStateKey, JSON.stringify(initialCartState));
})();
(function() {
var productId = "7883642765495";
var productTitle = "Whey Protein Isolate 10-Travel Packs";
var productHandle = "grass-fed-whey-protein-10-travel-packs";
var marketId = "21022965943";
var storageKey = 'oe_viewedProducts';
function trackViewedProducts() {
if (!productId) return;
var viewedProducts = [];
try {
viewedProducts = JSON.parse(localStorage.getItem(storageKey) || '[]');
} catch (e) {
viewedProducts = [];
}
viewedProducts = viewedProducts.filter(function(p) { return p.id !== productId; });
viewedProducts.unshift({
id: productId,
title: productTitle,
handle: productHandle,
viewedAt: new Date().toISOString()
});
viewedProducts = viewedProducts.slice(0, 50);
localStorage.setItem(storageKey, JSON.stringify(viewedProducts));
updateCartAttributes();
}
function updateCartAttributes() {
var viewedProducts = [];
try {
viewedProducts = JSON.parse(localStorage.getItem(storageKey) || '[]');
} catch (e) {
return;
}
var productIds = viewedProducts.map(function(p) { return p.id; }).slice(0, 10).join(',');
var cartAttributes = {};
if (productIds) cartAttributes['__upsell_recently_viewed_products'] = productIds;
if (marketId) cartAttributes['__upsell_market_id'] = marketId;
if (Object.keys(cartAttributes).length === 0) return;
fetch(window.Shopify.routes.root + 'cart/update.js', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ attributes: cartAttributes })
}).catch(function() {});
}
trackViewedProducts();
window.addEventListener('popstate', trackViewedProducts);
})();
window['ShopifyForms'] = {
...window['ShopifyForms'],
currentPageType: "product"
};
.recharge-theme {
/* App */
--recharge-app-background: #F9F8F4;
--recharge-app-container: 1200px;
--recharge-app-vertical-padding: 32px;
/* Brand colors */
--recharge-color-brand: #467C99;
/* Tints */
--recharge-color-brand-120: #38637a;
--recharge-color-brand-20: #6b96ad;
--recharge-color-brand-40: #90b0c2;
--recharge-color-brand-60: #b5cbd6;
--recharge-color-brand-75: #d1dee6;
--recharge-color-brand-85: #e3ebf0;
/* Neutral */
--recharge-color-neutral: hsl(201, 35%, 7%);
--recharge-color-neutral-80: hsl(201, 7%, 25%);
--recharge-color-neutral-70: hsl(201, 5%, 35%);
--recharge-color-neutral-40: hsl(201, 3%, 63%);
--recharge-color-neutral-10: hsl(201, 2%, 91%);
/* Links */
--recharge-button-secondary: #467C99;
--recharge-button-secondary-120: #38637a;
--recharge-button-secondary-60: #90b0c2;
/* Images */
--recharge-images-ratio: 1;
/* Cards */
--recharge-cards-background: #FFFFFF;
--recharge-cards-border-color: RGBA(0,0,0,0);
/* Fonts */
--recharge-typography-scale: 16px;
--recharge-typography-size-1: calc(3 * var(--recharge-typography-scale));
--recharge-typography-size-2: calc(2.25 * var(--recharge-typography-scale));
--recharge-typography-size-3: calc(1.625 * var(--recharge-typography-scale));
--recharge-typography-size-4: calc(1.25 * var(--recharge-typography-scale));
--recharge-typography-size-5: calc(1 * var(--recharge-typography-scale));
--recharge-typography-size-6: calc(.875 * var(--recharge-typography-scale));
/** Text **/
--recharge-typography-light: #FFFFFF;
--recharge-typography-primary: var(--recharge-color-neutral);
--recharge-typography-secondary: var(--recharge-color-neutral-70);
/* Corners */
--recharge-corners-radius: 8px;
--recharge-button-border-radius: 8px;
/* Views */
--recharge-views-background: #F9F8F4;
/* Buttons */
--recharge-button-font-family: inherit;
--recharge-button-brand: var(--recharge-color-brand);
--recharge-button-color: #FFFFFF;
} Nutrient Per 100g Per serving Energy 343.51kcal 90kcal Protein 76.34g 20g
Price History
Loading...
1 ? 'lazy' : 'eager'" v-bind:src="itemImage(product, product.selected_variant, '400x400')" v-bind:alt="itemImageAlt(product, product.selected_variant)">
{{ value }}
Select your purchase method
Out of Stock Protection
{{ frequencyLabel(frequency, product.subscription_interval) }}
One-Time Purchase
Receive Once
Add to Bag
Price
View Product
el.classList.remove('show')); $event.target.closest('.rebuy-product-block').querySelector('.rebuy-product-options').classList.add('show')"
type="button">
Price
Powered by Rebuy
0 ? 'is-visible' : 'is-hidden', 'widget-layout-' + currentLayout()]">
:
1 ? 'lazy' : 'eager'" v-bind:src="itemImage(product, product.selected_variant, '400x400')" v-bind:alt="itemImageAlt(product, product.selected_variant)">
{{ value }}
Select your purchase method
Out of Stock Protection
{{ frequencyLabel(frequency, product.subscription_interval) }}
One-Time Purchase
Receive Once
Add to Bag
Price
View Product
el.classList.remove('show')); $event.target.closest('.rebuy-product-block').querySelector('.rebuy-product-options').classList.add('show')"
type="button">
Price
Powered by Rebuy
Search
Search for products, collections, pages, and articles
.search-form-wrapper {
position: relative;
-webkit-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0);
isolation: isolate;
}
.search-form__input:focus {
border: 1px solid #000;
}
.search-form__results {
width: 480px;
border-radius: 10px;
border: 1px solid #E5E7EB;
background: #FFF;
box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
top: 100%;
}
@media(max-width: 640px) {
.search-form__results {
width: 100%;
border-radius: 10px;
border: none;
margin-top: 0;
}
}
.search-form__results.show {
display: block;
}
.search-result-divider {
border-top: 1px solid var(--grey-100, #e5e5e5);
}
.search-product-img {
width: 5rem;
height: 5rem;
}
@media(max-width: 640px) {
.search-product-img {
width: 70px;
height: 70px;
}
}
.atc-btn[data-loading] {
opacity: 0.6;
pointer-events: none;
}
.atc-btn[data-added] {
background-color: #2d7a3a;
}
.search-form__results.is-loading::after {
content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 2px;
background: linear-gradient(90deg, transparent 0%, var(--grey-900, #171717) 50%, transparent 100%);
background-size: 200% 100%;
animation: search-loading-shimmer 1.2s ease-in-out infinite;
pointer-events: none;
}
.search-form__results-content {
max-height: calc(100vh - 170px);
overflow-y: auto;
-webkit-overflow-scrolling: touch;
overscroll-behavior: contain;
}
.search-result-divider {
position: sticky;
bottom: 0;
background-color: #FFF;
z-index: 10;
}
@keyframes search-loading-shimmer {
0% { background-position: -100% 0; }
100% { background-position: 200% 0; }
}
@media(max-width: 640px) {
.search-product-row {
flex-direction: column;
align-items: flex-start !important;
}
.search-recommended-section {
display: none;
}
}
.query-item-text *,
.query-item-text {
white-space: nowrap;
}
.query-item-text mark {
background-color: #FFFADF;
color: inherit;
border-radius: 2px;
}
.search-form__clear-btn {
background: none;
border: none;
padding: 0;
cursor: pointer;
line-height: 0;
color: var(--grey-400, #999);
}
.search-form__clear-btn:hover svg path {
stroke: var(--grey-700, #404040);
}
(function() {
'use strict';
const SEARCH_ICON = `
`;
// Guard: only define the class once even if snippet is rendered multiple times
if (!window.MomentousPredictiveSearch) {
window.MomentousPredictiveSearch = class {
constructor(wrapper) {
this.wrapper = wrapper;
this.input = wrapper.querySelector('[data-search-input]');
this.resultsContainer = wrapper.querySelector('[data-search-results]');
this.resultsContent = wrapper.querySelector('[data-search-results-content]');
this.form = wrapper.querySelector('.search-form');
this.submitBtn = wrapper.querySelector('[data-search-submit]');
this.clearBtn = wrapper.querySelector('[data-search-clear]');
this.debounceTimer = null;
this.currentRequest = null;
this.currentQuery = '';
this.minQueryLength = 2;
this.debounceDelay = 300;
this.cache = new Map();
this.requestId = 0;
this.init();
}
init() {
this.input.addEventListener('input', (e) => {
this.handleInput(e.target.value);
this.updateClearBtn();
});
if (this.clearBtn) {
this.clearBtn.addEventListener('click', () => {
this.input.value = '';
this.currentQuery = '';
this.hideResults();
this.updateClearBtn();
this.input.focus();
});
}
this.input.addEventListener('focus', () => {
if (this.input.value.length >= this.minQueryLength) {
this.showResults();
}
});
this.input.addEventListener('touchend', (e) => {
e.stopPropagation();
this.input.focus();
});
this.input.addEventListener('touchstart', (e) => {
e.stopPropagation();
}, { passive: true });
const handleOutsideInteraction = (e) => {
if (!this.wrapper.contains(e.target)) {
const sidebarPanel = document.getElementById('ss-panel');
if (sidebarPanel && sidebarPanel.contains(this.wrapper) && sidebarPanel.contains(e.target)) {
return;
}
this.hideResults();
}
};
document.addEventListener('click', handleOutsideInteraction);
document.addEventListener('touchstart', handleOutsideInteraction, { passive: true });
document.addEventListener('keydown', (e) => {
if (e.key === 'Escape') this.hideResults();
});
}
updateClearBtn() {
const show = this.input.value.length >= this.minQueryLength;
if (this.clearBtn) this.clearBtn.classList.toggle('hidden', !show);
if (this.submitBtn) this.submitBtn.classList.toggle('hidden', show);
}
handleInput(query) {
const trimmedQuery = query.trim();
if (this.debounceTimer) clearTimeout(this.debounceTimer);
if (trimmedQuery.length {
this.fetchSearchData(trimmedQuery);
}, this.debounceDelay);
}
async fetchSearchData(query) {
if (this.cache.has(query)) {
const cached = this.cache.get(query);
this.setLoadingState(false);
this.renderResults(cached.results, query, cached.recommended);
return;
}
if (this.currentRequest) {
this.currentRequest.abort();
this.currentRequest = null;
}
const requestId = ++this.requestId;
const controller = new AbortController();
this.currentRequest = controller;
const baseUrl = window.Shopify?.routes?.root || '/';
const apiUrl = `${baseUrl}search/suggest.json?q=${encodeURIComponent(query)}&resources[type]=product,query&resources[limit]=5&resources[limit_scope]=each`;
try {
const response = await fetch(apiUrl, {
signal: controller.signal,
headers: { 'Accept': 'application/json' }
});
if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`);
const data = await response.json();
if (requestId !== this.requestId) return;
this.currentRequest = null;
const results = data.resources?.results || {};
if (this.cache.size > 50) this.cache.clear();
this.cache.set(query, { results, recommended: null });
this.setLoadingState(false);
this.renderResults(results, query, null);
} catch (error) {
if (error.name === 'AbortError') return;
if (requestId !== this.requestId) return;
console.error('Predictive search error:', error);
this.setLoadingState(false);
this.showError();
}
}
async fetchRecommendations(productId) {
try {
const baseUrl = window.Shopify?.routes?.root || '/';
const url = `${baseUrl}recommendations/products.json?product_id=${productId}&limit=6&intent=related`;
const response = await fetch(url, { headers: { 'Accept': 'application/json' } });
if (!response.ok) return [];
const data = await response.json();
return (data.products || [])
.filter(p => {
const tags = (p.tags || []).map(t => t.toLowerCase());
return !tags.includes('searchnise_ignore') && !tags.includes('search_hide');
})
.slice(0, 3);
} catch (e) {
return [];
}
}
async addToCart(variantId, btn) {
btn.setAttribute('data-loading', '');
btn.textContent = 'Adding...';
try {
const response = await fetch('/cart/add.js', {
method: 'POST',
headers: { 'Content-Type': 'application/json', 'Accept': 'application/json' },
body: JSON.stringify({ id: variantId, quantity: 1 })
});
if (!response.ok) throw new Error('Failed to add to cart');
btn.removeAttribute('data-loading');
btn.setAttribute('data-added', '');
btn.textContent = 'Added!';
document.dispatchEvent(new CustomEvent('cart:refresh'));
setTimeout(() => {
btn.removeAttribute('data-added');
btn.textContent = 'Add to Cart';
}, 2000);
} catch (e) {
btn.removeAttribute('data-loading');
btn.textContent = 'Add to Cart';
console.error('ATC error:', e);
}
}
bindAtcButtons() {
this.resultsContent.querySelectorAll('.atc-btn').forEach(btn => {
btn.addEventListener('click', (e) => {
e.preventDefault();
const variantId = btn.dataset.variantId;
if (variantId) this.addToCart(variantId, btn);
});
});
}
renderResults(results, query, preloadedRecommended) {
if (!results || ((!results.products || results.products.length === 0) && (!results.queries || results.queries.length === 0))) {
this.resultsContent.innerHTML = `
No results found for "${this.escapeHtml(query)}"
`;
this.showResults();
return;
}
const products = (results.products || [])
.filter(p => {
const tags = (p.tags || []).map(t => t.toLowerCase());
return !tags.includes('searchnise_ignore') && !tags.includes('search_hide');
})
.slice(0, 4);
const queries = (results.queries || []).slice(0, 4);
const firstProductId = products.length > 0 ? products[0].id : null;
let html = '';
if (products.length > 0) {
html += ``;
products.forEach(product => {
html += this.renderMatchedProduct(product);
});
html += `
`;
}
if (queries.length > 0) {
html += `
Top Searches
- ${SEARCH_ICON}
${queries.map(q => this.renderQueryItem(q)).join('')}
`;
}
const searchUrl = (window.Shopify?.routes?.root || '/') + `search?q=${encodeURIComponent(query)}&type=product`;
html += `
View all results for “${this.escapeHtml(query)}”
`;
if (firstProductId) {
if (preloadedRecommended && preloadedRecommended.length > 0) {
html += this.renderRecommendedSection(preloadedRecommended);
} else if (preloadedRecommended === null) {
html += `
`;
}
}
this.resultsContent.innerHTML = html;
this.showResults();
this.bindAtcButtons();
if (firstProductId && preloadedRecommended === null) {
this.fetchAndPatchRecommendations(firstProductId, query);
}
}
renderMatchedProduct(product) {
const imgUrl = product.featured_image?.url || product.image || '';
const imgSized = imgUrl ? imgUrl.replace(/(\.[a-z]+)(\?.*)?$/i, '_220x220$1$2') : '';
const price = this.formatPrice(product.price, product.price_min, product.price_max);
const isSingleVariant = !product.variants || product.variants.length
${imgSized
? `
`
: `
`
}
${title}
${price ? `${price}
` : ''}
View Product
`;
}
renderSuggestedProduct(product) {
const imgUrl = product.featured_image?.src || product.featured_image?.url || product.images?.[0] || '';
const imgSized = imgUrl ? imgUrl.replace(/(\.[a-z]+)(\?.*)?$/i, '_300x300$1$2') : '';
const productUrl = this.escapeHtml(product.url || `/products/${product.handle}`);
const title = this.escapeHtml(product.title || '');
return `
${imgSized
? `
`
: `
`
}
${title}
`;
}
renderQueryItem(item) {
const queryText = item.styled_text || this.escapeHtml(item.text || '');
const queryUrl = this.escapeHtml(item.url || '#');
return `
${queryText}
`;
}
renderRecommendedSection(recommended) {
return `
Suggested Products
${recommended.map(p => this.renderSuggestedProduct(p)).join('')}
`;
}
async fetchAndPatchRecommendations(productId, query) {
const recommended = await this.fetchRecommendations(productId);
if (query !== this.currentQuery) return;
if (this.cache.has(query)) {
this.cache.get(query).recommended = recommended;
}
const slot = this.resultsContent.querySelector('[data-recommendations-slot]');
if (!slot) return;
if (recommended.length > 0) {
slot.outerHTML = this.renderRecommendedSection(recommended);
} else {
slot.remove();
}
}
setLoadingState(loading) {
this.resultsContainer.classList.toggle('is-loading', loading);
if (loading && !this.resultsContainer.classList.contains('show')) {
this.showResults();
}
}
formatPrice(price, priceMin, priceMax) {
if (!price && !priceMin && !priceMax) return '';
const formatCurrency = (amount) => {
if (window.Shopify?.formatMoney) {
return window.Shopify.formatMoney(amount, window.Shopify.money_format || '$');
}
const currency = window.Shopify?.currency?.active || 'USD';
return new Intl.NumberFormat('en-US', { style: 'currency', currency }).format(amount);
};
if (priceMin && priceMax && priceMin !== priceMax) {
return `${formatCurrency(priceMin)} – ${formatCurrency(priceMax)}`;
}
return formatCurrency(price || priceMin || priceMax);
}
escapeHtml(text) {
if (text == null) return '';
const div = document.createElement('div');
div.textContent = String(text);
return div.innerHTML;
}
showError() {
this.resultsContent.innerHTML = `
Unable to load results. Please try again.
`;
this.showResults();
}
showResults() {
this.resultsContainer.classList.remove('hidden');
this.resultsContainer.classList.add('show');
}
hideResults() {
this.resultsContainer.classList.add('hidden');
this.resultsContainer.classList.remove('show');
}
};
} // end if (!window.MomentousPredictiveSearch)
function initPredictiveSearch() {
document.querySelectorAll('[data-search-form]').forEach(function(wrapper) {
if (!wrapper.__predictiveSearch) {
wrapper.__predictiveSearch = new window.MomentousPredictiveSearch(wrapper);
}
});
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', initPredictiveSearch);
} else {
initPredictiveSearch();
}
})();
Recommended Products
Creatine - 60 Servings
£27.00
View Product
Creatine - 90 Servings
£33.00
View Product
Creatine Chews 150-Count
£39.00
View Product
#ss-backdrop {
display: none;
position: fixed;
inset: 0;
background: rgba(0,0,0,0.45);
z-index: 400;
}
#ss-panel {
display: flex;
flex-direction: column;
position: fixed;
top: 0;
right: 0;
bottom: 0;
width: 440px;
max-width: 100%;
background: #fff;
z-index: 401;
transform: translateX(100%);
transition: transform 0.3s ease;
box-shadow: -4px 0 24px rgba(0,0,0,0.1);
}
#ss-panel.open,
#ss-backdrop.open {
display: flex; /* backdrop uses display:block via override below */
}
#ss-backdrop.open { display: block; }
#ss-panel.open { transform: translateX(0); }
#ss-header {
display: flex;
align-items: center;
justify-content: space-between;
padding: 18px 20px;
border-bottom: 1px solid #e5e5e5;
flex-shrink: 0;
}
#ss-title {
font-size: 17px;
font-weight: 600;
color: #171717;
}
#ss-header button {
background: none;
border: none;
cursor: pointer;
padding: 4px;
color: #555;
line-height: 0;
}
#ss-body {
flex: 1;
min-height: 0;
overflow-y: auto;
padding: 18px 20px;
-webkit-overflow-scrolling: touch;
}
/* Results appear inline, not as a dropdown */
#ss-panel .search-form-wrapper { isolation: auto; }
#ss-panel .search-form__results {
position: static !important;
width: 100% !important;
border: none !important;
box-shadow: none !important;
border-radius: 0 !important;
margin-top: 10px !important;
}
#ss-panel .search-form__results-content {
padding: 0 !important;
}
/* Recommended */
#ss-recommended { margin-top: 20px; }
#ss-recommended-label {
font-size: 11px;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.06em;
color: #757575;
margin: 0 0 12px;
}
.ss-rec-item {
display: flex;
align-items: center;
gap: 12px;
padding: 10px 12px;
border: 1px solid #e5e5e5;
border-radius: 8px;
text-decoration: none;
margin-bottom: 8px;
transition: background 0.15s;
}
.ss-rec-item:hover { background: #fafafa; }
.ss-rec-item img,
.ss-rec-img-placeholder {
width: 72px;
height: 72px;
border-radius: 6px;
object-fit: cover;
flex-shrink: 0;
background: #f0f0f0;
}
.ss-rec-info {
flex: 1;
min-width: 0;
display: flex;
flex-direction: column;
gap: 4px;
}
.ss-rec-title {
font-size: 13px;
font-weight: 600;
color: #171717;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.ss-rec-price {
font-size: 13px;
color: #737373;
}
#ss-recommended.hidden { display: none; }
var _ssScrollY = 0;
function openSearchSidebar() {
_ssScrollY = window.pageYOffset || document.documentElement.scrollTop;
document.body.style.position = 'fixed';
document.body.style.top = '-' + _ssScrollY + 'px';
document.body.style.width = '100%';
document.getElementById('ss-panel').classList.add('open');
document.getElementById('ss-backdrop').classList.add('open');
setTimeout(function() {
var input = document.querySelector('#ss-panel [data-search-input]');
if (input) input.focus();
}, 320);
}
function closeSearchSidebar() {
document.getElementById('ss-panel').classList.remove('open');
document.getElementById('ss-backdrop').classList.remove('open');
document.body.style.position = '';
document.body.style.top = '';
document.body.style.width = '';
window.scrollTo(0, _ssScrollY);
}
// Hide recommended when typing, show when empty
document.addEventListener('DOMContentLoaded', function() {
var input = document.querySelector('#ss-panel [data-search-input]');
var rec = document.getElementById('ss-recommended');
if (!input || !rec) return;
input.addEventListener('input', function() {
if (input.value.trim().length > 0) {
rec.classList.add('hidden');
} else {
rec.classList.remove('hidden');
}
});
// Clear button also restores recommended
var clearBtn = document.querySelector('#ss-panel [data-search-clear]');
if (clearBtn) {
clearBtn.addEventListener('click', function() {
setTimeout(function() { rec.classList.remove('hidden'); }, 20);
});
}
});
document.addEventListener('keydown', function(e) {
if (e.key === 'Escape') closeSearchSidebar();
});
.favicon {display: block;}
(function() {
var initialCartState = [];
var previousCartStateKey = 'previousCartState';
var removedItemsKey = 'removedItemsState';
var previousCartState = [];
try {
previousCartState = JSON.parse(localStorage.getItem(previousCartStateKey) || '[]');
} catch (e) {
previousCartState = [];
}
var removedItems = previousCartState.filter(function(prevItem) {
return !initialCartState.some(function(currItem) {
return currItem.id === prevItem.id;
});
});
if (removedItems.length) {
localStorage.setItem(removedItemsKey, JSON.stringify(removedItems));
}
localStorage.setItem(previousCartStateKey, JSON.stringify(initialCartState));
})();
(function() {
var productId = "7883642765495";
var productTitle = "Whey Protein Isolate 10-Travel Packs";
var productHandle = "grass-fed-whey-protein-10-travel-packs";
var marketId = "21022965943";
var storageKey = 'oe_viewedProducts';
function trackViewedProducts() {
if (!productId) return;
var viewedProducts = [];
try {
viewedProducts = JSON.parse(localStorage.getItem(storageKey) || '[]');
} catch (e) {
viewedProducts = [];
}
viewedProducts = viewedProducts.filter(function(p) { return p.id !== productId; });
viewedProducts.unshift({
id: productId,
title: productTitle,
handle: productHandle,
viewedAt: new Date().toISOString()
});
viewedProducts = viewedProducts.slice(0, 50);
localStorage.setItem(storageKey, JSON.stringify(viewedProducts));
updateCartAttributes();
}
function updateCartAttributes() {
var viewedProducts = [];
try {
viewedProducts = JSON.parse(localStorage.getItem(storageKey) || '[]');
} catch (e) {
return;
}
var productIds = viewedProducts.map(function(p) { return p.id; }).slice(0, 10).join(',');
var cartAttributes = {};
if (productIds) cartAttributes['__upsell_recently_viewed_products'] = productIds;
if (marketId) cartAttributes['__upsell_market_id'] = marketId;
if (Object.keys(cartAttributes).length === 0) return;
fetch(window.Shopify.routes.root + 'cart/update.js', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ attributes: cartAttributes })
}).catch(function() {});
}
trackViewedProducts();
window.addEventListener('popstate', trackViewedProducts);
})();
window['ShopifyForms'] = {
...window['ShopifyForms'],
currentPageType: "product"
};
.recharge-theme {
/* App */
--recharge-app-background: #F9F8F4;
--recharge-app-container: 1200px;
--recharge-app-vertical-padding: 32px;
/* Brand colors */
--recharge-color-brand: #467C99;
/* Tints */
--recharge-color-brand-120: #38637a;
--recharge-color-brand-20: #6b96ad;
--recharge-color-brand-40: #90b0c2;
--recharge-color-brand-60: #b5cbd6;
--recharge-color-brand-75: #d1dee6;
--recharge-color-brand-85: #e3ebf0;
/* Neutral */
--recharge-color-neutral: hsl(201, 35%, 7%);
--recharge-color-neutral-80: hsl(201, 7%, 25%);
--recharge-color-neutral-70: hsl(201, 5%, 35%);
--recharge-color-neutral-40: hsl(201, 3%, 63%);
--recharge-color-neutral-10: hsl(201, 2%, 91%);
/* Links */
--recharge-button-secondary: #467C99;
--recharge-button-secondary-120: #38637a;
--recharge-button-secondary-60: #90b0c2;
/* Images */
--recharge-images-ratio: 1;
/* Cards */
--recharge-cards-background: #FFFFFF;
--recharge-cards-border-color: RGBA(0,0,0,0);
/* Fonts */
--recharge-typography-scale: 16px;
--recharge-typography-size-1: calc(3 * var(--recharge-typography-scale));
--recharge-typography-size-2: calc(2.25 * var(--recharge-typography-scale));
--recharge-typography-size-3: calc(1.625 * var(--recharge-typography-scale));
--recharge-typography-size-4: calc(1.25 * var(--recharge-typography-scale));
--recharge-typography-size-5: calc(1 * var(--recharge-typography-scale));
--recharge-typography-size-6: calc(.875 * var(--recharge-typography-scale));
/** Text **/
--recharge-typography-light: #FFFFFF;
--recharge-typography-primary: var(--recharge-color-neutral);
--recharge-typography-secondary: var(--recharge-color-neutral-70);
/* Corners */
--recharge-corners-radius: 8px;
--recharge-button-border-radius: 8px;
/* Views */
--recharge-views-background: #F9F8F4;
/* Buttons */
--recharge-button-font-family: inherit;
--recharge-button-brand: var(--recharge-color-brand);
--recharge-button-color: #FFFFFF;
} Nutrient Per 100g Per serving Energy 343.51kcal 90kcal Protein 76.34g 20g
Price History
Loading...
1 ? 'lazy' : 'eager'" v-bind:src="itemImage(product, product.selected_variant, '400x400')" v-bind:alt="itemImageAlt(product, product.selected_variant)">
{{ value }}
Select your purchase method
Out of Stock Protection
{{ frequencyLabel(frequency, product.subscription_interval) }}
One-Time Purchase
Receive Once
Add to Bag
Price
View Product
el.classList.remove('show')); $event.target.closest('.rebuy-product-block').querySelector('.rebuy-product-options').classList.add('show')"
type="button">
Price
Powered by Rebuy
Search
Search for products, collections, pages, and articles
.search-form-wrapper {
position: relative;
-webkit-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0);
isolation: isolate;
}
.search-form__input:focus {
border: 1px solid #000;
}
.search-form__results {
width: 480px;
border-radius: 10px;
border: 1px solid #E5E7EB;
background: #FFF;
box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
top: 100%;
}
@media(max-width: 640px) {
.search-form__results {
width: 100%;
border-radius: 10px;
border: none;
margin-top: 0;
}
}
.search-form__results.show {
display: block;
}
.search-result-divider {
border-top: 1px solid var(--grey-100, #e5e5e5);
}
.search-product-img {
width: 5rem;
height: 5rem;
}
@media(max-width: 640px) {
.search-product-img {
width: 70px;
height: 70px;
}
}
.atc-btn[data-loading] {
opacity: 0.6;
pointer-events: none;
}
.atc-btn[data-added] {
background-color: #2d7a3a;
}
.search-form__results.is-loading::after {
content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 2px;
background: linear-gradient(90deg, transparent 0%, var(--grey-900, #171717) 50%, transparent 100%);
background-size: 200% 100%;
animation: search-loading-shimmer 1.2s ease-in-out infinite;
pointer-events: none;
}
.search-form__results-content {
max-height: calc(100vh - 170px);
overflow-y: auto;
-webkit-overflow-scrolling: touch;
overscroll-behavior: contain;
}
.search-result-divider {
position: sticky;
bottom: 0;
background-color: #FFF;
z-index: 10;
}
@keyframes search-loading-shimmer {
0% { background-position: -100% 0; }
100% { background-position: 200% 0; }
}
@media(max-width: 640px) {
.search-product-row {
flex-direction: column;
align-items: flex-start !important;
}
.search-recommended-section {
display: none;
}
}
.query-item-text *,
.query-item-text {
white-space: nowrap;
}
.query-item-text mark {
background-color: #FFFADF;
color: inherit;
border-radius: 2px;
}
.search-form__clear-btn {
background: none;
border: none;
padding: 0;
cursor: pointer;
line-height: 0;
color: var(--grey-400, #999);
}
.search-form__clear-btn:hover svg path {
stroke: var(--grey-700, #404040);
}
(function() {
'use strict';
const SEARCH_ICON = `
`;
// Guard: only define the class once even if snippet is rendered multiple times
if (!window.MomentousPredictiveSearch) {
window.MomentousPredictiveSearch = class {
constructor(wrapper) {
this.wrapper = wrapper;
this.input = wrapper.querySelector('[data-search-input]');
this.resultsContainer = wrapper.querySelector('[data-search-results]');
this.resultsContent = wrapper.querySelector('[data-search-results-content]');
this.form = wrapper.querySelector('.search-form');
this.submitBtn = wrapper.querySelector('[data-search-submit]');
this.clearBtn = wrapper.querySelector('[data-search-clear]');
this.debounceTimer = null;
this.currentRequest = null;
this.currentQuery = '';
this.minQueryLength = 2;
this.debounceDelay = 300;
this.cache = new Map();
this.requestId = 0;
this.init();
}
init() {
this.input.addEventListener('input', (e) => {
this.handleInput(e.target.value);
this.updateClearBtn();
});
if (this.clearBtn) {
this.clearBtn.addEventListener('click', () => {
this.input.value = '';
this.currentQuery = '';
this.hideResults();
this.updateClearBtn();
this.input.focus();
});
}
this.input.addEventListener('focus', () => {
if (this.input.value.length >= this.minQueryLength) {
this.showResults();
}
});
this.input.addEventListener('touchend', (e) => {
e.stopPropagation();
this.input.focus();
});
this.input.addEventListener('touchstart', (e) => {
e.stopPropagation();
}, { passive: true });
const handleOutsideInteraction = (e) => {
if (!this.wrapper.contains(e.target)) {
const sidebarPanel = document.getElementById('ss-panel');
if (sidebarPanel && sidebarPanel.contains(this.wrapper) && sidebarPanel.contains(e.target)) {
return;
}
this.hideResults();
}
};
document.addEventListener('click', handleOutsideInteraction);
document.addEventListener('touchstart', handleOutsideInteraction, { passive: true });
document.addEventListener('keydown', (e) => {
if (e.key === 'Escape') this.hideResults();
});
}
updateClearBtn() {
const show = this.input.value.length >= this.minQueryLength;
if (this.clearBtn) this.clearBtn.classList.toggle('hidden', !show);
if (this.submitBtn) this.submitBtn.classList.toggle('hidden', show);
}
handleInput(query) {
const trimmedQuery = query.trim();
if (this.debounceTimer) clearTimeout(this.debounceTimer);
if (trimmedQuery.length {
this.fetchSearchData(trimmedQuery);
}, this.debounceDelay);
}
async fetchSearchData(query) {
if (this.cache.has(query)) {
const cached = this.cache.get(query);
this.setLoadingState(false);
this.renderResults(cached.results, query, cached.recommended);
return;
}
if (this.currentRequest) {
this.currentRequest.abort();
this.currentRequest = null;
}
const requestId = ++this.requestId;
const controller = new AbortController();
this.currentRequest = controller;
const baseUrl = window.Shopify?.routes?.root || '/';
const apiUrl = `${baseUrl}search/suggest.json?q=${encodeURIComponent(query)}&resources[type]=product,query&resources[limit]=5&resources[limit_scope]=each`;
try {
const response = await fetch(apiUrl, {
signal: controller.signal,
headers: { 'Accept': 'application/json' }
});
if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`);
const data = await response.json();
if (requestId !== this.requestId) return;
this.currentRequest = null;
const results = data.resources?.results || {};
if (this.cache.size > 50) this.cache.clear();
this.cache.set(query, { results, recommended: null });
this.setLoadingState(false);
this.renderResults(results, query, null);
} catch (error) {
if (error.name === 'AbortError') return;
if (requestId !== this.requestId) return;
console.error('Predictive search error:', error);
this.setLoadingState(false);
this.showError();
}
}
async fetchRecommendations(productId) {
try {
const baseUrl = window.Shopify?.routes?.root || '/';
const url = `${baseUrl}recommendations/products.json?product_id=${productId}&limit=6&intent=related`;
const response = await fetch(url, { headers: { 'Accept': 'application/json' } });
if (!response.ok) return [];
const data = await response.json();
return (data.products || [])
.filter(p => {
const tags = (p.tags || []).map(t => t.toLowerCase());
return !tags.includes('searchnise_ignore') && !tags.includes('search_hide');
})
.slice(0, 3);
} catch (e) {
return [];
}
}
async addToCart(variantId, btn) {
btn.setAttribute('data-loading', '');
btn.textContent = 'Adding...';
try {
const response = await fetch('/cart/add.js', {
method: 'POST',
headers: { 'Content-Type': 'application/json', 'Accept': 'application/json' },
body: JSON.stringify({ id: variantId, quantity: 1 })
});
if (!response.ok) throw new Error('Failed to add to cart');
btn.removeAttribute('data-loading');
btn.setAttribute('data-added', '');
btn.textContent = 'Added!';
document.dispatchEvent(new CustomEvent('cart:refresh'));
setTimeout(() => {
btn.removeAttribute('data-added');
btn.textContent = 'Add to Cart';
}, 2000);
} catch (e) {
btn.removeAttribute('data-loading');
btn.textContent = 'Add to Cart';
console.error('ATC error:', e);
}
}
bindAtcButtons() {
this.resultsContent.querySelectorAll('.atc-btn').forEach(btn => {
btn.addEventListener('click', (e) => {
e.preventDefault();
const variantId = btn.dataset.variantId;
if (variantId) this.addToCart(variantId, btn);
});
});
}
renderResults(results, query, preloadedRecommended) {
if (!results || ((!results.products || results.products.length === 0) && (!results.queries || results.queries.length === 0))) {
this.resultsContent.innerHTML = `
No results found for "${this.escapeHtml(query)}"
`;
this.showResults();
return;
}
const products = (results.products || [])
.filter(p => {
const tags = (p.tags || []).map(t => t.toLowerCase());
return !tags.includes('searchnise_ignore') && !tags.includes('search_hide');
})
.slice(0, 4);
const queries = (results.queries || []).slice(0, 4);
const firstProductId = products.length > 0 ? products[0].id : null;
let html = '';
if (products.length > 0) {
html += `
`;
products.forEach(product => {
html += this.renderMatchedProduct(product);
});
html += `
`;
}
if (queries.length > 0) {
html += `
Top Searches
- ${SEARCH_ICON} ${queries.map(q => this.renderQueryItem(q)).join('')}
View all results for “${this.escapeHtml(query)}”
`;
if (firstProductId) {
if (preloadedRecommended && preloadedRecommended.length > 0) {
html += this.renderRecommendedSection(preloadedRecommended);
} else if (preloadedRecommended === null) {
html += `
`;
}
}
this.resultsContent.innerHTML = html;
this.showResults();
this.bindAtcButtons();
if (firstProductId && preloadedRecommended === null) {
this.fetchAndPatchRecommendations(firstProductId, query);
}
}
renderMatchedProduct(product) {
const imgUrl = product.featured_image?.url || product.image || '';
const imgSized = imgUrl ? imgUrl.replace(/(\.[a-z]+)(\?.*)?$/i, '_220x220$1$2') : '';
const price = this.formatPrice(product.price, product.price_min, product.price_max);
const isSingleVariant = !product.variants || product.variants.length
${imgSized
? `
`
: `
`
}
${title}
${price ? `
${price}
` : ''}
View Product
`;
}
renderSuggestedProduct(product) {
const imgUrl = product.featured_image?.src || product.featured_image?.url || product.images?.[0] || '';
const imgSized = imgUrl ? imgUrl.replace(/(\.[a-z]+)(\?.*)?$/i, '_300x300$1$2') : '';
const productUrl = this.escapeHtml(product.url || `/products/${product.handle}`);
const title = this.escapeHtml(product.title || '');
return `
${imgSized
? `
`
: `
`
}
${title}
`;
}
renderQueryItem(item) {
const queryText = item.styled_text || this.escapeHtml(item.text || '');
const queryUrl = this.escapeHtml(item.url || '#');
return `
${queryText}
`;
}
renderRecommendedSection(recommended) {
return `
Suggested Products
${recommended.map(p => this.renderSuggestedProduct(p)).join('')}
`;
}
async fetchAndPatchRecommendations(productId, query) {
const recommended = await this.fetchRecommendations(productId);
if (query !== this.currentQuery) return;
if (this.cache.has(query)) {
this.cache.get(query).recommended = recommended;
}
const slot = this.resultsContent.querySelector('[data-recommendations-slot]');
if (!slot) return;
if (recommended.length > 0) {
slot.outerHTML = this.renderRecommendedSection(recommended);
} else {
slot.remove();
}
}
setLoadingState(loading) {
this.resultsContainer.classList.toggle('is-loading', loading);
if (loading && !this.resultsContainer.classList.contains('show')) {
this.showResults();
}
}
formatPrice(price, priceMin, priceMax) {
if (!price && !priceMin && !priceMax) return '';
const formatCurrency = (amount) => {
if (window.Shopify?.formatMoney) {
return window.Shopify.formatMoney(amount, window.Shopify.money_format || '$');
}
const currency = window.Shopify?.currency?.active || 'USD';
return new Intl.NumberFormat('en-US', { style: 'currency', currency }).format(amount);
};
if (priceMin && priceMax && priceMin !== priceMax) {
return `${formatCurrency(priceMin)} – ${formatCurrency(priceMax)}`;
}
return formatCurrency(price || priceMin || priceMax);
}
escapeHtml(text) {
if (text == null) return '';
const div = document.createElement('div');
div.textContent = String(text);
return div.innerHTML;
}
showError() {
this.resultsContent.innerHTML = `
Unable to load results. Please try again.
`;
this.showResults();
}
showResults() {
this.resultsContainer.classList.remove('hidden');
this.resultsContainer.classList.add('show');
}
hideResults() {
this.resultsContainer.classList.add('hidden');
this.resultsContainer.classList.remove('show');
}
};
} // end if (!window.MomentousPredictiveSearch)
function initPredictiveSearch() {
document.querySelectorAll('[data-search-form]').forEach(function(wrapper) {
if (!wrapper.__predictiveSearch) {
wrapper.__predictiveSearch = new window.MomentousPredictiveSearch(wrapper);
}
});
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', initPredictiveSearch);
} else {
initPredictiveSearch();
}
})();
Recommended Products
Creatine - 60 Servings
£27.00
View Product
Creatine - 90 Servings
£33.00
View Product
Creatine Chews 150-Count
£39.00
View Product
#ss-backdrop {
display: none;
position: fixed;
inset: 0;
background: rgba(0,0,0,0.45);
z-index: 400;
}
#ss-panel {
display: flex;
flex-direction: column;
position: fixed;
top: 0;
right: 0;
bottom: 0;
width: 440px;
max-width: 100%;
background: #fff;
z-index: 401;
transform: translateX(100%);
transition: transform 0.3s ease;
box-shadow: -4px 0 24px rgba(0,0,0,0.1);
}
#ss-panel.open,
#ss-backdrop.open {
display: flex; /* backdrop uses display:block via override below */
}
#ss-backdrop.open { display: block; }
#ss-panel.open { transform: translateX(0); }
#ss-header {
display: flex;
align-items: center;
justify-content: space-between;
padding: 18px 20px;
border-bottom: 1px solid #e5e5e5;
flex-shrink: 0;
}
#ss-title {
font-size: 17px;
font-weight: 600;
color: #171717;
}
#ss-header button {
background: none;
border: none;
cursor: pointer;
padding: 4px;
color: #555;
line-height: 0;
}
#ss-body {
flex: 1;
min-height: 0;
overflow-y: auto;
padding: 18px 20px;
-webkit-overflow-scrolling: touch;
}
/* Results appear inline, not as a dropdown */
#ss-panel .search-form-wrapper { isolation: auto; }
#ss-panel .search-form__results {
position: static !important;
width: 100% !important;
border: none !important;
box-shadow: none !important;
border-radius: 0 !important;
margin-top: 10px !important;
}
#ss-panel .search-form__results-content {
padding: 0 !important;
}
/* Recommended */
#ss-recommended { margin-top: 20px; }
#ss-recommended-label {
font-size: 11px;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.06em;
color: #757575;
margin: 0 0 12px;
}
.ss-rec-item {
display: flex;
align-items: center;
gap: 12px;
padding: 10px 12px;
border: 1px solid #e5e5e5;
border-radius: 8px;
text-decoration: none;
margin-bottom: 8px;
transition: background 0.15s;
}
.ss-rec-item:hover { background: #fafafa; }
.ss-rec-item img,
.ss-rec-img-placeholder {
width: 72px;
height: 72px;
border-radius: 6px;
object-fit: cover;
flex-shrink: 0;
background: #f0f0f0;
}
.ss-rec-info {
flex: 1;
min-width: 0;
display: flex;
flex-direction: column;
gap: 4px;
}
.ss-rec-title {
font-size: 13px;
font-weight: 600;
color: #171717;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.ss-rec-price {
font-size: 13px;
color: #737373;
}
#ss-recommended.hidden { display: none; }
var _ssScrollY = 0;
function openSearchSidebar() {
_ssScrollY = window.pageYOffset || document.documentElement.scrollTop;
document.body.style.position = 'fixed';
document.body.style.top = '-' + _ssScrollY + 'px';
document.body.style.width = '100%';
document.getElementById('ss-panel').classList.add('open');
document.getElementById('ss-backdrop').classList.add('open');
setTimeout(function() {
var input = document.querySelector('#ss-panel [data-search-input]');
if (input) input.focus();
}, 320);
}
function closeSearchSidebar() {
document.getElementById('ss-panel').classList.remove('open');
document.getElementById('ss-backdrop').classList.remove('open');
document.body.style.position = '';
document.body.style.top = '';
document.body.style.width = '';
window.scrollTo(0, _ssScrollY);
}
// Hide recommended when typing, show when empty
document.addEventListener('DOMContentLoaded', function() {
var input = document.querySelector('#ss-panel [data-search-input]');
var rec = document.getElementById('ss-recommended');
if (!input || !rec) return;
input.addEventListener('input', function() {
if (input.value.trim().length > 0) {
rec.classList.add('hidden');
} else {
rec.classList.remove('hidden');
}
});
// Clear button also restores recommended
var clearBtn = document.querySelector('#ss-panel [data-search-clear]');
if (clearBtn) {
clearBtn.addEventListener('click', function() {
setTimeout(function() { rec.classList.remove('hidden'); }, 20);
});
}
});
document.addEventListener('keydown', function(e) {
if (e.key === 'Escape') closeSearchSidebar();
});
.favicon {display: block;}
(function() {
var initialCartState = [];
var previousCartStateKey = 'previousCartState';
var removedItemsKey = 'removedItemsState';
var previousCartState = [];
try {
previousCartState = JSON.parse(localStorage.getItem(previousCartStateKey) || '[]');
} catch (e) {
previousCartState = [];
}
var removedItems = previousCartState.filter(function(prevItem) {
return !initialCartState.some(function(currItem) {
return currItem.id === prevItem.id;
});
});
if (removedItems.length) {
localStorage.setItem(removedItemsKey, JSON.stringify(removedItems));
}
localStorage.setItem(previousCartStateKey, JSON.stringify(initialCartState));
})();
(function() {
var productId = "7883642765495";
var productTitle = "Whey Protein Isolate 10-Travel Packs";
var productHandle = "grass-fed-whey-protein-10-travel-packs";
var marketId = "21022965943";
var storageKey = 'oe_viewedProducts';
function trackViewedProducts() {
if (!productId) return;
var viewedProducts = [];
try {
viewedProducts = JSON.parse(localStorage.getItem(storageKey) || '[]');
} catch (e) {
viewedProducts = [];
}
viewedProducts = viewedProducts.filter(function(p) { return p.id !== productId; });
viewedProducts.unshift({
id: productId,
title: productTitle,
handle: productHandle,
viewedAt: new Date().toISOString()
});
viewedProducts = viewedProducts.slice(0, 50);
localStorage.setItem(storageKey, JSON.stringify(viewedProducts));
updateCartAttributes();
}
function updateCartAttributes() {
var viewedProducts = [];
try {
viewedProducts = JSON.parse(localStorage.getItem(storageKey) || '[]');
} catch (e) {
return;
}
var productIds = viewedProducts.map(function(p) { return p.id; }).slice(0, 10).join(',');
var cartAttributes = {};
if (productIds) cartAttributes['__upsell_recently_viewed_products'] = productIds;
if (marketId) cartAttributes['__upsell_market_id'] = marketId;
if (Object.keys(cartAttributes).length === 0) return;
fetch(window.Shopify.routes.root + 'cart/update.js', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ attributes: cartAttributes })
}).catch(function() {});
}
trackViewedProducts();
window.addEventListener('popstate', trackViewedProducts);
})();
window['ShopifyForms'] = {
...window['ShopifyForms'],
currentPageType: "product"
};
.recharge-theme {
/* App */
--recharge-app-background: #F9F8F4;
--recharge-app-container: 1200px;
--recharge-app-vertical-padding: 32px;
/* Brand colors */
--recharge-color-brand: #467C99;
/* Tints */
--recharge-color-brand-120: #38637a;
--recharge-color-brand-20: #6b96ad;
--recharge-color-brand-40: #90b0c2;
--recharge-color-brand-60: #b5cbd6;
--recharge-color-brand-75: #d1dee6;
--recharge-color-brand-85: #e3ebf0;
/* Neutral */
--recharge-color-neutral: hsl(201, 35%, 7%);
--recharge-color-neutral-80: hsl(201, 7%, 25%);
--recharge-color-neutral-70: hsl(201, 5%, 35%);
--recharge-color-neutral-40: hsl(201, 3%, 63%);
--recharge-color-neutral-10: hsl(201, 2%, 91%);
/* Links */
--recharge-button-secondary: #467C99;
--recharge-button-secondary-120: #38637a;
--recharge-button-secondary-60: #90b0c2;
/* Images */
--recharge-images-ratio: 1;
/* Cards */
--recharge-cards-background: #FFFFFF;
--recharge-cards-border-color: RGBA(0,0,0,0);
/* Fonts */
--recharge-typography-scale: 16px;
--recharge-typography-size-1: calc(3 * var(--recharge-typography-scale));
--recharge-typography-size-2: calc(2.25 * var(--recharge-typography-scale));
--recharge-typography-size-3: calc(1.625 * var(--recharge-typography-scale));
--recharge-typography-size-4: calc(1.25 * var(--recharge-typography-scale));
--recharge-typography-size-5: calc(1 * var(--recharge-typography-scale));
--recharge-typography-size-6: calc(.875 * var(--recharge-typography-scale));
/** Text **/
--recharge-typography-light: #FFFFFF;
--recharge-typography-primary: var(--recharge-color-neutral);
--recharge-typography-secondary: var(--recharge-color-neutral-70);
/* Corners */
--recharge-corners-radius: 8px;
--recharge-button-border-radius: 8px;
/* Views */
--recharge-views-background: #F9F8F4;
/* Buttons */
--recharge-button-font-family: inherit;
--recharge-button-brand: var(--recharge-color-brand);
--recharge-button-color: #FFFFFF;
}
| Nutrient | Per 100g | Per serving |
|---|---|---|
| Energy | 343.51kcal | 90kcal |
| Protein | 76.34g | 20g |
Price History
Loading...
