{"product_id":"j-line-bukle-szek-ajanlat","title":"J-line buklé szék","description":"\u003c!--bm-outlet-badges:v1--\u003e\u003cstyle id=\"bm-showroom-pdp-css\"\u003e@keyframes bm-stock-pulse {\n  0%, 100% { transform: scale(1); filter: brightness(1); }\n  50% { transform: scale(1.07); filter: brightness(1.15); }\n}\n.product-label.bm-stock-pulse,\n.product-label--custom {\n  animation: bm-stock-pulse 1.35s ease-in-out infinite;\n  transform-origin: center right;\n}\n.product-label.bm-label-sale,\n.product-label--sale {\n  background-color: #b42318;\n  color: #fff;\n}\n.card--product .product-label-wrapper,\n.product-label-container .product-label-wrapper {\n  display: flex;\n  flex-direction: column;\n  align-items: flex-end;\n  gap: 4px;\n}\n.card--product .product-label--new,\n.product-info .product-label--new { display: none; }\n.card--product .price__was {\n  display: inline !important;\n  text-decoration: line-through;\n  opacity: .72;\n  margin-inline-start: .35em;\n  white-space: nowrap;\n}\u003c\/style\u003e\u003cscript id=\"bm-showroom-pdp-js\"\u003e(function(){\n  var el = document.getElementById(\"bm-showroom-data\");\n  var DATA = {};\n  if (el) {\n    try { DATA = JSON.parse(el.textContent || \"{}\"); } catch (e) {}\n  }\n  function money(n){\n    return new Intl.NumberFormat(\"hu-HU\").format(Math.round(Number(n))) + \" Ft\";\n  }\n  function stockText(q){\n    q = Math.max(0, parseInt(q, 10) || 0);\n    if (q \u003c= 0) return \"Elfogyott\";\n    return q === 1 ? \"Még 1 db\" : (\"Még \" + q + \" db\");\n  }\n  function handleOf(href){\n    if (!href) return \"\";\n    return href.split(\"?\")[0].replace(\/\\\/+$\/, \"\").split(\"\/\").pop();\n  }\n  function infoFromProduct(p){\n    var v = (p \u0026\u0026 p.variants \u0026\u0026 p.variants[0]) || {};\n    var price = Number(v.price || (p \u0026\u0026 p.price) || 0) \/ 100;\n    var compare = Number(v.compare_at_price || (p \u0026\u0026 p.compare_at_price) || 0) \/ 100;\n    var qty = 1;\n    var tags = (p \u0026\u0026 p.tags) || [];\n    if (typeof tags === \"string\") tags = tags.split(\",\");\n    for (var i = 0; i \u003c tags.length; i++) {\n      var m = String(tags[i]).trim().match(\/^bm-qty-(\\d+)$\/);\n      if (m) qty = parseInt(m[1], 10);\n    }\n    return { p: price, c: compare \u003e price + 0.5 ? compare : 0, q: qty };\n  }\n  function isStockLabel(el){\n    var t = (el.textContent || \"\").trim();\n    return t.indexOf(\"Még \") === 0 || t === \"Elfogyott\";\n  }\n  function dedupeStock(root){\n    var nodes = root.querySelectorAll(\".product-label\");\n    var kept = null;\n    for (var i = 0; i \u003c nodes.length; i++) {\n      if (!isStockLabel(nodes[i])) continue;\n      if (!kept) {\n        kept = nodes[i];\n        kept.classList.add(\"bm-stock-pulse\");\n      } else {\n        nodes[i].parentNode \u0026\u0026 nodes[i].parentNode.removeChild(nodes[i]);\n      }\n    }\n    return kept;\n  }\n  function addLabel(wrap, className, text){\n    var existing = wrap.querySelectorAll(\".product-label\");\n    for (var i = 0; i \u003c existing.length; i++) {\n      if (existing[i].textContent.trim() === text) return existing[i];\n    }\n    var s = document.createElement(\"span\");\n    s.className = className;\n    s.textContent = text;\n    wrap.appendChild(s);\n    return s;\n  }\n  function wrapOf(card){\n    var w = card.querySelector(\".product-label-wrapper\");\n    if (w) return w;\n    var media = card.querySelector(\".card__media\") || card;\n    var box = document.createElement(\"div\");\n    box.className = \"product-label-container absolute top-0 end\";\n    box.innerHTML = '\u003cdiv class=\"product-label-wrapper flex justify-end\"\u003e\u003c\/div\u003e';\n    media.appendChild(box);\n    return box.querySelector(\".product-label-wrapper\");\n  }\n  function applyInfo(card, info){\n    var wrap = wrapOf(card);\n    var news = card.querySelectorAll(\".product-label--new\");\n    for (var n = 0; n \u003c news.length; n++) news[n].remove();\n    if (info.c \u0026\u0026 info.p \u0026\u0026 Number(info.c) \u003e Number(info.p) + 0.5) {\n      var pct = Math.round((1 - Number(info.p) \/ Number(info.c)) * 100);\n      addLabel(wrap, \"product-label product-label--sale bm-label-sale\", pct \u003e 0 ? (\"Megtakarítás: \" + pct + \"%\") : \"Akció\");\n      var was = card.querySelector(\".price__was\");\n      if (was \u0026\u0026 !was.textContent.trim()) was.textContent = money(info.c);\n    }\n    var qtyLabel = stockText(info.q);\n    var stock = dedupeStock(card);\n    if (stock) {\n      stock.textContent = qtyLabel;\n      stock.classList.add(\"product-label\", \"product-label--custom\", \"bm-stock-pulse\");\n    } else {\n      addLabel(wrap, \"product-label product-label--custom bm-stock-pulse\", qtyLabel);\n    }\n  }\n  function loadInfo(handle, done){\n    if (DATA[handle]) { done(DATA[handle]); return; }\n    fetch(\"\/products\/\" + handle + \".js\")\n      .then(function(r){ if (!r.ok) throw new Error(\"missing\"); return r.json(); })\n      .then(function(p){\n        var info = infoFromProduct(p);\n        DATA[handle] = info;\n        done(info);\n      })\n      .catch(function(){ done({ p: 0, c: 0, q: 1 }); });\n  }\n  function enhanceCard(card){\n    if (card.getAttribute(\"data-bm-outlet\") === \"1\" || card.getAttribute(\"data-bm-pending\") === \"1\") return;\n    var a = card.querySelector(\"a[href*='\/products\/']\");\n    var handle = handleOf(a \u0026\u0026 a.getAttribute(\"href\"));\n    if (!handle || handle.indexOf(\"-ajanlat\") === -1) return;\n    var info = DATA[handle];\n    if (info) {\n      card.setAttribute(\"data-bm-outlet\", \"1\");\n      applyInfo(card, info);\n      return;\n    }\n    card.setAttribute(\"data-bm-pending\", \"1\");\n    loadInfo(handle, function(next){\n      card.removeAttribute(\"data-bm-pending\");\n      card.setAttribute(\"data-bm-outlet\", \"1\");\n      applyInfo(card, next);\n    });\n  }\n  function enhancePdp(){\n    var handle = handleOf(location.pathname);\n    if (!handle || handle.indexOf(\"-ajanlat\") === -1) return;\n    var wrap = document.querySelector(\".product-info .product-label-wrapper\") || document.querySelector(\".product-label-wrapper\");\n    if (!wrap || wrap.getAttribute(\"data-bm-outlet\") === \"1\" || wrap.getAttribute(\"data-bm-pending\") === \"1\") return;\n    wrap.setAttribute(\"data-bm-pending\", \"1\");\n    var news = document.querySelectorAll(\".product-info .product-label--new, .product-gallery .product-label--new, .product-label-container .product-label--new\");\n    for (var n = 0; n \u003c news.length; n++) news[n].remove();\n    loadInfo(handle, function(info){\n      wrap.removeAttribute(\"data-bm-pending\");\n      wrap.setAttribute(\"data-bm-outlet\", \"1\");\n      var compare = info \u0026\u0026 info.c, price = info \u0026\u0026 info.p;\n      if (!(compare \u0026\u0026 price)) {\n        var was = document.querySelector(\".product-info .price__was, .price__was\");\n        var cur = document.querySelector(\".product-info .price__current, .price__current\");\n        function parseHu(t){\n          t = String(t || \"\").replace(\/\\s\/g, \"\").replace(\"Ft\", \"\").replace(\/\\.\/g, \"\").replace(\",\", \".\");\n          return parseFloat(t);\n        }\n        if (was \u0026\u0026 cur) { compare = parseHu(was.textContent); price = parseHu(cur.textContent); }\n      }\n      if (compare \u0026\u0026 price \u0026\u0026 Number(compare) \u003e Number(price) + 0.5) {\n        var pct = Math.round((1 - Number(price) \/ Number(compare)) * 100);\n        addLabel(wrap, \"product-label product-label--sale bm-label-sale\", pct \u003e 0 ? (\"Megtakarítás: \" + pct + \"%\") : \"Akció\");\n      }\n      var root = document.querySelector(\".product-info\") || document;\n      var qtyLabel = stockText((info \u0026\u0026 info.q) || 1);\n      var stock = dedupeStock(root);\n      if (stock) {\n        stock.textContent = qtyLabel;\n        stock.classList.add(\"product-label\", \"product-label--custom\", \"bm-stock-pulse\");\n      } else {\n        addLabel(wrap, \"product-label product-label--custom bm-stock-pulse\", qtyLabel);\n      }\n    });\n  }\n  function run(){\n    var cards = document.querySelectorAll(\"product-card\");\n    for (var i = 0; i \u003c cards.length; i++) enhanceCard(cards[i]);\n    if (document.body \u0026\u0026 document.body.className.indexOf(\"template-product\") !== -1) enhancePdp();\n    else if (location.pathname.indexOf(\"\/products\/\") !== -1) enhancePdp();\n  }\n  if (document.readyState === \"loading\") document.addEventListener(\"DOMContentLoaded\", run);\n  else run();\n  var t = null;\n  new MutationObserver(function(){\n    if (t) clearTimeout(t);\n    t = setTimeout(run, 80);\n  }).observe(document.documentElement, { childList: true, subtree: true });\n})();\u003c\/script\u003e\u003c!--\/bm-outlet-badges--\u003e\u003cp\u003eA J-line szék egy elegáns és praktikus bútordarab, amely kiválóan illeszkedik bármilyen enteriőrbe. Finom buklé szövet borítja, amely kényelmet és stílust egyaránt biztosít. Bézs és világosszürke színekben kapható, így könnyen kombinálható más bútorokkal. A szék vékony, fekete fa lábakkal rendelkezik, amelyek könnyed, és modern megjelenést kölcsönöznek neki, miközben stabilitást is biztosítanak.\u003c\/p\u003e","brand":"J-line Showroom","offers":[{"title":"Bézs","offer_id":57221828084036,"sku":"JL-50851-SR","price":68990.0,"currency_code":"HUF","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0803\/1381\/1268\/files\/20_6cc20a95-e26e-4207-a1e1-3d156196bc20.png?v=1768572601","url":"https:\/\/dutchhome.hu\/en\/products\/j-line-bukle-szek-ajanlat","provider":"Dutch Home","version":"1.0","type":"link"}