Weight Tree
.tree-hero { --tr-bg: #f5f1ea; --tr-ink: #2a2a2a; --tr-white: #ffffff; --tr-off: #faf7f2; --tr-sand: #e8e0d3; --tr-black: #111111; --tr-accent: #1972bc;re --tr-accent-d: #155a96; - -tr-muted: #8a8378; --fo: "Oswald", Impact, sans-serif; --fd: "Bebas Neue", Impact, sans-serif; --fb: "Barlow", system-ui, sans-serif; --fc: "Barlow Condensed", system-ui, sans-serif; background: var(--tr-bg); color: var(--tr-ink); padding: 24px 16px 48px; box-sizing: border-box; } .tree-hero *, .tree-hero *::before, .tree-hero *::after { box-sizing: border-box; } .tree-hero__grid { max-width: 1240px; margin: 0 auto; display: grid; grid-template-columns: 1fr; gap: 24px; } @media (min-width: 860px) { .tree-hero { padding: 40px 24px 64px; } .tree-hero__grid { grid-template-columns: 1.1fr 1fr; gap: 48px; align-items: start; } } /* ---------- Stock state toggle ---------- */ .tree-hero .tree-block--in, .tree-hero .tree-block--out { display: none; } .tree-hero[data-stock="in"] .tree-block--in { display: flex; flex-direction: column; gap: 10px; } .tree-hero[data-stock="in"] .tree-stock--in { display: flex; } .tree-hero[data-stock="out"] .tree-block--out { display: flex; flex-direction: column; gap: 10px; } .tree-hero[data-stock="out"] .tree-stock--out { display: flex; } .tree-stock--in, .tree-stock--out { display: none; } /* ---------- Gallery slider ---------- */ .tree-gallery { display: flex; flex-direction: column; gap: 10px; } .tree-gallery__stage { position: relative; background: var(--tr-white); border-radius: 6px; overflow: hidden; aspect-ratio: 1 / 1; } .tree-gallery__track { display: flex; width: 100%; height: 100%; overflow-x: auto; scroll-snap-type: x mandatory; scroll-behavior: smooth; scrollbar-width: none; -ms-overflow-style: none; } .tree-gallery__track::-webkit-scrollbar { display: none; } .tree-gallery__slide { flex: 0 0 100%; width: 100%; height: 100%; scroll-snap-align: start; scroll-snap-stop: always; } .tree-gallery__slide img { width: 100%; height: 100%; object-fit: cover; display: block; } .tree-gallery__badge { position: absolute; top: 12px; left: 12px; background: var(--tr-black); color: var(--tr-white); font-family: var(--fc); font-size: 12px; letter-spacing: .08em; text-transform: uppercase; padding: 6px 10px; border-radius: 6px; z-index: 3; pointer-events: none; } .tree-gallery__arrow { position: absolute; top: 50%; transform: translateY(-50%); width: 44px; height: 44px; background: rgba(255,255,255,.92); border: 0; border-radius: 50%; display: flex; align-items: center; justify-content: center; cursor: pointer; z-index: 3; transition: background .12s ease, transform .12s ease, opacity .12s ease; color: var(--tr-black); box-shadow: 0 2px 12px rgba(0,0,0,.12); } .tree-gallery__arrow:hover { background: var(--tr-white); transform: translateY(-50%) scale(1.06); } .tree-gallery__arrow:active { transform: translateY(-50%) scale(.96); } .tree-gallery__arrow:disabled { opacity: .35; cursor: not-allowed; } .tree-gallery__arrow svg { width: 20px; height: 20px; } .tree-gallery__arrow--prev { left: 12px; } .tree-gallery__arrow--next { right: 12px; } .tree-gallery__counter { position: absolute; bottom: 12px; right: 12px; background: rgba(0,0,0,.65); color: var(--tr-white); font-family: var(--fc); font-size: 11px; letter-spacing: .08em; padding: 4px 10px; border-radius: 999px; z-index: 3; pointer-events: none; } .tree-gallery__dots { display: flex; justify-content: center; gap: 6px; padding: 4px 0 0; } .tree-gallery__dot { width: 7px; height: 7px; border: 0; border-radius: 50%; background: var(--tr-sand); cursor: pointer; transition: background .15s ease, transform .15s ease; padding: 0; } .tree-gallery__dot[aria-current="true"] { background: var(--tr-accent); transform: scale(1.3); } /* ---------- Info column ---------- */ .tree-info { display: flex; flex-direction: column; gap: 16px; } .tree-info__eyebrow { font-family: var(--fc); font-size: 13px; letter-spacing: .14em; text-transform: uppercase; color: var(--tr-accent); } .tree-info__title { font-family: var(--fo); font-weight: 600; font-size: clamp(32px, 4.6vw, 50px); line-height: 1; text-transform: uppercase; margin: 0; color: var(--tr-black); } .tree-info__subtitle { font-family: var(--fb); font-size: 16px; line-height: 1.5; color: var(--tr-ink); margin: 0; max-width: 54ch; } .tree-info__reviews { display: flex; align-items: center; gap: 10px; font-family: var(--fb); font-size: 14px; color: var(--tr-muted); } .tree-info__stars { color: #d7d0c2; letter-spacing: 2px; } /* ---------- Feature pills ---------- */ .tree-features { display: grid; grid-template-columns: repeat(2, 1fr); gap: 8px; } @media (min-width: 500px) { .tree-features { grid-template-columns: repeat(4, 1fr); } } .tree-features__item { display: flex; flex-direction: column; align-items: center; text-align: center; gap: 6px; padding: 12px 8px; background: var(--tr-white); border-radius: 6px; } .tree-features__icon { width: 28px; height: 28px; color: var(--tr-accent); } .tree-features__icon svg { width: 100%; height: 100%; } .tree-features__label { font-family: var(--fc); font-size: 11px; letter-spacing: .08em; text-transform: uppercase; color: var(--tr-ink); line-height: 1.2; font-weight: 600; } /* ---------- Price row ---------- */ .tree-info__price-row { display: flex; align-items: baseline; gap: 12px; padding-top: 4px; flex-wrap: wrap; } .tree-info__price { font-family: var(--fo); font-size: 30px; font-weight: 600; color: var(--tr-black); } .tree-info__installments { font-family: var(--fb); font-size: 13px; color: var(--tr-ink); } .tree-info__installments b { font-weight: 600; } /* ---------- Variant selector (Wheels vs No Wheels) ---------- */ .tree-variants { display: flex; flex-direction: column; gap: 10px; } .tree-variants__label { display: flex; align-items: baseline; justify-content: space-between; font-family: var(--fc); font-size: 12px; letter-spacing: .1em; text-transform: uppercase; color: var(--tr-ink); } .tree-variants__label b { font-family: var(--fd); font-size: 16px; color: var(--tr-black); letter-spacing: .04em; font-weight: 400; } .tree-variants__cards { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; } .tree-variants__card { position: relative; display: flex; flex-direction: column; gap: 8px; padding: 14px 14px 16px; background: var(--tr-white); border: 2px solid transparent; border-radius: 6px; cursor: pointer; text-align: left; font-family: var(--fb); transition: border-color .12s ease, transform .12s ease; } .tree-variants__card:hover { border-color: var(--tr-sand); } .tree-variants__card[aria-pressed="true"] { border-color: var(--tr-accent); background: var(--tr-off); } .tree-variants__card[aria-pressed="true"]::before { content: ""; position: absolute; top: -1px; right: -1px; width: 22px; height: 22px; background: var(--tr-accent) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='3.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'/%3E%3C/svg%3E") center/14px no-repeat; border-radius: 0 6px 0 6px; } .tree-variants__card-icon { width: 36px; height: 36px; color: var(--tr-accent); } .tree-variants__card-icon svg { width: 100%; height: 100%; } .tree-variants__card-name { font-family: var(--fd); font-size: 22px; letter-spacing: .04em; color: var(--tr-black); line-height: 1; } .tree-variants__card-meta { font-family: var(--fb); font-size: 12px; color: var(--tr-muted); line-height: 1.35; } .tree-variants__card-tag { align-self: flex-start; font-family: var(--fc); font-size: 10px; letter-spacing: .1em; text-transform: uppercase; color: var(--tr-white); background: var(--tr-accent); padding: 3px 8px; border-radius: 4px; font-weight: 600; margin-top: 2px; } .tree-variants__card[data-available="false"] { opacity: .55; cursor: not-allowed; } .tree-variants__card[data-available="false"]::after { content: "Sold out"; position: absolute; bottom: 6px; right: 8px; font-family: var(--fc); font-size: 10px; letter-spacing: .08em; text-transform: uppercase; color: #c0392b; } /* ---------- Specs strip ---------- */ .tree-specs { display: grid; grid-template-columns: repeat(3, 1fr); gap: 1px; background: var(--tr-sand); border-radius: 6px; overflow: hidden; } .tree-specs__cell { background: var(--tr-white); padding: 12px 10px; text-align: center; } .tree-specs__k { font-family: var(--fc); font-size: 11px; letter-spacing: .1em; text-transform: uppercase; color: var(--tr-ink); opacity: .7; } .tree-specs__v { font-family: var(--fd); font-size: 22px; line-height: 1; margin-top: 4px; letter-spacing: .02em; color: var(--tr-black); } /* ---------- Stock lines ---------- */ .tree-stock { font-family: var(--fb); font-size: 13px; color: var(--tr-ink); align-items: center; gap: 8px; padding: 10px 12px; background: var(--tr-white); border-radius: 6px; } .tree-stock__dot { width: 8px; height: 8px; border-radius: 50%; flex: 0 0 8px; } .tree-stock--in .tree-stock__dot { background: #2ecc71; box-shadow: 0 0 0 3px rgba(46,204,113,.2); } .tree-stock--out .tree-stock__dot { background: #e25c3b; box-shadow: 0 0 0 3px rgba(226,92,59,.2); } /* ---------- Add-to-cart ---------- */ .tree-cta__btn { display: flex; align-items: center; justify-content: center; gap: 10px; width: 100%; background: var(--tr-accent); color: var(--tr-white); font-family: var(--fo); font-size: 18px; letter-spacing: .06em; text-transform: uppercase; border: 0; border-radius: 6px; padding: 16px 20px; cursor: pointer; transition: transform .12s ease, background .12s ease; } .tree-cta__btn:hover { background: var(--tr-accent-d); } .tree-cta__btn:active { transform: scale(.98); } /* ---------- Notify form ---------- */ .tree-notify__label { font-family: var(--fc); font-size: 12px; letter-spacing: .1em; text-transform: uppercase; color: var(--tr-ink); margin: 0; } .tree-notify__row { display: flex; gap: 8px; } .tree-notify__input { flex: 1; font-family: var(--fb); font-size: 15px; padding: 14px 16px; border: 1px solid var(--tr-sand); border-radius: 6px; background: var(--tr-white); color: var(--tr-ink); outline: none; transition: border-color .12s ease; min-width: 0; } .tree-notify__input:focus { border-color: var(--tr-accent); } .tree-notify__btn { display: flex; align-items: center; justify-content: center; gap: 10px; background: var(--tr-black); color: var(--tr-white); font-family: var(--fo); font-size: 15px; letter-spacing: .06em; text-transform: uppercase; border: 0; border-radius: 6px; padding: 0 22px; cursor: pointer; transition: transform .12s ease, background .12s ease; white-space: nowrap; } .tree-notify__btn:hover { background: var(--tr-accent); } .tree-notify__btn:active { transform: scale(.98); } .tree-notify__btn:disabled { opacity: .6; cursor: not-allowed; } .tree-notify__hint { font-family: var(--fb); font-size: 12px; color: var(--tr-muted); margin: 0; } .tree-notify__status { display: none; font-family: var(--fb); font-size: 13px; padding: 12px 14px; border-radius: 6px; margin: 0; line-height: 1.4; } .tree-notify__status--ok { background: #e8f5ea; color: #1e6b2e; border: 1px solid #c6e5cc; } .tree-notify__status--err { background: #fbece8; color: #a83a1f; border: 1px solid #f0cfc6; } .tree-notify[data-state="success"] .tree-notify__row, .tree-notify[data-state="success"] .tree-notify__hint, .tree-notify[data-state="success"] .tree-notify__label { display: none; } .tree-notify[data-state="success"] .tree-notify__status--ok { display: block; } .tree-notify[data-state="error"] .tree-notify__status--err { display: block; } /* ---------- Trust row ---------- */ .tree-trust { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; padding-top: 8px; margin: 0; list-style: none; } .tree-trust__item { display: flex; align-items: center; gap: 8px; font-family: var(--fb); font-size: 12px; line-height: 1.25; color: var(--tr-ink); } .tree-trust__item svg { flex: 0 0 18px; width: 18px; height: 18px; color: var(--tr-accent); } Heavy-duty steel 1 / 6 Move it. Load it. Forget the clutter. Weight Tree A solid-steel storage system that keeps your plates and bars organized, protected, and ready to roll. Vertical footprint, rounded loading caps, and protective barbell holders — built for serious training environments. Heavy-dutysteel Lockingcasters Barbellholders Compactfootprint $199 USD or 4 payments of $49.75 with Shop Pay Choose your model Wheels With Wheels Locking casters — roll, lock, lift, repeat. No Wheels Static base — for permanent gym setups. In stock - ships in 24 hours. Delivers in 3–5 days Sold out — restocking soon. Enter your email below and we’ll ping you the moment it’s back. Add to cart — $199.00 Notify me when available Notify me We’ll only email you about this restock. No spam. ✓ You’re on the list. We’ll email you the moment it’s back in stock. Something went wrong. Please try again or email [email protected]. 100‑day risk‑free trial Free shipping $100+ Trusted by 200,000+ (function () { var root = document.querySelector('.tree-hero[data-product-handle]'); if (!root) return; var KLAVIYO_PUBLIC_KEY = 'QeupfE'; // ---- Gallery slider ---- var track = root.querySelector('#tree-gallery-track'); var slides = track ? track.querySelectorAll('.tree-gallery__slide') : []; var prevBtn = root.querySelector('.tree-gallery__arrow--prev'); var nextBtn = root.querySelector('.tree-gallery__arrow--next'); var counter = root.querySelector('#tree-gallery-counter'); var dotsEl = root.querySelector('#tree-gallery-dots'); var currentIndex = 0; if (dotsEl && slides.length) { for (var i = 0; i < slides.length; i++) { var dot = document.createElement('button'); dot.type = 'button'; dot.className = 'tree-gallery__dot'; dot.setAttribute('role', 'tab'); dot.setAttribute('aria-label', 'Go to image ' + (i + 1)); dot.setAttribute('aria-current', i === 0 ? 'true' : 'false'); dot.setAttribute('data-index', i); dotsEl.appendChild(dot); } } var dots = dotsEl ? dotsEl.querySelectorAll('.tree-gallery__dot') : []; function goToSlide(index) { if (!track || !slides.length) return; index = Math.max(0, Math.min(slides.length - 1, index)); currentIndex = index; track.scrollTo({ left: slides[index].offsetLeft, behavior: 'smooth' }); updateSliderUI(); } function updateSliderUI() { if (counter) counter.textContent = (currentIndex + 1) + ' / ' + slides.length; dots.forEach(function (d, i) { d.setAttribute('aria-current', i === currentIndex ? 'true' : 'false'); }); if (prevBtn) prevBtn.disabled = currentIndex === 0; if (nextBtn) nextBtn.disabled = currentIndex === slides.length - 1; } if (prevBtn) prevBtn.addEventListener('click', function () { goToSlide(currentIndex - 1); }); if (nextBtn) nextBtn.addEventListener('click', function () { goToSlide(currentIndex + 1); }); dots.forEach(function (d) { d.addEventListener('click', function () { goToSlide(parseInt(d.getAttribute('data-index'), 10)); }); }); if (track) { var scrollTimer; track.addEventListener('scroll', function () { clearTimeout(scrollTimer); scrollTimer = setTimeout(function () { var idx = Math.round(track.scrollLeft / track.clientWidth); if (idx !== currentIndex) { currentIndex = idx; updateSliderUI(); } }, 80); }); } updateSliderUI(); // ---- Variant state ---- var cards = root.querySelectorAll('.tree-variants__card'); var selected = root.querySelector('.tree-variants__card[aria-pressed="true"]') || cards[0]; function applySelection(card) { if (card.getAttribute('data-available') === 'false') return; cards.forEach(function (c) { c.setAttribute('aria-pressed', 'false'); }); card.setAttribute('aria-pressed', 'true'); selected = card; var name = card.getAttribute('data-variant-name'); var id = card.getAttribute('data-variant-id'); root.querySelector('#tree-selected-name').textContent = name; root.querySelector('#tree-cart-variant').value = id; root.querySelector('#tree-notify-variant').value = id; // Jump slider to the wheels detail when "Wheels" is selected if (name === 'Wheels' && slides.length > 2) { goToSlide(2); // wheels detail is slide 3 } var available = card.getAttribute('data-available') !== 'false'; root.setAttribute('data-stock', available ? 'in' : 'out'); var priceCents = card.getAttribute('data-price-cents'); if (priceCents) updatePriceDisplays(parseInt(priceCents, 10)); } function formatMoney(cents) { // Try Shopify's built-in formatter first (respects shop's money format + active currency) if (window.Shopify && typeof window.Shopify.formatMoney === 'function') { var fmt = (window.Shopify.money_format) || '${{amount}}'; return window.Shopify.formatMoney(cents, fmt); } // Fallback: USD formatting return '$' + (cents / 100).toFixed(2); } function getCurrencyCode() { // Shopify Currency app exposes the active currency on Shopify.currency.active if (window.Shopify && window.Shopify.currency && window.Shopify.currency.active) { return window.Shopify.currency.active; } return 'USD'; } function updatePriceDisplays(priceCents) { var formatted = formatMoney(priceCents); var currency = getCurrencyCode(); root.querySelector('#tree-price').textContent = formatted + ' ' + currency; root.querySelector('#tree-installment').textContent = formatMoney(priceCents / 4); root.querySelector('#tree-cta-price').textContent = formatted; } cards.forEach(function (c) { c.addEventListener('click', function () { applySelection(c); }); }); // ---- Initial price render (uses fallback price until fetch resolves) ---- // Default $199 if we have nothing better yet updatePriceDisplays(19900); // ---- Live Shopify product JSON fetch ---- var handle = root.getAttribute('data-product-handle'); fetch('/products/' + handle + '.js', { headers: { 'Accept': 'application/json' } }) .then(function (r) { return r.ok ? r.json() : null; }) .then(function (data) { if (!data || !data.variants) return; // Match cards to variants by name fragment cards.forEach(function (card) { var wantName = card.getAttribute('data-variant-name').toLowerCase(); var match; if (wantName === 'no wheels') { // Match exactly "no wheels" (be careful — "wheels" matches both) match = data.variants.find(function (v) { var vn = (v.name || v.title || '').toLowerCase(); return vn.indexOf('no wheel') !== -1 || vn.indexOf('without') !== -1; }); } else { // "Wheels" variant — match anything with "wheel" but not "no wheel" match = data.variants.find(function (v) { var vn = (v.name || v.title || '').toLowerCase(); return vn.indexOf('wheel') !== -1 && vn.indexOf('no wheel') === -1 && vn.indexOf('without') === -1; }); } if (match) { card.setAttribute('data-variant-id', match.id); card.setAttribute('data-price-cents', match.price); card.setAttribute('data-available', match.available ? 'true' : 'false'); } else { card.setAttribute('data-available', 'false'); } }); // If currently selected is unavailable, fall back to first available if (selected.getAttribute('data-available') === 'false') { var firstAvail = Array.prototype.find.call(cards, function (c) { return c.getAttribute('data-available') !== 'false'; }); if (firstAvail) selected = firstAvail; } applySelection(selected); }) .catch(function () { /* silent */ }); // ---- Re-render prices if user changes currency on the page ---- // Most Shopify currency apps fire a custom event or modify Shopify.currency.active. // Watch for both common patterns: document.addEventListener('currency:changed', function () { if (selected) applySelection(selected); }); // Some apps (e.g. Shopify's native multi-currency) reload the page on switch, // but if not, this listener catches it. // ---- Klaviyo back-in-stock submit ---- var form = root.querySelector('#tree-notify-form'); if (!form) return; form.addEventListener('submit', function (e) { e.preventDefault(); var emailInput = form.querySelector('input[name="contact[email]"]'); var variantInput = form.querySelector('input[name="variant_id"]'); var btn = form.querySelector('.tree-notify__btn'); var btnLabel = form.querySelector('.tree-notify__btn-label'); var email = (emailInput.value || '').trim(); var variantId = (variantInput.value || '').trim(); if (!email || !variantId || variantId.indexOf('REPLACE_') === 0) { form.setAttribute('data-state', 'error'); return; } btn.disabled = true; var originalLabel = btnLabel.textContent; btnLabel.textContent = 'Submitting…'; form.removeAttribute('data-state'); var payload = { 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=' + KLAVIYO_PUBLIC_KEY, { method: 'POST', headers: { 'Content-Type': 'application/json', 'revision': '2024-10-15' }, body: JSON.stringify(payload) }) .then(function (res) { if (res.ok || res.status === 202) { form.setAttribute('data-state', 'success'); } else { form.setAttribute('data-state', 'error'); btn.disabled = false; btnLabel.textContent = originalLabel; } }) .catch(function () { form.setAttribute('data-state', 'error'); btn.disabled = false; btnLabel.textContent = originalLabel; }); }); })(); .ks-trust { --kst-bg: #f5f1ea; /* cream */ --kst-white: #ffffff; --kst-off: #faf7f2; --kst-sand: #e8e0d3; --kst-ink: #2a2a2a; /* char */ --kst-black: #111111; --kst-muted: #8a8378; --kst-accent: #1972bc; /* blue */ --kst-accent-d: #155a96; --fo: "Oswald", Impact, sans-serif; --fd: "Bebas Neue", Impact, sans-serif; --fb: "Barlow", system-ui, sans-serif; --fc: "Barlow Condensed", system-ui, sans-serif; box-sizing: border-box; } .ks-trust *, .ks-trust *::before, .ks-trust *::after { box-sizing: border-box; } /* ========== GUARANTEE BLOCK ========== */ .ks-guarantee { background: var(--kst-black); color: var(--kst-white); padding: 72px 16px; } .ks-guarantee__grid { max-width: 1200px; margin: 0 auto; display: grid; grid-template-columns: 1fr; gap: 40px; align-items: center; } @media (min-width: 860px) { .ks-guarantee { padding: 96px 24px; } .ks-guarantee__grid { grid-template-columns: 360px 1fr; gap: 72px; } } /* ----- Badge (stamped seal style) ----- */ .ks-guarantee__badge-wrap { display: flex; justify-content: center; align-items: center; } .ks-guarantee__badge { position: relative; width: 280px; height: 280px; display: flex; flex-direction: column; align-items: center; justify-content: center; background: var(--kst-accent); color: var(--kst-white); border-radius: 6px; padding: 24px; text-align: center; box-shadow: 0 0 0 6px var(--kst-black), 0 0 0 8px var(--kst-accent); transform: rotate(-4deg); } .ks-guarantee__badge::before, .ks-guarantee__badge::after { content: ""; position: absolute; left: 14px; right: 14px; height: 1px; background: rgba(255,255,255,.35); } .ks-guarantee__badge::before { top: 14px; } .ks-guarantee__badge::after { bottom: 14px; } .ks-guarantee__badge-arc { font-family: var(--fc); font-size: 11px; letter-spacing: .28em; text-transform: uppercase; color: rgba(255,255,255,.85); margin-bottom: 4px; } .ks-guarantee__badge-top { display: flex; align-items: flex-start; justify-content: center; line-height: .85; gap: 4px; } .ks-guarantee__badge-days { font-family: var(--fo); font-size: 128px; line-height: .85; color: var(--kst-white); letter-spacing: -.04em; font-weight: 700; } .ks-guarantee__badge-unit { font-family: var(--fd); font-size: 28px; letter-spacing: .04em; color: var(--kst-white); text-transform: uppercase; margin-top: 10px; } .ks-guarantee__badge-label { font-family: var(--fd); font-size: 20px; letter-spacing: .12em; color: var(--kst-white); text-transform: uppercase; line-height: 1; margin-top: 2px; } .ks-guarantee__badge-sub { font-family: var(--fc); font-size: 11px; letter-spacing: .18em; text-transform: uppercase; color: rgba(255,255,255,.7); margin: 10px 0 0; } /* ----- Content ----- */ .ks-guarantee__eyebrow { font-family: var(--fc); font-size: 13px; letter-spacing: .14em; text-transform: uppercase; color: var(--kst-accent); margin: 0 0 12px; } .ks-guarantee__title { font-family: var(--fo); font-weight: 600; font-size: clamp(32px, 4.2vw, 52px); line-height: 1; text-transform: uppercase; color: var(--kst-white); margin: 0 0 20px; } .ks-guarantee__title em { color: var(--kst-accent); font-style: normal; } .ks-guarantee__desc { font-family: var(--fb); font-size: 16px; line-height: 1.6; color: rgba(255,255,255,.72); margin: 0 0 28px; max-width: 56ch; } .ks-guarantee__features { display: grid; grid-template-columns: 1fr; gap: 8px; } @media (min-width: 600px) { .ks-guarantee__features { grid-template-columns: 1fr 1fr; gap: 10px; } } .ks-guarantee__feature { display: flex; align-items: center; gap: 10px; padding: 12px 14px; background: rgba(255,255,255,.04); border: 1px solid rgba(255,255,255,.08); border-radius: 6px; font-family: var(--fb); font-size: 14px; color: var(--kst-white); } .ks-guarantee__feature-icon { flex: 0 0 20px; width: 20px; height: 20px; border-radius: 50%; background: var(--kst-accent); display: flex; align-items: center; justify-content: center; color: var(--kst-white); } .ks-guarantee__feature-icon svg { width: 12px; height: 12px; } /* ========== SOCIAL PROOF BLOCK ========== */ .ks-social { background: var(--kst-bg); padding: 72px 0 80px; } .ks-social__header { text-align: center; max-width: 700px; margin: 0 auto 40px; padding: 0 20px; } .ks-social__eyebrow { font-family: var(--fc); font-size: 13px; letter-spacing: .14em; text-transform: uppercase; color: var(--kst-accent); margin: 0 0 10px; } .ks-social__count { font-family: var(--fo); font-size: clamp(56px, 9vw, 96px); line-height: 1; color: var(--kst-black); display: block; margin: 0 0 6px; letter-spacing: -.02em; } .ks-social__title { font-family: var(--fd); font-size: clamp(20px, 2.5vw, 26px); letter-spacing: .04em; color: var(--kst-ink); text-transform: uppercase; margin: 0; } /* ----- Marquee ----- */ .ks-marquee { position: relative; overflow: hidden; mask-image: linear-gradient(to right, transparent 0, #000 80px, #000 calc(100% - 80px), transparent 100%); -webkit-mask-image: linear-gradient(to right, transparent 0, #000 80px, #000 calc(100% - 80px), transparent 100%); } .ks-marquee__track { display: flex; animation: ks-scroll 40s linear infinite; will-change: transform; } .ks-marquee:hover .ks-marquee__track { animation-play-state: paused; } @keyframes ks-scroll { 0% { transform: translateX(0); } 100% { transform: translateX(-50%); } } .ks-marquee__group { display: flex; gap: 14px; padding: 0 7px; flex-shrink: 0; } .ks-athlete { position: relative; width: 200px; height: 200px; border-radius: 6px; overflow: hidden; flex-shrink: 0; background: var(--kst-white); cursor: pointer; } @media (max-width: 600px) { .ks-athlete { width: 150px; height: 150px; } } .ks-athlete img { width: 100%; height: 100%; object-fit: cover; display: block; transition: transform .4s ease; } .ks-athlete:hover img { transform: scale(1.06); } .ks-athlete__overlay { position: absolute; inset: auto 0 0 0; padding: 30px 12px 10px; background: linear-gradient(to top, rgba(0,0,0,.85) 0%, transparent 100%); opacity: 0; transition: opacity .25s ease; } .ks-athlete:hover .ks-athlete__overlay { opacity: 1; } .ks-athlete__name { font-family: var(--fd); font-size: 16px; letter-spacing: .04em; color: var(--kst-white); line-height: 1; margin-bottom: 3px; } .ks-athlete__sport { font-family: var(--fc); font-size: 11px; letter-spacing: .1em; text-transform: uppercase; color: var(--kst-accent); } /* ----- Stats ----- */ .ks-stats { max-width: 1200px; margin: 56px auto 0; padding: 0 20px; display: grid; grid-template-columns: repeat(2, 1fr); gap: 1px; background: var(--kst-sand); border-radius: 6px; overflow: hidden; } @media (min-width: 860px) { .ks-stats { grid-template-columns: repeat(4, 1fr); } } .ks-stat { background: var(--kst-white); padding: 28px 16px; text-align: center; } .ks-stat__num { font-family: var(--fo); font-size: clamp(32px, 4vw, 44px); line-height: 1; color: var(--kst-black); margin: 0 0 8px; letter-spacing: -.01em; } .ks-stat__label { font-family: var(--fc); font-size: 12px; letter-spacing: .12em; text-transform: uppercase; color: var(--kst-muted); margin: 0; } #judgeme_widget_placeholder { max-width: 1200px; margin: 48px auto 0; padding: 0 20px; } Kensui Promise 100 Days Money Back No questions asked The Kensui promise Your successis guaranteed. We want you to reach your fitness goals, enjoy your life, and feel healthy. The last thing we want is to create more stress — so if you decide this isn’t for you, we’ll give you a no-hassle, no-questions-asked 100% refund. 100‑day risk-free trial Full refund if not satisfied No questions asked Warranty included Trusted worldwide 200,000+ Athletes worldwide John D. CrossFit Sarah M. Calisthenics Eric B. Powerlifting Luke K. Yoga Tom B. Powerlifting Elias S. MMA Alex P. Calisthenics Nina L. Swimming John D. CrossFit Sarah M. Calisthenics Eric B. Powerlifting Luke K. Yoga Tom B. Powerlifting Elias S. MMA Alex P. Calisthenics Nina L. Swimming 200K+ Happy Athletes 4.9★ Average Rating 50+ Countries 99% Satisfaction (function () { // Counter animation on scroll-in, works for any element with data-animate-count function formatNum(n, target) { if (target >= 1000) { // Show "200K+" style for big numbers if (target >= 1000) return Math.floor(n / 1000) + 'K'; } return Math.floor(n).toString(); } function animate(el) { var target = parseInt(el.getAttribute('data-animate-count'), 10); var suffix = el.getAttribute('data-suffix') || ''; if (isNaN(target)) return; var duration = 1400; var start = null; function step(ts) { if (!start) start = ts; var t = Math.min(1, (ts - start) / duration); var eased = 1 - Math.pow(1 - t, 3); // ease-out cubic var current = target * eased; el.textContent = formatNum(current, target) + suffix; if (t < 1) requestAnimationFrame(step); else el.textContent = (target >= 1000 ? Math.floor(target/1000) + 'K' : target) + suffix; } requestAnimationFrame(step); } var nodes = document.querySelectorAll('[data-animate-count]'); if (!('IntersectionObserver' in window)) { nodes.forEach(animate); return; } var io = new IntersectionObserver(function (entries) { entries.forEach(function (e) { if (e.isIntersecting) { animate(e.target); io.unobserve(e.target); } }); }, { threshold: 0.4 }); nodes.forEach(function (n) { io.observe(n); }); })();