{"product_id":"billy-fa-gyerek-fesulkodo-asztal-ajanlat","title":"Billy fa gyerek fésülködő asztal","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 Billy gyerek bútorok egyik kiemelkedő tagja ez az elegáns, és praktikus fésülködő asztal. Egy fiókkal, ovális tükörrel, vékony, hosszú lábakkal és arany színű részletekkel rendelkezik. Letisztult és elegáns fehér színe miatt könnyen alkalmazkodik bármilyen enteriőrhöz, és dekorációhoz. Mérete 70x40x128.7cm.\u003c\/p\u003e","brand":"Vipack Showroom","offers":[{"title":"Fehér","offer_id":57221760254276,"sku":"VI-BIDT7014-SR","price":95990.0,"currency_code":"HUF","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0803\/1381\/1268\/files\/12_9f6ffe4f-b7c9-4cbc-8679-e842ce7b74b5.png?v=1736740372","url":"https:\/\/dutchhome.hu\/en\/products\/billy-fa-gyerek-fesulkodo-asztal-ajanlat","provider":"Dutch Home","version":"1.0","type":"link"}