{"product_id":"cloud-sweatshorts-navy","title":"Cloud Sweatshorts — Navy","description":"\u003cstyle\u003e\n  .collapsible-container {\n    margin-top: 20px;\n    border-top: 1px solid #ddd;\n  }\n\n  .collapsible-header {\n    cursor: pointer;\n    font-weight: bold;\n    padding: 15px 0;\n    font-size: 16px;\n    border-bottom: 1px solid #eee;\n    text-transform: uppercase;\n  }\n\n  .collapsible-content {\n    display: none;\n    padding: 10px 0;\n    font-size: 13px;\n    color: #555;\n    word-spacing: normal;\n    letter-spacing: normal;\n    text-align: left;\n  }\n\n  .collapsible-content p,\n  .collapsible-content li {\n    margin: 0 0 6px 0;\n    text-align: left;\n    word-spacing: normal;\n    letter-spacing: normal;\n  }\n\n  .collapsible-content p strong {\n    display: inline-block;\n    margin-bottom: 0;\n  }\n\n  .collapsible-content p:has(strong) {\n    margin-bottom: 0;\n  }\n\n  .collapsible-content ul {\n    list-style: disc;\n    margin: 8px 0 8px 20px;\n    padding: 0;\n  }\n\n  .collapsible-content li {\n    margin-bottom: 4px;\n  }\n\n  .collapsible-content a {\n    color: #000;\n    text-decoration: underline;\n  }\n\n  \/* ===== Size chart (scoped so nothing else breaks) ===== *\/\n  .size-chart { text-align: center; font-size: 13px; color: inherit; }\n  .size-chart h4 { \n    font-weight: 600; \n    margin: 4px 0 14px 0; \n    font-size: 15px; \n    text-transform: none; \n    letter-spacing: normal;\n  }\n  .size-chart__tabs {\n    display: inline-flex; \n    gap: 22px; \n    margin-bottom: 14px; \n    border-bottom: 1px solid transparent;\n  }\n  .size-chart__tab {\n    cursor: pointer;\n    padding-bottom: 6px;\n    display: inline-block;\n    font-weight: 600;\n    letter-spacing: normal;\n  }\n  .size-chart__tab[aria-selected=\"true\"] {\n    border-bottom: 2px solid #000;\n  }\n  .size-chart__grid {\n    display: grid;\n    grid-template-columns: repeat(3, minmax(60px, 1fr));\n    gap: 10px;\n    justify-items: center;\n  }\n  .size-chart__cell-label {\n    font-weight: 600;\n    margin-bottom: 2px;\n  }\n  .size-chart__cell-value { color: inherit; }\n\u003c\/style\u003e\n\n\u003cdiv class=\"collapsible-container\"\u003e\n  \u003cdiv class=\"collapsible-header\" onclick=\"toggleContent(this)\"\u003e\n    DETAILS\n  \u003c\/div\u003e\n  \u003cdiv class=\"collapsible-content\"\u003e\n    \u003cp\u003eThese staple 350 GSM sweatshorts mark the first addition to our Cloud Essentials Collection, carrying our signature approach to comfort into the warmer months ahead.\u003c\/p\u003e\n    \u003cul\u003e\n      \u003cli\u003eSlightly oversized\u003c\/li\u003e\n      \u003cli\u003eLined front pockets\u003c\/li\u003e\n      \u003cli\u003eSpacious back pocket\u003c\/li\u003e\n      \u003cli\u003e6cm tall waistband\u003c\/li\u003e\n      \u003cli\u003eDesigned in Denmark\u003c\/li\u003e\n    \u003c\/ul\u003e\n    \u003cp\u003e\u003cstrong\u003eMaterial:\u003c\/strong\u003e 80% cotton, 20% polyester\u003c\/p\u003e\n    \u003cp\u003eCurated from our previous 350GSM summer fabric, this new and revised blend is more breathable, durable, and softer than we could have ever imagined.\u003c\/p\u003e \n  \u003c\/div\u003e\n\n  \u003cdiv class=\"collapsible-header\" onclick=\"toggleContent(this)\"\u003e\n    PRODUCT CARE\n  \u003c\/div\u003e\n  \u003cdiv class=\"collapsible-content\"\u003e\n    \u003cul\u003e\n      \u003cli\u003eHand wash or machine wash on cold\u003c\/li\u003e\n      \u003cli\u003eHang dry or over towel\u003c\/li\u003e\n      \u003cli\u003eDo not use tumble dryer or any type of heat\/sun drying\u003c\/li\u003e\n      \u003cli\u003eDo not bleach\u003c\/li\u003e\n    \u003c\/ul\u003e\n  \u003c\/div\u003e\n\n  \u003cdiv class=\"collapsible-header\" onclick=\"toggleContent(this)\"\u003e\n    SIZE GUIDE\n  \u003c\/div\u003e\n  \u003cdiv class=\"collapsible-content\"\u003e\n\n    \u003c!-- ===== Size chart ===== --\u003e\n    \u003cdiv class=\"size-chart\" id=\"sizeChart\" role=\"group\" aria-label=\"Select a size\"\u003e\n      \u003ch4\u003eSelect a Size\u003c\/h4\u003e\n\n      \u003cdiv class=\"size-chart__tabs\" role=\"tablist\" aria-label=\"Sizes\"\u003e\n        \u003cspan class=\"size-chart__tab\" role=\"tab\" tabindex=\"0\" data-size=\"XS\" aria-selected=\"true\"\u003eXS\u003c\/span\u003e\n        \u003cspan class=\"size-chart__tab\" role=\"tab\" tabindex=\"-1\" data-size=\"S\" aria-selected=\"false\"\u003eS\u003c\/span\u003e\n        \u003cspan class=\"size-chart__tab\" role=\"tab\" tabindex=\"-1\" data-size=\"M\" aria-selected=\"false\"\u003eM\u003c\/span\u003e\n        \u003cspan class=\"size-chart__tab\" role=\"tab\" tabindex=\"-1\" data-size=\"L\" aria-selected=\"false\"\u003eL\u003c\/span\u003e\n        \u003cspan class=\"size-chart__tab\" role=\"tab\" tabindex=\"-1\" data-size=\"XL\" aria-selected=\"false\"\u003eXL\u003c\/span\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"size-chart__grid\" aria-live=\"polite\"\u003e\n        \u003cdiv\u003e\n          \u003cdiv class=\"size-chart__cell-label\"\u003eLength\u003c\/div\u003e\n          \u003cdiv class=\"size-chart__cell-value\" data-field=\"length\"\u003e13 cm\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv\u003e\n          \u003cdiv class=\"size-chart__cell-label\"\u003eLeg Opening\u003c\/div\u003e\n          \u003cdiv class=\"size-chart__cell-value\" data-field=\"leg-opening\"\u003e28 cm\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv\u003e\n          \u003cdiv class=\"size-chart__cell-label\"\u003eWaist\u003c\/div\u003e\n          \u003cdiv class=\"size-chart__cell-value\" data-field=\"waist\"\u003e29 cm\u003c\/div\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n\n    \u003c!-- ===== model info + new line below size chart ===== --\u003e\n    \u003cul\u003e\n      \u003cli\u003eModel is 190cm \u0026amp; 80kg wearing size L\u003c\/li\u003e\n      \u003cli\u003eAll measurements are garment measurements and are shown in centimeters (CM)\u003c\/li\u003e\n    \u003c\/ul\u003e\n\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cscript\u003e\n  function toggleContent(header) {\n    const content = header.nextElementSibling;\n    content.style.display = content.style.display === \"block\" ? \"none\" : \"block\";\n  }\n\u003c\/script\u003e\n\n\u003cscript\u003e\n  \/* ===== Size chart logic (mobile-safe via delegation) ===== *\/\n  (function () {\n    const sizeChartData = {\n      \"XS\": { length: \"53 cm\", \"leg-opening\": \"32.25 cm\", waist: \"33.5 cm\" },\n      \"S\":  { length: \"55 cm\", \"leg-opening\": \"33.5 cm\", waist: \"36 cm\" },\n      \"M\":  { length: \"57 cm\", \"leg-opening\": \"34.75 cm\", waist: \"38.5 cm\" },\n      \"L\":  { length: \"59 cm\", \"leg-opening\": \"36 cm\", waist: \"41 cm\" },\n      \"XL\": { length: \"61 cm\", \"leg-opening\": \"37.25 cm\", waist: \"43.5 cm\" }\n    };\n\n    function setActive(root, size) {\n      if (!root) return;\n\n      const tabs = root.querySelectorAll('.size-chart__tab');\n      tabs.forEach(t =\u003e {\n        const isActive = t.getAttribute('data-size') === size;\n        t.setAttribute('aria-selected', isActive ? 'true' : 'false');\n        t.setAttribute('tabindex', isActive ? '0' : '-1');\n      });\n\n      const fields = {\n        length: root.querySelector('[data-field=\"length\"]'),\n        \"leg-opening\": root.querySelector('[data-field=\"leg-opening\"]'),\n        waist:  root.querySelector('[data-field=\"waist\"]')\n      };\n\n      const data = sizeChartData[size];\n      if (!data || !fields.length) return;\n\n      fields.length.textContent = data.length;\n      fields[\"leg-opening\"].textContent = data[\"leg-opening\"];\n      fields.waist.textContent  = data.waist;\n    }\n\n    document.addEventListener('click', function (e) {\n      const tab = e.target.closest('.size-chart__tab');\n      if (!tab) return;\n      const root = tab.closest('.size-chart');\n      if (!root) return;\n      setActive(root, tab.getAttribute('data-size'));\n    }, { passive: true });\n\n    document.addEventListener('keydown', function (e) {\n      const focused = document.activeElement;\n      if (!focused || !focused.classList?.contains('size-chart__tab')) return;\n\n      const root = focused.closest('.size-chart');\n      const tabs = Array.from(root.querySelectorAll('.size-chart__tab'));\n      const i = tabs.indexOf(focused);\n\n      if (e.key === 'Enter' || e.key === ' ') {\n        e.preventDefault();\n        setActive(root, focused.getAttribute('data-size'));\n      } else if (e.key === 'ArrowRight' || e.key === 'ArrowLeft') {\n        e.preventDefault();\n        const dir = e.key === 'ArrowRight' ? 1 : -1;\n        const next = tabs[(i + dir + tabs.length) % tabs.length];\n        next.focus();\n      }\n    });\n\n    function initAll() {\n      document.querySelectorAll('.size-chart').forEach(root =\u003e setActive(root, 'XS'));\n    }\n    document.addEventListener('DOMContentLoaded', initAll);\n    document.addEventListener('shopify:section:load', initAll);\n    document.addEventListener('shopify:section:reorder', initAll);\n  })();\n\u003c\/script\u003e","brand":"CloudClo","offers":[{"title":"XS","offer_id":58279015448963,"sku":"CL-SSH-NV-XS-SS26","price":505.0,"currency_code":"DKK","in_stock":true},{"title":"S","offer_id":58279015481731,"sku":"CL-SSH-NV-S-SS26","price":505.0,"currency_code":"DKK","in_stock":true},{"title":"M","offer_id":58279015514499,"sku":"CL-SSH-NV-M-SS26","price":505.0,"currency_code":"DKK","in_stock":true},{"title":"L","offer_id":58279015547267,"sku":"CL-SSH-NV-L-SS26","price":505.0,"currency_code":"DKK","in_stock":true},{"title":"XL","offer_id":58279015580035,"sku":"CL-SSH-NV-XL-SS26","price":505.0,"currency_code":"DKK","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0914\/5217\/8819\/files\/cloud-sweatshorts-navy-front.jpg?v=1782303564","url":"https:\/\/www.cloudclo.dk\/products\/cloud-sweatshorts-navy","provider":"CloudClo","version":"1.0","type":"link"}