Back to Compare


Momentous
Collagen Shot 15-Packs Orange Mango 15 Packs
PricePrice
£2.267
ProProtein
10.0g

Momentous
Protein
10g
/50g
Per serving. % values based on daily recommended intake.
Collagen Shot 15-Packs Orange Mango 15 Packs
Momentous
PricePrice
£2.267
ProProtein
10.0g
Flavour
Momentous
Flavour
Momentous
Price History
Loading...
Description
Collagen Shot 15-Packs provide 10g of hydrolyzed bovine collagen peptides and 35mg of vitamin C in a convenient, ready-to-drink format, scientifically formulated to support joint health, tendon and ligament strength, and faster recovery. Taken daily, especially before training, this NSF Certified for Sport® collagen s
Ingredients
Sour Watermelon: Hydrolyzed Collagen (Bovine) 10g, Vitamin C 35mg
Other Ingredients: Water, Fructose, Citric Acid, Watermelon Juice Concentrate, Natural Flavor, Ascorbic Acid, Reb M*, Potassium Sorbate, Sodium Benzoate, Monk Fruit Extract
Orange Mango: Hydrolyzed Collagen (Bovine) 10g, Vitamin C 35mg
Other Ingredients: Water, Fructose, Tangerine Juice Concentrate, Citric Acid, Orange Juice Concentrate, Natural Flavor, Ascorbic Acid, Reb M, Potassium Sorbate, Sodium Benzoate, Monk Fruit Extract.
Free from: Gluten, dairy, soy, nuts.
*Reb M is a natural, plant-based sweetener with zero glycemic response or aftertaste. Our Reb M is made from fermented rice 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
When to use: Daily, ideally 30-60 minutes before exercise
Onset time: Early improvements in 2–4 weeks
Expected results: 8–12 weeks for measurable improvements in joint comfort, flexibility, and tissue resilience; long-term benefits with ongoing use
Clinical Research & 3rd Party Test Results
There are 5 credible reviews and studies related to this product:
1. Vitamin C-enriched gelatin supplementation before intermittent activity augments collagen synthesis
2. Effects of different vitamin C–enriched collagen derivatives on collagen synthesis
3. Collagen and Vitamin C Supplementation Increases Lower Limb Rate of Force Development
4. Change in knee osteoarthritis cartilage detected by delayed gadolinium enhanced magnetic resonance imaging following treatment with collagen hydrolysate: a pilot randomized controlled trial
5. Biological effect of hydrolyzed collagen on bone metabolism
Build Your Stack
Upgraded Formula
{const lazyImages = window.lazyImages = window.lazyImages || []
const el = document.querySelector("#image4641")
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;
}
Best Seller
{const lazyImages = window.lazyImages = window.lazyImages || []
const el = document.querySelector("#image9294")
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
10g collagen + 5g FORTIGEL® for soft tissue strength
Includes Vitamin C to support collagen synthesis
Supports mobility, skin elasticity, and resilience
£30.00
£40.00
Add to Bag
Collagen Peptides
Subscribe & Save 25%
£
30.00
£ 40.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
£ 40.00
£
40.00
£ 40.00
£
40.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
Subscribe & Save 25%
£
30.00
£ 40.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
£ 40.00
£
40.00
£ 40.00
£
40.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;
}
Best Seller
{const lazyImages = window.lazyImages = window.lazyImages || []
const el = document.querySelector("#image7525")
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("#image1557")
if(el && window.lazyImageFn) window.lazyImageFn(el);
else if(el) lazyImages.push(el)
}
4.5
Rated 4.5 out of 5 stars
310
{"averageRating":"4.5","reviewCount":310}
Creatine Chews 150-Count
New Signature Spec creatine quality designation
Guaranteed 1g of creatine in every chew
Clinically studied to support strength and cognitive function*
£29.25
£39.00
Add to Bag
Creatine Chews 150-Count
Flavor:
Lemon LimeMangoStrawberry
Subscribe & Save 25%
£
29.25
£ 39.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
£ 39.00
£
39.00
£ 39.00
£
39.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 Chews 150-Count
Flavor:
Lemon LimeMangoStrawberry
Subscribe & Save 25%
£
29.25
£ 39.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
£ 39.00
£
39.00
£ 39.00
£
39.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("#image5743")
if(el && window.lazyImageFn) window.lazyImageFn(el);
else if(el) lazyImages.push(el)
}
4.9
Rated 4.9 out of 5 stars
143
{"averageRating":"4.9","reviewCount":143}
Vitamin D3 2000 IU
Supports calcium absorption for bone strength and muscle function
Promotes immune health and inflammation balance
Delivered in organic extra virgin olive oil for superior bioavailability
£10.50
£14.00
Add to Bag
Vitamin D3 2000 IU
Subscribe & Save 25%
£
10.50
£ 14.00
Out of Stock Protection
10% off future deliveries
Cancel or reschedule anytime
Experience long-term results
Delivery every 2 months
Delivery every 1 month
Delivery every 3 months
One-time Purchase
£ 14.00
£
14.00
£ 14.00
£
14.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;
}
Vitamin D3 2000 IU
Subscribe & Save 25%
£
10.50
£ 14.00
Out of Stock Protection
10% off future deliveries
Cancel or reschedule anytime
Experience long-term results
Delivery every 2 months
Delivery every 1 month
Delivery every 3 months
One-time Purchase
£ 14.00
£
14.00
£ 14.00
£
14.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--20282418856119__horizontal_line_LU9df3 {
padding-top: 0px;
padding-bottom: 10px;
}
@media (max-width: 1023px) {
#shopify-section-template--20282418856119__horizontal_line_LU9df3 {
padding-top: 0px;
padding-bottom: 20px;
}
}
Frequently Asked Questions
How is Collagen Shot different from other collagen supplements?
Unlike powders or capsules, Collagen Shot delivers a clinically supported dose of 10g hydrolyzed collagen plus 35mg vitamin C in a ready-to-drink format. This combination has been shown to increase collagen synthesis when taken before training.
Why take collagen before training instead of after?
Research shows that collagen plus vitamin C taken 30-60 minutes before exercise directs collagen synthesis to tendons and ligaments—helping strengthen and repair the tissues you’re about to load.
Why is vitamin C included?
Vitamin C is an essential cofactor in collagen production. Without it, your body can’t effectively assemble new collagen fibers. We include 35mg to maximize absorption and tissue repair.
Can Collagen Shot help with injury prevention?
Yes. Stronger connective tissues are more resistant to strain and overuse injuries. By supporting collagen synthesis, Collagen Shot helps reinforce the structural foundation that keeps you moving well.
Why use hydrolyzed collagen?
Hydrolyzed collagen is broken down into smaller peptides, making it easier for your body to absorb and use for rebuilding connective tissue.
How does the ready-to-drink format help me?
No mixing, no measuring, no mess—just grab, twist, and drink. This makes it easy to be consistent, which is the most important factor for results.
Is this product NSF Certified?
Yes, our Collagen Shots are always NSF Certified for Sport®. NSF Certification ensures purity and potency, with every batch tested for heavy metals, harmful additives, and label claim accuracy to meet the highest standards.
Trusted by professional sports teams and elite athletes, Collagen Shot is designed for anyone who wants to strengthen joints, improve recovery, and maintain peak Performance For Life™.
4.7
Rated 4.7 out of 5 stars
Based on 106 reviews
5 Rated out of 5 stars
92
Total 5 star reviews: 92 4 Rated out of 5 stars
5
Total 4 star reviews: 5 3 Rated out of 5 stars
5
Total 3 star reviews: 5 2 Rated out of 5 stars
1
Total 2 star reviews: 1 1 Rated out of 5 stars
3
Total 1 star reviews: 3
92%would recommend this product
Reviews Summary
Generated by AI from 97 most recent customer reviews
Last updated 5 months ago
Customers say these collagen shots are extremely convenient for on-the-go use, particularly for travel and pre-workout routines. Many reviews mention the grab-and-go packaging makes them ideal for busy lifestyles. Common feedback includes praise for the taste, with most finding the flavor pleasant, though some note it's quite sweet or tangy. Several users report positive experiences with joint comfort during workouts. While most appreciate the smooth texture and easy consumption, a few find the consistency off-putting. Reviews consistently highlight the convenience factor over powder alternatives.
Read More
Customers Talked About
Taste
Convenience
Packaging
Fitness
Texture
Filters
Write a Review (Opens in a new window)
106 reviews
Sort Most RecentPhotos & VideosMost HelpfulHighest RatingOldestLowest RatingLeast Helpful
JB
Jeff B.
Verified Buyer
Product Standouts Taste + Texture, Ease of Use, Results, Trust and Transparency
22 seconds ago
Product Standouts Taste + Texture, Ease of Use, Results, Trust and Transparency
Rated 5 out of 5 stars
Life changing
I wish I knew about these supplements years ago, I was taking these only once or twice a week when I first got them just to see how my body reacted, I now take this every other day and I can definitely tell my body recovers a lot faster and my ailing knee feels better than ever before.
I highly recommend
Read MoreRead more about this review
Was this helpful?Yes, this review from Jeff B. was helpful. 0 people voted yesNo, this review from Jeff B. was not helpful. 0 people voted no
K
Kevin
2 months ago
Rated 5 out of 5 stars
5 Stars
Like the ease of use of the product
Dislike the high price
It seems to be effective
Read MoreRead more about this review
Was this helpful?Yes, this review from Kevin was helpful. 0 people voted yesNo, this review from Kevin was not helpful. 0 people voted no
JP
John P. G.
Verified Buyer
Product Standouts Taste + Texture, Ease of Use, Results
3 months ago
Product Standouts Taste + Texture, Ease of Use, Results
Rated 5 out of 5 stars
It works!
When you're 71 and your complexion starts drying out and you appear scaly, you could settle for "no one's looking anyway". I tried them anyway for general purposes. Within 2 months of taking a daily dose, my skin is smooth and clear. I like the taste as well.
Read MoreRead more about this review
Was this helpful?Yes, this review from John P. G. was helpful. 1 person voted yesNo, this review from John P. G. was not helpful. 1 person voted no
AS
ANISSA S.
Verified Buyer
3 months ago
Rated 5 out of 5 stars
YUM!
So good!
Read MoreRead more about this review
Was this helpful?Yes, this review from ANISSA S. was helpful. 0 people voted yesNo, this review from ANISSA S. was not helpful. 0 people voted no
A
Anna
Verified Buyer
4 months ago
Rated 5 out of 5 stars
Finally! This one's a winner
Finally! A flavor that tastes great and the best performing collagen product I've used!
Read MoreRead more about this review
Was this helpful?Yes, this review from Anna was helpful. 1 person voted yesNo, this review from Anna was not helpful. 0 people voted no
Loading...
Loading...
Show More
{"areReviewsGrouped":false,"chatAssistant":{"reviewCount":106},"media":[],"productAttributes":[],"questionCount":0,"reviewAggregate":{"dateUpdated":"2026-07-25T15:09:07.765Z","mediaCount":0,"productAttributeCount":[{"title":"Product Standouts","type":"multi-value","options":[{"title":"Taste + Texture","count":2},{"title":"Ease of Use","count":2},{"title":"Results","count":2},{"title":"Trust and Transparency","count":1}]}],"productId":"shopify-7099659321527","productName":"Collagen Shot 15-Packs","ratingAndReviewCount":106,"ratingAndReviewCountByLevel":{"level1Count":3,"level2Count":1,"level3Count":5,"level4Count":5,"level5Count":92},"ratingAndReviewValuesTotal":500,"ratingCount":0,"ratingCountByLevel":{},"ratingValuesTotal":0,"recommendationCount":97,"replyCount":0,"replyWordsTotal":0,"reviewCount":106,"reviewCountByLevel":{"level1Count":3,"level2Count":1,"level3Count":5,"level4Count":5,"level5Count":92},"reviewRatingValuesTotal":500,"reviewWordsTotal":2379,"subscriberId_productId":"72adcf9f-ede7-4232-8bc6-db71fceaf77c:shopify-7099659321527","subscriberId":"72adcf9f-ede7-4232-8bc6-db71fceaf77c"},"reviews":[{"subscriberId":"72adcf9f-ede7-4232-8bc6-db71fceaf77c","reviewId":"10f75742-3d74-40fd-a345-55cf0d7debca","subscriberId_productId":"72adcf9f-ede7-4232-8bc6-db71fceaf77c:shopify-7099659321527","productId":"shopify-7099659321527","body":"I wish I knew about these supplements years ago, I was taking these only once or twice a week when I first got them just to see how my body reacted, I now take this every other day and I can definitely tell my body recovers a lot faster and my ailing knee feels better than ever before.\n\nI highly recommend ","dateCreated":"2026-07-25T15:09:07.089Z","dateUpdated":"2026-07-25T15:09:07.089Z","helpfulCount":0,"isRecommended":true,"languageCode":"en","productAttributes":[{"title":"Product Standouts","type":"multi-value","value":["Taste + Texture","Ease of Use","Results","Trust and Transparency"]}],"productHandle":"collagen-shot-15-packs","productImageUrl":"https://cdn.shopify.com/s/files/1/1400/2351/files/Collagen_Shot_Watermelon-Carton_x280.png?v=1773347638","productName":"Collagen Shot 15-Packs","productUrl":"//www.livemomentous.com/products/collagen-shot-15-packs","productVariantName":"Sour Watermelon","rating":5,"reviewer":{"displayName":"Jeff B.","isVerified":true},"isIncentivized":false,"status":"approved","title":"Life changing","unhelpfulCount":0,"variantId":"45957685936311"},{"subscriberId":"72adcf9f-ede7-4232-8bc6-db71fceaf77c","reviewId":"44f26390-d512-4fce-8618-ca0d74200b66","subscriberId_productId":"72adcf9f-ede7-4232-8bc6-db71fceaf77c:shopify-7099659321527","productId":"shopify-7099659321527","body":"Like the ease of use of the product \nDislike the high price \nIt seems to be effective","dateCreated":"2026-05-02T23:03:56.000Z","dateUpdated":"2026-05-02T23:03:56.000Z","externalProvider":"shopify-shop","helpfulCount":0,"isRecommended":true,"languageCode":"en","productHandle":"collagen-shot-15-packs","productImageUrl":"https://cdn.shopify.com/s/files/1/1400/2351/files/Collagen_Shot_Watermelon-Carton_x280.png?v=1773347638","productName":"Collagen Shot 15-Packs","productUrl":"//www.livemomentous.com/products/collagen-shot-15-packs","productVariantName":"Sour Watermelon","rating":5,"reviewer":{"displayName":"Kevin"},"isIncentivized":false,"status":"approved","title":"5 Stars","unhelpfulCount":0,"variantId":"45957685936311"},{"subscriberId":"72adcf9f-ede7-4232-8bc6-db71fceaf77c","reviewId":"3f870641-599c-45c9-a40b-dd7cb996fe4f","subscriberId_productId":"72adcf9f-ede7-4232-8bc6-db71fceaf77c:shopify-7099659321527","productId":"shopify-7099659321527","body":"When you're 71 and your complexion starts drying out and you appear scaly, you could settle for \"no one's looking anyway\". I tried them anyway for general purposes. Within 2 months of taking a daily dose, my skin is smooth and clear. I like the taste as well. \n","dateCreated":"2026-04-08T20:13:41.752Z","dateUpdated":"2026-04-08T20:13:41.752Z","helpfulCount":1,"isRecommended":true,"languageCode":"en","productAttributes":[{"title":"Product Standouts","type":"multi-value","value":["Taste + Texture","Ease of Use","Results"]}],"productHandle":"collagen-shot-15-packs","productImageUrl":"https://cdn.shopify.com/s/files/1/1400/2351/files/Collagen_Shot_Watermelon-Carton_x280.png?v=1773347638","productName":"Collagen Shot 15-Packs","productUrl":"//www.livemomentous.com/products/collagen-shot-15-packs","productVariantName":"Wild Berry","rating":5,"reviewer":{"displayName":"John P. G.","isVerified":true},"isIncentivized":false,"status":"approved","title":"It works!","unhelpfulCount":1,"variantId":"45158979010743"},{"subscriberId":"72adcf9f-ede7-4232-8bc6-db71fceaf77c","reviewId":"a0f7f90c-50c6-4c49-bd2f-162d4bd04d8d","subscriberId_productId":"72adcf9f-ede7-4232-8bc6-db71fceaf77c:shopify-7099659321527","productId":"shopify-7099659321527","body":"So good!","dateCreated":"2026-04-06T18:38:59.208Z","dateUpdated":"2026-04-06T18:38:59.208Z","helpfulCount":0,"isRecommended":true,"languageCode":"en","productHandle":"collagen-shot-15-packs","productImageUrl":"https://cdn.shopify.com/s/files/1/1400/2351/files/Collagen_Shot_Watermelon-Carton_x280.png?v=1773347638","productName":"Collagen Shot 15-Packs","productUrl":"//www.livemomentous.com/products/collagen-shot-15-packs","productVariantName":"Wild Berry","rating":5,"reviewer":{"displayName":"ANISSA S.","isVerified":true},"isIncentivized":false,"status":"approved","title":"YUM!","unhelpfulCount":0,"variantId":"45158979010743"},{"subscriberId":"72adcf9f-ede7-4232-8bc6-db71fceaf77c","reviewId":"f6d5f91c-3012-4221-b876-0bde8567f9bc","subscriberId_productId":"72adcf9f-ede7-4232-8bc6-db71fceaf77c:shopify-7099659321527","productId":"shopify-7099659321527","body":"Finally! A flavor that tastes great and the best performing collagen product I've used!","dateCreated":"2026-03-04T23:29:23.000Z","dateUpdated":"2026-03-04T23:29:23.000Z","helpfulCount":1,"isRecommended":true,"languageCode":"en","productHandle":"collagen-shot-15-packs","productImageUrl":"https://cdn.shopify.com/s/files/1/1400/2351/files/Collagen_Shot_Watermelon-Carton_x280.png?v=1773347638","productName":"Collagen Shot 15-Packs","productUrl":"//www.livemomentous.com/products/collagen-shot-15-packs","rating":5,"reviewer":{"displayName":"Anna","isVerified":true},"isIncentivized":false,"status":"approved","title":"Finally! This one's a winner","unhelpfulCount":0}],"reviewsKeywords":{"keywordTopics":[{"keywords":[{"name":"taste","occurrences":24},{"name":"flavor","occurrences":15},{"name":"sweetness","occurrences":3},{"name":"berry flavor","occurrences":1},{"name":"wild berry flavor","occurrences":1}],"topic":"Taste"},{"keywords":[{"name":"convenience","occurrences":24},{"name":"portability","occurrences":11},{"name":"ease of use","occurrences":6},{"name":"travel","occurrences":4},{"name":"ease","occurrences":1}],"topic":"Convenience"},{"keywords":[{"name":"packaging","occurrences":5},{"name":"gel form","occurrences":1},{"name":"pack size","occurrences":1},{"name":"packets","occurrences":1},{"name":"size","occurrences":1}],"topic":"Packaging"},{"keywords":[{"name":"workout","occurrences":5},{"name":"routine","occurrences":3},{"name":"post workout","occurrences":1},{"name":"recovery","occurrences":1},{"name":"training","occurrences":1},{"name":"workout timing","occurrences":1}],"topic":"Fitness"},{"keywords":[{"name":"consistency","occurrences":1},{"name":"drinkability","occurrences":1},{"name":"texture","occurrences":1},{"name":"viscosity","occurrences":1}],"topic":"Texture"},{"keywords":[{"name":"digestibility","occurrences":2},{"name":"digestion","occurrences":1},{"name":"stomach","occurrences":1}],"topic":"Digestion"},{"keywords":[{"name":"collagen","occurrences":2},{"name":"quality","occurrences":2},{"name":"joint pain","occurrences":1},{"name":"protein","occurrences":1},{"name":"skin","occurrences":1},{"name":"Vitamin C","occurrences":1}],"topic":"Health"}],"languageCode":"en"},"reviewsNextUrl":"https://api.okendo.io/v1/stores/72adcf9f-ede7-4232-8bc6-db71fceaf77c/products/shopify-7099659321527/reviews?limit=5&orderBy=date%20desc&lastEvaluated=%7B%22subscriberId%22%3A%2272adcf9f-ede7-4232-8bc6-db71fceaf77c%22%2C%22reviewId%22%3A%22f6d5f91c-3012-4221-b876-0bde8567f9bc%22%2C%22dateCreated%22%3A%222026-03-04T23%3A29%3A23.000Z%22%2C%22subscriberId_productId%22%3A%2272adcf9f-ede7-4232-8bc6-db71fceaf77c%3Ashopify-7099659321527%22%7D","reviewsSummary":{"body":"Customers say these collagen shots are extremely convenient for on-the-go use, particularly for travel and pre-workout routines. Many reviews mention the grab-and-go packaging makes them ideal for busy lifestyles. Common feedback includes praise for the taste, with most finding the flavor pleasant, though some note it's quite sweet or tangy. Several users report positive experiences with joint comfort during workouts. While most appreciate the smooth texture and easy consumption, a few find the consistency off-putting. Reviews consistently highlight the convenience factor over powder alternatives.","contributingReviewCount":97,"dateGenerated":"2026-02-06T00:06:57.338Z","datePublished":"2026-02-17T02:07:12.431Z","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": "Collagen Shot 15-Packs",
"url": "https:\/\/www.livemomentous.com\/products\/collagen-shot-15-packs",
"image":"https:\/\/www.livemomentous.com\/cdn\/shop\/files\/Collagen_Shot_Watermelon-Carton.png?v=1773347638\u0026width=1000","description": "Collagen Shot 15-Packs provide 10g of hydrolyzed bovine collagen peptides and 35mg of vitamin C in a convenient, ready-to-drink format, scientifically formulated to support joint health, tendon and ligament strength, and faster recovery. \n\nTaken daily, especially before training, this NSF Certified for Sport® collagen supplement promotes collagen synthesis, improves mobility, and helps maintain the structural integrity of connective tissues for long-term performance and injury prevention. Ideal for athletes, active individuals, and anyone seeking to protect joints, enhance recovery, and support healthy aging.","sku": "850072768038","brand": {
"@type": "Brand",
"name": "Momentous"
},"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.7",
"reviewCount": "106",
"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": "850072768038","gtin12": "850072768038","itemCondition": "https://schema.org/NewCondition",
"availability": "https://schema.org/InStock",
"price": 32.0,
"priceCurrency": "GBP",
"url": "https:\/\/www.livemomentous.com\/products\/collagen-shot-15-packs?variant=45957685936311","priceSpecification": [
{
"@type": "UnitPriceSpecification",
"price": 32.0,
"priceCurrency": "GBP",
"name": "One-Time Purchase"
},
{
"@type": "UnitPriceSpecification",
"price": 24.0,
"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": "850014080730","gtin12": "850014080730","itemCondition": "https://schema.org/NewCondition",
"availability": "https://schema.org/InStock",
"price": 32.0,
"priceCurrency": "GBP",
"url": "https:\/\/www.livemomentous.com\/products\/collagen-shot-15-packs?variant=45158978977975","priceSpecification": [
{
"@type": "UnitPriceSpecification",
"price": 32.0,
"priceCurrency": "GBP",
"name": "One-Time Purchase"
},
{
"@type": "UnitPriceSpecification",
"price": 24.0,
"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": "Athletic Performance",
"item": "https:\/\/www.livemomentous.com\/collections\/athletic-performance"
},
{
"@type": "ListItem",
"position": 3,
"name": "Collagen Shot 15-Packs",
"item": "https:\/\/www.livemomentous.com\/products\/collagen-shot-15-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 = '45957685936311';
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;}
.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;
}
(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 = "7099659321527";
var productTitle = "Collagen Shot 15-Packs";
var productHandle = "collagen-shot-15-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"
}; Nutrient Per serving Protein 10g
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 = '45957685936311';
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;}
.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;
}
(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 = "7099659321527";
var productTitle = "Collagen Shot 15-Packs";
var productHandle = "collagen-shot-15-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"
}; Nutrient Per serving Protein 10g
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;}
.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;
}
(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 = "7099659321527";
var productTitle = "Collagen Shot 15-Packs";
var productHandle = "collagen-shot-15-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"
}; Nutrient Per serving Protein 10g
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;}
.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;
}
(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 = "7099659321527";
var productTitle = "Collagen Shot 15-Packs";
var productHandle = "collagen-shot-15-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"
}; Nutrient Per serving Protein 10g
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;}
.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;
}
(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 = "7099659321527";
var productTitle = "Collagen Shot 15-Packs";
var productHandle = "collagen-shot-15-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"
}; Nutrient Per serving Protein 10g
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;}
.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;
}
(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 = "7099659321527";
var productTitle = "Collagen Shot 15-Packs";
var productHandle = "collagen-shot-15-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"
};
| Nutrient | Per serving |
|---|---|
| Protein | 10g |
Price History
Loading...
