{"product_id":"weight-tree","title":"Arbre de poids","description":"\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 \u003cdiv id=\"s-c3263eb8-3309-4a58-b93b-cdf83c360cb9\" class=\"shg-c shg-align-left\"\u003e \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 \u003csection class=\"tree-hero\" data-stock=\"in\" data-product-handle=\"weight-tree\" aria-label=\"Weight Tree\"\u003e \u003cdiv class=\"tree-hero__grid\"\u003e \u003cdiv class=\"tree-gallery\"\u003e \u003cdiv class=\"tree-gallery__stage\"\u003e \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 \u003cdiv class=\"tree-gallery__track\" id=\"tree-gallery-track\"\u003e \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 disques\" width=\"1024\" height=\"1024\" loading=\"eager\" fetchpriority=\"high\"\u003e \u003c\/div\u003e \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é avec des disques\" width=\"1024\" height=\"1024\" loading=\"lazy\"\u003e \u003c\/div\u003e \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 \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 \u003cdiv class=\"tree-gallery__slide\"\u003e \u003cimg src=\"https:\/\/kensui.com\/cdn\/shop\/files\/weight-tree-sleeves_1024x1024@2x.jpg?v=1775132071\" alt=\"Cales de rangement avec capuchons de chargement arrondis\" width=\"1024\" height=\"1024\" loading=\"lazy\"\u003e \u003c\/div\u003e \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 \u003c\/div\u003e \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 \u003cdiv class=\"tree-gallery__counter\" id=\"tree-gallery-counter\"\u003e1 \/ 6\u003c\/div\u003e \u003c\/div\u003e \u003cdiv class=\"tree-gallery__dots\" id=\"tree-gallery-dots\" role=\"tablist\" aria-label=\"Gallery images\"\u003e\u003c\/div\u003e \u003c\/div\u003e \u003cdiv class=\"tree-info\"\u003e \u003cdiv class=\"tree-info__eyebrow\"\u003eDéplacez-le. Chargez-le. Oubliez le désordre.\u003c\/div\u003e \u003ch1 class=\"tree-info__title\"\u003eArbre à poids\u003c\/h1\u003e \u003cp class=\"tree-info__subtitle\"\u003e Un système de rangement en acier solide qui garde vos disques et barres organisés, protégés et prêts à 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 \u003cdiv class=\"tree-features\" aria-label=\"Key features\"\u003e \u003cdiv class=\"tree-features__item\"\u003e \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 \u003cdiv class=\"tree-features__label\"\u003eRobuste\u003cbr\u003eacier\u003c\/div\u003e \u003c\/div\u003e \u003cdiv class=\"tree-features__item\"\u003e \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 \u003cdiv class=\"tree-features__label\"\u003eVerrouillable\u003cbr\u003eroulettes\u003c\/div\u003e \u003c\/div\u003e \u003cdiv class=\"tree-features__item\"\u003e \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 \u003cdiv class=\"tree-features__label\"\u003eBarre\u003cbr\u003esupports\u003c\/div\u003e \u003c\/div\u003e \u003cdiv class=\"tree-features__item\"\u003e \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 \u003cdiv class=\"tree-features__label\"\u003eCompact\u003cbr\u003eempreinte au sol\u003c\/div\u003e \u003c\/div\u003e \u003c\/div\u003e \u003cdiv class=\"tree-info__price-row\"\u003e \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 \u003c\/div\u003e \u003cdiv class=\"tree-variants\"\u003e \u003cdiv class=\"tree-variants__label\"\u003e \u003cspan\u003eChoisissez votre modèle\u003c\/span\u003e \u003cb id=\"tree-selected-name\"\u003eRoues\u003c\/b\u003e \u003c\/div\u003e \u003cdiv class=\"tree-variants__cards\" role=\"radiogroup\" aria-label=\"Model\"\u003e \u003cbutton type=\"button\" class=\"tree-variants__card\" role=\"radio\" aria-pressed=\"true\" data-variant-name=\"Wheels\" data-variant-id=\"REPLACE_WHEELS_ID\"\u003e \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 \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 \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 \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 \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 \u003c\/div\u003e \u003c\/div\u003e \u003cdiv class=\"tree-stock tree-stock--in\"\u003e \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 \u003c\/div\u003e \u003cdiv class=\"tree-stock tree-stock--out\"\u003e \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 email ci-dessous et nous vous avertirons dès qu’il sera de retour.\u003c\/span\u003e \u003c\/div\u003e \u003cform class=\"tree-block tree-block--in\" method=\"post\" action=\"\/cart\/add\"\u003e \u003cinput type=\"hidden\" name=\"id\" 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 \u003c\/form\u003e \u003cform class=\"tree-block tree-block--out tree-notify\" method=\"post\" action=\"#\" id=\"tree-notify-form\"\u003e \u003clabel class=\"tree-notify__label\" for=\"tree-notify-email\"\u003ePrévenez-moi quand disponible\u003c\/label\u003e \u003cdiv class=\"tree-notify__row\"\u003e \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 \u003c\/div\u003e \u003cp class=\"tree-notify__hint\"\u003eNous vous enverrons uniquement un email concernant ce réapprovisionnement. Pas de spam.\u003c\/p\u003e \u003cp class=\"tree-notify__status tree-notify__status--ok\" role=\"status\"\u003e ✓ Vous êtes sur la liste. Nous vous enverrons un email dès que le produit sera de nouveau en stock. \u003c\/p\u003e \u003cp class=\"tree-notify__status tree-notify__status--err\" role=\"alert\"\u003e Un problème est survenu. Veuillez réessayer ou envoyer un email à support@kensui.com. \u003c\/p\u003e \u003c\/form\u003e \u003cul class=\"tree-trust\" aria-label=\"Guarantees\"\u003e \u003cli class=\"tree-trust__item\"\u003e \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 \u003cli class=\"tree-trust__item\"\u003e \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 \u003cli class=\"tree-trust__item\"\u003e \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 pour plus de 200 000+ \u003c\/li\u003e \u003c\/ul\u003e \u003c\/div\u003e \u003c\/div\u003e \u003c\/section\u003e \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 \u003c\/div\u003e \u003cdiv id=\"s-3cdaa2b6-28c0-4cec-bc6e-763ef3405ef7\" class=\"shg-c shg-align-left\"\u003e \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 \u003cdiv class=\"ks-trust\"\u003e \u003csection class=\"ks-guarantee\" aria-label=\"100-day guarantee\"\u003e \u003cdiv class=\"ks-guarantee__grid\"\u003e \u003cdiv class=\"ks-guarantee__badge-wrap\"\u003e \u003cdiv class=\"ks-guarantee__badge\" aria-label=\"100 day money back guarantee\"\u003e \u003cspan class=\"ks-guarantee__badge-arc\"\u003ePromesse Kensui\u003c\/span\u003e \u003cdiv class=\"ks-guarantee__badge-top\"\u003e \u003cspan class=\"ks-guarantee__badge-days\"\u003e100\u003c\/span\u003e \u003cspan class=\"ks-guarantee__badge-unit\"\u003eJours\u003c\/span\u003e \u003c\/div\u003e \u003cspan class=\"ks-guarantee__badge-label\"\u003eRemboursement\u003c\/span\u003e \u003cspan class=\"ks-guarantee__badge-sub\"\u003eSans poser de questions\u003c\/span\u003e \u003c\/div\u003e \u003c\/div\u003e \u003cdiv class=\"ks-guarantee__content\"\u003e \u003cp class=\"ks-guarantee__eyebrow\"\u003eLa promesse Kensui\u003c\/p\u003e \u003ch2 class=\"ks-guarantee__title\"\u003eVotre succès\u003cbr\u003e\u003cem\u003eest garanti.\u003c\/em\u003e\n\u003c\/h2\u003e \u003cp class=\"ks-guarantee__desc\"\u003e Nous voulons que vous atteigniez vos objectifs de fitness, profitiez de votre vie et vous sentiez en bonne santé. La dernière chose que nous souhaitons 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 \u003cul class=\"ks-guarantee__features\" role=\"list\"\u003e \u003cli class=\"ks-guarantee__feature\"\u003e \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 \u003cli class=\"ks-guarantee__feature\"\u003e \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 \u003cli class=\"ks-guarantee__feature\"\u003e \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 \u003cli class=\"ks-guarantee__feature\"\u003e \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 \u003c\/ul\u003e \u003c\/div\u003e \u003c\/div\u003e \u003c\/section\u003e \u003csection class=\"ks-social\" aria-label=\"Trusted by 200,000+ athletes\"\u003e \u003cdiv class=\"ks-social__header\"\u003e \u003cp class=\"ks-social__eyebrow\"\u003eFiable dans le monde entier\u003c\/p\u003e \u003cspan class=\"ks-social__count\" data-animate-count=\"200000\" data-suffix=\"+\"\u003e200 000+\u003c\/span\u003e \u003ch2 class=\"ks-social__title\"\u003eAthlètes dans le monde entier\u003c\/h2\u003e \u003c\/div\u003e \u003cdiv class=\"ks-marquee\"\u003e \u003cdiv class=\"ks-marquee__track\"\u003e \u003cdiv class=\"ks-marquee__group\"\u003e \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 \u003cfigcaption class=\"ks-athlete__overlay\"\u003e \u003cdiv class=\"ks-athlete__name\"\u003eJohn D.\u003c\/div\u003e \u003cdiv class=\"ks-athlete__sport\"\u003eCrossFit\u003c\/div\u003e \u003c\/figcaption\u003e \u003c\/figure\u003e \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 \u003cfigcaption class=\"ks-athlete__overlay\"\u003e \u003cdiv class=\"ks-athlete__name\"\u003eSarah M.\u003c\/div\u003e \u003cdiv class=\"ks-athlete__sport\"\u003eCalisthénie\u003c\/div\u003e \u003c\/figcaption\u003e \u003c\/figure\u003e \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 \u003cfigcaption class=\"ks-athlete__overlay\"\u003e \u003cdiv class=\"ks-athlete__name\"\u003eEric B.\u003c\/div\u003e \u003cdiv class=\"ks-athlete__sport\"\u003ePowerlifting\u003c\/div\u003e \u003c\/figcaption\u003e \u003c\/figure\u003e \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 \u003cfigcaption class=\"ks-athlete__overlay\"\u003e \u003cdiv class=\"ks-athlete__name\"\u003eLuke K.\u003c\/div\u003e \u003cdiv class=\"ks-athlete__sport\"\u003eYoga\u003c\/div\u003e \u003c\/figcaption\u003e \u003c\/figure\u003e \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 \u003cfigcaption class=\"ks-athlete__overlay\"\u003e \u003cdiv class=\"ks-athlete__name\"\u003eTom B.\u003c\/div\u003e \u003cdiv class=\"ks-athlete__sport\"\u003ePowerlifting\u003c\/div\u003e \u003c\/figcaption\u003e \u003c\/figure\u003e \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 \u003cfigcaption class=\"ks-athlete__overlay\"\u003e \u003cdiv class=\"ks-athlete__name\"\u003eElias S.\u003c\/div\u003e \u003cdiv class=\"ks-athlete__sport\"\u003eMMA\u003c\/div\u003e \u003c\/figcaption\u003e \u003c\/figure\u003e \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 \u003cfigcaption class=\"ks-athlete__overlay\"\u003e \u003cdiv class=\"ks-athlete__name\"\u003eAlex P.\u003c\/div\u003e \u003cdiv class=\"ks-athlete__sport\"\u003eCalisthénie\u003c\/div\u003e \u003c\/figcaption\u003e \u003c\/figure\u003e \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 \u003cfigcaption class=\"ks-athlete__overlay\"\u003e \u003cdiv class=\"ks-athlete__name\"\u003eNina L.\u003c\/div\u003e \u003cdiv class=\"ks-athlete__sport\"\u003eNatation\u003c\/div\u003e \u003c\/figcaption\u003e \u003c\/figure\u003e \u003c\/div\u003e \u003cdiv class=\"ks-marquee__group\" aria-hidden=\"true\"\u003e \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 \u003cfigcaption class=\"ks-athlete__overlay\"\u003e \u003cdiv class=\"ks-athlete__name\"\u003eJohn D.\u003c\/div\u003e \u003cdiv class=\"ks-athlete__sport\"\u003eCrossFit\u003c\/div\u003e \u003c\/figcaption\u003e \u003c\/figure\u003e \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 \u003cfigcaption class=\"ks-athlete__overlay\"\u003e \u003cdiv class=\"ks-athlete__name\"\u003eSarah M.\u003c\/div\u003e \u003cdiv class=\"ks-athlete__sport\"\u003eCalisthénie\u003c\/div\u003e \u003c\/figcaption\u003e \u003c\/figure\u003e \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 \u003cfigcaption class=\"ks-athlete__overlay\"\u003e \u003cdiv class=\"ks-athlete__name\"\u003eEric B.\u003c\/div\u003e \u003cdiv class=\"ks-athlete__sport\"\u003ePowerlifting\u003c\/div\u003e \u003c\/figcaption\u003e \u003c\/figure\u003e \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 \u003cfigcaption class=\"ks-athlete__overlay\"\u003e \u003cdiv class=\"ks-athlete__name\"\u003eLuke K.\u003c\/div\u003e \u003cdiv class=\"ks-athlete__sport\"\u003eYoga\u003c\/div\u003e \u003c\/figcaption\u003e \u003c\/figure\u003e \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 \u003cfigcaption class=\"ks-athlete__overlay\"\u003e \u003cdiv class=\"ks-athlete__name\"\u003eTom B.\u003c\/div\u003e \u003cdiv class=\"ks-athlete__sport\"\u003ePowerlifting\u003c\/div\u003e \u003c\/figcaption\u003e \u003c\/figure\u003e \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 \u003cfigcaption class=\"ks-athlete__overlay\"\u003e \u003cdiv class=\"ks-athlete__name\"\u003eElias S.\u003c\/div\u003e \u003cdiv class=\"ks-athlete__sport\"\u003eMMA\u003c\/div\u003e \u003c\/figcaption\u003e \u003c\/figure\u003e \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 \u003cfigcaption class=\"ks-athlete__overlay\"\u003e \u003cdiv class=\"ks-athlete__name\"\u003eAlex P.\u003c\/div\u003e \u003cdiv class=\"ks-athlete__sport\"\u003eCalisthénie\u003c\/div\u003e \u003c\/figcaption\u003e \u003c\/figure\u003e \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 \u003cfigcaption class=\"ks-athlete__overlay\"\u003e \u003cdiv class=\"ks-athlete__name\"\u003eNina L.\u003c\/div\u003e \u003cdiv class=\"ks-athlete__sport\"\u003eNatation\u003c\/div\u003e \u003c\/figcaption\u003e \u003c\/figure\u003e \u003c\/div\u003e \u003c\/div\u003e \u003c\/div\u003e \u003cdiv class=\"ks-stats\" role=\"list\"\u003e \u003cdiv class=\"ks-stat\" role=\"listitem\"\u003e \u003cdiv class=\"ks-stat__num\" data-animate-count=\"200000\" data-suffix=\"+\"\u003e200K+\u003c\/div\u003e \u003cdiv class=\"ks-stat__label\"\u003eAthlètes satisfaits\u003c\/div\u003e \u003c\/div\u003e \u003cdiv class=\"ks-stat\" role=\"listitem\"\u003e \u003cdiv class=\"ks-stat__num\"\u003e4.9★\u003c\/div\u003e \u003cdiv class=\"ks-stat__label\"\u003eNote moyenne\u003c\/div\u003e \u003c\/div\u003e \u003cdiv class=\"ks-stat\" role=\"listitem\"\u003e \u003cdiv class=\"ks-stat__num\" data-animate-count=\"50\" data-suffix=\"+\"\u003e50+\u003c\/div\u003e \u003cdiv class=\"ks-stat__label\"\u003ePays\u003c\/div\u003e \u003c\/div\u003e \u003cdiv class=\"ks-stat\" role=\"listitem\"\u003e \u003cdiv class=\"ks-stat__num\" data-animate-count=\"99\" data-suffix=\"%\"\u003e99%\u003c\/div\u003e \u003cdiv class=\"ks-stat__label\"\u003eSatisfaction\u003c\/div\u003e \u003c\/div\u003e \u003c\/div\u003e \u003cdiv id=\"judgeme_widget_placeholder\"\u003e\u003c\/div\u003e \u003c\/section\u003e \u003c\/div\u003e \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 \u003c\/div\u003e \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\/5_afae0716-2891-456c-ade7-6bd2ffee7ea8.jpg?v=1775132071","url":"https:\/\/kensui.com\/fr\/products\/weight-tree","provider":"Kensui","version":"1.0","type":"link"}