Yoga mats

Add a description here.


CorkTec Non Toxic Non Slip Thick Cork Yoga Mat

Chemical Free 4MM 72” x 24” cork yoga mat

Link

Amazon Basics: 1/2 inch thick yoga mat

This mat is fantastic for those harder floors. It provides enough cushion and support without being disruptive. 

Link

Gaiam 1/4 inch thick mat

The perfect everyday mat. Take this mat with you for both indoor and outdoor yoga experiences. Easy to clean and great on grassy areas.

Link

Retrospec Solana yoga mat 1/2 inch thick

This mat has a great texture and is another great mat for harder floors. Easy to clean and quick to dry. 

Link

Gaiam 1/4 inch thick non-slip mat

Gaiam mats have always been my favorite vesatile mat. easy to clean, store sway and bring to any occasion.

Link

Coolmoon 1/4 inch thich double-sided yoga mat

The perfect non-slip, double-sided yoga mat. 

Link

Balance from All Purpose 1/4 inch thich yoga mat

Simple basic yoga mat great for all occasions. Comes with carry strap!

Link
window.paypal .Buttons({ style: { shape: "rect", layout: "vertical", }, async createOrder() { try { const response = await fetch("/api/orders", { method: "POST", headers: { "Content-Type": "application/json", }, // use the "body" param to optionally pass additional order information // like product ids and quantities body: JSON.stringify({ cart: [ { id: "YOUR_PRODUCT_ID", quantity: "YOUR_PRODUCT_QUANTITY", }, ], }), }); const orderData = await response.json(); if (orderData.id) { return orderData.id; } else { const errorDetail = orderData?.details?.[0]; const errorMessage = errorDetail ? `${errorDetail.issue} ${errorDetail.description} (${orderData.debug_id})` : JSON.stringify(orderData); throw new Error(errorMessage); } } catch (error) { console.error(error); resultMessage(`Could not initiate PayPal Checkout...

${error}`); } }, async onApprove(data, actions) { try { const response = await fetch(`/api/orders/${data.orderID}/capture`, { method: "POST", headers: { "Content-Type": "application/json", }, }); const orderData = await response.json(); // Three cases to handle: // (1) Recoverable INSTRUMENT_DECLINED -> call actions.restart() // (2) Other non-recoverable errors -> Show a failure message // (3) Successful transaction -> Show confirmation or thank you message const errorDetail = orderData?.details?.[0]; if (errorDetail?.issue === "INSTRUMENT_DECLINED") { // (1) Recoverable INSTRUMENT_DECLINED -> call actions.restart() // recoverable state, per https://developer.paypal.com/docs/checkout/standard/customize/handle-funding-failures/ return actions.restart(); } else if (errorDetail) { // (2) Other non-recoverable errors -> Show a failure message throw new Error(`${errorDetail.description} (${orderData.debug_id})`); } else if (!orderData.purchase_units) { throw new Error(JSON.stringify(orderData)); } else { // (3) Successful transaction -> Show confirmation or thank you message // Or go to another URL: actions.redirect('thank_you.html'); const transaction = orderData?.purchase_units?.[0]?.payments?.captures?.[0] || orderData?.purchase_units?.[0]?.payments?.authorizations?.[0]; resultMessage( `Transaction ${transaction.status}: ${transaction.id}

See console for all available details`, ); console.log( "Capture result", orderData, JSON.stringify(orderData, null, 2), ); } } catch (error) { console.error(error); resultMessage( `Sorry, your transaction could not be processed...

${error}`, ); } }, }) .render("#paypal-button-container"); // Example function to show a result to the user. Your site's UI library can be used instead. function resultMessage(message) { const container = document.querySelector("#result-message"); container.innerHTML = message; }