{"title":"Bench, Racks \u0026 Storage","description":null,"products":[{"product_id":"torii-rack","title":"Torii™","description":"\u003cp\u003ePour beaucoup d'entre nous, la salle de sport est notre lieu de rituel et de dévotion. \u003cspan data-mce-fragment=\"1\"\u003eNommé d'après une porte japonaise traditionnelle que l'on trouve le plus souvent à l'entrée d'un sanctuaire shintoïste, le Torii sert de symbole pour marquer la transition entre le monde quotidien normal et le sacré.\u003c\/span\u003e\u003c\/p\u003e\u003cp\u003eToriii est là pour prouver que vous pouvez atteindre une force d'entraînement de qualité salle de sport depuis le confort de votre maison, quelle que soit sa taille. Il ne s'agit pas seulement de gagner de l'espace ; il s'agit de maximiser votre potentiel.\u003c\/p\u003e","brand":"Kensui","offers":[{"title":"Barre","offer_id":44543589712084,"sku":"rek-torii-bar","price":299.0,"currency_code":"USD","in_stock":true},{"title":"Support","offer_id":44543589744852,"sku":"rek-torii-rack","price":399.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0229\/1249\/9792\/files\/torii-RACK_2ff140f8-2ce0-43c9-9efa-262e88275a73.jpg?v=1773071357"},{"product_id":"adjustable-fid-bench","title":"Banc FID réglable","description":"\u003cp\u003eAméliorez votre salle d'entraînement à domicile avec le Banc Réglable FID MaxFlex, l'ultime en polyvalence et robustesse pour tout amateur de remise en forme. Conçu pour soutenir une variété d'exercices, ce banc passe aisément des positions à plat, inclinée et déclinée, permettant un éventail complet d'exercices pour un conditionnement corporel optimal.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eCaractéristiques principales :\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cstrong\u003eConstruction robuste :\u003c\/strong\u003e Confectionné avec un cadre en acier renforcé, le Banc MaxFlex supporte jusqu'à 272 kg, garantissant stabilité et sécurité même lors des entraînements les plus intenses.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003ePolyvalence :\u003c\/strong\u003e Avec des coussins d'assise et de dossier faciles à régler, vous pouvez passer entre plusieurs angles pour les développés couchés, les développés épaules et les exercices abdominaux — ouvrant ainsi un nombre infini de possibilités d'exercices.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eConfort et soutien :\u003c\/strong\u003e Un rembourrage en mousse haute densité offre un confort maximal sans compromettre le soutien, même durant les séances d'entraînement prolongées.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eCompact et transportable :\u003c\/strong\u003e Idéal pour les espaces restreints, ce banc comprend des roulettes intégrées et une poignée pour une mobilité et un rangement aisés lorsqu'il n'est pas utilisé.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eRevêtement durable :\u003c\/strong\u003e Résistant à la transpiration et facile à nettoyer, le revêtement en vinyle de haute qualité garde votre banc comme neuf et hygiénique.\u003c\/li\u003e\n\u003c\/ul\u003e","brand":"Kensui","offers":[{"title":"PRO","offer_id":46256140746964,"sku":"rek-bench-pro","price":649.0,"currency_code":"USD","in_stock":true},{"title":"MAX","offer_id":46256140779732,"sku":"rek-bench-max","price":749.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0229\/1249\/9792\/files\/fid-bench-pro.jpg?v=1763996984"},{"product_id":"weight-tree","title":"Arbre de poids","description":"\u003cstyle\u003e\n  .tree-hero {\n    --tr-bg: #f5f1ea;\n    --tr-ink: #2a2a2a;\n    --tr-white: #ffffff;\n    --tr-off: #faf7f2;\n    --tr-sand: #e8e0d3;\n    --tr-black: #111111;\n    --tr-accent: #1972bc;re\n    --tr-accent-d: #155a96;\n    --tr-muted: #8a8378;\n    --fo: \"Oswald\", Impact, sans-serif;\n    --fd: \"Bebas Neue\", Impact, sans-serif;\n    --fb: \"Barlow\", system-ui, sans-serif;\n    --fc: \"Barlow Condensed\", system-ui, sans-serif;\n\n    background: var(--tr-bg);\n    color: var(--tr-ink);\n    padding: 24px 16px 48px;\n    box-sizing: border-box;\n  }\n  .tree-hero *, .tree-hero *::before, .tree-hero *::after { box-sizing: border-box; }\n\n  .tree-hero__grid {\n    max-width: 1240px;\n    margin: 0 auto;\n    display: grid;\n    grid-template-columns: 1fr;\n    gap: 24px;\n  }\n  @media (min-width: 860px) {\n    .tree-hero { padding: 40px 24px 64px; }\n    .tree-hero__grid { grid-template-columns: 1.1fr 1fr; gap: 48px; align-items: start; }\n  }\n\n  \/* ---------- Stock state toggle ---------- *\/\n  .tree-hero .tree-block--in,\n  .tree-hero .tree-block--out { display: none; }\n  .tree-hero[data-stock=\"in\"]  .tree-block--in  { display: flex; flex-direction: column; gap: 10px; }\n  .tree-hero[data-stock=\"in\"]  .tree-stock--in  { display: flex; }\n  .tree-hero[data-stock=\"out\"] .tree-block--out { display: flex; flex-direction: column; gap: 10px; }\n  .tree-hero[data-stock=\"out\"] .tree-stock--out { display: flex; }\n  .tree-stock--in, .tree-stock--out { display: none; }\n\n  \/* ---------- Gallery slider ---------- *\/\n  .tree-gallery { display: flex; flex-direction: column; gap: 10px; }\n  .tree-gallery__stage {\n    position: relative;\n    background: var(--tr-white);\n    border-radius: 6px;\n    overflow: hidden;\n    aspect-ratio: 1 \/ 1;\n  }\n  .tree-gallery__track {\n    display: flex;\n    width: 100%;\n    height: 100%;\n    overflow-x: auto;\n    scroll-snap-type: x mandatory;\n    scroll-behavior: smooth;\n    scrollbar-width: none;\n    -ms-overflow-style: none;\n  }\n  .tree-gallery__track::-webkit-scrollbar { display: none; }\n  .tree-gallery__slide {\n    flex: 0 0 100%;\n    width: 100%;\n    height: 100%;\n    scroll-snap-align: start;\n    scroll-snap-stop: always;\n  }\n  .tree-gallery__slide img {\n    width: 100%; height: 100%;\n    object-fit: cover;\n    display: block;\n  }\n  .tree-gallery__badge {\n    position: absolute; top: 12px; left: 12px;\n    background: var(--tr-black); color: var(--tr-white);\n    font-family: var(--fc); font-size: 12px; letter-spacing: .08em;\n    text-transform: uppercase;\n    padding: 6px 10px; border-radius: 6px;\n    z-index: 3;\n    pointer-events: none;\n  }\n  .tree-gallery__arrow {\n    position: absolute;\n    top: 50%;\n    transform: translateY(-50%);\n    width: 44px; height: 44px;\n    background: rgba(255,255,255,.92);\n    border: 0;\n    border-radius: 50%;\n    display: flex; align-items: center; justify-content: center;\n    cursor: pointer;\n    z-index: 3;\n    transition: background .12s ease, transform .12s ease, opacity .12s ease;\n    color: var(--tr-black);\n    box-shadow: 0 2px 12px rgba(0,0,0,.12);\n  }\n  .tree-gallery__arrow:hover {\n    background: var(--tr-white);\n    transform: translateY(-50%) scale(1.06);\n  }\n  .tree-gallery__arrow:active { transform: translateY(-50%) scale(.96); }\n  .tree-gallery__arrow:disabled {\n    opacity: .35;\n    cursor: not-allowed;\n  }\n  .tree-gallery__arrow svg { width: 20px; height: 20px; }\n  .tree-gallery__arrow--prev { left: 12px; }\n  .tree-gallery__arrow--next { right: 12px; }\n  .tree-gallery__counter {\n    position: absolute;\n    bottom: 12px; right: 12px;\n    background: rgba(0,0,0,.65);\n    color: var(--tr-white);\n    font-family: var(--fc);\n    font-size: 11px;\n    letter-spacing: .08em;\n    padding: 4px 10px;\n    border-radius: 999px;\n    z-index: 3;\n    pointer-events: none;\n  }\n  .tree-gallery__dots {\n    display: flex;\n    justify-content: center;\n    gap: 6px;\n    padding: 4px 0 0;\n  }\n  .tree-gallery__dot {\n    width: 7px; height: 7px;\n    border: 0;\n    border-radius: 50%;\n    background: var(--tr-sand);\n    cursor: pointer;\n    transition: background .15s ease, transform .15s ease;\n    padding: 0;\n  }\n  .tree-gallery__dot[aria-current=\"true\"] {\n    background: var(--tr-accent);\n    transform: scale(1.3);\n  }\n\n  \/* ---------- Info column ---------- *\/\n  .tree-info { display: flex; flex-direction: column; gap: 16px; }\n  .tree-info__eyebrow {\n    font-family: var(--fc);\n    font-size: 13px; letter-spacing: .14em;\n    text-transform: uppercase;\n    color: var(--tr-accent);\n  }\n  .tree-info__title {\n    font-family: var(--fo);\n    font-weight: 600;\n    font-size: clamp(32px, 4.6vw, 50px);\n    line-height: 1;\n    text-transform: uppercase;\n    margin: 0;\n    color: var(--tr-black);\n  }\n  .tree-info__subtitle {\n    font-family: var(--fb);\n    font-size: 16px;\n    line-height: 1.5;\n    color: var(--tr-ink);\n    margin: 0;\n    max-width: 54ch;\n  }\n\n  .tree-info__reviews {\n    display: flex; align-items: center; gap: 10px;\n    font-family: var(--fb); font-size: 14px;\n    color: var(--tr-muted);\n  }\n  .tree-info__stars { color: #d7d0c2; letter-spacing: 2px; }\n\n  \/* ---------- Feature pills ---------- *\/\n  .tree-features {\n    display: grid;\n    grid-template-columns: repeat(2, 1fr);\n    gap: 8px;\n  }\n  @media (min-width: 500px) {\n    .tree-features { grid-template-columns: repeat(4, 1fr); }\n  }\n  .tree-features__item {\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    text-align: center;\n    gap: 6px;\n    padding: 12px 8px;\n    background: var(--tr-white);\n    border-radius: 6px;\n  }\n  .tree-features__icon {\n    width: 28px; height: 28px;\n    color: var(--tr-accent);\n  }\n  .tree-features__icon svg { width: 100%; height: 100%; }\n  .tree-features__label {\n    font-family: var(--fc);\n    font-size: 11px;\n    letter-spacing: .08em;\n    text-transform: uppercase;\n    color: var(--tr-ink);\n    line-height: 1.2;\n    font-weight: 600;\n  }\n\n  \/* ---------- Price row ---------- *\/\n  .tree-info__price-row {\n    display: flex; align-items: baseline; gap: 12px;\n    padding-top: 4px;\n    flex-wrap: wrap;\n  }\n  .tree-info__price {\n    font-family: var(--fo);\n    font-size: 30px;\n    font-weight: 600;\n    color: var(--tr-black);\n  }\n  .tree-info__installments {\n    font-family: var(--fb);\n    font-size: 13px;\n    color: var(--tr-ink);\n  }\n  .tree-info__installments b { font-weight: 600; }\n\n  \/* ---------- Variant selector (Wheels vs No Wheels) ---------- *\/\n  .tree-variants {\n    display: flex; flex-direction: column; gap: 10px;\n  }\n  .tree-variants__label {\n    display: flex; align-items: baseline; justify-content: space-between;\n    font-family: var(--fc);\n    font-size: 12px;\n    letter-spacing: .1em;\n    text-transform: uppercase;\n    color: var(--tr-ink);\n  }\n  .tree-variants__label b {\n    font-family: var(--fd);\n    font-size: 16px;\n    color: var(--tr-black);\n    letter-spacing: .04em;\n    font-weight: 400;\n  }\n  .tree-variants__cards {\n    display: grid;\n    grid-template-columns: 1fr 1fr;\n    gap: 10px;\n  }\n  .tree-variants__card {\n    position: relative;\n    display: flex; flex-direction: column;\n    gap: 8px;\n    padding: 14px 14px 16px;\n    background: var(--tr-white);\n    border: 2px solid transparent;\n    border-radius: 6px;\n    cursor: pointer;\n    text-align: left;\n    font-family: var(--fb);\n    transition: border-color .12s ease, transform .12s ease;\n  }\n  .tree-variants__card:hover { border-color: var(--tr-sand); }\n  .tree-variants__card[aria-pressed=\"true\"] {\n    border-color: var(--tr-accent);\n    background: var(--tr-off);\n  }\n  .tree-variants__card[aria-pressed=\"true\"]::before {\n    content: \"\";\n    position: absolute; top: -1px; right: -1px;\n    width: 22px; height: 22px;\n    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;\n    border-radius: 0 6px 0 6px;\n  }\n  .tree-variants__card-icon {\n    width: 36px; height: 36px;\n    color: var(--tr-accent);\n  }\n  .tree-variants__card-icon svg { width: 100%; height: 100%; }\n  .tree-variants__card-name {\n    font-family: var(--fd);\n    font-size: 22px;\n    letter-spacing: .04em;\n    color: var(--tr-black);\n    line-height: 1;\n  }\n  .tree-variants__card-meta {\n    font-family: var(--fb);\n    font-size: 12px;\n    color: var(--tr-muted);\n    line-height: 1.35;\n  }\n  .tree-variants__card-tag {\n    align-self: flex-start;\n    font-family: var(--fc);\n    font-size: 10px;\n    letter-spacing: .1em;\n    text-transform: uppercase;\n    color: var(--tr-white);\n    background: var(--tr-accent);\n    padding: 3px 8px;\n    border-radius: 4px;\n    font-weight: 600;\n    margin-top: 2px;\n  }\n  .tree-variants__card[data-available=\"false\"] {\n    opacity: .55;\n    cursor: not-allowed;\n  }\n  .tree-variants__card[data-available=\"false\"]::after {\n    content: \"Sold out\";\n    position: absolute; bottom: 6px; right: 8px;\n    font-family: var(--fc);\n    font-size: 10px;\n    letter-spacing: .08em;\n    text-transform: uppercase;\n    color: #c0392b;\n  }\n\n  \/* ---------- Specs strip ---------- *\/\n  .tree-specs {\n    display: grid;\n    grid-template-columns: repeat(3, 1fr);\n    gap: 1px;\n    background: var(--tr-sand);\n    border-radius: 6px;\n    overflow: hidden;\n  }\n  .tree-specs__cell {\n    background: var(--tr-white);\n    padding: 12px 10px;\n    text-align: center;\n  }\n  .tree-specs__k {\n    font-family: var(--fc);\n    font-size: 11px; letter-spacing: .1em;\n    text-transform: uppercase;\n    color: var(--tr-ink); opacity: .7;\n  }\n  .tree-specs__v {\n    font-family: var(--fd);\n    font-size: 22px;\n    line-height: 1;\n    margin-top: 4px;\n    letter-spacing: .02em;\n    color: var(--tr-black);\n  }\n\n  \/* ---------- Stock lines ---------- *\/\n  .tree-stock {\n    font-family: var(--fb);\n    font-size: 13px;\n    color: var(--tr-ink);\n    align-items: center; gap: 8px;\n    padding: 10px 12px;\n    background: var(--tr-white);\n    border-radius: 6px;\n  }\n  .tree-stock__dot {\n    width: 8px; height: 8px; border-radius: 50%;\n    flex: 0 0 8px;\n  }\n  .tree-stock--in .tree-stock__dot {\n    background: #2ecc71;\n    box-shadow: 0 0 0 3px rgba(46,204,113,.2);\n  }\n  .tree-stock--out .tree-stock__dot {\n    background: #e25c3b;\n    box-shadow: 0 0 0 3px rgba(226,92,59,.2);\n  }\n\n  \/* ---------- Add-to-cart ---------- *\/\n  .tree-cta__btn {\n    display: flex; align-items: center; justify-content: center;\n    gap: 10px;\n    width: 100%;\n    background: var(--tr-accent);\n    color: var(--tr-white);\n    font-family: var(--fo);\n    font-size: 18px; letter-spacing: .06em;\n    text-transform: uppercase;\n    border: 0; border-radius: 6px;\n    padding: 16px 20px;\n    cursor: pointer;\n    transition: transform .12s ease, background .12s ease;\n  }\n  .tree-cta__btn:hover { background: var(--tr-accent-d); }\n  .tree-cta__btn:active { transform: scale(.98); }\n\n  \/* ---------- Notify form ---------- *\/\n  .tree-notify__label {\n    font-family: var(--fc);\n    font-size: 12px;\n    letter-spacing: .1em;\n    text-transform: uppercase;\n    color: var(--tr-ink);\n    margin: 0;\n  }\n  .tree-notify__row { display: flex; gap: 8px; }\n  .tree-notify__input {\n    flex: 1;\n    font-family: var(--fb);\n    font-size: 15px;\n    padding: 14px 16px;\n    border: 1px solid var(--tr-sand);\n    border-radius: 6px;\n    background: var(--tr-white);\n    color: var(--tr-ink);\n    outline: none;\n    transition: border-color .12s ease;\n    min-width: 0;\n  }\n  .tree-notify__input:focus { border-color: var(--tr-accent); }\n  .tree-notify__btn {\n    display: flex; align-items: center; justify-content: center;\n    gap: 10px;\n    background: var(--tr-black);\n    color: var(--tr-white);\n    font-family: var(--fo);\n    font-size: 15px; letter-spacing: .06em;\n    text-transform: uppercase;\n    border: 0; border-radius: 6px;\n    padding: 0 22px;\n    cursor: pointer;\n    transition: transform .12s ease, background .12s ease;\n    white-space: nowrap;\n  }\n  .tree-notify__btn:hover { background: var(--tr-accent); }\n  .tree-notify__btn:active { transform: scale(.98); }\n  .tree-notify__btn:disabled { opacity: .6; cursor: not-allowed; }\n  .tree-notify__hint {\n    font-family: var(--fb);\n    font-size: 12px;\n    color: var(--tr-muted);\n    margin: 0;\n  }\n  .tree-notify__status {\n    display: none;\n    font-family: var(--fb);\n    font-size: 13px;\n    padding: 12px 14px;\n    border-radius: 6px;\n    margin: 0;\n    line-height: 1.4;\n  }\n  .tree-notify__status--ok {\n    background: #e8f5ea; color: #1e6b2e;\n    border: 1px solid #c6e5cc;\n  }\n  .tree-notify__status--err {\n    background: #fbece8; color: #a83a1f;\n    border: 1px solid #f0cfc6;\n  }\n  .tree-notify[data-state=\"success\"] .tree-notify__row,\n  .tree-notify[data-state=\"success\"] .tree-notify__hint,\n  .tree-notify[data-state=\"success\"] .tree-notify__label { display: none; }\n  .tree-notify[data-state=\"success\"] .tree-notify__status--ok { display: block; }\n  .tree-notify[data-state=\"error\"] .tree-notify__status--err { display: block; }\n\n  \/* ---------- Trust row ---------- *\/\n  .tree-trust {\n    display: grid;\n    grid-template-columns: repeat(3, 1fr);\n    gap: 8px;\n    padding-top: 8px;\n    margin: 0;\n    list-style: none;\n  }\n  .tree-trust__item {\n    display: flex; align-items: center; gap: 8px;\n    font-family: var(--fb);\n    font-size: 12px;\n    line-height: 1.25;\n    color: var(--tr-ink);\n  }\n  .tree-trust__item svg { flex: 0 0 18px; width: 18px; height: 18px; color: var(--tr-accent); }\n\u003c\/style\u003e\n\u003cdiv class=\"shogun-root\" data-shogun-id=\"69ef8ed24b088f13e243ebf8\" data-shogun-site-id=\"d921f9ba-aa7a-4156-9e44-53aad23b56fb\" data-shogun-page-id=\"69ef8ed24b088f13e243ebf8\" data-shogun-page-version-id=\"69ef90a6682591347bb083f1\" data-shogun-platform-type=\"shopify\" data-shogun-variant-id=\"69ef90a6682591347bb083f7\" data-shogun-page-type=\"product\" data-shogun-power-up-type=\"\" data-shogun-power-up-id=\"\" data-region=\"main\"\u003e\n\u003cdiv id=\"s-c3263eb8-3309-4a58-b93b-cdf83c360cb9\" class=\"shg-c shg-align-left\"\u003e\n\u003csection class=\"tree-hero\" data-stock=\"in\" data-product-handle=\"weight-tree\" aria-label=\"Weight Tree\"\u003e\n\u003cdiv class=\"tree-hero__grid\"\u003e\n\u003cdiv class=\"tree-gallery\"\u003e\n\u003cdiv class=\"tree-gallery__stage\"\u003e\n\u003cspan class=\"tree-gallery__badge\"\u003eAcier robuste\u003c\/span\u003e \u003cbutton type=\"button\" class=\"tree-gallery__arrow tree-gallery__arrow--prev\" aria-label=\"Previous image\"\u003e \u003csvg viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\u003e\u003cpolyline points=\"15 18 9 12 15 6\"\u003e\u003c\/polyline\u003e\u003c\/svg\u003e \u003c\/button\u003e\n\u003cdiv class=\"tree-gallery__track\" id=\"tree-gallery-track\"\u003e\n\u003cdiv class=\"tree-gallery__slide\"\u003e\u003cimg src=\"https:\/\/kensui.com\/cdn\/shop\/files\/5_afae0716-2891-456c-ade7-6bd2ffee7ea8_1024x1024@2x.jpg?v=1775132071\" alt=\"Arbre à poids Kensui — rangement vertical des plaques\" width=\"1024\" height=\"1024\" loading=\"eager\"\u003e\u003c\/div\u003e\n\u003cdiv class=\"tree-gallery__slide\"\u003e\u003cimg src=\"https:\/\/kensui.com\/cdn\/shop\/files\/1_f0c6a604-8deb-406c-b5dc-2bde8cb847dc_1024x1024@2x.jpg?v=1775132071\" alt=\"Arbre à poids chargé de plaques\" width=\"1024\" height=\"1024\" loading=\"lazy\"\u003e\u003c\/div\u003e\n\u003cdiv class=\"tree-gallery__slide\"\u003e\u003cimg src=\"https:\/\/kensui.com\/cdn\/shop\/files\/weight-tree-wheels_1024x1024@2x.jpg?v=1775132071\" alt=\"Détail des roulettes verrouillables\" width=\"1024\" height=\"1024\" loading=\"lazy\"\u003e\u003c\/div\u003e\n\u003cdiv class=\"tree-gallery__slide\"\u003e\u003cimg src=\"https:\/\/kensui.com\/cdn\/shop\/files\/weight-tree-sleeves_2_1024x1024@2x.jpg?v=1775132071\" alt=\"Manchons de support de barre avec lèvre protectrice\" width=\"1024\" height=\"1024\" loading=\"lazy\"\u003e\u003c\/div\u003e\n\u003cdiv class=\"tree-gallery__slide\"\u003e\u003cimg src=\"https:\/\/kensui.com\/cdn\/shop\/files\/weight-tree-sleeves_1024x1024@2x.jpg?v=1775132071\" alt=\"Supports de rangement avec capuchons de chargement arrondis\" width=\"1024\" height=\"1024\" loading=\"lazy\"\u003e\u003c\/div\u003e\n\u003cdiv class=\"tree-gallery__slide\"\u003e\u003cimg src=\"https:\/\/kensui.com\/cdn\/shop\/files\/2_28e45292-802a-4c6d-bcfc-5d656cda0c44_1024x1024@2x.jpg?v=1775132071\" alt=\"Arbre à poids dans une salle de sport à domicile\" width=\"1024\" height=\"1024\" loading=\"lazy\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cbutton type=\"button\" class=\"tree-gallery__arrow tree-gallery__arrow--next\" aria-label=\"Next image\"\u003e \u003csvg viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\u003e\u003cpolyline points=\"9 18 15 12 9 6\"\u003e\u003c\/polyline\u003e\u003c\/svg\u003e \u003c\/button\u003e\n\u003cdiv class=\"tree-gallery__counter\" id=\"tree-gallery-counter\"\u003e1 \/ 6\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"tree-gallery__dots\" id=\"tree-gallery-dots\" role=\"tablist\" aria-label=\"Gallery images\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"tree-info\"\u003e\n\u003cdiv class=\"tree-info__eyebrow\"\u003eDéplacez-le. Chargez-le. Oubliez le désordre.\u003c\/div\u003e\n\u003ch1 class=\"tree-info__title\"\u003eArbre à poids\u003c\/h1\u003e\n\u003cp class=\"tree-info__subtitle\"\u003eUn système de rangement en acier solide qui garde vos plaques et barres organisées, protégées et prêtes à rouler. Empreinte verticale, capuchons de chargement arrondis et supports de barre protecteurs — conçu pour des environnements d’entraînement sérieux.\u003c\/p\u003e\n\u003cdiv class=\"tree-features\" aria-label=\"Key features\"\u003e\n\u003cdiv class=\"tree-features__item\"\u003e\n\u003cdiv class=\"tree-features__icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\u003e\u003crect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\"\u003e\u003c\/rect\u003e\u003cpath d=\"M7 7h10M7 12h10M7 17h10\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003c\/div\u003e\n\u003cdiv class=\"tree-features__label\"\u003eRobuste\u003cbr\u003eacier\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"tree-features__item\"\u003e\n\u003cdiv class=\"tree-features__icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\u003e\u003ccircle cx=\"6\" cy=\"18\" r=\"3\"\u003e\u003c\/circle\u003e\u003ccircle cx=\"18\" cy=\"18\" r=\"3\"\u003e\u003c\/circle\u003e\u003cpath d=\"M9 18h6M3 6h18M3 6v12M21 6v12\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003c\/div\u003e\n\u003cdiv class=\"tree-features__label\"\u003eVerrouillables\u003cbr\u003eroulettes\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"tree-features__item\"\u003e\n\u003cdiv class=\"tree-features__icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\u003e\u003ccircle cx=\"6.5\" cy=\"12\" r=\"3\"\u003e\u003c\/circle\u003e\u003ccircle cx=\"17.5\" cy=\"12\" r=\"3\"\u003e\u003c\/circle\u003e\u003cpath d=\"M9.5 12h5\"\u003e\u003c\/path\u003e\u003cpath d=\"M5 9v6M19 9v6\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003c\/div\u003e\n\u003cdiv class=\"tree-features__label\"\u003eBarre\u003cbr\u003esupports\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"tree-features__item\"\u003e\n\u003cdiv class=\"tree-features__icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\u003e\u003crect x=\"9\" y=\"3\" width=\"6\" height=\"18\" rx=\"2\"\u003e\u003c\/rect\u003e\u003cpath d=\"M9 8h6M9 16h6\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003c\/div\u003e\n\u003cdiv class=\"tree-features__label\"\u003eCompact\u003cbr\u003eempreinte au sol\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"tree-info__price-row\"\u003e\n\u003cspan class=\"tree-info__price\" id=\"tree-price\"\u003e199 $ USD\u003c\/span\u003e \u003cspan class=\"tree-info__installments\"\u003e ou 4 paiements de \u003cb id=\"tree-installment\"\u003e$49.75\u003c\/b\u003e avec Shop Pay \u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"tree-variants\"\u003e\n\u003cdiv class=\"tree-variants__label\"\u003e\n\u003cspan\u003eChoisissez votre modèle\u003c\/span\u003e \u003cb id=\"tree-selected-name\"\u003eRoues\u003c\/b\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"tree-variants__cards\" role=\"radiogroup\" aria-label=\"Model\"\u003e\n\u003cdiv class=\"tree-variants__card-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\u003e\u003ccircle cx=\"6\" cy=\"18\" r=\"3\"\u003e\u003c\/circle\u003e\u003ccircle cx=\"18\" cy=\"18\" r=\"3\"\u003e\u003c\/circle\u003e\u003cpath d=\"M9 18h6\"\u003e\u003c\/path\u003e\u003cpath d=\"M5 6h14M5 6v9M19 6v9M9 6v9M15 6v9\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003c\/div\u003e\n\u003cbutton type=\"button\" class=\"tree-variants__card\" role=\"radio\" aria-pressed=\"true\" data-variant-name=\"Wheels\" data-variant-id=\"REPLACE_WHEELS_ID\"\u003e\u003cspan class=\"tree-variants__card-name\"\u003eAvec roues\u003c\/span\u003e \u003cspan class=\"tree-variants__card-meta\"\u003eRoues verrouillables — roulez, verrouillez, soulevez, répétez.\u003c\/span\u003e \u003c\/button\u003e\n\u003cdiv class=\"tree-variants__card-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\u003e\u003cpath d=\"M5 6h14M5 6v14M19 6v14M9 6v14M15 6v14M3 20h18\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003c\/div\u003e\n\u003cbutton type=\"button\" class=\"tree-variants__card\" role=\"radio\" aria-pressed=\"false\" data-variant-name=\"No Wheels\" data-variant-id=\"REPLACE_NO_WHEELS_ID\"\u003e\u003cspan class=\"tree-variants__card-name\"\u003eSans roues\u003c\/span\u003e \u003cspan class=\"tree-variants__card-meta\"\u003eBase statique — pour installations permanentes en salle de sport.\u003c\/span\u003e \u003c\/button\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"tree-stock tree-stock--in\"\u003e\n\u003cspan class=\"tree-stock__dot\" aria-hidden=\"true\"\u003e\u003c\/span\u003e \u003cspan\u003eEn stock - expédié sous 24 heures. Livraison en \u003cb\u003e3–5 jours\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"tree-stock tree-stock--out\"\u003e\n\u003cspan class=\"tree-stock__dot\" aria-hidden=\"true\"\u003e\u003c\/span\u003e \u003cspan\u003e\u003cb\u003eÉpuisé\u003c\/b\u003e — réapprovisionnement bientôt. Entrez votre e-mail ci-dessous et nous vous avertirons dès qu’il sera de retour.\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cform class=\"tree-block tree-block--in\" method=\"post\" action=\"\/cart\/add\"\u003e\n\u003cinput type=\"hidden\" id=\"tree-cart-variant\" value=\"REPLACE_WHEELS_ID\"\u003e \u003cinput type=\"hidden\" name=\"quantity\" value=\"1\"\u003e \u003cbutton type=\"submit\" class=\"tree-cta__btn\"\u003e \u003csvg width=\"20\" height=\"20\" viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e \u003ccircle cx=\"9\" cy=\"21\" r=\"1\"\u003e\u003c\/circle\u003e\u003ccircle cx=\"20\" cy=\"21\" r=\"1\"\u003e\u003c\/circle\u003e \u003cpath d=\"M1 1h4l2.7 13.4a2 2 0 0 0 2 1.6h9.7a2 2 0 0 0 2-1.6L23 6H6\"\u003e\u003c\/path\u003e \u003c\/svg\u003e \u003cspan\u003eAjouter au panier — \u003cspan id=\"tree-cta-price\"\u003e$199.00\u003c\/span\u003e\u003c\/span\u003e \u003c\/button\u003e\n\u003c\/form\u003e\n\u003cform class=\"tree-block tree-block--out tree-notify\" method=\"post\" action=\"#\" id=\"tree-notify-form\"\u003e\n\u003clabel class=\"tree-notify__label\" for=\"tree-notify-email\"\u003ePrévenez-moi quand disponible\u003c\/label\u003e\n\u003cdiv class=\"tree-notify__row\"\u003e\n\u003cinput class=\"tree-notify__input\" id=\"tree-notify-email\" type=\"email\" name=\"contact[email]\" placeholder=\"you@example.com\" required=\"\"\u003e \u003cinput type=\"hidden\" name=\"variant_id\" id=\"tree-notify-variant\" value=\"REPLACE_WHEELS_ID\"\u003e \u003cbutton class=\"tree-notify__btn\" type=\"submit\"\u003e \u003csvg width=\"18\" height=\"18\" viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e \u003cpath d=\"M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9\"\u003e\u003c\/path\u003e \u003cpath d=\"M13.73 21a2 2 0 0 1-3.46 0\"\u003e\u003c\/path\u003e \u003c\/svg\u003e \u003cspan class=\"tree-notify__btn-label\"\u003ePrévenez-moi\u003c\/span\u003e \u003c\/button\u003e\n\u003c\/div\u003e\n\u003cp class=\"tree-notify__hint\"\u003eNous vous enverrons uniquement un e-mail concernant ce réapprovisionnement. Pas de spam.\u003c\/p\u003e\n\u003cp class=\"tree-notify__status tree-notify__status--ok\" role=\"status\"\u003e✓ Vous êtes sur la liste. Nous vous enverrons un e-mail dès que le produit sera de nouveau en stock.\u003c\/p\u003e\n\u003cp class=\"tree-notify__status tree-notify__status--err\" role=\"alert\"\u003eUn problème est survenu. Veuillez réessayer ou envoyer un e-mail à support@kensui.com.\u003c\/p\u003e\n\u003c\/form\u003e\n\u003cul class=\"tree-trust\" aria-label=\"Guarantees\"\u003e\n\u003cli class=\"tree-trust__item\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e Essai sans risque de 100 jours\u003c\/li\u003e\n\u003cli class=\"tree-trust__item\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003crect x=\"1\" y=\"3\" width=\"15\" height=\"13\"\u003e\u003c\/rect\u003e\u003cpath d=\"M16 8h4l3 3v5h-7zM5.5 20a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5zM18.5 20a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e Livraison gratuite à partir de 100$\u003c\/li\u003e\n\u003cli class=\"tree-trust__item\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M9 11H5a2 2 0 0 0-2 2v7a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7a2 2 0 0 0-2-2h-4\"\u003e\u003c\/path\u003e\u003cpolyline points=\"9 11 9 7 15 7 15 11\"\u003e\u003c\/polyline\u003e\u003ccircle cx=\"12\" cy=\"16\" r=\"1\"\u003e\u003c\/circle\u003e\u003c\/svg\u003e Fiable par plus de 200 000+\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/section\u003e\n\u003cscript\u003e\n(function () {\n  var root = document.querySelector('.tree-hero[data-product-handle]');\n  if (!root) return;\n\n  var KLAVIYO_PUBLIC_KEY = 'QeupfE';\n\n  \/\/ ---- Gallery slider ----\n  var track = root.querySelector('#tree-gallery-track');\n  var slides = track ? track.querySelectorAll('.tree-gallery__slide') : [];\n  var prevBtn = root.querySelector('.tree-gallery__arrow--prev');\n  var nextBtn = root.querySelector('.tree-gallery__arrow--next');\n  var counter = root.querySelector('#tree-gallery-counter');\n  var dotsEl = root.querySelector('#tree-gallery-dots');\n  var currentIndex = 0;\n\n  if (dotsEl \u0026\u0026 slides.length) {\n    for (var i = 0; i \u003c slides.length; i++) {\n      var dot = document.createElement('button');\n      dot.type = 'button';\n      dot.className = 'tree-gallery__dot';\n      dot.setAttribute('role', 'tab');\n      dot.setAttribute('aria-label', 'Go to image ' + (i + 1));\n      dot.setAttribute('aria-current', i === 0 ? 'true' : 'false');\n      dot.setAttribute('data-index', i);\n      dotsEl.appendChild(dot);\n    }\n  }\n  var dots = dotsEl ? dotsEl.querySelectorAll('.tree-gallery__dot') : [];\n\n  function goToSlide(index) {\n    if (!track || !slides.length) return;\n    index = Math.max(0, Math.min(slides.length - 1, index));\n    currentIndex = index;\n    track.scrollTo({ left: slides[index].offsetLeft, behavior: 'smooth' });\n    updateSliderUI();\n  }\n\n  function updateSliderUI() {\n    if (counter) counter.textContent = (currentIndex + 1) + ' \/ ' + slides.length;\n    dots.forEach(function (d, i) {\n      d.setAttribute('aria-current', i === currentIndex ? 'true' : 'false');\n    });\n    if (prevBtn) prevBtn.disabled = currentIndex === 0;\n    if (nextBtn) nextBtn.disabled = currentIndex === slides.length - 1;\n  }\n\n  if (prevBtn) prevBtn.addEventListener('click', function () { goToSlide(currentIndex - 1); });\n  if (nextBtn) nextBtn.addEventListener('click', function () { goToSlide(currentIndex + 1); });\n  dots.forEach(function (d) {\n    d.addEventListener('click', function () {\n      goToSlide(parseInt(d.getAttribute('data-index'), 10));\n    });\n  });\n\n  if (track) {\n    var scrollTimer;\n    track.addEventListener('scroll', function () {\n      clearTimeout(scrollTimer);\n      scrollTimer = setTimeout(function () {\n        var idx = Math.round(track.scrollLeft \/ track.clientWidth);\n        if (idx !== currentIndex) {\n          currentIndex = idx;\n          updateSliderUI();\n        }\n      }, 80);\n    });\n  }\n\n  updateSliderUI();\n\n  \/\/ ---- Variant state ----\n  var cards = root.querySelectorAll('.tree-variants__card');\n  var selected = root.querySelector('.tree-variants__card[aria-pressed=\"true\"]') || cards[0];\n\n  function applySelection(card) {\n    if (card.getAttribute('data-available') === 'false') return;\n    cards.forEach(function (c) { c.setAttribute('aria-pressed', 'false'); });\n    card.setAttribute('aria-pressed', 'true');\n    selected = card;\n\n    var name = card.getAttribute('data-variant-name');\n    var id = card.getAttribute('data-variant-id');\n\n    root.querySelector('#tree-selected-name').textContent = name;\n    root.querySelector('#tree-cart-variant').value = id;\n    root.querySelector('#tree-notify-variant').value = id;\n\n    \/\/ Jump slider to the wheels detail when \"Wheels\" is selected\n    if (name === 'Wheels' \u0026\u0026 slides.length \u003e 2) {\n      goToSlide(2); \/\/ wheels detail is slide 3\n    }\n\n    var available = card.getAttribute('data-available') !== 'false';\n    root.setAttribute('data-stock', available ? 'in' : 'out');\n\n    var priceCents = card.getAttribute('data-price-cents');\n    if (priceCents) updatePriceDisplays(parseInt(priceCents, 10));\n  }\n\n  function formatMoney(cents) {\n    \/\/ Try Shopify's built-in formatter first (respects shop's money format + active currency)\n    if (window.Shopify \u0026\u0026 typeof window.Shopify.formatMoney === 'function') {\n      var fmt = (window.Shopify.money_format) || '${{amount}}';\n      return window.Shopify.formatMoney(cents, fmt);\n    }\n    \/\/ Fallback: USD formatting\n    return '$' + (cents \/ 100).toFixed(2);\n  }\n\n  function getCurrencyCode() {\n    \/\/ Shopify Currency app exposes the active currency on Shopify.currency.active\n    if (window.Shopify \u0026\u0026 window.Shopify.currency \u0026\u0026 window.Shopify.currency.active) {\n      return window.Shopify.currency.active;\n    }\n    return 'USD';\n  }\n\n  function updatePriceDisplays(priceCents) {\n    var formatted = formatMoney(priceCents);\n    var currency = getCurrencyCode();\n    root.querySelector('#tree-price').textContent = formatted + ' ' + currency;\n    root.querySelector('#tree-installment').textContent = formatMoney(priceCents \/ 4);\n    root.querySelector('#tree-cta-price').textContent = formatted;\n  }\n\n  cards.forEach(function (c) {\n    c.addEventListener('click', function () { applySelection(c); });\n  });\n\n  \/\/ ---- Initial price render (uses fallback price until fetch resolves) ----\n  \/\/ Default $199 if we have nothing better yet\n  updatePriceDisplays(19900);\n\n  \/\/ ---- Live Shopify product JSON fetch ----\n  var handle = root.getAttribute('data-product-handle');\n  fetch('\/products\/' + handle + '.js', { headers: { 'Accept': 'application\/json' } })\n    .then(function (r) { return r.ok ? r.json() : null; })\n    .then(function (data) {\n      if (!data || !data.variants) return;\n\n      \/\/ Match cards to variants by name fragment\n      cards.forEach(function (card) {\n        var wantName = card.getAttribute('data-variant-name').toLowerCase();\n        var match;\n        if (wantName === 'no wheels') {\n          \/\/ Match exactly \"no wheels\" (be careful — \"wheels\" matches both)\n          match = data.variants.find(function (v) {\n            var vn = (v.name || v.title || '').toLowerCase();\n            return vn.indexOf('no wheel') !== -1 || vn.indexOf('without') !== -1;\n          });\n        } else {\n          \/\/ \"Wheels\" variant — match anything with \"wheel\" but not \"no wheel\"\n          match = data.variants.find(function (v) {\n            var vn = (v.name || v.title || '').toLowerCase();\n            return vn.indexOf('wheel') !== -1 \u0026\u0026 vn.indexOf('no wheel') === -1 \u0026\u0026 vn.indexOf('without') === -1;\n          });\n        }\n\n        if (match) {\n          card.setAttribute('data-variant-id', match.id);\n          card.setAttribute('data-price-cents', match.price);\n          card.setAttribute('data-available', match.available ? 'true' : 'false');\n        } else {\n          card.setAttribute('data-available', 'false');\n        }\n      });\n\n      \/\/ If currently selected is unavailable, fall back to first available\n      if (selected.getAttribute('data-available') === 'false') {\n        var firstAvail = Array.prototype.find.call(cards, function (c) {\n          return c.getAttribute('data-available') !== 'false';\n        });\n        if (firstAvail) selected = firstAvail;\n      }\n\n      applySelection(selected);\n    })\n    .catch(function () { \/* silent *\/ });\n\n  \/\/ ---- Re-render prices if user changes currency on the page ----\n  \/\/ Most Shopify currency apps fire a custom event or modify Shopify.currency.active.\n  \/\/ Watch for both common patterns:\n  document.addEventListener('currency:changed', function () {\n    if (selected) applySelection(selected);\n  });\n  \/\/ Some apps (e.g. Shopify's native multi-currency) reload the page on switch,\n  \/\/ but if not, this listener catches it.\n\n  \/\/ ---- Klaviyo back-in-stock submit ----\n  var form = root.querySelector('#tree-notify-form');\n  if (!form) return;\n\n  form.addEventListener('submit', function (e) {\n    e.preventDefault();\n\n    var emailInput = form.querySelector('input[name=\"contact[email]\"]');\n    var variantInput = form.querySelector('input[name=\"variant_id\"]');\n    var btn = form.querySelector('.tree-notify__btn');\n    var btnLabel = form.querySelector('.tree-notify__btn-label');\n\n    var email = (emailInput.value || '').trim();\n    var variantId = (variantInput.value || '').trim();\n\n    if (!email || !variantId || variantId.indexOf('REPLACE_') === 0) {\n      form.setAttribute('data-state', 'error');\n      return;\n    }\n\n    btn.disabled = true;\n    var originalLabel = btnLabel.textContent;\n    btnLabel.textContent = 'Submitting…';\n    form.removeAttribute('data-state');\n\n    var payload = {\n      data: {\n        type: 'back-in-stock-subscription',\n        attributes: {\n          profile: { data: { type: 'profile', attributes: { email: email } } },\n          channels: ['EMAIL']\n        },\n        relationships: {\n          variant: { data: { type: 'catalog-variant', id: '$shopify:::$default:::' + variantId } }\n        }\n      }\n    };\n\n    fetch('https:\/\/a.klaviyo.com\/client\/back-in-stock-subscriptions\/?company_id=' + KLAVIYO_PUBLIC_KEY, {\n      method: 'POST',\n      headers: { 'Content-Type': 'application\/json', 'revision': '2024-10-15' },\n      body: JSON.stringify(payload)\n    })\n      .then(function (res) {\n        if (res.ok || res.status === 202) {\n          form.setAttribute('data-state', 'success');\n        } else {\n          form.setAttribute('data-state', 'error');\n          btn.disabled = false;\n          btnLabel.textContent = originalLabel;\n        }\n      })\n      .catch(function () {\n        form.setAttribute('data-state', 'error');\n        btn.disabled = false;\n        btnLabel.textContent = originalLabel;\n      });\n  });\n})();\n\u003c\/script\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"shg-c shg-align-left\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cstyle\u003e\n  .ks-trust {\n    --kst-bg: #f5f1ea;       \/* cream *\/\n    --kst-white: #ffffff;\n    --kst-off: #faf7f2;\n    --kst-sand: #e8e0d3;\n    --kst-ink: #2a2a2a;      \/* char *\/\n    --kst-black: #111111;\n    --kst-muted: #8a8378;\n    --kst-accent: #1972bc;   \/* blue *\/\n    --kst-accent-d: #155a96;\n    --fo: \"Oswald\", Impact, sans-serif;\n    --fd: \"Bebas Neue\", Impact, sans-serif;\n    --fb: \"Barlow\", system-ui, sans-serif;\n    --fc: \"Barlow Condensed\", system-ui, sans-serif;\n    box-sizing: border-box;\n  }\n  .ks-trust *, .ks-trust *::before, .ks-trust *::after { box-sizing: border-box; }\n\n  \/* ========== GUARANTEE BLOCK ========== *\/\n  .ks-guarantee {\n    background: var(--kst-black);\n    color: var(--kst-white);\n    padding: 72px 16px;\n  }\n  .ks-guarantee__grid {\n    max-width: 1200px;\n    margin: 0 auto;\n    display: grid;\n    grid-template-columns: 1fr;\n    gap: 40px;\n    align-items: center;\n  }\n  @media (min-width: 860px) {\n    .ks-guarantee { padding: 96px 24px; }\n    .ks-guarantee__grid { grid-template-columns: 360px 1fr; gap: 72px; }\n  }\n\n  \/* ----- Badge (stamped seal style) ----- *\/\n  .ks-guarantee__badge-wrap {\n    display: flex;\n    justify-content: center;\n    align-items: center;\n  }\n  .ks-guarantee__badge {\n    position: relative;\n    width: 280px;\n    height: 280px;\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    justify-content: center;\n    background: var(--kst-accent);\n    color: var(--kst-white);\n    border-radius: 6px;\n    padding: 24px;\n    text-align: center;\n    box-shadow: 0 0 0 6px var(--kst-black), 0 0 0 8px var(--kst-accent);\n    transform: rotate(-4deg);\n  }\n  .ks-guarantee__badge::before,\n  .ks-guarantee__badge::after {\n    content: \"\";\n    position: absolute;\n    left: 14px; right: 14px;\n    height: 1px;\n    background: rgba(255,255,255,.35);\n  }\n  .ks-guarantee__badge::before { top: 14px; }\n  .ks-guarantee__badge::after  { bottom: 14px; }\n\n  .ks-guarantee__badge-arc {\n    font-family: var(--fc);\n    font-size: 11px;\n    letter-spacing: .28em;\n    text-transform: uppercase;\n    color: rgba(255,255,255,.85);\n    margin-bottom: 4px;\n  }\n  .ks-guarantee__badge-top {\n    display: flex;\n    align-items: flex-start;\n    justify-content: center;\n    line-height: .85;\n    gap: 4px;\n  }\n  .ks-guarantee__badge-days {\n    font-family: var(--fo);\n    font-size: 128px;\n    line-height: .85;\n    color: var(--kst-white);\n    letter-spacing: -.04em;\n    font-weight: 700;\n  }\n  .ks-guarantee__badge-unit {\n    font-family: var(--fd);\n    font-size: 28px;\n    letter-spacing: .04em;\n    color: var(--kst-white);\n    text-transform: uppercase;\n    margin-top: 10px;\n  }\n  .ks-guarantee__badge-label {\n    font-family: var(--fd);\n    font-size: 20px;\n    letter-spacing: .12em;\n    color: var(--kst-white);\n    text-transform: uppercase;\n    line-height: 1;\n    margin-top: 2px;\n  }\n  .ks-guarantee__badge-sub {\n    font-family: var(--fc);\n    font-size: 11px;\n    letter-spacing: .18em;\n    text-transform: uppercase;\n    color: rgba(255,255,255,.7);\n    margin: 10px 0 0;\n  }\n\n  \/* ----- Content ----- *\/\n  .ks-guarantee__eyebrow {\n    font-family: var(--fc);\n    font-size: 13px;\n    letter-spacing: .14em;\n    text-transform: uppercase;\n    color: var(--kst-accent);\n    margin: 0 0 12px;\n  }\n  .ks-guarantee__title {\n    font-family: var(--fo);\n    font-weight: 600;\n    font-size: clamp(32px, 4.2vw, 52px);\n    line-height: 1;\n    text-transform: uppercase;\n    color: var(--kst-white);\n    margin: 0 0 20px;\n  }\n  .ks-guarantee__title em {\n    color: var(--kst-accent);\n    font-style: normal;\n  }\n  .ks-guarantee__desc {\n    font-family: var(--fb);\n    font-size: 16px;\n    line-height: 1.6;\n    color: rgba(255,255,255,.72);\n    margin: 0 0 28px;\n    max-width: 56ch;\n  }\n\n  .ks-guarantee__features {\n    display: grid;\n    grid-template-columns: 1fr;\n    gap: 8px;\n  }\n  @media (min-width: 600px) {\n    .ks-guarantee__features { grid-template-columns: 1fr 1fr; gap: 10px; }\n  }\n  .ks-guarantee__feature {\n    display: flex;\n    align-items: center;\n    gap: 10px;\n    padding: 12px 14px;\n    background: rgba(255,255,255,.04);\n    border: 1px solid rgba(255,255,255,.08);\n    border-radius: 6px;\n    font-family: var(--fb);\n    font-size: 14px;\n    color: var(--kst-white);\n  }\n  .ks-guarantee__feature-icon {\n    flex: 0 0 20px;\n    width: 20px; height: 20px;\n    border-radius: 50%;\n    background: var(--kst-accent);\n    display: flex; align-items: center; justify-content: center;\n    color: var(--kst-white);\n  }\n  .ks-guarantee__feature-icon svg { width: 12px; height: 12px; }\n\n  \/* ========== SOCIAL PROOF BLOCK ========== *\/\n  .ks-social {\n    background: var(--kst-bg);\n    padding: 72px 0 80px;\n  }\n  .ks-social__header {\n    text-align: center;\n    max-width: 700px;\n    margin: 0 auto 40px;\n    padding: 0 20px;\n  }\n  .ks-social__eyebrow {\n    font-family: var(--fc);\n    font-size: 13px;\n    letter-spacing: .14em;\n    text-transform: uppercase;\n    color: var(--kst-accent);\n    margin: 0 0 10px;\n  }\n  .ks-social__count {\n    font-family: var(--fo);\n    font-size: clamp(56px, 9vw, 96px);\n    line-height: 1;\n    color: var(--kst-black);\n    display: block;\n    margin: 0 0 6px;\n    letter-spacing: -.02em;\n  }\n  .ks-social__title {\n    font-family: var(--fd);\n    font-size: clamp(20px, 2.5vw, 26px);\n    letter-spacing: .04em;\n    color: var(--kst-ink);\n    text-transform: uppercase;\n    margin: 0;\n  }\n\n  \/* ----- Marquee ----- *\/\n  .ks-marquee {\n    position: relative;\n    overflow: hidden;\n    mask-image: linear-gradient(to right, transparent 0, #000 80px, #000 calc(100% - 80px), transparent 100%);\n    -webkit-mask-image: linear-gradient(to right, transparent 0, #000 80px, #000 calc(100% - 80px), transparent 100%);\n  }\n  .ks-marquee__track {\n    display: flex;\n    animation: ks-scroll 40s linear infinite;\n    will-change: transform;\n  }\n  .ks-marquee:hover .ks-marquee__track { animation-play-state: paused; }\n  @keyframes ks-scroll {\n    0%   { transform: translateX(0); }\n    100% { transform: translateX(-50%); }\n  }\n  .ks-marquee__group {\n    display: flex;\n    gap: 14px;\n    padding: 0 7px;\n    flex-shrink: 0;\n  }\n\n  .ks-athlete {\n    position: relative;\n    width: 200px; height: 200px;\n    border-radius: 6px;\n    overflow: hidden;\n    flex-shrink: 0;\n    background: var(--kst-white);\n    cursor: pointer;\n  }\n  @media (max-width: 600px) {\n    .ks-athlete { width: 150px; height: 150px; }\n  }\n  .ks-athlete img {\n    width: 100%; height: 100%;\n    object-fit: cover;\n    display: block;\n    transition: transform .4s ease;\n  }\n  .ks-athlete:hover img { transform: scale(1.06); }\n  .ks-athlete__overlay {\n    position: absolute;\n    inset: auto 0 0 0;\n    padding: 30px 12px 10px;\n    background: linear-gradient(to top, rgba(0,0,0,.85) 0%, transparent 100%);\n    opacity: 0;\n    transition: opacity .25s ease;\n  }\n  .ks-athlete:hover .ks-athlete__overlay { opacity: 1; }\n  .ks-athlete__name {\n    font-family: var(--fd);\n    font-size: 16px;\n    letter-spacing: .04em;\n    color: var(--kst-white);\n    line-height: 1;\n    margin-bottom: 3px;\n  }\n  .ks-athlete__sport {\n    font-family: var(--fc);\n    font-size: 11px;\n    letter-spacing: .1em;\n    text-transform: uppercase;\n    color: var(--kst-accent);\n  }\n\n  \/* ----- Stats ----- *\/\n  .ks-stats {\n    max-width: 1200px;\n    margin: 56px auto 0;\n    padding: 0 20px;\n    display: grid;\n    grid-template-columns: repeat(2, 1fr);\n    gap: 1px;\n    background: var(--kst-sand);\n    border-radius: 6px;\n    overflow: hidden;\n  }\n  @media (min-width: 860px) {\n    .ks-stats { grid-template-columns: repeat(4, 1fr); }\n  }\n  .ks-stat {\n    background: var(--kst-white);\n    padding: 28px 16px;\n    text-align: center;\n  }\n  .ks-stat__num {\n    font-family: var(--fo);\n    font-size: clamp(32px, 4vw, 44px);\n    line-height: 1;\n    color: var(--kst-black);\n    margin: 0 0 8px;\n    letter-spacing: -.01em;\n  }\n  .ks-stat__label {\n    font-family: var(--fc);\n    font-size: 12px;\n    letter-spacing: .12em;\n    text-transform: uppercase;\n    color: var(--kst-muted);\n    margin: 0;\n  }\n\n  #judgeme_widget_placeholder {\n    max-width: 1200px;\n    margin: 48px auto 0;\n    padding: 0 20px;\n  }\n\u003c\/style\u003e\n\u003cdiv class=\"shogun-root\" data-shogun-id=\"69ef8ed24b088f13e243ebf8\" data-shogun-site-id=\"d921f9ba-aa7a-4156-9e44-53aad23b56fb\" data-shogun-page-id=\"69ef8ed24b088f13e243ebf8\" data-shogun-page-version-id=\"69ef90a6682591347bb083f1\" data-shogun-platform-type=\"shopify\" data-shogun-variant-id=\"69ef90a6682591347bb083f7\" data-shogun-page-type=\"product\" data-shogun-power-up-type=\"\" data-shogun-power-up-id=\"\" data-region=\"main\"\u003e\n\u003cdiv id=\"s-3cdaa2b6-28c0-4cec-bc6e-763ef3405ef7\" class=\"shg-c shg-align-left\"\u003e\n\u003cdiv class=\"ks-trust\"\u003e\n\u003csection class=\"ks-guarantee\" aria-label=\"100-day guarantee\"\u003e\n\u003cdiv class=\"ks-guarantee__grid\"\u003e\n\u003cdiv class=\"ks-guarantee__badge-wrap\"\u003e\n\u003cdiv class=\"ks-guarantee__badge\" aria-label=\"100 day money back guarantee\"\u003e\n\u003cspan class=\"ks-guarantee__badge-arc\"\u003ePromesse Kensui\u003c\/span\u003e\n\u003cdiv class=\"ks-guarantee__badge-top\"\u003e\n\u003cspan class=\"ks-guarantee__badge-days\"\u003e100\u003c\/span\u003e \u003cspan class=\"ks-guarantee__badge-unit\"\u003eJours\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cspan class=\"ks-guarantee__badge-label\"\u003eRemboursement\u003c\/span\u003e \u003cspan class=\"ks-guarantee__badge-sub\"\u003eSans poser de questions\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"ks-guarantee__content\"\u003e\n\u003cp class=\"ks-guarantee__eyebrow\"\u003eLa promesse Kensui\u003c\/p\u003e\n\u003ch2 class=\"ks-guarantee__title\"\u003eVotre succès\u003cbr\u003e\u003cem\u003eest garanti.\u003c\/em\u003e\n\u003c\/h2\u003e\n\u003cp class=\"ks-guarantee__desc\"\u003eNous voulons que vous atteigniez vos objectifs de fitness, que vous profitiez de votre vie et que vous vous sentiez en bonne santé. La dernière chose que nous voulons est de créer plus de stress — donc si vous décidez que ce n’est pas pour vous, nous vous offrirons un remboursement complet, sans tracas ni questions.\u003c\/p\u003e\n\u003cul class=\"ks-guarantee__features\" role=\"list\"\u003e\n\u003cli class=\"ks-guarantee__feature\"\u003e\n\u003cspan class=\"ks-guarantee__feature-icon\" aria-hidden=\"true\"\u003e \u003csvg viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"3.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\u003e\u003cpolyline points=\"20 6 9 17 4 12\"\u003e\u003c\/polyline\u003e\u003c\/svg\u003e \u003c\/span\u003e Essai sans risque de 100 jours\u003c\/li\u003e\n\u003cli class=\"ks-guarantee__feature\"\u003e\n\u003cspan class=\"ks-guarantee__feature-icon\" aria-hidden=\"true\"\u003e \u003csvg viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"3.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\u003e\u003cpolyline points=\"20 6 9 17 4 12\"\u003e\u003c\/polyline\u003e\u003c\/svg\u003e \u003c\/span\u003e Remboursement complet si insatisfait\u003c\/li\u003e\n\u003cli class=\"ks-guarantee__feature\"\u003e\n\u003cspan class=\"ks-guarantee__feature-icon\" aria-hidden=\"true\"\u003e \u003csvg viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"3.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\u003e\u003cpolyline points=\"20 6 9 17 4 12\"\u003e\u003c\/polyline\u003e\u003c\/svg\u003e \u003c\/span\u003e Sans poser de questions\u003c\/li\u003e\n\u003cli class=\"ks-guarantee__feature\"\u003e\n\u003cspan class=\"ks-guarantee__feature-icon\" aria-hidden=\"true\"\u003e \u003csvg viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"3.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\u003e\u003cpolyline points=\"20 6 9 17 4 12\"\u003e\u003c\/polyline\u003e\u003c\/svg\u003e \u003c\/span\u003e Garantie incluse\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/section\u003e\n\u003csection class=\"ks-social\" aria-label=\"Trusted by 200,000+ athletes\"\u003e\n\u003cdiv class=\"ks-social__header\"\u003e\n\u003cp class=\"ks-social__eyebrow\"\u003eFiable dans le monde entier\u003c\/p\u003e\n\u003cspan class=\"ks-social__count\" data-animate-count=\"200000\" data-suffix=\"+\"\u003e200 000+\u003c\/span\u003e\n\u003ch2 class=\"ks-social__title\"\u003eAthlètes dans le monde entier\u003c\/h2\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"ks-marquee\"\u003e\n\u003cdiv class=\"ks-marquee__track\"\u003e\n\u003cdiv class=\"ks-marquee__group\"\u003e\n\u003cfigure class=\"ks-athlete\"\u003e\u003cimg loading=\"lazy\" src=\"https:\/\/i.shgcdn.com\/1a870660-76c0-4799-be89-7cf273afe2b0\/-\/format\/auto\/-\/preview\/3000x3000\/-\/quality\/lighter\/-\/resize\/400x\/\" srcset=\"https:\/\/i.shgcdn.com\/1a870660-76c0-4799-be89-7cf273afe2b0\/-\/format\/auto\/-\/preview\/3000x3000\/-\/quality\/lighter\/-\/resize\/300x\/ 300w, https:\/\/i.shgcdn.com\/1a870660-76c0-4799-be89-7cf273afe2b0\/-\/format\/auto\/-\/preview\/3000x3000\/-\/quality\/lighter\/-\/resize\/400x\/ 400w\" sizes=\"200px\" width=\"400\" height=\"400\" alt=\"\"\u003e\n\u003cfigcaption class=\"ks-athlete__overlay\"\u003e\n\u003cdiv class=\"ks-athlete__name\"\u003eJohn D.\u003c\/div\u003e\n\u003cdiv class=\"ks-athlete__sport\"\u003eCrossFit\u003c\/div\u003e\n\u003c\/figcaption\u003e\n\u003c\/figure\u003e\n\u003cfigure class=\"ks-athlete\"\u003e\u003cimg loading=\"lazy\" src=\"https:\/\/i.shgcdn.com\/fb23d8ec-a3f2-4bab-a011-d4c2976f27a7\/-\/format\/auto\/-\/preview\/3000x3000\/-\/quality\/lighter\/-\/resize\/400x\/\" srcset=\"https:\/\/i.shgcdn.com\/fb23d8ec-a3f2-4bab-a011-d4c2976f27a7\/-\/format\/auto\/-\/preview\/3000x3000\/-\/quality\/lighter\/-\/resize\/300x\/ 300w, https:\/\/i.shgcdn.com\/fb23d8ec-a3f2-4bab-a011-d4c2976f27a7\/-\/format\/auto\/-\/preview\/3000x3000\/-\/quality\/lighter\/-\/resize\/400x\/ 400w\" sizes=\"200px\" width=\"400\" height=\"400\" alt=\"\"\u003e\n\u003cfigcaption class=\"ks-athlete__overlay\"\u003e\n\u003cdiv class=\"ks-athlete__name\"\u003eSarah M.\u003c\/div\u003e\n\u003cdiv class=\"ks-athlete__sport\"\u003eCalisthénie\u003c\/div\u003e\n\u003c\/figcaption\u003e\n\u003c\/figure\u003e\n\u003cfigure class=\"ks-athlete\"\u003e\u003cimg loading=\"lazy\" src=\"https:\/\/i.shgcdn.com\/99b9bf0a-ba81-43b2-8628-8b74b1768199\/-\/format\/auto\/-\/preview\/3000x3000\/-\/quality\/lighter\/-\/resize\/400x\/\" srcset=\"https:\/\/i.shgcdn.com\/99b9bf0a-ba81-43b2-8628-8b74b1768199\/-\/format\/auto\/-\/preview\/3000x3000\/-\/quality\/lighter\/-\/resize\/300x\/ 300w, https:\/\/i.shgcdn.com\/99b9bf0a-ba81-43b2-8628-8b74b1768199\/-\/format\/auto\/-\/preview\/3000x3000\/-\/quality\/lighter\/-\/resize\/400x\/ 400w\" sizes=\"200px\" width=\"400\" height=\"400\" alt=\"\"\u003e\n\u003cfigcaption class=\"ks-athlete__overlay\"\u003e\n\u003cdiv class=\"ks-athlete__name\"\u003eEric B.\u003c\/div\u003e\n\u003cdiv class=\"ks-athlete__sport\"\u003ePowerlifting\u003c\/div\u003e\n\u003c\/figcaption\u003e\n\u003c\/figure\u003e\n\u003cfigure class=\"ks-athlete\"\u003e\u003cimg loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0229\/1249\/9792\/files\/7.jpg?v=1747906467\u0026amp;width=400\u0026amp;format=webp\" srcset=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0229\/1249\/9792\/files\/7.jpg?v=1747906467\u0026amp;width=300\u0026amp;format=webp 300w, https:\/\/cdn.shopify.com\/s\/files\/1\/0229\/1249\/9792\/files\/7.jpg?v=1747906467\u0026amp;width=400\u0026amp;format=webp 400w\" sizes=\"200px\" width=\"400\" height=\"400\" alt=\"\"\u003e\n\u003cfigcaption class=\"ks-athlete__overlay\"\u003e\n\u003cdiv class=\"ks-athlete__name\"\u003eLuke K.\u003c\/div\u003e\n\u003cdiv class=\"ks-athlete__sport\"\u003eYoga\u003c\/div\u003e\n\u003c\/figcaption\u003e\n\u003c\/figure\u003e\n\u003cfigure class=\"ks-athlete\"\u003e\u003cimg loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0229\/1249\/9792\/files\/10_73d4f91e-83c8-424c-9287-64f823c17c35.jpg?v=1747906467\u0026amp;width=400\u0026amp;format=webp\" srcset=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0229\/1249\/9792\/files\/10_73d4f91e-83c8-424c-9287-64f823c17c35.jpg?v=1747906467\u0026amp;width=300\u0026amp;format=webp 300w, https:\/\/cdn.shopify.com\/s\/files\/1\/0229\/1249\/9792\/files\/10_73d4f91e-83c8-424c-9287-64f823c17c35.jpg?v=1747906467\u0026amp;width=400\u0026amp;format=webp 400w\" sizes=\"200px\" width=\"400\" height=\"400\" alt=\"\"\u003e\n\u003cfigcaption class=\"ks-athlete__overlay\"\u003e\n\u003cdiv class=\"ks-athlete__name\"\u003eTom B.\u003c\/div\u003e\n\u003cdiv class=\"ks-athlete__sport\"\u003ePowerlifting\u003c\/div\u003e\n\u003c\/figcaption\u003e\n\u003c\/figure\u003e\n\u003cfigure class=\"ks-athlete\"\u003e\u003cimg loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0229\/1249\/9792\/files\/5_da5a09f9-6eef-4008-a04b-c67b919bb772.jpg?v=1747906467\u0026amp;width=400\u0026amp;format=webp\" srcset=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0229\/1249\/9792\/files\/5_da5a09f9-6eef-4008-a04b-c67b919bb772.jpg?v=1747906467\u0026amp;width=300\u0026amp;format=webp 300w, https:\/\/cdn.shopify.com\/s\/files\/1\/0229\/1249\/9792\/files\/5_da5a09f9-6eef-4008-a04b-c67b919bb772.jpg?v=1747906467\u0026amp;width=400\u0026amp;format=webp 400w\" sizes=\"200px\" width=\"400\" height=\"400\" alt=\"\"\u003e\n\u003cfigcaption class=\"ks-athlete__overlay\"\u003e\n\u003cdiv class=\"ks-athlete__name\"\u003eElias S.\u003c\/div\u003e\n\u003cdiv class=\"ks-athlete__sport\"\u003eMMA\u003c\/div\u003e\n\u003c\/figcaption\u003e\n\u003c\/figure\u003e\n\u003cfigure class=\"ks-athlete\"\u003e\u003cimg loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0229\/1249\/9792\/files\/6_f24a5899-7d7e-4c4e-a5d8-c2078dc665a8.jpg?v=1747906467\u0026amp;width=400\u0026amp;format=webp\" srcset=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0229\/1249\/9792\/files\/6_f24a5899-7d7e-4c4e-a5d8-c2078dc665a8.jpg?v=1747906467\u0026amp;width=300\u0026amp;format=webp 300w, https:\/\/cdn.shopify.com\/s\/files\/1\/0229\/1249\/9792\/files\/6_f24a5899-7d7e-4c4e-a5d8-c2078dc665a8.jpg?v=1747906467\u0026amp;width=400\u0026amp;format=webp 400w\" sizes=\"200px\" width=\"400\" height=\"400\" alt=\"\"\u003e\n\u003cfigcaption class=\"ks-athlete__overlay\"\u003e\n\u003cdiv class=\"ks-athlete__name\"\u003eAlex P.\u003c\/div\u003e\n\u003cdiv class=\"ks-athlete__sport\"\u003eCalisthénie\u003c\/div\u003e\n\u003c\/figcaption\u003e\n\u003c\/figure\u003e\n\u003cfigure class=\"ks-athlete\"\u003e\u003cimg loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0229\/1249\/9792\/files\/2.jpg?v=1747906467\u0026amp;width=400\u0026amp;format=webp\" srcset=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0229\/1249\/9792\/files\/2.jpg?v=1747906467\u0026amp;width=300\u0026amp;format=webp 300w, https:\/\/cdn.shopify.com\/s\/files\/1\/0229\/1249\/9792\/files\/2.jpg?v=1747906467\u0026amp;width=400\u0026amp;format=webp 400w\" sizes=\"200px\" width=\"400\" height=\"400\" alt=\"\"\u003e\n\u003cfigcaption class=\"ks-athlete__overlay\"\u003e\n\u003cdiv class=\"ks-athlete__name\"\u003eNina L.\u003c\/div\u003e\n\u003cdiv class=\"ks-athlete__sport\"\u003eNatation\u003c\/div\u003e\n\u003c\/figcaption\u003e\n\u003c\/figure\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"ks-marquee__group\" aria-hidden=\"true\"\u003e\n\u003cfigure class=\"ks-athlete\"\u003e\u003cimg loading=\"lazy\" src=\"https:\/\/i.shgcdn.com\/1a870660-76c0-4799-be89-7cf273afe2b0\/-\/format\/auto\/-\/preview\/3000x3000\/-\/quality\/lighter\/-\/resize\/400x\/\" width=\"400\" height=\"400\" alt=\"\"\u003e\n\u003cfigcaption class=\"ks-athlete__overlay\"\u003e\n\u003cdiv class=\"ks-athlete__name\"\u003eJohn D.\u003c\/div\u003e\n\u003cdiv class=\"ks-athlete__sport\"\u003eCrossFit\u003c\/div\u003e\n\u003c\/figcaption\u003e\n\u003c\/figure\u003e\n\u003cfigure class=\"ks-athlete\"\u003e\u003cimg loading=\"lazy\" src=\"https:\/\/i.shgcdn.com\/fb23d8ec-a3f2-4bab-a011-d4c2976f27a7\/-\/format\/auto\/-\/preview\/3000x3000\/-\/quality\/lighter\/-\/resize\/400x\/\" width=\"400\" height=\"400\" alt=\"\"\u003e\n\u003cfigcaption class=\"ks-athlete__overlay\"\u003e\n\u003cdiv class=\"ks-athlete__name\"\u003eSarah M.\u003c\/div\u003e\n\u003cdiv class=\"ks-athlete__sport\"\u003eCalisthénie\u003c\/div\u003e\n\u003c\/figcaption\u003e\n\u003c\/figure\u003e\n\u003cfigure class=\"ks-athlete\"\u003e\u003cimg loading=\"lazy\" src=\"https:\/\/i.shgcdn.com\/99b9bf0a-ba81-43b2-8628-8b74b1768199\/-\/format\/auto\/-\/preview\/3000x3000\/-\/quality\/lighter\/-\/resize\/400x\/\" width=\"400\" height=\"400\" alt=\"\"\u003e\n\u003cfigcaption class=\"ks-athlete__overlay\"\u003e\n\u003cdiv class=\"ks-athlete__name\"\u003eEric B.\u003c\/div\u003e\n\u003cdiv class=\"ks-athlete__sport\"\u003ePowerlifting\u003c\/div\u003e\n\u003c\/figcaption\u003e\n\u003c\/figure\u003e\n\u003cfigure class=\"ks-athlete\"\u003e\u003cimg loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0229\/1249\/9792\/files\/7.jpg?v=1747906467\u0026amp;width=400\u0026amp;format=webp\" width=\"400\" height=\"400\" alt=\"\"\u003e\n\u003cfigcaption class=\"ks-athlete__overlay\"\u003e\n\u003cdiv class=\"ks-athlete__name\"\u003eLuke K.\u003c\/div\u003e\n\u003cdiv class=\"ks-athlete__sport\"\u003eYoga\u003c\/div\u003e\n\u003c\/figcaption\u003e\n\u003c\/figure\u003e\n\u003cfigure class=\"ks-athlete\"\u003e\u003cimg loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0229\/1249\/9792\/files\/10_73d4f91e-83c8-424c-9287-64f823c17c35.jpg?v=1747906467\u0026amp;width=400\u0026amp;format=webp\" width=\"400\" height=\"400\" alt=\"\"\u003e\n\u003cfigcaption class=\"ks-athlete__overlay\"\u003e\n\u003cdiv class=\"ks-athlete__name\"\u003eTom B.\u003c\/div\u003e\n\u003cdiv class=\"ks-athlete__sport\"\u003ePowerlifting\u003c\/div\u003e\n\u003c\/figcaption\u003e\n\u003c\/figure\u003e\n\u003cfigure class=\"ks-athlete\"\u003e\u003cimg loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0229\/1249\/9792\/files\/5_da5a09f9-6eef-4008-a04b-c67b919bb772.jpg?v=1747906467\u0026amp;width=400\u0026amp;format=webp\" width=\"400\" height=\"400\" alt=\"\"\u003e\n\u003cfigcaption class=\"ks-athlete__overlay\"\u003e\n\u003cdiv class=\"ks-athlete__name\"\u003eElias S.\u003c\/div\u003e\n\u003cdiv class=\"ks-athlete__sport\"\u003eMMA\u003c\/div\u003e\n\u003c\/figcaption\u003e\n\u003c\/figure\u003e\n\u003cfigure class=\"ks-athlete\"\u003e\u003cimg loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0229\/1249\/9792\/files\/6_f24a5899-7d7e-4c4e-a5d8-c2078dc665a8.jpg?v=1747906467\u0026amp;width=400\u0026amp;format=webp\" width=\"400\" height=\"400\" alt=\"\"\u003e\n\u003cfigcaption class=\"ks-athlete__overlay\"\u003e\n\u003cdiv class=\"ks-athlete__name\"\u003eAlex P.\u003c\/div\u003e\n\u003cdiv class=\"ks-athlete__sport\"\u003eCalisthénie\u003c\/div\u003e\n\u003c\/figcaption\u003e\n\u003c\/figure\u003e\n\u003cfigure class=\"ks-athlete\"\u003e\u003cimg loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0229\/1249\/9792\/files\/2.jpg?v=1747906467\u0026amp;width=400\u0026amp;format=webp\" width=\"400\" height=\"400\" alt=\"\"\u003e\n\u003cfigcaption class=\"ks-athlete__overlay\"\u003e\n\u003cdiv class=\"ks-athlete__name\"\u003eNina L.\u003c\/div\u003e\n\u003cdiv class=\"ks-athlete__sport\"\u003eNatation\u003c\/div\u003e\n\u003c\/figcaption\u003e\n\u003c\/figure\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"ks-stats\" role=\"list\"\u003e\n\u003cdiv class=\"ks-stat\" role=\"listitem\"\u003e\n\u003cdiv class=\"ks-stat__num\" data-animate-count=\"200000\" data-suffix=\"+\"\u003e200K+\u003c\/div\u003e\n\u003cdiv class=\"ks-stat__label\"\u003eAthlètes satisfaits\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"ks-stat\" role=\"listitem\"\u003e\n\u003cdiv class=\"ks-stat__num\"\u003e4,9★\u003c\/div\u003e\n\u003cdiv class=\"ks-stat__label\"\u003eNote moyenne\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"ks-stat\" role=\"listitem\"\u003e\n\u003cdiv class=\"ks-stat__num\" data-animate-count=\"50\" data-suffix=\"+\"\u003e50+\u003c\/div\u003e\n\u003cdiv class=\"ks-stat__label\"\u003ePays\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"ks-stat\" role=\"listitem\"\u003e\n\u003cdiv class=\"ks-stat__num\" data-animate-count=\"99\" data-suffix=\"%\"\u003e99%\u003c\/div\u003e\n\u003cdiv class=\"ks-stat__label\"\u003eSatisfaction\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv id=\"judgeme_widget_placeholder\"\u003e\u003c\/div\u003e\n\u003c\/section\u003e\n\u003c\/div\u003e\n\u003cscript\u003e\n(function () {\n  \/\/ Counter animation on scroll-in, works for any element with data-animate-count\n  function formatNum(n, target) {\n    if (target \u003e= 1000) {\n      \/\/ Show \"200K+\" style for big numbers\n      if (target \u003e= 1000) return Math.floor(n \/ 1000) + 'K';\n    }\n    return Math.floor(n).toString();\n  }\n\n  function animate(el) {\n    var target = parseInt(el.getAttribute('data-animate-count'), 10);\n    var suffix = el.getAttribute('data-suffix') || '';\n    if (isNaN(target)) return;\n    var duration = 1400;\n    var start = null;\n    function step(ts) {\n      if (!start) start = ts;\n      var t = Math.min(1, (ts - start) \/ duration);\n      var eased = 1 - Math.pow(1 - t, 3); \/\/ ease-out cubic\n      var current = target * eased;\n      el.textContent = formatNum(current, target) + suffix;\n      if (t \u003c 1) requestAnimationFrame(step);\n      else el.textContent = (target \u003e= 1000 ? Math.floor(target\/1000) + 'K' : target) + suffix;\n    }\n    requestAnimationFrame(step);\n  }\n\n  var nodes = document.querySelectorAll('[data-animate-count]');\n  if (!('IntersectionObserver' in window)) {\n    nodes.forEach(animate);\n    return;\n  }\n  var io = new IntersectionObserver(function (entries) {\n    entries.forEach(function (e) {\n      if (e.isIntersecting) {\n        animate(e.target);\n        io.unobserve(e.target);\n      }\n    });\n  }, { threshold: 0.4 });\n  nodes.forEach(function (n) { io.observe(n); });\n})();\n\u003c\/script\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e","brand":"Kensui","offers":[{"title":"Wheels","offer_id":47753276227796,"sku":null,"price":199.0,"currency_code":"USD","in_stock":true},{"title":"No Wheels","offer_id":47753276260564,"sku":null,"price":149.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0229\/1249\/9792\/files\/IMG_7048_974706eb-9952-4e9e-961e-573237bd89b2.webp?v=1784019855"},{"product_id":"torii-safety-spotter-arms","title":"Bras de repérage de sécurité Torii","description":"\u003cp data-end=\"218\" data-start=\"170\"\u003e\u003cstrong data-end=\"218\" data-start=\"170\"\u003eEntraînez-vous intensément. Sécurité garantie. Soulevez sans limites.\u003c\/strong\u003e\u003c\/p\u003e\u003cp data-end=\"425\" data-start=\"220\"\u003eLorsque vous soulevez de véritables charges, l’échec n’est pas une possibilité — c’est une étape du processus. Les \u003cstrong data-end=\"340\" data-start=\"311\"\u003ebras de sécurité Torii\u003c\/strong\u003e sont conçus pour vous rattraper à votre limite, afin que vous puissiez vous entraîner plus dur en toute confiance.\u003c\/p\u003e\u003cp data-end=\"622\" data-start=\"427\"\u003eInspirés par la force et la structure des portails torii traditionnels japonais, ces bras de sécurité allient \u003cstrong data-end=\"582\" data-start=\"530\"\u003edesign minimaliste et durabilité sans compromis\u003c\/strong\u003e — un équilibre parfait entre forme et fonction.\u003c\/p\u003e\u003cp data-end=\"622\" data-start=\"427\"\u003e\u003cem\u003e**Vendus par paire\u003c\/em\u003e\u003c\/p\u003e","brand":"Kensui","offers":[{"title":"Default Title","offer_id":47794085658836,"sku":"rek-spotter-arm","price":129.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0229\/1249\/9792\/files\/torii-spotter-3.jpg?v=1776179515"},{"product_id":"revo-rack™","title":"REVO RACK™","description":"\u003cp data-start=\"15\" data-end=\"80\"\u003ePRÉCOMMANDEZ pour ÉCONOMISER 50 $. Expédition en août.\u003c\/p\u003e\n\u003cp data-start=\"15\" data-end=\"80\"\u003eGardez vos barres organisées, protégées et toujours à portée de main.  \u003c\/p\u003e\n\u003cp data-start=\"82\" data-end=\"310\"\u003eLe REVO RACK peut stocker jusqu’à 10 barres verticalement dans un espace compact. Son design en carrousel rotatif tourne en douceur, vous permettant d’amener directement n’importe quelle barre vers vous—sans avoir à passer par-dessus l’équipement ou à retirer d’autres barres d’abord.  \u003c\/p\u003e\n\u003cp data-start=\"312\" data-end=\"557\"\u003eUne base large et renforcée assure la stabilité sous de lourdes charges, tandis que les tubes de rangement doublés individuellement protègent les manchons des barres contre les rayures et l’usure inutile. Parfait pour les salles de sport à domicile, les installations commerciales et les collections sérieuses de barres.  \u003c\/p\u003e\n\u003cul data-start=\"559\" data-end=\"814\" data-is-last-node=\"\" data-is-only-node=\"\"\u003e\n\u003cli data-section-id=\"1xga8v2\" data-start=\"559\" data-end=\"585\"\u003ePeut contenir jusqu’à 10 barres  \u003c\/li\u003e\n\u003cli data-section-id=\"1nf64zy\" data-start=\"586\" data-end=\"613\"\u003eCarrousel rotatif fluide  \u003c\/li\u003e\n\u003cli data-section-id=\"3hm2h\" data-start=\"614\" data-end=\"646\"\u003eAccès rapide et facile à chaque barre  \u003c\/li\u003e\n\u003cli data-section-id=\"9trhow\" data-start=\"647\" data-end=\"683\"\u003eEmpreinte compacte et peu encombrante  \u003c\/li\u003e\n\u003cli data-section-id=\"1lll4ec\" data-start=\"684\" data-end=\"716\"\u003eDoublures protectrices dans les tubes de rangement  \u003c\/li\u003e\n\u003cli data-section-id=\"16n9z4c\" data-start=\"717\" data-end=\"748\"\u003eConstruction en acier robuste  \u003c\/li\u003e\n\u003cli data-section-id=\"k8h9ur\" data-start=\"749\" data-end=\"768\"\u003eBase large et stable  \u003c\/li\u003e\n\u003cli data-section-id=\"1e97cd\" data-start=\"769\" data-end=\"814\" data-is-last-node=\"\"\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e","brand":"Kensui","offers":[{"title":"Default Title","offer_id":48328488157396,"sku":null,"price":199.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0229\/1249\/9792\/files\/spinningbarbellholder.jpg?v=1784483462"}],"url":"https:\/\/kensui.com\/fr\/collections\/bench-racks-storage.oembed","provider":"Kensui","version":"1.0","type":"link"}