{"product_id":"lyocell-apple-green-t-shirt","title":"Lyocell Apple Green T-shirt","description":"\u003cstyle\u003e\n\n.product-block{\n    width:100%;\n    max-width:450px;\n    font-family:inherit;\n    color:#000;\n    box-sizing:border-box;\n}\n\n.product-block *,\n.product-block *::before,\n.product-block *::after{\n    box-sizing:border-box;\n}\n\n@media (min-width:769px){\n    .product-block{\n        padding-top:60px;\n    }\n}\n\n\n\/* -------------------- *\/\n\/* Product Header *\/\n\/* -------------------- *\/\n\n.product-title{\n    font-size:12px;\n    line-height:1.45;\n    letter-spacing:.025em;\n    color:#000;\n    font-weight:400;\n    margin:0;\n}\n\n.product-price{\n    margin-top:24px;\n    margin-bottom:38px;\n    font-size:12px;\n    color:#555;\n    line-height:1.55;\n}\n\n.product-price .price,\n.product-price .price__container,\n.product-price .price__regular,\n.product-price .price__sale{\n    margin:0;\n    padding:0;\n    font-size:12px;\n    line-height:1.55;\n    color:#555;\n    font-weight:400;\n}\n\n.product-price .price-item{\n    margin:0;\n    padding:0;\n    font-size:12px;\n    line-height:1.55;\n    color:#555;\n    font-weight:400;\n}\n\n.product-price .price__badge-sale,\n.product-price .price__badge-sold-out,\n.product-price .caption-large{\n    display:none !important;\n}\n\n\n\/* -------------------- *\/\n\/* Hide native Dawn picker *\/\n\/* -------------------- *\/\n\nproduct-info variant-selects,\nproduct-info variant-radios{\n    position:absolute !important;\n    width:1px !important;\n    height:1px !important;\n    overflow:hidden !important;\n    clip:rect(0 0 0 0) !important;\n    clip-path:inset(50%) !important;\n    white-space:nowrap !important;\n}\n\n\n\/* -------------------- *\/\n\/* Custom Size Picker *\/\n\/* -------------------- *\/\n\n.lievre-size-picker{\n    width:100%;\n    max-width:450px;\n    margin:0 0 38px;\n    padding:0;\n\n    display:flex;\n    flex-wrap:wrap;\n    align-items:center;\n    justify-content:flex-start;\n\n    gap:18px;\n}\n\n.lievre-size-button{\n    appearance:none;\n    -webkit-appearance:none;\n\n    min-width:48px;\n    height:48px;\n\n    margin:0;\n    padding:0 14px;\n\n    display:flex;\n    align-items:center;\n    justify-content:center;\n\n    font-family:inherit;\n    font-size:12px;\n    font-weight:400;\n    line-height:1;\n\n    color:#555;\n    background:#fff;\n\n    border:1px solid #aaa;\n    border-radius:0;\n\n    box-shadow:none;\n    outline:none;\n\n    cursor:pointer;\n\n    transition:\n        background-color .15s ease,\n        color .15s ease,\n        border-color .15s ease;\n}\n\n.lievre-size-button:hover{\n    border-color:#555;\n}\n\n.lievre-size-button.is-selected{\n    color:#fff;\n    background:#777;\n    border-color:#777;\n}\n\n.lievre-size-button.is-unavailable{\n    opacity:.35;\n}\n\n\n\/* -------------------- *\/\n\/* Accordion *\/\n\/* -------------------- *\/\n\n.product-details{\n    width:100%;\n    max-width:450px;\n    border-top:1px solid #efefef;\n}\n\n.product-details details{\n    border-bottom:1px solid #efefef;\n}\n\n.product-details summary{\n    list-style:none;\n    cursor:pointer;\n\n    padding:18px 0;\n\n    display:flex;\n    justify-content:space-between;\n    align-items:center;\n\n    font-size:12px;\n    font-weight:400;\n    letter-spacing:.02em;\n\n    color:#000;\n\n    transition:opacity .2s ease;\n}\n\n.product-details summary:hover{\n    opacity:.55;\n}\n\n.product-details summary::-webkit-details-marker{\n    display:none;\n}\n\n.product-details summary::after{\n    content:\"⌄\";\n    font-size:11px;\n    color:#999;\n    transition:transform .25s ease;\n}\n\n.product-details details[open] summary::after{\n    transform:rotate(180deg);\n}\n\n.detail-content{\n    padding:2px 0 24px;\n    font-size:12px;\n    line-height:1.75;\n    letter-spacing:.01em;\n    color:#555;\n}\n\n.detail-content p{\n    margin:0 0 12px;\n}\n\n.detail-content p:last-child{\n    margin-bottom:0;\n}\n\n\n\/* -------------------- *\/\n\/* Size Table *\/\n\/* -------------------- *\/\n\n.size-table{\n    width:100%;\n    border-collapse:collapse;\n    margin-top:4px;\n    font-size:12px;\n    color:#555;\n}\n\n.size-table th{\n    text-align:left;\n    font-weight:400;\n    padding:8px 0;\n    border-bottom:1px solid #efefef;\n}\n\n.size-table td{\n    padding:8px 0;\n    border-bottom:1px solid #f4f4f4;\n}\n\n.model-info{\n    margin-top:18px;\n    font-size:12px;\n    line-height:1.7;\n    color:#555;\n}\n\n\n\/* -------------------- *\/\n\/* Mobile *\/\n\/* -------------------- *\/\n\n@media screen and (max-width:749px){\n\n    .product-block{\n        width:100%;\n        max-width:100%;\n    }\n\n    .lievre-size-picker{\n        width:100%;\n        max-width:100%;\n        flex-wrap:nowrap;\n        gap:10px;\n        margin-bottom:32px;\n    }\n\n    .lievre-size-button{\n        flex:1 1 0;\n        min-width:0;\n        width:auto;\n        height:46px;\n        padding:0 6px;\n    }\n\n    .product-details{\n        width:100%;\n        max-width:100%;\n    }\n\n}\n\n\u003c\/style\u003e\n\n\n\u003cdiv class=\"product-block\"\u003e\n\n    \u003cdiv class=\"product-title\"\u003e\n        LYOCELL APPLE GREEN T-SHIRT\n    \u003c\/div\u003e\n\n\n    \u003cdiv class=\"product-price\" data-custom-product-price aria-live=\"polite\"\u003e\n    \u003c\/div\u003e\n\n\n    \u003cdiv class=\"lievre-size-picker\" data-lievre-size-picker aria-label=\"Select size\"\u003e\n    \u003c\/div\u003e\n\n\n    \u003cdiv class=\"product-details\"\u003e\n\n        \u003cdetails\u003e\n            \u003csummary\u003eDetails\u003c\/summary\u003e\n\n            \u003cdiv class=\"detail-content\"\u003e\n                \u003cp\u003eCollection S\/S 2026 Le Langage des Fleurs.\u003c\/p\u003e\n                \u003cp\u003eTimeless T-shirt in apple green, cut from an exceptionally soft lyocell-wool blend.\u003c\/p\u003e\n                \u003cp\u003eLightweight with a fluid hand feel.\u003c\/p\u003e\n            \u003c\/div\u003e\n        \u003c\/details\u003e\n\n\n        \u003cdetails\u003e\n            \u003csummary\u003eComposition\u003c\/summary\u003e\n\n            \u003cdiv class=\"detail-content\"\u003e\n                \u003cp\u003e50% Lyocell \/ 40% Acrylic \/ 10% Wool.\u003c\/p\u003e\n                \u003cp\u003e140 GSM lightweight fabric.\u003c\/p\u003e\n                \u003cp\u003eDesigned in Switzerland. Made in China.\u003c\/p\u003e\n            \u003c\/div\u003e\n        \u003c\/details\u003e\n\n\n        \u003cdetails\u003e\n            \u003csummary\u003eSize Guide\u003c\/summary\u003e\n\n            \u003cdiv class=\"detail-content\"\u003e\n\n                \u003ctable class=\"size-table\"\u003e\n\n                    \u003cthead\u003e\n                        \u003ctr\u003e\n                            \u003cth\u003eSize\u003c\/th\u003e\n                            \u003cth\u003eLength\u003c\/th\u003e\n                            \u003cth\u003eShoulder\u003c\/th\u003e\n                            \u003cth\u003eSleeve\u003c\/th\u003e\n                        \u003c\/tr\u003e\n                    \u003c\/thead\u003e\n\n                    \u003ctbody\u003e\n\n                        \u003ctr\u003e\n                            \u003ctd\u003eXS\u003c\/td\u003e\n                            \u003ctd\u003e64.5 cm\u003c\/td\u003e\n                            \u003ctd\u003e40 cm\u003c\/td\u003e\n                            \u003ctd\u003e20.5 cm\u003c\/td\u003e\n                        \u003c\/tr\u003e\n\n                        \u003ctr\u003e\n                            \u003ctd\u003eS\u003c\/td\u003e\n                            \u003ctd\u003e66 cm\u003c\/td\u003e\n                            \u003ctd\u003e41.5 cm\u003c\/td\u003e\n                            \u003ctd\u003e21.5 cm\u003c\/td\u003e\n                        \u003c\/tr\u003e\n\n                        \u003ctr\u003e\n                            \u003ctd\u003eM\u003c\/td\u003e\n                            \u003ctd\u003e67.5 cm\u003c\/td\u003e\n                            \u003ctd\u003e43 cm\u003c\/td\u003e\n                            \u003ctd\u003e22.5 cm\u003c\/td\u003e\n                        \u003c\/tr\u003e\n\n                        \u003ctr\u003e\n                            \u003ctd\u003eL\u003c\/td\u003e\n                            \u003ctd\u003e69 cm\u003c\/td\u003e\n                            \u003ctd\u003e44.5 cm\u003c\/td\u003e\n                            \u003ctd\u003e23.5 cm\u003c\/td\u003e\n                        \u003c\/tr\u003e\n\n                        \u003ctr\u003e\n                            \u003ctd\u003eXL\u003c\/td\u003e\n                            \u003ctd\u003e70.5 cm\u003c\/td\u003e\n                            \u003ctd\u003e46 cm\u003c\/td\u003e\n                            \u003ctd\u003e24.5 cm\u003c\/td\u003e\n                        \u003c\/tr\u003e\n\n                    \u003c\/tbody\u003e\n\n                \u003c\/table\u003e\n              \u003cdiv class=\"model-info\"\u003e\n    Pape is 188 cm and wears a size M.\u003cbr\u003e\n    Nora is 170 cm and wears a size XS.\n\u003c\/div\u003e\n\n            \u003c\/div\u003e\n\n        \u003c\/details\u003e\n\n\n        \u003cdetails\u003e\n            \u003csummary\u003eShipping \u0026amp; Returns\u003c\/summary\u003e\n\n            \u003cdiv class=\"detail-content\"\u003e\n                \u003cp\u003eWorldwide shipping.\u003c\/p\u003e\n                \u003cp\u003eOrders are dispatched within 2–5 business days.\u003c\/p\u003e\n                \u003cp\u003eDelivery times vary depending on destination.\u003c\/p\u003e\n                \u003cp\u003eReturns accepted within 14 days of delivery.\u003c\/p\u003e\n            \u003c\/div\u003e\n        \u003c\/details\u003e\n\n    \u003c\/div\u003e\n\n\u003c\/div\u003e\n\n\n\u003cscript\u003e\n(function () {\n\n    function initialiseLievreProduct() {\n\n        document.querySelectorAll('.product-block').forEach(function(productBlock) {\n\n            var productInfo = productBlock.closest('product-info');\n\n            if (!productInfo) return;\n\n\n            \/* ============================== *\/\n            \/* LIVE PRICE *\/\n            \/* ============================== *\/\n\n            var customPrice =\n                productBlock.querySelector('[data-custom-product-price]');\n\n            if (\n                customPrice \u0026\u0026\n                customPrice.dataset.priceConnected !== 'true'\n            ) {\n\n                var nativePrice = Array.from(\n                    productInfo.querySelectorAll('[id^=\"price-\"]')\n                ).find(function(element) {\n                    return !customPrice.contains(element);\n                });\n\n                if (nativePrice) {\n\n                    function updateCustomPrice() {\n                        customPrice.innerHTML = nativePrice.innerHTML;\n                    }\n\n                    updateCustomPrice();\n\n                    nativePrice.style.display = 'none';\n\n                    var priceObserver = new MutationObserver(function() {\n                        updateCustomPrice();\n                    });\n\n                    priceObserver.observe(nativePrice, {\n                        childList:true,\n                        subtree:true,\n                        characterData:true\n                    });\n\n                    customPrice.dataset.priceConnected = 'true';\n                }\n            }\n\n\n            \/* ============================== *\/\n            \/* CUSTOM SIZE PICKER *\/\n            \/* ============================== *\/\n\n            var sizePicker =\n                productBlock.querySelector('[data-lievre-size-picker]');\n\n            if (!sizePicker) return;\n\n\n            function getNativeInputs() {\n\n                return Array.from(\n                    productInfo.querySelectorAll(\n                        'variant-selects input[type=\"radio\"], variant-radios input[type=\"radio\"]'\n                    )\n                );\n\n            }\n\n\n            function buildSizePicker() {\n\n                var nativeInputs = getNativeInputs();\n\n                if (!nativeInputs.length) return;\n\n\n                \/*\n                  Only use the first option group.\n                  For this product, that is Size.\n                *\/\n\n                var firstName = nativeInputs[0].name;\n\n                var sizeInputs = nativeInputs.filter(function(input) {\n                    return input.name === firstName;\n                });\n\n\n                if (!sizeInputs.length) return;\n\n\n                sizePicker.innerHTML = '';\n\n\n                sizeInputs.forEach(function(input) {\n\n                    var button = document.createElement('button');\n\n                    button.type = 'button';\n\n                    button.className = 'lievre-size-button';\n\n                    button.textContent = input.value;\n\n                    button.dataset.sizeValue = input.value;\n\n\n                    if (input.checked) {\n                        button.classList.add('is-selected');\n                    }\n\n\n                    if (\n                        input.disabled ||\n                        input.classList.contains('disabled')\n                    ) {\n                        button.classList.add('is-unavailable');\n                    }\n\n\n                    button.setAttribute(\n                        'aria-pressed',\n                        input.checked ? 'true' : 'false'\n                    );\n\n\n                    sizePicker.appendChild(button);\n\n                });\n\n            }\n\n\n            function syncSizePicker() {\n\n                var nativeInputs = getNativeInputs();\n\n                if (!nativeInputs.length) return;\n\n\n                sizePicker\n                    .querySelectorAll('.lievre-size-button')\n                    .forEach(function(button) {\n\n                        var matchingInput =\n                            nativeInputs.find(function(input) {\n                                return input.value === button.dataset.sizeValue;\n                            });\n\n\n                        if (!matchingInput) return;\n\n\n                        button.classList.toggle(\n                            'is-selected',\n                            matchingInput.checked\n                        );\n\n\n                        button.classList.toggle(\n                            'is-unavailable',\n                            matchingInput.disabled ||\n                            matchingInput.classList.contains('disabled')\n                        );\n\n\n                        button.setAttribute(\n                            'aria-pressed',\n                            matchingInput.checked ? 'true' : 'false'\n                        );\n\n                    });\n\n            }\n\n\n            if (sizePicker.dataset.sizeConnected !== 'true') {\n\n                sizePicker.addEventListener('click', function(event) {\n\n                    var button =\n                        event.target.closest('.lievre-size-button');\n\n                    if (!button) return;\n\n\n                    var nativeInputs = getNativeInputs();\n\n\n                    var matchingInput =\n                        nativeInputs.find(function(input) {\n                            return input.value === button.dataset.sizeValue;\n                        });\n\n\n                    if (!matchingInput) return;\n\n\n                    \/*\n                      Use Dawn's real input.\n                      Dawn still handles variant selection.\n                    *\/\n\n                    matchingInput.click();\n\n\n                    \/*\n                      Immediate visual response.\n                    *\/\n\n                    sizePicker\n                        .querySelectorAll('.lievre-size-button')\n                        .forEach(function(sizeButton) {\n\n                            var selected =\n                                sizeButton === button;\n\n\n                            sizeButton.classList.toggle(\n                                'is-selected',\n                                selected\n                            );\n\n\n                            sizeButton.setAttribute(\n                                'aria-pressed',\n                                selected ? 'true' : 'false'\n                            );\n\n                        });\n\n                });\n\n\n                sizePicker.dataset.sizeConnected = 'true';\n\n            }\n\n\n            buildSizePicker();\n\n\n            \/* ============================== *\/\n            \/* WATCH DAWN UPDATES *\/\n            \/* ============================== *\/\n\n            if (productInfo.dataset.lievreObserver !== 'true') {\n\n                var observer = new MutationObserver(function() {\n\n                    \/*\n                      Dawn may recreate its native picker\n                      after a variant selection.\n                    *\/\n\n                    requestAnimationFrame(function() {\n\n                        var currentButtons =\n                            sizePicker.querySelectorAll(\n                                '.lievre-size-button'\n                            );\n\n\n                        if (!currentButtons.length) {\n                            buildSizePicker();\n                        } else {\n                            syncSizePicker();\n                        }\n\n                    });\n\n                });\n\n\n                observer.observe(productInfo, {\n                    childList:true,\n                    subtree:true\n                });\n\n\n                productInfo.dataset.lievreObserver = 'true';\n\n            }\n\n        });\n\n    }\n\n\n    if (document.readyState === 'loading') {\n\n        document.addEventListener(\n            'DOMContentLoaded',\n            initialiseLievreProduct\n        );\n\n    } else {\n\n        initialiseLievreProduct();\n\n    }\n\n\n    document.addEventListener(\n        'shopify:section:load',\n        initialiseLievreProduct\n    );\n\n})();\n\u003c\/script\u003e","brand":"LIEVRE RUNNING","offers":[{"title":"XS","offer_id":65802545332573,"sku":"LVR-SS-GRN-26-XS","price":50.0,"currency_code":"CHF","in_stock":true},{"title":"S","offer_id":65802545365341,"sku":"LVR-SS-GRN-26-S","price":50.0,"currency_code":"CHF","in_stock":true},{"title":"M","offer_id":65802545398109,"sku":"LVR-SS-GRN-26-M","price":50.0,"currency_code":"CHF","in_stock":true},{"title":"L","offer_id":65802545430877,"sku":"LVR-SS-GRN-26-L","price":50.0,"currency_code":"CHF","in_stock":true},{"title":"XL","offer_id":65802545463645,"sku":"LVR-SS-GRN-26-XL","price":50.0,"currency_code":"CHF","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0887\/7411\/5677\/files\/49.png?v=1788459662","url":"https:\/\/lievrerunning.com\/products\/lyocell-apple-green-t-shirt","provider":"LIEVRE RUNNING","version":"1.0","type":"link"}